From a7c706826fbac404c22f499cb77e797a43c8bb69 Mon Sep 17 00:00:00 2001 From: "Mark D. Studebaker" Date: Tue, 10 Jun 2003 01:09:31 +0000 Subject: [PATCH] add reset option; fix adapter functionality check to verify that block data w/ HW or SW PEC is available. git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@1780 7894878c-1315-0410-8ee3-d5d059ff63e0 --- kernel/chips/smbus-arp.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/kernel/chips/smbus-arp.c b/kernel/chips/smbus-arp.c index 58e199af..76fcaf80 100644 --- a/kernel/chips/smbus-arp.c +++ b/kernel/chips/smbus-arp.c @@ -45,6 +45,11 @@ static unsigned int normal_isa_range[] = { SENSORS_ISA_END }; /* Insmod parameters */ SENSORS_INSMOD_1(arp); +static int reset; +MODULE_PARM(reset, "i"); +MODULE_PARM_DESC(reset, + "Send an ARP Reset Device message to each bus"); + /* ARP Commands */ #define ARP_PREPARE 0x01 #define ARP_RESET_DEV 0x02 @@ -178,7 +183,11 @@ int smbusarp_detect(struct i2c_adapter *adapter, int address, int err = 0; const char *type_name, *client_name; - if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BLOCK_DATA)) + /* must support block data w/ HW PEC or SW PEC */ + if ((!i2c_check_functionality(adapter, + I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_HWPEC_CALC)) && + (!i2c_check_functionality(adapter, + I2C_FUNC_SMBUS_BLOCK_DATA_PEC))) return(0); if (!(new_client = kmalloc(sizeof(struct i2c_client) + @@ -284,6 +293,8 @@ static int smbusarp_init_client(struct i2c_client *client) data->address_pool[client->adapter->clients[i]->addr] = ARP_BUSY; + if(reset) + i2c_smbus_write_byte(client, ARP_RESET_DEV); ret = i2c_smbus_write_byte(client, ARP_PREPARE); if(ret < 0) { #ifdef DEBUG