i2c-designware-master.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729
  1. /*
  2. * Synopsys DesignWare I2C adapter driver (master only).
  3. *
  4. * Based on the TI DAVINCI I2C adapter driver.
  5. *
  6. * Copyright (C) 2006 Texas Instruments.
  7. * Copyright (C) 2007 MontaVista Software Inc.
  8. * Copyright (C) 2009 Provigent Ltd.
  9. *
  10. * ----------------------------------------------------------------------------
  11. *
  12. * This program is free software; you can redistribute it and/or modify
  13. * it under the terms of the GNU General Public License as published by
  14. * the Free Software Foundation; either version 2 of the License, or
  15. * (at your option) any later version.
  16. *
  17. * This program is distributed in the hope that it will be useful,
  18. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  20. * GNU General Public License for more details.
  21. * ----------------------------------------------------------------------------
  22. *
  23. */
  24. #include <linux/delay.h>
  25. #include <linux/err.h>
  26. #include <linux/errno.h>
  27. #include <linux/export.h>
  28. #include <linux/gpio/consumer.h>
  29. #include <linux/i2c.h>
  30. #include <linux/interrupt.h>
  31. #include <linux/io.h>
  32. #include <linux/module.h>
  33. #include <linux/pm_runtime.h>
  34. #include <linux/reset.h>
  35. #include "i2c-designware-core.h"
  36. static void i2c_dw_configure_fifo_master(struct dw_i2c_dev *dev)
  37. {
  38. /* Configure Tx/Rx FIFO threshold levels */
  39. dw_writel(dev, dev->tx_fifo_depth / 2, DW_IC_TX_TL);
  40. dw_writel(dev, 0, DW_IC_RX_TL);
  41. /* Configure the I2C master */
  42. dw_writel(dev, dev->master_cfg, DW_IC_CON);
  43. }
  44. /**
  45. * i2c_dw_init() - Initialize the designware I2C master hardware
  46. * @dev: device private data
  47. *
  48. * This functions configures and enables the I2C master.
  49. * This function is called during I2C init function, and in case of timeout at
  50. * run time.
  51. */
  52. static int i2c_dw_init_master(struct dw_i2c_dev *dev)
  53. {
  54. u32 hcnt, lcnt;
  55. u32 reg, comp_param1;
  56. u32 sda_falling_time, scl_falling_time;
  57. int ret;
  58. ret = i2c_dw_acquire_lock(dev);
  59. if (ret)
  60. return ret;
  61. reg = dw_readl(dev, DW_IC_COMP_TYPE);
  62. if (reg == ___constant_swab32(DW_IC_COMP_TYPE_VALUE)) {
  63. /* Configure register endianess access */
  64. dev->flags |= ACCESS_SWAP;
  65. } else if (reg == (DW_IC_COMP_TYPE_VALUE & 0x0000ffff)) {
  66. /* Configure register access mode 16bit */
  67. dev->flags |= ACCESS_16BIT;
  68. } else if (reg != DW_IC_COMP_TYPE_VALUE) {
  69. dev_err(dev->dev,
  70. "Unknown Synopsys component type: 0x%08x\n", reg);
  71. i2c_dw_release_lock(dev);
  72. return -ENODEV;
  73. }
  74. comp_param1 = dw_readl(dev, DW_IC_COMP_PARAM_1);
  75. /* Disable the adapter */
  76. __i2c_dw_enable_and_wait(dev, false);
  77. /* Set standard and fast speed deviders for high/low periods */
  78. sda_falling_time = dev->sda_falling_time ?: 300; /* ns */
  79. scl_falling_time = dev->scl_falling_time ?: 300; /* ns */
  80. /* Set SCL timing parameters for standard-mode */
  81. if (dev->ss_hcnt && dev->ss_lcnt) {
  82. hcnt = dev->ss_hcnt;
  83. lcnt = dev->ss_lcnt;
  84. } else {
  85. hcnt = i2c_dw_scl_hcnt(i2c_dw_clk_rate(dev),
  86. 4000, /* tHD;STA = tHIGH = 4.0 us */
  87. sda_falling_time,
  88. 0, /* 0: DW default, 1: Ideal */
  89. 0); /* No offset */
  90. lcnt = i2c_dw_scl_lcnt(i2c_dw_clk_rate(dev),
  91. 4700, /* tLOW = 4.7 us */
  92. scl_falling_time,
  93. 0); /* No offset */
  94. }
  95. dw_writel(dev, hcnt, DW_IC_SS_SCL_HCNT);
  96. dw_writel(dev, lcnt, DW_IC_SS_SCL_LCNT);
  97. dev_dbg(dev->dev, "Standard-mode HCNT:LCNT = %d:%d\n", hcnt, lcnt);
  98. /* Set SCL timing parameters for fast-mode or fast-mode plus */
  99. if ((dev->clk_freq == 1000000) && dev->fp_hcnt && dev->fp_lcnt) {
  100. hcnt = dev->fp_hcnt;
  101. lcnt = dev->fp_lcnt;
  102. } else if (dev->fs_hcnt && dev->fs_lcnt) {
  103. hcnt = dev->fs_hcnt;
  104. lcnt = dev->fs_lcnt;
  105. } else {
  106. hcnt = i2c_dw_scl_hcnt(i2c_dw_clk_rate(dev),
  107. 600, /* tHD;STA = tHIGH = 0.6 us */
  108. sda_falling_time,
  109. 0, /* 0: DW default, 1: Ideal */
  110. 0); /* No offset */
  111. lcnt = i2c_dw_scl_lcnt(i2c_dw_clk_rate(dev),
  112. 1300, /* tLOW = 1.3 us */
  113. scl_falling_time,
  114. 0); /* No offset */
  115. }
  116. dw_writel(dev, hcnt, DW_IC_FS_SCL_HCNT);
  117. dw_writel(dev, lcnt, DW_IC_FS_SCL_LCNT);
  118. dev_dbg(dev->dev, "Fast-mode HCNT:LCNT = %d:%d\n", hcnt, lcnt);
  119. if ((dev->master_cfg & DW_IC_CON_SPEED_MASK) ==
  120. DW_IC_CON_SPEED_HIGH) {
  121. if ((comp_param1 & DW_IC_COMP_PARAM_1_SPEED_MODE_MASK)
  122. != DW_IC_COMP_PARAM_1_SPEED_MODE_HIGH) {
  123. dev_err(dev->dev, "High Speed not supported!\n");
  124. dev->master_cfg &= ~DW_IC_CON_SPEED_MASK;
  125. dev->master_cfg |= DW_IC_CON_SPEED_FAST;
  126. } else if (dev->hs_hcnt && dev->hs_lcnt) {
  127. hcnt = dev->hs_hcnt;
  128. lcnt = dev->hs_lcnt;
  129. dw_writel(dev, hcnt, DW_IC_HS_SCL_HCNT);
  130. dw_writel(dev, lcnt, DW_IC_HS_SCL_LCNT);
  131. dev_dbg(dev->dev, "HighSpeed-mode HCNT:LCNT = %d:%d\n",
  132. hcnt, lcnt);
  133. }
  134. }
  135. /* Configure SDA Hold Time if required */
  136. reg = dw_readl(dev, DW_IC_COMP_VERSION);
  137. if (reg >= DW_IC_SDA_HOLD_MIN_VERS) {
  138. if (!dev->sda_hold_time) {
  139. /* Keep previous hold time setting if no one set it */
  140. dev->sda_hold_time = dw_readl(dev, DW_IC_SDA_HOLD);
  141. }
  142. /*
  143. * Workaround for avoiding TX arbitration lost in case I2C
  144. * slave pulls SDA down "too quickly" after falling egde of
  145. * SCL by enabling non-zero SDA RX hold. Specification says it
  146. * extends incoming SDA low to high transition while SCL is
  147. * high but it apprears to help also above issue.
  148. */
  149. if (!(dev->sda_hold_time & DW_IC_SDA_HOLD_RX_MASK))
  150. dev->sda_hold_time |= 1 << DW_IC_SDA_HOLD_RX_SHIFT;
  151. dw_writel(dev, dev->sda_hold_time, DW_IC_SDA_HOLD);
  152. } else if (dev->sda_hold_time) {
  153. dev_warn(dev->dev,
  154. "Hardware too old to adjust SDA hold time.\n");
  155. }
  156. i2c_dw_configure_fifo_master(dev);
  157. i2c_dw_release_lock(dev);
  158. return 0;
  159. }
  160. static void i2c_dw_xfer_init(struct dw_i2c_dev *dev)
  161. {
  162. struct i2c_msg *msgs = dev->msgs;
  163. u32 ic_con, ic_tar = 0;
  164. /* Disable the adapter */
  165. __i2c_dw_enable_and_wait(dev, false);
  166. /* If the slave address is ten bit address, enable 10BITADDR */
  167. ic_con = dw_readl(dev, DW_IC_CON);
  168. if (msgs[dev->msg_write_idx].flags & I2C_M_TEN) {
  169. ic_con |= DW_IC_CON_10BITADDR_MASTER;
  170. /*
  171. * If I2C_DYNAMIC_TAR_UPDATE is set, the 10-bit addressing
  172. * mode has to be enabled via bit 12 of IC_TAR register.
  173. * We set it always as I2C_DYNAMIC_TAR_UPDATE can't be
  174. * detected from registers.
  175. */
  176. ic_tar = DW_IC_TAR_10BITADDR_MASTER;
  177. } else {
  178. ic_con &= ~DW_IC_CON_10BITADDR_MASTER;
  179. }
  180. dw_writel(dev, ic_con, DW_IC_CON);
  181. /*
  182. * Set the slave (target) address and enable 10-bit addressing mode
  183. * if applicable.
  184. */
  185. dw_writel(dev, msgs[dev->msg_write_idx].addr | ic_tar, DW_IC_TAR);
  186. /* Enforce disabled interrupts (due to HW issues) */
  187. i2c_dw_disable_int(dev);
  188. /* Enable the adapter */
  189. __i2c_dw_enable_and_wait(dev, true);
  190. /* Clear and enable interrupts */
  191. dw_readl(dev, DW_IC_CLR_INTR);
  192. dw_writel(dev, DW_IC_INTR_MASTER_MASK, DW_IC_INTR_MASK);
  193. }
  194. /*
  195. * Initiate (and continue) low level master read/write transaction.
  196. * This function is only called from i2c_dw_isr, and pumping i2c_msg
  197. * messages into the tx buffer. Even if the size of i2c_msg data is
  198. * longer than the size of the tx buffer, it handles everything.
  199. */
  200. static void
  201. i2c_dw_xfer_msg(struct dw_i2c_dev *dev)
  202. {
  203. struct i2c_msg *msgs = dev->msgs;
  204. u32 intr_mask;
  205. int tx_limit, rx_limit;
  206. u32 addr = msgs[dev->msg_write_idx].addr;
  207. u32 buf_len = dev->tx_buf_len;
  208. u8 *buf = dev->tx_buf;
  209. bool need_restart = false;
  210. intr_mask = DW_IC_INTR_MASTER_MASK;
  211. for (; dev->msg_write_idx < dev->msgs_num; dev->msg_write_idx++) {
  212. u32 flags = msgs[dev->msg_write_idx].flags;
  213. /*
  214. * If target address has changed, we need to
  215. * reprogram the target address in the I2C
  216. * adapter when we are done with this transfer.
  217. */
  218. if (msgs[dev->msg_write_idx].addr != addr) {
  219. dev_err(dev->dev,
  220. "%s: invalid target address\n", __func__);
  221. dev->msg_err = -EINVAL;
  222. break;
  223. }
  224. if (msgs[dev->msg_write_idx].len == 0) {
  225. dev_err(dev->dev,
  226. "%s: invalid message length\n", __func__);
  227. dev->msg_err = -EINVAL;
  228. break;
  229. }
  230. if (!(dev->status & STATUS_WRITE_IN_PROGRESS)) {
  231. /* new i2c_msg */
  232. buf = msgs[dev->msg_write_idx].buf;
  233. buf_len = msgs[dev->msg_write_idx].len;
  234. /* If both IC_EMPTYFIFO_HOLD_MASTER_EN and
  235. * IC_RESTART_EN are set, we must manually
  236. * set restart bit between messages.
  237. */
  238. if ((dev->master_cfg & DW_IC_CON_RESTART_EN) &&
  239. (dev->msg_write_idx > 0))
  240. need_restart = true;
  241. }
  242. tx_limit = dev->tx_fifo_depth - dw_readl(dev, DW_IC_TXFLR);
  243. rx_limit = dev->rx_fifo_depth - dw_readl(dev, DW_IC_RXFLR);
  244. while (buf_len > 0 && tx_limit > 0 && rx_limit > 0) {
  245. u32 cmd = 0;
  246. /*
  247. * If IC_EMPTYFIFO_HOLD_MASTER_EN is set we must
  248. * manually set the stop bit. However, it cannot be
  249. * detected from the registers so we set it always
  250. * when writing/reading the last byte.
  251. */
  252. /*
  253. * i2c-core always sets the buffer length of
  254. * I2C_FUNC_SMBUS_BLOCK_DATA to 1. The length will
  255. * be adjusted when receiving the first byte.
  256. * Thus we can't stop the transaction here.
  257. */
  258. if (dev->msg_write_idx == dev->msgs_num - 1 &&
  259. buf_len == 1 && !(flags & I2C_M_RECV_LEN))
  260. cmd |= BIT(9);
  261. if (need_restart) {
  262. cmd |= BIT(10);
  263. need_restart = false;
  264. }
  265. if (msgs[dev->msg_write_idx].flags & I2C_M_RD) {
  266. /* Avoid rx buffer overrun */
  267. if (dev->rx_outstanding >= dev->rx_fifo_depth)
  268. break;
  269. dw_writel(dev, cmd | 0x100, DW_IC_DATA_CMD);
  270. rx_limit--;
  271. dev->rx_outstanding++;
  272. } else
  273. dw_writel(dev, cmd | *buf++, DW_IC_DATA_CMD);
  274. tx_limit--; buf_len--;
  275. }
  276. dev->tx_buf = buf;
  277. dev->tx_buf_len = buf_len;
  278. /*
  279. * Because we don't know the buffer length in the
  280. * I2C_FUNC_SMBUS_BLOCK_DATA case, we can't stop
  281. * the transaction here.
  282. */
  283. if (buf_len > 0 || flags & I2C_M_RECV_LEN) {
  284. /* more bytes to be written */
  285. dev->status |= STATUS_WRITE_IN_PROGRESS;
  286. break;
  287. } else
  288. dev->status &= ~STATUS_WRITE_IN_PROGRESS;
  289. }
  290. /*
  291. * If i2c_msg index search is completed, we don't need TX_EMPTY
  292. * interrupt any more.
  293. */
  294. if (dev->msg_write_idx == dev->msgs_num)
  295. intr_mask &= ~DW_IC_INTR_TX_EMPTY;
  296. if (dev->msg_err)
  297. intr_mask = 0;
  298. dw_writel(dev, intr_mask, DW_IC_INTR_MASK);
  299. }
  300. static u8
  301. i2c_dw_recv_len(struct dw_i2c_dev *dev, u8 len)
  302. {
  303. struct i2c_msg *msgs = dev->msgs;
  304. u32 flags = msgs[dev->msg_read_idx].flags;
  305. /*
  306. * Adjust the buffer length and mask the flag
  307. * after receiving the first byte.
  308. */
  309. len += (flags & I2C_CLIENT_PEC) ? 2 : 1;
  310. dev->tx_buf_len = len - min_t(u8, len, dev->rx_outstanding);
  311. msgs[dev->msg_read_idx].len = len;
  312. msgs[dev->msg_read_idx].flags &= ~I2C_M_RECV_LEN;
  313. return len;
  314. }
  315. static void
  316. i2c_dw_read(struct dw_i2c_dev *dev)
  317. {
  318. struct i2c_msg *msgs = dev->msgs;
  319. int rx_valid;
  320. for (; dev->msg_read_idx < dev->msgs_num; dev->msg_read_idx++) {
  321. u32 len;
  322. u8 *buf;
  323. if (!(msgs[dev->msg_read_idx].flags & I2C_M_RD))
  324. continue;
  325. if (!(dev->status & STATUS_READ_IN_PROGRESS)) {
  326. len = msgs[dev->msg_read_idx].len;
  327. buf = msgs[dev->msg_read_idx].buf;
  328. } else {
  329. len = dev->rx_buf_len;
  330. buf = dev->rx_buf;
  331. }
  332. rx_valid = dw_readl(dev, DW_IC_RXFLR);
  333. for (; len > 0 && rx_valid > 0; len--, rx_valid--) {
  334. u32 flags = msgs[dev->msg_read_idx].flags;
  335. *buf = dw_readl(dev, DW_IC_DATA_CMD);
  336. /* Ensure length byte is a valid value */
  337. if (flags & I2C_M_RECV_LEN &&
  338. *buf <= I2C_SMBUS_BLOCK_MAX && *buf > 0) {
  339. len = i2c_dw_recv_len(dev, *buf);
  340. }
  341. buf++;
  342. dev->rx_outstanding--;
  343. }
  344. if (len > 0) {
  345. dev->status |= STATUS_READ_IN_PROGRESS;
  346. dev->rx_buf_len = len;
  347. dev->rx_buf = buf;
  348. return;
  349. } else
  350. dev->status &= ~STATUS_READ_IN_PROGRESS;
  351. }
  352. }
  353. /*
  354. * Prepare controller for a transaction and call i2c_dw_xfer_msg.
  355. */
  356. static int
  357. i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
  358. {
  359. struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
  360. int ret;
  361. dev_dbg(dev->dev, "%s: msgs: %d\n", __func__, num);
  362. pm_runtime_get_sync(dev->dev);
  363. reinit_completion(&dev->cmd_complete);
  364. dev->msgs = msgs;
  365. dev->msgs_num = num;
  366. dev->cmd_err = 0;
  367. dev->msg_write_idx = 0;
  368. dev->msg_read_idx = 0;
  369. dev->msg_err = 0;
  370. dev->status = STATUS_IDLE;
  371. dev->abort_source = 0;
  372. dev->rx_outstanding = 0;
  373. ret = i2c_dw_acquire_lock(dev);
  374. if (ret)
  375. goto done_nolock;
  376. ret = i2c_dw_wait_bus_not_busy(dev);
  377. if (ret < 0)
  378. goto done;
  379. /* Start the transfers */
  380. i2c_dw_xfer_init(dev);
  381. /* Wait for tx to complete */
  382. if (!wait_for_completion_timeout(&dev->cmd_complete, adap->timeout)) {
  383. dev_err(dev->dev, "controller timed out\n");
  384. /* i2c_dw_init implicitly disables the adapter */
  385. i2c_recover_bus(&dev->adapter);
  386. i2c_dw_init_master(dev);
  387. ret = -ETIMEDOUT;
  388. goto done;
  389. }
  390. /*
  391. * We must disable the adapter before returning and signaling the end
  392. * of the current transfer. Otherwise the hardware might continue
  393. * generating interrupts which in turn causes a race condition with
  394. * the following transfer. Needs some more investigation if the
  395. * additional interrupts are a hardware bug or this driver doesn't
  396. * handle them correctly yet.
  397. */
  398. __i2c_dw_enable(dev, false);
  399. if (dev->msg_err) {
  400. ret = dev->msg_err;
  401. goto done;
  402. }
  403. /* No error */
  404. if (likely(!dev->cmd_err && !dev->status)) {
  405. ret = num;
  406. goto done;
  407. }
  408. /* We have an error */
  409. if (dev->cmd_err == DW_IC_ERR_TX_ABRT) {
  410. ret = i2c_dw_handle_tx_abort(dev);
  411. goto done;
  412. }
  413. if (dev->status)
  414. dev_err(dev->dev,
  415. "transfer terminated early - interrupt latency too high?\n");
  416. ret = -EIO;
  417. done:
  418. i2c_dw_release_lock(dev);
  419. done_nolock:
  420. pm_runtime_mark_last_busy(dev->dev);
  421. pm_runtime_put_autosuspend(dev->dev);
  422. return ret;
  423. }
  424. static const struct i2c_algorithm i2c_dw_algo = {
  425. .master_xfer = i2c_dw_xfer,
  426. .functionality = i2c_dw_func,
  427. };
  428. static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
  429. {
  430. u32 stat;
  431. /*
  432. * The IC_INTR_STAT register just indicates "enabled" interrupts.
  433. * Ths unmasked raw version of interrupt status bits are available
  434. * in the IC_RAW_INTR_STAT register.
  435. *
  436. * That is,
  437. * stat = dw_readl(IC_INTR_STAT);
  438. * equals to,
  439. * stat = dw_readl(IC_RAW_INTR_STAT) & dw_readl(IC_INTR_MASK);
  440. *
  441. * The raw version might be useful for debugging purposes.
  442. */
  443. stat = dw_readl(dev, DW_IC_INTR_STAT);
  444. /*
  445. * Do not use the IC_CLR_INTR register to clear interrupts, or
  446. * you'll miss some interrupts, triggered during the period from
  447. * dw_readl(IC_INTR_STAT) to dw_readl(IC_CLR_INTR).
  448. *
  449. * Instead, use the separately-prepared IC_CLR_* registers.
  450. */
  451. if (stat & DW_IC_INTR_RX_UNDER)
  452. dw_readl(dev, DW_IC_CLR_RX_UNDER);
  453. if (stat & DW_IC_INTR_RX_OVER)
  454. dw_readl(dev, DW_IC_CLR_RX_OVER);
  455. if (stat & DW_IC_INTR_TX_OVER)
  456. dw_readl(dev, DW_IC_CLR_TX_OVER);
  457. if (stat & DW_IC_INTR_RD_REQ)
  458. dw_readl(dev, DW_IC_CLR_RD_REQ);
  459. if (stat & DW_IC_INTR_TX_ABRT) {
  460. /*
  461. * The IC_TX_ABRT_SOURCE register is cleared whenever
  462. * the IC_CLR_TX_ABRT is read. Preserve it beforehand.
  463. */
  464. dev->abort_source = dw_readl(dev, DW_IC_TX_ABRT_SOURCE);
  465. dw_readl(dev, DW_IC_CLR_TX_ABRT);
  466. }
  467. if (stat & DW_IC_INTR_RX_DONE)
  468. dw_readl(dev, DW_IC_CLR_RX_DONE);
  469. if (stat & DW_IC_INTR_ACTIVITY)
  470. dw_readl(dev, DW_IC_CLR_ACTIVITY);
  471. if (stat & DW_IC_INTR_STOP_DET)
  472. dw_readl(dev, DW_IC_CLR_STOP_DET);
  473. if (stat & DW_IC_INTR_START_DET)
  474. dw_readl(dev, DW_IC_CLR_START_DET);
  475. if (stat & DW_IC_INTR_GEN_CALL)
  476. dw_readl(dev, DW_IC_CLR_GEN_CALL);
  477. return stat;
  478. }
  479. /*
  480. * Interrupt service routine. This gets called whenever an I2C master interrupt
  481. * occurs.
  482. */
  483. static int i2c_dw_irq_handler_master(struct dw_i2c_dev *dev)
  484. {
  485. u32 stat;
  486. stat = i2c_dw_read_clear_intrbits(dev);
  487. if (stat & DW_IC_INTR_TX_ABRT) {
  488. dev->cmd_err |= DW_IC_ERR_TX_ABRT;
  489. dev->status = STATUS_IDLE;
  490. /*
  491. * Anytime TX_ABRT is set, the contents of the tx/rx
  492. * buffers are flushed. Make sure to skip them.
  493. */
  494. dw_writel(dev, 0, DW_IC_INTR_MASK);
  495. goto tx_aborted;
  496. }
  497. if (stat & DW_IC_INTR_RX_FULL)
  498. i2c_dw_read(dev);
  499. if (stat & DW_IC_INTR_TX_EMPTY)
  500. i2c_dw_xfer_msg(dev);
  501. /*
  502. * No need to modify or disable the interrupt mask here.
  503. * i2c_dw_xfer_msg() will take care of it according to
  504. * the current transmit status.
  505. */
  506. tx_aborted:
  507. if ((stat & (DW_IC_INTR_TX_ABRT | DW_IC_INTR_STOP_DET)) || dev->msg_err)
  508. complete(&dev->cmd_complete);
  509. else if (unlikely(dev->flags & ACCESS_INTR_MASK)) {
  510. /* Workaround to trigger pending interrupt */
  511. stat = dw_readl(dev, DW_IC_INTR_MASK);
  512. i2c_dw_disable_int(dev);
  513. dw_writel(dev, stat, DW_IC_INTR_MASK);
  514. }
  515. return 0;
  516. }
  517. static irqreturn_t i2c_dw_isr(int this_irq, void *dev_id)
  518. {
  519. struct dw_i2c_dev *dev = dev_id;
  520. u32 stat, enabled;
  521. enabled = dw_readl(dev, DW_IC_ENABLE);
  522. stat = dw_readl(dev, DW_IC_RAW_INTR_STAT);
  523. dev_dbg(dev->dev, "enabled=%#x stat=%#x\n", enabled, stat);
  524. if (!enabled || !(stat & ~DW_IC_INTR_ACTIVITY))
  525. return IRQ_NONE;
  526. i2c_dw_irq_handler_master(dev);
  527. return IRQ_HANDLED;
  528. }
  529. static void i2c_dw_prepare_recovery(struct i2c_adapter *adap)
  530. {
  531. struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
  532. i2c_dw_disable(dev);
  533. reset_control_assert(dev->rst);
  534. i2c_dw_prepare_clk(dev, false);
  535. }
  536. static void i2c_dw_unprepare_recovery(struct i2c_adapter *adap)
  537. {
  538. struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
  539. i2c_dw_prepare_clk(dev, true);
  540. reset_control_deassert(dev->rst);
  541. i2c_dw_init_master(dev);
  542. }
  543. static int i2c_dw_init_recovery_info(struct dw_i2c_dev *dev)
  544. {
  545. struct i2c_bus_recovery_info *rinfo = &dev->rinfo;
  546. struct i2c_adapter *adap = &dev->adapter;
  547. struct gpio_desc *gpio;
  548. int r;
  549. gpio = devm_gpiod_get(dev->dev, "scl", GPIOD_OUT_HIGH);
  550. if (IS_ERR(gpio)) {
  551. r = PTR_ERR(gpio);
  552. if (r == -ENOENT || r == -ENOSYS)
  553. return 0;
  554. return r;
  555. }
  556. rinfo->scl_gpiod = gpio;
  557. gpio = devm_gpiod_get_optional(dev->dev, "sda", GPIOD_IN);
  558. if (IS_ERR(gpio))
  559. return PTR_ERR(gpio);
  560. rinfo->sda_gpiod = gpio;
  561. rinfo->recover_bus = i2c_generic_scl_recovery;
  562. rinfo->prepare_recovery = i2c_dw_prepare_recovery;
  563. rinfo->unprepare_recovery = i2c_dw_unprepare_recovery;
  564. adap->bus_recovery_info = rinfo;
  565. dev_info(dev->dev, "running with gpio recovery mode! scl%s",
  566. rinfo->sda_gpiod ? ",sda" : "");
  567. return 0;
  568. }
  569. int i2c_dw_probe(struct dw_i2c_dev *dev)
  570. {
  571. struct i2c_adapter *adap = &dev->adapter;
  572. unsigned long irq_flags;
  573. int ret;
  574. init_completion(&dev->cmd_complete);
  575. dev->init = i2c_dw_init_master;
  576. dev->disable = i2c_dw_disable;
  577. dev->disable_int = i2c_dw_disable_int;
  578. ret = dev->init(dev);
  579. if (ret)
  580. return ret;
  581. snprintf(adap->name, sizeof(adap->name),
  582. "Synopsys DesignWare I2C adapter");
  583. adap->retries = 3;
  584. adap->algo = &i2c_dw_algo;
  585. adap->dev.parent = dev->dev;
  586. i2c_set_adapdata(adap, dev);
  587. if (dev->pm_disabled) {
  588. dev_pm_syscore_device(dev->dev, true);
  589. irq_flags = IRQF_NO_SUSPEND;
  590. } else {
  591. irq_flags = IRQF_SHARED | IRQF_COND_SUSPEND;
  592. }
  593. i2c_dw_disable_int(dev);
  594. ret = devm_request_irq(dev->dev, dev->irq, i2c_dw_isr, irq_flags,
  595. dev_name(dev->dev), dev);
  596. if (ret) {
  597. dev_err(dev->dev, "failure requesting irq %i: %d\n",
  598. dev->irq, ret);
  599. return ret;
  600. }
  601. ret = i2c_dw_init_recovery_info(dev);
  602. if (ret)
  603. return ret;
  604. /*
  605. * Increment PM usage count during adapter registration in order to
  606. * avoid possible spurious runtime suspend when adapter device is
  607. * registered to the device core and immediate resume in case bus has
  608. * registered I2C slaves that do I2C transfers in their probe.
  609. */
  610. pm_runtime_get_noresume(dev->dev);
  611. ret = i2c_add_numbered_adapter(adap);
  612. if (ret)
  613. dev_err(dev->dev, "failure adding adapter: %d\n", ret);
  614. pm_runtime_put_noidle(dev->dev);
  615. return ret;
  616. }
  617. EXPORT_SYMBOL_GPL(i2c_dw_probe);
  618. MODULE_DESCRIPTION("Synopsys DesignWare I2C bus master adapter");
  619. MODULE_LICENSE("GPL");