i2c-dw.c 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include "FreeRTOS.h"
  4. #include "chip.h"
  5. #include "board.h"
  6. #include "errno.h"
  7. typedef struct {
  8. uint32_t base;
  9. int irqn;
  10. int software_n;
  11. int id;
  12. uint32_t default_freq;
  13. int slave_mode_en;
  14. }dw_obj_t;
  15. static const dw_obj_t dw_i2c_obj[2] = {
  16. {
  17. .id = 0,
  18. .base = REGS_IIC0_BASE,
  19. .irqn = I2C0_IRQn,
  20. .software_n = softreset_i2c,
  21. .default_freq = 100000,
  22. #if I2C0_SLAVE_MODE
  23. .slave_mode_en = 1,
  24. #else
  25. .slave_mode_en = 0,
  26. #endif
  27. },
  28. {
  29. .id = 1,
  30. .base = REGS_IIC1_BASE,
  31. .irqn = I2C1_IRQn,
  32. .software_n = softreset_i2c1,
  33. .default_freq = 100000,
  34. #if I2C1_SLAVE_MODE
  35. .slave_mode_en = 1,
  36. #else
  37. .slave_mode_en = 0,
  38. #endif
  39. }
  40. };
  41. static char *abort_sources[] = {
  42. [ABRT_7B_ADDR_NOACK] =
  43. "slave address not acknowledged (7bit mode)",
  44. [ABRT_10ADDR1_NOACK] =
  45. "first address byte not acknowledged (10bit mode)",
  46. [ABRT_10ADDR2_NOACK] =
  47. "second address byte not acknowledged (10bit mode)",
  48. [ABRT_TXDATA_NOACK] =
  49. "data not acknowledged",
  50. [ABRT_GCALL_NOACK] =
  51. "no acknowledgement for a general call",
  52. [ABRT_GCALL_READ] =
  53. "read after general call",
  54. [ABRT_SBYTE_ACKDET] =
  55. "start byte acknowledged",
  56. [ABRT_SBYTE_NORSTRT] =
  57. "trying to send start byte when restart is disabled",
  58. [ABRT_10B_RD_NORSTRT] =
  59. "trying to read when restart is disabled (10bit mode)",
  60. [ABRT_MASTER_DIS] =
  61. "trying to use disabled adapter",
  62. [ARB_LOST] =
  63. "lost arbitration",
  64. [ABRT_SLAVE_FLUSH_TXFIFO] =
  65. "read command so flush old data in the TX FIFO",
  66. [ABRT_SLAVE_ARBLOST] =
  67. "slave lost the bus while transmitting data to a remote master",
  68. [ABRT_SLAVE_RD_INTX] =
  69. "incorrect slave-transmitter mode configuration",
  70. };
  71. u32 dw_readl(struct dw_i2c_dev *dev, int offset)
  72. {
  73. return readl(dev->base + offset);
  74. }
  75. void dw_writel(struct dw_i2c_dev *dev, u32 b, int offset)
  76. {
  77. writel(b, dev->base + offset);
  78. }
  79. int i2c_dw_acquire_lock(struct dw_i2c_dev *dev)
  80. {
  81. int ret;
  82. if (!dev->acquire_lock)
  83. return 0;
  84. ret = dev->acquire_lock(dev);
  85. if (!ret)
  86. return 0;
  87. TRACE_ERROR("couldn't acquire bus ownership\n");
  88. return ret;
  89. }
  90. void i2c_dw_release_lock(struct dw_i2c_dev *dev)
  91. {
  92. if (dev->release_lock)
  93. dev->release_lock(dev);
  94. }
  95. /**
  96. * i2c_dw_set_reg_access() - Set register access flags
  97. * @dev: device private data
  98. *
  99. * Autodetects needed register access mode and sets access flags accordingly.
  100. * This must be called before doing any other register access.
  101. */
  102. int i2c_dw_set_reg_access(struct dw_i2c_dev *dev)
  103. {
  104. u32 reg;
  105. int ret;
  106. ret = i2c_dw_acquire_lock(dev);
  107. if (ret)
  108. return ret;
  109. reg = dw_readl(dev, DW_IC_COMP_TYPE);
  110. i2c_dw_release_lock(dev);
  111. if (reg == ___constant_swab32(DW_IC_COMP_TYPE_VALUE)) {
  112. /* Configure register endianess access */
  113. dev->flags |= ACCESS_SWAP;
  114. } else if (reg == (DW_IC_COMP_TYPE_VALUE & 0x0000ffff)) {
  115. /* Configure register access mode 16bit */
  116. dev->flags |= ACCESS_16BIT;
  117. } else if (reg != DW_IC_COMP_TYPE_VALUE) {
  118. TRACE_ERROR("Unknown Synopsys component type: 0x%08x\n", reg);
  119. return -ENODEV;
  120. }
  121. return 0;
  122. }
  123. u32 i2c_dw_scl_hcnt(u32 ic_clk, u32 tSYMBOL, u32 tf, int cond, int offset)
  124. {
  125. /*
  126. * DesignWare I2C core doesn't seem to have solid strategy to meet
  127. * the tHD;STA timing spec. Configuring _HCNT based on tHIGH spec
  128. * will result in violation of the tHD;STA spec.
  129. */
  130. if (cond)
  131. /*
  132. * Conditional expression:
  133. *
  134. * IC_[FS]S_SCL_HCNT + (1+4+3) >= IC_CLK * tHIGH
  135. *
  136. * This is based on the DW manuals, and represents an ideal
  137. * configuration. The resulting I2C bus speed will be
  138. * faster than any of the others.
  139. *
  140. * If your hardware is free from tHD;STA issue, try this one.
  141. */
  142. return (ic_clk * tSYMBOL + 500000) / 1000000 - 8 + offset;
  143. else
  144. /*
  145. * Conditional expression:
  146. *
  147. * IC_[FS]S_SCL_HCNT + 3 >= IC_CLK * (tHD;STA + tf)
  148. *
  149. * This is just experimental rule; the tHD;STA period turned
  150. * out to be proportinal to (_HCNT + 3). With this setting,
  151. * we could meet both tHIGH and tHD;STA timing specs.
  152. *
  153. * If unsure, you'd better to take this alternative.
  154. *
  155. * The reason why we need to take into account "tf" here,
  156. * is the same as described in i2c_dw_scl_lcnt().
  157. */
  158. return (ic_clk * (tSYMBOL + tf) + 500000) / 1000000
  159. - 3 + offset;
  160. }
  161. u32 i2c_dw_scl_lcnt(u32 ic_clk, u32 tLOW, u32 tf, int offset)
  162. {
  163. /*
  164. * Conditional expression:
  165. *
  166. * IC_[FS]S_SCL_LCNT + 1 >= IC_CLK * (tLOW + tf)
  167. *
  168. * DW I2C core starts counting the SCL CNTs for the LOW period
  169. * of the SCL clock (tLOW) as soon as it pulls the SCL line.
  170. * In order to meet the tLOW timing spec, we need to take into
  171. * account the fall time of SCL signal (tf). Default tf value
  172. * should be 0.3 us, for safety.
  173. */
  174. return ((ic_clk * (tLOW + tf) + 500000) / 1000000) - 1 + offset;
  175. }
  176. int i2c_dw_set_sda_hold(struct dw_i2c_dev *dev)
  177. {
  178. u32 reg;
  179. int ret;
  180. ret = i2c_dw_acquire_lock(dev);
  181. if (ret)
  182. return ret;
  183. /* Configure SDA Hold Time if required */
  184. reg = dw_readl(dev, DW_IC_COMP_VERSION);
  185. if (reg >= DW_IC_SDA_HOLD_MIN_VERS) {
  186. if (!dev->sda_hold_time) {
  187. /* Keep previous hold time setting if no one set it */
  188. dev->sda_hold_time = dw_readl(dev, DW_IC_SDA_HOLD);
  189. }
  190. /*
  191. * Workaround for avoiding TX arbitration lost in case I2C
  192. * slave pulls SDA down "too quickly" after falling egde of
  193. * SCL by enabling non-zero SDA RX hold. Specification says it
  194. * extends incoming SDA low to high transition while SCL is
  195. * high but it apprears to help also above issue.
  196. */
  197. if (!(dev->sda_hold_time & DW_IC_SDA_HOLD_RX_MASK))
  198. dev->sda_hold_time |= 1 << DW_IC_SDA_HOLD_RX_SHIFT;
  199. TRACE_DEBUG("SDA Hold Time TX:RX = %d:%d\n",
  200. dev->sda_hold_time & ~(u32)DW_IC_SDA_HOLD_RX_MASK,
  201. dev->sda_hold_time >> DW_IC_SDA_HOLD_RX_SHIFT);
  202. } else if (dev->sda_hold_time) {
  203. TRACE_WARNING("Hardware too old to adjust SDA hold time.\n");
  204. dev->sda_hold_time = 0;
  205. }
  206. i2c_dw_release_lock(dev);
  207. return 0;
  208. }
  209. static inline void __i2c_dw_enable(struct dw_i2c_dev *dev)
  210. {
  211. dw_writel(dev, 1, DW_IC_ENABLE);
  212. }
  213. static inline void __i2c_dw_disable_nowait(struct dw_i2c_dev *dev)
  214. {
  215. dw_writel(dev, 0, DW_IC_ENABLE);
  216. }
  217. void __i2c_dw_disable(struct dw_i2c_dev *dev)
  218. {
  219. int timeout = 100;
  220. do {
  221. __i2c_dw_disable_nowait(dev);
  222. /*
  223. * The enable status register may be unimplemented, but
  224. * in that case this test reads zero and exits the loop.
  225. */
  226. if ((dw_readl(dev, DW_IC_ENABLE_STATUS) & 1) == 0)
  227. return;
  228. /*
  229. * Wait 10 times the signaling period of the highest I2C
  230. * transfer supported by the driver (for 400KHz this is
  231. * 25us) as described in the DesignWare I2C databook.
  232. */
  233. vTaskDelay(pdMS_TO_TICKS(1));
  234. } while (timeout--);
  235. TRACE_WARNING("timeout in disabling adapter\n");
  236. }
  237. unsigned long i2c_dw_clk_rate(struct dw_i2c_dev *dev)
  238. {
  239. /*
  240. * Clock is not necessary if we got LCNT/HCNT values directly from
  241. * the platform code.
  242. */
  243. if (!dev->get_clk_rate_khz)
  244. return 0;
  245. return dev->get_clk_rate_khz(dev);
  246. }
  247. /*
  248. * Waiting for bus not busy
  249. */
  250. int i2c_dw_wait_bus_not_busy(struct dw_i2c_dev *dev)
  251. {
  252. int timeout = TIMEOUT;
  253. while (dw_readl(dev, DW_IC_STATUS) & DW_IC_STATUS_ACTIVITY) {
  254. if (timeout <= 0) {
  255. TRACE_WARNING("timeout waiting for bus ready\n");
  256. return -ETIMEDOUT;
  257. }
  258. timeout--;
  259. vTaskDelay(pdMS_TO_TICKS(1));
  260. }
  261. return 0;
  262. }
  263. int i2c_dw_handle_tx_abort(struct dw_i2c_dev *dev)
  264. {
  265. unsigned long abort_source = dev->abort_source;
  266. int i;
  267. if (abort_source & DW_IC_TX_ABRT_NOACK) {
  268. for (i = 0; i < ARRAY_SIZE(abort_sources); i++) {
  269. if (abort_source & (1 << i))
  270. TRACE_DEBUG("%s: %s\n", __func__, abort_sources[i]);
  271. }
  272. return -EREMOTEIO;
  273. }
  274. for (i = 0; i < ARRAY_SIZE(abort_sources); i++) {
  275. if (abort_source & (1 << i))
  276. TRACE_ERROR("%s: %s\n", __func__, abort_sources[i]);
  277. }
  278. if (abort_source & DW_IC_TX_ARB_LOST)
  279. return -EAGAIN;
  280. else if (abort_source & DW_IC_TX_ABRT_GCALL_READ)
  281. return -EINVAL; /* wrong msgs[] data */
  282. else
  283. return -EIO;
  284. }
  285. void i2c_dw_disable(struct dw_i2c_dev *dev)
  286. {
  287. /* Disable controller */
  288. __i2c_dw_disable(dev);
  289. /* Disable all interupts */
  290. dw_writel(dev, 0, DW_IC_INTR_MASK);
  291. dw_readl(dev, DW_IC_CLR_INTR);
  292. }
  293. void i2c_dw_disable_int(struct dw_i2c_dev *dev)
  294. {
  295. dw_writel(dev, 0, DW_IC_INTR_MASK);
  296. }
  297. u32 i2c_dw_read_comp_param(struct dw_i2c_dev *dev)
  298. {
  299. return dw_readl(dev, DW_IC_COMP_PARAM_1);
  300. }
  301. static void i2c_dw_configure_fifo_master(struct dw_i2c_dev *dev)
  302. {
  303. /* Configure Tx/Rx FIFO threshold levels */
  304. dw_writel(dev, dev->tx_fifo_depth / 2, DW_IC_TX_TL);
  305. dw_writel(dev, 0, DW_IC_RX_TL);
  306. /* Configure the I2C master */
  307. dw_writel(dev, dev->master_cfg, DW_IC_CON);
  308. }
  309. static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev)
  310. {
  311. #if (TRACE_LEVEL >= TRACE_LEVEL_DEBUG)
  312. const char *mode_str, *fp_str = "";
  313. #endif
  314. u32 comp_param1;
  315. u32 sda_falling_time, scl_falling_time;
  316. u32 ic_clk;
  317. int ret;
  318. ret = i2c_dw_acquire_lock(dev);
  319. if (ret)
  320. return ret;
  321. comp_param1 = dw_readl(dev, DW_IC_COMP_PARAM_1);
  322. i2c_dw_release_lock(dev);
  323. /* Set standard and fast speed dividers for high/low periods */
  324. sda_falling_time = dev->sda_falling_time ? dev->sda_falling_time : 300; /* ns */
  325. scl_falling_time = dev->scl_falling_time ? dev->scl_falling_time : 300; /* ns */
  326. /* Calculate SCL timing parameters for standard mode if not set */
  327. if (!dev->ss_hcnt || !dev->ss_lcnt) {
  328. ic_clk = i2c_dw_clk_rate(dev);
  329. dev->ss_hcnt =
  330. i2c_dw_scl_hcnt(ic_clk,
  331. 4000, /* tHD;STA = tHIGH = 4.0 us */
  332. sda_falling_time,
  333. 0, /* 0: DW default, 1: Ideal */
  334. 0); /* No offset */
  335. dev->ss_lcnt =
  336. i2c_dw_scl_lcnt(ic_clk,
  337. 4700, /* tLOW = 4.7 us */
  338. scl_falling_time,
  339. 0); /* No offset */
  340. }
  341. TRACE_DEBUG("Standard Mode HCNT:LCNT = %d:%d\n", dev->ss_hcnt, dev->ss_lcnt);
  342. /*
  343. * Set SCL timing parameters for fast mode or fast mode plus. Only
  344. * difference is the timing parameter values since the registers are
  345. * the same.
  346. */
  347. if (dev->clk_freq == 1000000) {
  348. /*
  349. * Check are fast mode plus parameters available and use
  350. * fast mode if not.
  351. */
  352. if (dev->fp_hcnt && dev->fp_lcnt) {
  353. dev->fs_hcnt = dev->fp_hcnt;
  354. dev->fs_lcnt = dev->fp_lcnt;
  355. #if (TRACE_LEVEL >= TRACE_LEVEL_DEBUG)
  356. fp_str = " Plus";
  357. #endif
  358. }
  359. }
  360. /*
  361. * Calculate SCL timing parameters for fast mode if not set. They are
  362. * needed also in high speed mode.
  363. */
  364. if (!dev->fs_hcnt || !dev->fs_lcnt) {
  365. ic_clk = i2c_dw_clk_rate(dev);
  366. dev->fs_hcnt =
  367. i2c_dw_scl_hcnt(ic_clk,
  368. 600, /* tHD;STA = tHIGH = 0.6 us */
  369. sda_falling_time,
  370. 0, /* 0: DW default, 1: Ideal */
  371. 0); /* No offset */
  372. dev->fs_lcnt =
  373. i2c_dw_scl_lcnt(ic_clk,
  374. 1300, /* tLOW = 1.3 us */
  375. scl_falling_time,
  376. 0); /* No offset */
  377. }
  378. TRACE_DEBUG("Fast Mode%s HCNT:LCNT = %d:%d\n", fp_str, dev->fs_hcnt, dev->fs_lcnt);
  379. /* Check is high speed possible and fall back to fast mode if not */
  380. if ((dev->master_cfg & DW_IC_CON_SPEED_MASK) ==
  381. DW_IC_CON_SPEED_HIGH) {
  382. if ((comp_param1 & DW_IC_COMP_PARAM_1_SPEED_MODE_MASK)
  383. != DW_IC_COMP_PARAM_1_SPEED_MODE_HIGH) {
  384. TRACE_ERROR("High Speed not supported!\n");
  385. dev->master_cfg &= ~DW_IC_CON_SPEED_MASK;
  386. dev->master_cfg |= DW_IC_CON_SPEED_FAST;
  387. dev->hs_hcnt = 0;
  388. dev->hs_lcnt = 0;
  389. } else if (dev->hs_hcnt && dev->hs_lcnt) {
  390. TRACE_DEBUG("High Speed Mode HCNT:LCNT = %d:%d\n", dev->hs_hcnt, dev->hs_lcnt);
  391. }
  392. }
  393. ret = i2c_dw_set_sda_hold(dev);
  394. if (ret)
  395. goto out;
  396. #if (TRACE_LEVEL >= TRACE_LEVEL_DEBUG)
  397. switch (dev->master_cfg & DW_IC_CON_SPEED_MASK) {
  398. case DW_IC_CON_SPEED_STD:
  399. mode_str = "Standard Mode";
  400. break;
  401. case DW_IC_CON_SPEED_HIGH:
  402. mode_str = "High Speed Mode";
  403. break;
  404. default:
  405. mode_str = "Fast Mode";
  406. }
  407. #endif
  408. TRACE_DEBUG("Bus speed: %s%s\n", mode_str, fp_str);
  409. out:
  410. return ret;
  411. }
  412. /**
  413. * i2c_dw_init() - Initialize the designware I2C master hardware
  414. * @dev: device private data
  415. *
  416. * This functions configures and enables the I2C master.
  417. * This function is called during I2C init function, and in case of timeout at
  418. * run time.
  419. */
  420. static int i2c_dw_init_master(struct dw_i2c_dev *dev)
  421. {
  422. int ret;
  423. ret = i2c_dw_acquire_lock(dev);
  424. if (ret)
  425. return ret;
  426. /* Disable the adapter */
  427. __i2c_dw_disable(dev);
  428. /* Write standard speed timing parameters */
  429. dw_writel(dev, dev->ss_hcnt, DW_IC_SS_SCL_HCNT);
  430. dw_writel(dev, dev->ss_lcnt, DW_IC_SS_SCL_LCNT);
  431. /* Write fast mode/fast mode plus timing parameters */
  432. dw_writel(dev, dev->fs_hcnt, DW_IC_FS_SCL_HCNT);
  433. dw_writel(dev, dev->fs_lcnt, DW_IC_FS_SCL_LCNT);
  434. /* Write high speed timing parameters if supported */
  435. if (dev->hs_hcnt && dev->hs_lcnt) {
  436. dw_writel(dev, dev->hs_hcnt, DW_IC_HS_SCL_HCNT);
  437. dw_writel(dev, dev->hs_lcnt, DW_IC_HS_SCL_LCNT);
  438. }
  439. /* Write SDA hold time if supported */
  440. if (dev->sda_hold_time)
  441. dw_writel(dev, dev->sda_hold_time, DW_IC_SDA_HOLD);
  442. i2c_dw_configure_fifo_master(dev);
  443. i2c_dw_release_lock(dev);
  444. return 0;
  445. }
  446. static void i2c_dw_xfer_init(struct dw_i2c_dev *dev)
  447. {
  448. struct i2c_msg *msgs = dev->msgs;
  449. u32 ic_con, ic_tar = 0;
  450. /* Disable the adapter */
  451. __i2c_dw_disable(dev);
  452. /* If the slave address is ten bit address, enable 10BITADDR */
  453. ic_con = dw_readl(dev, DW_IC_CON);
  454. if (msgs[dev->msg_write_idx].flags & I2C_M_TEN) {
  455. ic_con |= DW_IC_CON_10BITADDR_MASTER;
  456. /*
  457. * If I2C_DYNAMIC_TAR_UPDATE is set, the 10-bit addressing
  458. * mode has to be enabled via bit 12 of IC_TAR register.
  459. * We set it always as I2C_DYNAMIC_TAR_UPDATE can't be
  460. * detected from registers.
  461. */
  462. ic_tar = DW_IC_TAR_10BITADDR_MASTER;
  463. } else {
  464. ic_con &= ~DW_IC_CON_10BITADDR_MASTER;
  465. }
  466. dw_writel(dev, ic_con, DW_IC_CON);
  467. /*
  468. * Set the slave (target) address and enable 10-bit addressing mode
  469. * if applicable.
  470. */
  471. dw_writel(dev, msgs[dev->msg_write_idx].addr | ic_tar, DW_IC_TAR);
  472. /* Enforce disabled interrupts (due to HW issues) */
  473. i2c_dw_disable_int(dev);
  474. /* Enable the adapter */
  475. __i2c_dw_enable(dev);
  476. /* Dummy read to avoid the register getting stuck on Bay Trail */
  477. dw_readl(dev, DW_IC_ENABLE_STATUS);
  478. /* Clear and enable interrupts */
  479. dw_readl(dev, DW_IC_CLR_INTR);
  480. dw_writel(dev, DW_IC_INTR_MASTER_MASK, DW_IC_INTR_MASK);
  481. }
  482. /*
  483. * Initiate (and continue) low level master read/write transaction.
  484. * This function is only called from i2c_dw_isr, and pumping i2c_msg
  485. * messages into the tx buffer. Even if the size of i2c_msg data is
  486. * longer than the size of the tx buffer, it handles everything.
  487. */
  488. static void
  489. i2c_dw_xfer_msg(struct dw_i2c_dev *dev)
  490. {
  491. struct i2c_msg *msgs = dev->msgs;
  492. u32 intr_mask;
  493. int tx_limit, rx_limit;
  494. u32 addr = msgs[dev->msg_write_idx].addr;
  495. u32 buf_len = dev->tx_buf_len;
  496. u8 *buf = dev->tx_buf;
  497. int need_restart = 0;
  498. intr_mask = DW_IC_INTR_MASTER_MASK;
  499. for (; dev->msg_write_idx < dev->msgs_num; dev->msg_write_idx++) {
  500. u32 flags = msgs[dev->msg_write_idx].flags;
  501. /*
  502. * If target address has changed, we need to
  503. * reprogram the target address in the I2C
  504. * adapter when we are done with this transfer.
  505. */
  506. if (msgs[dev->msg_write_idx].addr != addr) {
  507. TRACE_ERROR("%s: invalid target address\n", __func__);
  508. dev->msg_err = -EINVAL;
  509. break;
  510. }
  511. if (msgs[dev->msg_write_idx].len == 0) {
  512. TRACE_ERROR("%s: invalid message length\n", __func__);
  513. dev->msg_err = -EINVAL;
  514. break;
  515. }
  516. if (!(dev->status & STATUS_WRITE_IN_PROGRESS)) {
  517. /* new i2c_msg */
  518. buf = msgs[dev->msg_write_idx].buf;
  519. buf_len = msgs[dev->msg_write_idx].len;
  520. /* If both IC_EMPTYFIFO_HOLD_MASTER_EN and
  521. * IC_RESTART_EN are set, we must manually
  522. * set restart bit between messages.
  523. */
  524. if ((dev->master_cfg & DW_IC_CON_RESTART_EN) &&
  525. (dev->msg_write_idx > 0))
  526. need_restart = 1;
  527. }
  528. tx_limit = dev->tx_fifo_depth - dw_readl(dev, DW_IC_TXFLR);
  529. rx_limit = dev->rx_fifo_depth - dw_readl(dev, DW_IC_RXFLR);
  530. while (buf_len > 0 && tx_limit > 0 && rx_limit > 0) {
  531. u32 cmd = 0;
  532. /*
  533. * If IC_EMPTYFIFO_HOLD_MASTER_EN is set we must
  534. * manually set the stop bit. However, it cannot be
  535. * detected from the registers so we set it always
  536. * when writing/reading the last byte.
  537. */
  538. /*
  539. * i2c-core always sets the buffer length of
  540. * I2C_FUNC_SMBUS_BLOCK_DATA to 1. The length will
  541. * be adjusted when receiving the first byte.
  542. * Thus we can't stop the transaction here.
  543. */
  544. if (dev->msg_write_idx == dev->msgs_num - 1 &&
  545. buf_len == 1 && !(flags & I2C_M_RECV_LEN))
  546. cmd |= BIT(9);
  547. if (need_restart) {
  548. cmd |= BIT(10);
  549. need_restart = 0;
  550. }
  551. if (msgs[dev->msg_write_idx].flags & I2C_M_RD) {
  552. /* Avoid rx buffer overrun */
  553. if (dev->rx_outstanding >= dev->rx_fifo_depth)
  554. break;
  555. dw_writel(dev, cmd | 0x100, DW_IC_DATA_CMD);
  556. rx_limit--;
  557. dev->rx_outstanding++;
  558. } else
  559. dw_writel(dev, cmd | *buf++, DW_IC_DATA_CMD);
  560. tx_limit--; buf_len--;
  561. }
  562. dev->tx_buf = buf;
  563. dev->tx_buf_len = buf_len;
  564. /*
  565. * Because we don't know the buffer length in the
  566. * I2C_FUNC_SMBUS_BLOCK_DATA case, we can't stop
  567. * the transaction here.
  568. */
  569. if (buf_len > 0 || flags & I2C_M_RECV_LEN) {
  570. /* more bytes to be written */
  571. dev->status |= STATUS_WRITE_IN_PROGRESS;
  572. break;
  573. } else
  574. dev->status &= ~STATUS_WRITE_IN_PROGRESS;
  575. }
  576. /*
  577. * If i2c_msg index search is completed, we don't need TX_EMPTY
  578. * interrupt any more.
  579. */
  580. if (dev->msg_write_idx == dev->msgs_num)
  581. intr_mask &= ~DW_IC_INTR_TX_EMPTY;
  582. if (dev->msg_err)
  583. intr_mask = 0;
  584. dw_writel(dev, intr_mask, DW_IC_INTR_MASK);
  585. }
  586. static u8
  587. i2c_dw_recv_len(struct dw_i2c_dev *dev, u8 len)
  588. {
  589. struct i2c_msg *msgs = dev->msgs;
  590. u32 flags = msgs[dev->msg_read_idx].flags;
  591. /*
  592. * Adjust the buffer length and mask the flag
  593. * after receiving the first byte.
  594. */
  595. len += (flags & I2C_CLIENT_PEC) ? 2 : 1;
  596. dev->tx_buf_len = len - min(len, dev->rx_outstanding);
  597. msgs[dev->msg_read_idx].len = len;
  598. msgs[dev->msg_read_idx].flags &= ~I2C_M_RECV_LEN;
  599. return len;
  600. }
  601. static void
  602. i2c_dw_read(struct dw_i2c_dev *dev)
  603. {
  604. struct i2c_msg *msgs = dev->msgs;
  605. int rx_valid;
  606. for (; dev->msg_read_idx < dev->msgs_num; dev->msg_read_idx++) {
  607. u32 len;
  608. u8 *buf;
  609. if (!(msgs[dev->msg_read_idx].flags & I2C_M_RD))
  610. continue;
  611. if (!(dev->status & STATUS_READ_IN_PROGRESS)) {
  612. len = msgs[dev->msg_read_idx].len;
  613. buf = msgs[dev->msg_read_idx].buf;
  614. } else {
  615. len = dev->rx_buf_len;
  616. buf = dev->rx_buf;
  617. }
  618. rx_valid = dw_readl(dev, DW_IC_RXFLR);
  619. for (; len > 0 && rx_valid > 0; len--, rx_valid--) {
  620. u32 flags = msgs[dev->msg_read_idx].flags;
  621. *buf = dw_readl(dev, DW_IC_DATA_CMD);
  622. /* Ensure length byte is a valid value */
  623. if (flags & I2C_M_RECV_LEN &&
  624. *buf <= I2C_SMBUS_BLOCK_MAX && *buf > 0) {
  625. len = i2c_dw_recv_len(dev, *buf);
  626. }
  627. buf++;
  628. dev->rx_outstanding--;
  629. }
  630. if (len > 0) {
  631. dev->status |= STATUS_READ_IN_PROGRESS;
  632. dev->rx_buf_len = len;
  633. dev->rx_buf = buf;
  634. return;
  635. } else
  636. dev->status &= ~STATUS_READ_IN_PROGRESS;
  637. }
  638. }
  639. /*
  640. * Prepare controller for a transaction and call i2c_dw_xfer_msg.
  641. */
  642. static int
  643. i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
  644. {
  645. struct dw_i2c_dev *dev = adap->dw_dev;
  646. int ret;
  647. xQueueReset(dev->cmd_complete);
  648. dev->msgs = msgs;
  649. dev->msgs_num = num;
  650. dev->cmd_err = 0;
  651. dev->msg_write_idx = 0;
  652. dev->msg_read_idx = 0;
  653. dev->msg_err = 0;
  654. dev->status = STATUS_IDLE;
  655. dev->abort_source = 0;
  656. dev->rx_outstanding = 0;
  657. ret = i2c_dw_acquire_lock(dev);
  658. if (ret)
  659. goto done_nolock;
  660. ret = i2c_dw_wait_bus_not_busy(dev);
  661. if (ret < 0)
  662. goto done;
  663. /* Start the transfers */
  664. i2c_dw_xfer_init(dev);
  665. /* Wait for tx to complete */
  666. if (!xQueueReceive(dev->cmd_complete, NULL, adap->timeout)) {
  667. TRACE_ERROR("controller timed out\n");
  668. /* i2c_dw_init implicitly disables the adapter */
  669. i2c_dw_init_master(dev);
  670. ret = -ETIMEDOUT;
  671. goto done;
  672. }
  673. /*
  674. * We must disable the adapter before returning and signaling the end
  675. * of the current transfer. Otherwise the hardware might continue
  676. * generating interrupts which in turn causes a race condition with
  677. * the following transfer. Needs some more investigation if the
  678. * additional interrupts are a hardware bug or this driver doesn't
  679. * handle them correctly yet.
  680. */
  681. __i2c_dw_disable_nowait(dev);
  682. if (dev->msg_err) {
  683. ret = dev->msg_err;
  684. goto done;
  685. }
  686. /* No error */
  687. if (!dev->cmd_err && !dev->status) {
  688. ret = num;
  689. goto done;
  690. }
  691. /* We have an error */
  692. if (dev->cmd_err == DW_IC_ERR_TX_ABRT) {
  693. ret = i2c_dw_handle_tx_abort(dev);
  694. goto done;
  695. }
  696. if (dev->status)
  697. TRACE_ERROR("transfer terminated early - interrupt latency too high?\n");
  698. ret = -EIO;
  699. done:
  700. i2c_dw_release_lock(dev);
  701. done_nolock:
  702. return ret;
  703. }
  704. static u32 i2c_dw_get_clk_rate_khz(struct dw_i2c_dev *dev)
  705. {
  706. return ulClkGetRate(CLK_XTAL24M) / 1000;
  707. }
  708. static void i2c_dw_configure_master(struct dw_i2c_dev *dev)
  709. {
  710. dev->functionality = I2C_FUNC_10BIT_ADDR | DW_IC_DEFAULT_FUNCTIONALITY;
  711. dev->master_cfg = DW_IC_CON_MASTER | DW_IC_CON_SLAVE_DISABLE |
  712. DW_IC_CON_RESTART_EN;
  713. dev->mode = DW_IC_MASTER;
  714. switch (dev->clk_freq) {
  715. case 100000:
  716. dev->master_cfg |= DW_IC_CON_SPEED_STD;
  717. break;
  718. case 3400000:
  719. dev->master_cfg |= DW_IC_CON_SPEED_HIGH;
  720. break;
  721. default:
  722. dev->master_cfg |= DW_IC_CON_SPEED_FAST;
  723. }
  724. }
  725. static void i2c_dw_configure_slave(struct dw_i2c_dev *dev)
  726. {
  727. dev->functionality = I2C_FUNC_SLAVE | DW_IC_DEFAULT_FUNCTIONALITY;
  728. dev->slave_cfg = DW_IC_CON_RX_FIFO_FULL_HLD_CTRL |
  729. DW_IC_CON_RESTART_EN | DW_IC_CON_STOP_DET_IFADDRESSED;
  730. dev->mode = DW_IC_SLAVE;
  731. }
  732. static void dw_i2c_set_fifo_size(struct dw_i2c_dev *dev)
  733. {
  734. u32 param, tx_fifo_depth, rx_fifo_depth;
  735. /*
  736. * Try to detect the FIFO depth if not set by interface driver,
  737. * the depth could be from 2 to 256 from HW spec.
  738. */
  739. param = i2c_dw_read_comp_param(dev);
  740. tx_fifo_depth = ((param >> 16) & 0xff) + 1;
  741. rx_fifo_depth = ((param >> 8) & 0xff) + 1;
  742. if (!dev->tx_fifo_depth) {
  743. dev->tx_fifo_depth = tx_fifo_depth;
  744. dev->rx_fifo_depth = rx_fifo_depth;
  745. } else if (tx_fifo_depth >= 2) {
  746. dev->tx_fifo_depth = min(dev->tx_fifo_depth,
  747. tx_fifo_depth);
  748. dev->rx_fifo_depth = min(dev->rx_fifo_depth,
  749. rx_fifo_depth);
  750. }
  751. }
  752. static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
  753. {
  754. u32 stat;
  755. /*
  756. * The IC_INTR_STAT register just indicates "enabled" interrupts.
  757. * Ths unmasked raw version of interrupt status bits are available
  758. * in the IC_RAW_INTR_STAT register.
  759. *
  760. * That is,
  761. * stat = dw_readl(IC_INTR_STAT);
  762. * equals to,
  763. * stat = dw_readl(IC_RAW_INTR_STAT) & dw_readl(IC_INTR_MASK);
  764. *
  765. * The raw version might be useful for debugging purposes.
  766. */
  767. stat = dw_readl(dev, DW_IC_INTR_STAT);
  768. /*
  769. * Do not use the IC_CLR_INTR register to clear interrupts, or
  770. * you'll miss some interrupts, triggered during the period from
  771. * dw_readl(IC_INTR_STAT) to dw_readl(IC_CLR_INTR).
  772. *
  773. * Instead, use the separately-prepared IC_CLR_* registers.
  774. */
  775. if (stat & DW_IC_INTR_RX_UNDER)
  776. dw_readl(dev, DW_IC_CLR_RX_UNDER);
  777. if (stat & DW_IC_INTR_RX_OVER)
  778. dw_readl(dev, DW_IC_CLR_RX_OVER);
  779. if (stat & DW_IC_INTR_TX_OVER)
  780. dw_readl(dev, DW_IC_CLR_TX_OVER);
  781. if (stat & DW_IC_INTR_RD_REQ)
  782. dw_readl(dev, DW_IC_CLR_RD_REQ);
  783. if (stat & DW_IC_INTR_TX_ABRT) {
  784. /*
  785. * The IC_TX_ABRT_SOURCE register is cleared whenever
  786. * the IC_CLR_TX_ABRT is read. Preserve it beforehand.
  787. */
  788. dev->abort_source = dw_readl(dev, DW_IC_TX_ABRT_SOURCE);
  789. dw_readl(dev, DW_IC_CLR_TX_ABRT);
  790. }
  791. if (stat & DW_IC_INTR_RX_DONE)
  792. dw_readl(dev, DW_IC_CLR_RX_DONE);
  793. if (stat & DW_IC_INTR_ACTIVITY)
  794. dw_readl(dev, DW_IC_CLR_ACTIVITY);
  795. if (stat & DW_IC_INTR_STOP_DET)
  796. dw_readl(dev, DW_IC_CLR_STOP_DET);
  797. if (stat & DW_IC_INTR_START_DET)
  798. dw_readl(dev, DW_IC_CLR_START_DET);
  799. if (stat & DW_IC_INTR_GEN_CALL)
  800. dw_readl(dev, DW_IC_CLR_GEN_CALL);
  801. return stat;
  802. }
  803. /*
  804. * Interrupt service routine. This gets called whenever an I2C master interrupt
  805. * occurs.
  806. */
  807. static int i2c_dw_irq_handler_master(struct dw_i2c_dev *dev)
  808. {
  809. u32 stat;
  810. stat = i2c_dw_read_clear_intrbits(dev);
  811. if (stat & DW_IC_INTR_TX_ABRT) {
  812. dev->cmd_err |= DW_IC_ERR_TX_ABRT;
  813. dev->status = STATUS_IDLE;
  814. /*
  815. * Anytime TX_ABRT is set, the contents of the tx/rx
  816. * buffers are flushed. Make sure to skip them.
  817. */
  818. dw_writel(dev, 0, DW_IC_INTR_MASK);
  819. goto tx_aborted;
  820. }
  821. if (stat & DW_IC_INTR_RX_FULL)
  822. i2c_dw_read(dev);
  823. if (stat & DW_IC_INTR_TX_EMPTY)
  824. i2c_dw_xfer_msg(dev);
  825. /*
  826. * No need to modify or disable the interrupt mask here.
  827. * i2c_dw_xfer_msg() will take care of it according to
  828. * the current transmit status.
  829. */
  830. tx_aborted:
  831. if ((stat & (DW_IC_INTR_TX_ABRT | DW_IC_INTR_STOP_DET)) || dev->msg_err)
  832. xQueueSendFromISR(dev->cmd_complete, NULL, 0);
  833. else if (dev->flags & ACCESS_INTR_MASK) {
  834. /* Workaround to trigger pending interrupt */
  835. stat = dw_readl(dev, DW_IC_INTR_MASK);
  836. i2c_dw_disable_int(dev);
  837. dw_writel(dev, stat, DW_IC_INTR_MASK);
  838. }
  839. return 0;
  840. }
  841. static void i2c_dw_isr(void *dev_id)
  842. {
  843. struct dw_i2c_dev *dev = dev_id;
  844. u32 stat, enabled;
  845. enabled = dw_readl(dev, DW_IC_ENABLE);
  846. stat = dw_readl(dev, DW_IC_RAW_INTR_STAT);
  847. TRACE_DEBUG("enabled=%#x stat=%#x\n", enabled, stat);
  848. if (!enabled || !(stat & ~DW_IC_INTR_ACTIVITY))
  849. return;
  850. i2c_dw_irq_handler_master(dev);
  851. }
  852. static const struct i2c_algorithm i2c_dw_algo = {
  853. .master_xfer = i2c_dw_xfer,
  854. };
  855. static void i2c_dw_configure_fifo_slave(struct dw_i2c_dev *dev)
  856. {
  857. /* Configure Tx/Rx FIFO threshold levels. */
  858. dw_writel(dev, 0, DW_IC_TX_TL);
  859. dw_writel(dev, 0, DW_IC_RX_TL);
  860. /* Configure the I2C slave. */
  861. dw_writel(dev, dev->slave_cfg, DW_IC_CON);
  862. dw_writel(dev, DW_IC_INTR_SLAVE_MASK, DW_IC_INTR_MASK);
  863. }
  864. /**
  865. * i2c_dw_init_slave() - Initialize the designware i2c slave hardware
  866. * @dev: device private data
  867. *
  868. * This function configures and enables the I2C in slave mode.
  869. * This function is called during I2C init function, and in case of timeout at
  870. * run time.
  871. */
  872. static int i2c_dw_init_slave(struct dw_i2c_dev *dev)
  873. {
  874. int ret;
  875. ret = i2c_dw_acquire_lock(dev);
  876. if (ret)
  877. return ret;
  878. /* Disable the adapter. */
  879. __i2c_dw_disable(dev);
  880. /* Write SDA hold time if supported */
  881. if (dev->sda_hold_time)
  882. dw_writel(dev, dev->sda_hold_time, DW_IC_SDA_HOLD);
  883. i2c_dw_configure_fifo_slave(dev);
  884. i2c_dw_release_lock(dev);
  885. return 0;
  886. }
  887. static int i2c_dw_reg_slave(struct i2c_adapter *slave)
  888. {
  889. struct dw_i2c_dev *dev = slave->dw_dev;
  890. if (dev->slave)
  891. return -EBUSY;
  892. if (slave->flags & I2C_CLIENT_TEN)
  893. return -ENOTSUP;
  894. /*
  895. * Set slave address in the IC_SAR register,
  896. * the address to which the DW_apb_i2c responds.
  897. */
  898. __i2c_dw_disable_nowait(dev);
  899. dw_writel(dev, slave->addr, DW_IC_SAR);
  900. dev->slave = slave;
  901. __i2c_dw_enable(dev);
  902. dev->cmd_err = 0;
  903. dev->msg_write_idx = 0;
  904. dev->msg_read_idx = 0;
  905. dev->msg_err = 0;
  906. dev->status = STATUS_IDLE;
  907. dev->abort_source = 0;
  908. dev->rx_outstanding = 0;
  909. return 0;
  910. }
  911. static int i2c_dw_unreg_slave(struct i2c_adapter *slave)
  912. {
  913. struct dw_i2c_dev *dev = slave->dw_dev;
  914. dev->disable_int(dev);
  915. dev->disable(dev);
  916. dev->slave = NULL;
  917. return 0;
  918. }
  919. static u32 i2c_dw_read_clear_intrbits_slave(struct dw_i2c_dev *dev)
  920. {
  921. u32 stat;
  922. /*
  923. * The IC_INTR_STAT register just indicates "enabled" interrupts.
  924. * Ths unmasked raw version of interrupt status bits are available
  925. * in the IC_RAW_INTR_STAT register.
  926. *
  927. * That is,
  928. * stat = dw_readl(IC_INTR_STAT);
  929. * equals to,
  930. * stat = dw_readl(IC_RAW_INTR_STAT) & dw_readl(IC_INTR_MASK);
  931. *
  932. * The raw version might be useful for debugging purposes.
  933. */
  934. stat = dw_readl(dev, DW_IC_INTR_STAT);
  935. /*
  936. * Do not use the IC_CLR_INTR register to clear interrupts, or
  937. * you'll miss some interrupts, triggered during the period from
  938. * dw_readl(IC_INTR_STAT) to dw_readl(IC_CLR_INTR).
  939. *
  940. * Instead, use the separately-prepared IC_CLR_* registers.
  941. */
  942. if (stat & DW_IC_INTR_TX_ABRT)
  943. dw_readl(dev, DW_IC_CLR_TX_ABRT);
  944. if (stat & DW_IC_INTR_RX_UNDER)
  945. dw_readl(dev, DW_IC_CLR_RX_UNDER);
  946. if (stat & DW_IC_INTR_RX_OVER)
  947. dw_readl(dev, DW_IC_CLR_RX_OVER);
  948. if (stat & DW_IC_INTR_TX_OVER)
  949. dw_readl(dev, DW_IC_CLR_TX_OVER);
  950. if (stat & DW_IC_INTR_RX_DONE)
  951. dw_readl(dev, DW_IC_CLR_RX_DONE);
  952. if (stat & DW_IC_INTR_ACTIVITY)
  953. dw_readl(dev, DW_IC_CLR_ACTIVITY);
  954. if (stat & DW_IC_INTR_STOP_DET)
  955. dw_readl(dev, DW_IC_CLR_STOP_DET);
  956. if (stat & DW_IC_INTR_START_DET)
  957. dw_readl(dev, DW_IC_CLR_START_DET);
  958. if (stat & DW_IC_INTR_GEN_CALL)
  959. dw_readl(dev, DW_IC_CLR_GEN_CALL);
  960. return stat;
  961. }
  962. /*
  963. * Interrupt service routine. This gets called whenever an I2C slave interrupt
  964. * occurs.
  965. */
  966. static int i2c_dw_irq_handler_slave(struct dw_i2c_dev *dev)
  967. {
  968. u32 raw_stat, stat, enabled;
  969. u8 val, slave_activity;
  970. stat = dw_readl(dev, DW_IC_INTR_STAT);
  971. enabled = dw_readl(dev, DW_IC_ENABLE);
  972. raw_stat = dw_readl(dev, DW_IC_RAW_INTR_STAT);
  973. slave_activity = ((dw_readl(dev, DW_IC_STATUS) &
  974. DW_IC_STATUS_SLAVE_ACTIVITY) >> 6);
  975. if (!enabled || !(raw_stat & ~DW_IC_INTR_ACTIVITY) || !dev->slave)
  976. return 0;
  977. TRACE_DEBUG("%#x STATUS SLAVE_ACTIVITY=%#x : RAW_INTR_STAT=%#x : INTR_STAT=%#x\n",
  978. enabled, slave_activity, raw_stat, stat);
  979. if ((stat & DW_IC_INTR_RX_FULL) && (stat & DW_IC_INTR_STOP_DET))
  980. i2c_slave_event(dev->slave, I2C_SLAVE_WRITE_REQUESTED, &val);
  981. if (stat & DW_IC_INTR_RD_REQ) {
  982. if (slave_activity) {
  983. if (stat & DW_IC_INTR_RX_FULL) {
  984. val = dw_readl(dev, DW_IC_DATA_CMD);
  985. if (!i2c_slave_event(dev->slave,
  986. I2C_SLAVE_WRITE_RECEIVED,
  987. &val)) {
  988. TRACE_DEBUG("Byte %X acked!", val);
  989. }
  990. dw_readl(dev, DW_IC_CLR_RD_REQ);
  991. stat = i2c_dw_read_clear_intrbits_slave(dev);
  992. } else {
  993. dw_readl(dev, DW_IC_CLR_RD_REQ);
  994. dw_readl(dev, DW_IC_CLR_RX_UNDER);
  995. stat = i2c_dw_read_clear_intrbits_slave(dev);
  996. }
  997. if (!i2c_slave_event(dev->slave,
  998. I2C_SLAVE_READ_REQUESTED,
  999. &val))
  1000. dw_writel(dev, val, DW_IC_DATA_CMD);
  1001. }
  1002. }
  1003. if (stat & DW_IC_INTR_RX_DONE) {
  1004. if (!i2c_slave_event(dev->slave, I2C_SLAVE_READ_PROCESSED,
  1005. &val))
  1006. dw_readl(dev, DW_IC_CLR_RX_DONE);
  1007. i2c_slave_event(dev->slave, I2C_SLAVE_STOP, &val);
  1008. stat = i2c_dw_read_clear_intrbits_slave(dev);
  1009. return 1;
  1010. }
  1011. if (stat & DW_IC_INTR_RX_FULL) {
  1012. val = dw_readl(dev, DW_IC_DATA_CMD);
  1013. if (!i2c_slave_event(dev->slave, I2C_SLAVE_WRITE_RECEIVED,
  1014. &val))
  1015. TRACE_DEBUG("Byte %X acked!", val);
  1016. } else {
  1017. i2c_slave_event(dev->slave, I2C_SLAVE_STOP, &val);
  1018. stat = i2c_dw_read_clear_intrbits_slave(dev);
  1019. }
  1020. return 1;
  1021. }
  1022. static void i2c_dw_isr_slave(void *dev_id)
  1023. {
  1024. struct dw_i2c_dev *dev = dev_id;
  1025. int ret;
  1026. i2c_dw_read_clear_intrbits_slave(dev);
  1027. ret = i2c_dw_irq_handler_slave(dev);
  1028. if (ret > 0)
  1029. xQueueSendFromISR(dev->cmd_complete, NULL, 0);
  1030. }
  1031. static const struct i2c_algorithm i2c_dw_slave_algo = {
  1032. .reg_slave = i2c_dw_reg_slave,
  1033. .unreg_slave = i2c_dw_unreg_slave,
  1034. };
  1035. static int dw_i2c_probe(const dw_obj_t *dw_i2c_obj)
  1036. {
  1037. struct i2c_adapter *adap;
  1038. struct dw_i2c_dev *dev;
  1039. int ret;
  1040. if (!dw_i2c_obj)
  1041. return -1;
  1042. sys_soft_reset(dw_i2c_obj->software_n);
  1043. dev = pvPortMalloc(sizeof(struct dw_i2c_dev));
  1044. if (!dev)
  1045. return -1;
  1046. memset(dev, 0, sizeof(struct dw_i2c_dev));
  1047. dev->cmd_complete = xQueueCreate(1, 0);
  1048. dev->base = dw_i2c_obj->base;
  1049. dev->irq = dw_i2c_obj->irqn;
  1050. dev->clk_freq = dw_i2c_obj->default_freq;
  1051. if (dw_i2c_obj->slave_mode_en) {
  1052. i2c_dw_configure_slave(dev);
  1053. } else {
  1054. i2c_dw_configure_master(dev);
  1055. }
  1056. dev->get_clk_rate_khz = i2c_dw_get_clk_rate_khz;
  1057. dw_i2c_set_fifo_size(dev);
  1058. adap = &dev->adapter;
  1059. if (dev->mode == DW_IC_MASTER) {
  1060. dev->init = i2c_dw_init_master;
  1061. dev->disable = i2c_dw_disable;
  1062. dev->disable_int = i2c_dw_disable_int;
  1063. ret = i2c_dw_set_reg_access(dev);
  1064. if (ret)
  1065. return ret;
  1066. ret = i2c_dw_set_timings_master(dev);
  1067. if (ret)
  1068. return ret;
  1069. ret = dev->init(dev);
  1070. if (ret)
  1071. return ret;
  1072. adap->retries = 3;
  1073. adap->algo = &i2c_dw_algo;
  1074. i2c_dw_disable_int(dev);
  1075. request_irq(dev->irq, 0, i2c_dw_isr, dev);
  1076. } else {
  1077. dev->init = i2c_dw_init_slave;
  1078. dev->disable = i2c_dw_disable;
  1079. dev->disable_int = i2c_dw_disable_int;
  1080. ret = i2c_dw_set_reg_access(dev);
  1081. if (ret)
  1082. return ret;
  1083. ret = i2c_dw_set_sda_hold(dev);
  1084. if (ret)
  1085. return ret;
  1086. ret = dev->init(dev);
  1087. if (ret)
  1088. return ret;
  1089. adap->retries = 3;
  1090. adap->algo = &i2c_dw_slave_algo;
  1091. adap->flags |= I2C_CLIENT_SLAVE;
  1092. request_irq(dev->irq, 0, i2c_dw_isr_slave, dev);
  1093. }
  1094. adap->dw_dev = dev;
  1095. snprintf(adap->name, sizeof(adap->name), "i2c%d", dw_i2c_obj->id);
  1096. i2c_add_adapter(adap);
  1097. return 0;
  1098. }
  1099. int i2c_dw_init(int id)
  1100. {
  1101. return dw_i2c_probe(&dw_i2c_obj[id]);
  1102. }