i2c-msm.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
  1. /* drivers/i2c/busses/i2c-msm.c
  2. *
  3. * Copyright (C) 2007 Google, Inc.
  4. * Copyright (c) 2009, The Linux Foundation. All rights reserved.
  5. *
  6. * This software is licensed under the terms of the GNU General Public
  7. * License version 2, as published by the Free Software Foundation, and
  8. * may be copied, distributed, and modified under those terms.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. */
  16. /* #define DEBUG */
  17. #include <linux/slab.h>
  18. #include <linux/clk.h>
  19. #include <linux/err.h>
  20. #include <linux/init.h>
  21. #include <linux/i2c.h>
  22. #include <linux/interrupt.h>
  23. #include <linux/irq.h>
  24. #include <linux/platform_device.h>
  25. #include <linux/delay.h>
  26. #include <linux/io.h>
  27. #include <mach/board.h>
  28. #include <linux/mutex.h>
  29. #include <linux/timer.h>
  30. #include <linux/remote_spinlock.h>
  31. #include <linux/pm_qos.h>
  32. #include <linux/gpio.h>
  33. #include <linux/module.h>
  34. enum {
  35. I2C_WRITE_DATA = 0x00,
  36. I2C_CLK_CTL = 0x04,
  37. I2C_STATUS = 0x08,
  38. I2C_READ_DATA = 0x0c,
  39. I2C_INTERFACE_SELECT = 0x10,
  40. I2C_WRITE_DATA_DATA_BYTE = 0xff,
  41. I2C_WRITE_DATA_ADDR_BYTE = 1U << 8,
  42. I2C_WRITE_DATA_LAST_BYTE = 1U << 9,
  43. I2C_CLK_CTL_FS_DIVIDER_VALUE = 0xff,
  44. I2C_CLK_CTL_HS_DIVIDER_VALUE = 7U << 8,
  45. I2C_STATUS_WR_BUFFER_FULL = 1U << 0,
  46. I2C_STATUS_RD_BUFFER_FULL = 1U << 1,
  47. I2C_STATUS_BUS_ERROR = 1U << 2,
  48. I2C_STATUS_PACKET_NACKED = 1U << 3,
  49. I2C_STATUS_ARB_LOST = 1U << 4,
  50. I2C_STATUS_INVALID_WRITE = 1U << 5,
  51. I2C_STATUS_FAILED = 3U << 6,
  52. I2C_STATUS_BUS_ACTIVE = 1U << 8,
  53. I2C_STATUS_BUS_MASTER = 1U << 9,
  54. I2C_STATUS_ERROR_MASK = 0xfc,
  55. I2C_INTERFACE_SELECT_INTF_SELECT = 1U << 0,
  56. I2C_INTERFACE_SELECT_SCL = 1U << 8,
  57. I2C_INTERFACE_SELECT_SDA = 1U << 9,
  58. I2C_STATUS_RX_DATA_STATE = 3U << 11,
  59. I2C_STATUS_LOW_CLK_STATE = 3U << 13,
  60. };
  61. struct msm_i2c_dev {
  62. struct device *dev;
  63. void __iomem *base; /* virtual */
  64. int irq;
  65. struct clk *clk;
  66. struct i2c_adapter adap_pri;
  67. struct i2c_adapter adap_aux;
  68. spinlock_t lock;
  69. struct i2c_msg *msg;
  70. int rem;
  71. int pos;
  72. int cnt;
  73. int err;
  74. int flush_cnt;
  75. int rd_acked;
  76. int one_bit_t;
  77. remote_mutex_t r_lock;
  78. int suspended;
  79. struct mutex mlock;
  80. struct msm_i2c_platform_data *pdata;
  81. struct timer_list pwr_timer;
  82. int clk_state;
  83. void *complete;
  84. struct pm_qos_request pm_qos_req;
  85. };
  86. static void
  87. msm_i2c_pwr_mgmt(struct msm_i2c_dev *dev, unsigned int state)
  88. {
  89. dev->clk_state = state;
  90. if (state != 0)
  91. clk_enable(dev->clk);
  92. else
  93. clk_disable(dev->clk);
  94. }
  95. static void
  96. msm_i2c_pwr_timer(unsigned long data)
  97. {
  98. struct msm_i2c_dev *dev = (struct msm_i2c_dev *) data;
  99. dev_dbg(dev->dev, "I2C_Power: Inactivity based power management\n");
  100. if (dev->clk_state == 1)
  101. msm_i2c_pwr_mgmt(dev, 0);
  102. }
  103. #ifdef DEBUG
  104. static void
  105. dump_status(uint32_t status)
  106. {
  107. printk("STATUS (0x%.8x): ", status);
  108. if (status & I2C_STATUS_BUS_MASTER)
  109. printk("MST ");
  110. if (status & I2C_STATUS_BUS_ACTIVE)
  111. printk("ACT ");
  112. if (status & I2C_STATUS_INVALID_WRITE)
  113. printk("INV_WR ");
  114. if (status & I2C_STATUS_ARB_LOST)
  115. printk("ARB_LST ");
  116. if (status & I2C_STATUS_PACKET_NACKED)
  117. printk("NAK ");
  118. if (status & I2C_STATUS_BUS_ERROR)
  119. printk("BUS_ERR ");
  120. if (status & I2C_STATUS_RD_BUFFER_FULL)
  121. printk("RD_FULL ");
  122. if (status & I2C_STATUS_WR_BUFFER_FULL)
  123. printk("WR_FULL ");
  124. if (status & I2C_STATUS_FAILED)
  125. printk("FAIL 0x%x", (status & I2C_STATUS_FAILED));
  126. printk("\n");
  127. }
  128. #endif
  129. static irqreturn_t
  130. msm_i2c_interrupt(int irq, void *devid)
  131. {
  132. struct msm_i2c_dev *dev = devid;
  133. uint32_t status = readl(dev->base + I2C_STATUS);
  134. int err = 0;
  135. #ifdef DEBUG
  136. dump_status(status);
  137. #endif
  138. spin_lock(&dev->lock);
  139. if (!dev->msg) {
  140. printk(KERN_ERR "%s: IRQ but nothing to do!\n", __func__);
  141. spin_unlock(&dev->lock);
  142. return IRQ_HANDLED;
  143. }
  144. if (status & I2C_STATUS_ERROR_MASK) {
  145. err = -EIO;
  146. goto out_err;
  147. }
  148. if (dev->msg->flags & I2C_M_RD) {
  149. if (status & I2C_STATUS_RD_BUFFER_FULL) {
  150. /*
  151. * Theres something in the FIFO.
  152. * Are we expecting data or flush crap?
  153. */
  154. if (dev->cnt) { /* DATA */
  155. uint8_t *data = &dev->msg->buf[dev->pos];
  156. /* This is in spin-lock. So there will be no
  157. * scheduling between reading the second-last
  158. * byte and writing LAST_BYTE to the controller.
  159. * So extra read-cycle-clock won't be generated
  160. * Per I2C MSM HW Specs: Write LAST_BYTE befure
  161. * reading 2nd last byte
  162. */
  163. if (dev->cnt == 2)
  164. writel(I2C_WRITE_DATA_LAST_BYTE,
  165. dev->base + I2C_WRITE_DATA);
  166. *data = readl(dev->base + I2C_READ_DATA);
  167. dev->cnt--;
  168. dev->pos++;
  169. if (dev->msg->len == 1)
  170. dev->rd_acked = 0;
  171. if (dev->cnt == 0)
  172. goto out_complete;
  173. } else {
  174. /* Now that extra read-cycle-clocks aren't
  175. * generated, this becomes error condition
  176. */
  177. dev_err(dev->dev,
  178. "read did not stop, status - %x\n",
  179. status);
  180. err = -EIO;
  181. goto out_err;
  182. }
  183. } else if (dev->msg->len == 1 && dev->rd_acked == 0 &&
  184. ((status & I2C_STATUS_RX_DATA_STATE) ==
  185. I2C_STATUS_RX_DATA_STATE))
  186. writel(I2C_WRITE_DATA_LAST_BYTE,
  187. dev->base + I2C_WRITE_DATA);
  188. } else {
  189. uint16_t data;
  190. if (status & I2C_STATUS_WR_BUFFER_FULL) {
  191. dev_err(dev->dev,
  192. "Write buffer full in ISR on write?\n");
  193. err = -EIO;
  194. goto out_err;
  195. }
  196. if (dev->cnt) {
  197. /* Ready to take a byte */
  198. data = dev->msg->buf[dev->pos];
  199. if (dev->cnt == 1 && dev->rem == 1)
  200. data |= I2C_WRITE_DATA_LAST_BYTE;
  201. status = readl(dev->base + I2C_STATUS);
  202. /*
  203. * Due to a hardware timing issue, data line setup time
  204. * may be reduced to less than recommended 250 ns.
  205. * This happens when next byte is written in a
  206. * particular window of clock line being low and master
  207. * not stretching the clock line. Due to setup time
  208. * violation, some slaves may miss first-bit of data, or
  209. * misinterprete data as start condition.
  210. * We introduce delay of just over 1/2 clock cycle to
  211. * ensure master stretches the clock line thereby
  212. * avoiding setup time violation. Delay is introduced
  213. * only if I2C clock FSM is LOW. The delay is not needed
  214. * if I2C clock FSM is HIGH or FORCED_LOW.
  215. */
  216. if ((status & I2C_STATUS_LOW_CLK_STATE) ==
  217. I2C_STATUS_LOW_CLK_STATE)
  218. udelay((dev->one_bit_t >> 1) + 1);
  219. writel(data, dev->base + I2C_WRITE_DATA);
  220. dev->pos++;
  221. dev->cnt--;
  222. } else
  223. goto out_complete;
  224. }
  225. spin_unlock(&dev->lock);
  226. return IRQ_HANDLED;
  227. out_err:
  228. dev->err = err;
  229. out_complete:
  230. complete(dev->complete);
  231. spin_unlock(&dev->lock);
  232. return IRQ_HANDLED;
  233. }
  234. static int
  235. msm_i2c_poll_writeready(struct msm_i2c_dev *dev)
  236. {
  237. uint32_t retries = 0;
  238. while (retries != 2000) {
  239. uint32_t status = readl(dev->base + I2C_STATUS);
  240. if (!(status & I2C_STATUS_WR_BUFFER_FULL))
  241. return 0;
  242. if (retries++ > 1000)
  243. usleep_range(100, 200);
  244. }
  245. return -ETIMEDOUT;
  246. }
  247. static int
  248. msm_i2c_poll_notbusy(struct msm_i2c_dev *dev)
  249. {
  250. uint32_t retries = 0;
  251. while (retries != 2000) {
  252. uint32_t status = readl(dev->base + I2C_STATUS);
  253. if (!(status & I2C_STATUS_BUS_ACTIVE))
  254. return 0;
  255. if (retries++ > 1000)
  256. usleep_range(100, 200);
  257. }
  258. return -ETIMEDOUT;
  259. }
  260. static int
  261. msm_i2c_recover_bus_busy(struct msm_i2c_dev *dev, struct i2c_adapter *adap)
  262. {
  263. int i;
  264. int gpio_clk;
  265. int gpio_dat;
  266. uint32_t status = readl(dev->base + I2C_STATUS);
  267. bool gpio_clk_status = false;
  268. if (!(status & (I2C_STATUS_BUS_ACTIVE | I2C_STATUS_WR_BUFFER_FULL)))
  269. return 0;
  270. dev->pdata->msm_i2c_config_gpio(adap->nr, 0);
  271. /* Even adapter is primary and Odd adapter is AUX */
  272. if (adap->nr % 2) {
  273. gpio_clk = dev->pdata->aux_clk;
  274. gpio_dat = dev->pdata->aux_dat;
  275. } else {
  276. gpio_clk = dev->pdata->pri_clk;
  277. gpio_dat = dev->pdata->pri_dat;
  278. }
  279. disable_irq(dev->irq);
  280. if (status & I2C_STATUS_RD_BUFFER_FULL) {
  281. dev_warn(dev->dev, "Read buffer full, status %x, intf %x\n",
  282. status, readl(dev->base + I2C_INTERFACE_SELECT));
  283. writel(I2C_WRITE_DATA_LAST_BYTE, dev->base + I2C_WRITE_DATA);
  284. readl(dev->base + I2C_READ_DATA);
  285. } else if (status & I2C_STATUS_BUS_MASTER) {
  286. dev_warn(dev->dev, "Still the bus master, status %x, intf %x\n",
  287. status, readl(dev->base + I2C_INTERFACE_SELECT));
  288. writel(I2C_WRITE_DATA_LAST_BYTE | 0xff,
  289. dev->base + I2C_WRITE_DATA);
  290. }
  291. for (i = 0; i < 9; i++) {
  292. if (gpio_get_value(gpio_dat) && gpio_clk_status)
  293. break;
  294. gpio_direction_output(gpio_clk, 0);
  295. udelay(5);
  296. gpio_direction_output(gpio_dat, 0);
  297. udelay(5);
  298. gpio_direction_input(gpio_clk);
  299. udelay(5);
  300. if (!gpio_get_value(gpio_clk))
  301. usleep_range(20, 30);
  302. if (!gpio_get_value(gpio_clk))
  303. msleep(10);
  304. gpio_clk_status = gpio_get_value(gpio_clk);
  305. gpio_direction_input(gpio_dat);
  306. udelay(5);
  307. }
  308. dev->pdata->msm_i2c_config_gpio(adap->nr, 1);
  309. udelay(10);
  310. status = readl(dev->base + I2C_STATUS);
  311. if (!(status & I2C_STATUS_BUS_ACTIVE)) {
  312. dev_info(dev->dev, "Bus busy cleared after %d clock cycles, "
  313. "status %x, intf %x\n",
  314. i, status, readl(dev->base + I2C_INTERFACE_SELECT));
  315. enable_irq(dev->irq);
  316. return 0;
  317. }
  318. dev_err(dev->dev, "Bus still busy, status %x, intf %x\n",
  319. status, readl(dev->base + I2C_INTERFACE_SELECT));
  320. enable_irq(dev->irq);
  321. return -EBUSY;
  322. }
  323. static int
  324. msm_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
  325. {
  326. DECLARE_COMPLETION_ONSTACK(complete);
  327. struct msm_i2c_dev *dev = i2c_get_adapdata(adap);
  328. int ret;
  329. int rem = num;
  330. uint16_t addr;
  331. long timeout;
  332. unsigned long flags;
  333. int check_busy = 1;
  334. del_timer_sync(&dev->pwr_timer);
  335. mutex_lock(&dev->mlock);
  336. if (dev->suspended) {
  337. mutex_unlock(&dev->mlock);
  338. return -EIO;
  339. }
  340. if (dev->clk_state == 0) {
  341. dev_dbg(dev->dev, "I2C_Power: Enable I2C clock(s)\n");
  342. msm_i2c_pwr_mgmt(dev, 1);
  343. }
  344. /* Don't allow power collapse until we release remote spinlock */
  345. pm_qos_update_request(&dev->pm_qos_req, dev->pdata->pm_lat);
  346. if (dev->pdata->rmutex) {
  347. remote_mutex_lock(&dev->r_lock);
  348. /* If other processor did some transactions, we may have
  349. * interrupt pending. Clear it
  350. */
  351. irq_get_chip(dev->irq)->irq_ack(irq_get_irq_data(dev->irq));
  352. }
  353. if (adap == &dev->adap_pri)
  354. writel(0, dev->base + I2C_INTERFACE_SELECT);
  355. else
  356. writel(I2C_INTERFACE_SELECT_INTF_SELECT,
  357. dev->base + I2C_INTERFACE_SELECT);
  358. enable_irq(dev->irq);
  359. while (rem) {
  360. addr = msgs->addr << 1;
  361. if (msgs->flags & I2C_M_RD)
  362. addr |= 1;
  363. spin_lock_irqsave(&dev->lock, flags);
  364. dev->msg = msgs;
  365. dev->rem = rem;
  366. dev->pos = 0;
  367. dev->err = 0;
  368. dev->flush_cnt = 0;
  369. dev->cnt = msgs->len;
  370. dev->complete = &complete;
  371. spin_unlock_irqrestore(&dev->lock, flags);
  372. if (check_busy) {
  373. ret = msm_i2c_poll_notbusy(dev);
  374. if (ret)
  375. ret = msm_i2c_recover_bus_busy(dev, adap);
  376. if (ret) {
  377. dev_err(dev->dev,
  378. "Error waiting for notbusy\n");
  379. goto out_err;
  380. }
  381. check_busy = 0;
  382. }
  383. if (rem == 1 && msgs->len == 0)
  384. addr |= I2C_WRITE_DATA_LAST_BYTE;
  385. /* Wait for WR buffer not full */
  386. ret = msm_i2c_poll_writeready(dev);
  387. if (ret) {
  388. ret = msm_i2c_recover_bus_busy(dev, adap);
  389. if (ret) {
  390. dev_err(dev->dev,
  391. "Error waiting for write ready before addr\n");
  392. goto out_err;
  393. }
  394. }
  395. /* special case for doing 1 byte read.
  396. * There should be no scheduling between I2C controller becoming
  397. * ready to read and writing LAST-BYTE to I2C controller
  398. * This will avoid potential of I2C controller starting to latch
  399. * another extra byte.
  400. */
  401. if ((msgs->len == 1) && (msgs->flags & I2C_M_RD)) {
  402. uint32_t retries = 0;
  403. spin_lock_irqsave(&dev->lock, flags);
  404. writel(I2C_WRITE_DATA_ADDR_BYTE | addr,
  405. dev->base + I2C_WRITE_DATA);
  406. /* Poll for I2C controller going into RX_DATA mode to
  407. * ensure controller goes into receive mode.
  408. * Just checking write_buffer_full may not work since
  409. * there is delay between the write-buffer becoming
  410. * empty and the slave sending ACK to ensure I2C
  411. * controller goes in receive mode to receive data.
  412. */
  413. while (retries != 2000) {
  414. uint32_t status = readl(dev->base + I2C_STATUS);
  415. if ((status & I2C_STATUS_RX_DATA_STATE)
  416. == I2C_STATUS_RX_DATA_STATE)
  417. break;
  418. retries++;
  419. }
  420. if (retries >= 2000) {
  421. dev->rd_acked = 0;
  422. spin_unlock_irqrestore(&dev->lock, flags);
  423. /* 1-byte-reads from slow devices in interrupt
  424. * context
  425. */
  426. goto wait_for_int;
  427. }
  428. dev->rd_acked = 1;
  429. writel(I2C_WRITE_DATA_LAST_BYTE,
  430. dev->base + I2C_WRITE_DATA);
  431. spin_unlock_irqrestore(&dev->lock, flags);
  432. } else {
  433. writel(I2C_WRITE_DATA_ADDR_BYTE | addr,
  434. dev->base + I2C_WRITE_DATA);
  435. }
  436. /* Polling and waiting for write_buffer_empty is not necessary.
  437. * Even worse, if we do, it can result in invalid status and
  438. * error if interrupt(s) occur while polling.
  439. */
  440. /*
  441. * Now that we've setup the xfer, the ISR will transfer the data
  442. * and wake us up with dev->err set if there was an error
  443. */
  444. wait_for_int:
  445. timeout = wait_for_completion_timeout(&complete, HZ);
  446. if (!timeout) {
  447. dev_err(dev->dev, "Transaction timed out\n");
  448. writel(I2C_WRITE_DATA_LAST_BYTE,
  449. dev->base + I2C_WRITE_DATA);
  450. msleep(100);
  451. /* FLUSH */
  452. readl(dev->base + I2C_READ_DATA);
  453. readl(dev->base + I2C_STATUS);
  454. ret = -ETIMEDOUT;
  455. goto out_err;
  456. }
  457. if (dev->err) {
  458. dev_err(dev->dev,
  459. "(%04x) Error during data xfer (%d)\n",
  460. addr, dev->err);
  461. ret = dev->err;
  462. goto out_err;
  463. }
  464. if (msgs->flags & I2C_M_RD)
  465. check_busy = 1;
  466. msgs++;
  467. rem--;
  468. }
  469. ret = num;
  470. out_err:
  471. spin_lock_irqsave(&dev->lock, flags);
  472. dev->complete = NULL;
  473. dev->msg = NULL;
  474. dev->rem = 0;
  475. dev->pos = 0;
  476. dev->err = 0;
  477. dev->flush_cnt = 0;
  478. dev->cnt = 0;
  479. spin_unlock_irqrestore(&dev->lock, flags);
  480. disable_irq(dev->irq);
  481. if (dev->pdata->rmutex)
  482. remote_mutex_unlock(&dev->r_lock);
  483. pm_qos_update_request(&dev->pm_qos_req,
  484. PM_QOS_DEFAULT_VALUE);
  485. mod_timer(&dev->pwr_timer, (jiffies + 3*HZ));
  486. mutex_unlock(&dev->mlock);
  487. return ret;
  488. }
  489. static u32
  490. msm_i2c_func(struct i2c_adapter *adap)
  491. {
  492. return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
  493. }
  494. static const struct i2c_algorithm msm_i2c_algo = {
  495. .master_xfer = msm_i2c_xfer,
  496. .functionality = msm_i2c_func,
  497. };
  498. static int
  499. msm_i2c_probe(struct platform_device *pdev)
  500. {
  501. struct msm_i2c_dev *dev;
  502. struct resource *mem, *irq, *ioarea;
  503. int ret;
  504. int fs_div;
  505. int hs_div;
  506. int i2c_clk;
  507. int clk_ctl;
  508. struct clk *clk;
  509. struct msm_i2c_platform_data *pdata;
  510. printk(KERN_INFO "msm_i2c_probe\n");
  511. /* NOTE: driver uses the static register mapping */
  512. mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  513. if (!mem) {
  514. dev_err(&pdev->dev, "no mem resource?\n");
  515. return -ENODEV;
  516. }
  517. irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
  518. if (!irq) {
  519. dev_err(&pdev->dev, "no irq resource?\n");
  520. return -ENODEV;
  521. }
  522. ioarea = request_mem_region(mem->start, (mem->end - mem->start) + 1,
  523. pdev->name);
  524. if (!ioarea) {
  525. dev_err(&pdev->dev, "I2C region already claimed\n");
  526. return -EBUSY;
  527. }
  528. clk = clk_get(&pdev->dev, "core_clk");
  529. if (IS_ERR(clk)) {
  530. dev_err(&pdev->dev, "Could not get clock\n");
  531. ret = PTR_ERR(clk);
  532. goto err_clk_get_failed;
  533. }
  534. pdata = pdev->dev.platform_data;
  535. if (!pdata) {
  536. dev_err(&pdev->dev, "platform data not initialized\n");
  537. ret = -ENOSYS;
  538. goto err_clk_get_failed;
  539. }
  540. if (!pdata->msm_i2c_config_gpio) {
  541. dev_err(&pdev->dev, "config_gpio function not initialized\n");
  542. ret = -ENOSYS;
  543. goto err_clk_get_failed;
  544. }
  545. /* We support frequencies upto FAST Mode(400KHz) */
  546. if (pdata->clk_freq <= 0 || pdata->clk_freq > 400000) {
  547. dev_err(&pdev->dev, "clock frequency not supported\n");
  548. ret = -EIO;
  549. goto err_clk_get_failed;
  550. }
  551. dev = kzalloc(sizeof(struct msm_i2c_dev), GFP_KERNEL);
  552. if (!dev) {
  553. ret = -ENOMEM;
  554. goto err_alloc_dev_failed;
  555. }
  556. dev->dev = &pdev->dev;
  557. dev->irq = irq->start;
  558. dev->clk = clk;
  559. dev->pdata = pdata;
  560. dev->base = ioremap(mem->start, (mem->end - mem->start) + 1);
  561. if (!dev->base) {
  562. ret = -ENOMEM;
  563. goto err_ioremap_failed;
  564. }
  565. dev->one_bit_t = USEC_PER_SEC/pdata->clk_freq;
  566. spin_lock_init(&dev->lock);
  567. platform_set_drvdata(pdev, dev);
  568. BUG_ON(clk_prepare_enable(clk));
  569. if (pdata->rmutex) {
  570. struct remote_mutex_id rmid;
  571. rmid.r_spinlock_id = pdata->rsl_id;
  572. rmid.delay_us = 10000000/pdata->clk_freq;
  573. if (remote_mutex_init(&dev->r_lock, &rmid) != 0)
  574. pdata->rmutex = 0;
  575. }
  576. /* I2C_HS_CLK = I2C_CLK/(3*(HS_DIVIDER_VALUE+1) */
  577. /* I2C_FS_CLK = I2C_CLK/(2*(FS_DIVIDER_VALUE+3) */
  578. /* FS_DIVIDER_VALUE = ((I2C_CLK / I2C_FS_CLK) / 2) - 3 */
  579. i2c_clk = 19200000; /* input clock */
  580. fs_div = ((i2c_clk / pdata->clk_freq) / 2) - 3;
  581. hs_div = 3;
  582. clk_ctl = ((hs_div & 0x7) << 8) | (fs_div & 0xff);
  583. writel(clk_ctl, dev->base + I2C_CLK_CTL);
  584. printk(KERN_INFO "msm_i2c_probe: clk_ctl %x, %d Hz\n",
  585. clk_ctl, i2c_clk / (2 * ((clk_ctl & 0xff) + 3)));
  586. i2c_set_adapdata(&dev->adap_pri, dev);
  587. dev->adap_pri.algo = &msm_i2c_algo;
  588. strlcpy(dev->adap_pri.name,
  589. "MSM I2C adapter-PRI",
  590. sizeof(dev->adap_pri.name));
  591. dev->adap_pri.nr = pdev->id;
  592. ret = i2c_add_numbered_adapter(&dev->adap_pri);
  593. if (ret) {
  594. dev_err(&pdev->dev, "Primary i2c_add_adapter failed\n");
  595. goto err_i2c_add_adapter_failed;
  596. }
  597. i2c_set_adapdata(&dev->adap_aux, dev);
  598. dev->adap_aux.algo = &msm_i2c_algo;
  599. strlcpy(dev->adap_aux.name,
  600. "MSM I2C adapter-AUX",
  601. sizeof(dev->adap_aux.name));
  602. dev->adap_aux.nr = pdev->id + 1;
  603. ret = i2c_add_numbered_adapter(&dev->adap_aux);
  604. if (ret) {
  605. dev_err(&pdev->dev, "auxiliary i2c_add_adapter failed\n");
  606. i2c_del_adapter(&dev->adap_pri);
  607. goto err_i2c_add_adapter_failed;
  608. }
  609. ret = request_irq(dev->irq, msm_i2c_interrupt,
  610. IRQF_TRIGGER_RISING, pdev->name, dev);
  611. if (ret) {
  612. dev_err(&pdev->dev, "request_irq failed\n");
  613. goto err_request_irq_failed;
  614. }
  615. pm_qos_add_request(&dev->pm_qos_req, PM_QOS_CPU_DMA_LATENCY,
  616. PM_QOS_DEFAULT_VALUE);
  617. disable_irq(dev->irq);
  618. dev->suspended = 0;
  619. mutex_init(&dev->mlock);
  620. dev->clk_state = 0;
  621. /* Config GPIOs for primary and secondary lines */
  622. pdata->msm_i2c_config_gpio(dev->adap_pri.nr, 1);
  623. pdata->msm_i2c_config_gpio(dev->adap_aux.nr, 1);
  624. clk_disable_unprepare(dev->clk);
  625. clk_prepare(dev->clk);
  626. setup_timer(&dev->pwr_timer, msm_i2c_pwr_timer, (unsigned long) dev);
  627. return 0;
  628. err_request_irq_failed:
  629. i2c_del_adapter(&dev->adap_pri);
  630. i2c_del_adapter(&dev->adap_aux);
  631. err_i2c_add_adapter_failed:
  632. clk_disable_unprepare(clk);
  633. iounmap(dev->base);
  634. err_ioremap_failed:
  635. kfree(dev);
  636. err_alloc_dev_failed:
  637. clk_put(clk);
  638. err_clk_get_failed:
  639. release_mem_region(mem->start, (mem->end - mem->start) + 1);
  640. return ret;
  641. }
  642. static int
  643. msm_i2c_remove(struct platform_device *pdev)
  644. {
  645. struct msm_i2c_dev *dev = platform_get_drvdata(pdev);
  646. struct resource *mem;
  647. /* Grab mutex to ensure ongoing transaction is over */
  648. mutex_lock(&dev->mlock);
  649. dev->suspended = 1;
  650. mutex_unlock(&dev->mlock);
  651. mutex_destroy(&dev->mlock);
  652. del_timer_sync(&dev->pwr_timer);
  653. if (dev->clk_state != 0)
  654. msm_i2c_pwr_mgmt(dev, 0);
  655. platform_set_drvdata(pdev, NULL);
  656. pm_qos_remove_request(&dev->pm_qos_req);
  657. free_irq(dev->irq, dev);
  658. i2c_del_adapter(&dev->adap_pri);
  659. i2c_del_adapter(&dev->adap_aux);
  660. clk_unprepare(dev->clk);
  661. clk_put(dev->clk);
  662. iounmap(dev->base);
  663. kfree(dev);
  664. mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  665. if (mem)
  666. release_mem_region(mem->start, (mem->end - mem->start) + 1);
  667. return 0;
  668. }
  669. static int msm_i2c_suspend(struct platform_device *pdev, pm_message_t state)
  670. {
  671. struct msm_i2c_dev *dev = platform_get_drvdata(pdev);
  672. /* Wait until current transaction finishes
  673. * Make sure remote lock is released before we suspend
  674. */
  675. if (dev) {
  676. /* Grab mutex to ensure ongoing transaction is over */
  677. mutex_lock(&dev->mlock);
  678. dev->suspended = 1;
  679. mutex_unlock(&dev->mlock);
  680. del_timer_sync(&dev->pwr_timer);
  681. if (dev->clk_state != 0)
  682. msm_i2c_pwr_mgmt(dev, 0);
  683. clk_unprepare(dev->clk);
  684. }
  685. return 0;
  686. }
  687. static int msm_i2c_resume(struct platform_device *pdev)
  688. {
  689. struct msm_i2c_dev *dev = platform_get_drvdata(pdev);
  690. clk_prepare(dev->clk);
  691. dev->suspended = 0;
  692. return 0;
  693. }
  694. static struct platform_driver msm_i2c_driver = {
  695. .probe = msm_i2c_probe,
  696. .remove = msm_i2c_remove,
  697. .suspend = msm_i2c_suspend,
  698. .resume = msm_i2c_resume,
  699. .driver = {
  700. .name = "msm_i2c",
  701. .owner = THIS_MODULE,
  702. },
  703. };
  704. /* I2C may be needed to bring up other drivers */
  705. static int __init
  706. msm_i2c_init_driver(void)
  707. {
  708. return platform_driver_register(&msm_i2c_driver);
  709. }
  710. subsys_initcall(msm_i2c_init_driver);
  711. static void __exit msm_i2c_exit_driver(void)
  712. {
  713. platform_driver_unregister(&msm_i2c_driver);
  714. }
  715. module_exit(msm_i2c_exit_driver);