fb_ddc: Allow I2C adapters without SCL read capability

i2c-algo-bit allows I2C adapters without SCL read capability to work
but fb_ddc_read fails to work on them.

Fix fb_ddc_read to work with I2C adapters not capable of reading SCL.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
Ondrej Zary 2015-09-25 00:14:13 +02:00 committed by Tomi Valkeinen
parent 3ac58d5808
commit ec90631c8a
1 changed files with 18 additions and 10 deletions

View File

@ -67,13 +67,17 @@ unsigned char *fb_ddc_read(struct i2c_adapter *adapter)
msleep(13); msleep(13);
algo_data->setscl(algo_data->data, 1); algo_data->setscl(algo_data->data, 1);
for (j = 0; j < 5; j++) { if (algo_data->getscl) {
msleep(10); for (j = 0; j < 5; j++) {
if (algo_data->getscl(algo_data->data)) msleep(10);
break; if (algo_data->getscl(algo_data->data))
break;
}
if (j == 5)
continue;
} else {
udelay(algo_data->udelay);
} }
if (j == 5)
continue;
algo_data->setsda(algo_data->data, 0); algo_data->setsda(algo_data->data, 0);
msleep(15); msleep(15);
@ -89,10 +93,14 @@ unsigned char *fb_ddc_read(struct i2c_adapter *adapter)
msleep(15); msleep(15);
algo_data->setscl(algo_data->data, 1); algo_data->setscl(algo_data->data, 1);
for (j = 0; j < 10; j++) { if (algo_data->getscl) {
msleep(10); for (j = 0; j < 10; j++) {
if (algo_data->getscl(algo_data->data)) msleep(10);
break; if (algo_data->getscl(algo_data->data))
break;
}
} else {
udelay(algo_data->udelay);
} }
algo_data->setsda(algo_data->data, 1); algo_data->setsda(algo_data->data, 1);