1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0+
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * i2c-algo-bit.c: i2c driver algorithms for bit-shift adapters
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Copyright (C) 1995-2000 Simon G. Vogl
6*4882a593Smuzhiyun *
7*4882a593Smuzhiyun * With some changes from Frodo Looijaard <frodol@dds.nl>, Kyösti Mälkki
8*4882a593Smuzhiyun * <kmalkki@cc.hut.fi> and Jean Delvare <jdelvare@suse.de>
9*4882a593Smuzhiyun */
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun #include <linux/kernel.h>
12*4882a593Smuzhiyun #include <linux/module.h>
13*4882a593Smuzhiyun #include <linux/delay.h>
14*4882a593Smuzhiyun #include <linux/errno.h>
15*4882a593Smuzhiyun #include <linux/sched.h>
16*4882a593Smuzhiyun #include <linux/i2c.h>
17*4882a593Smuzhiyun #include <linux/i2c-algo-bit.h>
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun /* ----- global defines ----------------------------------------------- */
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun #ifdef DEBUG
23*4882a593Smuzhiyun #define bit_dbg(level, dev, format, args...) \
24*4882a593Smuzhiyun do { \
25*4882a593Smuzhiyun if (i2c_debug >= level) \
26*4882a593Smuzhiyun dev_dbg(dev, format, ##args); \
27*4882a593Smuzhiyun } while (0)
28*4882a593Smuzhiyun #else
29*4882a593Smuzhiyun #define bit_dbg(level, dev, format, args...) \
30*4882a593Smuzhiyun do {} while (0)
31*4882a593Smuzhiyun #endif /* DEBUG */
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun /* ----- global variables --------------------------------------------- */
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun static int bit_test; /* see if the line-setting functions work */
36*4882a593Smuzhiyun module_param(bit_test, int, S_IRUGO);
37*4882a593Smuzhiyun MODULE_PARM_DESC(bit_test, "lines testing - 0 off; 1 report; 2 fail if stuck");
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun #ifdef DEBUG
40*4882a593Smuzhiyun static int i2c_debug = 1;
41*4882a593Smuzhiyun module_param(i2c_debug, int, S_IRUGO | S_IWUSR);
42*4882a593Smuzhiyun MODULE_PARM_DESC(i2c_debug,
43*4882a593Smuzhiyun "debug level - 0 off; 1 normal; 2 verbose; 3 very verbose");
44*4882a593Smuzhiyun #endif
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun /* --- setting states on the bus with the right timing: --------------- */
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun #define setsda(adap, val) adap->setsda(adap->data, val)
49*4882a593Smuzhiyun #define setscl(adap, val) adap->setscl(adap->data, val)
50*4882a593Smuzhiyun #define getsda(adap) adap->getsda(adap->data)
51*4882a593Smuzhiyun #define getscl(adap) adap->getscl(adap->data)
52*4882a593Smuzhiyun
sdalo(struct i2c_algo_bit_data * adap)53*4882a593Smuzhiyun static inline void sdalo(struct i2c_algo_bit_data *adap)
54*4882a593Smuzhiyun {
55*4882a593Smuzhiyun setsda(adap, 0);
56*4882a593Smuzhiyun udelay((adap->udelay + 1) / 2);
57*4882a593Smuzhiyun }
58*4882a593Smuzhiyun
sdahi(struct i2c_algo_bit_data * adap)59*4882a593Smuzhiyun static inline void sdahi(struct i2c_algo_bit_data *adap)
60*4882a593Smuzhiyun {
61*4882a593Smuzhiyun setsda(adap, 1);
62*4882a593Smuzhiyun udelay((adap->udelay + 1) / 2);
63*4882a593Smuzhiyun }
64*4882a593Smuzhiyun
scllo(struct i2c_algo_bit_data * adap)65*4882a593Smuzhiyun static inline void scllo(struct i2c_algo_bit_data *adap)
66*4882a593Smuzhiyun {
67*4882a593Smuzhiyun setscl(adap, 0);
68*4882a593Smuzhiyun udelay(adap->udelay / 2);
69*4882a593Smuzhiyun }
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun /*
72*4882a593Smuzhiyun * Raise scl line, and do checking for delays. This is necessary for slower
73*4882a593Smuzhiyun * devices.
74*4882a593Smuzhiyun */
sclhi(struct i2c_algo_bit_data * adap)75*4882a593Smuzhiyun static int sclhi(struct i2c_algo_bit_data *adap)
76*4882a593Smuzhiyun {
77*4882a593Smuzhiyun unsigned long start;
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun setscl(adap, 1);
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun /* Not all adapters have scl sense line... */
82*4882a593Smuzhiyun if (!adap->getscl)
83*4882a593Smuzhiyun goto done;
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun start = jiffies;
86*4882a593Smuzhiyun while (!getscl(adap)) {
87*4882a593Smuzhiyun /* This hw knows how to read the clock line, so we wait
88*4882a593Smuzhiyun * until it actually gets high. This is safer as some
89*4882a593Smuzhiyun * chips may hold it low ("clock stretching") while they
90*4882a593Smuzhiyun * are processing data internally.
91*4882a593Smuzhiyun */
92*4882a593Smuzhiyun if (time_after(jiffies, start + adap->timeout)) {
93*4882a593Smuzhiyun /* Test one last time, as we may have been preempted
94*4882a593Smuzhiyun * between last check and timeout test.
95*4882a593Smuzhiyun */
96*4882a593Smuzhiyun if (getscl(adap))
97*4882a593Smuzhiyun break;
98*4882a593Smuzhiyun return -ETIMEDOUT;
99*4882a593Smuzhiyun }
100*4882a593Smuzhiyun cpu_relax();
101*4882a593Smuzhiyun }
102*4882a593Smuzhiyun #ifdef DEBUG
103*4882a593Smuzhiyun if (jiffies != start && i2c_debug >= 3)
104*4882a593Smuzhiyun pr_debug("i2c-algo-bit: needed %ld jiffies for SCL to go high\n",
105*4882a593Smuzhiyun jiffies - start);
106*4882a593Smuzhiyun #endif
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun done:
109*4882a593Smuzhiyun udelay(adap->udelay);
110*4882a593Smuzhiyun return 0;
111*4882a593Smuzhiyun }
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun /* --- other auxiliary functions -------------------------------------- */
i2c_start(struct i2c_algo_bit_data * adap)115*4882a593Smuzhiyun static void i2c_start(struct i2c_algo_bit_data *adap)
116*4882a593Smuzhiyun {
117*4882a593Smuzhiyun /* assert: scl, sda are high */
118*4882a593Smuzhiyun setsda(adap, 0);
119*4882a593Smuzhiyun udelay(adap->udelay);
120*4882a593Smuzhiyun scllo(adap);
121*4882a593Smuzhiyun }
122*4882a593Smuzhiyun
i2c_repstart(struct i2c_algo_bit_data * adap)123*4882a593Smuzhiyun static void i2c_repstart(struct i2c_algo_bit_data *adap)
124*4882a593Smuzhiyun {
125*4882a593Smuzhiyun /* assert: scl is low */
126*4882a593Smuzhiyun sdahi(adap);
127*4882a593Smuzhiyun sclhi(adap);
128*4882a593Smuzhiyun setsda(adap, 0);
129*4882a593Smuzhiyun udelay(adap->udelay);
130*4882a593Smuzhiyun scllo(adap);
131*4882a593Smuzhiyun }
132*4882a593Smuzhiyun
133*4882a593Smuzhiyun
i2c_stop(struct i2c_algo_bit_data * adap)134*4882a593Smuzhiyun static void i2c_stop(struct i2c_algo_bit_data *adap)
135*4882a593Smuzhiyun {
136*4882a593Smuzhiyun /* assert: scl is low */
137*4882a593Smuzhiyun sdalo(adap);
138*4882a593Smuzhiyun sclhi(adap);
139*4882a593Smuzhiyun setsda(adap, 1);
140*4882a593Smuzhiyun udelay(adap->udelay);
141*4882a593Smuzhiyun }
142*4882a593Smuzhiyun
143*4882a593Smuzhiyun
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun /* send a byte without start cond., look for arbitration,
146*4882a593Smuzhiyun check ackn. from slave */
147*4882a593Smuzhiyun /* returns:
148*4882a593Smuzhiyun * 1 if the device acknowledged
149*4882a593Smuzhiyun * 0 if the device did not ack
150*4882a593Smuzhiyun * -ETIMEDOUT if an error occurred (while raising the scl line)
151*4882a593Smuzhiyun */
i2c_outb(struct i2c_adapter * i2c_adap,unsigned char c)152*4882a593Smuzhiyun static int i2c_outb(struct i2c_adapter *i2c_adap, unsigned char c)
153*4882a593Smuzhiyun {
154*4882a593Smuzhiyun int i;
155*4882a593Smuzhiyun int sb;
156*4882a593Smuzhiyun int ack;
157*4882a593Smuzhiyun struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun /* assert: scl is low */
160*4882a593Smuzhiyun for (i = 7; i >= 0; i--) {
161*4882a593Smuzhiyun sb = (c >> i) & 1;
162*4882a593Smuzhiyun setsda(adap, sb);
163*4882a593Smuzhiyun udelay((adap->udelay + 1) / 2);
164*4882a593Smuzhiyun if (sclhi(adap) < 0) { /* timed out */
165*4882a593Smuzhiyun bit_dbg(1, &i2c_adap->dev,
166*4882a593Smuzhiyun "i2c_outb: 0x%02x, timeout at bit #%d\n",
167*4882a593Smuzhiyun (int)c, i);
168*4882a593Smuzhiyun return -ETIMEDOUT;
169*4882a593Smuzhiyun }
170*4882a593Smuzhiyun /* FIXME do arbitration here:
171*4882a593Smuzhiyun * if (sb && !getsda(adap)) -> ouch! Get out of here.
172*4882a593Smuzhiyun *
173*4882a593Smuzhiyun * Report a unique code, so higher level code can retry
174*4882a593Smuzhiyun * the whole (combined) message and *NOT* issue STOP.
175*4882a593Smuzhiyun */
176*4882a593Smuzhiyun scllo(adap);
177*4882a593Smuzhiyun }
178*4882a593Smuzhiyun sdahi(adap);
179*4882a593Smuzhiyun if (sclhi(adap) < 0) { /* timeout */
180*4882a593Smuzhiyun bit_dbg(1, &i2c_adap->dev,
181*4882a593Smuzhiyun "i2c_outb: 0x%02x, timeout at ack\n", (int)c);
182*4882a593Smuzhiyun return -ETIMEDOUT;
183*4882a593Smuzhiyun }
184*4882a593Smuzhiyun
185*4882a593Smuzhiyun /* read ack: SDA should be pulled down by slave, or it may
186*4882a593Smuzhiyun * NAK (usually to report problems with the data we wrote).
187*4882a593Smuzhiyun */
188*4882a593Smuzhiyun ack = !getsda(adap); /* ack: sda is pulled low -> success */
189*4882a593Smuzhiyun bit_dbg(2, &i2c_adap->dev, "i2c_outb: 0x%02x %s\n", (int)c,
190*4882a593Smuzhiyun ack ? "A" : "NA");
191*4882a593Smuzhiyun
192*4882a593Smuzhiyun scllo(adap);
193*4882a593Smuzhiyun return ack;
194*4882a593Smuzhiyun /* assert: scl is low (sda undef) */
195*4882a593Smuzhiyun }
196*4882a593Smuzhiyun
197*4882a593Smuzhiyun
i2c_inb(struct i2c_adapter * i2c_adap)198*4882a593Smuzhiyun static int i2c_inb(struct i2c_adapter *i2c_adap)
199*4882a593Smuzhiyun {
200*4882a593Smuzhiyun /* read byte via i2c port, without start/stop sequence */
201*4882a593Smuzhiyun /* acknowledge is sent in i2c_read. */
202*4882a593Smuzhiyun int i;
203*4882a593Smuzhiyun unsigned char indata = 0;
204*4882a593Smuzhiyun struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
205*4882a593Smuzhiyun
206*4882a593Smuzhiyun /* assert: scl is low */
207*4882a593Smuzhiyun sdahi(adap);
208*4882a593Smuzhiyun for (i = 0; i < 8; i++) {
209*4882a593Smuzhiyun if (sclhi(adap) < 0) { /* timeout */
210*4882a593Smuzhiyun bit_dbg(1, &i2c_adap->dev,
211*4882a593Smuzhiyun "i2c_inb: timeout at bit #%d\n",
212*4882a593Smuzhiyun 7 - i);
213*4882a593Smuzhiyun return -ETIMEDOUT;
214*4882a593Smuzhiyun }
215*4882a593Smuzhiyun indata *= 2;
216*4882a593Smuzhiyun if (getsda(adap))
217*4882a593Smuzhiyun indata |= 0x01;
218*4882a593Smuzhiyun setscl(adap, 0);
219*4882a593Smuzhiyun udelay(i == 7 ? adap->udelay / 2 : adap->udelay);
220*4882a593Smuzhiyun }
221*4882a593Smuzhiyun /* assert: scl is low */
222*4882a593Smuzhiyun return indata;
223*4882a593Smuzhiyun }
224*4882a593Smuzhiyun
225*4882a593Smuzhiyun /*
226*4882a593Smuzhiyun * Sanity check for the adapter hardware - check the reaction of
227*4882a593Smuzhiyun * the bus lines only if it seems to be idle.
228*4882a593Smuzhiyun */
test_bus(struct i2c_adapter * i2c_adap)229*4882a593Smuzhiyun static int test_bus(struct i2c_adapter *i2c_adap)
230*4882a593Smuzhiyun {
231*4882a593Smuzhiyun struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
232*4882a593Smuzhiyun const char *name = i2c_adap->name;
233*4882a593Smuzhiyun int scl, sda, ret;
234*4882a593Smuzhiyun
235*4882a593Smuzhiyun if (adap->pre_xfer) {
236*4882a593Smuzhiyun ret = adap->pre_xfer(i2c_adap);
237*4882a593Smuzhiyun if (ret < 0)
238*4882a593Smuzhiyun return -ENODEV;
239*4882a593Smuzhiyun }
240*4882a593Smuzhiyun
241*4882a593Smuzhiyun if (adap->getscl == NULL)
242*4882a593Smuzhiyun pr_info("%s: Testing SDA only, SCL is not readable\n", name);
243*4882a593Smuzhiyun
244*4882a593Smuzhiyun sda = getsda(adap);
245*4882a593Smuzhiyun scl = (adap->getscl == NULL) ? 1 : getscl(adap);
246*4882a593Smuzhiyun if (!scl || !sda) {
247*4882a593Smuzhiyun printk(KERN_WARNING
248*4882a593Smuzhiyun "%s: bus seems to be busy (scl=%d, sda=%d)\n",
249*4882a593Smuzhiyun name, scl, sda);
250*4882a593Smuzhiyun goto bailout;
251*4882a593Smuzhiyun }
252*4882a593Smuzhiyun
253*4882a593Smuzhiyun sdalo(adap);
254*4882a593Smuzhiyun sda = getsda(adap);
255*4882a593Smuzhiyun scl = (adap->getscl == NULL) ? 1 : getscl(adap);
256*4882a593Smuzhiyun if (sda) {
257*4882a593Smuzhiyun printk(KERN_WARNING "%s: SDA stuck high!\n", name);
258*4882a593Smuzhiyun goto bailout;
259*4882a593Smuzhiyun }
260*4882a593Smuzhiyun if (!scl) {
261*4882a593Smuzhiyun printk(KERN_WARNING
262*4882a593Smuzhiyun "%s: SCL unexpected low while pulling SDA low!\n",
263*4882a593Smuzhiyun name);
264*4882a593Smuzhiyun goto bailout;
265*4882a593Smuzhiyun }
266*4882a593Smuzhiyun
267*4882a593Smuzhiyun sdahi(adap);
268*4882a593Smuzhiyun sda = getsda(adap);
269*4882a593Smuzhiyun scl = (adap->getscl == NULL) ? 1 : getscl(adap);
270*4882a593Smuzhiyun if (!sda) {
271*4882a593Smuzhiyun printk(KERN_WARNING "%s: SDA stuck low!\n", name);
272*4882a593Smuzhiyun goto bailout;
273*4882a593Smuzhiyun }
274*4882a593Smuzhiyun if (!scl) {
275*4882a593Smuzhiyun printk(KERN_WARNING
276*4882a593Smuzhiyun "%s: SCL unexpected low while pulling SDA high!\n",
277*4882a593Smuzhiyun name);
278*4882a593Smuzhiyun goto bailout;
279*4882a593Smuzhiyun }
280*4882a593Smuzhiyun
281*4882a593Smuzhiyun scllo(adap);
282*4882a593Smuzhiyun sda = getsda(adap);
283*4882a593Smuzhiyun scl = (adap->getscl == NULL) ? 0 : getscl(adap);
284*4882a593Smuzhiyun if (scl) {
285*4882a593Smuzhiyun printk(KERN_WARNING "%s: SCL stuck high!\n", name);
286*4882a593Smuzhiyun goto bailout;
287*4882a593Smuzhiyun }
288*4882a593Smuzhiyun if (!sda) {
289*4882a593Smuzhiyun printk(KERN_WARNING
290*4882a593Smuzhiyun "%s: SDA unexpected low while pulling SCL low!\n",
291*4882a593Smuzhiyun name);
292*4882a593Smuzhiyun goto bailout;
293*4882a593Smuzhiyun }
294*4882a593Smuzhiyun
295*4882a593Smuzhiyun sclhi(adap);
296*4882a593Smuzhiyun sda = getsda(adap);
297*4882a593Smuzhiyun scl = (adap->getscl == NULL) ? 1 : getscl(adap);
298*4882a593Smuzhiyun if (!scl) {
299*4882a593Smuzhiyun printk(KERN_WARNING "%s: SCL stuck low!\n", name);
300*4882a593Smuzhiyun goto bailout;
301*4882a593Smuzhiyun }
302*4882a593Smuzhiyun if (!sda) {
303*4882a593Smuzhiyun printk(KERN_WARNING
304*4882a593Smuzhiyun "%s: SDA unexpected low while pulling SCL high!\n",
305*4882a593Smuzhiyun name);
306*4882a593Smuzhiyun goto bailout;
307*4882a593Smuzhiyun }
308*4882a593Smuzhiyun
309*4882a593Smuzhiyun if (adap->post_xfer)
310*4882a593Smuzhiyun adap->post_xfer(i2c_adap);
311*4882a593Smuzhiyun
312*4882a593Smuzhiyun pr_info("%s: Test OK\n", name);
313*4882a593Smuzhiyun return 0;
314*4882a593Smuzhiyun bailout:
315*4882a593Smuzhiyun sdahi(adap);
316*4882a593Smuzhiyun sclhi(adap);
317*4882a593Smuzhiyun
318*4882a593Smuzhiyun if (adap->post_xfer)
319*4882a593Smuzhiyun adap->post_xfer(i2c_adap);
320*4882a593Smuzhiyun
321*4882a593Smuzhiyun return -ENODEV;
322*4882a593Smuzhiyun }
323*4882a593Smuzhiyun
324*4882a593Smuzhiyun /* ----- Utility functions
325*4882a593Smuzhiyun */
326*4882a593Smuzhiyun
327*4882a593Smuzhiyun /* try_address tries to contact a chip for a number of
328*4882a593Smuzhiyun * times before it gives up.
329*4882a593Smuzhiyun * return values:
330*4882a593Smuzhiyun * 1 chip answered
331*4882a593Smuzhiyun * 0 chip did not answer
332*4882a593Smuzhiyun * -x transmission error
333*4882a593Smuzhiyun */
try_address(struct i2c_adapter * i2c_adap,unsigned char addr,int retries)334*4882a593Smuzhiyun static int try_address(struct i2c_adapter *i2c_adap,
335*4882a593Smuzhiyun unsigned char addr, int retries)
336*4882a593Smuzhiyun {
337*4882a593Smuzhiyun struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
338*4882a593Smuzhiyun int i, ret = 0;
339*4882a593Smuzhiyun
340*4882a593Smuzhiyun for (i = 0; i <= retries; i++) {
341*4882a593Smuzhiyun ret = i2c_outb(i2c_adap, addr);
342*4882a593Smuzhiyun if (ret == 1 || i == retries)
343*4882a593Smuzhiyun break;
344*4882a593Smuzhiyun bit_dbg(3, &i2c_adap->dev, "emitting stop condition\n");
345*4882a593Smuzhiyun i2c_stop(adap);
346*4882a593Smuzhiyun udelay(adap->udelay);
347*4882a593Smuzhiyun yield();
348*4882a593Smuzhiyun bit_dbg(3, &i2c_adap->dev, "emitting start condition\n");
349*4882a593Smuzhiyun i2c_start(adap);
350*4882a593Smuzhiyun }
351*4882a593Smuzhiyun if (i && ret)
352*4882a593Smuzhiyun bit_dbg(1, &i2c_adap->dev,
353*4882a593Smuzhiyun "Used %d tries to %s client at 0x%02x: %s\n", i + 1,
354*4882a593Smuzhiyun addr & 1 ? "read from" : "write to", addr >> 1,
355*4882a593Smuzhiyun ret == 1 ? "success" : "failed, timeout?");
356*4882a593Smuzhiyun return ret;
357*4882a593Smuzhiyun }
358*4882a593Smuzhiyun
sendbytes(struct i2c_adapter * i2c_adap,struct i2c_msg * msg)359*4882a593Smuzhiyun static int sendbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
360*4882a593Smuzhiyun {
361*4882a593Smuzhiyun const unsigned char *temp = msg->buf;
362*4882a593Smuzhiyun int count = msg->len;
363*4882a593Smuzhiyun unsigned short nak_ok = msg->flags & I2C_M_IGNORE_NAK;
364*4882a593Smuzhiyun int retval;
365*4882a593Smuzhiyun int wrcount = 0;
366*4882a593Smuzhiyun
367*4882a593Smuzhiyun while (count > 0) {
368*4882a593Smuzhiyun retval = i2c_outb(i2c_adap, *temp);
369*4882a593Smuzhiyun
370*4882a593Smuzhiyun /* OK/ACK; or ignored NAK */
371*4882a593Smuzhiyun if ((retval > 0) || (nak_ok && (retval == 0))) {
372*4882a593Smuzhiyun count--;
373*4882a593Smuzhiyun temp++;
374*4882a593Smuzhiyun wrcount++;
375*4882a593Smuzhiyun
376*4882a593Smuzhiyun /* A slave NAKing the master means the slave didn't like
377*4882a593Smuzhiyun * something about the data it saw. For example, maybe
378*4882a593Smuzhiyun * the SMBus PEC was wrong.
379*4882a593Smuzhiyun */
380*4882a593Smuzhiyun } else if (retval == 0) {
381*4882a593Smuzhiyun dev_err(&i2c_adap->dev, "sendbytes: NAK bailout.\n");
382*4882a593Smuzhiyun return -EIO;
383*4882a593Smuzhiyun
384*4882a593Smuzhiyun /* Timeout; or (someday) lost arbitration
385*4882a593Smuzhiyun *
386*4882a593Smuzhiyun * FIXME Lost ARB implies retrying the transaction from
387*4882a593Smuzhiyun * the first message, after the "winning" master issues
388*4882a593Smuzhiyun * its STOP. As a rule, upper layer code has no reason
389*4882a593Smuzhiyun * to know or care about this ... it is *NOT* an error.
390*4882a593Smuzhiyun */
391*4882a593Smuzhiyun } else {
392*4882a593Smuzhiyun dev_err(&i2c_adap->dev, "sendbytes: error %d\n",
393*4882a593Smuzhiyun retval);
394*4882a593Smuzhiyun return retval;
395*4882a593Smuzhiyun }
396*4882a593Smuzhiyun }
397*4882a593Smuzhiyun return wrcount;
398*4882a593Smuzhiyun }
399*4882a593Smuzhiyun
acknak(struct i2c_adapter * i2c_adap,int is_ack)400*4882a593Smuzhiyun static int acknak(struct i2c_adapter *i2c_adap, int is_ack)
401*4882a593Smuzhiyun {
402*4882a593Smuzhiyun struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
403*4882a593Smuzhiyun
404*4882a593Smuzhiyun /* assert: sda is high */
405*4882a593Smuzhiyun if (is_ack) /* send ack */
406*4882a593Smuzhiyun setsda(adap, 0);
407*4882a593Smuzhiyun udelay((adap->udelay + 1) / 2);
408*4882a593Smuzhiyun if (sclhi(adap) < 0) { /* timeout */
409*4882a593Smuzhiyun dev_err(&i2c_adap->dev, "readbytes: ack/nak timeout\n");
410*4882a593Smuzhiyun return -ETIMEDOUT;
411*4882a593Smuzhiyun }
412*4882a593Smuzhiyun scllo(adap);
413*4882a593Smuzhiyun return 0;
414*4882a593Smuzhiyun }
415*4882a593Smuzhiyun
readbytes(struct i2c_adapter * i2c_adap,struct i2c_msg * msg)416*4882a593Smuzhiyun static int readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
417*4882a593Smuzhiyun {
418*4882a593Smuzhiyun int inval;
419*4882a593Smuzhiyun int rdcount = 0; /* counts bytes read */
420*4882a593Smuzhiyun unsigned char *temp = msg->buf;
421*4882a593Smuzhiyun int count = msg->len;
422*4882a593Smuzhiyun const unsigned flags = msg->flags;
423*4882a593Smuzhiyun
424*4882a593Smuzhiyun while (count > 0) {
425*4882a593Smuzhiyun inval = i2c_inb(i2c_adap);
426*4882a593Smuzhiyun if (inval >= 0) {
427*4882a593Smuzhiyun *temp = inval;
428*4882a593Smuzhiyun rdcount++;
429*4882a593Smuzhiyun } else { /* read timed out */
430*4882a593Smuzhiyun break;
431*4882a593Smuzhiyun }
432*4882a593Smuzhiyun
433*4882a593Smuzhiyun temp++;
434*4882a593Smuzhiyun count--;
435*4882a593Smuzhiyun
436*4882a593Smuzhiyun /* Some SMBus transactions require that we receive the
437*4882a593Smuzhiyun transaction length as the first read byte. */
438*4882a593Smuzhiyun if (rdcount == 1 && (flags & I2C_M_RECV_LEN)) {
439*4882a593Smuzhiyun if (inval <= 0 || inval > I2C_SMBUS_BLOCK_MAX) {
440*4882a593Smuzhiyun if (!(flags & I2C_M_NO_RD_ACK))
441*4882a593Smuzhiyun acknak(i2c_adap, 0);
442*4882a593Smuzhiyun dev_err(&i2c_adap->dev,
443*4882a593Smuzhiyun "readbytes: invalid block length (%d)\n",
444*4882a593Smuzhiyun inval);
445*4882a593Smuzhiyun return -EPROTO;
446*4882a593Smuzhiyun }
447*4882a593Smuzhiyun /* The original count value accounts for the extra
448*4882a593Smuzhiyun bytes, that is, either 1 for a regular transaction,
449*4882a593Smuzhiyun or 2 for a PEC transaction. */
450*4882a593Smuzhiyun count += inval;
451*4882a593Smuzhiyun msg->len += inval;
452*4882a593Smuzhiyun }
453*4882a593Smuzhiyun
454*4882a593Smuzhiyun bit_dbg(2, &i2c_adap->dev, "readbytes: 0x%02x %s\n",
455*4882a593Smuzhiyun inval,
456*4882a593Smuzhiyun (flags & I2C_M_NO_RD_ACK)
457*4882a593Smuzhiyun ? "(no ack/nak)"
458*4882a593Smuzhiyun : (count ? "A" : "NA"));
459*4882a593Smuzhiyun
460*4882a593Smuzhiyun if (!(flags & I2C_M_NO_RD_ACK)) {
461*4882a593Smuzhiyun inval = acknak(i2c_adap, count);
462*4882a593Smuzhiyun if (inval < 0)
463*4882a593Smuzhiyun return inval;
464*4882a593Smuzhiyun }
465*4882a593Smuzhiyun }
466*4882a593Smuzhiyun return rdcount;
467*4882a593Smuzhiyun }
468*4882a593Smuzhiyun
469*4882a593Smuzhiyun /* doAddress initiates the transfer by generating the start condition (in
470*4882a593Smuzhiyun * try_address) and transmits the address in the necessary format to handle
471*4882a593Smuzhiyun * reads, writes as well as 10bit-addresses.
472*4882a593Smuzhiyun * returns:
473*4882a593Smuzhiyun * 0 everything went okay, the chip ack'ed, or IGNORE_NAK flag was set
474*4882a593Smuzhiyun * -x an error occurred (like: -ENXIO if the device did not answer, or
475*4882a593Smuzhiyun * -ETIMEDOUT, for example if the lines are stuck...)
476*4882a593Smuzhiyun */
bit_doAddress(struct i2c_adapter * i2c_adap,struct i2c_msg * msg)477*4882a593Smuzhiyun static int bit_doAddress(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
478*4882a593Smuzhiyun {
479*4882a593Smuzhiyun unsigned short flags = msg->flags;
480*4882a593Smuzhiyun unsigned short nak_ok = msg->flags & I2C_M_IGNORE_NAK;
481*4882a593Smuzhiyun struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
482*4882a593Smuzhiyun
483*4882a593Smuzhiyun unsigned char addr;
484*4882a593Smuzhiyun int ret, retries;
485*4882a593Smuzhiyun
486*4882a593Smuzhiyun retries = nak_ok ? 0 : i2c_adap->retries;
487*4882a593Smuzhiyun
488*4882a593Smuzhiyun if (flags & I2C_M_TEN) {
489*4882a593Smuzhiyun /* a ten bit address */
490*4882a593Smuzhiyun addr = 0xf0 | ((msg->addr >> 7) & 0x06);
491*4882a593Smuzhiyun bit_dbg(2, &i2c_adap->dev, "addr0: %d\n", addr);
492*4882a593Smuzhiyun /* try extended address code...*/
493*4882a593Smuzhiyun ret = try_address(i2c_adap, addr, retries);
494*4882a593Smuzhiyun if ((ret != 1) && !nak_ok) {
495*4882a593Smuzhiyun dev_err(&i2c_adap->dev,
496*4882a593Smuzhiyun "died at extended address code\n");
497*4882a593Smuzhiyun return -ENXIO;
498*4882a593Smuzhiyun }
499*4882a593Smuzhiyun /* the remaining 8 bit address */
500*4882a593Smuzhiyun ret = i2c_outb(i2c_adap, msg->addr & 0xff);
501*4882a593Smuzhiyun if ((ret != 1) && !nak_ok) {
502*4882a593Smuzhiyun /* the chip did not ack / xmission error occurred */
503*4882a593Smuzhiyun dev_err(&i2c_adap->dev, "died at 2nd address code\n");
504*4882a593Smuzhiyun return -ENXIO;
505*4882a593Smuzhiyun }
506*4882a593Smuzhiyun if (flags & I2C_M_RD) {
507*4882a593Smuzhiyun bit_dbg(3, &i2c_adap->dev,
508*4882a593Smuzhiyun "emitting repeated start condition\n");
509*4882a593Smuzhiyun i2c_repstart(adap);
510*4882a593Smuzhiyun /* okay, now switch into reading mode */
511*4882a593Smuzhiyun addr |= 0x01;
512*4882a593Smuzhiyun ret = try_address(i2c_adap, addr, retries);
513*4882a593Smuzhiyun if ((ret != 1) && !nak_ok) {
514*4882a593Smuzhiyun dev_err(&i2c_adap->dev,
515*4882a593Smuzhiyun "died at repeated address code\n");
516*4882a593Smuzhiyun return -EIO;
517*4882a593Smuzhiyun }
518*4882a593Smuzhiyun }
519*4882a593Smuzhiyun } else { /* normal 7bit address */
520*4882a593Smuzhiyun addr = i2c_8bit_addr_from_msg(msg);
521*4882a593Smuzhiyun if (flags & I2C_M_REV_DIR_ADDR)
522*4882a593Smuzhiyun addr ^= 1;
523*4882a593Smuzhiyun ret = try_address(i2c_adap, addr, retries);
524*4882a593Smuzhiyun if ((ret != 1) && !nak_ok)
525*4882a593Smuzhiyun return -ENXIO;
526*4882a593Smuzhiyun }
527*4882a593Smuzhiyun
528*4882a593Smuzhiyun return 0;
529*4882a593Smuzhiyun }
530*4882a593Smuzhiyun
bit_xfer(struct i2c_adapter * i2c_adap,struct i2c_msg msgs[],int num)531*4882a593Smuzhiyun static int bit_xfer(struct i2c_adapter *i2c_adap,
532*4882a593Smuzhiyun struct i2c_msg msgs[], int num)
533*4882a593Smuzhiyun {
534*4882a593Smuzhiyun struct i2c_msg *pmsg;
535*4882a593Smuzhiyun struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
536*4882a593Smuzhiyun int i, ret;
537*4882a593Smuzhiyun unsigned short nak_ok;
538*4882a593Smuzhiyun
539*4882a593Smuzhiyun if (adap->pre_xfer) {
540*4882a593Smuzhiyun ret = adap->pre_xfer(i2c_adap);
541*4882a593Smuzhiyun if (ret < 0)
542*4882a593Smuzhiyun return ret;
543*4882a593Smuzhiyun }
544*4882a593Smuzhiyun
545*4882a593Smuzhiyun bit_dbg(3, &i2c_adap->dev, "emitting start condition\n");
546*4882a593Smuzhiyun i2c_start(adap);
547*4882a593Smuzhiyun for (i = 0; i < num; i++) {
548*4882a593Smuzhiyun pmsg = &msgs[i];
549*4882a593Smuzhiyun nak_ok = pmsg->flags & I2C_M_IGNORE_NAK;
550*4882a593Smuzhiyun if (!(pmsg->flags & I2C_M_NOSTART)) {
551*4882a593Smuzhiyun if (i) {
552*4882a593Smuzhiyun if (msgs[i - 1].flags & I2C_M_STOP) {
553*4882a593Smuzhiyun bit_dbg(3, &i2c_adap->dev,
554*4882a593Smuzhiyun "emitting enforced stop/start condition\n");
555*4882a593Smuzhiyun i2c_stop(adap);
556*4882a593Smuzhiyun i2c_start(adap);
557*4882a593Smuzhiyun } else {
558*4882a593Smuzhiyun bit_dbg(3, &i2c_adap->dev,
559*4882a593Smuzhiyun "emitting repeated start condition\n");
560*4882a593Smuzhiyun i2c_repstart(adap);
561*4882a593Smuzhiyun }
562*4882a593Smuzhiyun }
563*4882a593Smuzhiyun ret = bit_doAddress(i2c_adap, pmsg);
564*4882a593Smuzhiyun if ((ret != 0) && !nak_ok) {
565*4882a593Smuzhiyun bit_dbg(1, &i2c_adap->dev,
566*4882a593Smuzhiyun "NAK from device addr 0x%02x msg #%d\n",
567*4882a593Smuzhiyun msgs[i].addr, i);
568*4882a593Smuzhiyun goto bailout;
569*4882a593Smuzhiyun }
570*4882a593Smuzhiyun }
571*4882a593Smuzhiyun if (pmsg->flags & I2C_M_RD) {
572*4882a593Smuzhiyun /* read bytes into buffer*/
573*4882a593Smuzhiyun ret = readbytes(i2c_adap, pmsg);
574*4882a593Smuzhiyun if (ret >= 1)
575*4882a593Smuzhiyun bit_dbg(2, &i2c_adap->dev, "read %d byte%s\n",
576*4882a593Smuzhiyun ret, ret == 1 ? "" : "s");
577*4882a593Smuzhiyun if (ret < pmsg->len) {
578*4882a593Smuzhiyun if (ret >= 0)
579*4882a593Smuzhiyun ret = -EIO;
580*4882a593Smuzhiyun goto bailout;
581*4882a593Smuzhiyun }
582*4882a593Smuzhiyun } else {
583*4882a593Smuzhiyun /* write bytes from buffer */
584*4882a593Smuzhiyun ret = sendbytes(i2c_adap, pmsg);
585*4882a593Smuzhiyun if (ret >= 1)
586*4882a593Smuzhiyun bit_dbg(2, &i2c_adap->dev, "wrote %d byte%s\n",
587*4882a593Smuzhiyun ret, ret == 1 ? "" : "s");
588*4882a593Smuzhiyun if (ret < pmsg->len) {
589*4882a593Smuzhiyun if (ret >= 0)
590*4882a593Smuzhiyun ret = -EIO;
591*4882a593Smuzhiyun goto bailout;
592*4882a593Smuzhiyun }
593*4882a593Smuzhiyun }
594*4882a593Smuzhiyun }
595*4882a593Smuzhiyun ret = i;
596*4882a593Smuzhiyun
597*4882a593Smuzhiyun bailout:
598*4882a593Smuzhiyun bit_dbg(3, &i2c_adap->dev, "emitting stop condition\n");
599*4882a593Smuzhiyun i2c_stop(adap);
600*4882a593Smuzhiyun
601*4882a593Smuzhiyun if (adap->post_xfer)
602*4882a593Smuzhiyun adap->post_xfer(i2c_adap);
603*4882a593Smuzhiyun return ret;
604*4882a593Smuzhiyun }
605*4882a593Smuzhiyun
606*4882a593Smuzhiyun /*
607*4882a593Smuzhiyun * We print a warning when we are not flagged to support atomic transfers but
608*4882a593Smuzhiyun * will try anyhow. That's what the I2C core would do as well. Sadly, we can't
609*4882a593Smuzhiyun * modify the algorithm struct at probe time because this struct is exported
610*4882a593Smuzhiyun * 'const'.
611*4882a593Smuzhiyun */
bit_xfer_atomic(struct i2c_adapter * i2c_adap,struct i2c_msg msgs[],int num)612*4882a593Smuzhiyun static int bit_xfer_atomic(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[],
613*4882a593Smuzhiyun int num)
614*4882a593Smuzhiyun {
615*4882a593Smuzhiyun struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
616*4882a593Smuzhiyun
617*4882a593Smuzhiyun if (!adap->can_do_atomic)
618*4882a593Smuzhiyun dev_warn(&i2c_adap->dev, "not flagged for atomic transfers\n");
619*4882a593Smuzhiyun
620*4882a593Smuzhiyun return bit_xfer(i2c_adap, msgs, num);
621*4882a593Smuzhiyun }
622*4882a593Smuzhiyun
bit_func(struct i2c_adapter * adap)623*4882a593Smuzhiyun static u32 bit_func(struct i2c_adapter *adap)
624*4882a593Smuzhiyun {
625*4882a593Smuzhiyun return I2C_FUNC_I2C | I2C_FUNC_NOSTART | I2C_FUNC_SMBUS_EMUL |
626*4882a593Smuzhiyun I2C_FUNC_SMBUS_READ_BLOCK_DATA |
627*4882a593Smuzhiyun I2C_FUNC_SMBUS_BLOCK_PROC_CALL |
628*4882a593Smuzhiyun I2C_FUNC_10BIT_ADDR | I2C_FUNC_PROTOCOL_MANGLING;
629*4882a593Smuzhiyun }
630*4882a593Smuzhiyun
631*4882a593Smuzhiyun
632*4882a593Smuzhiyun /* -----exported algorithm data: ------------------------------------- */
633*4882a593Smuzhiyun
634*4882a593Smuzhiyun const struct i2c_algorithm i2c_bit_algo = {
635*4882a593Smuzhiyun .master_xfer = bit_xfer,
636*4882a593Smuzhiyun .master_xfer_atomic = bit_xfer_atomic,
637*4882a593Smuzhiyun .functionality = bit_func,
638*4882a593Smuzhiyun };
639*4882a593Smuzhiyun EXPORT_SYMBOL(i2c_bit_algo);
640*4882a593Smuzhiyun
641*4882a593Smuzhiyun static const struct i2c_adapter_quirks i2c_bit_quirk_no_clk_stretch = {
642*4882a593Smuzhiyun .flags = I2C_AQ_NO_CLK_STRETCH,
643*4882a593Smuzhiyun };
644*4882a593Smuzhiyun
645*4882a593Smuzhiyun /*
646*4882a593Smuzhiyun * registering functions to load algorithms at runtime
647*4882a593Smuzhiyun */
__i2c_bit_add_bus(struct i2c_adapter * adap,int (* add_adapter)(struct i2c_adapter *))648*4882a593Smuzhiyun static int __i2c_bit_add_bus(struct i2c_adapter *adap,
649*4882a593Smuzhiyun int (*add_adapter)(struct i2c_adapter *))
650*4882a593Smuzhiyun {
651*4882a593Smuzhiyun struct i2c_algo_bit_data *bit_adap = adap->algo_data;
652*4882a593Smuzhiyun int ret;
653*4882a593Smuzhiyun
654*4882a593Smuzhiyun if (bit_test) {
655*4882a593Smuzhiyun ret = test_bus(adap);
656*4882a593Smuzhiyun if (bit_test >= 2 && ret < 0)
657*4882a593Smuzhiyun return -ENODEV;
658*4882a593Smuzhiyun }
659*4882a593Smuzhiyun
660*4882a593Smuzhiyun /* register new adapter to i2c module... */
661*4882a593Smuzhiyun adap->algo = &i2c_bit_algo;
662*4882a593Smuzhiyun adap->retries = 3;
663*4882a593Smuzhiyun if (bit_adap->getscl == NULL)
664*4882a593Smuzhiyun adap->quirks = &i2c_bit_quirk_no_clk_stretch;
665*4882a593Smuzhiyun
666*4882a593Smuzhiyun /*
667*4882a593Smuzhiyun * We tried forcing SCL/SDA to an initial state here. But that caused a
668*4882a593Smuzhiyun * regression, sadly. Check Bugzilla #200045 for details.
669*4882a593Smuzhiyun */
670*4882a593Smuzhiyun
671*4882a593Smuzhiyun ret = add_adapter(adap);
672*4882a593Smuzhiyun if (ret < 0)
673*4882a593Smuzhiyun return ret;
674*4882a593Smuzhiyun
675*4882a593Smuzhiyun /* Complain if SCL can't be read */
676*4882a593Smuzhiyun if (bit_adap->getscl == NULL) {
677*4882a593Smuzhiyun dev_warn(&adap->dev, "Not I2C compliant: can't read SCL\n");
678*4882a593Smuzhiyun dev_warn(&adap->dev, "Bus may be unreliable\n");
679*4882a593Smuzhiyun }
680*4882a593Smuzhiyun return 0;
681*4882a593Smuzhiyun }
682*4882a593Smuzhiyun
i2c_bit_add_bus(struct i2c_adapter * adap)683*4882a593Smuzhiyun int i2c_bit_add_bus(struct i2c_adapter *adap)
684*4882a593Smuzhiyun {
685*4882a593Smuzhiyun return __i2c_bit_add_bus(adap, i2c_add_adapter);
686*4882a593Smuzhiyun }
687*4882a593Smuzhiyun EXPORT_SYMBOL(i2c_bit_add_bus);
688*4882a593Smuzhiyun
i2c_bit_add_numbered_bus(struct i2c_adapter * adap)689*4882a593Smuzhiyun int i2c_bit_add_numbered_bus(struct i2c_adapter *adap)
690*4882a593Smuzhiyun {
691*4882a593Smuzhiyun return __i2c_bit_add_bus(adap, i2c_add_numbered_adapter);
692*4882a593Smuzhiyun }
693*4882a593Smuzhiyun EXPORT_SYMBOL(i2c_bit_add_numbered_bus);
694*4882a593Smuzhiyun
695*4882a593Smuzhiyun MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
696*4882a593Smuzhiyun MODULE_DESCRIPTION("I2C-Bus bit-banging algorithm");
697*4882a593Smuzhiyun MODULE_LICENSE("GPL");
698