i2c-mtk.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866
  1. /*
  2. * Copyright (c) 2014 MediaTek Inc.
  3. * Author: Xudong.chen <xudong.chen@mediatek.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License version 2 as
  7. * published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. */
  14. #include <linux/kernel.h>
  15. #include <linux/module.h>
  16. #include <linux/slab.h>
  17. #include <linux/i2c.h>
  18. #include <linux/init.h>
  19. #include <linux/interrupt.h>
  20. #include <linux/sched.h>
  21. #include <linux/delay.h>
  22. #include <linux/errno.h>
  23. #include <linux/err.h>
  24. #include <linux/device.h>
  25. #include <linux/platform_device.h>
  26. #include <linux/wait.h>
  27. #include <linux/mm.h>
  28. #include <linux/dma-mapping.h>
  29. #include <linux/scatterlist.h>
  30. #include <linux/io.h>
  31. #include <linux/of_address.h>
  32. #include <linux/of_irq.h>
  33. #include <linux/clk.h>
  34. #include <mt_cpufreq_hybrid.h>
  35. #include "i2c-mtk.h"
  36. static inline void i2c_writew(u16 value, struct mt_i2c *i2c, u8 offset)
  37. {
  38. writew(value, i2c->base + offset);
  39. }
  40. static inline u16 i2c_readw(struct mt_i2c *i2c, u8 offset)
  41. {
  42. return readw(i2c->base + offset);
  43. }
  44. static inline void i2c_writel_dma(u32 value, struct mt_i2c *i2c, u8 offset)
  45. {
  46. writel(value, i2c->pdmabase + offset);
  47. }
  48. static int mt_i2c_clock_enable(struct mt_i2c *i2c)
  49. {
  50. int ret;
  51. ret = clk_prepare_enable(i2c->clk_dma);
  52. if (ret)
  53. return ret;
  54. if (i2c->id != 6) { /* the clock of i2c6 will always on */
  55. if (i2c->clk_arb != NULL) {
  56. ret = clk_prepare_enable(i2c->clk_arb);
  57. if (ret)
  58. return ret;
  59. }
  60. clk_prepare_enable(i2c->clk_main);
  61. if (ret)
  62. goto err_main;
  63. }
  64. if (i2c->have_pmic) {
  65. ret = clk_prepare_enable(i2c->clk_pmic);
  66. if (ret)
  67. goto err_pmic;
  68. }
  69. return 0;
  70. err_pmic:
  71. clk_disable_unprepare(i2c->clk_main);
  72. err_main:
  73. clk_disable_unprepare(i2c->clk_dma);
  74. return ret;
  75. }
  76. static void mt_i2c_clock_disable(struct mt_i2c *i2c)
  77. {
  78. if (i2c->have_pmic)
  79. clk_disable_unprepare(i2c->clk_pmic);
  80. if (i2c->id != 6) { /* the clock of i2c6 will always on */
  81. clk_disable_unprepare(i2c->clk_main);
  82. if (i2c->clk_arb != NULL)
  83. clk_disable_unprepare(i2c->clk_arb);
  84. }
  85. clk_disable_unprepare(i2c->clk_dma);
  86. }
  87. static int i2c_get_semaphore(struct mt_i2c *i2c)
  88. {
  89. if (i2c->id != 6)
  90. return 0;
  91. if (cpuhvfs_get_dvfsp_semaphore(SEMA_I2C_DRV) != 0) {
  92. dev_err(i2c->dev, "sema time out 2ms\n");
  93. if (cpuhvfs_get_dvfsp_semaphore(SEMA_I2C_DRV) != 0) {
  94. dev_err(i2c->dev, "sema time out 4ms\n");
  95. BUG_ON(1);
  96. return -EBUSY;
  97. }
  98. }
  99. return 0;
  100. }
  101. static int i2c_release_semaphore(struct mt_i2c *i2c)
  102. {
  103. if (i2c->id != 6)
  104. return 0;
  105. cpuhvfs_release_dvfsp_semaphore(SEMA_I2C_DRV);
  106. return 0;
  107. }
  108. static void free_i2c_dma_bufs(struct mt_i2c *i2c)
  109. {
  110. dma_free_coherent(i2c->adap.dev.parent, PAGE_SIZE,
  111. i2c->dma_buf.vaddr, i2c->dma_buf.paddr);
  112. }
  113. static inline void mt_i2c_init_hw(struct mt_i2c *i2c)
  114. {
  115. i2c_writew(I2C_SOFT_RST, i2c, OFFSET_SOFTRESET);
  116. /* Set ioconfig */
  117. if (i2c->use_push_pull)
  118. i2c_writew(I2C_IO_CONFIG_PUSH_PULL, i2c, OFFSET_IO_CONFIG);
  119. else
  120. i2c_writew(I2C_IO_CONFIG_OPEN_DRAIN, i2c, OFFSET_IO_CONFIG);
  121. if (i2c->have_dcm)
  122. i2c_writew(I2C_DCM_DISABLE, i2c, OFFSET_DCM_EN);
  123. i2c_writew(i2c->timing_reg, i2c, OFFSET_TIMING);
  124. i2c_writew(i2c->high_speed_reg, i2c, OFFSET_HS);
  125. }
  126. /* calculate i2c port speed */
  127. static int i2c_set_speed(struct mt_i2c *i2c, unsigned int clk_src_in_hz)
  128. {
  129. int mode;
  130. unsigned int khz;
  131. unsigned int step_cnt;
  132. unsigned int sample_cnt;
  133. unsigned int sclk;
  134. unsigned int hclk;
  135. unsigned int max_step_cnt;
  136. unsigned int sample_div = MAX_SAMPLE_CNT_DIV;
  137. unsigned int step_div;
  138. unsigned int min_div;
  139. unsigned int best_mul;
  140. unsigned int cnt_mul;
  141. unsigned int speed_hz;
  142. if (i2c->ext_data.isEnable && i2c->ext_data.timing)
  143. speed_hz = i2c->ext_data.timing;
  144. else
  145. speed_hz = i2c->speed_hz;
  146. if (speed_hz > MAX_HS_MODE_SPEED) {
  147. return -EINVAL;
  148. } else if (speed_hz > MAX_FS_MODE_SPEED) {
  149. mode = HS_MODE;
  150. max_step_cnt = MAX_HS_STEP_CNT_DIV;
  151. } else {
  152. mode = FS_MODE;
  153. max_step_cnt = MAX_STEP_CNT_DIV;
  154. }
  155. step_div = max_step_cnt;
  156. /* Find the best combination */
  157. khz = speed_hz / 1000;
  158. hclk = clk_src_in_hz / 1000;
  159. min_div = ((hclk >> 1) + khz - 1) / khz;
  160. best_mul = MAX_SAMPLE_CNT_DIV * max_step_cnt;
  161. for (sample_cnt = 1; sample_cnt <= MAX_SAMPLE_CNT_DIV; sample_cnt++) {
  162. step_cnt = (min_div + sample_cnt - 1) / sample_cnt;
  163. cnt_mul = step_cnt * sample_cnt;
  164. if (step_cnt > max_step_cnt)
  165. continue;
  166. if (cnt_mul < best_mul) {
  167. best_mul = cnt_mul;
  168. sample_div = sample_cnt;
  169. step_div = step_cnt;
  170. if (best_mul == min_div)
  171. break;
  172. }
  173. }
  174. sample_cnt = sample_div;
  175. step_cnt = step_div;
  176. sclk = hclk / (2 * sample_cnt * step_cnt);
  177. if (sclk > khz) {
  178. dev_dbg(i2c->dev, "%s mode: unsupported speed (%ldkhz)\n",
  179. (mode == HS_MODE) ? "HS" : "ST/FT", (long int)khz);
  180. return -ENOTSUPP;
  181. }
  182. step_cnt--;
  183. sample_cnt--;
  184. if (mode == HS_MODE) {
  185. /* Set the hign speed mode register */
  186. i2c->timing_reg = 0x1303;
  187. i2c->high_speed_reg = I2C_TIME_DEFAULT_VALUE |
  188. (sample_cnt & I2C_TIMING_SAMPLE_COUNT_MASK) << 12 |
  189. (step_cnt & I2C_TIMING_SAMPLE_COUNT_MASK) << 8;
  190. } else {
  191. i2c->timing_reg =
  192. (sample_cnt & I2C_TIMING_SAMPLE_COUNT_MASK) << 8 |
  193. (step_cnt & I2C_TIMING_STEP_DIV_MASK) << 0;
  194. /* Disable the high speed transaction */
  195. i2c->high_speed_reg = I2C_TIME_CLR_VALUE;
  196. }
  197. return 0;
  198. }
  199. #ifdef I2C_DEBUG_FS
  200. void i2c_dump_info1(struct mt_i2c *i2c)
  201. {
  202. if (i2c->ext_data.isEnable && i2c->ext_data.timing)
  203. dev_err(i2c->dev, "I2C structure:\nspeed %d\n",
  204. i2c->ext_data.timing);
  205. else
  206. dev_err(i2c->dev, "I2C structure:\nspeed %d\n",
  207. i2c->speed_hz);
  208. dev_err(i2c->dev, "I2C structure:\nOp %x\n", i2c->op);
  209. dev_err(i2c->dev,
  210. "I2C structure:\nData_size %x\nIrq_stat %x\nTrans_stop %d\n",
  211. i2c->msg_len, i2c->irq_stat, i2c->trans_stop);
  212. dev_err(i2c->dev, "base address %p\n", i2c->base);
  213. dev_err(i2c->dev,
  214. "I2C register:\nSLAVE_ADDR %x\nINTR_MASK %x\n",
  215. (i2c_readw(i2c, OFFSET_SLAVE_ADDR)),
  216. (i2c_readw(i2c, OFFSET_INTR_MASK)));
  217. dev_err(i2c->dev,
  218. "I2C register:\nINTR_STAT %x\nCONTROL %x\n",
  219. (i2c_readw(i2c, OFFSET_INTR_STAT)),
  220. (i2c_readw(i2c, OFFSET_CONTROL)));
  221. dev_err(i2c->dev,
  222. "I2C register:\nTRANSFER_LEN %x\nTRANSAC_LEN %x\n",
  223. (i2c_readw(i2c, OFFSET_TRANSFER_LEN)),
  224. (i2c_readw(i2c, OFFSET_TRANSAC_LEN)));
  225. dev_err(i2c->dev,
  226. "I2C register:\nDELAY_LEN %x\nTIMING %x\n",
  227. (i2c_readw(i2c, OFFSET_DELAY_LEN)),
  228. (i2c_readw(i2c, OFFSET_TIMING)));
  229. dev_err(i2c->dev,
  230. "I2C register:\nSTART %x\nFIFO_STAT %x\n",
  231. (i2c_readw(i2c, OFFSET_START)),
  232. (i2c_readw(i2c, OFFSET_FIFO_STAT)));
  233. dev_err(i2c->dev,
  234. "I2C register:\nIO_CONFIG %x\nHS %x\n",
  235. (i2c_readw(i2c, OFFSET_IO_CONFIG)),
  236. (i2c_readw(i2c, OFFSET_HS)));
  237. dev_err(i2c->dev,
  238. "I2C register:\nDEBUGSTAT %x\nEXT_CONF %x\nPATH_DIR %x\n",
  239. (i2c_readw(i2c, OFFSET_DEBUGSTAT)),
  240. (i2c_readw(i2c, OFFSET_EXT_CONF)),
  241. (i2c_readw(i2c, OFFSET_PATH_DIR)));
  242. }
  243. void i2c_dump_info(struct mt_i2c *i2c)
  244. {
  245. /* I2CFUC(); */
  246. /* int val=0; */
  247. pr_err("i2c_dump_info ++++++++++++++++++++++++++++++++++++++++++\n");
  248. pr_err("I2C structure:\n"
  249. I2CTAG "Clk=%d,Id=%d,Op=%x,Irq_stat=%x\n"
  250. I2CTAG "Trans_len=%x,Trans_num=%x,Trans_auxlen=%x,speed=%d\n"
  251. I2CTAG "Trans_stop=%u\n",
  252. 15600, i2c->id, i2c->op, i2c->irq_stat,
  253. i2c->msg_len, 1, i2c->msg_aux_len, i2c->speed_hz, i2c->trans_stop);
  254. pr_err("base address 0x%p\n", i2c->base);
  255. pr_err("I2C register:\n"
  256. I2CTAG "SLAVE_ADDR=%x,INTR_MASK=%x,INTR_STAT=%x,CONTROL=%x,TRANSFER_LEN=%x\n"
  257. I2CTAG "TRANSAC_LEN=%x,DELAY_LEN=%x,TIMING=%x,START=%x,FIFO_STAT=%x\n"
  258. I2CTAG "IO_CONFIG=%x,HS=%x,DCM_EN=%x,DEBUGSTAT=%x,EXT_CONF=%x,TRANSFER_LEN_AUX=%x\n",
  259. (i2c_readw(i2c, OFFSET_SLAVE_ADDR)),
  260. (i2c_readw(i2c, OFFSET_INTR_MASK)),
  261. (i2c_readw(i2c, OFFSET_INTR_STAT)),
  262. (i2c_readw(i2c, OFFSET_CONTROL)),
  263. (i2c_readw(i2c, OFFSET_TRANSFER_LEN)),
  264. (i2c_readw(i2c, OFFSET_TRANSAC_LEN)),
  265. (i2c_readw(i2c, OFFSET_DELAY_LEN)),
  266. (i2c_readw(i2c, OFFSET_TIMING)),
  267. (i2c_readw(i2c, OFFSET_START)),
  268. (i2c_readw(i2c, OFFSET_FIFO_STAT)),
  269. (i2c_readw(i2c, OFFSET_IO_CONFIG)),
  270. (i2c_readw(i2c, OFFSET_HS)),
  271. (i2c_readw(i2c, OFFSET_DCM_EN)),
  272. (i2c_readw(i2c, OFFSET_DEBUGSTAT)),
  273. (i2c_readw(i2c, OFFSET_EXT_CONF)), (i2c_readw(i2c, OFFSET_TRANSFER_LEN_AUX)));
  274. pr_err("i2c_dump_info ------------------------------------------\n");
  275. /*
  276. I2CLOG("before enable DMA register(0x%ld):\n"
  277. I2CTAG "INT_FLAG=%x,INT_EN=%x,EN=%x,RST=%x,\n"
  278. I2CTAG "STOP=%x,FLUSH=%x,CON=%x,TX_MEM_ADDR=%x, RX_MEM_ADDR=%x\n"
  279. I2CTAG "TX_LEN=%x,RX_LEN=%x,INT_BUF_SIZE=%x,DEBUG_STATUS=%x\n",
  280. g_dma_data[i2c->id].base,
  281. g_dma_data[i2c->id].int_flag,
  282. g_dma_data[i2c->id].int_en,
  283. g_dma_data[i2c->id].en,
  284. g_dma_data[i2c->id].rst,
  285. g_dma_data[i2c->id].stop,
  286. g_dma_data[i2c->id].flush,
  287. g_dma_data[i2c->id].con,
  288. g_dma_data[i2c->id].tx_mem_addr,
  289. g_dma_data[i2c->id].tx_mem_addr,
  290. g_dma_data[i2c->id].tx_len,
  291. g_dma_data[i2c->id].rx_len,
  292. g_dma_data[i2c->id].int_buf_size, g_dma_data[i2c->id].debug_sta);
  293. I2CLOG("DMA register(0x%p):\n"
  294. I2CTAG "INT_FLAG=%x,INT_EN=%x,EN=%x,RST=%x,\n"
  295. I2CTAG "STOP=%x,FLUSH=%x,CON=%x,TX_MEM_ADDR=%x, RX_MEM_ADDR=%x\n"
  296. I2CTAG "TX_LEN=%x,RX_LEN=%x,INT_BUF_SIZE=%x,DEBUG_STATUS=%x\n",
  297. i2c->pdmabase,
  298. (__raw_readl((void *)i2c->pdmabase + OFFSET_INT_FLAG)),
  299. (__raw_readl((void *)i2c->pdmabase + OFFSET_INT_EN)),
  300. (__raw_readl((void *)i2c->pdmabase + OFFSET_EN)),
  301. (__raw_readl((void *)i2c->pdmabase + OFFSET_RST)),
  302. (__raw_readl((void *)i2c->pdmabase + OFFSET_STOP)),
  303. (__raw_readl((void *)i2c->pdmabase + OFFSET_FLUSH)),
  304. (__raw_readl((void *)i2c->pdmabase + OFFSET_CON)),
  305. (__raw_readl((void *)i2c->pdmabase + OFFSET_TX_MEM_ADDR)),
  306. (__raw_readl((void *)i2c->pdmabase + OFFSET_RX_MEM_ADDR)),
  307. (__raw_readl((void *)i2c->pdmabase + OFFSET_TX_LEN)),
  308. (__raw_readl((void *)i2c->pdmabase + OFFSET_RX_LEN)),
  309. (__raw_readl((void *)i2c->pdmabase + OFFSET_INT_BUF_SIZE)),
  310. (__raw_readl((void *)i2c->pdmabase + OFFSET_DEBUG_STA)));
  311. */
  312. }
  313. #else
  314. void i2c_dump_info(struct mt_i2c *i2c)
  315. {
  316. }
  317. #endif
  318. static int mt_i2c_do_transfer(struct mt_i2c *i2c)
  319. {
  320. u16 addr_reg;
  321. u16 control_reg;
  322. int tmo = i2c->adap.timeout;
  323. unsigned int speed_hz;
  324. bool isDMA = false;
  325. int data_size;
  326. u8 *ptr;
  327. int ret;
  328. i2c->trans_stop = false;
  329. i2c->irq_stat = 0;
  330. if (i2c->msg_len > 8 || i2c->msg_aux_len > 8)
  331. isDMA = true;
  332. if (i2c->ext_data.isEnable && i2c->ext_data.timing)
  333. speed_hz = i2c->ext_data.timing;
  334. else
  335. speed_hz = i2c->speed_hz;
  336. ret = i2c_set_speed(i2c, 156000000 / i2c->clk_src_div);
  337. if (ret) {
  338. dev_err(i2c->dev, "Failed to set the speed\n");
  339. return -EINVAL;
  340. }
  341. /* If use i2c pin from PMIC mt6397 side, need set PATH_DIR first */
  342. if (i2c->have_pmic)
  343. i2c_writew(I2C_CONTROL_WRAPPER, i2c, OFFSET_PATH_DIR);
  344. control_reg = I2C_CONTROL_ACKERR_DET_EN | I2C_CONTROL_CLK_EXT_EN;
  345. if (isDMA == true) /* DMA */
  346. control_reg |= I2C_CONTROL_DMA_EN;
  347. if (speed_hz > 400000)
  348. control_reg |= I2C_CONTROL_RS;
  349. if (i2c->op == I2C_MASTER_WRRD)
  350. control_reg |= I2C_CONTROL_DIR_CHANGE | I2C_CONTROL_RS;
  351. i2c_writew(control_reg, i2c, OFFSET_CONTROL);
  352. /* set start condition */
  353. if (speed_hz <= 100000)
  354. i2c_writew(I2C_ST_START_CON, i2c, OFFSET_EXT_CONF);
  355. else
  356. i2c_writew(I2C_FS_START_CON, i2c, OFFSET_EXT_CONF);
  357. if (~control_reg & I2C_CONTROL_RS)
  358. i2c_writew(I2C_DELAY_LEN, i2c, OFFSET_DELAY_LEN);
  359. addr_reg = i2c->addr << 1;
  360. if (i2c->op == I2C_MASTER_RD)
  361. addr_reg |= 0x1;
  362. i2c_writew(addr_reg, i2c, OFFSET_SLAVE_ADDR);
  363. /* Clear interrupt status */
  364. i2c_writew(I2C_HS_NACKERR | I2C_ACKERR | I2C_TRANSAC_COMP,
  365. i2c, OFFSET_INTR_STAT);
  366. i2c_writew(I2C_FIFO_ADDR_CLR, i2c, OFFSET_FIFO_ADDR_CLR);
  367. /* Enable interrupt */
  368. i2c_writew(I2C_HS_NACKERR | I2C_ACKERR | I2C_TRANSAC_COMP,
  369. i2c, OFFSET_INTR_MASK);
  370. /* Set transfer and transaction len */
  371. if (i2c->op == I2C_MASTER_WRRD) {
  372. if (i2c->id != 6) {
  373. i2c_writew(i2c->msg_len, i2c, OFFSET_TRANSFER_LEN);
  374. i2c_writew(i2c->msg_aux_len, i2c, OFFSET_TRANSFER_LEN_AUX);
  375. } else {
  376. i2c_writew(i2c->msg_len & 0xFF | (i2c->msg_aux_len<<8) & 0x1F00,
  377. i2c, OFFSET_TRANSFER_LEN);
  378. }
  379. i2c_writew(0x02, i2c, OFFSET_TRANSAC_LEN);
  380. } else {
  381. i2c_writew(i2c->msg_len, i2c, OFFSET_TRANSFER_LEN);
  382. i2c_writew(0x01, i2c, OFFSET_TRANSAC_LEN);
  383. }
  384. /* Prepare buffer data to start transfer */
  385. if (isDMA == true) {
  386. if (i2c->op == I2C_MASTER_RD) {
  387. i2c_writel_dma(I2C_DMA_INT_FLAG_NONE, i2c, OFFSET_INT_FLAG);
  388. i2c_writel_dma(I2C_DMA_CON_RX, i2c, OFFSET_CON);
  389. i2c_writel_dma((u32)i2c->dma_buf.paddr, i2c, OFFSET_RX_MEM_ADDR);
  390. i2c_writel_dma(i2c->msg_len, i2c, OFFSET_RX_LEN);
  391. } else if (i2c->op == I2C_MASTER_WR) {
  392. i2c_writel_dma(I2C_DMA_INT_FLAG_NONE, i2c, OFFSET_INT_FLAG);
  393. i2c_writel_dma(I2C_DMA_CON_TX, i2c, OFFSET_CON);
  394. i2c_writel_dma((u32)i2c->dma_buf.paddr, i2c, OFFSET_TX_MEM_ADDR);
  395. i2c_writel_dma(i2c->msg_len, i2c, OFFSET_TX_LEN);
  396. } else {
  397. i2c_writel_dma(0x0000, i2c, OFFSET_INT_FLAG);
  398. i2c_writel_dma(0x0000, i2c, OFFSET_CON);
  399. i2c_writel_dma((u32)i2c->dma_buf.paddr, i2c, OFFSET_TX_MEM_ADDR);
  400. i2c_writel_dma((u32)i2c->dma_buf.paddr, i2c,
  401. OFFSET_RX_MEM_ADDR);
  402. i2c_writel_dma(i2c->msg_len, i2c, OFFSET_TX_LEN);
  403. i2c_writel_dma(i2c->msg_aux_len, i2c, OFFSET_RX_LEN);
  404. }
  405. /* flush before sending DMA start */
  406. mb();
  407. i2c_writel_dma(I2C_DMA_START_EN, i2c, OFFSET_EN);
  408. } else {
  409. if (i2c->op != I2C_MASTER_RD) {
  410. data_size = i2c->msg_len;
  411. ptr = i2c->dma_buf.vaddr;
  412. while (data_size--) {
  413. i2c_writew(*ptr, i2c, OFFSET_DATA_PORT);
  414. ptr++;
  415. }
  416. }
  417. }
  418. /* flush before sending start */
  419. mb();
  420. if (!i2c->ext_data.isEnable || !i2c->ext_data.is_hw_trig)
  421. i2c_writew(I2C_TRANSAC_START, i2c, OFFSET_START);
  422. else
  423. dev_err(i2c->dev, "I2C hw trig.\n");
  424. tmo = wait_event_timeout(i2c->wait, i2c->trans_stop, tmo);
  425. if (tmo == 0) {
  426. dev_err(i2c->dev, "addr: %x, transfer timeout\n", i2c->addr);
  427. i2c_dump_info(i2c);
  428. mt_i2c_init_hw(i2c);
  429. return -ETIMEDOUT;
  430. }
  431. if (i2c->irq_stat & (I2C_HS_NACKERR | I2C_ACKERR)) {
  432. dev_err(i2c->dev, "addr: %x, transfer ACK error\n", i2c->addr);
  433. mt_i2c_init_hw(i2c);
  434. i2c_dump_info(i2c);
  435. return -EREMOTEIO;
  436. }
  437. if (i2c->op != I2C_MASTER_WR && isDMA == false) {
  438. data_size = (i2c_readw(i2c, OFFSET_FIFO_STAT) >> 4) & 0x000F;
  439. ptr = i2c->dma_buf.vaddr;
  440. while (data_size--) {
  441. *ptr = i2c_readw(i2c, OFFSET_DATA_PORT);
  442. /* I2CLOG("addr %x read byte = 0x%x\n", i2c->addr, *ptr); */
  443. ptr++;
  444. }
  445. }
  446. dev_dbg(i2c->dev, "i2c transfer done.\n");
  447. return 0;
  448. }
  449. static inline void mt_i2c_copy_to_dma(struct mt_i2c *i2c, struct i2c_msg *msg)
  450. {
  451. /* if the operate is write, need to copy the data to DMA memory */
  452. if (!(msg->flags & I2C_M_RD))
  453. memcpy(i2c->dma_buf.vaddr, msg->buf, msg->len);
  454. }
  455. static inline void mt_i2c_copy_from_dma(struct mt_i2c *i2c,
  456. struct i2c_msg *msg)
  457. {
  458. /* if the operate is read, need to copy the data from DMA memory */
  459. if (msg->flags & I2C_M_RD)
  460. memcpy(msg->buf, i2c->dma_buf.vaddr, msg->len);
  461. }
  462. /*
  463. * In MTK platform the STOP will be issued after each
  464. * message was transferred which is not flow the clarify
  465. * for i2c_transfer(), several I2C devices tolerate the STOP,
  466. * but some device need Repeat-Start and do not compatible with STOP
  467. * MTK platform has WRRD mode which can write then read with
  468. * Repeat-Start between two message, so we combined two
  469. * messages into one transaction.
  470. * The max read length is 4096
  471. */
  472. static bool mt_i2c_should_combine(struct i2c_msg *msg)
  473. {
  474. struct i2c_msg *next_msg = msg + 1;
  475. if ((next_msg->len < 4096) &&
  476. msg->addr == next_msg->addr &&
  477. !(msg->flags & I2C_M_RD) &&
  478. (next_msg->flags & I2C_M_RD) == I2C_M_RD) {
  479. return true;
  480. }
  481. return false;
  482. }
  483. static int __mt_i2c_transfer(struct mt_i2c *i2c,
  484. struct i2c_msg msgs[], int num)
  485. {
  486. int ret;
  487. int left_num = num;
  488. ret = mt_i2c_clock_enable(i2c);
  489. if (ret)
  490. return ret;
  491. while (left_num--) {
  492. /* In MTK platform the max transfer number is 4096 */
  493. if (msgs->len > MAX_DMA_TRANS_SIZE) {
  494. dev_dbg(i2c->dev,
  495. " message data length is more than 255\n");
  496. ret = -EINVAL;
  497. goto err_exit;
  498. }
  499. if (msgs->addr == 0) {
  500. dev_dbg(i2c->dev, " addr is invalid.\n");
  501. ret = -EINVAL;
  502. goto err_exit;
  503. }
  504. if (msgs->buf == NULL) {
  505. dev_dbg(i2c->dev, " data buffer is NULL.\n");
  506. ret = -EINVAL;
  507. goto err_exit;
  508. }
  509. i2c->addr = msgs->addr;
  510. i2c->msg_len = msgs->len;
  511. i2c->msg_buf = msgs->buf;
  512. i2c->msg_aux_len = 0;
  513. if (msgs->flags & I2C_M_RD)
  514. i2c->op = I2C_MASTER_RD;
  515. else
  516. i2c->op = I2C_MASTER_WR;
  517. /* combined two messages into one transaction */
  518. if (left_num >= 1 && mt_i2c_should_combine(msgs)) {
  519. i2c->msg_aux_len = (msgs + 1)->len;
  520. i2c->op = I2C_MASTER_WRRD;
  521. left_num--;
  522. }
  523. /*
  524. * always use DMA mode.
  525. * 1st when write need copy the data of message to dma memory
  526. * 2nd when read need copy the DMA data to the message buffer.
  527. * The length should be less than 255.
  528. */
  529. mt_i2c_copy_to_dma(i2c, msgs);
  530. i2c->msg_buf = (u8 *)i2c->dma_buf.paddr;
  531. /* Use HW semaphore to protect mt6313 access between AP and SPM */
  532. if (i2c_get_semaphore(i2c) != 0)
  533. return -EBUSY;
  534. ret = mt_i2c_do_transfer(i2c);
  535. /* Use HW semaphore to protect mt6313 access between AP and SPM */
  536. if (i2c_release_semaphore(i2c) != 0)
  537. ret = -EBUSY;
  538. if (ret < 0)
  539. goto err_exit;
  540. if (i2c->op == I2C_MASTER_WRRD)
  541. mt_i2c_copy_from_dma(i2c, msgs + 1);
  542. else
  543. mt_i2c_copy_from_dma(i2c, msgs);
  544. msgs++;
  545. /* after combined two messages so we need ignore one */
  546. if (left_num > 0 && i2c->op == I2C_MASTER_WRRD)
  547. msgs++;
  548. }
  549. /* the return value is number of executed messages */
  550. ret = num;
  551. err_exit:
  552. mt_i2c_clock_disable(i2c);
  553. return ret;
  554. }
  555. static int mt_i2c_transfer(struct i2c_adapter *adap,
  556. struct i2c_msg msgs[], int num)
  557. {
  558. int ret;
  559. struct mt_i2c *i2c = i2c_get_adapdata(adap);
  560. mutex_lock(&i2c->i2c_mutex);
  561. ret = __mt_i2c_transfer(i2c, msgs, num);
  562. mutex_unlock(&i2c->i2c_mutex);
  563. return ret;
  564. }
  565. static void mt_i2c_parse_extension(struct mt_i2c_ext *pext, u32 ext_flag, u32 timing)
  566. {
  567. if (ext_flag & I2C_HWTRIG_FLAG)
  568. pext->is_hw_trig = true;
  569. if (timing)
  570. pext->timing = timing;
  571. }
  572. int mtk_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num,
  573. u32 ext_flag, u32 timing)
  574. {
  575. int ret;
  576. struct mt_i2c *i2c = i2c_get_adapdata(adap);
  577. mutex_lock(&i2c->i2c_mutex);
  578. i2c->ext_data.isEnable = true;
  579. mt_i2c_parse_extension(&i2c->ext_data, ext_flag, timing);
  580. ret = __mt_i2c_transfer(i2c, msgs, num);
  581. i2c->ext_data.isEnable = false;
  582. mutex_unlock(&i2c->i2c_mutex);
  583. return ret;
  584. }
  585. EXPORT_SYMBOL(mtk_i2c_transfer);
  586. static irqreturn_t mt_i2c_irq(int irqno, void *dev_id)
  587. {
  588. struct mt_i2c *i2c = dev_id;
  589. /* Clear interrupt mask */
  590. i2c_writew(~(I2C_HS_NACKERR | I2C_ACKERR | I2C_TRANSAC_COMP),
  591. i2c, OFFSET_INTR_MASK);
  592. i2c->irq_stat = i2c_readw(i2c, OFFSET_INTR_STAT);
  593. i2c_writew(I2C_HS_NACKERR | I2C_ACKERR | I2C_TRANSAC_COMP,
  594. i2c, OFFSET_INTR_STAT);
  595. i2c->trans_stop = true;
  596. wake_up(&i2c->wait);
  597. return IRQ_HANDLED;
  598. }
  599. static u32 mt_i2c_functionality(struct i2c_adapter *adap)
  600. {
  601. return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SMBUS_EMUL;
  602. }
  603. static const struct i2c_algorithm mt_i2c_algorithm = {
  604. .master_xfer = mt_i2c_transfer,
  605. .functionality = mt_i2c_functionality,
  606. };
  607. static int mt_i2c_parse_dt(struct device_node *np, struct mt_i2c *i2c)
  608. {
  609. i2c->speed_hz = I2C_DEFAUT_SPEED;
  610. of_property_read_u32(np, "clock-frequency", &i2c->speed_hz);
  611. of_property_read_u32(np, "clock-div", &i2c->clk_src_div);
  612. of_property_read_u32(np, "id", (u32 *)&i2c->id);
  613. i2c->have_pmic = of_property_read_bool(np, "mediatek,have-pmic");
  614. i2c->have_dcm = of_property_read_bool(np, "mediatek,have-dcm");
  615. i2c->use_push_pull = of_property_read_bool(np, "mediatek,use-push-pull");
  616. pr_err("[I2C] id : %d, freq : %d, div : %d.\n", i2c->id, i2c->speed_hz, i2c->clk_src_div);
  617. if (i2c->clk_src_div == 0)
  618. return -EINVAL;
  619. return 0;
  620. }
  621. static int mt_i2c_probe(struct platform_device *pdev)
  622. {
  623. int ret = 0;
  624. struct mt_i2c *i2c;
  625. unsigned int clk_src_in_hz;
  626. struct resource *res;
  627. i2c = devm_kzalloc(&pdev->dev, sizeof(struct mt_i2c), GFP_KERNEL);
  628. if (i2c == NULL)
  629. return -ENOMEM;
  630. ret = mt_i2c_parse_dt(pdev->dev.of_node, i2c);
  631. if (ret)
  632. return -EINVAL;
  633. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  634. i2c->base = devm_ioremap_resource(&pdev->dev, res);
  635. if (IS_ERR(i2c->base))
  636. return PTR_ERR(i2c->base);
  637. res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
  638. i2c->pdmabase = devm_ioremap_resource(&pdev->dev, res);
  639. if (IS_ERR(i2c->pdmabase))
  640. return PTR_ERR(i2c->pdmabase);
  641. i2c->irqnr = platform_get_irq(pdev, 0);
  642. if (i2c->irqnr <= 0)
  643. return -EINVAL;
  644. ret = devm_request_irq(&pdev->dev, i2c->irqnr, mt_i2c_irq,
  645. IRQF_TRIGGER_NONE, I2C_DRV_NAME, i2c);
  646. if (ret < 0) {
  647. dev_err(&pdev->dev,
  648. "Request I2C IRQ %d fail\n", i2c->irqnr);
  649. return ret;
  650. }
  651. i2c->adap.dev.of_node = pdev->dev.of_node;
  652. i2c->dev = &i2c->adap.dev;
  653. i2c->adap.dev.parent = &pdev->dev;
  654. i2c->adap.owner = THIS_MODULE;
  655. i2c->adap.algo = &mt_i2c_algorithm;
  656. i2c->adap.algo_data = NULL;
  657. i2c->adap.timeout = 2 * HZ;
  658. i2c->adap.retries = 1;
  659. i2c->adap.nr = i2c->id;
  660. i2c->clk_main = devm_clk_get(&pdev->dev, "main");
  661. if (IS_ERR(i2c->clk_main)) {
  662. dev_err(&pdev->dev, "cannot get main clock\n");
  663. return PTR_ERR(i2c->clk_main);
  664. }
  665. i2c->clk_dma = devm_clk_get(&pdev->dev, "dma");
  666. if (IS_ERR(i2c->clk_dma)) {
  667. dev_err(&pdev->dev, "cannot get dma clock\n");
  668. return PTR_ERR(i2c->clk_dma);
  669. }
  670. i2c->clk_arb = devm_clk_get(&pdev->dev, "arb");
  671. if (IS_ERR(i2c->clk_arb))
  672. i2c->clk_arb = NULL;
  673. else
  674. dev_dbg(&pdev->dev, "i2c%d has the relevant arbitrator clk.\n", i2c->id);
  675. if (i2c->have_pmic) {
  676. i2c->clk_pmic = devm_clk_get(&pdev->dev, "pmic");
  677. if (IS_ERR(i2c->clk_pmic)) {
  678. dev_err(&pdev->dev, "cannot get pmic clock\n");
  679. return PTR_ERR(i2c->clk_pmic);
  680. }
  681. clk_src_in_hz = clk_get_rate(i2c->clk_pmic) / i2c->clk_src_div;
  682. } else {
  683. clk_src_in_hz = clk_get_rate(i2c->clk_main) / i2c->clk_src_div;
  684. }
  685. dev_dbg(&pdev->dev, "clock source %p,clock src frequency %d\n",
  686. i2c->clk_main, clk_src_in_hz);
  687. strlcpy(i2c->adap.name, I2C_DRV_NAME, sizeof(i2c->adap.name));
  688. init_waitqueue_head(&i2c->wait);
  689. mutex_init(&i2c->i2c_mutex);
  690. ret = i2c_set_speed(i2c, clk_src_in_hz);
  691. if (ret) {
  692. dev_err(&pdev->dev, "Failed to set the speed\n");
  693. return -EINVAL;
  694. }
  695. ret = mt_i2c_clock_enable(i2c);
  696. if (ret) {
  697. dev_err(&pdev->dev, "clock enable failed!\n");
  698. return ret;
  699. }
  700. mt_i2c_init_hw(i2c);
  701. mt_i2c_clock_disable(i2c);
  702. i2c->dma_buf.vaddr = dma_alloc_coherent(&pdev->dev,
  703. PAGE_SIZE, &i2c->dma_buf.paddr, GFP_KERNEL);
  704. if (i2c->dma_buf.vaddr == NULL) {
  705. dev_err(&pdev->dev, "dma_alloc_coherent fail\n");
  706. return -ENOMEM;
  707. }
  708. i2c_set_adapdata(&i2c->adap, i2c);
  709. /* ret = i2c_add_adapter(&i2c->adap); */
  710. ret = i2c_add_numbered_adapter(&i2c->adap);
  711. if (ret) {
  712. dev_err(&pdev->dev, "Failed to add i2c bus to i2c core\n");
  713. free_i2c_dma_bufs(i2c);
  714. return ret;
  715. }
  716. platform_set_drvdata(pdev, i2c);
  717. return 0;
  718. }
  719. static int mt_i2c_remove(struct platform_device *pdev)
  720. {
  721. struct mt_i2c *i2c = platform_get_drvdata(pdev);
  722. i2c_del_adapter(&i2c->adap);
  723. free_i2c_dma_bufs(i2c);
  724. platform_set_drvdata(pdev, NULL);
  725. return 0;
  726. }
  727. static const struct of_device_id mtk_i2c_of_match[] = {
  728. { .compatible = "mediatek,mt6735-i2c", },
  729. { .compatible = "mediatek,mt6797-i2c", },
  730. {},
  731. };
  732. MODULE_DEVICE_TABLE(of, mt_i2c_match);
  733. static struct platform_driver mt_i2c_driver = {
  734. .probe = mt_i2c_probe,
  735. .remove = mt_i2c_remove,
  736. .driver = {
  737. .name = I2C_DRV_NAME,
  738. .owner = THIS_MODULE,
  739. .of_match_table = of_match_ptr(mtk_i2c_of_match),
  740. },
  741. };
  742. #ifdef CONFIG_MTK_I2C_ARBITRATION
  743. static s32 enable_arbitration(void)
  744. {
  745. struct device_node *pericfg_node;
  746. void __iomem *pericfg_base;
  747. pericfg_node = of_find_compatible_node(NULL, NULL, "mediatek,pericfg");
  748. if (!pericfg_node) {
  749. pr_err("Cannot find pericfg node\n");
  750. return -ENODEV;
  751. }
  752. pericfg_base = of_iomap(pericfg_node, 0);
  753. if (!pericfg_base) {
  754. pr_err("pericfg iomap failed\n");
  755. return -ENOMEM;
  756. }
  757. /* Enable the I2C arbitration */
  758. writew(0x3, pericfg_base + OFFSET_PERI_I2C_MODE_ENABLE);
  759. return 0;
  760. }
  761. #endif
  762. static s32 __init mt_i2c_init(void)
  763. {
  764. #ifdef CONFIG_MTK_I2C_ARBITRATION
  765. int ret;
  766. ret = enable_arbitration();
  767. if (ret) {
  768. pr_err("Cannot enalbe arbitration.\n");
  769. return ret;
  770. }
  771. #endif
  772. pr_err(" mt_i2c_init driver as platform device\n");
  773. return platform_driver_register(&mt_i2c_driver);
  774. }
  775. static void __exit mt_i2c_exit(void)
  776. {
  777. platform_driver_unregister(&mt_i2c_driver);
  778. }
  779. module_init(mt_i2c_init);
  780. module_exit(mt_i2c_exit);
  781. /* module_platform_driver(mt_i2c_driver); */
  782. MODULE_LICENSE("GPL");
  783. MODULE_DESCRIPTION("MediaTek I2C Bus Driver");
  784. MODULE_AUTHOR("Xudong Chen <xudong.chen@mediatek.com>");