From 454e70e79aab4227aff9ba0460eddb4894ff1ec0 Mon Sep 17 00:00:00 2001 From: "Mark D. Studebaker" Date: Sun, 5 Jan 2003 01:33:34 +0000 Subject: [PATCH] use i2c block reads if that functionality is available. git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@1686 7894878c-1315-0410-8ee3-d5d059ff63e0 --- CHANGES | 1 + kernel/chips/ddcmon.c | 20 ++++++++++++++------ kernel/chips/eeprom.c | 20 ++++++++++++++------ 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/CHANGES b/CHANGES index 1f52e5a6..616056d1 100644 --- a/CHANGES +++ b/CHANGES @@ -23,6 +23,7 @@ ask CVS about it: Library: Add support for exponents and logarithms for vt1211/vt8235 temps Makefile: Generate warnings if new library won't be found by ld.so Module adm1021: Ignore failed reads and report old value + Modules ddcmon, eeprom: Use i2c block reads if possible Module i2c-i810.c: Fix for some chips Modules mtp008, smsc47m1, vt1211, vt8231, w83781d: Standardize and improve pwm and pwm enable support; update docs diff --git a/kernel/chips/ddcmon.c b/kernel/chips/ddcmon.c index ed4f7eb7..f6330b67 100644 --- a/kernel/chips/ddcmon.c +++ b/kernel/chips/ddcmon.c @@ -279,15 +279,23 @@ void ddcmon_update_client(struct i2c_client *client) if ((jiffies - data->last_updated > 300 * HZ) || (jiffies < data->last_updated) || !data->valid) { - if (i2c_smbus_write_byte(client, 0)) { + if (i2c_check_functionality(client->adapter, + I2C_FUNC_SMBUS_READ_BLOCK_DATA)) + { + for (i=0; idata + i) + != I2C_SMBUS_I2C_BLOCK_MAX) + break; + } else { + if (i2c_smbus_write_byte(client, 0)) { #ifdef DEBUG - printk("ddcmon read start has failed!\n"); + printk("ddcmon read start has failed!\n"); #endif + } + for (i = 0; i < DDCMON_SIZE; i++) + data->data[i] = (u8) i2c_smbus_read_byte(client); } - for (i = 0; i < DDCMON_SIZE; i++) { - data->data[i] = (u8) i2c_smbus_read_byte(client); - } - data->last_updated = jiffies; data->valid = 1; } diff --git a/kernel/chips/eeprom.c b/kernel/chips/eeprom.c index c5dfa1ab..3ef80a76 100644 --- a/kernel/chips/eeprom.c +++ b/kernel/chips/eeprom.c @@ -345,15 +345,23 @@ void eeprom_update_client(struct i2c_client *client) printk("Starting eeprom update\n"); #endif - if (i2c_smbus_write_byte(client, 0)) { + if (i2c_check_functionality(client->adapter, + I2C_FUNC_SMBUS_READ_BLOCK_DATA)) + { + for (i=0; idata + i) + != I2C_SMBUS_I2C_BLOCK_MAX) + break; + } else { + if (i2c_smbus_write_byte(client, 0)) { #ifdef DEBUG - printk("eeprom read start has failed!\n"); + printk("eeprom read start has failed!\n"); #endif + } + for (i = 0; i < EEPROM_SIZE; i++) + data->data[i] = (u8) i2c_smbus_read_byte(client); } - for (i = 0; i < EEPROM_SIZE; i++) { - data->data[i] = (u8) i2c_smbus_read_byte(client); - } - data->last_updated = jiffies; data->valid = 1; }