i2c-brcmstb.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. // Copyright (C) 2014 Broadcom Corporation
  3. #include <linux/clk.h>
  4. #include <linux/delay.h>
  5. #include <linux/device.h>
  6. #include <linux/i2c.h>
  7. #include <linux/interrupt.h>
  8. #include <linux/io.h>
  9. #include <linux/kernel.h>
  10. #include <linux/module.h>
  11. #include <linux/platform_device.h>
  12. #include <linux/sched.h>
  13. #include <linux/slab.h>
  14. #define N_DATA_REGS 8
  15. /*
  16. * PER_I2C/BSC count register mask depends on 1 byte/4 byte data register
  17. * size. Cable modem and DSL SoCs with Peripheral i2c cores use 1 byte per
  18. * data register whereas STB SoCs use 4 byte per data register transfer,
  19. * account for this difference in total count per transaction and mask to
  20. * use.
  21. */
  22. #define BSC_CNT_REG1_MASK(nb) (nb == 1 ? GENMASK(3, 0) : GENMASK(5, 0))
  23. #define BSC_CNT_REG1_SHIFT 0
  24. /* BSC CTL register field definitions */
  25. #define BSC_CTL_REG_DTF_MASK 0x00000003
  26. #define BSC_CTL_REG_SCL_SEL_MASK 0x00000030
  27. #define BSC_CTL_REG_SCL_SEL_SHIFT 4
  28. #define BSC_CTL_REG_INT_EN_MASK 0x00000040
  29. #define BSC_CTL_REG_INT_EN_SHIFT 6
  30. #define BSC_CTL_REG_DIV_CLK_MASK 0x00000080
  31. /* BSC_IIC_ENABLE r/w enable and interrupt field definitions */
  32. #define BSC_IIC_EN_RESTART_MASK 0x00000040
  33. #define BSC_IIC_EN_NOSTART_MASK 0x00000020
  34. #define BSC_IIC_EN_NOSTOP_MASK 0x00000010
  35. #define BSC_IIC_EN_NOACK_MASK 0x00000004
  36. #define BSC_IIC_EN_INTRP_MASK 0x00000002
  37. #define BSC_IIC_EN_ENABLE_MASK 0x00000001
  38. /* BSC_CTLHI control register field definitions */
  39. #define BSC_CTLHI_REG_INPUT_SWITCHING_LEVEL_MASK 0x00000080
  40. #define BSC_CTLHI_REG_DATAREG_SIZE_MASK 0x00000040
  41. #define BSC_CTLHI_REG_IGNORE_ACK_MASK 0x00000002
  42. #define BSC_CTLHI_REG_WAIT_DIS_MASK 0x00000001
  43. #define I2C_TIMEOUT 100 /* msecs */
  44. /* Condition mask used for non combined transfer */
  45. #define COND_RESTART BSC_IIC_EN_RESTART_MASK
  46. #define COND_NOSTART BSC_IIC_EN_NOSTART_MASK
  47. #define COND_NOSTOP BSC_IIC_EN_NOSTOP_MASK
  48. #define COND_START_STOP (COND_RESTART | COND_NOSTART | COND_NOSTOP)
  49. /* BSC data transfer direction */
  50. #define DTF_WR_MASK 0x00000000
  51. #define DTF_RD_MASK 0x00000001
  52. /* BSC data transfer direction combined format */
  53. #define DTF_RD_WR_MASK 0x00000002
  54. #define DTF_WR_RD_MASK 0x00000003
  55. #define INT_ENABLE true
  56. #define INT_DISABLE false
  57. /* BSC block register map structure to cache fields to be written */
  58. struct bsc_regs {
  59. u32 chip_address; /* target address */
  60. u32 data_in[N_DATA_REGS]; /* tx data buffer*/
  61. u32 cnt_reg; /* rx/tx data length */
  62. u32 ctl_reg; /* control register */
  63. u32 iic_enable; /* xfer enable and status */
  64. u32 data_out[N_DATA_REGS]; /* rx data buffer */
  65. u32 ctlhi_reg; /* more control fields */
  66. u32 scl_param; /* reserved */
  67. };
  68. struct bsc_clk_param {
  69. u32 hz;
  70. u32 scl_mask;
  71. u32 div_mask;
  72. };
  73. enum bsc_xfer_cmd {
  74. CMD_WR,
  75. CMD_RD,
  76. CMD_WR_NOACK,
  77. CMD_RD_NOACK,
  78. };
  79. static char const *cmd_string[] = {
  80. [CMD_WR] = "WR",
  81. [CMD_RD] = "RD",
  82. [CMD_WR_NOACK] = "WR NOACK",
  83. [CMD_RD_NOACK] = "RD NOACK",
  84. };
  85. enum bus_speeds {
  86. SPD_375K,
  87. SPD_390K,
  88. SPD_187K,
  89. SPD_200K,
  90. SPD_93K,
  91. SPD_97K,
  92. SPD_46K,
  93. SPD_50K
  94. };
  95. static const struct bsc_clk_param bsc_clk[] = {
  96. [SPD_375K] = {
  97. .hz = 375000,
  98. .scl_mask = SPD_375K << BSC_CTL_REG_SCL_SEL_SHIFT,
  99. .div_mask = 0
  100. },
  101. [SPD_390K] = {
  102. .hz = 390000,
  103. .scl_mask = SPD_390K << BSC_CTL_REG_SCL_SEL_SHIFT,
  104. .div_mask = 0
  105. },
  106. [SPD_187K] = {
  107. .hz = 187500,
  108. .scl_mask = SPD_187K << BSC_CTL_REG_SCL_SEL_SHIFT,
  109. .div_mask = 0
  110. },
  111. [SPD_200K] = {
  112. .hz = 200000,
  113. .scl_mask = SPD_200K << BSC_CTL_REG_SCL_SEL_SHIFT,
  114. .div_mask = 0
  115. },
  116. [SPD_93K] = {
  117. .hz = 93750,
  118. .scl_mask = SPD_375K << BSC_CTL_REG_SCL_SEL_SHIFT,
  119. .div_mask = BSC_CTL_REG_DIV_CLK_MASK
  120. },
  121. [SPD_97K] = {
  122. .hz = 97500,
  123. .scl_mask = SPD_390K << BSC_CTL_REG_SCL_SEL_SHIFT,
  124. .div_mask = BSC_CTL_REG_DIV_CLK_MASK
  125. },
  126. [SPD_46K] = {
  127. .hz = 46875,
  128. .scl_mask = SPD_187K << BSC_CTL_REG_SCL_SEL_SHIFT,
  129. .div_mask = BSC_CTL_REG_DIV_CLK_MASK
  130. },
  131. [SPD_50K] = {
  132. .hz = 50000,
  133. .scl_mask = SPD_200K << BSC_CTL_REG_SCL_SEL_SHIFT,
  134. .div_mask = BSC_CTL_REG_DIV_CLK_MASK
  135. }
  136. };
  137. struct brcmstb_i2c_dev {
  138. struct device *device;
  139. void __iomem *base;
  140. int irq;
  141. struct bsc_regs *bsc_regmap;
  142. struct i2c_adapter adapter;
  143. struct completion done;
  144. u32 clk_freq_hz;
  145. int data_regsz;
  146. bool atomic;
  147. };
  148. /* register accessors for both be and le cpu arch */
  149. #ifdef CONFIG_CPU_BIG_ENDIAN
  150. #define __bsc_readl(_reg) ioread32be(_reg)
  151. #define __bsc_writel(_val, _reg) iowrite32be(_val, _reg)
  152. #else
  153. #define __bsc_readl(_reg) ioread32(_reg)
  154. #define __bsc_writel(_val, _reg) iowrite32(_val, _reg)
  155. #endif
  156. #define bsc_readl(_dev, _reg) \
  157. __bsc_readl(_dev->base + offsetof(struct bsc_regs, _reg))
  158. #define bsc_writel(_dev, _val, _reg) \
  159. __bsc_writel(_val, _dev->base + offsetof(struct bsc_regs, _reg))
  160. static inline int brcmstb_i2c_get_xfersz(struct brcmstb_i2c_dev *dev)
  161. {
  162. return (N_DATA_REGS * dev->data_regsz);
  163. }
  164. static inline int brcmstb_i2c_get_data_regsz(struct brcmstb_i2c_dev *dev)
  165. {
  166. return dev->data_regsz;
  167. }
  168. static void brcmstb_i2c_enable_disable_irq(struct brcmstb_i2c_dev *dev,
  169. bool int_en)
  170. {
  171. if (int_en)
  172. /* Enable BSC CTL interrupt line */
  173. dev->bsc_regmap->ctl_reg |= BSC_CTL_REG_INT_EN_MASK;
  174. else
  175. /* Disable BSC CTL interrupt line */
  176. dev->bsc_regmap->ctl_reg &= ~BSC_CTL_REG_INT_EN_MASK;
  177. barrier();
  178. bsc_writel(dev, dev->bsc_regmap->ctl_reg, ctl_reg);
  179. }
  180. static irqreturn_t brcmstb_i2c_isr(int irq, void *devid)
  181. {
  182. struct brcmstb_i2c_dev *dev = devid;
  183. u32 status_bsc_ctl = bsc_readl(dev, ctl_reg);
  184. u32 status_iic_intrp = bsc_readl(dev, iic_enable);
  185. dev_dbg(dev->device, "isr CTL_REG %x IIC_EN %x\n",
  186. status_bsc_ctl, status_iic_intrp);
  187. if (!(status_bsc_ctl & BSC_CTL_REG_INT_EN_MASK))
  188. return IRQ_NONE;
  189. brcmstb_i2c_enable_disable_irq(dev, INT_DISABLE);
  190. complete(&dev->done);
  191. dev_dbg(dev->device, "isr handled");
  192. return IRQ_HANDLED;
  193. }
  194. /* Wait for device to be ready */
  195. static int brcmstb_i2c_wait_if_busy(struct brcmstb_i2c_dev *dev)
  196. {
  197. unsigned long timeout = jiffies + msecs_to_jiffies(I2C_TIMEOUT);
  198. while ((bsc_readl(dev, iic_enable) & BSC_IIC_EN_INTRP_MASK)) {
  199. if (time_after(jiffies, timeout))
  200. return -ETIMEDOUT;
  201. cpu_relax();
  202. }
  203. return 0;
  204. }
  205. /* i2c xfer completion function, handles both irq and polling mode */
  206. static int brcmstb_i2c_wait_for_completion(struct brcmstb_i2c_dev *dev)
  207. {
  208. int ret = 0;
  209. unsigned long timeout = msecs_to_jiffies(I2C_TIMEOUT);
  210. if (dev->irq >= 0 && !dev->atomic) {
  211. if (!wait_for_completion_timeout(&dev->done, timeout))
  212. ret = -ETIMEDOUT;
  213. } else {
  214. /* we are in polling mode */
  215. u32 bsc_intrp;
  216. unsigned long time_left = jiffies + timeout;
  217. do {
  218. bsc_intrp = bsc_readl(dev, iic_enable) &
  219. BSC_IIC_EN_INTRP_MASK;
  220. if (time_after(jiffies, time_left)) {
  221. ret = -ETIMEDOUT;
  222. break;
  223. }
  224. cpu_relax();
  225. } while (!bsc_intrp);
  226. }
  227. if (dev->irq < 0 || ret == -ETIMEDOUT)
  228. brcmstb_i2c_enable_disable_irq(dev, INT_DISABLE);
  229. return ret;
  230. }
  231. /* Set xfer START/STOP conditions for subsequent transfer */
  232. static void brcmstb_set_i2c_start_stop(struct brcmstb_i2c_dev *dev,
  233. u32 cond_flag)
  234. {
  235. u32 regval = dev->bsc_regmap->iic_enable;
  236. dev->bsc_regmap->iic_enable = (regval & ~COND_START_STOP) | cond_flag;
  237. }
  238. /* Send I2C request check completion */
  239. static int brcmstb_send_i2c_cmd(struct brcmstb_i2c_dev *dev,
  240. enum bsc_xfer_cmd cmd)
  241. {
  242. int rc = 0;
  243. struct bsc_regs *pi2creg = dev->bsc_regmap;
  244. /* Make sure the hardware is ready */
  245. rc = brcmstb_i2c_wait_if_busy(dev);
  246. if (rc < 0)
  247. return rc;
  248. /* only if we are in interrupt mode */
  249. if (dev->irq >= 0 && !dev->atomic)
  250. reinit_completion(&dev->done);
  251. /* enable BSC CTL interrupt line */
  252. brcmstb_i2c_enable_disable_irq(dev, INT_ENABLE);
  253. /* initiate transfer by setting iic_enable */
  254. pi2creg->iic_enable |= BSC_IIC_EN_ENABLE_MASK;
  255. bsc_writel(dev, pi2creg->iic_enable, iic_enable);
  256. /* Wait for transaction to finish or timeout */
  257. rc = brcmstb_i2c_wait_for_completion(dev);
  258. if (rc) {
  259. dev_dbg(dev->device, "intr timeout for cmd %s\n",
  260. cmd_string[cmd]);
  261. goto cmd_out;
  262. }
  263. if ((cmd == CMD_RD || cmd == CMD_WR) &&
  264. bsc_readl(dev, iic_enable) & BSC_IIC_EN_NOACK_MASK) {
  265. rc = -EREMOTEIO;
  266. dev_dbg(dev->device, "controller received NOACK intr for %s\n",
  267. cmd_string[cmd]);
  268. }
  269. cmd_out:
  270. bsc_writel(dev, 0, cnt_reg);
  271. bsc_writel(dev, 0, iic_enable);
  272. return rc;
  273. }
  274. /* Actual data transfer through the BSC controller */
  275. static int brcmstb_i2c_xfer_bsc_data(struct brcmstb_i2c_dev *dev,
  276. u8 *buf, unsigned int len,
  277. struct i2c_msg *pmsg)
  278. {
  279. int cnt, byte, i, rc;
  280. enum bsc_xfer_cmd cmd;
  281. u32 ctl_reg;
  282. struct bsc_regs *pi2creg = dev->bsc_regmap;
  283. int no_ack = pmsg->flags & I2C_M_IGNORE_NAK;
  284. int data_regsz = brcmstb_i2c_get_data_regsz(dev);
  285. /* see if the transaction needs to check NACK conditions */
  286. if (no_ack) {
  287. cmd = (pmsg->flags & I2C_M_RD) ? CMD_RD_NOACK
  288. : CMD_WR_NOACK;
  289. pi2creg->ctlhi_reg |= BSC_CTLHI_REG_IGNORE_ACK_MASK;
  290. } else {
  291. cmd = (pmsg->flags & I2C_M_RD) ? CMD_RD : CMD_WR;
  292. pi2creg->ctlhi_reg &= ~BSC_CTLHI_REG_IGNORE_ACK_MASK;
  293. }
  294. bsc_writel(dev, pi2creg->ctlhi_reg, ctlhi_reg);
  295. /* set data transfer direction */
  296. ctl_reg = pi2creg->ctl_reg & ~BSC_CTL_REG_DTF_MASK;
  297. if (cmd == CMD_WR || cmd == CMD_WR_NOACK)
  298. pi2creg->ctl_reg = ctl_reg | DTF_WR_MASK;
  299. else
  300. pi2creg->ctl_reg = ctl_reg | DTF_RD_MASK;
  301. /* set the read/write length */
  302. bsc_writel(dev, BSC_CNT_REG1_MASK(data_regsz) &
  303. (len << BSC_CNT_REG1_SHIFT), cnt_reg);
  304. /* Write data into data_in register */
  305. if (cmd == CMD_WR || cmd == CMD_WR_NOACK) {
  306. for (cnt = 0, i = 0; cnt < len; cnt += data_regsz, i++) {
  307. u32 word = 0;
  308. for (byte = 0; byte < data_regsz; byte++) {
  309. word >>= BITS_PER_BYTE;
  310. if ((cnt + byte) < len)
  311. word |= buf[cnt + byte] <<
  312. (BITS_PER_BYTE * (data_regsz - 1));
  313. }
  314. bsc_writel(dev, word, data_in[i]);
  315. }
  316. }
  317. /* Initiate xfer, the function will return on completion */
  318. rc = brcmstb_send_i2c_cmd(dev, cmd);
  319. if (rc != 0) {
  320. dev_dbg(dev->device, "%s failure", cmd_string[cmd]);
  321. return rc;
  322. }
  323. /* Read data from data_out register */
  324. if (cmd == CMD_RD || cmd == CMD_RD_NOACK) {
  325. for (cnt = 0, i = 0; cnt < len; cnt += data_regsz, i++) {
  326. u32 data = bsc_readl(dev, data_out[i]);
  327. for (byte = 0; byte < data_regsz &&
  328. (byte + cnt) < len; byte++) {
  329. buf[cnt + byte] = data & 0xff;
  330. data >>= BITS_PER_BYTE;
  331. }
  332. }
  333. }
  334. return 0;
  335. }
  336. /* Write a single byte of data to the i2c bus */
  337. static int brcmstb_i2c_write_data_byte(struct brcmstb_i2c_dev *dev,
  338. u8 *buf, unsigned int nak_expected)
  339. {
  340. enum bsc_xfer_cmd cmd = nak_expected ? CMD_WR : CMD_WR_NOACK;
  341. bsc_writel(dev, 1, cnt_reg);
  342. bsc_writel(dev, *buf, data_in);
  343. return brcmstb_send_i2c_cmd(dev, cmd);
  344. }
  345. /* Send i2c address */
  346. static int brcmstb_i2c_do_addr(struct brcmstb_i2c_dev *dev,
  347. struct i2c_msg *msg)
  348. {
  349. unsigned char addr;
  350. if (msg->flags & I2C_M_TEN) {
  351. /* First byte is 11110XX0 where XX is upper 2 bits */
  352. addr = 0xF0 | ((msg->addr & 0x300) >> 7);
  353. bsc_writel(dev, addr, chip_address);
  354. /* Second byte is the remaining 8 bits */
  355. addr = msg->addr & 0xFF;
  356. if (brcmstb_i2c_write_data_byte(dev, &addr, 0) < 0)
  357. return -EREMOTEIO;
  358. if (msg->flags & I2C_M_RD) {
  359. /* For read, send restart without stop condition */
  360. brcmstb_set_i2c_start_stop(dev, COND_RESTART
  361. | COND_NOSTOP);
  362. /* Then re-send the first byte with the read bit set */
  363. addr = 0xF0 | ((msg->addr & 0x300) >> 7) | 0x01;
  364. if (brcmstb_i2c_write_data_byte(dev, &addr, 0) < 0)
  365. return -EREMOTEIO;
  366. }
  367. } else {
  368. addr = i2c_8bit_addr_from_msg(msg);
  369. bsc_writel(dev, addr, chip_address);
  370. }
  371. return 0;
  372. }
  373. static int brcmstb_i2c_xfer(struct i2c_adapter *adapter,
  374. struct i2c_msg msgs[], int num)
  375. {
  376. struct brcmstb_i2c_dev *dev = i2c_get_adapdata(adapter);
  377. struct i2c_msg *pmsg;
  378. int rc = 0;
  379. int i;
  380. int bytes_to_xfer;
  381. u8 *tmp_buf;
  382. int len = 0;
  383. int xfersz = brcmstb_i2c_get_xfersz(dev);
  384. u32 cond, cond_per_msg;
  385. /* Loop through all messages */
  386. for (i = 0; i < num; i++) {
  387. pmsg = &msgs[i];
  388. len = pmsg->len;
  389. tmp_buf = pmsg->buf;
  390. dev_dbg(dev->device,
  391. "msg# %d/%d flg %x buf %x len %d\n", i,
  392. num - 1, pmsg->flags,
  393. pmsg->buf ? pmsg->buf[0] : '0', pmsg->len);
  394. if (i < (num - 1) && (msgs[i + 1].flags & I2C_M_NOSTART))
  395. cond = ~COND_START_STOP;
  396. else
  397. cond = COND_RESTART | COND_NOSTOP;
  398. brcmstb_set_i2c_start_stop(dev, cond);
  399. /* Send target address */
  400. if (!(pmsg->flags & I2C_M_NOSTART)) {
  401. rc = brcmstb_i2c_do_addr(dev, pmsg);
  402. if (rc < 0) {
  403. dev_dbg(dev->device,
  404. "NACK for addr %2.2x msg#%d rc = %d\n",
  405. pmsg->addr, i, rc);
  406. goto out;
  407. }
  408. }
  409. cond_per_msg = cond;
  410. /* Perform data transfer */
  411. while (len) {
  412. bytes_to_xfer = min(len, xfersz);
  413. if (len <= xfersz) {
  414. if (i == (num - 1))
  415. cond_per_msg = cond_per_msg &
  416. ~(COND_RESTART | COND_NOSTOP);
  417. else
  418. cond_per_msg = cond;
  419. } else {
  420. cond_per_msg = (cond_per_msg & ~COND_RESTART) |
  421. COND_NOSTOP;
  422. }
  423. brcmstb_set_i2c_start_stop(dev, cond_per_msg);
  424. rc = brcmstb_i2c_xfer_bsc_data(dev, tmp_buf,
  425. bytes_to_xfer, pmsg);
  426. if (rc < 0)
  427. goto out;
  428. len -= bytes_to_xfer;
  429. tmp_buf += bytes_to_xfer;
  430. cond_per_msg = COND_NOSTART | COND_NOSTOP;
  431. }
  432. }
  433. rc = num;
  434. out:
  435. return rc;
  436. }
  437. static int brcmstb_i2c_xfer_atomic(struct i2c_adapter *adapter,
  438. struct i2c_msg msgs[], int num)
  439. {
  440. struct brcmstb_i2c_dev *dev = i2c_get_adapdata(adapter);
  441. int ret;
  442. if (dev->irq >= 0)
  443. disable_irq(dev->irq);
  444. dev->atomic = true;
  445. ret = brcmstb_i2c_xfer(adapter, msgs, num);
  446. dev->atomic = false;
  447. if (dev->irq >= 0)
  448. enable_irq(dev->irq);
  449. return ret;
  450. }
  451. static u32 brcmstb_i2c_functionality(struct i2c_adapter *adap)
  452. {
  453. return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR
  454. | I2C_FUNC_NOSTART | I2C_FUNC_PROTOCOL_MANGLING;
  455. }
  456. static const struct i2c_algorithm brcmstb_i2c_algo = {
  457. .xfer = brcmstb_i2c_xfer,
  458. .xfer_atomic = brcmstb_i2c_xfer_atomic,
  459. .functionality = brcmstb_i2c_functionality,
  460. };
  461. static void brcmstb_i2c_set_bus_speed(struct brcmstb_i2c_dev *dev)
  462. {
  463. int i = 0, num_speeds = ARRAY_SIZE(bsc_clk);
  464. u32 clk_freq_hz = dev->clk_freq_hz;
  465. for (i = 0; i < num_speeds; i++) {
  466. if (bsc_clk[i].hz == clk_freq_hz) {
  467. dev->bsc_regmap->ctl_reg &= ~(BSC_CTL_REG_SCL_SEL_MASK
  468. | BSC_CTL_REG_DIV_CLK_MASK);
  469. dev->bsc_regmap->ctl_reg |= (bsc_clk[i].scl_mask |
  470. bsc_clk[i].div_mask);
  471. bsc_writel(dev, dev->bsc_regmap->ctl_reg, ctl_reg);
  472. break;
  473. }
  474. }
  475. /* in case we did not get find a valid speed */
  476. if (i == num_speeds) {
  477. i = (bsc_readl(dev, ctl_reg) & BSC_CTL_REG_SCL_SEL_MASK) >>
  478. BSC_CTL_REG_SCL_SEL_SHIFT;
  479. dev_warn(dev->device, "leaving current clock-frequency @ %dHz\n",
  480. bsc_clk[i].hz);
  481. }
  482. }
  483. static void brcmstb_i2c_set_bsc_reg_defaults(struct brcmstb_i2c_dev *dev)
  484. {
  485. if (brcmstb_i2c_get_data_regsz(dev) == sizeof(u32))
  486. /* set 4 byte data in/out xfers */
  487. dev->bsc_regmap->ctlhi_reg = BSC_CTLHI_REG_DATAREG_SIZE_MASK;
  488. else
  489. dev->bsc_regmap->ctlhi_reg &= ~BSC_CTLHI_REG_DATAREG_SIZE_MASK;
  490. bsc_writel(dev, dev->bsc_regmap->ctlhi_reg, ctlhi_reg);
  491. /* set bus speed */
  492. brcmstb_i2c_set_bus_speed(dev);
  493. }
  494. #define AUTOI2C_CTRL0 0x26c
  495. #define AUTOI2C_CTRL0_RELEASE_BSC BIT(1)
  496. static int bcm2711_release_bsc(struct brcmstb_i2c_dev *dev)
  497. {
  498. struct platform_device *pdev = to_platform_device(dev->device);
  499. void __iomem *autoi2c;
  500. /* Map hardware registers */
  501. autoi2c = devm_platform_ioremap_resource_byname(pdev, "auto-i2c");
  502. if (IS_ERR(autoi2c))
  503. return PTR_ERR(autoi2c);
  504. writel(AUTOI2C_CTRL0_RELEASE_BSC, autoi2c + AUTOI2C_CTRL0);
  505. devm_iounmap(&pdev->dev, autoi2c);
  506. /* We need to reset the controller after the release */
  507. dev->bsc_regmap->iic_enable = 0;
  508. bsc_writel(dev, dev->bsc_regmap->iic_enable, iic_enable);
  509. return 0;
  510. }
  511. static int brcmstb_i2c_probe(struct platform_device *pdev)
  512. {
  513. struct brcmstb_i2c_dev *dev;
  514. struct i2c_adapter *adap;
  515. const char *int_name;
  516. int rc;
  517. /* Allocate memory for private data structure */
  518. dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
  519. if (!dev)
  520. return -ENOMEM;
  521. dev->bsc_regmap = devm_kzalloc(&pdev->dev, sizeof(*dev->bsc_regmap), GFP_KERNEL);
  522. if (!dev->bsc_regmap)
  523. return -ENOMEM;
  524. platform_set_drvdata(pdev, dev);
  525. dev->device = &pdev->dev;
  526. init_completion(&dev->done);
  527. /* Map hardware registers */
  528. dev->base = devm_platform_ioremap_resource(pdev, 0);
  529. if (IS_ERR(dev->base))
  530. return PTR_ERR(dev->base);
  531. if (of_device_is_compatible(dev->device->of_node,
  532. "brcm,bcm2711-hdmi-i2c")) {
  533. rc = bcm2711_release_bsc(dev);
  534. if (rc)
  535. return rc;
  536. }
  537. rc = of_property_read_string(dev->device->of_node, "interrupt-names",
  538. &int_name);
  539. if (rc < 0)
  540. int_name = NULL;
  541. /* Get the interrupt number */
  542. dev->irq = platform_get_irq_optional(pdev, 0);
  543. /* disable the bsc interrupt line */
  544. brcmstb_i2c_enable_disable_irq(dev, INT_DISABLE);
  545. /* register the ISR handler */
  546. if (dev->irq >= 0) {
  547. rc = devm_request_irq(&pdev->dev, dev->irq, brcmstb_i2c_isr,
  548. IRQF_SHARED,
  549. int_name ? int_name : pdev->name,
  550. dev);
  551. if (rc) {
  552. dev_dbg(dev->device, "falling back to polling mode");
  553. dev->irq = -1;
  554. }
  555. }
  556. if (of_property_read_u32(dev->device->of_node,
  557. "clock-frequency", &dev->clk_freq_hz)) {
  558. dev_warn(dev->device, "setting clock-frequency@%dHz\n",
  559. bsc_clk[0].hz);
  560. dev->clk_freq_hz = bsc_clk[0].hz;
  561. }
  562. /* set the data in/out register size for compatible SoCs */
  563. if (of_device_is_compatible(dev->device->of_node,
  564. "brcm,brcmper-i2c"))
  565. dev->data_regsz = sizeof(u8);
  566. else
  567. dev->data_regsz = sizeof(u32);
  568. brcmstb_i2c_set_bsc_reg_defaults(dev);
  569. /* Add the i2c adapter */
  570. adap = &dev->adapter;
  571. i2c_set_adapdata(adap, dev);
  572. adap->owner = THIS_MODULE;
  573. strscpy(adap->name, dev_name(&pdev->dev), sizeof(adap->name));
  574. adap->algo = &brcmstb_i2c_algo;
  575. adap->dev.parent = &pdev->dev;
  576. adap->dev.of_node = pdev->dev.of_node;
  577. rc = i2c_add_adapter(adap);
  578. if (rc)
  579. return rc;
  580. dev_info(dev->device, "%s@%dhz registered in %s mode\n",
  581. int_name ? int_name : " ", dev->clk_freq_hz,
  582. (dev->irq >= 0) ? "interrupt" : "polling");
  583. return 0;
  584. }
  585. static void brcmstb_i2c_remove(struct platform_device *pdev)
  586. {
  587. struct brcmstb_i2c_dev *dev = platform_get_drvdata(pdev);
  588. i2c_del_adapter(&dev->adapter);
  589. }
  590. static int brcmstb_i2c_suspend(struct device *dev)
  591. {
  592. struct brcmstb_i2c_dev *i2c_dev = dev_get_drvdata(dev);
  593. i2c_mark_adapter_suspended(&i2c_dev->adapter);
  594. return 0;
  595. }
  596. static int brcmstb_i2c_resume(struct device *dev)
  597. {
  598. struct brcmstb_i2c_dev *i2c_dev = dev_get_drvdata(dev);
  599. brcmstb_i2c_set_bsc_reg_defaults(i2c_dev);
  600. i2c_mark_adapter_resumed(&i2c_dev->adapter);
  601. return 0;
  602. }
  603. static DEFINE_SIMPLE_DEV_PM_OPS(brcmstb_i2c_pm, brcmstb_i2c_suspend,
  604. brcmstb_i2c_resume);
  605. static const struct of_device_id brcmstb_i2c_of_match[] = {
  606. {.compatible = "brcm,brcmstb-i2c"},
  607. {.compatible = "brcm,brcmper-i2c"},
  608. {.compatible = "brcm,bcm2711-hdmi-i2c"},
  609. {},
  610. };
  611. MODULE_DEVICE_TABLE(of, brcmstb_i2c_of_match);
  612. static struct platform_driver brcmstb_i2c_driver = {
  613. .driver = {
  614. .name = "brcmstb-i2c",
  615. .of_match_table = brcmstb_i2c_of_match,
  616. .pm = pm_sleep_ptr(&brcmstb_i2c_pm),
  617. },
  618. .probe = brcmstb_i2c_probe,
  619. .remove_new = brcmstb_i2c_remove,
  620. };
  621. module_platform_driver(brcmstb_i2c_driver);
  622. MODULE_AUTHOR("Kamal Dasu <kdasu@broadcom.com>");
  623. MODULE_DESCRIPTION("Broadcom Settop I2C Driver");
  624. MODULE_LICENSE("GPL v2");