i2c-fsi.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * FSI-attached I2C master algorithm
  4. *
  5. * Copyright 2018 IBM Corporation
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License
  9. * as published by the Free Software Foundation; either version
  10. * 2 of the License, or (at your option) any later version.
  11. */
  12. #include <linux/bitfield.h>
  13. #include <linux/bitops.h>
  14. #include <linux/delay.h>
  15. #include <linux/device.h>
  16. #include <linux/errno.h>
  17. #include <linux/fsi.h>
  18. #include <linux/i2c.h>
  19. #include <linux/jiffies.h>
  20. #include <linux/kernel.h>
  21. #include <linux/list.h>
  22. #include <linux/module.h>
  23. #include <linux/mutex.h>
  24. #include <linux/of.h>
  25. #include <linux/slab.h>
  26. #define FSI_ENGID_I2C 0x7
  27. #define I2C_DEFAULT_CLK_DIV 6
  28. /* i2c registers */
  29. #define I2C_FSI_FIFO 0x00
  30. #define I2C_FSI_CMD 0x04
  31. #define I2C_FSI_MODE 0x08
  32. #define I2C_FSI_WATER_MARK 0x0C
  33. #define I2C_FSI_INT_MASK 0x10
  34. #define I2C_FSI_INT_COND 0x14
  35. #define I2C_FSI_OR_INT_MASK 0x14
  36. #define I2C_FSI_INTS 0x18
  37. #define I2C_FSI_AND_INT_MASK 0x18
  38. #define I2C_FSI_STAT 0x1C
  39. #define I2C_FSI_RESET_I2C 0x1C
  40. #define I2C_FSI_ESTAT 0x20
  41. #define I2C_FSI_RESET_ERR 0x20
  42. #define I2C_FSI_RESID_LEN 0x24
  43. #define I2C_FSI_SET_SCL 0x24
  44. #define I2C_FSI_PORT_BUSY 0x28
  45. #define I2C_FSI_RESET_SCL 0x2C
  46. #define I2C_FSI_SET_SDA 0x30
  47. #define I2C_FSI_RESET_SDA 0x34
  48. /* cmd register */
  49. #define I2C_CMD_WITH_START BIT(31)
  50. #define I2C_CMD_WITH_ADDR BIT(30)
  51. #define I2C_CMD_RD_CONT BIT(29)
  52. #define I2C_CMD_WITH_STOP BIT(28)
  53. #define I2C_CMD_FORCELAUNCH BIT(27)
  54. #define I2C_CMD_ADDR GENMASK(23, 17)
  55. #define I2C_CMD_READ BIT(16)
  56. #define I2C_CMD_LEN GENMASK(15, 0)
  57. /* mode register */
  58. #define I2C_MODE_CLKDIV GENMASK(31, 16)
  59. #define I2C_MODE_PORT GENMASK(15, 10)
  60. #define I2C_MODE_ENHANCED BIT(3)
  61. #define I2C_MODE_DIAG BIT(2)
  62. #define I2C_MODE_PACE_ALLOW BIT(1)
  63. #define I2C_MODE_WRAP BIT(0)
  64. /* watermark register */
  65. #define I2C_WATERMARK_HI GENMASK(15, 12)
  66. #define I2C_WATERMARK_LO GENMASK(7, 4)
  67. #define I2C_FIFO_HI_LVL 4
  68. #define I2C_FIFO_LO_LVL 4
  69. /* interrupt register */
  70. #define I2C_INT_INV_CMD BIT(15)
  71. #define I2C_INT_PARITY BIT(14)
  72. #define I2C_INT_BE_OVERRUN BIT(13)
  73. #define I2C_INT_BE_ACCESS BIT(12)
  74. #define I2C_INT_LOST_ARB BIT(11)
  75. #define I2C_INT_NACK BIT(10)
  76. #define I2C_INT_DAT_REQ BIT(9)
  77. #define I2C_INT_CMD_COMP BIT(8)
  78. #define I2C_INT_STOP_ERR BIT(7)
  79. #define I2C_INT_BUSY BIT(6)
  80. #define I2C_INT_IDLE BIT(5)
  81. /* status register */
  82. #define I2C_STAT_INV_CMD BIT(31)
  83. #define I2C_STAT_PARITY BIT(30)
  84. #define I2C_STAT_BE_OVERRUN BIT(29)
  85. #define I2C_STAT_BE_ACCESS BIT(28)
  86. #define I2C_STAT_LOST_ARB BIT(27)
  87. #define I2C_STAT_NACK BIT(26)
  88. #define I2C_STAT_DAT_REQ BIT(25)
  89. #define I2C_STAT_CMD_COMP BIT(24)
  90. #define I2C_STAT_STOP_ERR BIT(23)
  91. #define I2C_STAT_MAX_PORT GENMASK(22, 16)
  92. #define I2C_STAT_ANY_INT BIT(15)
  93. #define I2C_STAT_SCL_IN BIT(11)
  94. #define I2C_STAT_SDA_IN BIT(10)
  95. #define I2C_STAT_PORT_BUSY BIT(9)
  96. #define I2C_STAT_SELF_BUSY BIT(8)
  97. #define I2C_STAT_FIFO_COUNT GENMASK(7, 0)
  98. #define I2C_STAT_ERR (I2C_STAT_INV_CMD | \
  99. I2C_STAT_PARITY | \
  100. I2C_STAT_BE_OVERRUN | \
  101. I2C_STAT_BE_ACCESS | \
  102. I2C_STAT_LOST_ARB | \
  103. I2C_STAT_NACK | \
  104. I2C_STAT_STOP_ERR)
  105. #define I2C_STAT_ANY_RESP (I2C_STAT_ERR | \
  106. I2C_STAT_DAT_REQ | \
  107. I2C_STAT_CMD_COMP)
  108. /* extended status register */
  109. #define I2C_ESTAT_FIFO_SZ GENMASK(31, 24)
  110. #define I2C_ESTAT_SCL_IN_SY BIT(15)
  111. #define I2C_ESTAT_SDA_IN_SY BIT(14)
  112. #define I2C_ESTAT_S_SCL BIT(13)
  113. #define I2C_ESTAT_S_SDA BIT(12)
  114. #define I2C_ESTAT_M_SCL BIT(11)
  115. #define I2C_ESTAT_M_SDA BIT(10)
  116. #define I2C_ESTAT_HI_WATER BIT(9)
  117. #define I2C_ESTAT_LO_WATER BIT(8)
  118. #define I2C_ESTAT_PORT_BUSY BIT(7)
  119. #define I2C_ESTAT_SELF_BUSY BIT(6)
  120. #define I2C_ESTAT_VERSION GENMASK(4, 0)
  121. /* port busy register */
  122. #define I2C_PORT_BUSY_RESET BIT(31)
  123. /* wait for command complete or data request */
  124. #define I2C_CMD_SLEEP_MAX_US 500
  125. #define I2C_CMD_SLEEP_MIN_US 50
  126. /* wait after reset; choose time from legacy driver */
  127. #define I2C_RESET_SLEEP_MAX_US 2000
  128. #define I2C_RESET_SLEEP_MIN_US 1000
  129. /* choose timeout length from legacy driver; it's well tested */
  130. #define I2C_ABORT_TIMEOUT msecs_to_jiffies(100)
  131. struct fsi_i2c_master {
  132. struct fsi_device *fsi;
  133. u8 fifo_size;
  134. struct list_head ports;
  135. struct mutex lock;
  136. };
  137. struct fsi_i2c_port {
  138. struct list_head list;
  139. struct i2c_adapter adapter;
  140. struct fsi_i2c_master *master;
  141. u16 port;
  142. u16 xfrd;
  143. };
  144. static int fsi_i2c_read_reg(struct fsi_device *fsi, unsigned int reg,
  145. u32 *data)
  146. {
  147. int rc;
  148. __be32 data_be;
  149. rc = fsi_device_read(fsi, reg, &data_be, sizeof(data_be));
  150. if (rc)
  151. return rc;
  152. *data = be32_to_cpu(data_be);
  153. return 0;
  154. }
  155. static int fsi_i2c_write_reg(struct fsi_device *fsi, unsigned int reg,
  156. u32 *data)
  157. {
  158. __be32 data_be = cpu_to_be32p(data);
  159. return fsi_device_write(fsi, reg, &data_be, sizeof(data_be));
  160. }
  161. static int fsi_i2c_dev_init(struct fsi_i2c_master *i2c)
  162. {
  163. int rc;
  164. u32 mode = I2C_MODE_ENHANCED, extended_status, watermark;
  165. u32 interrupt = 0;
  166. /* since we use polling, disable interrupts */
  167. rc = fsi_i2c_write_reg(i2c->fsi, I2C_FSI_INT_MASK, &interrupt);
  168. if (rc)
  169. return rc;
  170. mode |= FIELD_PREP(I2C_MODE_CLKDIV, I2C_DEFAULT_CLK_DIV);
  171. rc = fsi_i2c_write_reg(i2c->fsi, I2C_FSI_MODE, &mode);
  172. if (rc)
  173. return rc;
  174. rc = fsi_i2c_read_reg(i2c->fsi, I2C_FSI_ESTAT, &extended_status);
  175. if (rc)
  176. return rc;
  177. i2c->fifo_size = FIELD_GET(I2C_ESTAT_FIFO_SZ, extended_status);
  178. watermark = FIELD_PREP(I2C_WATERMARK_HI,
  179. i2c->fifo_size - I2C_FIFO_HI_LVL);
  180. watermark |= FIELD_PREP(I2C_WATERMARK_LO, I2C_FIFO_LO_LVL);
  181. return fsi_i2c_write_reg(i2c->fsi, I2C_FSI_WATER_MARK, &watermark);
  182. }
  183. static int fsi_i2c_set_port(struct fsi_i2c_port *port)
  184. {
  185. int rc;
  186. struct fsi_device *fsi = port->master->fsi;
  187. u32 mode, dummy = 0;
  188. rc = fsi_i2c_read_reg(fsi, I2C_FSI_MODE, &mode);
  189. if (rc)
  190. return rc;
  191. if (FIELD_GET(I2C_MODE_PORT, mode) == port->port)
  192. return 0;
  193. mode = (mode & ~I2C_MODE_PORT) | FIELD_PREP(I2C_MODE_PORT, port->port);
  194. rc = fsi_i2c_write_reg(fsi, I2C_FSI_MODE, &mode);
  195. if (rc)
  196. return rc;
  197. /* reset engine when port is changed */
  198. return fsi_i2c_write_reg(fsi, I2C_FSI_RESET_ERR, &dummy);
  199. }
  200. static int fsi_i2c_start(struct fsi_i2c_port *port, struct i2c_msg *msg,
  201. bool stop)
  202. {
  203. struct fsi_i2c_master *i2c = port->master;
  204. u32 cmd = I2C_CMD_WITH_START | I2C_CMD_WITH_ADDR;
  205. port->xfrd = 0;
  206. if (msg->flags & I2C_M_RD)
  207. cmd |= I2C_CMD_READ;
  208. if (stop || msg->flags & I2C_M_STOP)
  209. cmd |= I2C_CMD_WITH_STOP;
  210. cmd |= FIELD_PREP(I2C_CMD_ADDR, msg->addr);
  211. cmd |= FIELD_PREP(I2C_CMD_LEN, msg->len);
  212. return fsi_i2c_write_reg(i2c->fsi, I2C_FSI_CMD, &cmd);
  213. }
  214. static int fsi_i2c_get_op_bytes(int op_bytes)
  215. {
  216. /* fsi is limited to max 4 byte aligned ops */
  217. if (op_bytes > 4)
  218. return 4;
  219. else if (op_bytes == 3)
  220. return 2;
  221. return op_bytes;
  222. }
  223. static int fsi_i2c_write_fifo(struct fsi_i2c_port *port, struct i2c_msg *msg,
  224. u8 fifo_count)
  225. {
  226. int write;
  227. int rc;
  228. struct fsi_i2c_master *i2c = port->master;
  229. int bytes_to_write = i2c->fifo_size - fifo_count;
  230. int bytes_remaining = msg->len - port->xfrd;
  231. bytes_to_write = min(bytes_to_write, bytes_remaining);
  232. while (bytes_to_write) {
  233. write = fsi_i2c_get_op_bytes(bytes_to_write);
  234. rc = fsi_device_write(i2c->fsi, I2C_FSI_FIFO,
  235. &msg->buf[port->xfrd], write);
  236. if (rc)
  237. return rc;
  238. port->xfrd += write;
  239. bytes_to_write -= write;
  240. }
  241. return 0;
  242. }
  243. static int fsi_i2c_read_fifo(struct fsi_i2c_port *port, struct i2c_msg *msg,
  244. u8 fifo_count)
  245. {
  246. int read;
  247. int rc;
  248. struct fsi_i2c_master *i2c = port->master;
  249. int bytes_to_read;
  250. int xfr_remaining = msg->len - port->xfrd;
  251. u32 dummy;
  252. bytes_to_read = min_t(int, fifo_count, xfr_remaining);
  253. while (bytes_to_read) {
  254. read = fsi_i2c_get_op_bytes(bytes_to_read);
  255. if (xfr_remaining) {
  256. rc = fsi_device_read(i2c->fsi, I2C_FSI_FIFO,
  257. &msg->buf[port->xfrd], read);
  258. if (rc)
  259. return rc;
  260. port->xfrd += read;
  261. xfr_remaining -= read;
  262. } else {
  263. /* no more buffer but data in fifo, need to clear it */
  264. rc = fsi_device_read(i2c->fsi, I2C_FSI_FIFO, &dummy,
  265. read);
  266. if (rc)
  267. return rc;
  268. }
  269. bytes_to_read -= read;
  270. }
  271. return 0;
  272. }
  273. static int fsi_i2c_get_scl(struct i2c_adapter *adap)
  274. {
  275. u32 stat = 0;
  276. struct fsi_i2c_port *port = adap->algo_data;
  277. struct fsi_i2c_master *i2c = port->master;
  278. fsi_i2c_read_reg(i2c->fsi, I2C_FSI_STAT, &stat);
  279. return !!(stat & I2C_STAT_SCL_IN);
  280. }
  281. static void fsi_i2c_set_scl(struct i2c_adapter *adap, int val)
  282. {
  283. u32 dummy = 0;
  284. struct fsi_i2c_port *port = adap->algo_data;
  285. struct fsi_i2c_master *i2c = port->master;
  286. if (val)
  287. fsi_i2c_write_reg(i2c->fsi, I2C_FSI_SET_SCL, &dummy);
  288. else
  289. fsi_i2c_write_reg(i2c->fsi, I2C_FSI_RESET_SCL, &dummy);
  290. }
  291. static int fsi_i2c_get_sda(struct i2c_adapter *adap)
  292. {
  293. u32 stat = 0;
  294. struct fsi_i2c_port *port = adap->algo_data;
  295. struct fsi_i2c_master *i2c = port->master;
  296. fsi_i2c_read_reg(i2c->fsi, I2C_FSI_STAT, &stat);
  297. return !!(stat & I2C_STAT_SDA_IN);
  298. }
  299. static void fsi_i2c_set_sda(struct i2c_adapter *adap, int val)
  300. {
  301. u32 dummy = 0;
  302. struct fsi_i2c_port *port = adap->algo_data;
  303. struct fsi_i2c_master *i2c = port->master;
  304. if (val)
  305. fsi_i2c_write_reg(i2c->fsi, I2C_FSI_SET_SDA, &dummy);
  306. else
  307. fsi_i2c_write_reg(i2c->fsi, I2C_FSI_RESET_SDA, &dummy);
  308. }
  309. static void fsi_i2c_prepare_recovery(struct i2c_adapter *adap)
  310. {
  311. int rc;
  312. u32 mode;
  313. struct fsi_i2c_port *port = adap->algo_data;
  314. struct fsi_i2c_master *i2c = port->master;
  315. rc = fsi_i2c_read_reg(i2c->fsi, I2C_FSI_MODE, &mode);
  316. if (rc)
  317. return;
  318. mode |= I2C_MODE_DIAG;
  319. fsi_i2c_write_reg(i2c->fsi, I2C_FSI_MODE, &mode);
  320. }
  321. static void fsi_i2c_unprepare_recovery(struct i2c_adapter *adap)
  322. {
  323. int rc;
  324. u32 mode;
  325. struct fsi_i2c_port *port = adap->algo_data;
  326. struct fsi_i2c_master *i2c = port->master;
  327. rc = fsi_i2c_read_reg(i2c->fsi, I2C_FSI_MODE, &mode);
  328. if (rc)
  329. return;
  330. mode &= ~I2C_MODE_DIAG;
  331. fsi_i2c_write_reg(i2c->fsi, I2C_FSI_MODE, &mode);
  332. }
  333. static int fsi_i2c_reset_bus(struct fsi_i2c_master *i2c,
  334. struct fsi_i2c_port *port)
  335. {
  336. int rc;
  337. u32 stat, dummy = 0;
  338. /* force bus reset, ignore errors */
  339. i2c_recover_bus(&port->adapter);
  340. /* reset errors */
  341. rc = fsi_i2c_write_reg(i2c->fsi, I2C_FSI_RESET_ERR, &dummy);
  342. if (rc)
  343. return rc;
  344. /* wait for command complete */
  345. usleep_range(I2C_RESET_SLEEP_MIN_US, I2C_RESET_SLEEP_MAX_US);
  346. rc = fsi_i2c_read_reg(i2c->fsi, I2C_FSI_STAT, &stat);
  347. if (rc)
  348. return rc;
  349. if (stat & I2C_STAT_CMD_COMP)
  350. return 0;
  351. /* failed to get command complete; reset engine again */
  352. rc = fsi_i2c_write_reg(i2c->fsi, I2C_FSI_RESET_I2C, &dummy);
  353. if (rc)
  354. return rc;
  355. /* re-init engine again */
  356. return fsi_i2c_dev_init(i2c);
  357. }
  358. static int fsi_i2c_reset_engine(struct fsi_i2c_master *i2c, u16 port)
  359. {
  360. int rc;
  361. u32 mode, dummy = 0;
  362. /* reset engine */
  363. rc = fsi_i2c_write_reg(i2c->fsi, I2C_FSI_RESET_I2C, &dummy);
  364. if (rc)
  365. return rc;
  366. /* re-init engine */
  367. rc = fsi_i2c_dev_init(i2c);
  368. if (rc)
  369. return rc;
  370. rc = fsi_i2c_read_reg(i2c->fsi, I2C_FSI_MODE, &mode);
  371. if (rc)
  372. return rc;
  373. /* set port; default after reset is 0 */
  374. if (port) {
  375. mode &= ~I2C_MODE_PORT;
  376. mode |= FIELD_PREP(I2C_MODE_PORT, port);
  377. rc = fsi_i2c_write_reg(i2c->fsi, I2C_FSI_MODE, &mode);
  378. if (rc)
  379. return rc;
  380. }
  381. /* reset busy register; hw workaround */
  382. dummy = I2C_PORT_BUSY_RESET;
  383. rc = fsi_i2c_write_reg(i2c->fsi, I2C_FSI_PORT_BUSY, &dummy);
  384. if (rc)
  385. return rc;
  386. return 0;
  387. }
  388. static int fsi_i2c_abort(struct fsi_i2c_port *port, u32 status)
  389. {
  390. int rc;
  391. unsigned long start;
  392. u32 cmd = I2C_CMD_WITH_STOP;
  393. u32 stat;
  394. struct fsi_i2c_master *i2c = port->master;
  395. struct fsi_device *fsi = i2c->fsi;
  396. rc = fsi_i2c_reset_engine(i2c, port->port);
  397. if (rc)
  398. return rc;
  399. rc = fsi_i2c_read_reg(fsi, I2C_FSI_STAT, &stat);
  400. if (rc)
  401. return rc;
  402. /* if sda is low, peform full bus reset */
  403. if (!(stat & I2C_STAT_SDA_IN)) {
  404. rc = fsi_i2c_reset_bus(i2c, port);
  405. if (rc)
  406. return rc;
  407. }
  408. /* skip final stop command for these errors */
  409. if (status & (I2C_STAT_PARITY | I2C_STAT_LOST_ARB | I2C_STAT_STOP_ERR))
  410. return 0;
  411. /* write stop command */
  412. rc = fsi_i2c_write_reg(fsi, I2C_FSI_CMD, &cmd);
  413. if (rc)
  414. return rc;
  415. /* wait until we see command complete in the master */
  416. start = jiffies;
  417. do {
  418. rc = fsi_i2c_read_reg(fsi, I2C_FSI_STAT, &status);
  419. if (rc)
  420. return rc;
  421. if (status & I2C_STAT_CMD_COMP)
  422. return 0;
  423. usleep_range(I2C_CMD_SLEEP_MIN_US, I2C_CMD_SLEEP_MAX_US);
  424. } while (time_after(start + I2C_ABORT_TIMEOUT, jiffies));
  425. return -ETIMEDOUT;
  426. }
  427. static int fsi_i2c_handle_status(struct fsi_i2c_port *port,
  428. struct i2c_msg *msg, u32 status)
  429. {
  430. int rc;
  431. u8 fifo_count;
  432. if (status & I2C_STAT_ERR) {
  433. rc = fsi_i2c_abort(port, status);
  434. if (rc)
  435. return rc;
  436. if (status & I2C_STAT_INV_CMD)
  437. return -EINVAL;
  438. if (status & (I2C_STAT_PARITY | I2C_STAT_BE_OVERRUN |
  439. I2C_STAT_BE_ACCESS))
  440. return -EPROTO;
  441. if (status & I2C_STAT_NACK)
  442. return -ENXIO;
  443. if (status & I2C_STAT_LOST_ARB)
  444. return -EAGAIN;
  445. if (status & I2C_STAT_STOP_ERR)
  446. return -EBADMSG;
  447. return -EIO;
  448. }
  449. if (status & I2C_STAT_DAT_REQ) {
  450. fifo_count = FIELD_GET(I2C_STAT_FIFO_COUNT, status);
  451. if (msg->flags & I2C_M_RD)
  452. return fsi_i2c_read_fifo(port, msg, fifo_count);
  453. return fsi_i2c_write_fifo(port, msg, fifo_count);
  454. }
  455. if (status & I2C_STAT_CMD_COMP) {
  456. if (port->xfrd < msg->len)
  457. return -ENODATA;
  458. return msg->len;
  459. }
  460. return 0;
  461. }
  462. static int fsi_i2c_wait(struct fsi_i2c_port *port, struct i2c_msg *msg,
  463. unsigned long timeout)
  464. {
  465. u32 status = 0;
  466. int rc;
  467. unsigned long start = jiffies;
  468. do {
  469. rc = fsi_i2c_read_reg(port->master->fsi, I2C_FSI_STAT,
  470. &status);
  471. if (rc)
  472. return rc;
  473. if (status & I2C_STAT_ANY_RESP) {
  474. rc = fsi_i2c_handle_status(port, msg, status);
  475. if (rc < 0)
  476. return rc;
  477. /* cmd complete and all data xfrd */
  478. if (rc == msg->len)
  479. return 0;
  480. /* need to xfr more data, but maybe don't need wait */
  481. continue;
  482. }
  483. usleep_range(I2C_CMD_SLEEP_MIN_US, I2C_CMD_SLEEP_MAX_US);
  484. } while (time_after(start + timeout, jiffies));
  485. return -ETIMEDOUT;
  486. }
  487. static int fsi_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
  488. int num)
  489. {
  490. int i, rc;
  491. unsigned long start_time;
  492. struct fsi_i2c_port *port = adap->algo_data;
  493. struct fsi_i2c_master *master = port->master;
  494. struct i2c_msg *msg;
  495. mutex_lock(&master->lock);
  496. rc = fsi_i2c_set_port(port);
  497. if (rc)
  498. goto unlock;
  499. for (i = 0; i < num; i++) {
  500. msg = msgs + i;
  501. start_time = jiffies;
  502. rc = fsi_i2c_start(port, msg, i == num - 1);
  503. if (rc)
  504. goto unlock;
  505. rc = fsi_i2c_wait(port, msg,
  506. adap->timeout - (jiffies - start_time));
  507. if (rc)
  508. goto unlock;
  509. }
  510. unlock:
  511. mutex_unlock(&master->lock);
  512. return rc ? : num;
  513. }
  514. static u32 fsi_i2c_functionality(struct i2c_adapter *adap)
  515. {
  516. return I2C_FUNC_I2C | I2C_FUNC_PROTOCOL_MANGLING |
  517. I2C_FUNC_SMBUS_EMUL | I2C_FUNC_SMBUS_BLOCK_DATA;
  518. }
  519. static struct i2c_bus_recovery_info fsi_i2c_bus_recovery_info = {
  520. .recover_bus = i2c_generic_scl_recovery,
  521. .get_scl = fsi_i2c_get_scl,
  522. .set_scl = fsi_i2c_set_scl,
  523. .get_sda = fsi_i2c_get_sda,
  524. .set_sda = fsi_i2c_set_sda,
  525. .prepare_recovery = fsi_i2c_prepare_recovery,
  526. .unprepare_recovery = fsi_i2c_unprepare_recovery,
  527. };
  528. static const struct i2c_algorithm fsi_i2c_algorithm = {
  529. .master_xfer = fsi_i2c_xfer,
  530. .functionality = fsi_i2c_functionality,
  531. };
  532. static int fsi_i2c_probe(struct device *dev)
  533. {
  534. struct fsi_i2c_master *i2c;
  535. struct fsi_i2c_port *port;
  536. struct device_node *np;
  537. int rc;
  538. u32 port_no;
  539. i2c = devm_kzalloc(dev, sizeof(*i2c), GFP_KERNEL);
  540. if (!i2c)
  541. return -ENOMEM;
  542. mutex_init(&i2c->lock);
  543. i2c->fsi = to_fsi_dev(dev);
  544. INIT_LIST_HEAD(&i2c->ports);
  545. rc = fsi_i2c_dev_init(i2c);
  546. if (rc)
  547. return rc;
  548. /* Add adapter for each i2c port of the master. */
  549. for_each_available_child_of_node(dev->of_node, np) {
  550. rc = of_property_read_u32(np, "reg", &port_no);
  551. if (rc || port_no > USHRT_MAX)
  552. continue;
  553. port = kzalloc(sizeof(*port), GFP_KERNEL);
  554. if (!port)
  555. break;
  556. port->master = i2c;
  557. port->port = port_no;
  558. port->adapter.owner = THIS_MODULE;
  559. port->adapter.dev.of_node = np;
  560. port->adapter.dev.parent = dev;
  561. port->adapter.algo = &fsi_i2c_algorithm;
  562. port->adapter.bus_recovery_info = &fsi_i2c_bus_recovery_info;
  563. port->adapter.algo_data = port;
  564. snprintf(port->adapter.name, sizeof(port->adapter.name),
  565. "i2c_bus-%u", port_no);
  566. rc = i2c_add_adapter(&port->adapter);
  567. if (rc < 0) {
  568. dev_err(dev, "Failed to register adapter: %d\n", rc);
  569. kfree(port);
  570. continue;
  571. }
  572. list_add(&port->list, &i2c->ports);
  573. }
  574. dev_set_drvdata(dev, i2c);
  575. return 0;
  576. }
  577. static int fsi_i2c_remove(struct device *dev)
  578. {
  579. struct fsi_i2c_master *i2c = dev_get_drvdata(dev);
  580. struct fsi_i2c_port *port, *tmp;
  581. list_for_each_entry_safe(port, tmp, &i2c->ports, list) {
  582. list_del(&port->list);
  583. i2c_del_adapter(&port->adapter);
  584. kfree(port);
  585. }
  586. return 0;
  587. }
  588. static const struct fsi_device_id fsi_i2c_ids[] = {
  589. { FSI_ENGID_I2C, FSI_VERSION_ANY },
  590. { }
  591. };
  592. static struct fsi_driver fsi_i2c_driver = {
  593. .id_table = fsi_i2c_ids,
  594. .drv = {
  595. .name = "i2c-fsi",
  596. .bus = &fsi_bus_type,
  597. .probe = fsi_i2c_probe,
  598. .remove = fsi_i2c_remove,
  599. },
  600. };
  601. module_fsi_driver(fsi_i2c_driver);
  602. MODULE_AUTHOR("Eddie James <eajames@us.ibm.com>");
  603. MODULE_DESCRIPTION("FSI attached I2C master");
  604. MODULE_LICENSE("GPL");