i2c-mv64xxx.c 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018
  1. /*
  2. * Driver for the i2c controller on the Marvell line of host bridges
  3. * (e.g, gt642[46]0, mv643[46]0, mv644[46]0, and Orion SoC family).
  4. *
  5. * Author: Mark A. Greer <mgreer@mvista.com>
  6. *
  7. * 2005 (c) MontaVista, Software, Inc. This file is licensed under
  8. * the terms of the GNU General Public License version 2. This program
  9. * is licensed "as is" without any warranty of any kind, whether express
  10. * or implied.
  11. */
  12. #include <linux/kernel.h>
  13. #include <linux/slab.h>
  14. #include <linux/module.h>
  15. #include <linux/spinlock.h>
  16. #include <linux/i2c.h>
  17. #include <linux/interrupt.h>
  18. #include <linux/mv643xx_i2c.h>
  19. #include <linux/platform_device.h>
  20. #include <linux/reset.h>
  21. #include <linux/io.h>
  22. #include <linux/of.h>
  23. #include <linux/of_device.h>
  24. #include <linux/of_irq.h>
  25. #include <linux/clk.h>
  26. #include <linux/err.h>
  27. #include <linux/delay.h>
  28. #define MV64XXX_I2C_ADDR_ADDR(val) ((val & 0x7f) << 1)
  29. #define MV64XXX_I2C_BAUD_DIV_N(val) (val & 0x7)
  30. #define MV64XXX_I2C_BAUD_DIV_M(val) ((val & 0xf) << 3)
  31. #define MV64XXX_I2C_REG_CONTROL_ACK BIT(2)
  32. #define MV64XXX_I2C_REG_CONTROL_IFLG BIT(3)
  33. #define MV64XXX_I2C_REG_CONTROL_STOP BIT(4)
  34. #define MV64XXX_I2C_REG_CONTROL_START BIT(5)
  35. #define MV64XXX_I2C_REG_CONTROL_TWSIEN BIT(6)
  36. #define MV64XXX_I2C_REG_CONTROL_INTEN BIT(7)
  37. /* Ctlr status values */
  38. #define MV64XXX_I2C_STATUS_BUS_ERR 0x00
  39. #define MV64XXX_I2C_STATUS_MAST_START 0x08
  40. #define MV64XXX_I2C_STATUS_MAST_REPEAT_START 0x10
  41. #define MV64XXX_I2C_STATUS_MAST_WR_ADDR_ACK 0x18
  42. #define MV64XXX_I2C_STATUS_MAST_WR_ADDR_NO_ACK 0x20
  43. #define MV64XXX_I2C_STATUS_MAST_WR_ACK 0x28
  44. #define MV64XXX_I2C_STATUS_MAST_WR_NO_ACK 0x30
  45. #define MV64XXX_I2C_STATUS_MAST_LOST_ARB 0x38
  46. #define MV64XXX_I2C_STATUS_MAST_RD_ADDR_ACK 0x40
  47. #define MV64XXX_I2C_STATUS_MAST_RD_ADDR_NO_ACK 0x48
  48. #define MV64XXX_I2C_STATUS_MAST_RD_DATA_ACK 0x50
  49. #define MV64XXX_I2C_STATUS_MAST_RD_DATA_NO_ACK 0x58
  50. #define MV64XXX_I2C_STATUS_MAST_WR_ADDR_2_ACK 0xd0
  51. #define MV64XXX_I2C_STATUS_MAST_WR_ADDR_2_NO_ACK 0xd8
  52. #define MV64XXX_I2C_STATUS_MAST_RD_ADDR_2_ACK 0xe0
  53. #define MV64XXX_I2C_STATUS_MAST_RD_ADDR_2_NO_ACK 0xe8
  54. #define MV64XXX_I2C_STATUS_NO_STATUS 0xf8
  55. /* Register defines (I2C bridge) */
  56. #define MV64XXX_I2C_REG_TX_DATA_LO 0xc0
  57. #define MV64XXX_I2C_REG_TX_DATA_HI 0xc4
  58. #define MV64XXX_I2C_REG_RX_DATA_LO 0xc8
  59. #define MV64XXX_I2C_REG_RX_DATA_HI 0xcc
  60. #define MV64XXX_I2C_REG_BRIDGE_CONTROL 0xd0
  61. #define MV64XXX_I2C_REG_BRIDGE_STATUS 0xd4
  62. #define MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE 0xd8
  63. #define MV64XXX_I2C_REG_BRIDGE_INTR_MASK 0xdC
  64. #define MV64XXX_I2C_REG_BRIDGE_TIMING 0xe0
  65. /* Bridge Control values */
  66. #define MV64XXX_I2C_BRIDGE_CONTROL_WR BIT(0)
  67. #define MV64XXX_I2C_BRIDGE_CONTROL_RD BIT(1)
  68. #define MV64XXX_I2C_BRIDGE_CONTROL_ADDR_SHIFT 2
  69. #define MV64XXX_I2C_BRIDGE_CONTROL_ADDR_EXT BIT(12)
  70. #define MV64XXX_I2C_BRIDGE_CONTROL_TX_SIZE_SHIFT 13
  71. #define MV64XXX_I2C_BRIDGE_CONTROL_RX_SIZE_SHIFT 16
  72. #define MV64XXX_I2C_BRIDGE_CONTROL_ENABLE BIT(19)
  73. #define MV64XXX_I2C_BRIDGE_CONTROL_REPEATED_START BIT(20)
  74. /* Bridge Status values */
  75. #define MV64XXX_I2C_BRIDGE_STATUS_ERROR BIT(0)
  76. /* Driver states */
  77. enum {
  78. MV64XXX_I2C_STATE_INVALID,
  79. MV64XXX_I2C_STATE_IDLE,
  80. MV64XXX_I2C_STATE_WAITING_FOR_START_COND,
  81. MV64XXX_I2C_STATE_WAITING_FOR_RESTART,
  82. MV64XXX_I2C_STATE_WAITING_FOR_ADDR_1_ACK,
  83. MV64XXX_I2C_STATE_WAITING_FOR_ADDR_2_ACK,
  84. MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_ACK,
  85. MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_DATA,
  86. };
  87. /* Driver actions */
  88. enum {
  89. MV64XXX_I2C_ACTION_INVALID,
  90. MV64XXX_I2C_ACTION_CONTINUE,
  91. MV64XXX_I2C_ACTION_SEND_RESTART,
  92. MV64XXX_I2C_ACTION_SEND_ADDR_1,
  93. MV64XXX_I2C_ACTION_SEND_ADDR_2,
  94. MV64XXX_I2C_ACTION_SEND_DATA,
  95. MV64XXX_I2C_ACTION_RCV_DATA,
  96. MV64XXX_I2C_ACTION_RCV_DATA_STOP,
  97. MV64XXX_I2C_ACTION_SEND_STOP,
  98. };
  99. struct mv64xxx_i2c_regs {
  100. u8 addr;
  101. u8 ext_addr;
  102. u8 data;
  103. u8 control;
  104. u8 status;
  105. u8 clock;
  106. u8 soft_reset;
  107. };
  108. struct mv64xxx_i2c_data {
  109. struct i2c_msg *msgs;
  110. int num_msgs;
  111. int irq;
  112. u32 state;
  113. u32 action;
  114. u32 aborting;
  115. u32 cntl_bits;
  116. void __iomem *reg_base;
  117. struct mv64xxx_i2c_regs reg_offsets;
  118. u32 addr1;
  119. u32 addr2;
  120. u32 bytes_left;
  121. u32 byte_posn;
  122. u32 send_stop;
  123. u32 block;
  124. int rc;
  125. u32 freq_m;
  126. u32 freq_n;
  127. struct clk *clk;
  128. struct clk *reg_clk;
  129. wait_queue_head_t waitq;
  130. spinlock_t lock;
  131. struct i2c_msg *msg;
  132. struct i2c_adapter adapter;
  133. bool offload_enabled;
  134. /* 5us delay in order to avoid repeated start timing violation */
  135. bool errata_delay;
  136. struct reset_control *rstc;
  137. bool irq_clear_inverted;
  138. /* Clk div is 2 to the power n, not 2 to the power n + 1 */
  139. bool clk_n_base_0;
  140. };
  141. static struct mv64xxx_i2c_regs mv64xxx_i2c_regs_mv64xxx = {
  142. .addr = 0x00,
  143. .ext_addr = 0x10,
  144. .data = 0x04,
  145. .control = 0x08,
  146. .status = 0x0c,
  147. .clock = 0x0c,
  148. .soft_reset = 0x1c,
  149. };
  150. static struct mv64xxx_i2c_regs mv64xxx_i2c_regs_sun4i = {
  151. .addr = 0x00,
  152. .ext_addr = 0x04,
  153. .data = 0x08,
  154. .control = 0x0c,
  155. .status = 0x10,
  156. .clock = 0x14,
  157. .soft_reset = 0x18,
  158. };
  159. static void
  160. mv64xxx_i2c_prepare_for_io(struct mv64xxx_i2c_data *drv_data,
  161. struct i2c_msg *msg)
  162. {
  163. u32 dir = 0;
  164. drv_data->cntl_bits = MV64XXX_I2C_REG_CONTROL_ACK |
  165. MV64XXX_I2C_REG_CONTROL_INTEN | MV64XXX_I2C_REG_CONTROL_TWSIEN;
  166. if (msg->flags & I2C_M_RD)
  167. dir = 1;
  168. if (msg->flags & I2C_M_TEN) {
  169. drv_data->addr1 = 0xf0 | (((u32)msg->addr & 0x300) >> 7) | dir;
  170. drv_data->addr2 = (u32)msg->addr & 0xff;
  171. } else {
  172. drv_data->addr1 = MV64XXX_I2C_ADDR_ADDR((u32)msg->addr) | dir;
  173. drv_data->addr2 = 0;
  174. }
  175. }
  176. /*
  177. *****************************************************************************
  178. *
  179. * Finite State Machine & Interrupt Routines
  180. *
  181. *****************************************************************************
  182. */
  183. /* Reset hardware and initialize FSM */
  184. static void
  185. mv64xxx_i2c_hw_init(struct mv64xxx_i2c_data *drv_data)
  186. {
  187. if (drv_data->offload_enabled) {
  188. writel(0, drv_data->reg_base + MV64XXX_I2C_REG_BRIDGE_CONTROL);
  189. writel(0, drv_data->reg_base + MV64XXX_I2C_REG_BRIDGE_TIMING);
  190. writel(0, drv_data->reg_base +
  191. MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE);
  192. writel(0, drv_data->reg_base +
  193. MV64XXX_I2C_REG_BRIDGE_INTR_MASK);
  194. }
  195. writel(0, drv_data->reg_base + drv_data->reg_offsets.soft_reset);
  196. writel(MV64XXX_I2C_BAUD_DIV_M(drv_data->freq_m) | MV64XXX_I2C_BAUD_DIV_N(drv_data->freq_n),
  197. drv_data->reg_base + drv_data->reg_offsets.clock);
  198. writel(0, drv_data->reg_base + drv_data->reg_offsets.addr);
  199. writel(0, drv_data->reg_base + drv_data->reg_offsets.ext_addr);
  200. writel(MV64XXX_I2C_REG_CONTROL_TWSIEN | MV64XXX_I2C_REG_CONTROL_STOP,
  201. drv_data->reg_base + drv_data->reg_offsets.control);
  202. drv_data->state = MV64XXX_I2C_STATE_IDLE;
  203. }
  204. static void
  205. mv64xxx_i2c_fsm(struct mv64xxx_i2c_data *drv_data, u32 status)
  206. {
  207. /*
  208. * If state is idle, then this is likely the remnants of an old
  209. * operation that driver has given up on or the user has killed.
  210. * If so, issue the stop condition and go to idle.
  211. */
  212. if (drv_data->state == MV64XXX_I2C_STATE_IDLE) {
  213. drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
  214. return;
  215. }
  216. /* The status from the ctlr [mostly] tells us what to do next */
  217. switch (status) {
  218. /* Start condition interrupt */
  219. case MV64XXX_I2C_STATUS_MAST_START: /* 0x08 */
  220. case MV64XXX_I2C_STATUS_MAST_REPEAT_START: /* 0x10 */
  221. drv_data->action = MV64XXX_I2C_ACTION_SEND_ADDR_1;
  222. drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_ADDR_1_ACK;
  223. break;
  224. /* Performing a write */
  225. case MV64XXX_I2C_STATUS_MAST_WR_ADDR_ACK: /* 0x18 */
  226. if (drv_data->msg->flags & I2C_M_TEN) {
  227. drv_data->action = MV64XXX_I2C_ACTION_SEND_ADDR_2;
  228. drv_data->state =
  229. MV64XXX_I2C_STATE_WAITING_FOR_ADDR_2_ACK;
  230. break;
  231. }
  232. /* FALLTHRU */
  233. case MV64XXX_I2C_STATUS_MAST_WR_ADDR_2_ACK: /* 0xd0 */
  234. case MV64XXX_I2C_STATUS_MAST_WR_ACK: /* 0x28 */
  235. if ((drv_data->bytes_left == 0)
  236. || (drv_data->aborting
  237. && (drv_data->byte_posn != 0))) {
  238. if (drv_data->send_stop || drv_data->aborting) {
  239. drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
  240. drv_data->state = MV64XXX_I2C_STATE_IDLE;
  241. } else {
  242. drv_data->action =
  243. MV64XXX_I2C_ACTION_SEND_RESTART;
  244. drv_data->state =
  245. MV64XXX_I2C_STATE_WAITING_FOR_RESTART;
  246. }
  247. } else {
  248. drv_data->action = MV64XXX_I2C_ACTION_SEND_DATA;
  249. drv_data->state =
  250. MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_ACK;
  251. drv_data->bytes_left--;
  252. }
  253. break;
  254. /* Performing a read */
  255. case MV64XXX_I2C_STATUS_MAST_RD_ADDR_ACK: /* 40 */
  256. if (drv_data->msg->flags & I2C_M_TEN) {
  257. drv_data->action = MV64XXX_I2C_ACTION_SEND_ADDR_2;
  258. drv_data->state =
  259. MV64XXX_I2C_STATE_WAITING_FOR_ADDR_2_ACK;
  260. break;
  261. }
  262. /* FALLTHRU */
  263. case MV64XXX_I2C_STATUS_MAST_RD_ADDR_2_ACK: /* 0xe0 */
  264. if (drv_data->bytes_left == 0) {
  265. drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
  266. drv_data->state = MV64XXX_I2C_STATE_IDLE;
  267. break;
  268. }
  269. /* FALLTHRU */
  270. case MV64XXX_I2C_STATUS_MAST_RD_DATA_ACK: /* 0x50 */
  271. if (status != MV64XXX_I2C_STATUS_MAST_RD_DATA_ACK)
  272. drv_data->action = MV64XXX_I2C_ACTION_CONTINUE;
  273. else {
  274. drv_data->action = MV64XXX_I2C_ACTION_RCV_DATA;
  275. drv_data->bytes_left--;
  276. }
  277. drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_DATA;
  278. if ((drv_data->bytes_left == 1) || drv_data->aborting)
  279. drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_ACK;
  280. break;
  281. case MV64XXX_I2C_STATUS_MAST_RD_DATA_NO_ACK: /* 0x58 */
  282. drv_data->action = MV64XXX_I2C_ACTION_RCV_DATA_STOP;
  283. drv_data->state = MV64XXX_I2C_STATE_IDLE;
  284. break;
  285. case MV64XXX_I2C_STATUS_MAST_WR_ADDR_NO_ACK: /* 0x20 */
  286. case MV64XXX_I2C_STATUS_MAST_WR_NO_ACK: /* 30 */
  287. case MV64XXX_I2C_STATUS_MAST_RD_ADDR_NO_ACK: /* 48 */
  288. /* Doesn't seem to be a device at other end */
  289. drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
  290. drv_data->state = MV64XXX_I2C_STATE_IDLE;
  291. drv_data->rc = -ENXIO;
  292. break;
  293. default:
  294. dev_err(&drv_data->adapter.dev,
  295. "mv64xxx_i2c_fsm: Ctlr Error -- state: 0x%x, "
  296. "status: 0x%x, addr: 0x%x, flags: 0x%x\n",
  297. drv_data->state, status, drv_data->msg->addr,
  298. drv_data->msg->flags);
  299. drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
  300. mv64xxx_i2c_hw_init(drv_data);
  301. drv_data->rc = -EIO;
  302. }
  303. }
  304. static void mv64xxx_i2c_send_start(struct mv64xxx_i2c_data *drv_data)
  305. {
  306. drv_data->msg = drv_data->msgs;
  307. drv_data->byte_posn = 0;
  308. drv_data->bytes_left = drv_data->msg->len;
  309. drv_data->aborting = 0;
  310. drv_data->rc = 0;
  311. mv64xxx_i2c_prepare_for_io(drv_data, drv_data->msgs);
  312. writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_START,
  313. drv_data->reg_base + drv_data->reg_offsets.control);
  314. }
  315. static void
  316. mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data)
  317. {
  318. switch(drv_data->action) {
  319. case MV64XXX_I2C_ACTION_SEND_RESTART:
  320. /* We should only get here if we have further messages */
  321. BUG_ON(drv_data->num_msgs == 0);
  322. drv_data->msgs++;
  323. drv_data->num_msgs--;
  324. mv64xxx_i2c_send_start(drv_data);
  325. if (drv_data->errata_delay)
  326. udelay(5);
  327. /*
  328. * We're never at the start of the message here, and by this
  329. * time it's already too late to do any protocol mangling.
  330. * Thankfully, do not advertise support for that feature.
  331. */
  332. drv_data->send_stop = drv_data->num_msgs == 1;
  333. break;
  334. case MV64XXX_I2C_ACTION_CONTINUE:
  335. writel(drv_data->cntl_bits,
  336. drv_data->reg_base + drv_data->reg_offsets.control);
  337. break;
  338. case MV64XXX_I2C_ACTION_SEND_ADDR_1:
  339. writel(drv_data->addr1,
  340. drv_data->reg_base + drv_data->reg_offsets.data);
  341. writel(drv_data->cntl_bits,
  342. drv_data->reg_base + drv_data->reg_offsets.control);
  343. break;
  344. case MV64XXX_I2C_ACTION_SEND_ADDR_2:
  345. writel(drv_data->addr2,
  346. drv_data->reg_base + drv_data->reg_offsets.data);
  347. writel(drv_data->cntl_bits,
  348. drv_data->reg_base + drv_data->reg_offsets.control);
  349. break;
  350. case MV64XXX_I2C_ACTION_SEND_DATA:
  351. writel(drv_data->msg->buf[drv_data->byte_posn++],
  352. drv_data->reg_base + drv_data->reg_offsets.data);
  353. writel(drv_data->cntl_bits,
  354. drv_data->reg_base + drv_data->reg_offsets.control);
  355. break;
  356. case MV64XXX_I2C_ACTION_RCV_DATA:
  357. drv_data->msg->buf[drv_data->byte_posn++] =
  358. readl(drv_data->reg_base + drv_data->reg_offsets.data);
  359. writel(drv_data->cntl_bits,
  360. drv_data->reg_base + drv_data->reg_offsets.control);
  361. break;
  362. case MV64XXX_I2C_ACTION_RCV_DATA_STOP:
  363. drv_data->msg->buf[drv_data->byte_posn++] =
  364. readl(drv_data->reg_base + drv_data->reg_offsets.data);
  365. drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_INTEN;
  366. writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP,
  367. drv_data->reg_base + drv_data->reg_offsets.control);
  368. drv_data->block = 0;
  369. if (drv_data->errata_delay)
  370. udelay(5);
  371. wake_up(&drv_data->waitq);
  372. break;
  373. case MV64XXX_I2C_ACTION_INVALID:
  374. default:
  375. dev_err(&drv_data->adapter.dev,
  376. "mv64xxx_i2c_do_action: Invalid action: %d\n",
  377. drv_data->action);
  378. drv_data->rc = -EIO;
  379. /* FALLTHRU */
  380. case MV64XXX_I2C_ACTION_SEND_STOP:
  381. drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_INTEN;
  382. writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP,
  383. drv_data->reg_base + drv_data->reg_offsets.control);
  384. drv_data->block = 0;
  385. wake_up(&drv_data->waitq);
  386. break;
  387. }
  388. }
  389. static void
  390. mv64xxx_i2c_read_offload_rx_data(struct mv64xxx_i2c_data *drv_data,
  391. struct i2c_msg *msg)
  392. {
  393. u32 buf[2];
  394. buf[0] = readl(drv_data->reg_base + MV64XXX_I2C_REG_RX_DATA_LO);
  395. buf[1] = readl(drv_data->reg_base + MV64XXX_I2C_REG_RX_DATA_HI);
  396. memcpy(msg->buf, buf, msg->len);
  397. }
  398. static int
  399. mv64xxx_i2c_intr_offload(struct mv64xxx_i2c_data *drv_data)
  400. {
  401. u32 cause, status;
  402. cause = readl(drv_data->reg_base +
  403. MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE);
  404. if (!cause)
  405. return IRQ_NONE;
  406. status = readl(drv_data->reg_base +
  407. MV64XXX_I2C_REG_BRIDGE_STATUS);
  408. if (status & MV64XXX_I2C_BRIDGE_STATUS_ERROR) {
  409. drv_data->rc = -EIO;
  410. goto out;
  411. }
  412. drv_data->rc = 0;
  413. /*
  414. * Transaction is a one message read transaction, read data
  415. * for this message.
  416. */
  417. if (drv_data->num_msgs == 1 && drv_data->msgs[0].flags & I2C_M_RD) {
  418. mv64xxx_i2c_read_offload_rx_data(drv_data, drv_data->msgs);
  419. drv_data->msgs++;
  420. drv_data->num_msgs--;
  421. }
  422. /*
  423. * Transaction is a two messages write/read transaction, read
  424. * data for the second (read) message.
  425. */
  426. else if (drv_data->num_msgs == 2 &&
  427. !(drv_data->msgs[0].flags & I2C_M_RD) &&
  428. drv_data->msgs[1].flags & I2C_M_RD) {
  429. mv64xxx_i2c_read_offload_rx_data(drv_data, drv_data->msgs + 1);
  430. drv_data->msgs += 2;
  431. drv_data->num_msgs -= 2;
  432. }
  433. out:
  434. writel(0, drv_data->reg_base + MV64XXX_I2C_REG_BRIDGE_CONTROL);
  435. writel(0, drv_data->reg_base +
  436. MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE);
  437. drv_data->block = 0;
  438. wake_up(&drv_data->waitq);
  439. return IRQ_HANDLED;
  440. }
  441. static irqreturn_t
  442. mv64xxx_i2c_intr(int irq, void *dev_id)
  443. {
  444. struct mv64xxx_i2c_data *drv_data = dev_id;
  445. unsigned long flags;
  446. u32 status;
  447. irqreturn_t rc = IRQ_NONE;
  448. spin_lock_irqsave(&drv_data->lock, flags);
  449. if (drv_data->offload_enabled)
  450. rc = mv64xxx_i2c_intr_offload(drv_data);
  451. while (readl(drv_data->reg_base + drv_data->reg_offsets.control) &
  452. MV64XXX_I2C_REG_CONTROL_IFLG) {
  453. status = readl(drv_data->reg_base + drv_data->reg_offsets.status);
  454. mv64xxx_i2c_fsm(drv_data, status);
  455. mv64xxx_i2c_do_action(drv_data);
  456. if (drv_data->irq_clear_inverted)
  457. writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_IFLG,
  458. drv_data->reg_base + drv_data->reg_offsets.control);
  459. rc = IRQ_HANDLED;
  460. }
  461. spin_unlock_irqrestore(&drv_data->lock, flags);
  462. return rc;
  463. }
  464. /*
  465. *****************************************************************************
  466. *
  467. * I2C Msg Execution Routines
  468. *
  469. *****************************************************************************
  470. */
  471. static void
  472. mv64xxx_i2c_wait_for_completion(struct mv64xxx_i2c_data *drv_data)
  473. {
  474. long time_left;
  475. unsigned long flags;
  476. char abort = 0;
  477. time_left = wait_event_timeout(drv_data->waitq,
  478. !drv_data->block, drv_data->adapter.timeout);
  479. spin_lock_irqsave(&drv_data->lock, flags);
  480. if (!time_left) { /* Timed out */
  481. drv_data->rc = -ETIMEDOUT;
  482. abort = 1;
  483. } else if (time_left < 0) { /* Interrupted/Error */
  484. drv_data->rc = time_left; /* errno value */
  485. abort = 1;
  486. }
  487. if (abort && drv_data->block) {
  488. drv_data->aborting = 1;
  489. spin_unlock_irqrestore(&drv_data->lock, flags);
  490. time_left = wait_event_timeout(drv_data->waitq,
  491. !drv_data->block, drv_data->adapter.timeout);
  492. if ((time_left <= 0) && drv_data->block) {
  493. drv_data->state = MV64XXX_I2C_STATE_IDLE;
  494. dev_err(&drv_data->adapter.dev,
  495. "mv64xxx: I2C bus locked, block: %d, "
  496. "time_left: %d\n", drv_data->block,
  497. (int)time_left);
  498. mv64xxx_i2c_hw_init(drv_data);
  499. }
  500. } else
  501. spin_unlock_irqrestore(&drv_data->lock, flags);
  502. }
  503. static int
  504. mv64xxx_i2c_execute_msg(struct mv64xxx_i2c_data *drv_data, struct i2c_msg *msg,
  505. int is_last)
  506. {
  507. unsigned long flags;
  508. spin_lock_irqsave(&drv_data->lock, flags);
  509. drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
  510. drv_data->send_stop = is_last;
  511. drv_data->block = 1;
  512. mv64xxx_i2c_send_start(drv_data);
  513. spin_unlock_irqrestore(&drv_data->lock, flags);
  514. mv64xxx_i2c_wait_for_completion(drv_data);
  515. return drv_data->rc;
  516. }
  517. static void
  518. mv64xxx_i2c_prepare_tx(struct mv64xxx_i2c_data *drv_data)
  519. {
  520. struct i2c_msg *msg = drv_data->msgs;
  521. u32 buf[2];
  522. memcpy(buf, msg->buf, msg->len);
  523. writel(buf[0], drv_data->reg_base + MV64XXX_I2C_REG_TX_DATA_LO);
  524. writel(buf[1], drv_data->reg_base + MV64XXX_I2C_REG_TX_DATA_HI);
  525. }
  526. static int
  527. mv64xxx_i2c_offload_xfer(struct mv64xxx_i2c_data *drv_data)
  528. {
  529. struct i2c_msg *msgs = drv_data->msgs;
  530. int num = drv_data->num_msgs;
  531. unsigned long ctrl_reg;
  532. unsigned long flags;
  533. spin_lock_irqsave(&drv_data->lock, flags);
  534. /* Build transaction */
  535. ctrl_reg = MV64XXX_I2C_BRIDGE_CONTROL_ENABLE |
  536. (msgs[0].addr << MV64XXX_I2C_BRIDGE_CONTROL_ADDR_SHIFT);
  537. if (msgs[0].flags & I2C_M_TEN)
  538. ctrl_reg |= MV64XXX_I2C_BRIDGE_CONTROL_ADDR_EXT;
  539. /* Single write message transaction */
  540. if (num == 1 && !(msgs[0].flags & I2C_M_RD)) {
  541. size_t len = msgs[0].len - 1;
  542. ctrl_reg |= MV64XXX_I2C_BRIDGE_CONTROL_WR |
  543. (len << MV64XXX_I2C_BRIDGE_CONTROL_TX_SIZE_SHIFT);
  544. mv64xxx_i2c_prepare_tx(drv_data);
  545. }
  546. /* Single read message transaction */
  547. else if (num == 1 && msgs[0].flags & I2C_M_RD) {
  548. size_t len = msgs[0].len - 1;
  549. ctrl_reg |= MV64XXX_I2C_BRIDGE_CONTROL_RD |
  550. (len << MV64XXX_I2C_BRIDGE_CONTROL_RX_SIZE_SHIFT);
  551. }
  552. /*
  553. * Transaction with one write and one read message. This is
  554. * guaranteed by the mv64xx_i2c_can_offload() checks.
  555. */
  556. else if (num == 2) {
  557. size_t lentx = msgs[0].len - 1;
  558. size_t lenrx = msgs[1].len - 1;
  559. ctrl_reg |=
  560. MV64XXX_I2C_BRIDGE_CONTROL_RD |
  561. MV64XXX_I2C_BRIDGE_CONTROL_WR |
  562. (lentx << MV64XXX_I2C_BRIDGE_CONTROL_TX_SIZE_SHIFT) |
  563. (lenrx << MV64XXX_I2C_BRIDGE_CONTROL_RX_SIZE_SHIFT) |
  564. MV64XXX_I2C_BRIDGE_CONTROL_REPEATED_START;
  565. mv64xxx_i2c_prepare_tx(drv_data);
  566. }
  567. /* Execute transaction */
  568. drv_data->block = 1;
  569. writel(ctrl_reg, drv_data->reg_base + MV64XXX_I2C_REG_BRIDGE_CONTROL);
  570. spin_unlock_irqrestore(&drv_data->lock, flags);
  571. mv64xxx_i2c_wait_for_completion(drv_data);
  572. return drv_data->rc;
  573. }
  574. static bool
  575. mv64xxx_i2c_valid_offload_sz(struct i2c_msg *msg)
  576. {
  577. return msg->len <= 8 && msg->len >= 1;
  578. }
  579. static bool
  580. mv64xxx_i2c_can_offload(struct mv64xxx_i2c_data *drv_data)
  581. {
  582. struct i2c_msg *msgs = drv_data->msgs;
  583. int num = drv_data->num_msgs;
  584. if (!drv_data->offload_enabled)
  585. return false;
  586. /*
  587. * We can offload a transaction consisting of a single
  588. * message, as long as the message has a length between 1 and
  589. * 8 bytes.
  590. */
  591. if (num == 1 && mv64xxx_i2c_valid_offload_sz(msgs))
  592. return true;
  593. /*
  594. * We can offload a transaction consisting of two messages, if
  595. * the first is a write and a second is a read, and both have
  596. * a length between 1 and 8 bytes.
  597. */
  598. if (num == 2 &&
  599. mv64xxx_i2c_valid_offload_sz(msgs) &&
  600. mv64xxx_i2c_valid_offload_sz(msgs + 1) &&
  601. !(msgs[0].flags & I2C_M_RD) &&
  602. msgs[1].flags & I2C_M_RD)
  603. return true;
  604. return false;
  605. }
  606. /*
  607. *****************************************************************************
  608. *
  609. * I2C Core Support Routines (Interface to higher level I2C code)
  610. *
  611. *****************************************************************************
  612. */
  613. static u32
  614. mv64xxx_i2c_functionality(struct i2c_adapter *adap)
  615. {
  616. return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SMBUS_EMUL;
  617. }
  618. static int
  619. mv64xxx_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
  620. {
  621. struct mv64xxx_i2c_data *drv_data = i2c_get_adapdata(adap);
  622. int rc, ret = num;
  623. BUG_ON(drv_data->msgs != NULL);
  624. drv_data->msgs = msgs;
  625. drv_data->num_msgs = num;
  626. if (mv64xxx_i2c_can_offload(drv_data))
  627. rc = mv64xxx_i2c_offload_xfer(drv_data);
  628. else
  629. rc = mv64xxx_i2c_execute_msg(drv_data, &msgs[0], num == 1);
  630. if (rc < 0)
  631. ret = rc;
  632. drv_data->num_msgs = 0;
  633. drv_data->msgs = NULL;
  634. return ret;
  635. }
  636. static const struct i2c_algorithm mv64xxx_i2c_algo = {
  637. .master_xfer = mv64xxx_i2c_xfer,
  638. .functionality = mv64xxx_i2c_functionality,
  639. };
  640. /*
  641. *****************************************************************************
  642. *
  643. * Driver Interface & Early Init Routines
  644. *
  645. *****************************************************************************
  646. */
  647. static const struct of_device_id mv64xxx_i2c_of_match_table[] = {
  648. { .compatible = "allwinner,sun4i-a10-i2c", .data = &mv64xxx_i2c_regs_sun4i},
  649. { .compatible = "allwinner,sun6i-a31-i2c", .data = &mv64xxx_i2c_regs_sun4i},
  650. { .compatible = "marvell,mv64xxx-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
  651. { .compatible = "marvell,mv78230-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
  652. { .compatible = "marvell,mv78230-a0-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
  653. {}
  654. };
  655. MODULE_DEVICE_TABLE(of, mv64xxx_i2c_of_match_table);
  656. #ifdef CONFIG_OF
  657. static int
  658. mv64xxx_calc_freq(struct mv64xxx_i2c_data *drv_data,
  659. const int tclk, const int n, const int m)
  660. {
  661. if (drv_data->clk_n_base_0)
  662. return tclk / (10 * (m + 1) * (1 << n));
  663. else
  664. return tclk / (10 * (m + 1) * (2 << n));
  665. }
  666. static bool
  667. mv64xxx_find_baud_factors(struct mv64xxx_i2c_data *drv_data,
  668. const u32 req_freq, const u32 tclk)
  669. {
  670. int freq, delta, best_delta = INT_MAX;
  671. int m, n;
  672. for (n = 0; n <= 7; n++)
  673. for (m = 0; m <= 15; m++) {
  674. freq = mv64xxx_calc_freq(drv_data, tclk, n, m);
  675. delta = req_freq - freq;
  676. if (delta >= 0 && delta < best_delta) {
  677. drv_data->freq_m = m;
  678. drv_data->freq_n = n;
  679. best_delta = delta;
  680. }
  681. if (best_delta == 0)
  682. return true;
  683. }
  684. if (best_delta == INT_MAX)
  685. return false;
  686. return true;
  687. }
  688. static int
  689. mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data,
  690. struct device *dev)
  691. {
  692. const struct of_device_id *device;
  693. struct device_node *np = dev->of_node;
  694. u32 bus_freq, tclk;
  695. int rc = 0;
  696. /* CLK is mandatory when using DT to describe the i2c bus. We
  697. * need to know tclk in order to calculate bus clock
  698. * factors.
  699. */
  700. if (IS_ERR(drv_data->clk)) {
  701. rc = -ENODEV;
  702. goto out;
  703. }
  704. tclk = clk_get_rate(drv_data->clk);
  705. if (of_property_read_u32(np, "clock-frequency", &bus_freq))
  706. bus_freq = 100000; /* 100kHz by default */
  707. if (of_device_is_compatible(np, "allwinner,sun4i-a10-i2c") ||
  708. of_device_is_compatible(np, "allwinner,sun6i-a31-i2c"))
  709. drv_data->clk_n_base_0 = true;
  710. if (!mv64xxx_find_baud_factors(drv_data, bus_freq, tclk)) {
  711. rc = -EINVAL;
  712. goto out;
  713. }
  714. drv_data->rstc = devm_reset_control_get_optional_exclusive(dev, NULL);
  715. if (IS_ERR(drv_data->rstc)) {
  716. rc = PTR_ERR(drv_data->rstc);
  717. goto out;
  718. }
  719. reset_control_deassert(drv_data->rstc);
  720. /* Its not yet defined how timeouts will be specified in device tree.
  721. * So hard code the value to 1 second.
  722. */
  723. drv_data->adapter.timeout = HZ;
  724. device = of_match_device(mv64xxx_i2c_of_match_table, dev);
  725. if (!device)
  726. return -ENODEV;
  727. memcpy(&drv_data->reg_offsets, device->data, sizeof(drv_data->reg_offsets));
  728. /*
  729. * For controllers embedded in new SoCs activate the
  730. * Transaction Generator support and the errata fix.
  731. */
  732. if (of_device_is_compatible(np, "marvell,mv78230-i2c")) {
  733. drv_data->offload_enabled = true;
  734. /* The delay is only needed in standard mode (100kHz) */
  735. if (bus_freq <= 100000)
  736. drv_data->errata_delay = true;
  737. }
  738. if (of_device_is_compatible(np, "marvell,mv78230-a0-i2c")) {
  739. drv_data->offload_enabled = false;
  740. /* The delay is only needed in standard mode (100kHz) */
  741. if (bus_freq <= 100000)
  742. drv_data->errata_delay = true;
  743. }
  744. if (of_device_is_compatible(np, "allwinner,sun6i-a31-i2c"))
  745. drv_data->irq_clear_inverted = true;
  746. out:
  747. return rc;
  748. }
  749. #else /* CONFIG_OF */
  750. static int
  751. mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data,
  752. struct device *dev)
  753. {
  754. return -ENODEV;
  755. }
  756. #endif /* CONFIG_OF */
  757. static int
  758. mv64xxx_i2c_probe(struct platform_device *pd)
  759. {
  760. struct mv64xxx_i2c_data *drv_data;
  761. struct mv64xxx_i2c_pdata *pdata = dev_get_platdata(&pd->dev);
  762. struct resource *r;
  763. int rc;
  764. if ((!pdata && !pd->dev.of_node))
  765. return -ENODEV;
  766. drv_data = devm_kzalloc(&pd->dev, sizeof(struct mv64xxx_i2c_data),
  767. GFP_KERNEL);
  768. if (!drv_data)
  769. return -ENOMEM;
  770. r = platform_get_resource(pd, IORESOURCE_MEM, 0);
  771. drv_data->reg_base = devm_ioremap_resource(&pd->dev, r);
  772. if (IS_ERR(drv_data->reg_base))
  773. return PTR_ERR(drv_data->reg_base);
  774. strlcpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter",
  775. sizeof(drv_data->adapter.name));
  776. init_waitqueue_head(&drv_data->waitq);
  777. spin_lock_init(&drv_data->lock);
  778. /* Not all platforms have clocks */
  779. drv_data->clk = devm_clk_get(&pd->dev, NULL);
  780. if (IS_ERR(drv_data->clk) && PTR_ERR(drv_data->clk) == -EPROBE_DEFER)
  781. return -EPROBE_DEFER;
  782. if (!IS_ERR(drv_data->clk))
  783. clk_prepare_enable(drv_data->clk);
  784. drv_data->reg_clk = devm_clk_get(&pd->dev, "reg");
  785. if (IS_ERR(drv_data->reg_clk) &&
  786. PTR_ERR(drv_data->reg_clk) == -EPROBE_DEFER)
  787. return -EPROBE_DEFER;
  788. if (!IS_ERR(drv_data->reg_clk))
  789. clk_prepare_enable(drv_data->reg_clk);
  790. drv_data->irq = platform_get_irq(pd, 0);
  791. if (pdata) {
  792. drv_data->freq_m = pdata->freq_m;
  793. drv_data->freq_n = pdata->freq_n;
  794. drv_data->adapter.timeout = msecs_to_jiffies(pdata->timeout);
  795. drv_data->offload_enabled = false;
  796. memcpy(&drv_data->reg_offsets, &mv64xxx_i2c_regs_mv64xxx, sizeof(drv_data->reg_offsets));
  797. } else if (pd->dev.of_node) {
  798. rc = mv64xxx_of_config(drv_data, &pd->dev);
  799. if (rc)
  800. goto exit_clk;
  801. }
  802. if (drv_data->irq < 0) {
  803. rc = drv_data->irq;
  804. goto exit_reset;
  805. }
  806. drv_data->adapter.dev.parent = &pd->dev;
  807. drv_data->adapter.algo = &mv64xxx_i2c_algo;
  808. drv_data->adapter.owner = THIS_MODULE;
  809. drv_data->adapter.class = I2C_CLASS_DEPRECATED;
  810. drv_data->adapter.nr = pd->id;
  811. drv_data->adapter.dev.of_node = pd->dev.of_node;
  812. platform_set_drvdata(pd, drv_data);
  813. i2c_set_adapdata(&drv_data->adapter, drv_data);
  814. mv64xxx_i2c_hw_init(drv_data);
  815. rc = request_irq(drv_data->irq, mv64xxx_i2c_intr, 0,
  816. MV64XXX_I2C_CTLR_NAME, drv_data);
  817. if (rc) {
  818. dev_err(&drv_data->adapter.dev,
  819. "mv64xxx: Can't register intr handler irq%d: %d\n",
  820. drv_data->irq, rc);
  821. goto exit_reset;
  822. } else if ((rc = i2c_add_numbered_adapter(&drv_data->adapter)) != 0) {
  823. dev_err(&drv_data->adapter.dev,
  824. "mv64xxx: Can't add i2c adapter, rc: %d\n", -rc);
  825. goto exit_free_irq;
  826. }
  827. return 0;
  828. exit_free_irq:
  829. free_irq(drv_data->irq, drv_data);
  830. exit_reset:
  831. reset_control_assert(drv_data->rstc);
  832. exit_clk:
  833. clk_disable_unprepare(drv_data->reg_clk);
  834. clk_disable_unprepare(drv_data->clk);
  835. return rc;
  836. }
  837. static int
  838. mv64xxx_i2c_remove(struct platform_device *dev)
  839. {
  840. struct mv64xxx_i2c_data *drv_data = platform_get_drvdata(dev);
  841. i2c_del_adapter(&drv_data->adapter);
  842. free_irq(drv_data->irq, drv_data);
  843. reset_control_assert(drv_data->rstc);
  844. clk_disable_unprepare(drv_data->reg_clk);
  845. clk_disable_unprepare(drv_data->clk);
  846. return 0;
  847. }
  848. #ifdef CONFIG_PM
  849. static int mv64xxx_i2c_resume(struct device *dev)
  850. {
  851. struct mv64xxx_i2c_data *drv_data = dev_get_drvdata(dev);
  852. mv64xxx_i2c_hw_init(drv_data);
  853. return 0;
  854. }
  855. static const struct dev_pm_ops mv64xxx_i2c_pm = {
  856. .resume = mv64xxx_i2c_resume,
  857. };
  858. #define mv64xxx_i2c_pm_ops (&mv64xxx_i2c_pm)
  859. #else
  860. #define mv64xxx_i2c_pm_ops NULL
  861. #endif
  862. static struct platform_driver mv64xxx_i2c_driver = {
  863. .probe = mv64xxx_i2c_probe,
  864. .remove = mv64xxx_i2c_remove,
  865. .driver = {
  866. .name = MV64XXX_I2C_CTLR_NAME,
  867. .pm = mv64xxx_i2c_pm_ops,
  868. .of_match_table = mv64xxx_i2c_of_match_table,
  869. },
  870. };
  871. module_platform_driver(mv64xxx_i2c_driver);
  872. MODULE_AUTHOR("Mark A. Greer <mgreer@mvista.com>");
  873. MODULE_DESCRIPTION("Marvell mv64xxx host bridge i2c ctlr driver");
  874. MODULE_LICENSE("GPL");