diff options
Diffstat (limited to 'drivers/i2c/algos/i2c-algo-bit.c')
-rw-r--r-- | drivers/i2c/algos/i2c-algo-bit.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c index 761df16838b4..48fe3a3b0b51 100644 --- a/drivers/i2c/algos/i2c-algo-bit.c +++ b/drivers/i2c/algos/i2c-algo-bit.c | |||
@@ -76,17 +76,15 @@ static inline void scllo(struct i2c_algo_bit_data *adap) | |||
76 | * Raise scl line, and do checking for delays. This is necessary for slower | 76 | * Raise scl line, and do checking for delays. This is necessary for slower |
77 | * devices. | 77 | * devices. |
78 | */ | 78 | */ |
79 | static inline int sclhi(struct i2c_algo_bit_data *adap) | 79 | static int sclhi(struct i2c_algo_bit_data *adap) |
80 | { | 80 | { |
81 | unsigned long start; | 81 | unsigned long start; |
82 | 82 | ||
83 | setscl(adap,1); | 83 | setscl(adap,1); |
84 | 84 | ||
85 | /* Not all adapters have scl sense line... */ | 85 | /* Not all adapters have scl sense line... */ |
86 | if (adap->getscl == NULL ) { | 86 | if (!adap->getscl) |
87 | udelay(adap->udelay); | 87 | goto done; |
88 | return 0; | ||
89 | } | ||
90 | 88 | ||
91 | start=jiffies; | 89 | start=jiffies; |
92 | while (! getscl(adap) ) { | 90 | while (! getscl(adap) ) { |
@@ -101,6 +99,8 @@ static inline int sclhi(struct i2c_algo_bit_data *adap) | |||
101 | cond_resched(); | 99 | cond_resched(); |
102 | } | 100 | } |
103 | DEBSTAT(printk(KERN_DEBUG "needed %ld jiffies\n", jiffies-start)); | 101 | DEBSTAT(printk(KERN_DEBUG "needed %ld jiffies\n", jiffies-start)); |
102 | |||
103 | done: | ||
104 | udelay(adap->udelay); | 104 | udelay(adap->udelay); |
105 | return 0; | 105 | return 0; |
106 | } | 106 | } |
@@ -121,7 +121,6 @@ static void i2c_repstart(struct i2c_algo_bit_data *adap) | |||
121 | DEBPROTO(printk(" Sr ")); | 121 | DEBPROTO(printk(" Sr ")); |
122 | setsda(adap,1); | 122 | setsda(adap,1); |
123 | sclhi(adap); | 123 | sclhi(adap); |
124 | udelay(adap->udelay); | ||
125 | 124 | ||
126 | sdalo(adap); | 125 | sdalo(adap); |
127 | scllo(adap); | 126 | scllo(adap); |
@@ -306,7 +305,7 @@ bailout: | |||
306 | * 0 chip did not answer | 305 | * 0 chip did not answer |
307 | * -x transmission error | 306 | * -x transmission error |
308 | */ | 307 | */ |
309 | static inline int try_address(struct i2c_adapter *i2c_adap, | 308 | static int try_address(struct i2c_adapter *i2c_adap, |
310 | unsigned char addr, int retries) | 309 | unsigned char addr, int retries) |
311 | { | 310 | { |
312 | struct i2c_algo_bit_data *adap = i2c_adap->algo_data; | 311 | struct i2c_algo_bit_data *adap = i2c_adap->algo_data; |
@@ -358,7 +357,7 @@ static int sendbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) | |||
358 | return wrcount; | 357 | return wrcount; |
359 | } | 358 | } |
360 | 359 | ||
361 | static inline int readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) | 360 | static int readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) |
362 | { | 361 | { |
363 | int inval; | 362 | int inval; |
364 | int rdcount=0; /* counts bytes read */ | 363 | int rdcount=0; /* counts bytes read */ |
@@ -408,7 +407,7 @@ static inline int readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) | |||
408 | * -x an error occurred (like: -EREMOTEIO if the device did not answer, or | 407 | * -x an error occurred (like: -EREMOTEIO if the device did not answer, or |
409 | * -ETIMEDOUT, for example if the lines are stuck...) | 408 | * -ETIMEDOUT, for example if the lines are stuck...) |
410 | */ | 409 | */ |
411 | static inline int bit_doAddress(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) | 410 | static int bit_doAddress(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) |
412 | { | 411 | { |
413 | unsigned short flags = msg->flags; | 412 | unsigned short flags = msg->flags; |
414 | unsigned short nak_ok = msg->flags & I2C_M_IGNORE_NAK; | 413 | unsigned short nak_ok = msg->flags & I2C_M_IGNORE_NAK; |