i2c-brcmstb.c 19 KB

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