i2c-designware-master.c 19 KB

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