i2c-lpc2k.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  1. /*
  2. * Copyright (C) 2011 NXP Semiconductors
  3. *
  4. * Code portions referenced from the i2x-pxa and i2c-pnx drivers
  5. *
  6. * Make SMBus byte and word transactions work on LPC178x/7x
  7. * Copyright (c) 2012
  8. * Alexander Potashev, Emcraft Systems, aspotashev@emcraft.com
  9. * Anton Protopopov, Emcraft Systems, antonp@emcraft.com
  10. *
  11. * Copyright (C) 2015 Joachim Eastwood <manabian@gmail.com>
  12. *
  13. * This program is free software; you can redistribute it and/or modify
  14. * it under the terms of the GNU General Public License as published by
  15. * the Free Software Foundation; either version 2 of the License, or
  16. * (at your option) any later version.
  17. *
  18. */
  19. #include <linux/clk.h>
  20. #include <linux/errno.h>
  21. #include <linux/i2c.h>
  22. #include <linux/interrupt.h>
  23. #include <linux/io.h>
  24. #include <linux/kernel.h>
  25. #include <linux/module.h>
  26. #include <linux/of.h>
  27. #include <linux/of_device.h>
  28. #include <linux/platform_device.h>
  29. #include <linux/sched.h>
  30. #include <linux/time.h>
  31. /* LPC24xx register offsets and bits */
  32. #define LPC24XX_I2CONSET 0x00
  33. #define LPC24XX_I2STAT 0x04
  34. #define LPC24XX_I2DAT 0x08
  35. #define LPC24XX_I2ADDR 0x0c
  36. #define LPC24XX_I2SCLH 0x10
  37. #define LPC24XX_I2SCLL 0x14
  38. #define LPC24XX_I2CONCLR 0x18
  39. #define LPC24XX_AA BIT(2)
  40. #define LPC24XX_SI BIT(3)
  41. #define LPC24XX_STO BIT(4)
  42. #define LPC24XX_STA BIT(5)
  43. #define LPC24XX_I2EN BIT(6)
  44. #define LPC24XX_STO_AA (LPC24XX_STO | LPC24XX_AA)
  45. #define LPC24XX_CLEAR_ALL (LPC24XX_AA | LPC24XX_SI | LPC24XX_STO | \
  46. LPC24XX_STA | LPC24XX_I2EN)
  47. /* I2C SCL clock has different duty cycle depending on mode */
  48. #define I2C_STD_MODE_DUTY 46
  49. #define I2C_FAST_MODE_DUTY 36
  50. #define I2C_FAST_MODE_PLUS_DUTY 38
  51. /*
  52. * 26 possible I2C status codes, but codes applicable only
  53. * to master are listed here and used in this driver
  54. */
  55. enum {
  56. M_BUS_ERROR = 0x00,
  57. M_START = 0x08,
  58. M_REPSTART = 0x10,
  59. MX_ADDR_W_ACK = 0x18,
  60. MX_ADDR_W_NACK = 0x20,
  61. MX_DATA_W_ACK = 0x28,
  62. MX_DATA_W_NACK = 0x30,
  63. M_DATA_ARB_LOST = 0x38,
  64. MR_ADDR_R_ACK = 0x40,
  65. MR_ADDR_R_NACK = 0x48,
  66. MR_DATA_R_ACK = 0x50,
  67. MR_DATA_R_NACK = 0x58,
  68. M_I2C_IDLE = 0xf8,
  69. };
  70. struct lpc2k_i2c {
  71. void __iomem *base;
  72. struct clk *clk;
  73. int irq;
  74. wait_queue_head_t wait;
  75. struct i2c_adapter adap;
  76. struct i2c_msg *msg;
  77. int msg_idx;
  78. int msg_status;
  79. int is_last;
  80. };
  81. static void i2c_lpc2k_reset(struct lpc2k_i2c *i2c)
  82. {
  83. /* Will force clear all statuses */
  84. writel(LPC24XX_CLEAR_ALL, i2c->base + LPC24XX_I2CONCLR);
  85. writel(0, i2c->base + LPC24XX_I2ADDR);
  86. writel(LPC24XX_I2EN, i2c->base + LPC24XX_I2CONSET);
  87. }
  88. static int i2c_lpc2k_clear_arb(struct lpc2k_i2c *i2c)
  89. {
  90. unsigned long timeout = jiffies + msecs_to_jiffies(1000);
  91. /*
  92. * If the transfer needs to abort for some reason, we'll try to
  93. * force a stop condition to clear any pending bus conditions
  94. */
  95. writel(LPC24XX_STO, i2c->base + LPC24XX_I2CONSET);
  96. /* Wait for status change */
  97. while (readl(i2c->base + LPC24XX_I2STAT) != M_I2C_IDLE) {
  98. if (time_after(jiffies, timeout)) {
  99. /* Bus was not idle, try to reset adapter */
  100. i2c_lpc2k_reset(i2c);
  101. return -EBUSY;
  102. }
  103. cpu_relax();
  104. }
  105. return 0;
  106. }
  107. static void i2c_lpc2k_pump_msg(struct lpc2k_i2c *i2c)
  108. {
  109. unsigned char data;
  110. u32 status;
  111. /*
  112. * I2C in the LPC2xxx series is basically a state machine.
  113. * Just run through the steps based on the current status.
  114. */
  115. status = readl(i2c->base + LPC24XX_I2STAT);
  116. switch (status) {
  117. case M_START:
  118. case M_REPSTART:
  119. /* Start bit was just sent out, send out addr and dir */
  120. data = i2c_8bit_addr_from_msg(i2c->msg);
  121. writel(data, i2c->base + LPC24XX_I2DAT);
  122. writel(LPC24XX_STA, i2c->base + LPC24XX_I2CONCLR);
  123. break;
  124. case MX_ADDR_W_ACK:
  125. case MX_DATA_W_ACK:
  126. /*
  127. * Address or data was sent out with an ACK. If there is more
  128. * data to send, send it now
  129. */
  130. if (i2c->msg_idx < i2c->msg->len) {
  131. writel(i2c->msg->buf[i2c->msg_idx],
  132. i2c->base + LPC24XX_I2DAT);
  133. } else if (i2c->is_last) {
  134. /* Last message, send stop */
  135. writel(LPC24XX_STO_AA, i2c->base + LPC24XX_I2CONSET);
  136. writel(LPC24XX_SI, i2c->base + LPC24XX_I2CONCLR);
  137. i2c->msg_status = 0;
  138. disable_irq_nosync(i2c->irq);
  139. } else {
  140. i2c->msg_status = 0;
  141. disable_irq_nosync(i2c->irq);
  142. }
  143. i2c->msg_idx++;
  144. break;
  145. case MR_ADDR_R_ACK:
  146. /* Receive first byte from slave */
  147. if (i2c->msg->len == 1) {
  148. /* Last byte, return NACK */
  149. writel(LPC24XX_AA, i2c->base + LPC24XX_I2CONCLR);
  150. } else {
  151. /* Not last byte, return ACK */
  152. writel(LPC24XX_AA, i2c->base + LPC24XX_I2CONSET);
  153. }
  154. writel(LPC24XX_STA, i2c->base + LPC24XX_I2CONCLR);
  155. break;
  156. case MR_DATA_R_NACK:
  157. /*
  158. * The I2C shows NACK status on reads, so we need to accept
  159. * the NACK as an ACK here. This should be ok, as the real
  160. * BACK would of been caught on the address write.
  161. */
  162. case MR_DATA_R_ACK:
  163. /* Data was received */
  164. if (i2c->msg_idx < i2c->msg->len) {
  165. i2c->msg->buf[i2c->msg_idx] =
  166. readl(i2c->base + LPC24XX_I2DAT);
  167. }
  168. /* If transfer is done, send STOP */
  169. if (i2c->msg_idx >= i2c->msg->len - 1 && i2c->is_last) {
  170. writel(LPC24XX_STO_AA, i2c->base + LPC24XX_I2CONSET);
  171. writel(LPC24XX_SI, i2c->base + LPC24XX_I2CONCLR);
  172. i2c->msg_status = 0;
  173. }
  174. /* Message is done */
  175. if (i2c->msg_idx >= i2c->msg->len - 1) {
  176. i2c->msg_status = 0;
  177. disable_irq_nosync(i2c->irq);
  178. }
  179. /*
  180. * One pre-last data input, send NACK to tell the slave that
  181. * this is going to be the last data byte to be transferred.
  182. */
  183. if (i2c->msg_idx >= i2c->msg->len - 2) {
  184. /* One byte left to receive - NACK */
  185. writel(LPC24XX_AA, i2c->base + LPC24XX_I2CONCLR);
  186. } else {
  187. /* More than one byte left to receive - ACK */
  188. writel(LPC24XX_AA, i2c->base + LPC24XX_I2CONSET);
  189. }
  190. writel(LPC24XX_STA, i2c->base + LPC24XX_I2CONCLR);
  191. i2c->msg_idx++;
  192. break;
  193. case MX_ADDR_W_NACK:
  194. case MX_DATA_W_NACK:
  195. case MR_ADDR_R_NACK:
  196. /* NACK processing is done */
  197. writel(LPC24XX_STO_AA, i2c->base + LPC24XX_I2CONSET);
  198. i2c->msg_status = -ENXIO;
  199. disable_irq_nosync(i2c->irq);
  200. break;
  201. case M_DATA_ARB_LOST:
  202. /* Arbitration lost */
  203. i2c->msg_status = -EAGAIN;
  204. /* Release the I2C bus */
  205. writel(LPC24XX_STA | LPC24XX_STO, i2c->base + LPC24XX_I2CONCLR);
  206. disable_irq_nosync(i2c->irq);
  207. break;
  208. default:
  209. /* Unexpected statuses */
  210. i2c->msg_status = -EIO;
  211. disable_irq_nosync(i2c->irq);
  212. break;
  213. }
  214. /* Exit on failure or all bytes transferred */
  215. if (i2c->msg_status != -EBUSY)
  216. wake_up(&i2c->wait);
  217. /*
  218. * If `msg_status` is zero, then `lpc2k_process_msg()`
  219. * is responsible for clearing the SI flag.
  220. */
  221. if (i2c->msg_status != 0)
  222. writel(LPC24XX_SI, i2c->base + LPC24XX_I2CONCLR);
  223. }
  224. static int lpc2k_process_msg(struct lpc2k_i2c *i2c, int msgidx)
  225. {
  226. /* A new transfer is kicked off by initiating a start condition */
  227. if (!msgidx) {
  228. writel(LPC24XX_STA, i2c->base + LPC24XX_I2CONSET);
  229. } else {
  230. /*
  231. * A multi-message I2C transfer continues where the
  232. * previous I2C transfer left off and uses the
  233. * current condition of the I2C adapter.
  234. */
  235. if (unlikely(i2c->msg->flags & I2C_M_NOSTART)) {
  236. WARN_ON(i2c->msg->len == 0);
  237. if (!(i2c->msg->flags & I2C_M_RD)) {
  238. /* Start transmit of data */
  239. writel(i2c->msg->buf[0],
  240. i2c->base + LPC24XX_I2DAT);
  241. i2c->msg_idx++;
  242. }
  243. } else {
  244. /* Start or repeated start */
  245. writel(LPC24XX_STA, i2c->base + LPC24XX_I2CONSET);
  246. }
  247. writel(LPC24XX_SI, i2c->base + LPC24XX_I2CONCLR);
  248. }
  249. enable_irq(i2c->irq);
  250. /* Wait for transfer completion */
  251. if (wait_event_timeout(i2c->wait, i2c->msg_status != -EBUSY,
  252. msecs_to_jiffies(1000)) == 0) {
  253. disable_irq_nosync(i2c->irq);
  254. return -ETIMEDOUT;
  255. }
  256. return i2c->msg_status;
  257. }
  258. static int i2c_lpc2k_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
  259. int msg_num)
  260. {
  261. struct lpc2k_i2c *i2c = i2c_get_adapdata(adap);
  262. int ret, i;
  263. u32 stat;
  264. /* Check for bus idle condition */
  265. stat = readl(i2c->base + LPC24XX_I2STAT);
  266. if (stat != M_I2C_IDLE) {
  267. /* Something is holding the bus, try to clear it */
  268. return i2c_lpc2k_clear_arb(i2c);
  269. }
  270. /* Process a single message at a time */
  271. for (i = 0; i < msg_num; i++) {
  272. /* Save message pointer and current message data index */
  273. i2c->msg = &msgs[i];
  274. i2c->msg_idx = 0;
  275. i2c->msg_status = -EBUSY;
  276. i2c->is_last = (i == (msg_num - 1));
  277. ret = lpc2k_process_msg(i2c, i);
  278. if (ret)
  279. return ret;
  280. }
  281. return msg_num;
  282. }
  283. static irqreturn_t i2c_lpc2k_handler(int irq, void *dev_id)
  284. {
  285. struct lpc2k_i2c *i2c = dev_id;
  286. if (readl(i2c->base + LPC24XX_I2CONSET) & LPC24XX_SI) {
  287. i2c_lpc2k_pump_msg(i2c);
  288. return IRQ_HANDLED;
  289. }
  290. return IRQ_NONE;
  291. }
  292. static u32 i2c_lpc2k_functionality(struct i2c_adapter *adap)
  293. {
  294. /* Only emulated SMBus for now */
  295. return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
  296. }
  297. static const struct i2c_algorithm i2c_lpc2k_algorithm = {
  298. .master_xfer = i2c_lpc2k_xfer,
  299. .functionality = i2c_lpc2k_functionality,
  300. };
  301. static int i2c_lpc2k_probe(struct platform_device *pdev)
  302. {
  303. struct lpc2k_i2c *i2c;
  304. struct resource *res;
  305. u32 bus_clk_rate;
  306. u32 scl_high;
  307. u32 clkrate;
  308. int ret;
  309. i2c = devm_kzalloc(&pdev->dev, sizeof(*i2c), GFP_KERNEL);
  310. if (!i2c)
  311. return -ENOMEM;
  312. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  313. i2c->base = devm_ioremap_resource(&pdev->dev, res);
  314. if (IS_ERR(i2c->base))
  315. return PTR_ERR(i2c->base);
  316. i2c->irq = platform_get_irq(pdev, 0);
  317. if (i2c->irq < 0) {
  318. dev_err(&pdev->dev, "can't get interrupt resource\n");
  319. return i2c->irq;
  320. }
  321. init_waitqueue_head(&i2c->wait);
  322. i2c->clk = devm_clk_get(&pdev->dev, NULL);
  323. if (IS_ERR(i2c->clk)) {
  324. dev_err(&pdev->dev, "error getting clock\n");
  325. return PTR_ERR(i2c->clk);
  326. }
  327. ret = clk_prepare_enable(i2c->clk);
  328. if (ret) {
  329. dev_err(&pdev->dev, "unable to enable clock.\n");
  330. return ret;
  331. }
  332. ret = devm_request_irq(&pdev->dev, i2c->irq, i2c_lpc2k_handler, 0,
  333. dev_name(&pdev->dev), i2c);
  334. if (ret < 0) {
  335. dev_err(&pdev->dev, "can't request interrupt.\n");
  336. goto fail_clk;
  337. }
  338. disable_irq_nosync(i2c->irq);
  339. /* Place controller is a known state */
  340. i2c_lpc2k_reset(i2c);
  341. ret = of_property_read_u32(pdev->dev.of_node, "clock-frequency",
  342. &bus_clk_rate);
  343. if (ret)
  344. bus_clk_rate = 100000; /* 100 kHz default clock rate */
  345. clkrate = clk_get_rate(i2c->clk);
  346. if (clkrate == 0) {
  347. dev_err(&pdev->dev, "can't get I2C base clock\n");
  348. ret = -EINVAL;
  349. goto fail_clk;
  350. }
  351. /* Setup I2C dividers to generate clock with proper duty cycle */
  352. clkrate = clkrate / bus_clk_rate;
  353. if (bus_clk_rate <= 100000)
  354. scl_high = (clkrate * I2C_STD_MODE_DUTY) / 100;
  355. else if (bus_clk_rate <= 400000)
  356. scl_high = (clkrate * I2C_FAST_MODE_DUTY) / 100;
  357. else
  358. scl_high = (clkrate * I2C_FAST_MODE_PLUS_DUTY) / 100;
  359. writel(scl_high, i2c->base + LPC24XX_I2SCLH);
  360. writel(clkrate - scl_high, i2c->base + LPC24XX_I2SCLL);
  361. platform_set_drvdata(pdev, i2c);
  362. i2c_set_adapdata(&i2c->adap, i2c);
  363. i2c->adap.owner = THIS_MODULE;
  364. strlcpy(i2c->adap.name, "LPC2K I2C adapter", sizeof(i2c->adap.name));
  365. i2c->adap.algo = &i2c_lpc2k_algorithm;
  366. i2c->adap.dev.parent = &pdev->dev;
  367. i2c->adap.dev.of_node = pdev->dev.of_node;
  368. ret = i2c_add_adapter(&i2c->adap);
  369. if (ret < 0)
  370. goto fail_clk;
  371. dev_info(&pdev->dev, "LPC2K I2C adapter\n");
  372. return 0;
  373. fail_clk:
  374. clk_disable_unprepare(i2c->clk);
  375. return ret;
  376. }
  377. static int i2c_lpc2k_remove(struct platform_device *dev)
  378. {
  379. struct lpc2k_i2c *i2c = platform_get_drvdata(dev);
  380. i2c_del_adapter(&i2c->adap);
  381. clk_disable_unprepare(i2c->clk);
  382. return 0;
  383. }
  384. #ifdef CONFIG_PM
  385. static int i2c_lpc2k_suspend(struct device *dev)
  386. {
  387. struct platform_device *pdev = to_platform_device(dev);
  388. struct lpc2k_i2c *i2c = platform_get_drvdata(pdev);
  389. clk_disable(i2c->clk);
  390. return 0;
  391. }
  392. static int i2c_lpc2k_resume(struct device *dev)
  393. {
  394. struct platform_device *pdev = to_platform_device(dev);
  395. struct lpc2k_i2c *i2c = platform_get_drvdata(pdev);
  396. clk_enable(i2c->clk);
  397. i2c_lpc2k_reset(i2c);
  398. return 0;
  399. }
  400. static const struct dev_pm_ops i2c_lpc2k_dev_pm_ops = {
  401. .suspend_noirq = i2c_lpc2k_suspend,
  402. .resume_noirq = i2c_lpc2k_resume,
  403. };
  404. #define I2C_LPC2K_DEV_PM_OPS (&i2c_lpc2k_dev_pm_ops)
  405. #else
  406. #define I2C_LPC2K_DEV_PM_OPS NULL
  407. #endif
  408. static const struct of_device_id lpc2k_i2c_match[] = {
  409. { .compatible = "nxp,lpc1788-i2c" },
  410. {},
  411. };
  412. MODULE_DEVICE_TABLE(of, lpc2k_i2c_match);
  413. static struct platform_driver i2c_lpc2k_driver = {
  414. .probe = i2c_lpc2k_probe,
  415. .remove = i2c_lpc2k_remove,
  416. .driver = {
  417. .name = "lpc2k-i2c",
  418. .pm = I2C_LPC2K_DEV_PM_OPS,
  419. .of_match_table = lpc2k_i2c_match,
  420. },
  421. };
  422. module_platform_driver(i2c_lpc2k_driver);
  423. MODULE_AUTHOR("Kevin Wells <kevin.wells@nxp.com>");
  424. MODULE_DESCRIPTION("I2C driver for LPC2xxx devices");
  425. MODULE_LICENSE("GPL");
  426. MODULE_ALIAS("platform:lpc2k-i2c");