/drivers/i2c/busses/i2c-qup.c

https://bitbucket.org/cresqo/cm7-p500-kernel · C · 1200 lines · 980 code · 112 blank · 108 comment · 201 complexity · 29d444d34d14261e57140c7e61cde227 MD5 · raw file

  1. /* Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. * You should have received a copy of the GNU General Public License
  13. * along with this program; if not, write to the Free Software
  14. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  15. * 02110-1301, USA.
  16. *
  17. */
  18. /*
  19. * QUP driver for Qualcomm MSM platforms
  20. *
  21. */
  22. /* #define DEBUG */
  23. #include <linux/clk.h>
  24. #include <linux/err.h>
  25. #include <linux/init.h>
  26. #include <linux/i2c.h>
  27. #include <linux/interrupt.h>
  28. #include <linux/platform_device.h>
  29. #include <linux/delay.h>
  30. #include <linux/io.h>
  31. #include <linux/mutex.h>
  32. #include <linux/timer.h>
  33. #include <linux/slab.h>
  34. #include <mach/board.h>
  35. #include <linux/slab.h>
  36. #include <linux/pm_runtime.h>
  37. MODULE_LICENSE("GPL v2");
  38. MODULE_VERSION("0.2");
  39. MODULE_ALIAS("platform:i2c_qup");
  40. /* QUP Registers */
  41. enum {
  42. QUP_CONFIG = 0x0,
  43. QUP_STATE = 0x4,
  44. QUP_IO_MODE = 0x8,
  45. QUP_SW_RESET = 0xC,
  46. QUP_OPERATIONAL = 0x18,
  47. QUP_ERROR_FLAGS = 0x1C,
  48. QUP_ERROR_FLAGS_EN = 0x20,
  49. QUP_MX_READ_CNT = 0x208,
  50. QUP_MX_INPUT_CNT = 0x200,
  51. QUP_MX_WR_CNT = 0x100,
  52. QUP_OUT_DEBUG = 0x108,
  53. QUP_OUT_FIFO_CNT = 0x10C,
  54. QUP_OUT_FIFO_BASE = 0x110,
  55. QUP_IN_READ_CUR = 0x20C,
  56. QUP_IN_DEBUG = 0x210,
  57. QUP_IN_FIFO_CNT = 0x214,
  58. QUP_IN_FIFO_BASE = 0x218,
  59. QUP_I2C_CLK_CTL = 0x400,
  60. QUP_I2C_STATUS = 0x404,
  61. };
  62. /* QUP States and reset values */
  63. enum {
  64. QUP_RESET_STATE = 0,
  65. QUP_RUN_STATE = 1U,
  66. QUP_STATE_MASK = 3U,
  67. QUP_PAUSE_STATE = 3U,
  68. QUP_STATE_VALID = 1U << 2,
  69. QUP_I2C_MAST_GEN = 1U << 4,
  70. QUP_OPERATIONAL_RESET = 0xFF0,
  71. QUP_I2C_STATUS_RESET = 0xFFFFFC,
  72. };
  73. /* QUP OPERATIONAL FLAGS */
  74. enum {
  75. QUP_OUT_SVC_FLAG = 1U << 8,
  76. QUP_IN_SVC_FLAG = 1U << 9,
  77. QUP_MX_INPUT_DONE = 1U << 11,
  78. };
  79. /* I2C mini core related values */
  80. enum {
  81. I2C_MINI_CORE = 2U << 8,
  82. I2C_N_VAL = 0xF,
  83. };
  84. /* Packing Unpacking words in FIFOs , and IO modes*/
  85. enum {
  86. QUP_WR_BLK_MODE = 1U << 10,
  87. QUP_RD_BLK_MODE = 1U << 12,
  88. QUP_UNPACK_EN = 1U << 14,
  89. QUP_PACK_EN = 1U << 15,
  90. };
  91. /* QUP tags */
  92. enum {
  93. QUP_OUT_NOP = 0,
  94. QUP_OUT_START = 1U << 8,
  95. QUP_OUT_DATA = 2U << 8,
  96. QUP_OUT_STOP = 3U << 8,
  97. QUP_OUT_REC = 4U << 8,
  98. QUP_IN_DATA = 5U << 8,
  99. QUP_IN_STOP = 6U << 8,
  100. QUP_IN_NACK = 7U << 8,
  101. };
  102. /* Status, Error flags */
  103. enum {
  104. I2C_STATUS_WR_BUFFER_FULL = 1U << 0,
  105. I2C_STATUS_BUS_ACTIVE = 1U << 8,
  106. I2C_STATUS_ERROR_MASK = 0x38000FC,
  107. QUP_I2C_NACK_FLAG = 1U << 3,
  108. QUP_IN_NOT_EMPTY = 1U << 5,
  109. QUP_STATUS_ERROR_FLAGS = 0x7C,
  110. };
  111. struct qup_i2c_dev {
  112. struct device *dev;
  113. void __iomem *base; /* virtual */
  114. void __iomem *gsbi; /* virtual */
  115. int in_irq;
  116. int out_irq;
  117. int err_irq;
  118. int num_irqs;
  119. struct clk *clk;
  120. struct clk *pclk;
  121. struct i2c_adapter adapter;
  122. struct i2c_msg *msg;
  123. int pos;
  124. int cnt;
  125. int err;
  126. int mode;
  127. int clk_ctl;
  128. int one_bit_t;
  129. int out_fifo_sz;
  130. int in_fifo_sz;
  131. int out_blk_sz;
  132. int in_blk_sz;
  133. int wr_sz;
  134. struct msm_i2c_platform_data *pdata;
  135. int suspended;
  136. int clk_state;
  137. struct timer_list pwr_timer;
  138. struct mutex mlock;
  139. void *complete;
  140. };
  141. #ifdef DEBUG
  142. static void
  143. qup_print_status(struct qup_i2c_dev *dev)
  144. {
  145. uint32_t val;
  146. val = readl(dev->base+QUP_CONFIG);
  147. dev_dbg(dev->dev, "Qup config is :0x%x\n", val);
  148. val = readl(dev->base+QUP_STATE);
  149. dev_dbg(dev->dev, "Qup state is :0x%x\n", val);
  150. val = readl(dev->base+QUP_IO_MODE);
  151. dev_dbg(dev->dev, "Qup mode is :0x%x\n", val);
  152. }
  153. #else
  154. static inline void qup_print_status(struct qup_i2c_dev *dev)
  155. {
  156. }
  157. #endif
  158. static irqreturn_t
  159. qup_i2c_interrupt(int irq, void *devid)
  160. {
  161. struct qup_i2c_dev *dev = devid;
  162. uint32_t status = readl(dev->base + QUP_I2C_STATUS);
  163. uint32_t status1 = readl(dev->base + QUP_ERROR_FLAGS);
  164. uint32_t op_flgs = readl(dev->base + QUP_OPERATIONAL);
  165. int err = 0;
  166. if (!dev->msg || !dev->complete) {
  167. /* Clear Error interrupt if it's a level triggered interrupt*/
  168. if (dev->num_irqs == 1) {
  169. writel(QUP_RESET_STATE, dev->base+QUP_STATE);
  170. /* Ensure that state is written before ISR exits */
  171. dsb();
  172. }
  173. return IRQ_HANDLED;
  174. }
  175. if (status & I2C_STATUS_ERROR_MASK) {
  176. dev_err(dev->dev, "QUP: I2C status flags :0x%x, irq:%d\n",
  177. status, irq);
  178. err = status;
  179. /* Clear Error interrupt if it's a level triggered interrupt*/
  180. if (dev->num_irqs == 1) {
  181. writel(QUP_RESET_STATE, dev->base+QUP_STATE);
  182. /* Ensure that state is written before ISR exits */
  183. dsb();
  184. }
  185. goto intr_done;
  186. }
  187. if (status1 & 0x7F) {
  188. dev_err(dev->dev, "QUP: QUP status flags :0x%x\n", status1);
  189. err = -status1;
  190. /* Clear Error interrupt if it's a level triggered interrupt*/
  191. if (dev->num_irqs == 1) {
  192. writel((status1 & QUP_STATUS_ERROR_FLAGS),
  193. dev->base + QUP_ERROR_FLAGS);
  194. /* Ensure that error flags are cleared before ISR
  195. * exits
  196. */
  197. dsb();
  198. }
  199. goto intr_done;
  200. }
  201. if ((dev->num_irqs == 3) && (dev->msg->flags == I2C_M_RD)
  202. && (irq == dev->out_irq))
  203. return IRQ_HANDLED;
  204. if (op_flgs & QUP_OUT_SVC_FLAG) {
  205. writel(QUP_OUT_SVC_FLAG, dev->base + QUP_OPERATIONAL);
  206. /* Ensure that service flag is acknowledged before ISR exits */
  207. dsb();
  208. }
  209. if (dev->msg->flags == I2C_M_RD) {
  210. if ((op_flgs & QUP_MX_INPUT_DONE) ||
  211. (op_flgs & QUP_IN_SVC_FLAG)) {
  212. writel(QUP_IN_SVC_FLAG, dev->base + QUP_OPERATIONAL);
  213. /* Ensure that service flag is acknowledged before ISR
  214. * exits
  215. */
  216. dsb();
  217. } else
  218. return IRQ_HANDLED;
  219. }
  220. intr_done:
  221. dev_dbg(dev->dev, "QUP intr= %d, i2c status=0x%x, qup status = 0x%x\n",
  222. irq, status, status1);
  223. qup_print_status(dev);
  224. dev->err = err;
  225. complete(dev->complete);
  226. return IRQ_HANDLED;
  227. }
  228. static void
  229. qup_i2c_pwr_mgmt(struct qup_i2c_dev *dev, unsigned int state)
  230. {
  231. dev->clk_state = state;
  232. if (state != 0) {
  233. clk_enable(dev->clk);
  234. if (dev->pclk)
  235. clk_enable(dev->pclk);
  236. } else {
  237. clk_disable(dev->clk);
  238. if (dev->pclk)
  239. clk_disable(dev->pclk);
  240. }
  241. }
  242. static void
  243. qup_i2c_pwr_timer(unsigned long data)
  244. {
  245. struct qup_i2c_dev *dev = (struct qup_i2c_dev *) data;
  246. dev_dbg(dev->dev, "QUP_Power: Inactivity based power management\n");
  247. if (dev->clk_state == 1)
  248. qup_i2c_pwr_mgmt(dev, 0);
  249. }
  250. static int
  251. qup_i2c_poll_writeready(struct qup_i2c_dev *dev, int rem)
  252. {
  253. uint32_t retries = 0;
  254. while (retries != 2000) {
  255. uint32_t status = readl(dev->base + QUP_I2C_STATUS);
  256. if (!(status & I2C_STATUS_WR_BUFFER_FULL)) {
  257. if (((dev->msg->flags & I2C_M_RD) || (rem == 0)) &&
  258. !(status & I2C_STATUS_BUS_ACTIVE))
  259. return 0;
  260. else if ((dev->msg->flags == 0) && (rem > 0))
  261. return 0;
  262. else /* 1-bit delay before we check for bus busy */
  263. udelay(dev->one_bit_t);
  264. }
  265. if (retries++ == 1000)
  266. udelay(100);
  267. }
  268. qup_print_status(dev);
  269. return -ETIMEDOUT;
  270. }
  271. static int
  272. qup_i2c_poll_state(struct qup_i2c_dev *dev, uint32_t state)
  273. {
  274. uint32_t retries = 0;
  275. dev_dbg(dev->dev, "Polling Status for state:0x%x\n", state);
  276. while (retries != 2000) {
  277. uint32_t status = readl(dev->base + QUP_STATE);
  278. if ((status & (QUP_STATE_VALID | state)) ==
  279. (QUP_STATE_VALID | state))
  280. return 0;
  281. else if (retries++ == 1000)
  282. udelay(100);
  283. }
  284. return -ETIMEDOUT;
  285. }
  286. #ifdef DEBUG
  287. static void qup_verify_fifo(struct qup_i2c_dev *dev, uint32_t val,
  288. uint32_t addr, int rdwr)
  289. {
  290. if (rdwr)
  291. dev_dbg(dev->dev, "RD:Wrote 0x%x to out_ff:0x%x\n", val, addr);
  292. else
  293. dev_dbg(dev->dev, "WR:Wrote 0x%x to out_ff:0x%x\n", val, addr);
  294. }
  295. #else
  296. static inline void qup_verify_fifo(struct qup_i2c_dev *dev, uint32_t val,
  297. uint32_t addr, int rdwr)
  298. {
  299. }
  300. #endif
  301. static void
  302. qup_issue_read(struct qup_i2c_dev *dev, struct i2c_msg *msg, int *idx,
  303. uint32_t carry_over)
  304. {
  305. uint16_t addr = (msg->addr << 1) | 1;
  306. /* QUP limit 256 bytes per read. By HW design, 0 in the 8-bit field
  307. * is treated as 256 byte read.
  308. */
  309. uint16_t rd_len = ((dev->cnt == 256) ? 0 : dev->cnt);
  310. if (*idx % 4) {
  311. writel(carry_over | ((QUP_OUT_START | addr) << 16),
  312. dev->base + QUP_OUT_FIFO_BASE);/* + (*idx-2)); */
  313. qup_verify_fifo(dev, carry_over |
  314. ((QUP_OUT_START | addr) << 16), (uint32_t)dev->base
  315. + QUP_OUT_FIFO_BASE + (*idx - 2), 1);
  316. writel((QUP_OUT_REC | rd_len),
  317. dev->base + QUP_OUT_FIFO_BASE);/* + (*idx+2)); */
  318. qup_verify_fifo(dev, (QUP_OUT_REC | rd_len),
  319. (uint32_t)dev->base + QUP_OUT_FIFO_BASE + (*idx + 2), 1);
  320. } else {
  321. writel(((QUP_OUT_REC | rd_len) << 16) | QUP_OUT_START | addr,
  322. dev->base + QUP_OUT_FIFO_BASE);/* + (*idx)); */
  323. qup_verify_fifo(dev, QUP_OUT_REC << 16 | rd_len << 16 |
  324. QUP_OUT_START | addr,
  325. (uint32_t)dev->base + QUP_OUT_FIFO_BASE + (*idx), 1);
  326. }
  327. *idx += 4;
  328. }
  329. static void
  330. qup_issue_write(struct qup_i2c_dev *dev, struct i2c_msg *msg, int rem,
  331. int *idx, uint32_t *carry_over)
  332. {
  333. int entries = dev->cnt;
  334. int empty_sl = dev->wr_sz - ((*idx) >> 1);
  335. int i = 0;
  336. uint32_t val = 0;
  337. uint32_t last_entry = 0;
  338. uint16_t addr = msg->addr << 1;
  339. if (dev->pos == 0) {
  340. if (*idx % 4) {
  341. writel(*carry_over | ((QUP_OUT_START | addr) << 16),
  342. dev->base + QUP_OUT_FIFO_BASE);
  343. qup_verify_fifo(dev, *carry_over | QUP_OUT_DATA << 16 |
  344. addr << 16, (uint32_t)dev->base +
  345. QUP_OUT_FIFO_BASE + (*idx) - 2, 0);
  346. } else
  347. val = QUP_OUT_START | addr;
  348. *idx += 2;
  349. i++;
  350. entries++;
  351. } else {
  352. /* Avoid setp time issue by adding 1 NOP when number of bytes
  353. * are more than FIFO/BLOCK size. setup time issue can't appear
  354. * otherwise since next byte to be written will always be ready
  355. */
  356. val = (QUP_OUT_NOP | 1);
  357. *idx += 2;
  358. i++;
  359. entries++;
  360. }
  361. if (entries > empty_sl)
  362. entries = empty_sl;
  363. for (; i < (entries - 1); i++) {
  364. if (*idx % 4) {
  365. writel(val | ((QUP_OUT_DATA |
  366. msg->buf[dev->pos]) << 16),
  367. dev->base + QUP_OUT_FIFO_BASE);
  368. qup_verify_fifo(dev, val | QUP_OUT_DATA << 16 |
  369. msg->buf[dev->pos] << 16, (uint32_t)dev->base +
  370. QUP_OUT_FIFO_BASE + (*idx) - 2, 0);
  371. } else
  372. val = QUP_OUT_DATA | msg->buf[dev->pos];
  373. (*idx) += 2;
  374. dev->pos++;
  375. }
  376. if (dev->pos < (msg->len - 1))
  377. last_entry = QUP_OUT_DATA;
  378. else if (rem > 1) /* not last array entry */
  379. last_entry = QUP_OUT_DATA;
  380. else
  381. last_entry = QUP_OUT_STOP;
  382. if ((*idx % 4) == 0) {
  383. /*
  384. * If read-start and read-command end up in different fifos, it
  385. * may result in extra-byte being read due to extra-read cycle.
  386. * Avoid that by inserting NOP as the last entry of fifo only
  387. * if write command(s) leave 1 space in fifo.
  388. */
  389. if (rem > 1) {
  390. struct i2c_msg *next = msg + 1;
  391. if (next->addr == msg->addr && (next->flags | I2C_M_RD)
  392. && *idx == ((dev->wr_sz*2) - 4)) {
  393. writel(((last_entry | msg->buf[dev->pos]) |
  394. ((1 | QUP_OUT_NOP) << 16)), dev->base +
  395. QUP_OUT_FIFO_BASE);/* + (*idx) - 2); */
  396. *idx += 2;
  397. } else if (next->flags == 0 && dev->pos == msg->len - 1
  398. && *idx < (dev->wr_sz*2)) {
  399. /* Last byte of an intermittent write */
  400. writel((last_entry | msg->buf[dev->pos]),
  401. dev->base + QUP_OUT_FIFO_BASE);
  402. qup_verify_fifo(dev,
  403. last_entry | msg->buf[dev->pos],
  404. (uint32_t)dev->base +
  405. QUP_OUT_FIFO_BASE + (*idx), 0);
  406. *idx += 2;
  407. } else
  408. *carry_over = (last_entry | msg->buf[dev->pos]);
  409. } else {
  410. writel((last_entry | msg->buf[dev->pos]),
  411. dev->base + QUP_OUT_FIFO_BASE);/* + (*idx) - 2); */
  412. qup_verify_fifo(dev, last_entry | msg->buf[dev->pos],
  413. (uint32_t)dev->base + QUP_OUT_FIFO_BASE +
  414. (*idx), 0);
  415. }
  416. } else {
  417. writel(val | ((last_entry | msg->buf[dev->pos]) << 16),
  418. dev->base + QUP_OUT_FIFO_BASE);/* + (*idx) - 2); */
  419. qup_verify_fifo(dev, val | (last_entry << 16) |
  420. (msg->buf[dev->pos] << 16), (uint32_t)dev->base +
  421. QUP_OUT_FIFO_BASE + (*idx) - 2, 0);
  422. }
  423. *idx += 2;
  424. dev->pos++;
  425. dev->cnt = msg->len - dev->pos;
  426. }
  427. static int
  428. qup_update_state(struct qup_i2c_dev *dev, uint32_t state)
  429. {
  430. if (qup_i2c_poll_state(dev, 0) != 0)
  431. return -EIO;
  432. writel(state, dev->base + QUP_STATE);
  433. if (qup_i2c_poll_state(dev, state) != 0)
  434. return -EIO;
  435. return 0;
  436. }
  437. static int
  438. qup_set_read_mode(struct qup_i2c_dev *dev, int rd_len)
  439. {
  440. uint32_t wr_mode = (dev->wr_sz < dev->out_fifo_sz) ?
  441. QUP_WR_BLK_MODE : 0;
  442. if (rd_len > 256) {
  443. dev_err(dev->dev, "HW doesn't support READs > 256 bytes\n");
  444. return -EPROTONOSUPPORT;
  445. }
  446. if (rd_len <= dev->in_fifo_sz) {
  447. writel(wr_mode | QUP_PACK_EN | QUP_UNPACK_EN,
  448. dev->base + QUP_IO_MODE);
  449. writel(rd_len, dev->base + QUP_MX_READ_CNT);
  450. } else {
  451. writel(wr_mode | QUP_RD_BLK_MODE |
  452. QUP_PACK_EN | QUP_UNPACK_EN, dev->base + QUP_IO_MODE);
  453. writel(rd_len, dev->base + QUP_MX_INPUT_CNT);
  454. }
  455. return 0;
  456. }
  457. static int
  458. qup_set_wr_mode(struct qup_i2c_dev *dev, int rem)
  459. {
  460. int total_len = 0;
  461. int ret = 0;
  462. if (dev->msg->len >= (dev->out_fifo_sz - 1)) {
  463. total_len = dev->msg->len + 1 +
  464. (dev->msg->len/(dev->out_blk_sz-1));
  465. writel(QUP_WR_BLK_MODE | QUP_PACK_EN | QUP_UNPACK_EN,
  466. dev->base + QUP_IO_MODE);
  467. dev->wr_sz = dev->out_blk_sz;
  468. } else
  469. writel(QUP_PACK_EN | QUP_UNPACK_EN,
  470. dev->base + QUP_IO_MODE);
  471. if (rem > 1) {
  472. struct i2c_msg *next = dev->msg + 1;
  473. if (next->addr == dev->msg->addr &&
  474. next->flags == I2C_M_RD) {
  475. ret = qup_set_read_mode(dev, next->len);
  476. /* make sure read start & read command are in 1 blk */
  477. if ((total_len % dev->out_blk_sz) ==
  478. (dev->out_blk_sz - 1))
  479. total_len += 3;
  480. else
  481. total_len += 2;
  482. }
  483. }
  484. /* WRITE COUNT register valid/used only in block mode */
  485. if (dev->wr_sz == dev->out_blk_sz)
  486. writel(total_len, dev->base + QUP_MX_WR_CNT);
  487. return ret;
  488. }
  489. static int
  490. qup_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
  491. {
  492. DECLARE_COMPLETION_ONSTACK(complete);
  493. struct qup_i2c_dev *dev = i2c_get_adapdata(adap);
  494. int ret;
  495. int rem = num;
  496. long timeout;
  497. int err;
  498. del_timer_sync(&dev->pwr_timer);
  499. mutex_lock(&dev->mlock);
  500. if (dev->suspended) {
  501. mutex_unlock(&dev->mlock);
  502. return -EIO;
  503. }
  504. if (dev->clk_state == 0) {
  505. if (dev->clk_ctl == 0) {
  506. if (dev->pdata->src_clk_rate > 0)
  507. clk_set_rate(dev->clk,
  508. dev->pdata->src_clk_rate);
  509. else
  510. dev->pdata->src_clk_rate = 19200000;
  511. }
  512. qup_i2c_pwr_mgmt(dev, 1);
  513. }
  514. /* Initialize QUP registers during first transfer */
  515. if (dev->clk_ctl == 0) {
  516. int fs_div;
  517. int hs_div;
  518. uint32_t fifo_reg;
  519. if (dev->gsbi) {
  520. writel(0x2 << 4, dev->gsbi);
  521. /* GSBI memory is not in the same 1K region as other
  522. * QUP registers. dsb() here ensures that the GSBI
  523. * register is updated in correct order and that the
  524. * write has gone through before programming QUP core
  525. * registers
  526. */
  527. dsb();
  528. }
  529. fs_div = ((dev->pdata->src_clk_rate
  530. / dev->pdata->clk_freq) / 2) - 3;
  531. hs_div = 3;
  532. dev->clk_ctl = ((hs_div & 0x7) << 8) | (fs_div & 0xff);
  533. fifo_reg = readl(dev->base + QUP_IO_MODE);
  534. if (fifo_reg & 0x3)
  535. dev->out_blk_sz = (fifo_reg & 0x3) * 16;
  536. else
  537. dev->out_blk_sz = 16;
  538. if (fifo_reg & 0x60)
  539. dev->in_blk_sz = ((fifo_reg & 0x60) >> 5) * 16;
  540. else
  541. dev->in_blk_sz = 16;
  542. /*
  543. * The block/fifo size w.r.t. 'actual data' is 1/2 due to 'tag'
  544. * associated with each byte written/received
  545. */
  546. dev->out_blk_sz /= 2;
  547. dev->in_blk_sz /= 2;
  548. dev->out_fifo_sz = dev->out_blk_sz *
  549. (2 << ((fifo_reg & 0x1C) >> 2));
  550. dev->in_fifo_sz = dev->in_blk_sz *
  551. (2 << ((fifo_reg & 0x380) >> 7));
  552. dev_dbg(dev->dev, "QUP IN:bl:%d, ff:%d, OUT:bl:%d, ff:%d\n",
  553. dev->in_blk_sz, dev->in_fifo_sz,
  554. dev->out_blk_sz, dev->out_fifo_sz);
  555. }
  556. writel(1, dev->base + QUP_SW_RESET);
  557. ret = qup_i2c_poll_state(dev, QUP_RESET_STATE);
  558. if (ret) {
  559. dev_err(dev->dev, "QUP Busy:Trying to recover\n");
  560. goto out_err;
  561. }
  562. if (dev->num_irqs == 3) {
  563. enable_irq(dev->in_irq);
  564. enable_irq(dev->out_irq);
  565. }
  566. enable_irq(dev->err_irq);
  567. /* Initialize QUP registers */
  568. writel(0, dev->base + QUP_CONFIG);
  569. writel(QUP_OPERATIONAL_RESET, dev->base + QUP_OPERATIONAL);
  570. writel(QUP_STATUS_ERROR_FLAGS, dev->base + QUP_ERROR_FLAGS_EN);
  571. writel(I2C_MINI_CORE | I2C_N_VAL, dev->base + QUP_CONFIG);
  572. /* Initialize I2C mini core registers */
  573. writel(0, dev->base + QUP_I2C_CLK_CTL);
  574. writel(QUP_I2C_STATUS_RESET, dev->base + QUP_I2C_STATUS);
  575. while (rem) {
  576. bool filled = false;
  577. dev->cnt = msgs->len;
  578. dev->pos = 0;
  579. dev->msg = msgs;
  580. dev->wr_sz = dev->out_fifo_sz;
  581. dev->err = 0;
  582. dev->complete = &complete;
  583. if (qup_i2c_poll_state(dev, QUP_I2C_MAST_GEN) != 0) {
  584. ret = -EIO;
  585. goto out_err;
  586. }
  587. qup_print_status(dev);
  588. /* HW limits Read upto 256 bytes in 1 read without stop */
  589. if (dev->msg->flags & I2C_M_RD) {
  590. ret = qup_set_read_mode(dev, dev->cnt);
  591. if (ret != 0)
  592. goto out_err;
  593. } else {
  594. ret = qup_set_wr_mode(dev, rem);
  595. if (ret != 0)
  596. goto out_err;
  597. /* Don't fill block till we get interrupt */
  598. if (dev->wr_sz == dev->out_blk_sz)
  599. filled = true;
  600. }
  601. err = qup_update_state(dev, QUP_RUN_STATE);
  602. if (err < 0) {
  603. ret = err;
  604. goto out_err;
  605. }
  606. qup_print_status(dev);
  607. writel(dev->clk_ctl, dev->base + QUP_I2C_CLK_CTL);
  608. /* CLK_CTL register is not in the same 1K region as other QUP
  609. * registers. Ensure that clock control is written before
  610. * programming other QUP registers
  611. */
  612. dsb();
  613. do {
  614. int idx = 0;
  615. uint32_t carry_over = 0;
  616. /* Transition to PAUSE state only possible from RUN */
  617. err = qup_update_state(dev, QUP_PAUSE_STATE);
  618. if (err < 0) {
  619. ret = err;
  620. goto out_err;
  621. }
  622. qup_print_status(dev);
  623. /* This operation is Write, check the next operation
  624. * and decide mode
  625. */
  626. while (filled == false) {
  627. if ((msgs->flags & I2C_M_RD) &&
  628. (dev->cnt == msgs->len))
  629. qup_issue_read(dev, msgs, &idx,
  630. carry_over);
  631. else if (!(msgs->flags & I2C_M_RD))
  632. qup_issue_write(dev, msgs, rem, &idx,
  633. &carry_over);
  634. if (idx >= (dev->wr_sz << 1))
  635. filled = true;
  636. /* Start new message */
  637. if (filled == false) {
  638. if (msgs->flags & I2C_M_RD)
  639. filled = true;
  640. else if (rem > 1) {
  641. /* Only combine operations with
  642. * same address
  643. */
  644. struct i2c_msg *next = msgs + 1;
  645. if (next->addr != msgs->addr ||
  646. next->flags == 0)
  647. filled = true;
  648. else {
  649. rem--;
  650. msgs++;
  651. dev->msg = msgs;
  652. dev->pos = 0;
  653. dev->cnt = msgs->len;
  654. }
  655. } else
  656. filled = true;
  657. }
  658. }
  659. err = qup_update_state(dev, QUP_RUN_STATE);
  660. if (err < 0) {
  661. ret = err;
  662. goto out_err;
  663. }
  664. dev_dbg(dev->dev, "idx:%d, rem:%d, num:%d, mode:%d\n",
  665. idx, rem, num, dev->mode);
  666. qup_print_status(dev);
  667. timeout = wait_for_completion_timeout(&complete, HZ);
  668. if (!timeout) {
  669. uint32_t istatus = readl(dev->base +
  670. QUP_I2C_STATUS);
  671. uint32_t qstatus = readl(dev->base +
  672. QUP_ERROR_FLAGS);
  673. uint32_t op_flgs = readl(dev->base +
  674. QUP_OPERATIONAL);
  675. dev_err(dev->dev, "Transaction timed out\n");
  676. dev_err(dev->dev, "I2C Status: %x\n", istatus);
  677. dev_err(dev->dev, "QUP Status: %x\n", qstatus);
  678. dev_err(dev->dev, "OP Flags: %x\n", op_flgs);
  679. writel(1, dev->base + QUP_SW_RESET);
  680. /* Make sure that the write has gone through
  681. * before returning from the function
  682. */
  683. dsb();
  684. ret = -ETIMEDOUT;
  685. goto out_err;
  686. }
  687. if (dev->err) {
  688. if (dev->err > 0 &&
  689. dev->err & QUP_I2C_NACK_FLAG)
  690. dev_err(dev->dev,
  691. "I2C slave addr:0x%x not connected\n",
  692. dev->msg->addr);
  693. else if (dev->err < 0) {
  694. dev_err(dev->dev,
  695. "QUP data xfer error %d\n", dev->err);
  696. ret = dev->err;
  697. goto out_err;
  698. }
  699. ret = -dev->err;
  700. goto out_err;
  701. }
  702. if (dev->msg->flags & I2C_M_RD) {
  703. int i;
  704. uint32_t dval = 0;
  705. for (i = 0; dev->pos < dev->msg->len; i++,
  706. dev->pos++) {
  707. uint32_t rd_status = readl(dev->base +
  708. QUP_OPERATIONAL);
  709. if (i % 2 == 0) {
  710. if ((rd_status &
  711. QUP_IN_NOT_EMPTY) == 0)
  712. break;
  713. dval = readl(dev->base +
  714. QUP_IN_FIFO_BASE);
  715. dev->msg->buf[dev->pos] =
  716. dval & 0xFF;
  717. } else
  718. dev->msg->buf[dev->pos] =
  719. ((dval & 0xFF0000) >>
  720. 16);
  721. }
  722. dev->cnt -= i;
  723. } else
  724. filled = false; /* refill output FIFO */
  725. } while (dev->cnt > 0);
  726. if (dev->cnt == 0) {
  727. rem--;
  728. msgs++;
  729. if (rem) {
  730. err = qup_update_state(dev, QUP_RESET_STATE);
  731. if (err < 0) {
  732. ret = err;
  733. goto out_err;
  734. }
  735. }
  736. }
  737. /* Wait for I2C bus to be idle */
  738. ret = qup_i2c_poll_writeready(dev, rem);
  739. if (ret) {
  740. dev_err(dev->dev,
  741. "Error waiting for write ready\n");
  742. goto out_err;
  743. }
  744. }
  745. ret = num;
  746. out_err:
  747. disable_irq(dev->err_irq);
  748. if (dev->num_irqs == 3) {
  749. disable_irq(dev->in_irq);
  750. disable_irq(dev->out_irq);
  751. }
  752. dev->complete = NULL;
  753. dev->msg = NULL;
  754. dev->pos = 0;
  755. dev->err = 0;
  756. dev->cnt = 0;
  757. dev->pwr_timer.expires = jiffies + 3*HZ;
  758. add_timer(&dev->pwr_timer);
  759. mutex_unlock(&dev->mlock);
  760. return ret;
  761. }
  762. static u32
  763. qup_i2c_func(struct i2c_adapter *adap)
  764. {
  765. return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
  766. }
  767. static const struct i2c_algorithm qup_i2c_algo = {
  768. .master_xfer = qup_i2c_xfer,
  769. .functionality = qup_i2c_func,
  770. };
  771. static int __devinit
  772. qup_i2c_probe(struct platform_device *pdev)
  773. {
  774. struct qup_i2c_dev *dev;
  775. struct resource *qup_mem, *gsbi_mem, *qup_io, *gsbi_io;
  776. struct resource *in_irq, *out_irq, *err_irq;
  777. struct clk *clk, *pclk;
  778. int ret = 0;
  779. struct msm_i2c_platform_data *pdata;
  780. const char *qup_apps_clk_name = "qup_clk";
  781. gsbi_mem = NULL;
  782. dev_dbg(&pdev->dev, "qup_i2c_probe\n");
  783. pdata = pdev->dev.platform_data;
  784. if (!pdata) {
  785. dev_err(&pdev->dev, "platform data not initialized\n");
  786. return -ENOSYS;
  787. }
  788. qup_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
  789. "qup_phys_addr");
  790. if (!qup_mem) {
  791. dev_err(&pdev->dev, "no qup mem resource?\n");
  792. return -ENODEV;
  793. }
  794. /*
  795. * We only have 1 interrupt for new hardware targets and in_irq,
  796. * out_irq will be NULL for those platforms
  797. */
  798. in_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
  799. "qup_in_intr");
  800. out_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
  801. "qup_out_intr");
  802. err_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
  803. "qup_err_intr");
  804. if (!err_irq) {
  805. dev_err(&pdev->dev, "no error irq resource?\n");
  806. return -ENODEV;
  807. }
  808. qup_io = request_mem_region(qup_mem->start, resource_size(qup_mem),
  809. pdev->name);
  810. if (!qup_io) {
  811. dev_err(&pdev->dev, "QUP region already claimed\n");
  812. return -EBUSY;
  813. }
  814. if (!pdata->use_gsbi_shared_mode) {
  815. gsbi_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
  816. "gsbi_qup_i2c_addr");
  817. if (!gsbi_mem) {
  818. dev_err(&pdev->dev, "no gsbi mem resource?\n");
  819. return -ENODEV;
  820. }
  821. gsbi_io = request_mem_region(gsbi_mem->start,
  822. resource_size(gsbi_mem),
  823. pdev->name);
  824. if (!gsbi_io) {
  825. dev_err(&pdev->dev, "GSBI region already claimed\n");
  826. return -EBUSY;
  827. }
  828. }
  829. if (pdata->clk != NULL)
  830. qup_apps_clk_name = pdata->clk;
  831. clk = clk_get(&pdev->dev, qup_apps_clk_name);
  832. if (IS_ERR(clk)) {
  833. dev_err(&pdev->dev, "Could not get clock\n");
  834. ret = PTR_ERR(clk);
  835. goto err_clk_get_failed;
  836. }
  837. if (pdata->pclk != NULL) {
  838. pclk = clk_get(&pdev->dev, pdata->pclk);
  839. if (IS_ERR(pclk)) {
  840. dev_err(&pdev->dev, "Could not get pclock\n");
  841. ret = PTR_ERR(pclk);
  842. clk_put(clk);
  843. goto err_clk_get_failed;
  844. }
  845. } else
  846. pclk = NULL;
  847. if (!(pdata->msm_i2c_config_gpio)) {
  848. dev_err(&pdev->dev, "config_gpio function not initialized\n");
  849. ret = -ENOSYS;
  850. goto err_config_failed;
  851. }
  852. /* We support frequencies upto FAST Mode(400KHz) */
  853. if (pdata->clk_freq <= 0 ||
  854. pdata->clk_freq > 400000) {
  855. dev_err(&pdev->dev, "clock frequency not supported\n");
  856. ret = -EIO;
  857. goto err_config_failed;
  858. }
  859. dev = kzalloc(sizeof(struct qup_i2c_dev), GFP_KERNEL);
  860. if (!dev) {
  861. ret = -ENOMEM;
  862. goto err_alloc_dev_failed;
  863. }
  864. dev->dev = &pdev->dev;
  865. if (in_irq)
  866. dev->in_irq = in_irq->start;
  867. if (out_irq)
  868. dev->out_irq = out_irq->start;
  869. dev->err_irq = err_irq->start;
  870. if (in_irq && out_irq)
  871. dev->num_irqs = 3;
  872. else
  873. dev->num_irqs = 1;
  874. dev->clk = clk;
  875. dev->pclk = pclk;
  876. dev->base = ioremap(qup_mem->start, resource_size(qup_mem));
  877. if (!dev->base) {
  878. ret = -ENOMEM;
  879. goto err_ioremap_failed;
  880. }
  881. /* Configure GSBI block to use I2C functionality */
  882. if (gsbi_mem) {
  883. dev->gsbi = ioremap(gsbi_mem->start, resource_size(gsbi_mem));
  884. if (!dev->gsbi) {
  885. ret = -ENOMEM;
  886. goto err_gsbi_failed;
  887. }
  888. }
  889. platform_set_drvdata(pdev, dev);
  890. dev->one_bit_t = USEC_PER_SEC/pdata->clk_freq;
  891. dev->pdata = pdata;
  892. dev->clk_ctl = 0;
  893. /*
  894. * We use num_irqs to also indicate if we got 3 interrupts or just 1.
  895. * If we have just 1, we use err_irq as the general purpose irq
  896. * and handle the changes in ISR accordingly
  897. * Per Hardware guidelines, if we have 3 interrupts, they are always
  898. * edge triggering, and if we have 1, it's always level-triggering
  899. */
  900. if (dev->num_irqs == 3) {
  901. ret = request_irq(dev->in_irq, qup_i2c_interrupt,
  902. IRQF_TRIGGER_RISING, "qup_in_intr", dev);
  903. if (ret) {
  904. dev_err(&pdev->dev, "request_in_irq failed\n");
  905. goto err_request_irq_failed;
  906. }
  907. /*
  908. * We assume out_irq exists if in_irq does since platform
  909. * configuration either has 3 interrupts assigned to QUP or 1
  910. */
  911. ret = request_irq(dev->out_irq, qup_i2c_interrupt,
  912. IRQF_TRIGGER_RISING, "qup_out_intr", dev);
  913. if (ret) {
  914. dev_err(&pdev->dev, "request_out_irq failed\n");
  915. free_irq(dev->in_irq, dev);
  916. goto err_request_irq_failed;
  917. }
  918. ret = request_irq(dev->err_irq, qup_i2c_interrupt,
  919. IRQF_TRIGGER_RISING, "qup_err_intr", dev);
  920. if (ret) {
  921. dev_err(&pdev->dev, "request_err_irq failed\n");
  922. free_irq(dev->out_irq, dev);
  923. free_irq(dev->in_irq, dev);
  924. goto err_request_irq_failed;
  925. }
  926. } else {
  927. ret = request_irq(dev->err_irq, qup_i2c_interrupt,
  928. IRQF_TRIGGER_HIGH, "qup_err_intr", dev);
  929. if (ret) {
  930. dev_err(&pdev->dev, "request_err_irq failed\n");
  931. goto err_request_irq_failed;
  932. }
  933. }
  934. disable_irq(dev->err_irq);
  935. if (dev->num_irqs == 3) {
  936. disable_irq(dev->in_irq);
  937. disable_irq(dev->out_irq);
  938. }
  939. i2c_set_adapdata(&dev->adapter, dev);
  940. dev->adapter.algo = &qup_i2c_algo;
  941. strlcpy(dev->adapter.name,
  942. "QUP I2C adapter",
  943. sizeof(dev->adapter.name));
  944. dev->adapter.nr = pdev->id;
  945. pdata->msm_i2c_config_gpio(dev->adapter.nr, 1);
  946. dev->suspended = 0;
  947. mutex_init(&dev->mlock);
  948. dev->clk_state = 0;
  949. setup_timer(&dev->pwr_timer, qup_i2c_pwr_timer, (unsigned long) dev);
  950. pm_runtime_set_active(&pdev->dev);
  951. pm_runtime_enable(&pdev->dev);
  952. ret = i2c_add_numbered_adapter(&dev->adapter);
  953. if (ret) {
  954. dev_err(&pdev->dev, "i2c_add_adapter failed\n");
  955. if (dev->num_irqs == 3) {
  956. free_irq(dev->out_irq, dev);
  957. free_irq(dev->in_irq, dev);
  958. }
  959. free_irq(dev->err_irq, dev);
  960. } else
  961. return 0;
  962. err_request_irq_failed:
  963. if (dev->gsbi)
  964. iounmap(dev->gsbi);
  965. err_gsbi_failed:
  966. iounmap(dev->base);
  967. err_ioremap_failed:
  968. kfree(dev);
  969. err_alloc_dev_failed:
  970. err_config_failed:
  971. clk_put(clk);
  972. if (pclk)
  973. clk_put(pclk);
  974. err_clk_get_failed:
  975. if (gsbi_mem)
  976. release_mem_region(gsbi_mem->start, resource_size(gsbi_mem));
  977. release_mem_region(qup_mem->start, resource_size(qup_mem));
  978. return ret;
  979. }
  980. static int __devexit
  981. qup_i2c_remove(struct platform_device *pdev)
  982. {
  983. struct qup_i2c_dev *dev = platform_get_drvdata(pdev);
  984. struct resource *qup_mem, *gsbi_mem;
  985. /* Grab mutex to ensure ongoing transaction is over */
  986. mutex_lock(&dev->mlock);
  987. dev->suspended = 1;
  988. mutex_unlock(&dev->mlock);
  989. mutex_destroy(&dev->mlock);
  990. del_timer_sync(&dev->pwr_timer);
  991. if (dev->clk_state != 0)
  992. qup_i2c_pwr_mgmt(dev, 0);
  993. platform_set_drvdata(pdev, NULL);
  994. if (dev->num_irqs == 3) {
  995. free_irq(dev->out_irq, dev);
  996. free_irq(dev->in_irq, dev);
  997. }
  998. free_irq(dev->err_irq, dev);
  999. i2c_del_adapter(&dev->adapter);
  1000. clk_put(dev->clk);
  1001. if (dev->pclk)
  1002. clk_put(dev->pclk);
  1003. if (dev->gsbi)
  1004. iounmap(dev->gsbi);
  1005. iounmap(dev->base);
  1006. pm_runtime_disable(&pdev->dev);
  1007. kfree(dev);
  1008. if (!(dev->pdata->use_gsbi_shared_mode)) {
  1009. gsbi_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
  1010. "gsbi_qup_i2c_addr");
  1011. release_mem_region(gsbi_mem->start, resource_size(gsbi_mem));
  1012. }
  1013. qup_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
  1014. "qup_phys_addr");
  1015. release_mem_region(qup_mem->start, resource_size(qup_mem));
  1016. return 0;
  1017. }
  1018. #ifdef CONFIG_PM
  1019. static int qup_i2c_suspend(struct device *device)
  1020. {
  1021. struct platform_device *pdev = to_platform_device(device);
  1022. struct qup_i2c_dev *dev = platform_get_drvdata(pdev);
  1023. /* Grab mutex to ensure ongoing transaction is over */
  1024. mutex_lock(&dev->mlock);
  1025. dev->suspended = 1;
  1026. mutex_unlock(&dev->mlock);
  1027. del_timer_sync(&dev->pwr_timer);
  1028. if (dev->clk_state != 0)
  1029. qup_i2c_pwr_mgmt(dev, 0);
  1030. return 0;
  1031. }
  1032. static int qup_i2c_resume(struct device *device)
  1033. {
  1034. struct platform_device *pdev = to_platform_device(device);
  1035. struct qup_i2c_dev *dev = platform_get_drvdata(pdev);
  1036. dev->suspended = 0;
  1037. return 0;
  1038. }
  1039. #endif /* CONFIG_PM */
  1040. #ifdef CONFIG_PM_RUNTIME
  1041. static int i2c_qup_runtime_idle(struct device *dev)
  1042. {
  1043. dev_dbg(dev, "pm_runtime: idle...\n");
  1044. return 0;
  1045. }
  1046. static int i2c_qup_runtime_suspend(struct device *dev)
  1047. {
  1048. dev_dbg(dev, "pm_runtime: suspending...\n");
  1049. return 0;
  1050. }
  1051. static int i2c_qup_runtime_resume(struct device *dev)
  1052. {
  1053. dev_dbg(dev, "pm_runtime: resuming...\n");
  1054. return 0;
  1055. }
  1056. #endif
  1057. static const struct dev_pm_ops i2c_qup_dev_pm_ops = {
  1058. SET_SYSTEM_SLEEP_PM_OPS(
  1059. qup_i2c_suspend,
  1060. qup_i2c_resume
  1061. )
  1062. SET_RUNTIME_PM_OPS(
  1063. i2c_qup_runtime_suspend,
  1064. i2c_qup_runtime_resume,
  1065. i2c_qup_runtime_idle
  1066. )
  1067. };
  1068. static struct platform_driver qup_i2c_driver = {
  1069. .probe = qup_i2c_probe,
  1070. .remove = __devexit_p(qup_i2c_remove),
  1071. .driver = {
  1072. .name = "qup_i2c",
  1073. .owner = THIS_MODULE,
  1074. .pm = &i2c_qup_dev_pm_ops,
  1075. },
  1076. };
  1077. /* QUP may be needed to bring up other drivers */
  1078. static int __init
  1079. qup_i2c_init_driver(void)
  1080. {
  1081. return platform_driver_register(&qup_i2c_driver);
  1082. }
  1083. arch_initcall(qup_i2c_init_driver);
  1084. static void __exit qup_i2c_exit_driver(void)
  1085. {
  1086. platform_driver_unregister(&qup_i2c_driver);
  1087. }
  1088. module_exit(qup_i2c_exit_driver);