i2c-ark.c 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111
  1. #include <linux/module.h>
  2. #include <linux/kernel.h>
  3. #include <linux/err.h>
  4. #include <linux/slab.h>
  5. #include <linux/stat.h>
  6. #include <linux/delay.h>
  7. #include <linux/i2c.h>
  8. #include <linux/init.h>
  9. #include <linux/interrupt.h>
  10. #include <linux/io.h>
  11. #include <linux/platform_device.h>
  12. #ifdef CONFIG_PM_RUNTIME
  13. #include <linux/pm_runtime.h>
  14. #endif
  15. #include <linux/clk.h>
  16. #include <linux/reset.h>
  17. #define DRIVER_NAME "ark_i2c"
  18. #define VERSION "Version 0.1"
  19. //#define CONFIG_I2C_ARK_DBG
  20. #ifdef CONFIG_I2C_ARK_DBG
  21. #define I2C_DBG(d, f, a...) \
  22. printk(KERN_INFO "I2CDBG: [%s:%d] "f, __FUNCTION__, __LINE__, ##a)
  23. #else /* !CONFIG_I2C_ARK_DBG */
  24. #define I2C_DBG(...)
  25. #endif /* CONFIG_I2C_ARK_DBG */
  26. enum i2c_speed {
  27. I2C_STANDARD = 0,
  28. I2C_FAST,
  29. I2C_HIGH,
  30. NUM_SPEEDS
  31. };
  32. enum ark_i2c_status {
  33. STATUS_IDLE = 0,
  34. STATUS_READ_START,
  35. STATUS_READ_IN_PROGRESS,
  36. STATUS_READ_SUCCESS,
  37. STATUS_WRITE_START,
  38. STATUS_WRITE_SUCCESS,
  39. STATUS_WRITE_IN_PROGRESS,
  40. STATUS_XFER_ABORT,
  41. STATUS_STANDBY
  42. };
  43. /* Platform data for arkmicro i2c controller */
  44. struct ark_i2c_platdata {
  45. unsigned int speed_mode;
  46. unsigned int hs_master_code;
  47. };
  48. struct i2c_xfer_info {
  49. int rw; //0:write 1:read
  50. u8 *buf;
  51. int send_left;
  52. int rev_left;
  53. int rx_thld;
  54. };
  55. struct ark_i2c_private {
  56. struct i2c_adapter adap;
  57. struct device *dev;
  58. void __iomem *base;
  59. int irq;
  60. int speed;
  61. int hs_mcode;
  62. struct completion complete;
  63. int abort;
  64. u8 *rx_buf;
  65. int rx_buf_len;
  66. volatile enum ark_i2c_status status;
  67. struct i2c_msg *msg;
  68. struct mutex lock;
  69. struct clk *clk;
  70. struct i2c_xfer_info xfer_info;
  71. struct reset_control *rst;
  72. };
  73. /* =========================================================================
  74. * Registers definition
  75. * =========================================================================
  76. */
  77. /* Control register */
  78. #define IC_CON 0x00
  79. #define SLV_DIS (1 << 6) /* Disable slave mode */
  80. #define RESTART (1 << 5) /* Send a Restart condition */
  81. #define ADDR_10BIT (1 << 4) /* 10-bit addressing */
  82. #define STANDARD_MODE (1 << 1) /* standard mode */
  83. #define FAST_MODE (2 << 1) /* fast mode */
  84. #define HIGH_MODE (3 << 1) /* high speed mode */
  85. #define MASTER_EN (1 << 0) /* Master mode */
  86. /* Target address register */
  87. #define IC_TAR 0x04
  88. #define IC_TAR_10BIT_ADDR (1 << 12) /* 10-bit addressing */
  89. #define IC_TAR_SPECIAL (1 << 11) /* Perform special I2C cmd */
  90. #define IC_TAR_GC_OR_START (1 << 10) /* 0: Gerneral Call Address */
  91. /* 1: START BYTE */
  92. /* Slave Address Register */
  93. #define IC_SAR 0x08 /* Not used in Master mode */
  94. /* High Speed Master Mode Code Address Register */
  95. #define IC_HS_MADDR 0x0c
  96. #define IC_HS_MAR 0xFF
  97. /* Rx/Tx Data Buffer and Command Register */
  98. #define IC_DATA_CMD 0x10
  99. #define IC_RD (1 << 8) /* 1: Read 0: Write */
  100. /* Standard Speed Clock SCL High Count Register */
  101. #define IC_SS_SCL_HCNT 0x14
  102. /* Standard Speed Clock SCL Low Count Register */
  103. #define IC_SS_SCL_LCNT 0x18
  104. /* Fast Speed Clock SCL High Count Register */
  105. #define IC_FS_SCL_HCNT 0x1c
  106. /* Fast Spedd Clock SCL Low Count Register */
  107. #define IC_FS_SCL_LCNT 0x20
  108. /* High Speed Clock SCL High Count Register */
  109. #define IC_HS_SCL_HCNT 0x24
  110. /* High Speed Clock SCL Low Count Register */
  111. #define IC_HS_SCL_LCNT 0x28
  112. /* Interrupt Status Register */
  113. #define IC_INTR_STAT 0x2c /* Read only */
  114. #define R_GEN_CALL (1 << 11)
  115. #define R_START_DET (1 << 10)
  116. #define R_STOP_DET (1 << 9)
  117. #define R_ACTIVITY (1 << 8)
  118. #define R_RX_DONE (1 << 7)
  119. #define R_TX_ABRT (1 << 6)
  120. #define R_RD_REQ (1 << 5)
  121. #define R_TX_EMPTY (1 << 4)
  122. #define R_TX_OVER (1 << 3)
  123. #define R_RX_FULL (1 << 2)
  124. #define R_RX_OVER (1 << 1)
  125. #define R_RX_UNDER (1 << 0)
  126. /* Interrupt Mask Register */
  127. #define IC_INTR_MASK 0x30 /* Read and Write */
  128. #define M_GEN_CALL (1 << 11)
  129. #define M_START_DET (1 << 10)
  130. #define M_STOP_DET (1 << 9)
  131. #define M_ACTIVITY (1 << 8)
  132. #define M_RX_DONE (1 << 7)
  133. #define M_TX_ABRT (1 << 6)
  134. #define M_RD_REQ (1 << 5)
  135. #define M_TX_EMPTY (1 << 4)
  136. #define M_TX_OVER (1 << 3)
  137. #define M_RX_FULL (1 << 2)
  138. #define M_RX_OVER (1 << 1)
  139. #define M_RX_UNDER (1 << 0)
  140. /* Raw Interrupt Status Register */
  141. #define IC_RAW_INTR_STAT 0x34 /* Read Only */
  142. #define GEN_CALL (1 << 11) /* General call */
  143. #define START_DET (1 << 10) /* (RE)START occurred */
  144. #define STOP_DET (1 << 9) /* STOP occurred */
  145. #define ACTIVITY (1 << 8) /* Bus busy */
  146. #define RX_DONE (1 << 7) /* Not used in Master mode */
  147. #define TX_ABRT (1 << 6) /* Transmit Abort */
  148. #define RD_REQ (1 << 5) /* Not used in Master mode */
  149. #define TX_EMPTY (1 << 4) /* TX FIFO <= threshold */
  150. #define TX_OVER (1 << 3) /* TX FIFO overflow */
  151. #define RX_FULL (1 << 2) /* RX FIFO >= threshold */
  152. #define RX_OVER (1 << 1) /* RX FIFO overflow */
  153. #define RX_UNDER (1 << 0) /* RX FIFO empty */
  154. /* Receive FIFO Threshold Register */
  155. #define IC_RX_TL 0x38
  156. /* Transmit FIFO Treshold Register */
  157. #define IC_TX_TL 0x3c
  158. /* Clear Combined and Individual Interrupt Register */
  159. #define IC_CLR_INTR 0x40
  160. #define CLR_INTR (1 << 0)
  161. /* Clear RX_UNDER Interrupt Register */
  162. #define IC_CLR_RX_UNDER 0x44
  163. #define CLR_RX_UNDER (1 << 0)
  164. /* Clear RX_OVER Interrupt Register */
  165. #define IC_CLR_RX_OVER 0x48
  166. #define CLR_RX_OVER (1 << 0)
  167. /* Clear TX_OVER Interrupt Register */
  168. #define IC_CLR_TX_OVER 0x4c
  169. #define CLR_TX_OVER (1 << 0)
  170. #define IC_CLR_RD_REQ 0x50
  171. /* Clear TX_ABRT Interrupt Register */
  172. #define IC_CLR_TX_ABRT 0x54
  173. #define CLR_TX_ABRT (1 << 0)
  174. #define IC_CLR_RX_DONE 0x58
  175. /* Clear ACTIVITY Interrupt Register */
  176. #define IC_CLR_ACTIVITY 0x5c
  177. #define CLR_ACTIVITY (1 << 0)
  178. /* Clear STOP_DET Interrupt Register */
  179. #define IC_CLR_STOP_DET 0x60
  180. #define CLR_STOP_DET (1 << 0)
  181. /* Clear START_DET Interrupt Register */
  182. #define IC_CLR_START_DET 0x64
  183. #define CLR_START_DET (1 << 0)
  184. /* Clear GEN_CALL Interrupt Register */
  185. #define IC_CLR_GEN_CALL 0x68
  186. #define CLR_GEN_CALL (1 << 0)
  187. /* Enable Register */
  188. #define IC_ENABLE 0x6c
  189. #define ENABLE (1 << 0)
  190. /* Status Register */
  191. #define IC_STATUS 0x70 /* Read Only */
  192. #define STAT_SLV_ACTIVITY (1 << 6) /* Slave not in idle */
  193. #define STAT_MST_ACTIVITY (1 << 5) /* Master not in idle */
  194. #define STAT_RFF (1 << 4) /* RX FIFO Full */
  195. #define STAT_RFNE (1 << 3) /* RX FIFO Not Empty */
  196. #define STAT_TFE (1 << 2) /* TX FIFO Empty */
  197. #define STAT_TFNF (1 << 1) /* TX FIFO Not Full */
  198. #define STAT_ACTIVITY (1 << 0) /* Activity Status */
  199. /* Transmit FIFO Level Register */
  200. #define IC_TXFLR 0x74 /* Read Only */
  201. #define TXFLR (1 << 0) /* TX FIFO level */
  202. /* Receive FIFO Level Register */
  203. #define IC_RXFLR 0x78 /* Read Only */
  204. #define RXFLR (1 << 0) /* RX FIFO level */
  205. /* Transmit Abort Source Register */
  206. #define IC_TX_ABRT_SOURCE 0x80
  207. #define ABRT_SLVRD_INTX (1 << 15)
  208. #define ABRT_SLV_ARBLOST (1 << 14)
  209. #define ABRT_SLVFLUSH_TXFIFO (1 << 13)
  210. #define ARB_LOST (1 << 12)
  211. #define ABRT_MASTER_DIS (1 << 11)
  212. #define ABRT_10B_RD_NORSTRT (1 << 10)
  213. #define ABRT_SBYTE_NORSTRT (1 << 9)
  214. #define ABRT_HS_NORSTRT (1 << 8)
  215. #define ABRT_SBYTE_ACKDET (1 << 7)
  216. #define ABRT_HS_ACKDET (1 << 6)
  217. #define ABRT_GCALL_READ (1 << 5)
  218. #define ABRT_GCALL_NOACK (1 << 4)
  219. #define ABRT_TXDATA_NOACK (1 << 3)
  220. #define ABRT_10ADDR2_NOACK (1 << 2)
  221. #define ABRT_10ADDR1_NOACK (1 << 1)
  222. #define ABRT_7B_ADDR_NOACK (1 << 0)
  223. /* Enable Status Register */
  224. #define IC_ENABLE_STATUS 0x9c
  225. #define IC_EN (1 << 0) /* I2C in an enabled state */
  226. /* Component Parameter Register 1*/
  227. #define IC_COMP_PARAM_1 0xf4
  228. #define APB_DATA_WIDTH (0x3 << 0)
  229. /* Minimum High/Low Period
  230. * IC_xCNT = ROUNDUP(MIN_SCL_xxx(ns) * IC_CLK(MHz))
  231. */
  232. #define SS_MIN_SCL_HIGH 4000
  233. #define SS_MIN_SCL_LOW 4700
  234. #define FS_MIN_SCL_HIGH 600
  235. #define FS_MIN_SCL_LOW 1300
  236. #define HS_MIN_SCL_HIGH_100PF 60
  237. #define HS_MIN_SCL_LOW_100PF 120
  238. #define I2C_FIFO_DEPTH 8
  239. /* =========================================================================
  240. * Functions
  241. * =========================================================================
  242. */
  243. static int ark_i2c_disable(struct i2c_adapter *adap)
  244. {
  245. struct ark_i2c_private *i2c = i2c_get_adapdata(adap);
  246. int err = 0;
  247. int count = 0;
  248. int ret1, ret2;
  249. static const u16 delay[NUM_SPEEDS] = {100, 25, 3};
  250. /* Set IC_ENABLE to 0 */
  251. writel(0, i2c->base + IC_ENABLE);
  252. /* Check if device is busy */
  253. I2C_DBG(&adap->dev, "i2c disable\n");
  254. while ((ret1 = readl(i2c->base + IC_ENABLE_STATUS) & 0x1)
  255. || (ret2 = readl(i2c->base + IC_STATUS) & 0x1)) {
  256. udelay(delay[i2c->speed]);
  257. writel(0, i2c->base + IC_ENABLE);
  258. I2C_DBG(&adap->dev, "i2c is busy, count is %d speed %d\n",
  259. count, i2c->speed);
  260. if (count++ > 10) {
  261. err = -ETIMEDOUT;
  262. break;
  263. }
  264. }
  265. /* Clear all interrupts */
  266. readl(i2c->base + IC_CLR_INTR);
  267. readl(i2c->base + IC_CLR_STOP_DET);
  268. readl(i2c->base + IC_CLR_START_DET);
  269. readl(i2c->base + IC_CLR_ACTIVITY);
  270. readl(i2c->base + IC_CLR_TX_ABRT);
  271. readl(i2c->base + IC_CLR_RX_OVER);
  272. readl(i2c->base + IC_CLR_RX_UNDER);
  273. readl(i2c->base + IC_CLR_TX_OVER);
  274. readl(i2c->base + IC_CLR_RX_DONE);
  275. readl(i2c->base + IC_CLR_GEN_CALL);
  276. /* Disable all interupts */
  277. writel(0x0000, i2c->base + IC_INTR_MASK);
  278. return err;
  279. }
  280. static const unsigned short _hcnt[NUM_SPEEDS] = {
  281. 500, 120, 14
  282. };
  283. static const unsigned short _lcnt[NUM_SPEEDS] = {
  284. 570, 150, 18
  285. };
  286. static int ark_i2c_hwinit(struct ark_i2c_private *i2c)
  287. {
  288. int err;
  289. unsigned int hcnt, lcnt;
  290. unsigned long i2c_clk = clk_get_rate(i2c->clk) / 1000000;
  291. /* ASIC IC_CLK, 24MHz
  292. * FPGA IC_CLK, system clock
  293. */
  294. hcnt = (_hcnt[i2c->speed] * i2c_clk) / 100;
  295. lcnt = (_lcnt[i2c->speed] * i2c_clk) / 100;
  296. //printk("i2c clk %lu hcnt %u lcnt %u\n", i2c_clk, hcnt, lcnt);
  297. /* Disable i2c first */
  298. err = ark_i2c_disable(&i2c->adap);
  299. if (err)
  300. return err;
  301. /*
  302. * Setup clock frequency and speed mode
  303. * Enable restart condition,
  304. * enable master FSM, disable slave FSM,
  305. * use target address when initiating transfer
  306. */
  307. writel((i2c->speed + 1) << 1 | SLV_DIS | RESTART | MASTER_EN,
  308. i2c->base + IC_CON);
  309. writel(hcnt, i2c->base + (IC_SS_SCL_HCNT + (i2c->speed << 3)));
  310. writel(lcnt, i2c->base + (IC_SS_SCL_LCNT + (i2c->speed << 3)));
  311. /* Set SDA phase delay */
  312. writel(0x30, i2c->base + 0x84);
  313. /* Set tranmit & receive FIFO threshold to zero */
  314. writel(I2C_FIFO_DEPTH / 2, i2c->base + IC_RX_TL);
  315. writel(I2C_FIFO_DEPTH / 2, i2c->base + IC_TX_TL);
  316. return 0;
  317. }
  318. static void ark_i2c_reset(struct ark_i2c_private *i2c)
  319. {
  320. reset_control_assert(i2c->rst);
  321. udelay(10);
  322. reset_control_deassert(i2c->rst);
  323. }
  324. static u32 ark_i2c_func(struct i2c_adapter *adapter)
  325. {
  326. return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SMBUS_EMUL;
  327. }
  328. static inline bool ark_i2c_address_neq(
  329. const struct i2c_msg *p1, const struct i2c_msg *p2)
  330. {
  331. if (p1->addr != p2->addr)
  332. return 1;
  333. if ((p1->flags ^ p2->flags) & I2C_M_TEN)
  334. return 1;
  335. return 0;
  336. }
  337. static void ark_i2c_abort(struct ark_i2c_private *i2c)
  338. {
  339. /* Read about source register */
  340. int abort = i2c->abort;
  341. struct i2c_adapter *adap = &i2c->adap;
  342. /* Single transfer error check:
  343. * According to databook, TX/RX FIFOs would be flushed when
  344. * the abort interrupt occurred.
  345. */
  346. if (abort & ABRT_MASTER_DIS)
  347. dev_err(&adap->dev,
  348. "initiate master operation with master mode disabled.\n");
  349. if (abort & ABRT_10B_RD_NORSTRT)
  350. dev_err(&adap->dev,
  351. "RESTART disabled and master sent READ cmd in 10-bit addressing.\n");
  352. if (abort & ABRT_SBYTE_NORSTRT) {
  353. dev_err(&adap->dev,
  354. "RESTART disabled and user is trying to send START byte.\n");
  355. writel(~ABRT_SBYTE_NORSTRT, i2c->base + IC_TX_ABRT_SOURCE);
  356. writel(RESTART, i2c->base + IC_CON);
  357. writel(~IC_TAR_SPECIAL, i2c->base + IC_TAR);
  358. }
  359. if (abort & ABRT_SBYTE_ACKDET)
  360. dev_err(&adap->dev,
  361. "START byte was not acknowledged.\n");
  362. if (abort & ABRT_TXDATA_NOACK)
  363. I2C_DBG(&adap->dev,
  364. "No acknowledgement received from slave.\n");
  365. if (abort & ABRT_10ADDR2_NOACK)
  366. I2C_DBG(&adap->dev,
  367. "The 2nd address byte of the 10-bit address was not acknowledged.\n");
  368. if (abort & ABRT_10ADDR1_NOACK)
  369. I2C_DBG(&adap->dev,
  370. "The 1st address byte of 10-bit address was not acknowledged.\n");
  371. if (abort & ABRT_7B_ADDR_NOACK)
  372. I2C_DBG(&adap->dev,
  373. "I2C slave device not acknowledged.\n");
  374. /* Clear TX_ABRT bit */
  375. readl(i2c->base + IC_CLR_TX_ABRT);
  376. i2c->status = STATUS_XFER_ABORT;
  377. }
  378. static int xfer_read(struct i2c_adapter *adap, unsigned char *buf, int length)
  379. {
  380. struct ark_i2c_private *i2c = i2c_get_adapdata(adap);
  381. int num;
  382. int err;
  383. int thld;
  384. /*if (length >= 256) {
  385. dev_err(&adap->dev,
  386. "I2C FIFO cannot support larger than 256 bytes\n");
  387. return -EMSGSIZE;
  388. }*/
  389. reinit_completion(&i2c->complete);
  390. thld = length - 1;
  391. if(thld > I2C_FIFO_DEPTH / 2) thld = I2C_FIFO_DEPTH / 2;
  392. writel(thld, i2c->base + IC_RX_TL);
  393. readl(i2c->base + IC_CLR_INTR);
  394. i2c->status = STATUS_READ_START;
  395. i2c->xfer_info.rw = 1;
  396. i2c->xfer_info.buf = buf;
  397. i2c->xfer_info.rx_thld = thld;
  398. num = length;
  399. if(num > I2C_FIFO_DEPTH) num = I2C_FIFO_DEPTH;
  400. i2c->xfer_info.send_left = length - num;
  401. i2c->xfer_info.rev_left = length;
  402. while (num--)
  403. writel(IC_RD, i2c->base + IC_DATA_CMD);
  404. writel(0x0044, i2c->base + IC_INTR_MASK);
  405. err = wait_for_completion_interruptible_timeout(&i2c->complete, adap->timeout);
  406. if (!err) {
  407. dev_err(&adap->dev, "Timeout for ACK from I2C slave device\n");
  408. ark_i2c_hwinit(i2c);
  409. return -ETIMEDOUT;
  410. }
  411. if (i2c->status == STATUS_READ_SUCCESS) {
  412. struct timeval tv1, tv2, tv3;
  413. do_gettimeofday(&tv1);
  414. do_gettimeofday(&tv2);
  415. while(i2c->xfer_info.rev_left) {
  416. u32 status = readl(i2c->base + IC_STATUS);
  417. if(status & STAT_RFNE) {
  418. *i2c->xfer_info.buf++ = readl(i2c->base + IC_DATA_CMD);
  419. i2c->xfer_info.rev_left--;
  420. } else {
  421. u32 interval;
  422. do_gettimeofday(&tv3);
  423. interval = (tv3.tv_sec - tv1.tv_sec) * 1000000 + tv3.tv_usec - tv1.tv_usec;
  424. if(interval > 50000)
  425. break;
  426. interval = (tv3.tv_sec - tv2.tv_sec) * 1000000 + tv3.tv_usec - tv2.tv_usec;
  427. if (interval > 500) {
  428. cpu_relax();
  429. do_gettimeofday(&tv2);
  430. }
  431. }
  432. }
  433. if (i2c->xfer_info.rev_left) {
  434. printk(KERN_INFO "rev timeout.\n");
  435. return -EIO;
  436. } else {
  437. return 0;
  438. }
  439. } else {
  440. if (i2c->status == STATUS_XFER_ABORT) {
  441. //printk(KERN_INFO "i2c tx abort.\n");
  442. ark_i2c_reset(i2c);
  443. ark_i2c_hwinit(i2c);
  444. return -EAGAIN;
  445. }
  446. return -EIO;
  447. }
  448. }
  449. static int xfer_write(struct i2c_adapter *adap, unsigned char *buf, int length)
  450. {
  451. struct ark_i2c_private *i2c = i2c_get_adapdata(adap);
  452. int err;
  453. u32 val;
  454. int timeout = 500;
  455. /*if (length >= 256) {
  456. dev_err(&adap->dev,
  457. "I2C FIFO cannot support larger than 256 bytes\n");
  458. return -EMSGSIZE;
  459. }*/
  460. reinit_completion(&i2c->complete);
  461. /* XXXJACK - set TX threshold to length - 1 */
  462. //writel(length - 1, i2c->base + IC_TX_TL);
  463. readl(i2c->base + IC_CLR_INTR);
  464. i2c->xfer_info.rw = 0;
  465. i2c->xfer_info.buf = buf;
  466. i2c->xfer_info.send_left = length;
  467. i2c->status = STATUS_WRITE_START;
  468. writel(0x0050, i2c->base + IC_INTR_MASK);
  469. err = wait_for_completion_interruptible_timeout(&i2c->complete, adap->timeout);
  470. if (!err) {
  471. dev_err(&adap->dev, "Timeout for I2C write\n");
  472. ark_i2c_hwinit(i2c);
  473. return -ETIMEDOUT;
  474. } else {
  475. if (i2c->status != STATUS_WRITE_SUCCESS) {
  476. dev_err(&adap->dev, "I2C write status error i2c->status=%d.\n", i2c->status);
  477. if (i2c->status == STATUS_XFER_ABORT) {
  478. printk(KERN_INFO "i2c tx abort 1.\n");
  479. ark_i2c_reset(i2c);
  480. ark_i2c_hwinit(i2c);
  481. return -EAGAIN;
  482. }
  483. return -EIO;
  484. }
  485. }
  486. writel(0x40, i2c->base + IC_INTR_MASK);
  487. //udelay(100);
  488. while (timeout--) {
  489. if (i2c->status == STATUS_XFER_ABORT) {
  490. printk(KERN_INFO "i2c tx abort 2.\n");
  491. ark_i2c_reset(i2c);
  492. ark_i2c_hwinit(i2c);
  493. return -EIO;
  494. }
  495. val = readl(i2c->base + IC_STATUS);
  496. if ((val & STAT_TFE) && !(val & STAT_MST_ACTIVITY))
  497. break;
  498. udelay(100);
  499. }
  500. if (timeout <= 0) {
  501. printk(KERN_INFO "wait i2c idle timeout.\n");
  502. ark_i2c_reset(i2c);
  503. ark_i2c_hwinit(i2c);
  504. return -EIO;
  505. }
  506. return 0;
  507. }
  508. static int ark_i2c_setup(struct i2c_adapter *adap, struct i2c_msg *pmsg)
  509. {
  510. struct ark_i2c_private *i2c = i2c_get_adapdata(adap);
  511. int err;
  512. u32 reg;
  513. u32 bit_mask;
  514. u32 mode;
  515. /* Disable device first */
  516. err = ark_i2c_disable(adap);
  517. if (err) {
  518. dev_err(&adap->dev, "Cannot disable i2c controller, timeout\n");
  519. return err;
  520. }
  521. mode = (1 + i2c->speed) << 1;
  522. /* set the speed mode */
  523. reg = readl(i2c->base + IC_CON);
  524. if ((reg & 0x06) != mode) {
  525. I2C_DBG(&adap->dev, "set mode %d\n", i2c->speed);
  526. writel((reg & ~0x6) | mode, i2c->base + IC_CON);
  527. }
  528. /* use 7-bit addressing */
  529. if (pmsg->flags & I2C_M_TEN) {
  530. if ((reg & ADDR_10BIT) != ADDR_10BIT) {
  531. I2C_DBG(&adap->dev, "set i2c 10 bit address mode\n");
  532. writel(reg | ADDR_10BIT, i2c->base + IC_CON);
  533. }
  534. } else {
  535. if ((reg & ADDR_10BIT) != 0x0) {
  536. I2C_DBG(&adap->dev, "set i2c 7 bit address mode\n");
  537. writel(reg & ~ADDR_10BIT, i2c->base + IC_CON);
  538. }
  539. }
  540. /* enable restart conditions */
  541. if (pmsg->flags & I2C_M_NOSTART) {
  542. if ((reg & RESTART) != RESTART) {
  543. I2C_DBG(&adap->dev, "enable restart conditions\n");
  544. writel(reg | RESTART, i2c->base + IC_CON);
  545. }
  546. } else {
  547. if ((reg & RESTART) != 0) {
  548. I2C_DBG(&adap->dev, "enable restart conditions\n");
  549. writel(reg & ~RESTART, i2c->base + IC_CON);
  550. }
  551. }
  552. /* enable master FSM */
  553. reg = readl(i2c->base + IC_CON);
  554. I2C_DBG(&adap->dev, "ic_con reg is 0x%x\n", reg);
  555. writel(reg | MASTER_EN, i2c->base + IC_CON);
  556. if ((reg & SLV_DIS) != SLV_DIS) {
  557. I2C_DBG(&adap->dev, "enable master FSM\n");
  558. writel(reg | SLV_DIS, i2c->base + IC_CON);
  559. I2C_DBG(&adap->dev, "ic_con reg is 0x%x\n", reg);
  560. }
  561. /* use target address when initiating transfer */
  562. reg = readl(i2c->base + IC_TAR);
  563. bit_mask = IC_TAR_SPECIAL | IC_TAR_GC_OR_START;
  564. if ((reg & bit_mask) != 0x0) {
  565. I2C_DBG(&adap->dev,
  566. "WR: use target address when intiating transfer, i2c_tx_target\n");
  567. writel(reg & ~bit_mask, i2c->base + IC_TAR);
  568. }
  569. /* set target address to the I2C slave address */
  570. I2C_DBG(&adap->dev,
  571. "set target address to the I2C slave address, addr is %x\n",
  572. pmsg->addr);
  573. writel(pmsg->addr | (pmsg->flags & I2C_M_TEN ? IC_TAR_10BIT_ADDR : 0),
  574. i2c->base + IC_TAR);
  575. /* set master code for high-speed mode */
  576. if (i2c->speed == I2C_HIGH) {
  577. writel((i2c->hs_mcode & IC_HS_MAR), i2c->base + IC_HS_MADDR);
  578. }
  579. /* Enable I2C controller */
  580. writel(ENABLE, i2c->base + IC_ENABLE);
  581. return 0;
  582. }
  583. static int ark_i2c_xfer(
  584. struct i2c_adapter *adap, struct i2c_msg *pmsg, int num)
  585. {
  586. struct ark_i2c_private *i2c = i2c_get_adapdata(adap);
  587. int i, err = 0;
  588. /* if number of messages equal 0*/
  589. if (num == 0)
  590. return 0;
  591. #ifdef CONFIG_PM_RUNTIME
  592. pm_runtime_get(i2c->dev);
  593. #endif
  594. mutex_lock(&i2c->lock);
  595. I2C_DBG(&adap->dev, "ark_i2c_xfer, process %d msg(s)\n", num);
  596. I2C_DBG(&adap->dev, "slave address is %x\n", pmsg->addr);
  597. if (i2c->status != STATUS_IDLE && i2c->status != STATUS_XFER_ABORT) {
  598. dev_err(&adap->dev, "Adapter %d in transfer/standby\n", adap->nr);
  599. mutex_unlock(&i2c->lock);
  600. #ifdef CONFIG_PM_RUNTIME
  601. pm_runtime_put(i2c->dev);
  602. #endif
  603. return -1;
  604. }
  605. for (i = 1; i < num; i++) {
  606. /* Message address equal? */
  607. if (unlikely(ark_i2c_address_neq(&pmsg[0], &pmsg[i]))) {
  608. dev_err(&adap->dev, "Invalid address in msg[%d]\n", i);
  609. mutex_unlock(&i2c->lock);
  610. #ifdef CONFIG_PM_RUNTIME
  611. pm_runtime_put(i2c->dev);
  612. #endif
  613. return -EINVAL;
  614. }
  615. }
  616. if (ark_i2c_setup(adap, pmsg)) {
  617. mutex_unlock(&i2c->lock);
  618. #ifdef CONFIG_PM_RUNTIME
  619. pm_runtime_put(i2c->dev);
  620. #endif
  621. return -EINVAL;
  622. }
  623. for (i = 0; i < num; i++) {
  624. i2c->msg = pmsg;
  625. i2c->status = STATUS_IDLE;
  626. /* Read or Write */
  627. if (pmsg->flags & I2C_M_RD) {
  628. I2C_DBG(&adap->dev, "I2C_M_RD\n");
  629. err = xfer_read(adap, pmsg->buf, pmsg->len);
  630. } else {
  631. I2C_DBG(&adap->dev, "I2C_M_WR\n");
  632. err = xfer_write(adap, pmsg->buf, pmsg->len);
  633. }
  634. if (err < 0)
  635. break;
  636. I2C_DBG(&adap->dev, "msg[%d] transfer complete\n", i);
  637. pmsg++; /* next message */
  638. }
  639. /* Mask interrupts */
  640. writel(0x0000, i2c->base + IC_INTR_MASK);
  641. /* Clear all interrupts */
  642. readl(i2c->base + IC_CLR_INTR);
  643. udelay(100);
  644. i2c->status = STATUS_IDLE;
  645. mutex_unlock(&i2c->lock);
  646. #ifdef CONFIG_PM_RUNTIME
  647. pm_runtime_put(i2c->dev);
  648. #endif
  649. return err ? err : i;
  650. }
  651. #ifdef CONFIG_PM_RUNTIME
  652. static int ark_i2c_runtime_suspend(struct device *dev)
  653. {
  654. struct platform_device *pdev = to_platform_device(dev);
  655. struct ark_i2c_private *i2c = platform_get_drvdata(pdev);
  656. struct i2c_adapter *adap = to_i2c_adapter(dev);
  657. if (i2c->status != STATUS_IDLE)
  658. return -1;
  659. ark_i2c_disable(adap);
  660. i2c->status = STATUS_STANDBY;
  661. return 0;
  662. }
  663. static int ark_i2c_runtime_resume(struct device *dev)
  664. {
  665. struct platform_device *pdev = to_platform_device(dev);
  666. struct ark_i2c_private *i2c = platform_get_drvdata(pdev);
  667. if (i2c->status != STATUS_STANDBY)
  668. return 0;
  669. i2c->status = STATUS_IDLE;
  670. ark_i2c_hwinit(i2c);
  671. return 0;
  672. }
  673. #endif /* CONFIG_PM_RUNTIME */
  674. static int i2c_isr_read(struct ark_i2c_private *i2c)
  675. {
  676. u32 status;
  677. u32 tx_level, rx_level;
  678. int wnum, rnum;
  679. int i;
  680. if (!(i2c->xfer_info.rw == 1 && i2c->xfer_info.buf != NULL))
  681. {
  682. dev_err(i2c->dev, "i2c_isr_read invalid parameter.\n");
  683. return 1;
  684. }
  685. status = readl(i2c->base + IC_STATUS);
  686. tx_level = readl(i2c->base + IC_TXFLR);
  687. rx_level = readl(i2c->base + IC_RXFLR);
  688. if(tx_level == 0 && !(status & STAT_TFE)) tx_level = I2C_FIFO_DEPTH;
  689. if(rx_level == 0 && (status & STAT_RFF)) rx_level = I2C_FIFO_DEPTH;
  690. wnum = I2C_FIFO_DEPTH - tx_level;
  691. if(i2c->xfer_info.send_left < wnum) wnum = i2c->xfer_info.send_left;
  692. for(i = 0; i < wnum; i++)
  693. writel(IC_RD, i2c->base + IC_DATA_CMD);
  694. i2c->xfer_info.send_left -= wnum;
  695. rnum = rx_level;
  696. for(i = 0; i < rnum; i++)
  697. *i2c->xfer_info.buf++ = readl(i2c->base + IC_DATA_CMD);
  698. i2c->xfer_info.rev_left -= rnum;
  699. if(i2c->xfer_info.rev_left <= i2c->xfer_info.rx_thld)
  700. {
  701. i2c->status = STATUS_READ_SUCCESS;
  702. return 0;
  703. }
  704. i2c->status = STATUS_READ_IN_PROGRESS;
  705. return 1;
  706. }
  707. static int i2c_isr_write(struct ark_i2c_private *i2c)
  708. {
  709. u32 status;
  710. u32 tx_level;
  711. int wnum;
  712. int i;
  713. if(!(i2c->xfer_info.rw == 0 && i2c->xfer_info.buf != NULL))
  714. {
  715. dev_err(i2c->dev, "i2c_isr_write invalid parameter.\n");
  716. return 1;
  717. }
  718. if(i2c->xfer_info.send_left == 0 && i2c->status == STATUS_WRITE_IN_PROGRESS)
  719. {
  720. i2c->status = STATUS_WRITE_SUCCESS;
  721. return 0;
  722. }
  723. status = readl(i2c->base + IC_STATUS);
  724. tx_level = readl(i2c->base + IC_TXFLR);
  725. if(tx_level == 0 && !(status & STAT_TFE)) tx_level = I2C_FIFO_DEPTH;
  726. wnum = I2C_FIFO_DEPTH - tx_level;
  727. if(i2c->xfer_info.send_left < wnum) wnum = i2c->xfer_info.send_left;
  728. for(i = 0; i < wnum; i++)
  729. writel((u16)(*(i2c->xfer_info.buf + i)), i2c->base + IC_DATA_CMD);
  730. i2c->xfer_info.buf += wnum;
  731. i2c->xfer_info.send_left -= wnum;
  732. i2c->status = STATUS_WRITE_IN_PROGRESS;
  733. return 1;
  734. }
  735. static irqreturn_t ark_i2c_isr(int this_irq, void *dev)
  736. {
  737. struct ark_i2c_private *i2c = dev;
  738. u32 stat;
  739. #ifdef CONFIG_PM_RUNTIME
  740. if (pm_runtime_suspended(i2c->dev))
  741. return IRQ_NONE;
  742. #endif
  743. stat = readl(i2c->base + IC_INTR_STAT);
  744. if (!stat)
  745. return IRQ_NONE;
  746. //I2C_DBG(&i2c->adap.dev, "%s, stat = 0x%x\n", __func__, stat);
  747. if (i2c->status == STATUS_IDLE || i2c->status == STATUS_STANDBY)
  748. goto err;
  749. if (stat & TX_ABRT) {
  750. i2c->abort = readl(i2c->base + IC_TX_ABRT_SOURCE);
  751. printk(KERN_INFO "abort=0x%x.\n", i2c->abort);
  752. readl(i2c->base + IC_CLR_INTR);
  753. ark_i2c_abort(i2c);
  754. goto exit;
  755. }
  756. if (stat & RX_FULL) {
  757. if(i2c_isr_read(i2c)) goto err;
  758. }
  759. if (stat & TX_EMPTY) {
  760. if(i2c_isr_write(i2c)) goto err;
  761. }
  762. exit:
  763. if (i2c->status == STATUS_READ_SUCCESS ||
  764. i2c->status == STATUS_WRITE_SUCCESS ||
  765. i2c->status == STATUS_XFER_ABORT) {
  766. /* Mask interrupts */
  767. writel(0, i2c->base + IC_INTR_MASK);
  768. complete(&i2c->complete);
  769. }
  770. err:
  771. return IRQ_HANDLED;
  772. }
  773. static struct i2c_algorithm ark_i2c_algorithm = {
  774. .master_xfer = ark_i2c_xfer,
  775. .functionality = ark_i2c_func,
  776. };
  777. static const struct i2c_adapter_quirks ark_i2c_quirks = {
  778. .flags = I2C_AQ_NO_ZERO_LEN,
  779. };
  780. #ifdef CONFIG_PM_RUNTIME
  781. static const struct dev_pm_ops ark_i2c_pm_ops = {
  782. .runtime_suspend = ark_i2c_runtime_suspend,
  783. .runtime_resume = ark_i2c_runtime_resume,
  784. };
  785. #define ARK_I2C_PM_OPS (&ark_i2c_pm_ops)
  786. #else /* !CONFIG_PM_RUNTIME */
  787. #define ARK_I2C_PM_OPS NULL
  788. #endif /* CONFIG_PM_RUNTIME */
  789. static int ark_i2c_probe(struct platform_device *pdev)
  790. {
  791. struct ark_i2c_private *i2c;
  792. struct resource *mem;
  793. int err, irq;
  794. void __iomem *base = NULL;
  795. struct clk *i2c_clk;
  796. struct reset_control *rst;
  797. u32 speed;
  798. I2C_DBG(&pdev->dev, "Get into probe function for I2C\n");
  799. mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  800. if (!mem) {
  801. dev_err(&pdev->dev, "no mem resource?\n");
  802. return -EINVAL;
  803. }
  804. irq = platform_get_irq(pdev, 0);
  805. if (irq < 0) {
  806. dev_err(&pdev->dev, "no irq resource?\n");
  807. return irq; /* -ENXIO */
  808. }
  809. base = devm_ioremap_resource(&pdev->dev, mem);
  810. if (base == NULL) {
  811. dev_err(&pdev->dev, "failure mapping io resources\n");
  812. err = -EBUSY;
  813. goto fail;
  814. }
  815. i2c_clk = devm_clk_get(&pdev->dev, NULL);
  816. if (IS_ERR(i2c_clk)) {
  817. err = PTR_ERR(i2c_clk);
  818. goto fail;
  819. }
  820. rst = devm_reset_control_get(&pdev->dev, NULL);
  821. if (IS_ERR(rst)) {
  822. dev_err(&pdev->dev,
  823. "missing or invalid reset controller device tree entry\n");
  824. err = PTR_ERR(rst);
  825. goto fail;
  826. }
  827. /* Allocate the per-device data structure, ark_i2c_private */
  828. i2c = devm_kzalloc(&pdev->dev, sizeof(struct ark_i2c_private), GFP_KERNEL);
  829. if (i2c == NULL) {
  830. dev_err(&pdev->dev, "can't allocate interface\n");
  831. err = -ENOMEM;
  832. goto fail;
  833. }
  834. /* Initialize struct members */
  835. strlcpy(i2c->adap.name, "ArkMicro I2C adapter", sizeof(i2c->adap.name));
  836. i2c->adap.owner = THIS_MODULE;
  837. i2c->adap.class = I2C_CLASS_DEPRECATED;
  838. i2c->adap.retries = 3;
  839. i2c->adap.timeout = 3 * HZ;
  840. i2c->adap.algo = &ark_i2c_algorithm;
  841. i2c->adap.quirks = &ark_i2c_quirks;
  842. i2c->adap.nr = pdev->id;
  843. i2c->adap.dev.parent = &pdev->dev;
  844. i2c->adap.dev.of_node = pdev->dev.of_node;
  845. i2c->dev = &pdev->dev;
  846. i2c->base = base;
  847. i2c->irq = irq;
  848. i2c->rst = rst;
  849. i2c->speed = I2C_STANDARD;
  850. i2c->abort = 0;
  851. i2c->rx_buf_len = 0;
  852. i2c->status = STATUS_IDLE;
  853. platform_set_drvdata(pdev, i2c);
  854. i2c_set_adapdata(&i2c->adap, i2c);
  855. i2c->clk = i2c_clk;
  856. if(!of_property_read_u32(pdev->dev.of_node, "speed-mode", &speed)) {
  857. if(speed < NUM_SPEEDS)
  858. i2c->speed = speed;
  859. }
  860. /* Initialize i2c controller */
  861. err = ark_i2c_hwinit(i2c);
  862. if (err < 0) {
  863. dev_err(&pdev->dev, "I2C interface initialization failed\n");
  864. goto fail;
  865. }
  866. mutex_init(&i2c->lock);
  867. init_completion(&i2c->complete);
  868. /* Clear all interrupts */
  869. readl(i2c->base + IC_CLR_INTR);
  870. writel(0x0000, i2c->base + IC_INTR_MASK);
  871. err = devm_request_irq(&pdev->dev, i2c->irq, ark_i2c_isr, IRQF_SHARED, pdev->name, i2c);
  872. if (err) {
  873. dev_err(&pdev->dev, "Failed to request IRQ %d for I2C controller: "
  874. "%s\n", i2c->irq, pdev->name);
  875. goto fail;
  876. }
  877. /* Adapter registration */
  878. err = i2c_add_numbered_adapter(&i2c->adap);
  879. if (err) {
  880. dev_err(&pdev->dev, "Adapter %s registration failed\n",
  881. i2c->adap.name);
  882. goto fail;
  883. }
  884. I2C_DBG(&pdev->dev, "ArkMicro I2C bus %d driver bind success.\n",
  885. pdev->id);
  886. #ifdef CONFIG_PM_RUNTIME
  887. pm_runtime_enable(&pdev->dev);
  888. #endif
  889. return 0;
  890. fail:
  891. return err;
  892. }
  893. static int ark_i2c_remove(struct platform_device *pdev)
  894. {
  895. struct ark_i2c_private *i2c = platform_get_drvdata(pdev);
  896. ark_i2c_disable(&i2c->adap);
  897. i2c_del_adapter(&i2c->adap);
  898. return 0;
  899. }
  900. static const struct of_device_id ark_i2c_dt_ids[] = {
  901. {
  902. .compatible = "arkmicro,ark-i2c",
  903. } , {
  904. /* sentinel */
  905. }
  906. };
  907. MODULE_DEVICE_TABLE(of, ark_i2c_dt_ids);
  908. static struct platform_driver ark_i2c_driver = {
  909. .driver = {
  910. .name = DRIVER_NAME,
  911. .of_match_table = of_match_ptr(ark_i2c_dt_ids),
  912. .pm = ARK_I2C_PM_OPS,
  913. },
  914. .probe = ark_i2c_probe,
  915. .remove = ark_i2c_remove,
  916. };
  917. static int __init ark_i2c_init_driver(void)
  918. {
  919. return platform_driver_register(&ark_i2c_driver);
  920. }
  921. static void __exit ark_i2c_exit_driver(void)
  922. {
  923. platform_driver_unregister(&ark_i2c_driver);
  924. }
  925. subsys_initcall(ark_i2c_init_driver);
  926. module_exit(ark_i2c_exit_driver);
  927. MODULE_AUTHOR("Sim");
  928. MODULE_DESCRIPTION("I2C driver for Ark Platform");
  929. MODULE_LICENSE("GPL");
  930. MODULE_VERSION(VERSION);