i2c-mt65xx.c 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2014 MediaTek Inc.
  4. * Author: Xudong Chen <[email protected]>
  5. */
  6. #include <linux/clk.h>
  7. #include <linux/completion.h>
  8. #include <linux/delay.h>
  9. #include <linux/device.h>
  10. #include <linux/dma-mapping.h>
  11. #include <linux/err.h>
  12. #include <linux/errno.h>
  13. #include <linux/i2c.h>
  14. #include <linux/init.h>
  15. #include <linux/interrupt.h>
  16. #include <linux/io.h>
  17. #include <linux/iopoll.h>
  18. #include <linux/kernel.h>
  19. #include <linux/mm.h>
  20. #include <linux/module.h>
  21. #include <linux/of_address.h>
  22. #include <linux/of_device.h>
  23. #include <linux/of_irq.h>
  24. #include <linux/platform_device.h>
  25. #include <linux/scatterlist.h>
  26. #include <linux/sched.h>
  27. #include <linux/slab.h>
  28. #define I2C_RS_TRANSFER (1 << 4)
  29. #define I2C_ARB_LOST (1 << 3)
  30. #define I2C_HS_NACKERR (1 << 2)
  31. #define I2C_ACKERR (1 << 1)
  32. #define I2C_TRANSAC_COMP (1 << 0)
  33. #define I2C_TRANSAC_START (1 << 0)
  34. #define I2C_RS_MUL_CNFG (1 << 15)
  35. #define I2C_RS_MUL_TRIG (1 << 14)
  36. #define I2C_DCM_DISABLE 0x0000
  37. #define I2C_IO_CONFIG_OPEN_DRAIN 0x0003
  38. #define I2C_IO_CONFIG_PUSH_PULL 0x0000
  39. #define I2C_SOFT_RST 0x0001
  40. #define I2C_HANDSHAKE_RST 0x0020
  41. #define I2C_FIFO_ADDR_CLR 0x0001
  42. #define I2C_DELAY_LEN 0x0002
  43. #define I2C_ST_START_CON 0x8001
  44. #define I2C_FS_START_CON 0x1800
  45. #define I2C_TIME_CLR_VALUE 0x0000
  46. #define I2C_TIME_DEFAULT_VALUE 0x0003
  47. #define I2C_WRRD_TRANAC_VALUE 0x0002
  48. #define I2C_RD_TRANAC_VALUE 0x0001
  49. #define I2C_SCL_MIS_COMP_VALUE 0x0000
  50. #define I2C_CHN_CLR_FLAG 0x0000
  51. #define I2C_RELIABILITY 0x0010
  52. #define I2C_DMAACK_ENABLE 0x0008
  53. #define I2C_DMA_CON_TX 0x0000
  54. #define I2C_DMA_CON_RX 0x0001
  55. #define I2C_DMA_ASYNC_MODE 0x0004
  56. #define I2C_DMA_SKIP_CONFIG 0x0010
  57. #define I2C_DMA_DIR_CHANGE 0x0200
  58. #define I2C_DMA_START_EN 0x0001
  59. #define I2C_DMA_INT_FLAG_NONE 0x0000
  60. #define I2C_DMA_CLR_FLAG 0x0000
  61. #define I2C_DMA_WARM_RST 0x0001
  62. #define I2C_DMA_HARD_RST 0x0002
  63. #define I2C_DMA_HANDSHAKE_RST 0x0004
  64. #define MAX_SAMPLE_CNT_DIV 8
  65. #define MAX_STEP_CNT_DIV 64
  66. #define MAX_CLOCK_DIV_8BITS 256
  67. #define MAX_CLOCK_DIV_5BITS 32
  68. #define MAX_HS_STEP_CNT_DIV 8
  69. #define I2C_STANDARD_MODE_BUFFER (1000 / 3)
  70. #define I2C_FAST_MODE_BUFFER (300 / 3)
  71. #define I2C_FAST_MODE_PLUS_BUFFER (20 / 3)
  72. #define I2C_CONTROL_RS (0x1 << 1)
  73. #define I2C_CONTROL_DMA_EN (0x1 << 2)
  74. #define I2C_CONTROL_CLK_EXT_EN (0x1 << 3)
  75. #define I2C_CONTROL_DIR_CHANGE (0x1 << 4)
  76. #define I2C_CONTROL_ACKERR_DET_EN (0x1 << 5)
  77. #define I2C_CONTROL_TRANSFER_LEN_CHANGE (0x1 << 6)
  78. #define I2C_CONTROL_DMAACK_EN (0x1 << 8)
  79. #define I2C_CONTROL_ASYNC_MODE (0x1 << 9)
  80. #define I2C_CONTROL_WRAPPER (0x1 << 0)
  81. #define I2C_DRV_NAME "i2c-mt65xx"
  82. /**
  83. * enum i2c_mt65xx_clks - Clocks enumeration for MT65XX I2C
  84. *
  85. * @I2C_MT65XX_CLK_MAIN: main clock for i2c bus
  86. * @I2C_MT65XX_CLK_DMA: DMA clock for i2c via DMA
  87. * @I2C_MT65XX_CLK_PMIC: PMIC clock for i2c from PMIC
  88. * @I2C_MT65XX_CLK_ARB: Arbitrator clock for i2c
  89. * @I2C_MT65XX_CLK_MAX: Number of supported clocks
  90. */
  91. enum i2c_mt65xx_clks {
  92. I2C_MT65XX_CLK_MAIN = 0,
  93. I2C_MT65XX_CLK_DMA,
  94. I2C_MT65XX_CLK_PMIC,
  95. I2C_MT65XX_CLK_ARB,
  96. I2C_MT65XX_CLK_MAX
  97. };
  98. static const char * const i2c_mt65xx_clk_ids[I2C_MT65XX_CLK_MAX] = {
  99. "main", "dma", "pmic", "arb"
  100. };
  101. enum DMA_REGS_OFFSET {
  102. OFFSET_INT_FLAG = 0x0,
  103. OFFSET_INT_EN = 0x04,
  104. OFFSET_EN = 0x08,
  105. OFFSET_RST = 0x0c,
  106. OFFSET_CON = 0x18,
  107. OFFSET_TX_MEM_ADDR = 0x1c,
  108. OFFSET_RX_MEM_ADDR = 0x20,
  109. OFFSET_TX_LEN = 0x24,
  110. OFFSET_RX_LEN = 0x28,
  111. OFFSET_TX_4G_MODE = 0x54,
  112. OFFSET_RX_4G_MODE = 0x58,
  113. };
  114. enum i2c_trans_st_rs {
  115. I2C_TRANS_STOP = 0,
  116. I2C_TRANS_REPEATED_START,
  117. };
  118. enum mtk_trans_op {
  119. I2C_MASTER_WR = 1,
  120. I2C_MASTER_RD,
  121. I2C_MASTER_WRRD,
  122. };
  123. enum I2C_REGS_OFFSET {
  124. OFFSET_DATA_PORT,
  125. OFFSET_SLAVE_ADDR,
  126. OFFSET_INTR_MASK,
  127. OFFSET_INTR_STAT,
  128. OFFSET_CONTROL,
  129. OFFSET_TRANSFER_LEN,
  130. OFFSET_TRANSAC_LEN,
  131. OFFSET_DELAY_LEN,
  132. OFFSET_TIMING,
  133. OFFSET_START,
  134. OFFSET_EXT_CONF,
  135. OFFSET_FIFO_STAT,
  136. OFFSET_FIFO_THRESH,
  137. OFFSET_FIFO_ADDR_CLR,
  138. OFFSET_IO_CONFIG,
  139. OFFSET_RSV_DEBUG,
  140. OFFSET_HS,
  141. OFFSET_SOFTRESET,
  142. OFFSET_DCM_EN,
  143. OFFSET_MULTI_DMA,
  144. OFFSET_PATH_DIR,
  145. OFFSET_DEBUGSTAT,
  146. OFFSET_DEBUGCTRL,
  147. OFFSET_TRANSFER_LEN_AUX,
  148. OFFSET_CLOCK_DIV,
  149. OFFSET_LTIMING,
  150. OFFSET_SCL_HIGH_LOW_RATIO,
  151. OFFSET_HS_SCL_HIGH_LOW_RATIO,
  152. OFFSET_SCL_MIS_COMP_POINT,
  153. OFFSET_STA_STO_AC_TIMING,
  154. OFFSET_HS_STA_STO_AC_TIMING,
  155. OFFSET_SDA_TIMING,
  156. };
  157. static const u16 mt_i2c_regs_v1[] = {
  158. [OFFSET_DATA_PORT] = 0x0,
  159. [OFFSET_SLAVE_ADDR] = 0x4,
  160. [OFFSET_INTR_MASK] = 0x8,
  161. [OFFSET_INTR_STAT] = 0xc,
  162. [OFFSET_CONTROL] = 0x10,
  163. [OFFSET_TRANSFER_LEN] = 0x14,
  164. [OFFSET_TRANSAC_LEN] = 0x18,
  165. [OFFSET_DELAY_LEN] = 0x1c,
  166. [OFFSET_TIMING] = 0x20,
  167. [OFFSET_START] = 0x24,
  168. [OFFSET_EXT_CONF] = 0x28,
  169. [OFFSET_FIFO_STAT] = 0x30,
  170. [OFFSET_FIFO_THRESH] = 0x34,
  171. [OFFSET_FIFO_ADDR_CLR] = 0x38,
  172. [OFFSET_IO_CONFIG] = 0x40,
  173. [OFFSET_RSV_DEBUG] = 0x44,
  174. [OFFSET_HS] = 0x48,
  175. [OFFSET_SOFTRESET] = 0x50,
  176. [OFFSET_DCM_EN] = 0x54,
  177. [OFFSET_PATH_DIR] = 0x60,
  178. [OFFSET_DEBUGSTAT] = 0x64,
  179. [OFFSET_DEBUGCTRL] = 0x68,
  180. [OFFSET_TRANSFER_LEN_AUX] = 0x6c,
  181. [OFFSET_CLOCK_DIV] = 0x70,
  182. [OFFSET_SCL_HIGH_LOW_RATIO] = 0x74,
  183. [OFFSET_HS_SCL_HIGH_LOW_RATIO] = 0x78,
  184. [OFFSET_SCL_MIS_COMP_POINT] = 0x7C,
  185. [OFFSET_STA_STO_AC_TIMING] = 0x80,
  186. [OFFSET_HS_STA_STO_AC_TIMING] = 0x84,
  187. [OFFSET_SDA_TIMING] = 0x88,
  188. };
  189. static const u16 mt_i2c_regs_v2[] = {
  190. [OFFSET_DATA_PORT] = 0x0,
  191. [OFFSET_SLAVE_ADDR] = 0x4,
  192. [OFFSET_INTR_MASK] = 0x8,
  193. [OFFSET_INTR_STAT] = 0xc,
  194. [OFFSET_CONTROL] = 0x10,
  195. [OFFSET_TRANSFER_LEN] = 0x14,
  196. [OFFSET_TRANSAC_LEN] = 0x18,
  197. [OFFSET_DELAY_LEN] = 0x1c,
  198. [OFFSET_TIMING] = 0x20,
  199. [OFFSET_START] = 0x24,
  200. [OFFSET_EXT_CONF] = 0x28,
  201. [OFFSET_LTIMING] = 0x2c,
  202. [OFFSET_HS] = 0x30,
  203. [OFFSET_IO_CONFIG] = 0x34,
  204. [OFFSET_FIFO_ADDR_CLR] = 0x38,
  205. [OFFSET_SDA_TIMING] = 0x3c,
  206. [OFFSET_TRANSFER_LEN_AUX] = 0x44,
  207. [OFFSET_CLOCK_DIV] = 0x48,
  208. [OFFSET_SOFTRESET] = 0x50,
  209. [OFFSET_MULTI_DMA] = 0x8c,
  210. [OFFSET_SCL_MIS_COMP_POINT] = 0x90,
  211. [OFFSET_DEBUGSTAT] = 0xe4,
  212. [OFFSET_DEBUGCTRL] = 0xe8,
  213. [OFFSET_FIFO_STAT] = 0xf4,
  214. [OFFSET_FIFO_THRESH] = 0xf8,
  215. [OFFSET_DCM_EN] = 0xf88,
  216. };
  217. static const u16 mt_i2c_regs_v3[] = {
  218. [OFFSET_DATA_PORT] = 0x0,
  219. [OFFSET_INTR_MASK] = 0x8,
  220. [OFFSET_INTR_STAT] = 0xc,
  221. [OFFSET_CONTROL] = 0x10,
  222. [OFFSET_TRANSFER_LEN] = 0x14,
  223. [OFFSET_TRANSAC_LEN] = 0x18,
  224. [OFFSET_DELAY_LEN] = 0x1c,
  225. [OFFSET_TIMING] = 0x20,
  226. [OFFSET_START] = 0x24,
  227. [OFFSET_EXT_CONF] = 0x28,
  228. [OFFSET_LTIMING] = 0x2c,
  229. [OFFSET_HS] = 0x30,
  230. [OFFSET_IO_CONFIG] = 0x34,
  231. [OFFSET_FIFO_ADDR_CLR] = 0x38,
  232. [OFFSET_SDA_TIMING] = 0x3c,
  233. [OFFSET_TRANSFER_LEN_AUX] = 0x44,
  234. [OFFSET_CLOCK_DIV] = 0x48,
  235. [OFFSET_SOFTRESET] = 0x50,
  236. [OFFSET_MULTI_DMA] = 0x8c,
  237. [OFFSET_SCL_MIS_COMP_POINT] = 0x90,
  238. [OFFSET_SLAVE_ADDR] = 0x94,
  239. [OFFSET_DEBUGSTAT] = 0xe4,
  240. [OFFSET_DEBUGCTRL] = 0xe8,
  241. [OFFSET_FIFO_STAT] = 0xf4,
  242. [OFFSET_FIFO_THRESH] = 0xf8,
  243. [OFFSET_DCM_EN] = 0xf88,
  244. };
  245. struct mtk_i2c_compatible {
  246. const struct i2c_adapter_quirks *quirks;
  247. const u16 *regs;
  248. unsigned char pmic_i2c: 1;
  249. unsigned char dcm: 1;
  250. unsigned char auto_restart: 1;
  251. unsigned char aux_len_reg: 1;
  252. unsigned char timing_adjust: 1;
  253. unsigned char dma_sync: 1;
  254. unsigned char ltiming_adjust: 1;
  255. unsigned char apdma_sync: 1;
  256. unsigned char max_dma_support;
  257. };
  258. struct mtk_i2c_ac_timing {
  259. u16 htiming;
  260. u16 ltiming;
  261. u16 hs;
  262. u16 ext;
  263. u16 inter_clk_div;
  264. u16 scl_hl_ratio;
  265. u16 hs_scl_hl_ratio;
  266. u16 sta_stop;
  267. u16 hs_sta_stop;
  268. u16 sda_timing;
  269. };
  270. struct mtk_i2c {
  271. struct i2c_adapter adap; /* i2c host adapter */
  272. struct device *dev;
  273. struct completion msg_complete;
  274. struct i2c_timings timing_info;
  275. /* set in i2c probe */
  276. void __iomem *base; /* i2c base addr */
  277. void __iomem *pdmabase; /* dma base address*/
  278. struct clk_bulk_data clocks[I2C_MT65XX_CLK_MAX]; /* clocks for i2c */
  279. bool have_pmic; /* can use i2c pins from PMIC */
  280. bool use_push_pull; /* IO config push-pull mode */
  281. u16 irq_stat; /* interrupt status */
  282. unsigned int clk_src_div;
  283. unsigned int speed_hz; /* The speed in transfer */
  284. enum mtk_trans_op op;
  285. u16 timing_reg;
  286. u16 high_speed_reg;
  287. u16 ltiming_reg;
  288. unsigned char auto_restart;
  289. bool ignore_restart_irq;
  290. struct mtk_i2c_ac_timing ac_timing;
  291. const struct mtk_i2c_compatible *dev_comp;
  292. };
  293. /**
  294. * struct i2c_spec_values:
  295. * @min_low_ns: min LOW period of the SCL clock
  296. * @min_su_sta_ns: min set-up time for a repeated START condition
  297. * @max_hd_dat_ns: max data hold time
  298. * @min_su_dat_ns: min data set-up time
  299. */
  300. struct i2c_spec_values {
  301. unsigned int min_low_ns;
  302. unsigned int min_su_sta_ns;
  303. unsigned int max_hd_dat_ns;
  304. unsigned int min_su_dat_ns;
  305. };
  306. static const struct i2c_spec_values standard_mode_spec = {
  307. .min_low_ns = 4700 + I2C_STANDARD_MODE_BUFFER,
  308. .min_su_sta_ns = 4700 + I2C_STANDARD_MODE_BUFFER,
  309. .max_hd_dat_ns = 3450 - I2C_STANDARD_MODE_BUFFER,
  310. .min_su_dat_ns = 250 + I2C_STANDARD_MODE_BUFFER,
  311. };
  312. static const struct i2c_spec_values fast_mode_spec = {
  313. .min_low_ns = 1300 + I2C_FAST_MODE_BUFFER,
  314. .min_su_sta_ns = 600 + I2C_FAST_MODE_BUFFER,
  315. .max_hd_dat_ns = 900 - I2C_FAST_MODE_BUFFER,
  316. .min_su_dat_ns = 100 + I2C_FAST_MODE_BUFFER,
  317. };
  318. static const struct i2c_spec_values fast_mode_plus_spec = {
  319. .min_low_ns = 500 + I2C_FAST_MODE_PLUS_BUFFER,
  320. .min_su_sta_ns = 260 + I2C_FAST_MODE_PLUS_BUFFER,
  321. .max_hd_dat_ns = 400 - I2C_FAST_MODE_PLUS_BUFFER,
  322. .min_su_dat_ns = 50 + I2C_FAST_MODE_PLUS_BUFFER,
  323. };
  324. static const struct i2c_adapter_quirks mt6577_i2c_quirks = {
  325. .flags = I2C_AQ_COMB_WRITE_THEN_READ,
  326. .max_num_msgs = 1,
  327. .max_write_len = 255,
  328. .max_read_len = 255,
  329. .max_comb_1st_msg_len = 255,
  330. .max_comb_2nd_msg_len = 31,
  331. };
  332. static const struct i2c_adapter_quirks mt7622_i2c_quirks = {
  333. .max_num_msgs = 255,
  334. };
  335. static const struct i2c_adapter_quirks mt8183_i2c_quirks = {
  336. .flags = I2C_AQ_NO_ZERO_LEN,
  337. };
  338. static const struct mtk_i2c_compatible mt2712_compat = {
  339. .regs = mt_i2c_regs_v1,
  340. .pmic_i2c = 0,
  341. .dcm = 1,
  342. .auto_restart = 1,
  343. .aux_len_reg = 1,
  344. .timing_adjust = 1,
  345. .dma_sync = 0,
  346. .ltiming_adjust = 0,
  347. .apdma_sync = 0,
  348. .max_dma_support = 33,
  349. };
  350. static const struct mtk_i2c_compatible mt6577_compat = {
  351. .quirks = &mt6577_i2c_quirks,
  352. .regs = mt_i2c_regs_v1,
  353. .pmic_i2c = 0,
  354. .dcm = 1,
  355. .auto_restart = 0,
  356. .aux_len_reg = 0,
  357. .timing_adjust = 0,
  358. .dma_sync = 0,
  359. .ltiming_adjust = 0,
  360. .apdma_sync = 0,
  361. .max_dma_support = 32,
  362. };
  363. static const struct mtk_i2c_compatible mt6589_compat = {
  364. .quirks = &mt6577_i2c_quirks,
  365. .regs = mt_i2c_regs_v1,
  366. .pmic_i2c = 1,
  367. .dcm = 0,
  368. .auto_restart = 0,
  369. .aux_len_reg = 0,
  370. .timing_adjust = 0,
  371. .dma_sync = 0,
  372. .ltiming_adjust = 0,
  373. .apdma_sync = 0,
  374. .max_dma_support = 32,
  375. };
  376. static const struct mtk_i2c_compatible mt7622_compat = {
  377. .quirks = &mt7622_i2c_quirks,
  378. .regs = mt_i2c_regs_v1,
  379. .pmic_i2c = 0,
  380. .dcm = 1,
  381. .auto_restart = 1,
  382. .aux_len_reg = 1,
  383. .timing_adjust = 0,
  384. .dma_sync = 0,
  385. .ltiming_adjust = 0,
  386. .apdma_sync = 0,
  387. .max_dma_support = 32,
  388. };
  389. static const struct mtk_i2c_compatible mt8168_compat = {
  390. .regs = mt_i2c_regs_v1,
  391. .pmic_i2c = 0,
  392. .dcm = 1,
  393. .auto_restart = 1,
  394. .aux_len_reg = 1,
  395. .timing_adjust = 1,
  396. .dma_sync = 1,
  397. .ltiming_adjust = 0,
  398. .apdma_sync = 0,
  399. .max_dma_support = 33,
  400. };
  401. static const struct mtk_i2c_compatible mt8173_compat = {
  402. .regs = mt_i2c_regs_v1,
  403. .pmic_i2c = 0,
  404. .dcm = 1,
  405. .auto_restart = 1,
  406. .aux_len_reg = 1,
  407. .timing_adjust = 0,
  408. .dma_sync = 0,
  409. .ltiming_adjust = 0,
  410. .apdma_sync = 0,
  411. .max_dma_support = 33,
  412. };
  413. static const struct mtk_i2c_compatible mt8183_compat = {
  414. .quirks = &mt8183_i2c_quirks,
  415. .regs = mt_i2c_regs_v2,
  416. .pmic_i2c = 0,
  417. .dcm = 0,
  418. .auto_restart = 1,
  419. .aux_len_reg = 1,
  420. .timing_adjust = 1,
  421. .dma_sync = 1,
  422. .ltiming_adjust = 1,
  423. .apdma_sync = 0,
  424. .max_dma_support = 33,
  425. };
  426. static const struct mtk_i2c_compatible mt8186_compat = {
  427. .regs = mt_i2c_regs_v2,
  428. .pmic_i2c = 0,
  429. .dcm = 0,
  430. .auto_restart = 1,
  431. .aux_len_reg = 1,
  432. .timing_adjust = 1,
  433. .dma_sync = 0,
  434. .ltiming_adjust = 1,
  435. .apdma_sync = 0,
  436. .max_dma_support = 36,
  437. };
  438. static const struct mtk_i2c_compatible mt8188_compat = {
  439. .regs = mt_i2c_regs_v3,
  440. .pmic_i2c = 0,
  441. .dcm = 0,
  442. .auto_restart = 1,
  443. .aux_len_reg = 1,
  444. .timing_adjust = 1,
  445. .dma_sync = 0,
  446. .ltiming_adjust = 1,
  447. .apdma_sync = 1,
  448. .max_dma_support = 36,
  449. };
  450. static const struct mtk_i2c_compatible mt8192_compat = {
  451. .quirks = &mt8183_i2c_quirks,
  452. .regs = mt_i2c_regs_v2,
  453. .pmic_i2c = 0,
  454. .dcm = 0,
  455. .auto_restart = 1,
  456. .aux_len_reg = 1,
  457. .timing_adjust = 1,
  458. .dma_sync = 1,
  459. .ltiming_adjust = 1,
  460. .apdma_sync = 1,
  461. .max_dma_support = 36,
  462. };
  463. static const struct of_device_id mtk_i2c_of_match[] = {
  464. { .compatible = "mediatek,mt2712-i2c", .data = &mt2712_compat },
  465. { .compatible = "mediatek,mt6577-i2c", .data = &mt6577_compat },
  466. { .compatible = "mediatek,mt6589-i2c", .data = &mt6589_compat },
  467. { .compatible = "mediatek,mt7622-i2c", .data = &mt7622_compat },
  468. { .compatible = "mediatek,mt8168-i2c", .data = &mt8168_compat },
  469. { .compatible = "mediatek,mt8173-i2c", .data = &mt8173_compat },
  470. { .compatible = "mediatek,mt8183-i2c", .data = &mt8183_compat },
  471. { .compatible = "mediatek,mt8186-i2c", .data = &mt8186_compat },
  472. { .compatible = "mediatek,mt8188-i2c", .data = &mt8188_compat },
  473. { .compatible = "mediatek,mt8192-i2c", .data = &mt8192_compat },
  474. {}
  475. };
  476. MODULE_DEVICE_TABLE(of, mtk_i2c_of_match);
  477. static u16 mtk_i2c_readw(struct mtk_i2c *i2c, enum I2C_REGS_OFFSET reg)
  478. {
  479. return readw(i2c->base + i2c->dev_comp->regs[reg]);
  480. }
  481. static void mtk_i2c_writew(struct mtk_i2c *i2c, u16 val,
  482. enum I2C_REGS_OFFSET reg)
  483. {
  484. writew(val, i2c->base + i2c->dev_comp->regs[reg]);
  485. }
  486. static void mtk_i2c_init_hw(struct mtk_i2c *i2c)
  487. {
  488. u16 control_reg;
  489. u16 intr_stat_reg;
  490. u16 ext_conf_val;
  491. mtk_i2c_writew(i2c, I2C_CHN_CLR_FLAG, OFFSET_START);
  492. intr_stat_reg = mtk_i2c_readw(i2c, OFFSET_INTR_STAT);
  493. mtk_i2c_writew(i2c, intr_stat_reg, OFFSET_INTR_STAT);
  494. if (i2c->dev_comp->apdma_sync) {
  495. writel(I2C_DMA_WARM_RST, i2c->pdmabase + OFFSET_RST);
  496. udelay(10);
  497. writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_RST);
  498. udelay(10);
  499. writel(I2C_DMA_HANDSHAKE_RST | I2C_DMA_HARD_RST,
  500. i2c->pdmabase + OFFSET_RST);
  501. mtk_i2c_writew(i2c, I2C_HANDSHAKE_RST | I2C_SOFT_RST,
  502. OFFSET_SOFTRESET);
  503. udelay(10);
  504. writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_RST);
  505. mtk_i2c_writew(i2c, I2C_CHN_CLR_FLAG, OFFSET_SOFTRESET);
  506. } else {
  507. writel(I2C_DMA_HARD_RST, i2c->pdmabase + OFFSET_RST);
  508. udelay(50);
  509. writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_RST);
  510. mtk_i2c_writew(i2c, I2C_SOFT_RST, OFFSET_SOFTRESET);
  511. }
  512. /* Set ioconfig */
  513. if (i2c->use_push_pull)
  514. mtk_i2c_writew(i2c, I2C_IO_CONFIG_PUSH_PULL, OFFSET_IO_CONFIG);
  515. else
  516. mtk_i2c_writew(i2c, I2C_IO_CONFIG_OPEN_DRAIN, OFFSET_IO_CONFIG);
  517. if (i2c->dev_comp->dcm)
  518. mtk_i2c_writew(i2c, I2C_DCM_DISABLE, OFFSET_DCM_EN);
  519. mtk_i2c_writew(i2c, i2c->timing_reg, OFFSET_TIMING);
  520. mtk_i2c_writew(i2c, i2c->high_speed_reg, OFFSET_HS);
  521. if (i2c->dev_comp->ltiming_adjust)
  522. mtk_i2c_writew(i2c, i2c->ltiming_reg, OFFSET_LTIMING);
  523. if (i2c->speed_hz <= I2C_MAX_STANDARD_MODE_FREQ)
  524. ext_conf_val = I2C_ST_START_CON;
  525. else
  526. ext_conf_val = I2C_FS_START_CON;
  527. if (i2c->dev_comp->timing_adjust) {
  528. ext_conf_val = i2c->ac_timing.ext;
  529. mtk_i2c_writew(i2c, i2c->ac_timing.inter_clk_div,
  530. OFFSET_CLOCK_DIV);
  531. mtk_i2c_writew(i2c, I2C_SCL_MIS_COMP_VALUE,
  532. OFFSET_SCL_MIS_COMP_POINT);
  533. mtk_i2c_writew(i2c, i2c->ac_timing.sda_timing,
  534. OFFSET_SDA_TIMING);
  535. if (i2c->dev_comp->ltiming_adjust) {
  536. mtk_i2c_writew(i2c, i2c->ac_timing.htiming,
  537. OFFSET_TIMING);
  538. mtk_i2c_writew(i2c, i2c->ac_timing.hs, OFFSET_HS);
  539. mtk_i2c_writew(i2c, i2c->ac_timing.ltiming,
  540. OFFSET_LTIMING);
  541. } else {
  542. mtk_i2c_writew(i2c, i2c->ac_timing.scl_hl_ratio,
  543. OFFSET_SCL_HIGH_LOW_RATIO);
  544. mtk_i2c_writew(i2c, i2c->ac_timing.hs_scl_hl_ratio,
  545. OFFSET_HS_SCL_HIGH_LOW_RATIO);
  546. mtk_i2c_writew(i2c, i2c->ac_timing.sta_stop,
  547. OFFSET_STA_STO_AC_TIMING);
  548. mtk_i2c_writew(i2c, i2c->ac_timing.hs_sta_stop,
  549. OFFSET_HS_STA_STO_AC_TIMING);
  550. }
  551. }
  552. mtk_i2c_writew(i2c, ext_conf_val, OFFSET_EXT_CONF);
  553. /* If use i2c pin from PMIC mt6397 side, need set PATH_DIR first */
  554. if (i2c->have_pmic)
  555. mtk_i2c_writew(i2c, I2C_CONTROL_WRAPPER, OFFSET_PATH_DIR);
  556. control_reg = I2C_CONTROL_ACKERR_DET_EN |
  557. I2C_CONTROL_CLK_EXT_EN | I2C_CONTROL_DMA_EN;
  558. if (i2c->dev_comp->dma_sync)
  559. control_reg |= I2C_CONTROL_DMAACK_EN | I2C_CONTROL_ASYNC_MODE;
  560. mtk_i2c_writew(i2c, control_reg, OFFSET_CONTROL);
  561. mtk_i2c_writew(i2c, I2C_DELAY_LEN, OFFSET_DELAY_LEN);
  562. }
  563. static const struct i2c_spec_values *mtk_i2c_get_spec(unsigned int speed)
  564. {
  565. if (speed <= I2C_MAX_STANDARD_MODE_FREQ)
  566. return &standard_mode_spec;
  567. else if (speed <= I2C_MAX_FAST_MODE_FREQ)
  568. return &fast_mode_spec;
  569. else
  570. return &fast_mode_plus_spec;
  571. }
  572. static int mtk_i2c_max_step_cnt(unsigned int target_speed)
  573. {
  574. if (target_speed > I2C_MAX_FAST_MODE_PLUS_FREQ)
  575. return MAX_HS_STEP_CNT_DIV;
  576. else
  577. return MAX_STEP_CNT_DIV;
  578. }
  579. static int mtk_i2c_get_clk_div_restri(struct mtk_i2c *i2c,
  580. unsigned int sample_cnt)
  581. {
  582. int clk_div_restri = 0;
  583. if (i2c->dev_comp->ltiming_adjust == 0)
  584. return 0;
  585. if (sample_cnt == 1) {
  586. if (i2c->ac_timing.inter_clk_div == 0)
  587. clk_div_restri = 0;
  588. else
  589. clk_div_restri = 1;
  590. } else {
  591. if (i2c->ac_timing.inter_clk_div == 0)
  592. clk_div_restri = -1;
  593. else if (i2c->ac_timing.inter_clk_div == 1)
  594. clk_div_restri = 0;
  595. else
  596. clk_div_restri = 1;
  597. }
  598. return clk_div_restri;
  599. }
  600. /*
  601. * Check and Calculate i2c ac-timing
  602. *
  603. * Hardware design:
  604. * sample_ns = (1000000000 * (sample_cnt + 1)) / clk_src
  605. * xxx_cnt_div = spec->min_xxx_ns / sample_ns
  606. *
  607. * Sample_ns is rounded down for xxx_cnt_div would be greater
  608. * than the smallest spec.
  609. * The sda_timing is chosen as the middle value between
  610. * the largest and smallest.
  611. */
  612. static int mtk_i2c_check_ac_timing(struct mtk_i2c *i2c,
  613. unsigned int clk_src,
  614. unsigned int check_speed,
  615. unsigned int step_cnt,
  616. unsigned int sample_cnt)
  617. {
  618. const struct i2c_spec_values *spec;
  619. unsigned int su_sta_cnt, low_cnt, high_cnt, max_step_cnt;
  620. unsigned int sda_max, sda_min, clk_ns, max_sta_cnt = 0x3f;
  621. unsigned int sample_ns = div_u64(1000000000ULL * (sample_cnt + 1),
  622. clk_src);
  623. if (!i2c->dev_comp->timing_adjust)
  624. return 0;
  625. if (i2c->dev_comp->ltiming_adjust)
  626. max_sta_cnt = 0x100;
  627. spec = mtk_i2c_get_spec(check_speed);
  628. if (i2c->dev_comp->ltiming_adjust)
  629. clk_ns = 1000000000 / clk_src;
  630. else
  631. clk_ns = sample_ns / 2;
  632. su_sta_cnt = DIV_ROUND_UP(spec->min_su_sta_ns +
  633. i2c->timing_info.scl_int_delay_ns, clk_ns);
  634. if (su_sta_cnt > max_sta_cnt)
  635. return -1;
  636. low_cnt = DIV_ROUND_UP(spec->min_low_ns, sample_ns);
  637. max_step_cnt = mtk_i2c_max_step_cnt(check_speed);
  638. if ((2 * step_cnt) > low_cnt && low_cnt < max_step_cnt) {
  639. if (low_cnt > step_cnt) {
  640. high_cnt = 2 * step_cnt - low_cnt;
  641. } else {
  642. high_cnt = step_cnt;
  643. low_cnt = step_cnt;
  644. }
  645. } else {
  646. return -2;
  647. }
  648. sda_max = spec->max_hd_dat_ns / sample_ns;
  649. if (sda_max > low_cnt)
  650. sda_max = 0;
  651. sda_min = DIV_ROUND_UP(spec->min_su_dat_ns, sample_ns);
  652. if (sda_min < low_cnt)
  653. sda_min = 0;
  654. if (sda_min > sda_max)
  655. return -3;
  656. if (check_speed > I2C_MAX_FAST_MODE_PLUS_FREQ) {
  657. if (i2c->dev_comp->ltiming_adjust) {
  658. i2c->ac_timing.hs = I2C_TIME_DEFAULT_VALUE |
  659. (sample_cnt << 12) | (high_cnt << 8);
  660. i2c->ac_timing.ltiming &= ~GENMASK(15, 9);
  661. i2c->ac_timing.ltiming |= (sample_cnt << 12) |
  662. (low_cnt << 9);
  663. i2c->ac_timing.ext &= ~GENMASK(7, 1);
  664. i2c->ac_timing.ext |= (su_sta_cnt << 1) | (1 << 0);
  665. } else {
  666. i2c->ac_timing.hs_scl_hl_ratio = (1 << 12) |
  667. (high_cnt << 6) | low_cnt;
  668. i2c->ac_timing.hs_sta_stop = (su_sta_cnt << 8) |
  669. su_sta_cnt;
  670. }
  671. i2c->ac_timing.sda_timing &= ~GENMASK(11, 6);
  672. i2c->ac_timing.sda_timing |= (1 << 12) |
  673. ((sda_max + sda_min) / 2) << 6;
  674. } else {
  675. if (i2c->dev_comp->ltiming_adjust) {
  676. i2c->ac_timing.htiming = (sample_cnt << 8) | (high_cnt);
  677. i2c->ac_timing.ltiming = (sample_cnt << 6) | (low_cnt);
  678. i2c->ac_timing.ext = (su_sta_cnt << 8) | (1 << 0);
  679. } else {
  680. i2c->ac_timing.scl_hl_ratio = (1 << 12) |
  681. (high_cnt << 6) | low_cnt;
  682. i2c->ac_timing.sta_stop = (su_sta_cnt << 8) |
  683. su_sta_cnt;
  684. }
  685. i2c->ac_timing.sda_timing = (1 << 12) |
  686. (sda_max + sda_min) / 2;
  687. }
  688. return 0;
  689. }
  690. /*
  691. * Calculate i2c port speed
  692. *
  693. * Hardware design:
  694. * i2c_bus_freq = parent_clk / (clock_div * 2 * sample_cnt * step_cnt)
  695. * clock_div: fixed in hardware, but may be various in different SoCs
  696. *
  697. * The calculation want to pick the highest bus frequency that is still
  698. * less than or equal to i2c->speed_hz. The calculation try to get
  699. * sample_cnt and step_cn
  700. */
  701. static int mtk_i2c_calculate_speed(struct mtk_i2c *i2c, unsigned int clk_src,
  702. unsigned int target_speed,
  703. unsigned int *timing_step_cnt,
  704. unsigned int *timing_sample_cnt)
  705. {
  706. unsigned int step_cnt;
  707. unsigned int sample_cnt;
  708. unsigned int max_step_cnt;
  709. unsigned int base_sample_cnt = MAX_SAMPLE_CNT_DIV;
  710. unsigned int base_step_cnt;
  711. unsigned int opt_div;
  712. unsigned int best_mul;
  713. unsigned int cnt_mul;
  714. int ret = -EINVAL;
  715. int clk_div_restri = 0;
  716. if (target_speed > I2C_MAX_HIGH_SPEED_MODE_FREQ)
  717. target_speed = I2C_MAX_HIGH_SPEED_MODE_FREQ;
  718. max_step_cnt = mtk_i2c_max_step_cnt(target_speed);
  719. base_step_cnt = max_step_cnt;
  720. /* Find the best combination */
  721. opt_div = DIV_ROUND_UP(clk_src >> 1, target_speed);
  722. best_mul = MAX_SAMPLE_CNT_DIV * max_step_cnt;
  723. /* Search for the best pair (sample_cnt, step_cnt) with
  724. * 0 < sample_cnt < MAX_SAMPLE_CNT_DIV
  725. * 0 < step_cnt < max_step_cnt
  726. * sample_cnt * step_cnt >= opt_div
  727. * optimizing for sample_cnt * step_cnt being minimal
  728. */
  729. for (sample_cnt = 1; sample_cnt <= MAX_SAMPLE_CNT_DIV; sample_cnt++) {
  730. clk_div_restri = mtk_i2c_get_clk_div_restri(i2c, sample_cnt);
  731. step_cnt = DIV_ROUND_UP(opt_div + clk_div_restri, sample_cnt);
  732. cnt_mul = step_cnt * sample_cnt;
  733. if (step_cnt > max_step_cnt)
  734. continue;
  735. if (cnt_mul < best_mul) {
  736. ret = mtk_i2c_check_ac_timing(i2c, clk_src,
  737. target_speed, step_cnt - 1, sample_cnt - 1);
  738. if (ret)
  739. continue;
  740. best_mul = cnt_mul;
  741. base_sample_cnt = sample_cnt;
  742. base_step_cnt = step_cnt;
  743. if (best_mul == (opt_div + clk_div_restri))
  744. break;
  745. }
  746. }
  747. if (ret)
  748. return -EINVAL;
  749. sample_cnt = base_sample_cnt;
  750. step_cnt = base_step_cnt;
  751. if ((clk_src / (2 * (sample_cnt * step_cnt - clk_div_restri))) >
  752. target_speed) {
  753. /* In this case, hardware can't support such
  754. * low i2c_bus_freq
  755. */
  756. dev_dbg(i2c->dev, "Unsupported speed (%uhz)\n", target_speed);
  757. return -EINVAL;
  758. }
  759. *timing_step_cnt = step_cnt - 1;
  760. *timing_sample_cnt = sample_cnt - 1;
  761. return 0;
  762. }
  763. static int mtk_i2c_set_speed(struct mtk_i2c *i2c, unsigned int parent_clk)
  764. {
  765. unsigned int clk_src;
  766. unsigned int step_cnt;
  767. unsigned int sample_cnt;
  768. unsigned int l_step_cnt;
  769. unsigned int l_sample_cnt;
  770. unsigned int target_speed;
  771. unsigned int clk_div;
  772. unsigned int max_clk_div;
  773. int ret;
  774. target_speed = i2c->speed_hz;
  775. parent_clk /= i2c->clk_src_div;
  776. if (i2c->dev_comp->timing_adjust && i2c->dev_comp->ltiming_adjust)
  777. max_clk_div = MAX_CLOCK_DIV_5BITS;
  778. else if (i2c->dev_comp->timing_adjust)
  779. max_clk_div = MAX_CLOCK_DIV_8BITS;
  780. else
  781. max_clk_div = 1;
  782. for (clk_div = 1; clk_div <= max_clk_div; clk_div++) {
  783. clk_src = parent_clk / clk_div;
  784. i2c->ac_timing.inter_clk_div = clk_div - 1;
  785. if (target_speed > I2C_MAX_FAST_MODE_PLUS_FREQ) {
  786. /* Set master code speed register */
  787. ret = mtk_i2c_calculate_speed(i2c, clk_src,
  788. I2C_MAX_FAST_MODE_FREQ,
  789. &l_step_cnt,
  790. &l_sample_cnt);
  791. if (ret < 0)
  792. continue;
  793. i2c->timing_reg = (l_sample_cnt << 8) | l_step_cnt;
  794. /* Set the high speed mode register */
  795. ret = mtk_i2c_calculate_speed(i2c, clk_src,
  796. target_speed, &step_cnt,
  797. &sample_cnt);
  798. if (ret < 0)
  799. continue;
  800. i2c->high_speed_reg = I2C_TIME_DEFAULT_VALUE |
  801. (sample_cnt << 12) | (step_cnt << 8);
  802. if (i2c->dev_comp->ltiming_adjust)
  803. i2c->ltiming_reg =
  804. (l_sample_cnt << 6) | l_step_cnt |
  805. (sample_cnt << 12) | (step_cnt << 9);
  806. } else {
  807. ret = mtk_i2c_calculate_speed(i2c, clk_src,
  808. target_speed, &l_step_cnt,
  809. &l_sample_cnt);
  810. if (ret < 0)
  811. continue;
  812. i2c->timing_reg = (l_sample_cnt << 8) | l_step_cnt;
  813. /* Disable the high speed transaction */
  814. i2c->high_speed_reg = I2C_TIME_CLR_VALUE;
  815. if (i2c->dev_comp->ltiming_adjust)
  816. i2c->ltiming_reg =
  817. (l_sample_cnt << 6) | l_step_cnt;
  818. }
  819. break;
  820. }
  821. return 0;
  822. }
  823. static void i2c_dump_register(struct mtk_i2c *i2c)
  824. {
  825. dev_dbg(i2c->dev, "SLAVE_ADDR: 0x%x, INTR_MASK: 0x%x\n",
  826. mtk_i2c_readw(i2c, OFFSET_SLAVE_ADDR),
  827. mtk_i2c_readw(i2c, OFFSET_INTR_MASK));
  828. dev_dbg(i2c->dev, "INTR_STAT: 0x%x, CONTROL: 0x%x\n",
  829. mtk_i2c_readw(i2c, OFFSET_INTR_STAT),
  830. mtk_i2c_readw(i2c, OFFSET_CONTROL));
  831. dev_dbg(i2c->dev, "TRANSFER_LEN: 0x%x, TRANSAC_LEN: 0x%x\n",
  832. mtk_i2c_readw(i2c, OFFSET_TRANSFER_LEN),
  833. mtk_i2c_readw(i2c, OFFSET_TRANSAC_LEN));
  834. dev_dbg(i2c->dev, "DELAY_LEN: 0x%x, HTIMING: 0x%x\n",
  835. mtk_i2c_readw(i2c, OFFSET_DELAY_LEN),
  836. mtk_i2c_readw(i2c, OFFSET_TIMING));
  837. dev_dbg(i2c->dev, "START: 0x%x, EXT_CONF: 0x%x\n",
  838. mtk_i2c_readw(i2c, OFFSET_START),
  839. mtk_i2c_readw(i2c, OFFSET_EXT_CONF));
  840. dev_dbg(i2c->dev, "HS: 0x%x, IO_CONFIG: 0x%x\n",
  841. mtk_i2c_readw(i2c, OFFSET_HS),
  842. mtk_i2c_readw(i2c, OFFSET_IO_CONFIG));
  843. dev_dbg(i2c->dev, "DCM_EN: 0x%x, TRANSFER_LEN_AUX: 0x%x\n",
  844. mtk_i2c_readw(i2c, OFFSET_DCM_EN),
  845. mtk_i2c_readw(i2c, OFFSET_TRANSFER_LEN_AUX));
  846. dev_dbg(i2c->dev, "CLOCK_DIV: 0x%x, FIFO_STAT: 0x%x\n",
  847. mtk_i2c_readw(i2c, OFFSET_CLOCK_DIV),
  848. mtk_i2c_readw(i2c, OFFSET_FIFO_STAT));
  849. dev_dbg(i2c->dev, "DEBUGCTRL : 0x%x, DEBUGSTAT: 0x%x\n",
  850. mtk_i2c_readw(i2c, OFFSET_DEBUGCTRL),
  851. mtk_i2c_readw(i2c, OFFSET_DEBUGSTAT));
  852. if (i2c->dev_comp->regs == mt_i2c_regs_v2) {
  853. dev_dbg(i2c->dev, "LTIMING: 0x%x, MULTI_DMA: 0x%x\n",
  854. mtk_i2c_readw(i2c, OFFSET_LTIMING),
  855. mtk_i2c_readw(i2c, OFFSET_MULTI_DMA));
  856. }
  857. dev_dbg(i2c->dev, "\nDMA_INT_FLAG: 0x%x, DMA_INT_EN: 0x%x\n",
  858. readl(i2c->pdmabase + OFFSET_INT_FLAG),
  859. readl(i2c->pdmabase + OFFSET_INT_EN));
  860. dev_dbg(i2c->dev, "DMA_EN: 0x%x, DMA_CON: 0x%x\n",
  861. readl(i2c->pdmabase + OFFSET_EN),
  862. readl(i2c->pdmabase + OFFSET_CON));
  863. dev_dbg(i2c->dev, "DMA_TX_MEM_ADDR: 0x%x, DMA_RX_MEM_ADDR: 0x%x\n",
  864. readl(i2c->pdmabase + OFFSET_TX_MEM_ADDR),
  865. readl(i2c->pdmabase + OFFSET_RX_MEM_ADDR));
  866. dev_dbg(i2c->dev, "DMA_TX_LEN: 0x%x, DMA_RX_LEN: 0x%x\n",
  867. readl(i2c->pdmabase + OFFSET_TX_LEN),
  868. readl(i2c->pdmabase + OFFSET_RX_LEN));
  869. dev_dbg(i2c->dev, "DMA_TX_4G_MODE: 0x%x, DMA_RX_4G_MODE: 0x%x",
  870. readl(i2c->pdmabase + OFFSET_TX_4G_MODE),
  871. readl(i2c->pdmabase + OFFSET_RX_4G_MODE));
  872. }
  873. static int mtk_i2c_do_transfer(struct mtk_i2c *i2c, struct i2c_msg *msgs,
  874. int num, int left_num)
  875. {
  876. u16 addr_reg;
  877. u16 start_reg;
  878. u16 control_reg;
  879. u16 restart_flag = 0;
  880. u16 dma_sync = 0;
  881. u32 reg_4g_mode;
  882. u32 reg_dma_reset;
  883. u8 *dma_rd_buf = NULL;
  884. u8 *dma_wr_buf = NULL;
  885. dma_addr_t rpaddr = 0;
  886. dma_addr_t wpaddr = 0;
  887. int ret;
  888. i2c->irq_stat = 0;
  889. if (i2c->auto_restart)
  890. restart_flag = I2C_RS_TRANSFER;
  891. reinit_completion(&i2c->msg_complete);
  892. if (i2c->dev_comp->apdma_sync &&
  893. i2c->op != I2C_MASTER_WRRD && num > 1) {
  894. mtk_i2c_writew(i2c, 0x00, OFFSET_DEBUGCTRL);
  895. writel(I2C_DMA_HANDSHAKE_RST | I2C_DMA_WARM_RST,
  896. i2c->pdmabase + OFFSET_RST);
  897. ret = readw_poll_timeout(i2c->pdmabase + OFFSET_RST,
  898. reg_dma_reset,
  899. !(reg_dma_reset & I2C_DMA_WARM_RST),
  900. 0, 100);
  901. if (ret) {
  902. dev_err(i2c->dev, "DMA warm reset timeout\n");
  903. return -ETIMEDOUT;
  904. }
  905. writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_RST);
  906. mtk_i2c_writew(i2c, I2C_HANDSHAKE_RST, OFFSET_SOFTRESET);
  907. mtk_i2c_writew(i2c, I2C_CHN_CLR_FLAG, OFFSET_SOFTRESET);
  908. mtk_i2c_writew(i2c, I2C_RELIABILITY | I2C_DMAACK_ENABLE,
  909. OFFSET_DEBUGCTRL);
  910. }
  911. control_reg = mtk_i2c_readw(i2c, OFFSET_CONTROL) &
  912. ~(I2C_CONTROL_DIR_CHANGE | I2C_CONTROL_RS);
  913. if ((i2c->speed_hz > I2C_MAX_FAST_MODE_PLUS_FREQ) || (left_num >= 1))
  914. control_reg |= I2C_CONTROL_RS;
  915. if (i2c->op == I2C_MASTER_WRRD)
  916. control_reg |= I2C_CONTROL_DIR_CHANGE | I2C_CONTROL_RS;
  917. mtk_i2c_writew(i2c, control_reg, OFFSET_CONTROL);
  918. addr_reg = i2c_8bit_addr_from_msg(msgs);
  919. mtk_i2c_writew(i2c, addr_reg, OFFSET_SLAVE_ADDR);
  920. /* Clear interrupt status */
  921. mtk_i2c_writew(i2c, restart_flag | I2C_HS_NACKERR | I2C_ACKERR |
  922. I2C_ARB_LOST | I2C_TRANSAC_COMP, OFFSET_INTR_STAT);
  923. mtk_i2c_writew(i2c, I2C_FIFO_ADDR_CLR, OFFSET_FIFO_ADDR_CLR);
  924. /* Enable interrupt */
  925. mtk_i2c_writew(i2c, restart_flag | I2C_HS_NACKERR | I2C_ACKERR |
  926. I2C_ARB_LOST | I2C_TRANSAC_COMP, OFFSET_INTR_MASK);
  927. /* Set transfer and transaction len */
  928. if (i2c->op == I2C_MASTER_WRRD) {
  929. if (i2c->dev_comp->aux_len_reg) {
  930. mtk_i2c_writew(i2c, msgs->len, OFFSET_TRANSFER_LEN);
  931. mtk_i2c_writew(i2c, (msgs + 1)->len,
  932. OFFSET_TRANSFER_LEN_AUX);
  933. } else {
  934. mtk_i2c_writew(i2c, msgs->len | ((msgs + 1)->len) << 8,
  935. OFFSET_TRANSFER_LEN);
  936. }
  937. mtk_i2c_writew(i2c, I2C_WRRD_TRANAC_VALUE, OFFSET_TRANSAC_LEN);
  938. } else {
  939. mtk_i2c_writew(i2c, msgs->len, OFFSET_TRANSFER_LEN);
  940. mtk_i2c_writew(i2c, num, OFFSET_TRANSAC_LEN);
  941. }
  942. if (i2c->dev_comp->apdma_sync) {
  943. dma_sync = I2C_DMA_SKIP_CONFIG | I2C_DMA_ASYNC_MODE;
  944. if (i2c->op == I2C_MASTER_WRRD)
  945. dma_sync |= I2C_DMA_DIR_CHANGE;
  946. }
  947. /* Prepare buffer data to start transfer */
  948. if (i2c->op == I2C_MASTER_RD) {
  949. writel(I2C_DMA_INT_FLAG_NONE, i2c->pdmabase + OFFSET_INT_FLAG);
  950. writel(I2C_DMA_CON_RX | dma_sync, i2c->pdmabase + OFFSET_CON);
  951. dma_rd_buf = i2c_get_dma_safe_msg_buf(msgs, 1);
  952. if (!dma_rd_buf)
  953. return -ENOMEM;
  954. rpaddr = dma_map_single(i2c->dev, dma_rd_buf,
  955. msgs->len, DMA_FROM_DEVICE);
  956. if (dma_mapping_error(i2c->dev, rpaddr)) {
  957. i2c_put_dma_safe_msg_buf(dma_rd_buf, msgs, false);
  958. return -ENOMEM;
  959. }
  960. if (i2c->dev_comp->max_dma_support > 32) {
  961. reg_4g_mode = upper_32_bits(rpaddr);
  962. writel(reg_4g_mode, i2c->pdmabase + OFFSET_RX_4G_MODE);
  963. }
  964. writel((u32)rpaddr, i2c->pdmabase + OFFSET_RX_MEM_ADDR);
  965. writel(msgs->len, i2c->pdmabase + OFFSET_RX_LEN);
  966. } else if (i2c->op == I2C_MASTER_WR) {
  967. writel(I2C_DMA_INT_FLAG_NONE, i2c->pdmabase + OFFSET_INT_FLAG);
  968. writel(I2C_DMA_CON_TX | dma_sync, i2c->pdmabase + OFFSET_CON);
  969. dma_wr_buf = i2c_get_dma_safe_msg_buf(msgs, 1);
  970. if (!dma_wr_buf)
  971. return -ENOMEM;
  972. wpaddr = dma_map_single(i2c->dev, dma_wr_buf,
  973. msgs->len, DMA_TO_DEVICE);
  974. if (dma_mapping_error(i2c->dev, wpaddr)) {
  975. i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);
  976. return -ENOMEM;
  977. }
  978. if (i2c->dev_comp->max_dma_support > 32) {
  979. reg_4g_mode = upper_32_bits(wpaddr);
  980. writel(reg_4g_mode, i2c->pdmabase + OFFSET_TX_4G_MODE);
  981. }
  982. writel((u32)wpaddr, i2c->pdmabase + OFFSET_TX_MEM_ADDR);
  983. writel(msgs->len, i2c->pdmabase + OFFSET_TX_LEN);
  984. } else {
  985. writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_INT_FLAG);
  986. writel(I2C_DMA_CLR_FLAG | dma_sync, i2c->pdmabase + OFFSET_CON);
  987. dma_wr_buf = i2c_get_dma_safe_msg_buf(msgs, 1);
  988. if (!dma_wr_buf)
  989. return -ENOMEM;
  990. wpaddr = dma_map_single(i2c->dev, dma_wr_buf,
  991. msgs->len, DMA_TO_DEVICE);
  992. if (dma_mapping_error(i2c->dev, wpaddr)) {
  993. i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);
  994. return -ENOMEM;
  995. }
  996. dma_rd_buf = i2c_get_dma_safe_msg_buf((msgs + 1), 1);
  997. if (!dma_rd_buf) {
  998. dma_unmap_single(i2c->dev, wpaddr,
  999. msgs->len, DMA_TO_DEVICE);
  1000. i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);
  1001. return -ENOMEM;
  1002. }
  1003. rpaddr = dma_map_single(i2c->dev, dma_rd_buf,
  1004. (msgs + 1)->len,
  1005. DMA_FROM_DEVICE);
  1006. if (dma_mapping_error(i2c->dev, rpaddr)) {
  1007. dma_unmap_single(i2c->dev, wpaddr,
  1008. msgs->len, DMA_TO_DEVICE);
  1009. i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);
  1010. i2c_put_dma_safe_msg_buf(dma_rd_buf, (msgs + 1), false);
  1011. return -ENOMEM;
  1012. }
  1013. if (i2c->dev_comp->max_dma_support > 32) {
  1014. reg_4g_mode = upper_32_bits(wpaddr);
  1015. writel(reg_4g_mode, i2c->pdmabase + OFFSET_TX_4G_MODE);
  1016. reg_4g_mode = upper_32_bits(rpaddr);
  1017. writel(reg_4g_mode, i2c->pdmabase + OFFSET_RX_4G_MODE);
  1018. }
  1019. writel((u32)wpaddr, i2c->pdmabase + OFFSET_TX_MEM_ADDR);
  1020. writel((u32)rpaddr, i2c->pdmabase + OFFSET_RX_MEM_ADDR);
  1021. writel(msgs->len, i2c->pdmabase + OFFSET_TX_LEN);
  1022. writel((msgs + 1)->len, i2c->pdmabase + OFFSET_RX_LEN);
  1023. }
  1024. writel(I2C_DMA_START_EN, i2c->pdmabase + OFFSET_EN);
  1025. if (!i2c->auto_restart) {
  1026. start_reg = I2C_TRANSAC_START;
  1027. } else {
  1028. start_reg = I2C_TRANSAC_START | I2C_RS_MUL_TRIG;
  1029. if (left_num >= 1)
  1030. start_reg |= I2C_RS_MUL_CNFG;
  1031. }
  1032. mtk_i2c_writew(i2c, start_reg, OFFSET_START);
  1033. ret = wait_for_completion_timeout(&i2c->msg_complete,
  1034. i2c->adap.timeout);
  1035. /* Clear interrupt mask */
  1036. mtk_i2c_writew(i2c, ~(restart_flag | I2C_HS_NACKERR | I2C_ACKERR |
  1037. I2C_ARB_LOST | I2C_TRANSAC_COMP), OFFSET_INTR_MASK);
  1038. if (i2c->op == I2C_MASTER_WR) {
  1039. dma_unmap_single(i2c->dev, wpaddr,
  1040. msgs->len, DMA_TO_DEVICE);
  1041. i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, true);
  1042. } else if (i2c->op == I2C_MASTER_RD) {
  1043. dma_unmap_single(i2c->dev, rpaddr,
  1044. msgs->len, DMA_FROM_DEVICE);
  1045. i2c_put_dma_safe_msg_buf(dma_rd_buf, msgs, true);
  1046. } else {
  1047. dma_unmap_single(i2c->dev, wpaddr, msgs->len,
  1048. DMA_TO_DEVICE);
  1049. dma_unmap_single(i2c->dev, rpaddr, (msgs + 1)->len,
  1050. DMA_FROM_DEVICE);
  1051. i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, true);
  1052. i2c_put_dma_safe_msg_buf(dma_rd_buf, (msgs + 1), true);
  1053. }
  1054. if (ret == 0) {
  1055. dev_dbg(i2c->dev, "addr: %x, transfer timeout\n", msgs->addr);
  1056. i2c_dump_register(i2c);
  1057. mtk_i2c_init_hw(i2c);
  1058. return -ETIMEDOUT;
  1059. }
  1060. if (i2c->irq_stat & (I2C_HS_NACKERR | I2C_ACKERR)) {
  1061. dev_dbg(i2c->dev, "addr: %x, transfer ACK error\n", msgs->addr);
  1062. mtk_i2c_init_hw(i2c);
  1063. return -ENXIO;
  1064. }
  1065. return 0;
  1066. }
  1067. static int mtk_i2c_transfer(struct i2c_adapter *adap,
  1068. struct i2c_msg msgs[], int num)
  1069. {
  1070. int ret;
  1071. int left_num = num;
  1072. struct mtk_i2c *i2c = i2c_get_adapdata(adap);
  1073. ret = clk_bulk_enable(I2C_MT65XX_CLK_MAX, i2c->clocks);
  1074. if (ret)
  1075. return ret;
  1076. i2c->auto_restart = i2c->dev_comp->auto_restart;
  1077. /* checking if we can skip restart and optimize using WRRD mode */
  1078. if (i2c->auto_restart && num == 2) {
  1079. if (!(msgs[0].flags & I2C_M_RD) && (msgs[1].flags & I2C_M_RD) &&
  1080. msgs[0].addr == msgs[1].addr) {
  1081. i2c->auto_restart = 0;
  1082. }
  1083. }
  1084. if (i2c->auto_restart && num >= 2 &&
  1085. i2c->speed_hz > I2C_MAX_FAST_MODE_PLUS_FREQ)
  1086. /* ignore the first restart irq after the master code,
  1087. * otherwise the first transfer will be discarded.
  1088. */
  1089. i2c->ignore_restart_irq = true;
  1090. else
  1091. i2c->ignore_restart_irq = false;
  1092. while (left_num--) {
  1093. if (!msgs->buf) {
  1094. dev_dbg(i2c->dev, "data buffer is NULL.\n");
  1095. ret = -EINVAL;
  1096. goto err_exit;
  1097. }
  1098. if (msgs->flags & I2C_M_RD)
  1099. i2c->op = I2C_MASTER_RD;
  1100. else
  1101. i2c->op = I2C_MASTER_WR;
  1102. if (!i2c->auto_restart) {
  1103. if (num > 1) {
  1104. /* combined two messages into one transaction */
  1105. i2c->op = I2C_MASTER_WRRD;
  1106. left_num--;
  1107. }
  1108. }
  1109. /* always use DMA mode. */
  1110. ret = mtk_i2c_do_transfer(i2c, msgs, num, left_num);
  1111. if (ret < 0)
  1112. goto err_exit;
  1113. msgs++;
  1114. }
  1115. /* the return value is number of executed messages */
  1116. ret = num;
  1117. err_exit:
  1118. clk_bulk_disable(I2C_MT65XX_CLK_MAX, i2c->clocks);
  1119. return ret;
  1120. }
  1121. static irqreturn_t mtk_i2c_irq(int irqno, void *dev_id)
  1122. {
  1123. struct mtk_i2c *i2c = dev_id;
  1124. u16 restart_flag = 0;
  1125. u16 intr_stat;
  1126. if (i2c->auto_restart)
  1127. restart_flag = I2C_RS_TRANSFER;
  1128. intr_stat = mtk_i2c_readw(i2c, OFFSET_INTR_STAT);
  1129. mtk_i2c_writew(i2c, intr_stat, OFFSET_INTR_STAT);
  1130. /*
  1131. * when occurs ack error, i2c controller generate two interrupts
  1132. * first is the ack error interrupt, then the complete interrupt
  1133. * i2c->irq_stat need keep the two interrupt value.
  1134. */
  1135. i2c->irq_stat |= intr_stat;
  1136. if (i2c->ignore_restart_irq && (i2c->irq_stat & restart_flag)) {
  1137. i2c->ignore_restart_irq = false;
  1138. i2c->irq_stat = 0;
  1139. mtk_i2c_writew(i2c, I2C_RS_MUL_CNFG | I2C_RS_MUL_TRIG |
  1140. I2C_TRANSAC_START, OFFSET_START);
  1141. } else {
  1142. if (i2c->irq_stat & (I2C_TRANSAC_COMP | restart_flag))
  1143. complete(&i2c->msg_complete);
  1144. }
  1145. return IRQ_HANDLED;
  1146. }
  1147. static u32 mtk_i2c_functionality(struct i2c_adapter *adap)
  1148. {
  1149. if (i2c_check_quirks(adap, I2C_AQ_NO_ZERO_LEN))
  1150. return I2C_FUNC_I2C |
  1151. (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
  1152. else
  1153. return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
  1154. }
  1155. static const struct i2c_algorithm mtk_i2c_algorithm = {
  1156. .master_xfer = mtk_i2c_transfer,
  1157. .functionality = mtk_i2c_functionality,
  1158. };
  1159. static int mtk_i2c_parse_dt(struct device_node *np, struct mtk_i2c *i2c)
  1160. {
  1161. int ret;
  1162. ret = of_property_read_u32(np, "clock-frequency", &i2c->speed_hz);
  1163. if (ret < 0)
  1164. i2c->speed_hz = I2C_MAX_STANDARD_MODE_FREQ;
  1165. ret = of_property_read_u32(np, "clock-div", &i2c->clk_src_div);
  1166. if (ret < 0)
  1167. return ret;
  1168. if (i2c->clk_src_div == 0)
  1169. return -EINVAL;
  1170. i2c->have_pmic = of_property_read_bool(np, "mediatek,have-pmic");
  1171. i2c->use_push_pull =
  1172. of_property_read_bool(np, "mediatek,use-push-pull");
  1173. i2c_parse_fw_timings(i2c->dev, &i2c->timing_info, true);
  1174. return 0;
  1175. }
  1176. static int mtk_i2c_probe(struct platform_device *pdev)
  1177. {
  1178. int ret = 0;
  1179. struct mtk_i2c *i2c;
  1180. struct resource *res;
  1181. int i, irq, speed_clk;
  1182. i2c = devm_kzalloc(&pdev->dev, sizeof(*i2c), GFP_KERNEL);
  1183. if (!i2c)
  1184. return -ENOMEM;
  1185. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  1186. i2c->base = devm_ioremap_resource(&pdev->dev, res);
  1187. if (IS_ERR(i2c->base))
  1188. return PTR_ERR(i2c->base);
  1189. res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
  1190. i2c->pdmabase = devm_ioremap_resource(&pdev->dev, res);
  1191. if (IS_ERR(i2c->pdmabase))
  1192. return PTR_ERR(i2c->pdmabase);
  1193. irq = platform_get_irq(pdev, 0);
  1194. if (irq < 0)
  1195. return irq;
  1196. init_completion(&i2c->msg_complete);
  1197. i2c->dev_comp = of_device_get_match_data(&pdev->dev);
  1198. i2c->adap.dev.of_node = pdev->dev.of_node;
  1199. i2c->dev = &pdev->dev;
  1200. i2c->adap.dev.parent = &pdev->dev;
  1201. i2c->adap.owner = THIS_MODULE;
  1202. i2c->adap.algo = &mtk_i2c_algorithm;
  1203. i2c->adap.quirks = i2c->dev_comp->quirks;
  1204. i2c->adap.timeout = 2 * HZ;
  1205. i2c->adap.retries = 1;
  1206. i2c->adap.bus_regulator = devm_regulator_get_optional(&pdev->dev, "vbus");
  1207. if (IS_ERR(i2c->adap.bus_regulator)) {
  1208. if (PTR_ERR(i2c->adap.bus_regulator) == -ENODEV)
  1209. i2c->adap.bus_regulator = NULL;
  1210. else
  1211. return PTR_ERR(i2c->adap.bus_regulator);
  1212. }
  1213. ret = mtk_i2c_parse_dt(pdev->dev.of_node, i2c);
  1214. if (ret)
  1215. return -EINVAL;
  1216. if (i2c->have_pmic && !i2c->dev_comp->pmic_i2c)
  1217. return -EINVAL;
  1218. /* Fill in clk-bulk IDs */
  1219. for (i = 0; i < I2C_MT65XX_CLK_MAX; i++)
  1220. i2c->clocks[i].id = i2c_mt65xx_clk_ids[i];
  1221. /* Get clocks one by one, some may be optional */
  1222. i2c->clocks[I2C_MT65XX_CLK_MAIN].clk = devm_clk_get(&pdev->dev, "main");
  1223. if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_MAIN].clk)) {
  1224. dev_err(&pdev->dev, "cannot get main clock\n");
  1225. return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_MAIN].clk);
  1226. }
  1227. i2c->clocks[I2C_MT65XX_CLK_DMA].clk = devm_clk_get(&pdev->dev, "dma");
  1228. if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_DMA].clk)) {
  1229. dev_err(&pdev->dev, "cannot get dma clock\n");
  1230. return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_DMA].clk);
  1231. }
  1232. i2c->clocks[I2C_MT65XX_CLK_ARB].clk = devm_clk_get_optional(&pdev->dev, "arb");
  1233. if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_ARB].clk))
  1234. return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_ARB].clk);
  1235. if (i2c->have_pmic) {
  1236. i2c->clocks[I2C_MT65XX_CLK_PMIC].clk = devm_clk_get(&pdev->dev, "pmic");
  1237. if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_PMIC].clk)) {
  1238. dev_err(&pdev->dev, "cannot get pmic clock\n");
  1239. return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_PMIC].clk);
  1240. }
  1241. speed_clk = I2C_MT65XX_CLK_PMIC;
  1242. } else {
  1243. i2c->clocks[I2C_MT65XX_CLK_PMIC].clk = NULL;
  1244. speed_clk = I2C_MT65XX_CLK_MAIN;
  1245. }
  1246. strscpy(i2c->adap.name, I2C_DRV_NAME, sizeof(i2c->adap.name));
  1247. ret = mtk_i2c_set_speed(i2c, clk_get_rate(i2c->clocks[speed_clk].clk));
  1248. if (ret) {
  1249. dev_err(&pdev->dev, "Failed to set the speed.\n");
  1250. return -EINVAL;
  1251. }
  1252. if (i2c->dev_comp->max_dma_support > 32) {
  1253. ret = dma_set_mask(&pdev->dev,
  1254. DMA_BIT_MASK(i2c->dev_comp->max_dma_support));
  1255. if (ret) {
  1256. dev_err(&pdev->dev, "dma_set_mask return error.\n");
  1257. return ret;
  1258. }
  1259. }
  1260. ret = clk_bulk_prepare_enable(I2C_MT65XX_CLK_MAX, i2c->clocks);
  1261. if (ret) {
  1262. dev_err(&pdev->dev, "clock enable failed!\n");
  1263. return ret;
  1264. }
  1265. mtk_i2c_init_hw(i2c);
  1266. clk_bulk_disable(I2C_MT65XX_CLK_MAX, i2c->clocks);
  1267. ret = devm_request_irq(&pdev->dev, irq, mtk_i2c_irq,
  1268. IRQF_NO_SUSPEND | IRQF_TRIGGER_NONE,
  1269. dev_name(&pdev->dev), i2c);
  1270. if (ret < 0) {
  1271. dev_err(&pdev->dev,
  1272. "Request I2C IRQ %d fail\n", irq);
  1273. goto err_bulk_unprepare;
  1274. }
  1275. i2c_set_adapdata(&i2c->adap, i2c);
  1276. ret = i2c_add_adapter(&i2c->adap);
  1277. if (ret)
  1278. goto err_bulk_unprepare;
  1279. platform_set_drvdata(pdev, i2c);
  1280. return 0;
  1281. err_bulk_unprepare:
  1282. clk_bulk_unprepare(I2C_MT65XX_CLK_MAX, i2c->clocks);
  1283. return ret;
  1284. }
  1285. static int mtk_i2c_remove(struct platform_device *pdev)
  1286. {
  1287. struct mtk_i2c *i2c = platform_get_drvdata(pdev);
  1288. i2c_del_adapter(&i2c->adap);
  1289. clk_bulk_unprepare(I2C_MT65XX_CLK_MAX, i2c->clocks);
  1290. return 0;
  1291. }
  1292. #ifdef CONFIG_PM_SLEEP
  1293. static int mtk_i2c_suspend_noirq(struct device *dev)
  1294. {
  1295. struct mtk_i2c *i2c = dev_get_drvdata(dev);
  1296. i2c_mark_adapter_suspended(&i2c->adap);
  1297. clk_bulk_unprepare(I2C_MT65XX_CLK_MAX, i2c->clocks);
  1298. return 0;
  1299. }
  1300. static int mtk_i2c_resume_noirq(struct device *dev)
  1301. {
  1302. int ret;
  1303. struct mtk_i2c *i2c = dev_get_drvdata(dev);
  1304. ret = clk_bulk_prepare_enable(I2C_MT65XX_CLK_MAX, i2c->clocks);
  1305. if (ret) {
  1306. dev_err(dev, "clock enable failed!\n");
  1307. return ret;
  1308. }
  1309. mtk_i2c_init_hw(i2c);
  1310. clk_bulk_disable(I2C_MT65XX_CLK_MAX, i2c->clocks);
  1311. i2c_mark_adapter_resumed(&i2c->adap);
  1312. return 0;
  1313. }
  1314. #endif
  1315. static const struct dev_pm_ops mtk_i2c_pm = {
  1316. SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(mtk_i2c_suspend_noirq,
  1317. mtk_i2c_resume_noirq)
  1318. };
  1319. static struct platform_driver mtk_i2c_driver = {
  1320. .probe = mtk_i2c_probe,
  1321. .remove = mtk_i2c_remove,
  1322. .driver = {
  1323. .name = I2C_DRV_NAME,
  1324. .pm = &mtk_i2c_pm,
  1325. .of_match_table = of_match_ptr(mtk_i2c_of_match),
  1326. },
  1327. };
  1328. module_platform_driver(mtk_i2c_driver);
  1329. MODULE_LICENSE("GPL v2");
  1330. MODULE_DESCRIPTION("MediaTek I2C Bus Driver");
  1331. MODULE_AUTHOR("Xudong Chen <[email protected]>");