i2c-lpc2k.c 12 KB

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