i2c-ibm_iic.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017
  1. /*
  2. * drivers/i2c/busses/i2c-ibm_iic.c
  3. *
  4. * Support for the IIC peripheral on IBM PPC 4xx
  5. *
  6. * Copyright (c) 2003, 2004 Zultys Technologies.
  7. * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  8. *
  9. * Copyright (c) 2008 PIKA Technologies
  10. * Sean MacLennan <smaclennan@pikatech.com>
  11. *
  12. * Based on original work by
  13. * Ian DaSilva <idasilva@mvista.com>
  14. * Armin Kuster <akuster@mvista.com>
  15. * Matt Porter <mporter@mvista.com>
  16. *
  17. * Copyright 2000-2003 MontaVista Software Inc.
  18. *
  19. * Original driver version was highly leveraged from i2c-elektor.c
  20. *
  21. * Copyright 1995-97 Simon G. Vogl
  22. * 1998-99 Hans Berglund
  23. *
  24. * With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>
  25. * and even Frodo Looijaard <frodol@dds.nl>
  26. *
  27. * This program is free software; you can redistribute it and/or modify it
  28. * under the terms of the GNU General Public License as published by the
  29. * Free Software Foundation; either version 2 of the License, or (at your
  30. * option) any later version.
  31. *
  32. */
  33. #include <linux/module.h>
  34. #include <linux/kernel.h>
  35. #include <linux/ioport.h>
  36. #include <linux/delay.h>
  37. #include <linux/slab.h>
  38. #include <linux/init.h>
  39. #include <linux/interrupt.h>
  40. #include <asm/irq.h>
  41. #include <asm/io.h>
  42. #include <linux/i2c.h>
  43. #include <linux/i2c-id.h>
  44. #ifdef CONFIG_IBM_OCP
  45. #include <asm/ocp.h>
  46. #include <asm/ibm4xx.h>
  47. #else
  48. #include <linux/of_platform.h>
  49. #endif
  50. #include "i2c-ibm_iic.h"
  51. #define DRIVER_VERSION "2.2"
  52. MODULE_DESCRIPTION("IBM IIC driver v" DRIVER_VERSION);
  53. MODULE_LICENSE("GPL");
  54. static int iic_force_poll;
  55. module_param(iic_force_poll, bool, 0);
  56. MODULE_PARM_DESC(iic_force_poll, "Force polling mode");
  57. static int iic_force_fast;
  58. module_param(iic_force_fast, bool, 0);
  59. MODULE_PARM_DESC(iic_force_fast, "Force fast mode (400 kHz)");
  60. #define DBG_LEVEL 0
  61. #ifdef DBG
  62. #undef DBG
  63. #endif
  64. #ifdef DBG2
  65. #undef DBG2
  66. #endif
  67. #if DBG_LEVEL > 0
  68. # define DBG(f,x...) printk(KERN_DEBUG "ibm-iic" f, ##x)
  69. #else
  70. # define DBG(f,x...) ((void)0)
  71. #endif
  72. #if DBG_LEVEL > 1
  73. # define DBG2(f,x...) DBG(f, ##x)
  74. #else
  75. # define DBG2(f,x...) ((void)0)
  76. #endif
  77. #if DBG_LEVEL > 2
  78. static void dump_iic_regs(const char* header, struct ibm_iic_private* dev)
  79. {
  80. volatile struct iic_regs __iomem *iic = dev->vaddr;
  81. printk(KERN_DEBUG "ibm-iic%d: %s\n", dev->idx, header);
  82. printk(KERN_DEBUG " cntl = 0x%02x, mdcntl = 0x%02x\n"
  83. KERN_DEBUG " sts = 0x%02x, extsts = 0x%02x\n"
  84. KERN_DEBUG " clkdiv = 0x%02x, xfrcnt = 0x%02x\n"
  85. KERN_DEBUG " xtcntlss = 0x%02x, directcntl = 0x%02x\n",
  86. in_8(&iic->cntl), in_8(&iic->mdcntl), in_8(&iic->sts),
  87. in_8(&iic->extsts), in_8(&iic->clkdiv), in_8(&iic->xfrcnt),
  88. in_8(&iic->xtcntlss), in_8(&iic->directcntl));
  89. }
  90. # define DUMP_REGS(h,dev) dump_iic_regs((h),(dev))
  91. #else
  92. # define DUMP_REGS(h,dev) ((void)0)
  93. #endif
  94. /* Bus timings (in ns) for bit-banging */
  95. static struct i2c_timings {
  96. unsigned int hd_sta;
  97. unsigned int su_sto;
  98. unsigned int low;
  99. unsigned int high;
  100. unsigned int buf;
  101. } timings [] = {
  102. /* Standard mode (100 KHz) */
  103. {
  104. .hd_sta = 4000,
  105. .su_sto = 4000,
  106. .low = 4700,
  107. .high = 4000,
  108. .buf = 4700,
  109. },
  110. /* Fast mode (400 KHz) */
  111. {
  112. .hd_sta = 600,
  113. .su_sto = 600,
  114. .low = 1300,
  115. .high = 600,
  116. .buf = 1300,
  117. }};
  118. /* Enable/disable interrupt generation */
  119. static inline void iic_interrupt_mode(struct ibm_iic_private* dev, int enable)
  120. {
  121. out_8(&dev->vaddr->intmsk, enable ? INTRMSK_EIMTC : 0);
  122. }
  123. /*
  124. * Initialize IIC interface.
  125. */
  126. static void iic_dev_init(struct ibm_iic_private* dev)
  127. {
  128. volatile struct iic_regs __iomem *iic = dev->vaddr;
  129. DBG("%d: init\n", dev->idx);
  130. /* Clear master address */
  131. out_8(&iic->lmadr, 0);
  132. out_8(&iic->hmadr, 0);
  133. /* Clear slave address */
  134. out_8(&iic->lsadr, 0);
  135. out_8(&iic->hsadr, 0);
  136. /* Clear status & extended status */
  137. out_8(&iic->sts, STS_SCMP | STS_IRQA);
  138. out_8(&iic->extsts, EXTSTS_IRQP | EXTSTS_IRQD | EXTSTS_LA
  139. | EXTSTS_ICT | EXTSTS_XFRA);
  140. /* Set clock divider */
  141. out_8(&iic->clkdiv, dev->clckdiv);
  142. /* Clear transfer count */
  143. out_8(&iic->xfrcnt, 0);
  144. /* Clear extended control and status */
  145. out_8(&iic->xtcntlss, XTCNTLSS_SRC | XTCNTLSS_SRS | XTCNTLSS_SWC
  146. | XTCNTLSS_SWS);
  147. /* Clear control register */
  148. out_8(&iic->cntl, 0);
  149. /* Enable interrupts if possible */
  150. iic_interrupt_mode(dev, dev->irq >= 0);
  151. /* Set mode control */
  152. out_8(&iic->mdcntl, MDCNTL_FMDB | MDCNTL_EINT | MDCNTL_EUBS
  153. | (dev->fast_mode ? MDCNTL_FSM : 0));
  154. DUMP_REGS("iic_init", dev);
  155. }
  156. /*
  157. * Reset IIC interface
  158. */
  159. static void iic_dev_reset(struct ibm_iic_private* dev)
  160. {
  161. volatile struct iic_regs __iomem *iic = dev->vaddr;
  162. int i;
  163. u8 dc;
  164. DBG("%d: soft reset\n", dev->idx);
  165. DUMP_REGS("reset", dev);
  166. /* Place chip in the reset state */
  167. out_8(&iic->xtcntlss, XTCNTLSS_SRST);
  168. /* Check if bus is free */
  169. dc = in_8(&iic->directcntl);
  170. if (!DIRCTNL_FREE(dc)){
  171. DBG("%d: trying to regain bus control\n", dev->idx);
  172. /* Try to set bus free state */
  173. out_8(&iic->directcntl, DIRCNTL_SDAC | DIRCNTL_SCC);
  174. /* Wait until we regain bus control */
  175. for (i = 0; i < 100; ++i){
  176. dc = in_8(&iic->directcntl);
  177. if (DIRCTNL_FREE(dc))
  178. break;
  179. /* Toggle SCL line */
  180. dc ^= DIRCNTL_SCC;
  181. out_8(&iic->directcntl, dc);
  182. udelay(10);
  183. dc ^= DIRCNTL_SCC;
  184. out_8(&iic->directcntl, dc);
  185. /* be nice */
  186. cond_resched();
  187. }
  188. }
  189. /* Remove reset */
  190. out_8(&iic->xtcntlss, 0);
  191. /* Reinitialize interface */
  192. iic_dev_init(dev);
  193. }
  194. /*
  195. * Do 0-length transaction using bit-banging through IIC_DIRECTCNTL register.
  196. */
  197. /* Wait for SCL and/or SDA to be high */
  198. static int iic_dc_wait(volatile struct iic_regs __iomem *iic, u8 mask)
  199. {
  200. unsigned long x = jiffies + HZ / 28 + 2;
  201. while ((in_8(&iic->directcntl) & mask) != mask){
  202. if (unlikely(time_after(jiffies, x)))
  203. return -1;
  204. cond_resched();
  205. }
  206. return 0;
  207. }
  208. static int iic_smbus_quick(struct ibm_iic_private* dev, const struct i2c_msg* p)
  209. {
  210. volatile struct iic_regs __iomem *iic = dev->vaddr;
  211. const struct i2c_timings* t = &timings[dev->fast_mode ? 1 : 0];
  212. u8 mask, v, sda;
  213. int i, res;
  214. /* Only 7-bit addresses are supported */
  215. if (unlikely(p->flags & I2C_M_TEN)){
  216. DBG("%d: smbus_quick - 10 bit addresses are not supported\n",
  217. dev->idx);
  218. return -EINVAL;
  219. }
  220. DBG("%d: smbus_quick(0x%02x)\n", dev->idx, p->addr);
  221. /* Reset IIC interface */
  222. out_8(&iic->xtcntlss, XTCNTLSS_SRST);
  223. /* Wait for bus to become free */
  224. out_8(&iic->directcntl, DIRCNTL_SDAC | DIRCNTL_SCC);
  225. if (unlikely(iic_dc_wait(iic, DIRCNTL_MSDA | DIRCNTL_MSC)))
  226. goto err;
  227. ndelay(t->buf);
  228. /* START */
  229. out_8(&iic->directcntl, DIRCNTL_SCC);
  230. sda = 0;
  231. ndelay(t->hd_sta);
  232. /* Send address */
  233. v = (u8)((p->addr << 1) | ((p->flags & I2C_M_RD) ? 1 : 0));
  234. for (i = 0, mask = 0x80; i < 8; ++i, mask >>= 1){
  235. out_8(&iic->directcntl, sda);
  236. ndelay(t->low / 2);
  237. sda = (v & mask) ? DIRCNTL_SDAC : 0;
  238. out_8(&iic->directcntl, sda);
  239. ndelay(t->low / 2);
  240. out_8(&iic->directcntl, DIRCNTL_SCC | sda);
  241. if (unlikely(iic_dc_wait(iic, DIRCNTL_MSC)))
  242. goto err;
  243. ndelay(t->high);
  244. }
  245. /* ACK */
  246. out_8(&iic->directcntl, sda);
  247. ndelay(t->low / 2);
  248. out_8(&iic->directcntl, DIRCNTL_SDAC);
  249. ndelay(t->low / 2);
  250. out_8(&iic->directcntl, DIRCNTL_SDAC | DIRCNTL_SCC);
  251. if (unlikely(iic_dc_wait(iic, DIRCNTL_MSC)))
  252. goto err;
  253. res = (in_8(&iic->directcntl) & DIRCNTL_MSDA) ? -EREMOTEIO : 1;
  254. ndelay(t->high);
  255. /* STOP */
  256. out_8(&iic->directcntl, 0);
  257. ndelay(t->low);
  258. out_8(&iic->directcntl, DIRCNTL_SCC);
  259. if (unlikely(iic_dc_wait(iic, DIRCNTL_MSC)))
  260. goto err;
  261. ndelay(t->su_sto);
  262. out_8(&iic->directcntl, DIRCNTL_SDAC | DIRCNTL_SCC);
  263. ndelay(t->buf);
  264. DBG("%d: smbus_quick -> %s\n", dev->idx, res ? "NACK" : "ACK");
  265. out:
  266. /* Remove reset */
  267. out_8(&iic->xtcntlss, 0);
  268. /* Reinitialize interface */
  269. iic_dev_init(dev);
  270. return res;
  271. err:
  272. DBG("%d: smbus_quick - bus is stuck\n", dev->idx);
  273. res = -EREMOTEIO;
  274. goto out;
  275. }
  276. /*
  277. * IIC interrupt handler
  278. */
  279. static irqreturn_t iic_handler(int irq, void *dev_id)
  280. {
  281. struct ibm_iic_private* dev = (struct ibm_iic_private*)dev_id;
  282. volatile struct iic_regs __iomem *iic = dev->vaddr;
  283. DBG2("%d: irq handler, STS = 0x%02x, EXTSTS = 0x%02x\n",
  284. dev->idx, in_8(&iic->sts), in_8(&iic->extsts));
  285. /* Acknowledge IRQ and wakeup iic_wait_for_tc */
  286. out_8(&iic->sts, STS_IRQA | STS_SCMP);
  287. wake_up_interruptible(&dev->wq);
  288. return IRQ_HANDLED;
  289. }
  290. /*
  291. * Get master transfer result and clear errors if any.
  292. * Returns the number of actually transferred bytes or error (<0)
  293. */
  294. static int iic_xfer_result(struct ibm_iic_private* dev)
  295. {
  296. volatile struct iic_regs __iomem *iic = dev->vaddr;
  297. if (unlikely(in_8(&iic->sts) & STS_ERR)){
  298. DBG("%d: xfer error, EXTSTS = 0x%02x\n", dev->idx,
  299. in_8(&iic->extsts));
  300. /* Clear errors and possible pending IRQs */
  301. out_8(&iic->extsts, EXTSTS_IRQP | EXTSTS_IRQD |
  302. EXTSTS_LA | EXTSTS_ICT | EXTSTS_XFRA);
  303. /* Flush master data buffer */
  304. out_8(&iic->mdcntl, in_8(&iic->mdcntl) | MDCNTL_FMDB);
  305. /* Is bus free?
  306. * If error happened during combined xfer
  307. * IIC interface is usually stuck in some strange
  308. * state, the only way out - soft reset.
  309. */
  310. if ((in_8(&iic->extsts) & EXTSTS_BCS_MASK) != EXTSTS_BCS_FREE){
  311. DBG("%d: bus is stuck, resetting\n", dev->idx);
  312. iic_dev_reset(dev);
  313. }
  314. return -EREMOTEIO;
  315. }
  316. else
  317. return in_8(&iic->xfrcnt) & XFRCNT_MTC_MASK;
  318. }
  319. /*
  320. * Try to abort active transfer.
  321. */
  322. static void iic_abort_xfer(struct ibm_iic_private* dev)
  323. {
  324. volatile struct iic_regs __iomem *iic = dev->vaddr;
  325. unsigned long x;
  326. DBG("%d: iic_abort_xfer\n", dev->idx);
  327. out_8(&iic->cntl, CNTL_HMT);
  328. /*
  329. * Wait for the abort command to complete.
  330. * It's not worth to be optimized, just poll (timeout >= 1 tick)
  331. */
  332. x = jiffies + 2;
  333. while ((in_8(&iic->extsts) & EXTSTS_BCS_MASK) != EXTSTS_BCS_FREE){
  334. if (time_after(jiffies, x)){
  335. DBG("%d: abort timeout, resetting...\n", dev->idx);
  336. iic_dev_reset(dev);
  337. return;
  338. }
  339. schedule();
  340. }
  341. /* Just to clear errors */
  342. iic_xfer_result(dev);
  343. }
  344. /*
  345. * Wait for master transfer to complete.
  346. * It puts current process to sleep until we get interrupt or timeout expires.
  347. * Returns the number of transferred bytes or error (<0)
  348. */
  349. static int iic_wait_for_tc(struct ibm_iic_private* dev){
  350. volatile struct iic_regs __iomem *iic = dev->vaddr;
  351. int ret = 0;
  352. if (dev->irq >= 0){
  353. /* Interrupt mode */
  354. ret = wait_event_interruptible_timeout(dev->wq,
  355. !(in_8(&iic->sts) & STS_PT), dev->adap.timeout * HZ);
  356. if (unlikely(ret < 0))
  357. DBG("%d: wait interrupted\n", dev->idx);
  358. else if (unlikely(in_8(&iic->sts) & STS_PT)){
  359. DBG("%d: wait timeout\n", dev->idx);
  360. ret = -ETIMEDOUT;
  361. }
  362. }
  363. else {
  364. /* Polling mode */
  365. unsigned long x = jiffies + dev->adap.timeout * HZ;
  366. while (in_8(&iic->sts) & STS_PT){
  367. if (unlikely(time_after(jiffies, x))){
  368. DBG("%d: poll timeout\n", dev->idx);
  369. ret = -ETIMEDOUT;
  370. break;
  371. }
  372. if (unlikely(signal_pending(current))){
  373. DBG("%d: poll interrupted\n", dev->idx);
  374. ret = -ERESTARTSYS;
  375. break;
  376. }
  377. schedule();
  378. }
  379. }
  380. if (unlikely(ret < 0))
  381. iic_abort_xfer(dev);
  382. else
  383. ret = iic_xfer_result(dev);
  384. DBG2("%d: iic_wait_for_tc -> %d\n", dev->idx, ret);
  385. return ret;
  386. }
  387. /*
  388. * Low level master transfer routine
  389. */
  390. static int iic_xfer_bytes(struct ibm_iic_private* dev, struct i2c_msg* pm,
  391. int combined_xfer)
  392. {
  393. volatile struct iic_regs __iomem *iic = dev->vaddr;
  394. char* buf = pm->buf;
  395. int i, j, loops, ret = 0;
  396. int len = pm->len;
  397. u8 cntl = (in_8(&iic->cntl) & CNTL_AMD) | CNTL_PT;
  398. if (pm->flags & I2C_M_RD)
  399. cntl |= CNTL_RW;
  400. loops = (len + 3) / 4;
  401. for (i = 0; i < loops; ++i, len -= 4){
  402. int count = len > 4 ? 4 : len;
  403. u8 cmd = cntl | ((count - 1) << CNTL_TCT_SHIFT);
  404. if (!(cntl & CNTL_RW))
  405. for (j = 0; j < count; ++j)
  406. out_8((void __iomem *)&iic->mdbuf, *buf++);
  407. if (i < loops - 1)
  408. cmd |= CNTL_CHT;
  409. else if (combined_xfer)
  410. cmd |= CNTL_RPST;
  411. DBG2("%d: xfer_bytes, %d, CNTL = 0x%02x\n", dev->idx, count, cmd);
  412. /* Start transfer */
  413. out_8(&iic->cntl, cmd);
  414. /* Wait for completion */
  415. ret = iic_wait_for_tc(dev);
  416. if (unlikely(ret < 0))
  417. break;
  418. else if (unlikely(ret != count)){
  419. DBG("%d: xfer_bytes, requested %d, transfered %d\n",
  420. dev->idx, count, ret);
  421. /* If it's not a last part of xfer, abort it */
  422. if (combined_xfer || (i < loops - 1))
  423. iic_abort_xfer(dev);
  424. ret = -EREMOTEIO;
  425. break;
  426. }
  427. if (cntl & CNTL_RW)
  428. for (j = 0; j < count; ++j)
  429. *buf++ = in_8((void __iomem *)&iic->mdbuf);
  430. }
  431. return ret > 0 ? 0 : ret;
  432. }
  433. /*
  434. * Set target slave address for master transfer
  435. */
  436. static inline void iic_address(struct ibm_iic_private* dev, struct i2c_msg* msg)
  437. {
  438. volatile struct iic_regs __iomem *iic = dev->vaddr;
  439. u16 addr = msg->addr;
  440. DBG2("%d: iic_address, 0x%03x (%d-bit)\n", dev->idx,
  441. addr, msg->flags & I2C_M_TEN ? 10 : 7);
  442. if (msg->flags & I2C_M_TEN){
  443. out_8(&iic->cntl, CNTL_AMD);
  444. out_8(&iic->lmadr, addr);
  445. out_8(&iic->hmadr, 0xf0 | ((addr >> 7) & 0x06));
  446. }
  447. else {
  448. out_8(&iic->cntl, 0);
  449. out_8(&iic->lmadr, addr << 1);
  450. }
  451. }
  452. static inline int iic_invalid_address(const struct i2c_msg* p)
  453. {
  454. return (p->addr > 0x3ff) || (!(p->flags & I2C_M_TEN) && (p->addr > 0x7f));
  455. }
  456. static inline int iic_address_neq(const struct i2c_msg* p1,
  457. const struct i2c_msg* p2)
  458. {
  459. return (p1->addr != p2->addr)
  460. || ((p1->flags & I2C_M_TEN) != (p2->flags & I2C_M_TEN));
  461. }
  462. /*
  463. * Generic master transfer entrypoint.
  464. * Returns the number of processed messages or error (<0)
  465. */
  466. static int iic_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
  467. {
  468. struct ibm_iic_private* dev = (struct ibm_iic_private*)(i2c_get_adapdata(adap));
  469. volatile struct iic_regs __iomem *iic = dev->vaddr;
  470. int i, ret = 0;
  471. DBG2("%d: iic_xfer, %d msg(s)\n", dev->idx, num);
  472. if (!num)
  473. return 0;
  474. /* Check the sanity of the passed messages.
  475. * Uhh, generic i2c layer is more suitable place for such code...
  476. */
  477. if (unlikely(iic_invalid_address(&msgs[0]))){
  478. DBG("%d: invalid address 0x%03x (%d-bit)\n", dev->idx,
  479. msgs[0].addr, msgs[0].flags & I2C_M_TEN ? 10 : 7);
  480. return -EINVAL;
  481. }
  482. for (i = 0; i < num; ++i){
  483. if (unlikely(msgs[i].len <= 0)){
  484. if (num == 1 && !msgs[0].len){
  485. /* Special case for I2C_SMBUS_QUICK emulation.
  486. * IBM IIC doesn't support 0-length transactions
  487. * so we have to emulate them using bit-banging.
  488. */
  489. return iic_smbus_quick(dev, &msgs[0]);
  490. }
  491. DBG("%d: invalid len %d in msg[%d]\n", dev->idx,
  492. msgs[i].len, i);
  493. return -EINVAL;
  494. }
  495. if (unlikely(iic_address_neq(&msgs[0], &msgs[i]))){
  496. DBG("%d: invalid addr in msg[%d]\n", dev->idx, i);
  497. return -EINVAL;
  498. }
  499. }
  500. /* Check bus state */
  501. if (unlikely((in_8(&iic->extsts) & EXTSTS_BCS_MASK) != EXTSTS_BCS_FREE)){
  502. DBG("%d: iic_xfer, bus is not free\n", dev->idx);
  503. /* Usually it means something serious has happend.
  504. * We *cannot* have unfinished previous transfer
  505. * so it doesn't make any sense to try to stop it.
  506. * Probably we were not able to recover from the
  507. * previous error.
  508. * The only *reasonable* thing I can think of here
  509. * is soft reset. --ebs
  510. */
  511. iic_dev_reset(dev);
  512. if ((in_8(&iic->extsts) & EXTSTS_BCS_MASK) != EXTSTS_BCS_FREE){
  513. DBG("%d: iic_xfer, bus is still not free\n", dev->idx);
  514. return -EREMOTEIO;
  515. }
  516. }
  517. else {
  518. /* Flush master data buffer (just in case) */
  519. out_8(&iic->mdcntl, in_8(&iic->mdcntl) | MDCNTL_FMDB);
  520. }
  521. /* Load slave address */
  522. iic_address(dev, &msgs[0]);
  523. /* Do real transfer */
  524. for (i = 0; i < num && !ret; ++i)
  525. ret = iic_xfer_bytes(dev, &msgs[i], i < num - 1);
  526. return ret < 0 ? ret : num;
  527. }
  528. static u32 iic_func(struct i2c_adapter *adap)
  529. {
  530. return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR;
  531. }
  532. static const struct i2c_algorithm iic_algo = {
  533. .master_xfer = iic_xfer,
  534. .functionality = iic_func
  535. };
  536. /*
  537. * Calculates IICx_CLCKDIV value for a specific OPB clock frequency
  538. */
  539. static inline u8 iic_clckdiv(unsigned int opb)
  540. {
  541. /* Compatibility kludge, should go away after all cards
  542. * are fixed to fill correct value for opbfreq.
  543. * Previous driver version used hardcoded divider value 4,
  544. * it corresponds to OPB frequency from the range (40, 50] MHz
  545. */
  546. if (!opb){
  547. printk(KERN_WARNING "ibm-iic: using compatibility value for OPB freq,"
  548. " fix your board specific setup\n");
  549. opb = 50000000;
  550. }
  551. /* Convert to MHz */
  552. opb /= 1000000;
  553. if (opb < 20 || opb > 150){
  554. printk(KERN_WARNING "ibm-iic: invalid OPB clock frequency %u MHz\n",
  555. opb);
  556. opb = opb < 20 ? 20 : 150;
  557. }
  558. return (u8)((opb + 9) / 10 - 1);
  559. }
  560. #ifdef CONFIG_IBM_OCP
  561. /*
  562. * Register single IIC interface
  563. */
  564. static int __devinit iic_probe(struct ocp_device *ocp){
  565. struct ibm_iic_private* dev;
  566. struct i2c_adapter* adap;
  567. struct ocp_func_iic_data* iic_data = ocp->def->additions;
  568. int ret;
  569. if (!iic_data)
  570. printk(KERN_WARNING"ibm-iic%d: missing additional data!\n",
  571. ocp->def->index);
  572. if (!(dev = kzalloc(sizeof(*dev), GFP_KERNEL))) {
  573. printk(KERN_ERR "ibm-iic%d: failed to allocate device data\n",
  574. ocp->def->index);
  575. return -ENOMEM;
  576. }
  577. dev->idx = ocp->def->index;
  578. ocp_set_drvdata(ocp, dev);
  579. if (!request_mem_region(ocp->def->paddr, sizeof(struct iic_regs),
  580. "ibm_iic")) {
  581. ret = -EBUSY;
  582. goto fail1;
  583. }
  584. if (!(dev->vaddr = ioremap(ocp->def->paddr, sizeof(struct iic_regs)))){
  585. printk(KERN_ERR "ibm-iic%d: failed to ioremap device registers\n",
  586. dev->idx);
  587. ret = -ENXIO;
  588. goto fail2;
  589. }
  590. init_waitqueue_head(&dev->wq);
  591. dev->irq = iic_force_poll ? -1 : ocp->def->irq;
  592. if (dev->irq >= 0){
  593. /* Disable interrupts until we finish initialization,
  594. assumes level-sensitive IRQ setup...
  595. */
  596. iic_interrupt_mode(dev, 0);
  597. if (request_irq(dev->irq, iic_handler, 0, "IBM IIC", dev)){
  598. printk(KERN_ERR "ibm-iic%d: request_irq %d failed\n",
  599. dev->idx, dev->irq);
  600. /* Fallback to the polling mode */
  601. dev->irq = -1;
  602. }
  603. }
  604. if (dev->irq < 0)
  605. printk(KERN_WARNING "ibm-iic%d: using polling mode\n",
  606. dev->idx);
  607. /* Board specific settings */
  608. dev->fast_mode = iic_force_fast ? 1 : (iic_data ? iic_data->fast_mode : 0);
  609. /* clckdiv is the same for *all* IIC interfaces,
  610. * but I'd rather make a copy than introduce another global. --ebs
  611. */
  612. dev->clckdiv = iic_clckdiv(ocp_sys_info.opb_bus_freq);
  613. DBG("%d: clckdiv = %d\n", dev->idx, dev->clckdiv);
  614. /* Initialize IIC interface */
  615. iic_dev_init(dev);
  616. /* Register it with i2c layer */
  617. adap = &dev->adap;
  618. adap->dev.parent = &ocp->dev;
  619. strcpy(adap->name, "IBM IIC");
  620. i2c_set_adapdata(adap, dev);
  621. adap->id = I2C_HW_OCP;
  622. adap->class = I2C_CLASS_HWMON;
  623. adap->algo = &iic_algo;
  624. adap->client_register = NULL;
  625. adap->client_unregister = NULL;
  626. adap->timeout = 1;
  627. /*
  628. * If "dev->idx" is negative we consider it as zero.
  629. * The reason to do so is to avoid sysfs names that only make
  630. * sense when there are multiple adapters.
  631. */
  632. adap->nr = dev->idx >= 0 ? dev->idx : 0;
  633. if ((ret = i2c_add_numbered_adapter(adap)) < 0) {
  634. printk(KERN_ERR "ibm-iic%d: failed to register i2c adapter\n",
  635. dev->idx);
  636. goto fail;
  637. }
  638. printk(KERN_INFO "ibm-iic%d: using %s mode\n", dev->idx,
  639. dev->fast_mode ? "fast (400 kHz)" : "standard (100 kHz)");
  640. return 0;
  641. fail:
  642. if (dev->irq >= 0){
  643. iic_interrupt_mode(dev, 0);
  644. free_irq(dev->irq, dev);
  645. }
  646. iounmap(dev->vaddr);
  647. fail2:
  648. release_mem_region(ocp->def->paddr, sizeof(struct iic_regs));
  649. fail1:
  650. ocp_set_drvdata(ocp, NULL);
  651. kfree(dev);
  652. return ret;
  653. }
  654. /*
  655. * Cleanup initialized IIC interface
  656. */
  657. static void __devexit iic_remove(struct ocp_device *ocp)
  658. {
  659. struct ibm_iic_private* dev = (struct ibm_iic_private*)ocp_get_drvdata(ocp);
  660. BUG_ON(dev == NULL);
  661. if (i2c_del_adapter(&dev->adap)){
  662. printk(KERN_ERR "ibm-iic%d: failed to delete i2c adapter :(\n",
  663. dev->idx);
  664. /* That's *very* bad, just shutdown IRQ ... */
  665. if (dev->irq >= 0){
  666. iic_interrupt_mode(dev, 0);
  667. free_irq(dev->irq, dev);
  668. dev->irq = -1;
  669. }
  670. } else {
  671. if (dev->irq >= 0){
  672. iic_interrupt_mode(dev, 0);
  673. free_irq(dev->irq, dev);
  674. }
  675. iounmap(dev->vaddr);
  676. release_mem_region(ocp->def->paddr, sizeof(struct iic_regs));
  677. kfree(dev);
  678. }
  679. }
  680. static struct ocp_device_id ibm_iic_ids[] __devinitdata =
  681. {
  682. { .vendor = OCP_VENDOR_IBM, .function = OCP_FUNC_IIC },
  683. { .vendor = OCP_VENDOR_INVALID }
  684. };
  685. MODULE_DEVICE_TABLE(ocp, ibm_iic_ids);
  686. static struct ocp_driver ibm_iic_driver =
  687. {
  688. .name = "iic",
  689. .id_table = ibm_iic_ids,
  690. .probe = iic_probe,
  691. .remove = __devexit_p(iic_remove),
  692. #if defined(CONFIG_PM)
  693. .suspend = NULL,
  694. .resume = NULL,
  695. #endif
  696. };
  697. static int __init iic_init(void)
  698. {
  699. printk(KERN_INFO "IBM IIC driver v" DRIVER_VERSION "\n");
  700. return ocp_register_driver(&ibm_iic_driver);
  701. }
  702. static void __exit iic_exit(void)
  703. {
  704. ocp_unregister_driver(&ibm_iic_driver);
  705. }
  706. #else /* !CONFIG_IBM_OCP */
  707. static int __devinit iic_request_irq(struct of_device *ofdev,
  708. struct ibm_iic_private *dev)
  709. {
  710. struct device_node *np = ofdev->node;
  711. int irq;
  712. if (iic_force_poll)
  713. return NO_IRQ;
  714. irq = irq_of_parse_and_map(np, 0);
  715. if (irq == NO_IRQ) {
  716. dev_err(&ofdev->dev, "irq_of_parse_and_map failed\n");
  717. return NO_IRQ;
  718. }
  719. /* Disable interrupts until we finish initialization, assumes
  720. * level-sensitive IRQ setup...
  721. */
  722. iic_interrupt_mode(dev, 0);
  723. if (request_irq(irq, iic_handler, 0, "IBM IIC", dev)) {
  724. dev_err(&ofdev->dev, "request_irq %d failed\n", irq);
  725. /* Fallback to the polling mode */
  726. return NO_IRQ;
  727. }
  728. return irq;
  729. }
  730. /*
  731. * Register single IIC interface
  732. */
  733. static int __devinit iic_probe(struct of_device *ofdev,
  734. const struct of_device_id *match)
  735. {
  736. struct device_node *np = ofdev->node;
  737. struct ibm_iic_private *dev;
  738. struct i2c_adapter *adap;
  739. const u32 *indexp, *freq;
  740. int ret;
  741. dev = kzalloc(sizeof(*dev), GFP_KERNEL);
  742. if (!dev) {
  743. dev_err(&ofdev->dev, "failed to allocate device data\n");
  744. return -ENOMEM;
  745. }
  746. dev_set_drvdata(&ofdev->dev, dev);
  747. indexp = of_get_property(np, "index", NULL);
  748. if (!indexp) {
  749. dev_err(&ofdev->dev, "no index specified\n");
  750. ret = -EINVAL;
  751. goto error_cleanup;
  752. }
  753. dev->idx = *indexp;
  754. dev->vaddr = of_iomap(np, 0);
  755. if (dev->vaddr == NULL) {
  756. dev_err(&ofdev->dev, "failed to iomap device\n");
  757. ret = -ENXIO;
  758. goto error_cleanup;
  759. }
  760. init_waitqueue_head(&dev->wq);
  761. dev->irq = iic_request_irq(ofdev, dev);
  762. if (dev->irq == NO_IRQ)
  763. dev_warn(&ofdev->dev, "using polling mode\n");
  764. /* Board specific settings */
  765. if (iic_force_fast || of_get_property(np, "fast-mode", NULL))
  766. dev->fast_mode = 1;
  767. freq = of_get_property(np, "clock-frequency", NULL);
  768. if (freq == NULL) {
  769. freq = of_get_property(np->parent, "clock-frequency", NULL);
  770. if (freq == NULL) {
  771. dev_err(&ofdev->dev, "Unable to get bus frequency\n");
  772. ret = -EINVAL;
  773. goto error_cleanup;
  774. }
  775. }
  776. dev->clckdiv = iic_clckdiv(*freq);
  777. dev_dbg(&ofdev->dev, "clckdiv = %d\n", dev->clckdiv);
  778. /* Initialize IIC interface */
  779. iic_dev_init(dev);
  780. /* Register it with i2c layer */
  781. adap = &dev->adap;
  782. adap->dev.parent = &ofdev->dev;
  783. strlcpy(adap->name, "IBM IIC", sizeof(adap->name));
  784. i2c_set_adapdata(adap, dev);
  785. adap->id = I2C_HW_OCP;
  786. adap->class = I2C_CLASS_HWMON;
  787. adap->algo = &iic_algo;
  788. adap->timeout = 1;
  789. adap->nr = dev->idx;
  790. ret = i2c_add_numbered_adapter(adap);
  791. if (ret < 0) {
  792. dev_err(&ofdev->dev, "failed to register i2c adapter\n");
  793. goto error_cleanup;
  794. }
  795. dev_info(&ofdev->dev, "using %s mode\n",
  796. dev->fast_mode ? "fast (400 kHz)" : "standard (100 kHz)");
  797. return 0;
  798. error_cleanup:
  799. if (dev->irq != NO_IRQ) {
  800. iic_interrupt_mode(dev, 0);
  801. free_irq(dev->irq, dev);
  802. }
  803. if (dev->vaddr)
  804. iounmap(dev->vaddr);
  805. dev_set_drvdata(&ofdev->dev, NULL);
  806. kfree(dev);
  807. return ret;
  808. }
  809. /*
  810. * Cleanup initialized IIC interface
  811. */
  812. static int __devexit iic_remove(struct of_device *ofdev)
  813. {
  814. struct ibm_iic_private *dev = dev_get_drvdata(&ofdev->dev);
  815. dev_set_drvdata(&ofdev->dev, NULL);
  816. i2c_del_adapter(&dev->adap);
  817. if (dev->irq != NO_IRQ) {
  818. iic_interrupt_mode(dev, 0);
  819. free_irq(dev->irq, dev);
  820. }
  821. iounmap(dev->vaddr);
  822. kfree(dev);
  823. return 0;
  824. }
  825. static const struct of_device_id ibm_iic_match[] = {
  826. { .compatible = "ibm,iic-405ex", },
  827. { .compatible = "ibm,iic-405gp", },
  828. { .compatible = "ibm,iic-440gp", },
  829. { .compatible = "ibm,iic-440gpx", },
  830. { .compatible = "ibm,iic-440grx", },
  831. {}
  832. };
  833. static struct of_platform_driver ibm_iic_driver = {
  834. .name = "ibm-iic",
  835. .match_table = ibm_iic_match,
  836. .probe = iic_probe,
  837. .remove = __devexit_p(iic_remove),
  838. };
  839. static int __init iic_init(void)
  840. {
  841. return of_register_platform_driver(&ibm_iic_driver);
  842. }
  843. static void __exit iic_exit(void)
  844. {
  845. of_unregister_platform_driver(&ibm_iic_driver);
  846. }
  847. #endif /* CONFIG_IBM_OCP */
  848. module_init(iic_init);
  849. module_exit(iic_exit);