i2c-algo-bit.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. /* ------------------------------------------------------------------------- */
  2. /* i2c-algo-bit.c i2c driver algorithms for bit-shift adapters */
  3. /* ------------------------------------------------------------------------- */
  4. /* Copyright (C) 1995-2000 Simon G. Vogl
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program; if not, write to the Free Software
  15. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
  16. /* ------------------------------------------------------------------------- */
  17. /* With some changes from Frodo Looijaard <frodol@dds.nl>, Kyösti Mälkki
  18. <kmalkki@cc.hut.fi> and Jean Delvare <khali@linux-fr.org> */
  19. #include <linux/kernel.h>
  20. #include <linux/module.h>
  21. #include <linux/delay.h>
  22. #include <linux/slab.h>
  23. #include <linux/init.h>
  24. #include <linux/errno.h>
  25. #include <linux/sched.h>
  26. #include <linux/i2c.h>
  27. #include <linux/i2c-algo-bit.h>
  28. /* ----- global defines ----------------------------------------------- */
  29. #define DEB(x) if (i2c_debug>=1) x;
  30. #define DEB2(x) if (i2c_debug>=2) x;
  31. #define DEBSTAT(x) if (i2c_debug>=3) x; /* print several statistical values*/
  32. #define DEBPROTO(x) if (i2c_debug>=9) { x; }
  33. /* debug the protocol by showing transferred bits */
  34. /* ----- global variables --------------------------------------------- */
  35. /* module parameters:
  36. */
  37. static int i2c_debug;
  38. static int bit_test; /* see if the line-setting functions work */
  39. /* --- setting states on the bus with the right timing: --------------- */
  40. #define setsda(adap,val) adap->setsda(adap->data, val)
  41. #define setscl(adap,val) adap->setscl(adap->data, val)
  42. #define getsda(adap) adap->getsda(adap->data)
  43. #define getscl(adap) adap->getscl(adap->data)
  44. static inline void sdalo(struct i2c_algo_bit_data *adap)
  45. {
  46. setsda(adap,0);
  47. udelay(adap->udelay);
  48. }
  49. static inline void sdahi(struct i2c_algo_bit_data *adap)
  50. {
  51. setsda(adap,1);
  52. udelay(adap->udelay);
  53. }
  54. static inline void scllo(struct i2c_algo_bit_data *adap)
  55. {
  56. setscl(adap,0);
  57. udelay(adap->udelay);
  58. }
  59. /*
  60. * Raise scl line, and do checking for delays. This is necessary for slower
  61. * devices.
  62. */
  63. static inline int sclhi(struct i2c_algo_bit_data *adap)
  64. {
  65. unsigned long start;
  66. setscl(adap,1);
  67. /* Not all adapters have scl sense line... */
  68. if (adap->getscl == NULL ) {
  69. udelay(adap->udelay);
  70. return 0;
  71. }
  72. start=jiffies;
  73. while (! getscl(adap) ) {
  74. /* the hw knows how to read the clock line,
  75. * so we wait until it actually gets high.
  76. * This is safer as some chips may hold it low
  77. * while they are processing data internally.
  78. */
  79. if (time_after_eq(jiffies, start+adap->timeout)) {
  80. return -ETIMEDOUT;
  81. }
  82. cond_resched();
  83. }
  84. DEBSTAT(printk(KERN_DEBUG "needed %ld jiffies\n", jiffies-start));
  85. udelay(adap->udelay);
  86. return 0;
  87. }
  88. /* --- other auxiliary functions -------------------------------------- */
  89. static void i2c_start(struct i2c_algo_bit_data *adap)
  90. {
  91. /* assert: scl, sda are high */
  92. DEBPROTO(printk("S "));
  93. sdalo(adap);
  94. scllo(adap);
  95. }
  96. static void i2c_repstart(struct i2c_algo_bit_data *adap)
  97. {
  98. /* scl, sda may not be high */
  99. DEBPROTO(printk(" Sr "));
  100. setsda(adap,1);
  101. sclhi(adap);
  102. udelay(adap->udelay);
  103. sdalo(adap);
  104. scllo(adap);
  105. }
  106. static void i2c_stop(struct i2c_algo_bit_data *adap)
  107. {
  108. DEBPROTO(printk("P\n"));
  109. /* assert: scl is low */
  110. sdalo(adap);
  111. sclhi(adap);
  112. sdahi(adap);
  113. }
  114. /* send a byte without start cond., look for arbitration,
  115. check ackn. from slave */
  116. /* returns:
  117. * 1 if the device acknowledged
  118. * 0 if the device did not ack
  119. * -ETIMEDOUT if an error occurred (while raising the scl line)
  120. */
  121. static int i2c_outb(struct i2c_adapter *i2c_adap, char c)
  122. {
  123. int i;
  124. int sb;
  125. int ack;
  126. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  127. /* assert: scl is low */
  128. for ( i=7 ; i>=0 ; i-- ) {
  129. sb = c & ( 1 << i );
  130. setsda(adap,sb);
  131. udelay(adap->udelay);
  132. DEBPROTO(printk(KERN_DEBUG "%d",sb!=0));
  133. if (sclhi(adap)<0) { /* timed out */
  134. sdahi(adap); /* we don't want to block the net */
  135. DEB2(printk(KERN_DEBUG " i2c_outb: 0x%02x, timeout at bit #%d\n", c&0xff, i));
  136. return -ETIMEDOUT;
  137. };
  138. /* do arbitration here:
  139. * if ( sb && ! getsda(adap) ) -> ouch! Get out of here.
  140. */
  141. setscl(adap, 0 );
  142. udelay(adap->udelay);
  143. }
  144. sdahi(adap);
  145. if (sclhi(adap)<0){ /* timeout */
  146. DEB2(printk(KERN_DEBUG " i2c_outb: 0x%02x, timeout at ack\n", c&0xff));
  147. return -ETIMEDOUT;
  148. };
  149. /* read ack: SDA should be pulled down by slave */
  150. ack=getsda(adap); /* ack: sda is pulled low ->success. */
  151. DEB2(printk(KERN_DEBUG " i2c_outb: 0x%02x , getsda() = %d\n", c & 0xff, ack));
  152. DEBPROTO( printk(KERN_DEBUG "[%2.2x]",c&0xff) );
  153. DEBPROTO(if (0==ack){ printk(KERN_DEBUG " A ");} else printk(KERN_DEBUG " NA ") );
  154. scllo(adap);
  155. return 0==ack; /* return 1 if device acked */
  156. /* assert: scl is low (sda undef) */
  157. }
  158. static int i2c_inb(struct i2c_adapter *i2c_adap)
  159. {
  160. /* read byte via i2c port, without start/stop sequence */
  161. /* acknowledge is sent in i2c_read. */
  162. int i;
  163. unsigned char indata=0;
  164. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  165. /* assert: scl is low */
  166. sdahi(adap);
  167. for (i=0;i<8;i++) {
  168. if (sclhi(adap)<0) { /* timeout */
  169. DEB2(printk(KERN_DEBUG " i2c_inb: timeout at bit #%d\n", 7-i));
  170. return -ETIMEDOUT;
  171. };
  172. indata *= 2;
  173. if ( getsda(adap) )
  174. indata |= 0x01;
  175. scllo(adap);
  176. }
  177. /* assert: scl is low */
  178. DEB2(printk(KERN_DEBUG "i2c_inb: 0x%02x\n", indata & 0xff));
  179. DEBPROTO(printk(KERN_DEBUG " 0x%02x", indata & 0xff));
  180. return (int) (indata & 0xff);
  181. }
  182. /*
  183. * Sanity check for the adapter hardware - check the reaction of
  184. * the bus lines only if it seems to be idle.
  185. */
  186. static int test_bus(struct i2c_algo_bit_data *adap, char* name) {
  187. int scl,sda;
  188. if (adap->getscl==NULL)
  189. printk(KERN_INFO "i2c-algo-bit.o: Testing SDA only, "
  190. "SCL is not readable.\n");
  191. sda=getsda(adap);
  192. scl=(adap->getscl==NULL?1:getscl(adap));
  193. printk(KERN_DEBUG "i2c-algo-bit.o: (0) scl=%d, sda=%d\n",scl,sda);
  194. if (!scl || !sda ) {
  195. printk(KERN_WARNING "i2c-algo-bit.o: %s seems to be busy.\n", name);
  196. goto bailout;
  197. }
  198. sdalo(adap);
  199. sda=getsda(adap);
  200. scl=(adap->getscl==NULL?1:getscl(adap));
  201. printk(KERN_DEBUG "i2c-algo-bit.o: (1) scl=%d, sda=%d\n",scl,sda);
  202. if ( 0 != sda ) {
  203. printk(KERN_WARNING "i2c-algo-bit.o: SDA stuck high!\n");
  204. goto bailout;
  205. }
  206. if ( 0 == scl ) {
  207. printk(KERN_WARNING "i2c-algo-bit.o: SCL unexpected low "
  208. "while pulling SDA low!\n");
  209. goto bailout;
  210. }
  211. sdahi(adap);
  212. sda=getsda(adap);
  213. scl=(adap->getscl==NULL?1:getscl(adap));
  214. printk(KERN_DEBUG "i2c-algo-bit.o: (2) scl=%d, sda=%d\n",scl,sda);
  215. if ( 0 == sda ) {
  216. printk(KERN_WARNING "i2c-algo-bit.o: SDA stuck low!\n");
  217. goto bailout;
  218. }
  219. if ( 0 == scl ) {
  220. printk(KERN_WARNING "i2c-algo-bit.o: SCL unexpected low "
  221. "while pulling SDA high!\n");
  222. goto bailout;
  223. }
  224. scllo(adap);
  225. sda=getsda(adap);
  226. scl=(adap->getscl==NULL?0:getscl(adap));
  227. printk(KERN_DEBUG "i2c-algo-bit.o: (3) scl=%d, sda=%d\n",scl,sda);
  228. if ( 0 != scl ) {
  229. printk(KERN_WARNING "i2c-algo-bit.o: SCL stuck high!\n");
  230. goto bailout;
  231. }
  232. if ( 0 == sda ) {
  233. printk(KERN_WARNING "i2c-algo-bit.o: SDA unexpected low "
  234. "while pulling SCL low!\n");
  235. goto bailout;
  236. }
  237. sclhi(adap);
  238. sda=getsda(adap);
  239. scl=(adap->getscl==NULL?1:getscl(adap));
  240. printk(KERN_DEBUG "i2c-algo-bit.o: (4) scl=%d, sda=%d\n",scl,sda);
  241. if ( 0 == scl ) {
  242. printk(KERN_WARNING "i2c-algo-bit.o: SCL stuck low!\n");
  243. goto bailout;
  244. }
  245. if ( 0 == sda ) {
  246. printk(KERN_WARNING "i2c-algo-bit.o: SDA unexpected low "
  247. "while pulling SCL high!\n");
  248. goto bailout;
  249. }
  250. printk(KERN_INFO "i2c-algo-bit.o: %s passed test.\n",name);
  251. return 0;
  252. bailout:
  253. sdahi(adap);
  254. sclhi(adap);
  255. return -ENODEV;
  256. }
  257. /* ----- Utility functions
  258. */
  259. /* try_address tries to contact a chip for a number of
  260. * times before it gives up.
  261. * return values:
  262. * 1 chip answered
  263. * 0 chip did not answer
  264. * -x transmission error
  265. */
  266. static inline int try_address(struct i2c_adapter *i2c_adap,
  267. unsigned char addr, int retries)
  268. {
  269. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  270. int i,ret = -1;
  271. for (i=0;i<=retries;i++) {
  272. ret = i2c_outb(i2c_adap,addr);
  273. if (ret==1)
  274. break; /* success! */
  275. i2c_stop(adap);
  276. udelay(5/*adap->udelay*/);
  277. if (i==retries) /* no success */
  278. break;
  279. i2c_start(adap);
  280. udelay(adap->udelay);
  281. }
  282. DEB2(if (i)
  283. printk(KERN_DEBUG "i2c-algo-bit.o: Used %d tries to %s client at 0x%02x : %s\n",
  284. i+1, addr & 1 ? "read" : "write", addr>>1,
  285. ret==1 ? "success" : ret==0 ? "no ack" : "failed, timeout?" )
  286. );
  287. return ret;
  288. }
  289. static int sendbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
  290. {
  291. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  292. char c;
  293. const char *temp = msg->buf;
  294. int count = msg->len;
  295. unsigned short nak_ok = msg->flags & I2C_M_IGNORE_NAK;
  296. int retval;
  297. int wrcount=0;
  298. while (count > 0) {
  299. c = *temp;
  300. DEB2(dev_dbg(&i2c_adap->dev, "sendbytes: writing %2.2X\n", c&0xff));
  301. retval = i2c_outb(i2c_adap,c);
  302. if ((retval>0) || (nak_ok && (retval==0))) { /* ok or ignored NAK */
  303. count--;
  304. temp++;
  305. wrcount++;
  306. } else { /* arbitration or no acknowledge */
  307. dev_err(&i2c_adap->dev, "sendbytes: error - bailout.\n");
  308. i2c_stop(adap);
  309. return (retval<0)? retval : -EFAULT;
  310. /* got a better one ?? */
  311. }
  312. }
  313. return wrcount;
  314. }
  315. static inline int readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
  316. {
  317. int inval;
  318. int rdcount=0; /* counts bytes read */
  319. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  320. char *temp = msg->buf;
  321. int count = msg->len;
  322. while (count > 0) {
  323. inval = i2c_inb(i2c_adap);
  324. if (inval>=0) {
  325. *temp = inval;
  326. rdcount++;
  327. } else { /* read timed out */
  328. printk(KERN_ERR "i2c-algo-bit.o: readbytes: i2c_inb timed out.\n");
  329. break;
  330. }
  331. temp++;
  332. count--;
  333. if (msg->flags & I2C_M_NO_RD_ACK)
  334. continue;
  335. if ( count > 0 ) { /* send ack */
  336. sdalo(adap);
  337. DEBPROTO(printk(" Am "));
  338. } else {
  339. sdahi(adap); /* neg. ack on last byte */
  340. DEBPROTO(printk(" NAm "));
  341. }
  342. if (sclhi(adap)<0) { /* timeout */
  343. sdahi(adap);
  344. printk(KERN_ERR "i2c-algo-bit.o: readbytes: Timeout at ack\n");
  345. return -ETIMEDOUT;
  346. };
  347. scllo(adap);
  348. sdahi(adap);
  349. }
  350. return rdcount;
  351. }
  352. /* doAddress initiates the transfer by generating the start condition (in
  353. * try_address) and transmits the address in the necessary format to handle
  354. * reads, writes as well as 10bit-addresses.
  355. * returns:
  356. * 0 everything went okay, the chip ack'ed, or IGNORE_NAK flag was set
  357. * -x an error occurred (like: -EREMOTEIO if the device did not answer, or
  358. * -ETIMEDOUT, for example if the lines are stuck...)
  359. */
  360. static inline int bit_doAddress(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
  361. {
  362. unsigned short flags = msg->flags;
  363. unsigned short nak_ok = msg->flags & I2C_M_IGNORE_NAK;
  364. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  365. unsigned char addr;
  366. int ret, retries;
  367. retries = nak_ok ? 0 : i2c_adap->retries;
  368. if ( (flags & I2C_M_TEN) ) {
  369. /* a ten bit address */
  370. addr = 0xf0 | (( msg->addr >> 7) & 0x03);
  371. DEB2(printk(KERN_DEBUG "addr0: %d\n",addr));
  372. /* try extended address code...*/
  373. ret = try_address(i2c_adap, addr, retries);
  374. if ((ret != 1) && !nak_ok) {
  375. printk(KERN_ERR "died at extended address code.\n");
  376. return -EREMOTEIO;
  377. }
  378. /* the remaining 8 bit address */
  379. ret = i2c_outb(i2c_adap,msg->addr & 0x7f);
  380. if ((ret != 1) && !nak_ok) {
  381. /* the chip did not ack / xmission error occurred */
  382. printk(KERN_ERR "died at 2nd address code.\n");
  383. return -EREMOTEIO;
  384. }
  385. if ( flags & I2C_M_RD ) {
  386. i2c_repstart(adap);
  387. /* okay, now switch into reading mode */
  388. addr |= 0x01;
  389. ret = try_address(i2c_adap, addr, retries);
  390. if ((ret!=1) && !nak_ok) {
  391. printk(KERN_ERR "died at extended address code.\n");
  392. return -EREMOTEIO;
  393. }
  394. }
  395. } else { /* normal 7bit address */
  396. addr = ( msg->addr << 1 );
  397. if (flags & I2C_M_RD )
  398. addr |= 1;
  399. if (flags & I2C_M_REV_DIR_ADDR )
  400. addr ^= 1;
  401. ret = try_address(i2c_adap, addr, retries);
  402. if ((ret!=1) && !nak_ok)
  403. return -EREMOTEIO;
  404. }
  405. return 0;
  406. }
  407. static int bit_xfer(struct i2c_adapter *i2c_adap,
  408. struct i2c_msg msgs[], int num)
  409. {
  410. struct i2c_msg *pmsg;
  411. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  412. int i,ret;
  413. unsigned short nak_ok;
  414. i2c_start(adap);
  415. for (i=0;i<num;i++) {
  416. pmsg = &msgs[i];
  417. nak_ok = pmsg->flags & I2C_M_IGNORE_NAK;
  418. if (!(pmsg->flags & I2C_M_NOSTART)) {
  419. if (i) {
  420. i2c_repstart(adap);
  421. }
  422. ret = bit_doAddress(i2c_adap, pmsg);
  423. if ((ret != 0) && !nak_ok) {
  424. DEB2(printk(KERN_DEBUG "i2c-algo-bit.o: NAK from device addr %2.2x msg #%d\n"
  425. ,msgs[i].addr,i));
  426. return (ret<0) ? ret : -EREMOTEIO;
  427. }
  428. }
  429. if (pmsg->flags & I2C_M_RD ) {
  430. /* read bytes into buffer*/
  431. ret = readbytes(i2c_adap, pmsg);
  432. DEB2(printk(KERN_DEBUG "i2c-algo-bit.o: read %d bytes.\n",ret));
  433. if (ret < pmsg->len ) {
  434. return (ret<0)? ret : -EREMOTEIO;
  435. }
  436. } else {
  437. /* write bytes from buffer */
  438. ret = sendbytes(i2c_adap, pmsg);
  439. DEB2(printk(KERN_DEBUG "i2c-algo-bit.o: wrote %d bytes.\n",ret));
  440. if (ret < pmsg->len ) {
  441. return (ret<0) ? ret : -EREMOTEIO;
  442. }
  443. }
  444. }
  445. i2c_stop(adap);
  446. return num;
  447. }
  448. static u32 bit_func(struct i2c_adapter *adap)
  449. {
  450. return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL |
  451. I2C_FUNC_10BIT_ADDR | I2C_FUNC_PROTOCOL_MANGLING;
  452. }
  453. /* -----exported algorithm data: ------------------------------------- */
  454. static struct i2c_algorithm i2c_bit_algo = {
  455. .master_xfer = bit_xfer,
  456. .functionality = bit_func,
  457. };
  458. /*
  459. * registering functions to load algorithms at runtime
  460. */
  461. int i2c_bit_add_bus(struct i2c_adapter *adap)
  462. {
  463. struct i2c_algo_bit_data *bit_adap = adap->algo_data;
  464. if (bit_test) {
  465. int ret = test_bus(bit_adap, adap->name);
  466. if (ret<0)
  467. return -ENODEV;
  468. }
  469. DEB2(dev_dbg(&adap->dev, "hw routines registered.\n"));
  470. /* register new adapter to i2c module... */
  471. adap->algo = &i2c_bit_algo;
  472. adap->timeout = 100; /* default values, should */
  473. adap->retries = 3; /* be replaced by defines */
  474. return i2c_add_adapter(adap);
  475. }
  476. int i2c_bit_del_bus(struct i2c_adapter *adap)
  477. {
  478. return i2c_del_adapter(adap);
  479. }
  480. EXPORT_SYMBOL(i2c_bit_add_bus);
  481. EXPORT_SYMBOL(i2c_bit_del_bus);
  482. MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
  483. MODULE_DESCRIPTION("I2C-Bus bit-banging algorithm");
  484. MODULE_LICENSE("GPL");
  485. module_param(bit_test, bool, 0);
  486. module_param(i2c_debug, int, S_IRUGO | S_IWUSR);
  487. MODULE_PARM_DESC(bit_test, "Test the lines of the bus to see if it is stuck");
  488. MODULE_PARM_DESC(i2c_debug,
  489. "debug level - 0 off; 1 normal; 2,3 more verbose; 9 bit-protocol");