diff options
-rw-r--r-- | drivers/video/fbdev/core/fb_ddc.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/drivers/video/fbdev/core/fb_ddc.c b/drivers/video/fbdev/core/fb_ddc.c index 94322ccfedde..8bf5f2f54be7 100644 --- a/drivers/video/fbdev/core/fb_ddc.c +++ b/drivers/video/fbdev/core/fb_ddc.c | |||
@@ -67,13 +67,17 @@ unsigned char *fb_ddc_read(struct i2c_adapter *adapter) | |||
67 | msleep(13); | 67 | msleep(13); |
68 | 68 | ||
69 | algo_data->setscl(algo_data->data, 1); | 69 | algo_data->setscl(algo_data->data, 1); |
70 | for (j = 0; j < 5; j++) { | 70 | if (algo_data->getscl) { |
71 | msleep(10); | 71 | for (j = 0; j < 5; j++) { |
72 | if (algo_data->getscl(algo_data->data)) | 72 | msleep(10); |
73 | break; | 73 | if (algo_data->getscl(algo_data->data)) |
74 | break; | ||
75 | } | ||
76 | if (j == 5) | ||
77 | continue; | ||
78 | } else { | ||
79 | udelay(algo_data->udelay); | ||
74 | } | 80 | } |
75 | if (j == 5) | ||
76 | continue; | ||
77 | 81 | ||
78 | algo_data->setsda(algo_data->data, 0); | 82 | algo_data->setsda(algo_data->data, 0); |
79 | msleep(15); | 83 | msleep(15); |
@@ -89,10 +93,14 @@ unsigned char *fb_ddc_read(struct i2c_adapter *adapter) | |||
89 | msleep(15); | 93 | msleep(15); |
90 | 94 | ||
91 | algo_data->setscl(algo_data->data, 1); | 95 | algo_data->setscl(algo_data->data, 1); |
92 | for (j = 0; j < 10; j++) { | 96 | if (algo_data->getscl) { |
93 | msleep(10); | 97 | for (j = 0; j < 10; j++) { |
94 | if (algo_data->getscl(algo_data->data)) | 98 | msleep(10); |
95 | break; | 99 | if (algo_data->getscl(algo_data->data)) |
100 | break; | ||
101 | } | ||
102 | } else { | ||
103 | udelay(algo_data->udelay); | ||
96 | } | 104 | } |
97 | 105 | ||
98 | algo_data->setsda(algo_data->data, 1); | 106 | algo_data->setsda(algo_data->data, 1); |