i2c-designware-master.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746
  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. u32 ic_clk = i2c_dw_clk_rate(dev);
  34. const char *mode_str, *fp_str = "";
  35. u32 comp_param1;
  36. u32 sda_falling_time, scl_falling_time;
  37. struct i2c_timings *t = &dev->timings;
  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. dev->ss_hcnt =
  50. i2c_dw_scl_hcnt(ic_clk,
  51. 4000, /* tHD;STA = tHIGH = 4.0 us */
  52. sda_falling_time,
  53. 0, /* 0: DW default, 1: Ideal */
  54. 0); /* No offset */
  55. dev->ss_lcnt =
  56. i2c_dw_scl_lcnt(ic_clk,
  57. 4700, /* tLOW = 4.7 us */
  58. scl_falling_time,
  59. 0); /* No offset */
  60. }
  61. dev_dbg(dev->dev, "Standard Mode HCNT:LCNT = %d:%d\n",
  62. dev->ss_hcnt, dev->ss_lcnt);
  63. /*
  64. * Set SCL timing parameters for fast mode or fast mode plus. Only
  65. * difference is the timing parameter values since the registers are
  66. * the same.
  67. */
  68. if (t->bus_freq_hz == 1000000) {
  69. /*
  70. * Check are fast mode plus parameters available and use
  71. * fast mode if not.
  72. */
  73. if (dev->fp_hcnt && dev->fp_lcnt) {
  74. dev->fs_hcnt = dev->fp_hcnt;
  75. dev->fs_lcnt = dev->fp_lcnt;
  76. fp_str = " Plus";
  77. }
  78. }
  79. /*
  80. * Calculate SCL timing parameters for fast mode if not set. They are
  81. * needed also in high speed mode.
  82. */
  83. if (!dev->fs_hcnt || !dev->fs_lcnt) {
  84. dev->fs_hcnt =
  85. i2c_dw_scl_hcnt(ic_clk,
  86. 600, /* tHD;STA = tHIGH = 0.6 us */
  87. sda_falling_time,
  88. 0, /* 0: DW default, 1: Ideal */
  89. 0); /* No offset */
  90. dev->fs_lcnt =
  91. i2c_dw_scl_lcnt(ic_clk,
  92. 1300, /* tLOW = 1.3 us */
  93. scl_falling_time,
  94. 0); /* No offset */
  95. }
  96. dev_dbg(dev->dev, "Fast Mode%s HCNT:LCNT = %d:%d\n",
  97. fp_str, dev->fs_hcnt, dev->fs_lcnt);
  98. /* Check is high speed possible and fall back to fast mode if not */
  99. if ((dev->master_cfg & DW_IC_CON_SPEED_MASK) ==
  100. DW_IC_CON_SPEED_HIGH) {
  101. if ((comp_param1 & DW_IC_COMP_PARAM_1_SPEED_MODE_MASK)
  102. != DW_IC_COMP_PARAM_1_SPEED_MODE_HIGH) {
  103. dev_err(dev->dev, "High Speed not supported!\n");
  104. dev->master_cfg &= ~DW_IC_CON_SPEED_MASK;
  105. dev->master_cfg |= DW_IC_CON_SPEED_FAST;
  106. dev->hs_hcnt = 0;
  107. dev->hs_lcnt = 0;
  108. } else if (dev->hs_hcnt && dev->hs_lcnt) {
  109. dev_dbg(dev->dev, "High Speed Mode HCNT:LCNT = %d:%d\n",
  110. dev->hs_hcnt, dev->hs_lcnt);
  111. }
  112. }
  113. ret = i2c_dw_set_sda_hold(dev);
  114. if (ret)
  115. goto out;
  116. switch (dev->master_cfg & DW_IC_CON_SPEED_MASK) {
  117. case DW_IC_CON_SPEED_STD:
  118. mode_str = "Standard Mode";
  119. break;
  120. case DW_IC_CON_SPEED_HIGH:
  121. mode_str = "High Speed Mode";
  122. break;
  123. default:
  124. mode_str = "Fast Mode";
  125. }
  126. dev_dbg(dev->dev, "Bus speed: %s%s\n", mode_str, fp_str);
  127. out:
  128. return ret;
  129. }
  130. /**
  131. * i2c_dw_init() - Initialize the designware I2C master hardware
  132. * @dev: device private data
  133. *
  134. * This functions configures and enables the I2C master.
  135. * This function is called during I2C init function, and in case of timeout at
  136. * run time.
  137. */
  138. static int i2c_dw_init_master(struct dw_i2c_dev *dev)
  139. {
  140. int ret;
  141. ret = i2c_dw_acquire_lock(dev);
  142. if (ret)
  143. return ret;
  144. /* Disable the adapter */
  145. __i2c_dw_disable(dev);
  146. /* Write standard speed timing parameters */
  147. dw_writel(dev, dev->ss_hcnt, DW_IC_SS_SCL_HCNT);
  148. dw_writel(dev, dev->ss_lcnt, DW_IC_SS_SCL_LCNT);
  149. /* Write fast mode/fast mode plus timing parameters */
  150. dw_writel(dev, dev->fs_hcnt, DW_IC_FS_SCL_HCNT);
  151. dw_writel(dev, dev->fs_lcnt, DW_IC_FS_SCL_LCNT);
  152. /* Write high speed timing parameters if supported */
  153. if (dev->hs_hcnt && dev->hs_lcnt) {
  154. dw_writel(dev, dev->hs_hcnt, DW_IC_HS_SCL_HCNT);
  155. dw_writel(dev, dev->hs_lcnt, DW_IC_HS_SCL_LCNT);
  156. }
  157. /* Write SDA hold time if supported */
  158. if (dev->sda_hold_time)
  159. dw_writel(dev, dev->sda_hold_time, DW_IC_SDA_HOLD);
  160. i2c_dw_configure_fifo_master(dev);
  161. i2c_dw_release_lock(dev);
  162. return 0;
  163. }
  164. static void i2c_dw_xfer_init(struct dw_i2c_dev *dev)
  165. {
  166. struct i2c_msg *msgs = dev->msgs;
  167. u32 ic_con, ic_tar = 0;
  168. /* Disable the adapter */
  169. __i2c_dw_disable(dev);
  170. /* If the slave address is ten bit address, enable 10BITADDR */
  171. ic_con = dw_readl(dev, DW_IC_CON);
  172. if (msgs[dev->msg_write_idx].flags & I2C_M_TEN) {
  173. ic_con |= DW_IC_CON_10BITADDR_MASTER;
  174. /*
  175. * If I2C_DYNAMIC_TAR_UPDATE is set, the 10-bit addressing
  176. * mode has to be enabled via bit 12 of IC_TAR register.
  177. * We set it always as I2C_DYNAMIC_TAR_UPDATE can't be
  178. * detected from registers.
  179. */
  180. ic_tar = DW_IC_TAR_10BITADDR_MASTER;
  181. } else {
  182. ic_con &= ~DW_IC_CON_10BITADDR_MASTER;
  183. }
  184. dw_writel(dev, ic_con, DW_IC_CON);
  185. /*
  186. * Set the slave (target) address and enable 10-bit addressing mode
  187. * if applicable.
  188. */
  189. dw_writel(dev, msgs[dev->msg_write_idx].addr | ic_tar, DW_IC_TAR);
  190. /* Enforce disabled interrupts (due to HW issues) */
  191. i2c_dw_disable_int(dev);
  192. /* Enable the adapter */
  193. __i2c_dw_enable(dev);
  194. /* Dummy read to avoid the register getting stuck on Bay Trail */
  195. dw_readl(dev, DW_IC_ENABLE_STATUS);
  196. /* Clear and enable interrupts */
  197. dw_readl(dev, DW_IC_CLR_INTR);
  198. dw_writel(dev, DW_IC_INTR_MASTER_MASK, DW_IC_INTR_MASK);
  199. }
  200. /*
  201. * Initiate (and continue) low level master read/write transaction.
  202. * This function is only called from i2c_dw_isr, and pumping i2c_msg
  203. * messages into the tx buffer. Even if the size of i2c_msg data is
  204. * longer than the size of the tx buffer, it handles everything.
  205. */
  206. static void
  207. i2c_dw_xfer_msg(struct dw_i2c_dev *dev)
  208. {
  209. struct i2c_msg *msgs = dev->msgs;
  210. u32 intr_mask;
  211. int tx_limit, rx_limit;
  212. u32 addr = msgs[dev->msg_write_idx].addr;
  213. u32 buf_len = dev->tx_buf_len;
  214. u8 *buf = dev->tx_buf;
  215. bool need_restart = false;
  216. intr_mask = DW_IC_INTR_MASTER_MASK;
  217. for (; dev->msg_write_idx < dev->msgs_num; dev->msg_write_idx++) {
  218. u32 flags = msgs[dev->msg_write_idx].flags;
  219. /*
  220. * If target address has changed, we need to
  221. * reprogram the target address in the I2C
  222. * adapter when we are done with this transfer.
  223. */
  224. if (msgs[dev->msg_write_idx].addr != addr) {
  225. dev_err(dev->dev,
  226. "%s: invalid target address\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_disable_nowait(dev);
  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 const struct i2c_adapter_quirks i2c_dw_quirks = {
  429. .flags = I2C_AQ_NO_ZERO_LEN,
  430. };
  431. static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
  432. {
  433. u32 stat;
  434. /*
  435. * The IC_INTR_STAT register just indicates "enabled" interrupts.
  436. * Ths unmasked raw version of interrupt status bits are available
  437. * in the IC_RAW_INTR_STAT register.
  438. *
  439. * That is,
  440. * stat = dw_readl(IC_INTR_STAT);
  441. * equals to,
  442. * stat = dw_readl(IC_RAW_INTR_STAT) & dw_readl(IC_INTR_MASK);
  443. *
  444. * The raw version might be useful for debugging purposes.
  445. */
  446. stat = dw_readl(dev, DW_IC_INTR_STAT);
  447. /*
  448. * Do not use the IC_CLR_INTR register to clear interrupts, or
  449. * you'll miss some interrupts, triggered during the period from
  450. * dw_readl(IC_INTR_STAT) to dw_readl(IC_CLR_INTR).
  451. *
  452. * Instead, use the separately-prepared IC_CLR_* registers.
  453. */
  454. if (stat & DW_IC_INTR_RX_UNDER)
  455. dw_readl(dev, DW_IC_CLR_RX_UNDER);
  456. if (stat & DW_IC_INTR_RX_OVER)
  457. dw_readl(dev, DW_IC_CLR_RX_OVER);
  458. if (stat & DW_IC_INTR_TX_OVER)
  459. dw_readl(dev, DW_IC_CLR_TX_OVER);
  460. if (stat & DW_IC_INTR_RD_REQ)
  461. dw_readl(dev, DW_IC_CLR_RD_REQ);
  462. if (stat & DW_IC_INTR_TX_ABRT) {
  463. /*
  464. * The IC_TX_ABRT_SOURCE register is cleared whenever
  465. * the IC_CLR_TX_ABRT is read. Preserve it beforehand.
  466. */
  467. dev->abort_source = dw_readl(dev, DW_IC_TX_ABRT_SOURCE);
  468. dw_readl(dev, DW_IC_CLR_TX_ABRT);
  469. }
  470. if (stat & DW_IC_INTR_RX_DONE)
  471. dw_readl(dev, DW_IC_CLR_RX_DONE);
  472. if (stat & DW_IC_INTR_ACTIVITY)
  473. dw_readl(dev, DW_IC_CLR_ACTIVITY);
  474. if (stat & DW_IC_INTR_STOP_DET)
  475. dw_readl(dev, DW_IC_CLR_STOP_DET);
  476. if (stat & DW_IC_INTR_START_DET)
  477. dw_readl(dev, DW_IC_CLR_START_DET);
  478. if (stat & DW_IC_INTR_GEN_CALL)
  479. dw_readl(dev, DW_IC_CLR_GEN_CALL);
  480. return stat;
  481. }
  482. /*
  483. * Interrupt service routine. This gets called whenever an I2C master interrupt
  484. * occurs.
  485. */
  486. static int i2c_dw_irq_handler_master(struct dw_i2c_dev *dev)
  487. {
  488. u32 stat;
  489. stat = i2c_dw_read_clear_intrbits(dev);
  490. if (stat & DW_IC_INTR_TX_ABRT) {
  491. dev->cmd_err |= DW_IC_ERR_TX_ABRT;
  492. dev->status = STATUS_IDLE;
  493. /*
  494. * Anytime TX_ABRT is set, the contents of the tx/rx
  495. * buffers are flushed. Make sure to skip them.
  496. */
  497. dw_writel(dev, 0, DW_IC_INTR_MASK);
  498. goto tx_aborted;
  499. }
  500. if (stat & DW_IC_INTR_RX_FULL)
  501. i2c_dw_read(dev);
  502. if (stat & DW_IC_INTR_TX_EMPTY)
  503. i2c_dw_xfer_msg(dev);
  504. /*
  505. * No need to modify or disable the interrupt mask here.
  506. * i2c_dw_xfer_msg() will take care of it according to
  507. * the current transmit status.
  508. */
  509. tx_aborted:
  510. if ((stat & (DW_IC_INTR_TX_ABRT | DW_IC_INTR_STOP_DET)) || dev->msg_err)
  511. complete(&dev->cmd_complete);
  512. else if (unlikely(dev->flags & ACCESS_INTR_MASK)) {
  513. /* Workaround to trigger pending interrupt */
  514. stat = dw_readl(dev, DW_IC_INTR_MASK);
  515. i2c_dw_disable_int(dev);
  516. dw_writel(dev, stat, DW_IC_INTR_MASK);
  517. }
  518. return 0;
  519. }
  520. static irqreturn_t i2c_dw_isr(int this_irq, void *dev_id)
  521. {
  522. struct dw_i2c_dev *dev = dev_id;
  523. u32 stat, enabled;
  524. enabled = dw_readl(dev, DW_IC_ENABLE);
  525. stat = dw_readl(dev, DW_IC_RAW_INTR_STAT);
  526. dev_dbg(dev->dev, "enabled=%#x stat=%#x\n", enabled, stat);
  527. if (!enabled || !(stat & ~DW_IC_INTR_ACTIVITY))
  528. return IRQ_NONE;
  529. i2c_dw_irq_handler_master(dev);
  530. return IRQ_HANDLED;
  531. }
  532. static void i2c_dw_prepare_recovery(struct i2c_adapter *adap)
  533. {
  534. struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
  535. i2c_dw_disable(dev);
  536. reset_control_assert(dev->rst);
  537. i2c_dw_prepare_clk(dev, false);
  538. }
  539. static void i2c_dw_unprepare_recovery(struct i2c_adapter *adap)
  540. {
  541. struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
  542. i2c_dw_prepare_clk(dev, true);
  543. reset_control_deassert(dev->rst);
  544. i2c_dw_init_master(dev);
  545. }
  546. static int i2c_dw_init_recovery_info(struct dw_i2c_dev *dev)
  547. {
  548. struct i2c_bus_recovery_info *rinfo = &dev->rinfo;
  549. struct i2c_adapter *adap = &dev->adapter;
  550. struct gpio_desc *gpio;
  551. int r;
  552. gpio = devm_gpiod_get(dev->dev, "scl", GPIOD_OUT_HIGH);
  553. if (IS_ERR(gpio)) {
  554. r = PTR_ERR(gpio);
  555. if (r == -ENOENT || r == -ENOSYS)
  556. return 0;
  557. return r;
  558. }
  559. rinfo->scl_gpiod = gpio;
  560. gpio = devm_gpiod_get_optional(dev->dev, "sda", GPIOD_IN);
  561. if (IS_ERR(gpio))
  562. return PTR_ERR(gpio);
  563. rinfo->sda_gpiod = gpio;
  564. rinfo->recover_bus = i2c_generic_scl_recovery;
  565. rinfo->prepare_recovery = i2c_dw_prepare_recovery;
  566. rinfo->unprepare_recovery = i2c_dw_unprepare_recovery;
  567. adap->bus_recovery_info = rinfo;
  568. dev_info(dev->dev, "running with gpio recovery mode! scl%s",
  569. rinfo->sda_gpiod ? ",sda" : "");
  570. return 0;
  571. }
  572. int i2c_dw_probe(struct dw_i2c_dev *dev)
  573. {
  574. struct i2c_adapter *adap = &dev->adapter;
  575. unsigned long irq_flags;
  576. int ret;
  577. init_completion(&dev->cmd_complete);
  578. dev->init = i2c_dw_init_master;
  579. dev->disable = i2c_dw_disable;
  580. dev->disable_int = i2c_dw_disable_int;
  581. ret = i2c_dw_set_reg_access(dev);
  582. if (ret)
  583. return ret;
  584. ret = i2c_dw_set_timings_master(dev);
  585. if (ret)
  586. return ret;
  587. ret = dev->init(dev);
  588. if (ret)
  589. return ret;
  590. snprintf(adap->name, sizeof(adap->name),
  591. "Synopsys DesignWare I2C adapter");
  592. adap->retries = 3;
  593. adap->algo = &i2c_dw_algo;
  594. adap->quirks = &i2c_dw_quirks;
  595. adap->dev.parent = dev->dev;
  596. i2c_set_adapdata(adap, dev);
  597. if (dev->pm_disabled) {
  598. irq_flags = IRQF_NO_SUSPEND;
  599. } else {
  600. irq_flags = IRQF_SHARED | IRQF_COND_SUSPEND;
  601. }
  602. i2c_dw_disable_int(dev);
  603. ret = devm_request_irq(dev->dev, dev->irq, i2c_dw_isr, irq_flags,
  604. dev_name(dev->dev), dev);
  605. if (ret) {
  606. dev_err(dev->dev, "failure requesting irq %i: %d\n",
  607. dev->irq, ret);
  608. return ret;
  609. }
  610. ret = i2c_dw_init_recovery_info(dev);
  611. if (ret)
  612. return ret;
  613. /*
  614. * Increment PM usage count during adapter registration in order to
  615. * avoid possible spurious runtime suspend when adapter device is
  616. * registered to the device core and immediate resume in case bus has
  617. * registered I2C slaves that do I2C transfers in their probe.
  618. */
  619. pm_runtime_get_noresume(dev->dev);
  620. ret = i2c_add_numbered_adapter(adap);
  621. if (ret)
  622. dev_err(dev->dev, "failure adding adapter: %d\n", ret);
  623. pm_runtime_put_noidle(dev->dev);
  624. return ret;
  625. }
  626. EXPORT_SYMBOL_GPL(i2c_dw_probe);
  627. MODULE_DESCRIPTION("Synopsys DesignWare I2C bus master adapter");
  628. MODULE_LICENSE("GPL");