i2c-brcmstb.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  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; /* slave 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. };
  147. /* register accessors for both be and le cpu arch */
  148. #ifdef CONFIG_CPU_BIG_ENDIAN
  149. #define __bsc_readl(_reg) ioread32be(_reg)
  150. #define __bsc_writel(_val, _reg) iowrite32be(_val, _reg)
  151. #else
  152. #define __bsc_readl(_reg) ioread32(_reg)
  153. #define __bsc_writel(_val, _reg) iowrite32(_val, _reg)
  154. #endif
  155. #define bsc_readl(_dev, _reg) \
  156. __bsc_readl(_dev->base + offsetof(struct bsc_regs, _reg))
  157. #define bsc_writel(_dev, _val, _reg) \
  158. __bsc_writel(_val, _dev->base + offsetof(struct bsc_regs, _reg))
  159. static inline int brcmstb_i2c_get_xfersz(struct brcmstb_i2c_dev *dev)
  160. {
  161. return (N_DATA_REGS * dev->data_regsz);
  162. }
  163. static inline int brcmstb_i2c_get_data_regsz(struct brcmstb_i2c_dev *dev)
  164. {
  165. return dev->data_regsz;
  166. }
  167. static void brcmstb_i2c_enable_disable_irq(struct brcmstb_i2c_dev *dev,
  168. bool int_en)
  169. {
  170. if (int_en)
  171. /* Enable BSC CTL interrupt line */
  172. dev->bsc_regmap->ctl_reg |= BSC_CTL_REG_INT_EN_MASK;
  173. else
  174. /* Disable BSC CTL interrupt line */
  175. dev->bsc_regmap->ctl_reg &= ~BSC_CTL_REG_INT_EN_MASK;
  176. barrier();
  177. bsc_writel(dev, dev->bsc_regmap->ctl_reg, ctl_reg);
  178. }
  179. static irqreturn_t brcmstb_i2c_isr(int irq, void *devid)
  180. {
  181. struct brcmstb_i2c_dev *dev = devid;
  182. u32 status_bsc_ctl = bsc_readl(dev, ctl_reg);
  183. u32 status_iic_intrp = bsc_readl(dev, iic_enable);
  184. dev_dbg(dev->device, "isr CTL_REG %x IIC_EN %x\n",
  185. status_bsc_ctl, status_iic_intrp);
  186. if (!(status_bsc_ctl & BSC_CTL_REG_INT_EN_MASK))
  187. return IRQ_NONE;
  188. brcmstb_i2c_enable_disable_irq(dev, INT_DISABLE);
  189. complete(&dev->done);
  190. dev_dbg(dev->device, "isr handled");
  191. return IRQ_HANDLED;
  192. }
  193. /* Wait for device to be ready */
  194. static int brcmstb_i2c_wait_if_busy(struct brcmstb_i2c_dev *dev)
  195. {
  196. unsigned long timeout = jiffies + msecs_to_jiffies(I2C_TIMEOUT);
  197. while ((bsc_readl(dev, iic_enable) & BSC_IIC_EN_INTRP_MASK)) {
  198. if (time_after(jiffies, timeout))
  199. return -ETIMEDOUT;
  200. cpu_relax();
  201. }
  202. return 0;
  203. }
  204. /* i2c xfer completion function, handles both irq and polling mode */
  205. static int brcmstb_i2c_wait_for_completion(struct brcmstb_i2c_dev *dev)
  206. {
  207. int ret = 0;
  208. unsigned long timeout = msecs_to_jiffies(I2C_TIMEOUT);
  209. if (dev->irq >= 0) {
  210. if (!wait_for_completion_timeout(&dev->done, timeout))
  211. ret = -ETIMEDOUT;
  212. } else {
  213. /* we are in polling mode */
  214. u32 bsc_intrp;
  215. unsigned long time_left = jiffies + timeout;
  216. do {
  217. bsc_intrp = bsc_readl(dev, iic_enable) &
  218. BSC_IIC_EN_INTRP_MASK;
  219. if (time_after(jiffies, time_left)) {
  220. ret = -ETIMEDOUT;
  221. break;
  222. }
  223. cpu_relax();
  224. } while (!bsc_intrp);
  225. }
  226. if (dev->irq < 0 || ret == -ETIMEDOUT)
  227. brcmstb_i2c_enable_disable_irq(dev, INT_DISABLE);
  228. return ret;
  229. }
  230. /* Set xfer START/STOP conditions for subsequent transfer */
  231. static void brcmstb_set_i2c_start_stop(struct brcmstb_i2c_dev *dev,
  232. u32 cond_flag)
  233. {
  234. u32 regval = dev->bsc_regmap->iic_enable;
  235. dev->bsc_regmap->iic_enable = (regval & ~COND_START_STOP) | cond_flag;
  236. }
  237. /* Send I2C request check completion */
  238. static int brcmstb_send_i2c_cmd(struct brcmstb_i2c_dev *dev,
  239. enum bsc_xfer_cmd cmd)
  240. {
  241. int rc = 0;
  242. struct bsc_regs *pi2creg = dev->bsc_regmap;
  243. /* Make sure the hardware is ready */
  244. rc = brcmstb_i2c_wait_if_busy(dev);
  245. if (rc < 0)
  246. return rc;
  247. /* only if we are in interrupt mode */
  248. if (dev->irq >= 0)
  249. reinit_completion(&dev->done);
  250. /* enable BSC CTL interrupt line */
  251. brcmstb_i2c_enable_disable_irq(dev, INT_ENABLE);
  252. /* initiate transfer by setting iic_enable */
  253. pi2creg->iic_enable |= BSC_IIC_EN_ENABLE_MASK;
  254. bsc_writel(dev, pi2creg->iic_enable, iic_enable);
  255. /* Wait for transaction to finish or timeout */
  256. rc = brcmstb_i2c_wait_for_completion(dev);
  257. if (rc) {
  258. dev_dbg(dev->device, "intr timeout for cmd %s\n",
  259. cmd_string[cmd]);
  260. goto cmd_out;
  261. }
  262. if ((cmd == CMD_RD || cmd == CMD_WR) &&
  263. bsc_readl(dev, iic_enable) & BSC_IIC_EN_NOACK_MASK) {
  264. rc = -EREMOTEIO;
  265. dev_dbg(dev->device, "controller received NOACK intr for %s\n",
  266. cmd_string[cmd]);
  267. }
  268. cmd_out:
  269. bsc_writel(dev, 0, cnt_reg);
  270. bsc_writel(dev, 0, iic_enable);
  271. return rc;
  272. }
  273. /* Actual data transfer through the BSC master */
  274. static int brcmstb_i2c_xfer_bsc_data(struct brcmstb_i2c_dev *dev,
  275. u8 *buf, unsigned int len,
  276. struct i2c_msg *pmsg)
  277. {
  278. int cnt, byte, i, rc;
  279. enum bsc_xfer_cmd cmd;
  280. u32 ctl_reg;
  281. struct bsc_regs *pi2creg = dev->bsc_regmap;
  282. int no_ack = pmsg->flags & I2C_M_IGNORE_NAK;
  283. int data_regsz = brcmstb_i2c_get_data_regsz(dev);
  284. /* see if the transaction needs to check NACK conditions */
  285. if (no_ack) {
  286. cmd = (pmsg->flags & I2C_M_RD) ? CMD_RD_NOACK
  287. : CMD_WR_NOACK;
  288. pi2creg->ctlhi_reg |= BSC_CTLHI_REG_IGNORE_ACK_MASK;
  289. } else {
  290. cmd = (pmsg->flags & I2C_M_RD) ? CMD_RD : CMD_WR;
  291. pi2creg->ctlhi_reg &= ~BSC_CTLHI_REG_IGNORE_ACK_MASK;
  292. }
  293. bsc_writel(dev, pi2creg->ctlhi_reg, ctlhi_reg);
  294. /* set data transfer direction */
  295. ctl_reg = pi2creg->ctl_reg & ~BSC_CTL_REG_DTF_MASK;
  296. if (cmd == CMD_WR || cmd == CMD_WR_NOACK)
  297. pi2creg->ctl_reg = ctl_reg | DTF_WR_MASK;
  298. else
  299. pi2creg->ctl_reg = ctl_reg | DTF_RD_MASK;
  300. /* set the read/write length */
  301. bsc_writel(dev, BSC_CNT_REG1_MASK(data_regsz) &
  302. (len << BSC_CNT_REG1_SHIFT), cnt_reg);
  303. /* Write data into data_in register */
  304. if (cmd == CMD_WR || cmd == CMD_WR_NOACK) {
  305. for (cnt = 0, i = 0; cnt < len; cnt += data_regsz, i++) {
  306. u32 word = 0;
  307. for (byte = 0; byte < data_regsz; byte++) {
  308. word >>= BITS_PER_BYTE;
  309. if ((cnt + byte) < len)
  310. word |= buf[cnt + byte] <<
  311. (BITS_PER_BYTE * (data_regsz - 1));
  312. }
  313. bsc_writel(dev, word, data_in[i]);
  314. }
  315. }
  316. /* Initiate xfer, the function will return on completion */
  317. rc = brcmstb_send_i2c_cmd(dev, cmd);
  318. if (rc != 0) {
  319. dev_dbg(dev->device, "%s failure", cmd_string[cmd]);
  320. return rc;
  321. }
  322. /* Read data from data_out register */
  323. if (cmd == CMD_RD || cmd == CMD_RD_NOACK) {
  324. for (cnt = 0, i = 0; cnt < len; cnt += data_regsz, i++) {
  325. u32 data = bsc_readl(dev, data_out[i]);
  326. for (byte = 0; byte < data_regsz &&
  327. (byte + cnt) < len; byte++) {
  328. buf[cnt + byte] = data & 0xff;
  329. data >>= BITS_PER_BYTE;
  330. }
  331. }
  332. }
  333. return 0;
  334. }
  335. /* Write a single byte of data to the i2c bus */
  336. static int brcmstb_i2c_write_data_byte(struct brcmstb_i2c_dev *dev,
  337. u8 *buf, unsigned int nak_expected)
  338. {
  339. enum bsc_xfer_cmd cmd = nak_expected ? CMD_WR : CMD_WR_NOACK;
  340. bsc_writel(dev, 1, cnt_reg);
  341. bsc_writel(dev, *buf, data_in);
  342. return brcmstb_send_i2c_cmd(dev, cmd);
  343. }
  344. /* Send i2c address */
  345. static int brcmstb_i2c_do_addr(struct brcmstb_i2c_dev *dev,
  346. struct i2c_msg *msg)
  347. {
  348. unsigned char addr;
  349. if (msg->flags & I2C_M_TEN) {
  350. /* First byte is 11110XX0 where XX is upper 2 bits */
  351. addr = 0xF0 | ((msg->addr & 0x300) >> 7);
  352. bsc_writel(dev, addr, chip_address);
  353. /* Second byte is the remaining 8 bits */
  354. addr = msg->addr & 0xFF;
  355. if (brcmstb_i2c_write_data_byte(dev, &addr, 0) < 0)
  356. return -EREMOTEIO;
  357. if (msg->flags & I2C_M_RD) {
  358. /* For read, send restart without stop condition */
  359. brcmstb_set_i2c_start_stop(dev, COND_RESTART
  360. | COND_NOSTOP);
  361. /* Then re-send the first byte with the read bit set */
  362. addr = 0xF0 | ((msg->addr & 0x300) >> 7) | 0x01;
  363. if (brcmstb_i2c_write_data_byte(dev, &addr, 0) < 0)
  364. return -EREMOTEIO;
  365. }
  366. } else {
  367. addr = i2c_8bit_addr_from_msg(msg);
  368. bsc_writel(dev, addr, chip_address);
  369. }
  370. return 0;
  371. }
  372. /* Master transfer function */
  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 slave 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 u32 brcmstb_i2c_functionality(struct i2c_adapter *adap)
  438. {
  439. return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR
  440. | I2C_FUNC_NOSTART | I2C_FUNC_PROTOCOL_MANGLING;
  441. }
  442. static const struct i2c_algorithm brcmstb_i2c_algo = {
  443. .master_xfer = brcmstb_i2c_xfer,
  444. .functionality = brcmstb_i2c_functionality,
  445. };
  446. static void brcmstb_i2c_set_bus_speed(struct brcmstb_i2c_dev *dev)
  447. {
  448. int i = 0, num_speeds = ARRAY_SIZE(bsc_clk);
  449. u32 clk_freq_hz = dev->clk_freq_hz;
  450. for (i = 0; i < num_speeds; i++) {
  451. if (bsc_clk[i].hz == clk_freq_hz) {
  452. dev->bsc_regmap->ctl_reg &= ~(BSC_CTL_REG_SCL_SEL_MASK
  453. | BSC_CTL_REG_DIV_CLK_MASK);
  454. dev->bsc_regmap->ctl_reg |= (bsc_clk[i].scl_mask |
  455. bsc_clk[i].div_mask);
  456. bsc_writel(dev, dev->bsc_regmap->ctl_reg, ctl_reg);
  457. break;
  458. }
  459. }
  460. /* in case we did not get find a valid speed */
  461. if (i == num_speeds) {
  462. i = (bsc_readl(dev, ctl_reg) & BSC_CTL_REG_SCL_SEL_MASK) >>
  463. BSC_CTL_REG_SCL_SEL_SHIFT;
  464. dev_warn(dev->device, "leaving current clock-frequency @ %dHz\n",
  465. bsc_clk[i].hz);
  466. }
  467. }
  468. static void brcmstb_i2c_set_bsc_reg_defaults(struct brcmstb_i2c_dev *dev)
  469. {
  470. if (brcmstb_i2c_get_data_regsz(dev) == sizeof(u32))
  471. /* set 4 byte data in/out xfers */
  472. dev->bsc_regmap->ctlhi_reg = BSC_CTLHI_REG_DATAREG_SIZE_MASK;
  473. else
  474. dev->bsc_regmap->ctlhi_reg &= ~BSC_CTLHI_REG_DATAREG_SIZE_MASK;
  475. bsc_writel(dev, dev->bsc_regmap->ctlhi_reg, ctlhi_reg);
  476. /* set bus speed */
  477. brcmstb_i2c_set_bus_speed(dev);
  478. }
  479. #define AUTOI2C_CTRL0 0x26c
  480. #define AUTOI2C_CTRL0_RELEASE_BSC BIT(1)
  481. static int bcm2711_release_bsc(struct brcmstb_i2c_dev *dev)
  482. {
  483. struct platform_device *pdev = to_platform_device(dev->device);
  484. struct resource *iomem;
  485. void __iomem *autoi2c;
  486. /* Map hardware registers */
  487. iomem = platform_get_resource_byname(pdev, IORESOURCE_MEM, "auto-i2c");
  488. autoi2c = devm_ioremap_resource(&pdev->dev, iomem);
  489. if (IS_ERR(autoi2c))
  490. return PTR_ERR(autoi2c);
  491. writel(AUTOI2C_CTRL0_RELEASE_BSC, autoi2c + AUTOI2C_CTRL0);
  492. devm_iounmap(&pdev->dev, autoi2c);
  493. /* We need to reset the controller after the release */
  494. dev->bsc_regmap->iic_enable = 0;
  495. bsc_writel(dev, dev->bsc_regmap->iic_enable, iic_enable);
  496. return 0;
  497. }
  498. static int brcmstb_i2c_probe(struct platform_device *pdev)
  499. {
  500. int rc = 0;
  501. struct brcmstb_i2c_dev *dev;
  502. struct i2c_adapter *adap;
  503. struct resource *iomem;
  504. const char *int_name;
  505. /* Allocate memory for private data structure */
  506. dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
  507. if (!dev)
  508. return -ENOMEM;
  509. dev->bsc_regmap = devm_kzalloc(&pdev->dev, sizeof(*dev->bsc_regmap), GFP_KERNEL);
  510. if (!dev->bsc_regmap)
  511. return -ENOMEM;
  512. platform_set_drvdata(pdev, dev);
  513. dev->device = &pdev->dev;
  514. init_completion(&dev->done);
  515. /* Map hardware registers */
  516. iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  517. dev->base = devm_ioremap_resource(dev->device, iomem);
  518. if (IS_ERR(dev->base)) {
  519. rc = -ENOMEM;
  520. goto probe_errorout;
  521. }
  522. if (of_device_is_compatible(dev->device->of_node,
  523. "brcm,bcm2711-hdmi-i2c")) {
  524. rc = bcm2711_release_bsc(dev);
  525. if (rc)
  526. goto probe_errorout;
  527. }
  528. rc = of_property_read_string(dev->device->of_node, "interrupt-names",
  529. &int_name);
  530. if (rc < 0)
  531. int_name = NULL;
  532. /* Get the interrupt number */
  533. dev->irq = platform_get_irq_optional(pdev, 0);
  534. /* disable the bsc interrupt line */
  535. brcmstb_i2c_enable_disable_irq(dev, INT_DISABLE);
  536. /* register the ISR handler */
  537. if (dev->irq >= 0) {
  538. rc = devm_request_irq(&pdev->dev, dev->irq, brcmstb_i2c_isr,
  539. IRQF_SHARED,
  540. int_name ? int_name : pdev->name,
  541. dev);
  542. if (rc) {
  543. dev_dbg(dev->device, "falling back to polling mode");
  544. dev->irq = -1;
  545. }
  546. }
  547. if (of_property_read_u32(dev->device->of_node,
  548. "clock-frequency", &dev->clk_freq_hz)) {
  549. dev_warn(dev->device, "setting clock-frequency@%dHz\n",
  550. bsc_clk[0].hz);
  551. dev->clk_freq_hz = bsc_clk[0].hz;
  552. }
  553. /* set the data in/out register size for compatible SoCs */
  554. if (of_device_is_compatible(dev->device->of_node,
  555. "brcm,brcmper-i2c"))
  556. dev->data_regsz = sizeof(u8);
  557. else
  558. dev->data_regsz = sizeof(u32);
  559. brcmstb_i2c_set_bsc_reg_defaults(dev);
  560. /* Add the i2c adapter */
  561. adap = &dev->adapter;
  562. i2c_set_adapdata(adap, dev);
  563. adap->owner = THIS_MODULE;
  564. strscpy(adap->name, dev_name(&pdev->dev), sizeof(adap->name));
  565. adap->algo = &brcmstb_i2c_algo;
  566. adap->dev.parent = &pdev->dev;
  567. adap->dev.of_node = pdev->dev.of_node;
  568. rc = i2c_add_adapter(adap);
  569. if (rc)
  570. goto probe_errorout;
  571. dev_info(dev->device, "%s@%dhz registered in %s mode\n",
  572. int_name ? int_name : " ", dev->clk_freq_hz,
  573. (dev->irq >= 0) ? "interrupt" : "polling");
  574. return 0;
  575. probe_errorout:
  576. return rc;
  577. }
  578. static int brcmstb_i2c_remove(struct platform_device *pdev)
  579. {
  580. struct brcmstb_i2c_dev *dev = platform_get_drvdata(pdev);
  581. i2c_del_adapter(&dev->adapter);
  582. return 0;
  583. }
  584. #ifdef CONFIG_PM_SLEEP
  585. static int brcmstb_i2c_suspend(struct device *dev)
  586. {
  587. struct brcmstb_i2c_dev *i2c_dev = dev_get_drvdata(dev);
  588. i2c_mark_adapter_suspended(&i2c_dev->adapter);
  589. return 0;
  590. }
  591. static int brcmstb_i2c_resume(struct device *dev)
  592. {
  593. struct brcmstb_i2c_dev *i2c_dev = dev_get_drvdata(dev);
  594. brcmstb_i2c_set_bsc_reg_defaults(i2c_dev);
  595. i2c_mark_adapter_resumed(&i2c_dev->adapter);
  596. return 0;
  597. }
  598. #endif
  599. static SIMPLE_DEV_PM_OPS(brcmstb_i2c_pm, brcmstb_i2c_suspend,
  600. brcmstb_i2c_resume);
  601. static const struct of_device_id brcmstb_i2c_of_match[] = {
  602. {.compatible = "brcm,brcmstb-i2c"},
  603. {.compatible = "brcm,brcmper-i2c"},
  604. {.compatible = "brcm,bcm2711-hdmi-i2c"},
  605. {},
  606. };
  607. MODULE_DEVICE_TABLE(of, brcmstb_i2c_of_match);
  608. static struct platform_driver brcmstb_i2c_driver = {
  609. .driver = {
  610. .name = "brcmstb-i2c",
  611. .of_match_table = brcmstb_i2c_of_match,
  612. .pm = &brcmstb_i2c_pm,
  613. },
  614. .probe = brcmstb_i2c_probe,
  615. .remove = brcmstb_i2c_remove,
  616. };
  617. module_platform_driver(brcmstb_i2c_driver);
  618. MODULE_AUTHOR("Kamal Dasu <[email protected]>");
  619. MODULE_DESCRIPTION("Broadcom Settop I2C Driver");
  620. MODULE_LICENSE("GPL v2");