i2c-algo-bit.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  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 + 1) / 2);
  48. }
  49. static inline void sdahi(struct i2c_algo_bit_data *adap)
  50. {
  51. setsda(adap,1);
  52. udelay((adap->udelay + 1) / 2);
  53. }
  54. static inline void scllo(struct i2c_algo_bit_data *adap)
  55. {
  56. setscl(adap,0);
  57. udelay(adap->udelay / 2);
  58. }
  59. /*
  60. * Raise scl line, and do checking for delays. This is necessary for slower
  61. * devices.
  62. */
  63. static 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)
  69. goto done;
  70. start=jiffies;
  71. while (! getscl(adap) ) {
  72. /* the hw knows how to read the clock line,
  73. * so we wait until it actually gets high.
  74. * This is safer as some chips may hold it low
  75. * while they are processing data internally.
  76. */
  77. if (time_after_eq(jiffies, start+adap->timeout)) {
  78. return -ETIMEDOUT;
  79. }
  80. cond_resched();
  81. }
  82. DEBSTAT(printk(KERN_DEBUG "needed %ld jiffies\n", jiffies-start));
  83. done:
  84. udelay(adap->udelay);
  85. return 0;
  86. }
  87. /* --- other auxiliary functions -------------------------------------- */
  88. static void i2c_start(struct i2c_algo_bit_data *adap)
  89. {
  90. /* assert: scl, sda are high */
  91. DEBPROTO(printk("S "));
  92. setsda(adap, 0);
  93. udelay(adap->udelay);
  94. scllo(adap);
  95. }
  96. static void i2c_repstart(struct i2c_algo_bit_data *adap)
  97. {
  98. /* assert: scl is low */
  99. DEBPROTO(printk(" Sr "));
  100. sdahi(adap);
  101. sclhi(adap);
  102. setsda(adap, 0);
  103. udelay(adap->udelay);
  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. setsda(adap, 1);
  113. udelay(adap->udelay);
  114. }
  115. /* send a byte without start cond., look for arbitration,
  116. check ackn. from slave */
  117. /* returns:
  118. * 1 if the device acknowledged
  119. * 0 if the device did not ack
  120. * -ETIMEDOUT if an error occurred (while raising the scl line)
  121. */
  122. static int i2c_outb(struct i2c_adapter *i2c_adap, char c)
  123. {
  124. int i;
  125. int sb;
  126. int ack;
  127. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  128. /* assert: scl is low */
  129. for ( i=7 ; i>=0 ; i-- ) {
  130. sb = c & ( 1 << i );
  131. setsda(adap,sb);
  132. udelay((adap->udelay + 1) / 2);
  133. DEBPROTO(printk(KERN_DEBUG "%d",sb!=0));
  134. if (sclhi(adap)<0) { /* timed out */
  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. scllo(adap);
  142. }
  143. sdahi(adap);
  144. if (sclhi(adap)<0){ /* timeout */
  145. DEB2(printk(KERN_DEBUG " i2c_outb: 0x%02x, timeout at ack\n", c&0xff));
  146. return -ETIMEDOUT;
  147. };
  148. /* read ack: SDA should be pulled down by slave */
  149. ack=getsda(adap); /* ack: sda is pulled low ->success. */
  150. DEB2(printk(KERN_DEBUG " i2c_outb: 0x%02x , getsda() = %d\n", c & 0xff, ack));
  151. DEBPROTO( printk(KERN_DEBUG "[%2.2x]",c&0xff) );
  152. DEBPROTO(if (0==ack){ printk(KERN_DEBUG " A ");} else printk(KERN_DEBUG " NA ") );
  153. scllo(adap);
  154. return 0==ack; /* return 1 if device acked */
  155. /* assert: scl is low (sda undef) */
  156. }
  157. static int i2c_inb(struct i2c_adapter *i2c_adap)
  158. {
  159. /* read byte via i2c port, without start/stop sequence */
  160. /* acknowledge is sent in i2c_read. */
  161. int i;
  162. unsigned char indata=0;
  163. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  164. /* assert: scl is low */
  165. sdahi(adap);
  166. for (i=0;i<8;i++) {
  167. if (sclhi(adap)<0) { /* timeout */
  168. DEB2(printk(KERN_DEBUG " i2c_inb: timeout at bit #%d\n", 7-i));
  169. return -ETIMEDOUT;
  170. };
  171. indata *= 2;
  172. if ( getsda(adap) )
  173. indata |= 0x01;
  174. setscl(adap, 0);
  175. udelay(i == 7 ? adap->udelay / 2 : adap->udelay);
  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 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 || i == retries)
  274. break;
  275. i2c_stop(adap);
  276. udelay(adap->udelay);
  277. yield();
  278. i2c_start(adap);
  279. }
  280. DEB2(if (i)
  281. printk(KERN_DEBUG "i2c-algo-bit.o: Used %d tries to %s client at 0x%02x : %s\n",
  282. i+1, addr & 1 ? "read" : "write", addr>>1,
  283. ret==1 ? "success" : ret==0 ? "no ack" : "failed, timeout?" )
  284. );
  285. return ret;
  286. }
  287. static int sendbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
  288. {
  289. char c;
  290. const char *temp = msg->buf;
  291. int count = msg->len;
  292. unsigned short nak_ok = msg->flags & I2C_M_IGNORE_NAK;
  293. int retval;
  294. int wrcount=0;
  295. while (count > 0) {
  296. c = *temp;
  297. DEB2(dev_dbg(&i2c_adap->dev, "sendbytes: writing %2.2X\n", c&0xff));
  298. retval = i2c_outb(i2c_adap,c);
  299. if ((retval>0) || (nak_ok && (retval==0))) { /* ok or ignored NAK */
  300. count--;
  301. temp++;
  302. wrcount++;
  303. } else { /* arbitration or no acknowledge */
  304. dev_err(&i2c_adap->dev, "sendbytes: error - bailout.\n");
  305. return (retval<0)? retval : -EFAULT;
  306. /* got a better one ?? */
  307. }
  308. }
  309. return wrcount;
  310. }
  311. static int readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
  312. {
  313. int inval;
  314. int rdcount=0; /* counts bytes read */
  315. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  316. char *temp = msg->buf;
  317. int count = msg->len;
  318. while (count > 0) {
  319. inval = i2c_inb(i2c_adap);
  320. if (inval>=0) {
  321. *temp = inval;
  322. rdcount++;
  323. } else { /* read timed out */
  324. printk(KERN_ERR "i2c-algo-bit.o: readbytes: i2c_inb timed out.\n");
  325. break;
  326. }
  327. temp++;
  328. count--;
  329. if (msg->flags & I2C_M_NO_RD_ACK)
  330. continue;
  331. /* assert: sda is high */
  332. if ( count > 0 ) { /* send ack */
  333. setsda(adap, 0);
  334. udelay((adap->udelay + 1) / 2);
  335. DEBPROTO(printk(" Am "));
  336. } else {
  337. /* neg. ack on last byte */
  338. udelay((adap->udelay + 1) / 2);
  339. DEBPROTO(printk(" NAm "));
  340. }
  341. if (sclhi(adap)<0) { /* timeout */
  342. printk(KERN_ERR "i2c-algo-bit.o: readbytes: Timeout at ack\n");
  343. return -ETIMEDOUT;
  344. };
  345. scllo(adap);
  346. /* Some SMBus transactions require that we receive the
  347. transaction length as the first read byte. */
  348. if (rdcount == 1 && (msg->flags & I2C_M_RECV_LEN)) {
  349. if (inval <= 0 || inval > I2C_SMBUS_BLOCK_MAX) {
  350. printk(KERN_ERR "i2c-algo-bit: readbytes: "
  351. "invalid block length (%d)\n", inval);
  352. return -EREMOTEIO;
  353. }
  354. /* The original count value accounts for the extra
  355. bytes, that is, either 1 for a regular transaction,
  356. or 2 for a PEC transaction. */
  357. count += inval;
  358. msg->len += inval;
  359. }
  360. }
  361. return rdcount;
  362. }
  363. /* doAddress initiates the transfer by generating the start condition (in
  364. * try_address) and transmits the address in the necessary format to handle
  365. * reads, writes as well as 10bit-addresses.
  366. * returns:
  367. * 0 everything went okay, the chip ack'ed, or IGNORE_NAK flag was set
  368. * -x an error occurred (like: -EREMOTEIO if the device did not answer, or
  369. * -ETIMEDOUT, for example if the lines are stuck...)
  370. */
  371. static int bit_doAddress(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
  372. {
  373. unsigned short flags = msg->flags;
  374. unsigned short nak_ok = msg->flags & I2C_M_IGNORE_NAK;
  375. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  376. unsigned char addr;
  377. int ret, retries;
  378. retries = nak_ok ? 0 : i2c_adap->retries;
  379. if ( (flags & I2C_M_TEN) ) {
  380. /* a ten bit address */
  381. addr = 0xf0 | (( msg->addr >> 7) & 0x03);
  382. DEB2(printk(KERN_DEBUG "addr0: %d\n",addr));
  383. /* try extended address code...*/
  384. ret = try_address(i2c_adap, addr, retries);
  385. if ((ret != 1) && !nak_ok) {
  386. printk(KERN_ERR "died at extended address code.\n");
  387. return -EREMOTEIO;
  388. }
  389. /* the remaining 8 bit address */
  390. ret = i2c_outb(i2c_adap,msg->addr & 0x7f);
  391. if ((ret != 1) && !nak_ok) {
  392. /* the chip did not ack / xmission error occurred */
  393. printk(KERN_ERR "died at 2nd address code.\n");
  394. return -EREMOTEIO;
  395. }
  396. if ( flags & I2C_M_RD ) {
  397. i2c_repstart(adap);
  398. /* okay, now switch into reading mode */
  399. addr |= 0x01;
  400. ret = try_address(i2c_adap, addr, retries);
  401. if ((ret!=1) && !nak_ok) {
  402. printk(KERN_ERR "died at extended address code.\n");
  403. return -EREMOTEIO;
  404. }
  405. }
  406. } else { /* normal 7bit address */
  407. addr = ( msg->addr << 1 );
  408. if (flags & I2C_M_RD )
  409. addr |= 1;
  410. if (flags & I2C_M_REV_DIR_ADDR )
  411. addr ^= 1;
  412. ret = try_address(i2c_adap, addr, retries);
  413. if ((ret!=1) && !nak_ok)
  414. return -EREMOTEIO;
  415. }
  416. return 0;
  417. }
  418. static int bit_xfer(struct i2c_adapter *i2c_adap,
  419. struct i2c_msg msgs[], int num)
  420. {
  421. struct i2c_msg *pmsg;
  422. struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
  423. int i,ret;
  424. unsigned short nak_ok;
  425. i2c_start(adap);
  426. for (i=0;i<num;i++) {
  427. pmsg = &msgs[i];
  428. nak_ok = pmsg->flags & I2C_M_IGNORE_NAK;
  429. if (!(pmsg->flags & I2C_M_NOSTART)) {
  430. if (i) {
  431. i2c_repstart(adap);
  432. }
  433. ret = bit_doAddress(i2c_adap, pmsg);
  434. if ((ret != 0) && !nak_ok) {
  435. DEB2(printk(KERN_DEBUG "i2c-algo-bit.o: NAK from device addr %2.2x msg #%d\n"
  436. ,msgs[i].addr,i));
  437. goto bailout;
  438. }
  439. }
  440. if (pmsg->flags & I2C_M_RD ) {
  441. /* read bytes into buffer*/
  442. ret = readbytes(i2c_adap, pmsg);
  443. DEB2(printk(KERN_DEBUG "i2c-algo-bit.o: read %d bytes.\n",ret));
  444. if (ret < pmsg->len) {
  445. if (ret >= 0)
  446. ret = -EREMOTEIO;
  447. goto bailout;
  448. }
  449. } else {
  450. /* write bytes from buffer */
  451. ret = sendbytes(i2c_adap, pmsg);
  452. DEB2(printk(KERN_DEBUG "i2c-algo-bit.o: wrote %d bytes.\n",ret));
  453. if (ret < pmsg->len) {
  454. if (ret >= 0)
  455. ret = -EREMOTEIO;
  456. goto bailout;
  457. }
  458. }
  459. }
  460. ret = i;
  461. bailout:
  462. i2c_stop(adap);
  463. return ret;
  464. }
  465. static u32 bit_func(struct i2c_adapter *adap)
  466. {
  467. return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL |
  468. I2C_FUNC_SMBUS_READ_BLOCK_DATA |
  469. I2C_FUNC_SMBUS_BLOCK_PROC_CALL |
  470. I2C_FUNC_10BIT_ADDR | I2C_FUNC_PROTOCOL_MANGLING;
  471. }
  472. /* -----exported algorithm data: ------------------------------------- */
  473. static const struct i2c_algorithm i2c_bit_algo = {
  474. .master_xfer = bit_xfer,
  475. .functionality = bit_func,
  476. };
  477. /*
  478. * registering functions to load algorithms at runtime
  479. */
  480. static int i2c_bit_prepare_bus(struct i2c_adapter *adap)
  481. {
  482. struct i2c_algo_bit_data *bit_adap = adap->algo_data;
  483. if (bit_test) {
  484. int ret = test_bus(bit_adap, adap->name);
  485. if (ret<0)
  486. return -ENODEV;
  487. }
  488. DEB2(dev_dbg(&adap->dev, "hw routines registered.\n"));
  489. /* register new adapter to i2c module... */
  490. adap->algo = &i2c_bit_algo;
  491. adap->timeout = 100; /* default values, should */
  492. adap->retries = 3; /* be replaced by defines */
  493. return 0;
  494. }
  495. int i2c_bit_add_bus(struct i2c_adapter *adap)
  496. {
  497. int err;
  498. err = i2c_bit_prepare_bus(adap);
  499. if (err)
  500. return err;
  501. return i2c_add_adapter(adap);
  502. }
  503. EXPORT_SYMBOL(i2c_bit_add_bus);
  504. int i2c_bit_add_numbered_bus(struct i2c_adapter *adap)
  505. {
  506. int err;
  507. err = i2c_bit_prepare_bus(adap);
  508. if (err)
  509. return err;
  510. return i2c_add_numbered_adapter(adap);
  511. }
  512. EXPORT_SYMBOL(i2c_bit_add_numbered_bus);
  513. MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
  514. MODULE_DESCRIPTION("I2C-Bus bit-banging algorithm");
  515. MODULE_LICENSE("GPL");
  516. module_param(bit_test, bool, 0);
  517. module_param(i2c_debug, int, S_IRUGO | S_IWUSR);
  518. MODULE_PARM_DESC(bit_test, "Test the lines of the bus to see if it is stuck");
  519. MODULE_PARM_DESC(i2c_debug,
  520. "debug level - 0 off; 1 normal; 2,3 more verbose; 9 bit-protocol");