diff --git a/README b/README index 9c3cf419..03470837 100644 --- a/README +++ b/README @@ -37,7 +37,7 @@ At least the following SMBus adapters are supported: At least the following hardware sensor chips are supported: National Semicoductor LM75, LM78, LM78-J, LM79. LM80, LM81, and LM84 Winbond W83781D, W83782D, W83783S, and W83627HF - Genesys Logic GL518SM (several revisions) + Genesys Logic GL518SM (several revisions), GL523SM Analog Devices ADM1021, ADM1022, and ADM9240 SiS Southbridge (integrated in the chipset; the I2C adapter will also be supported in the near future) diff --git a/doc/chips/SUMMARY b/doc/chips/SUMMARY index d0042c3f..c8c710d6 100644 --- a/doc/chips/SUMMARY +++ b/doc/chips/SUMMARY @@ -38,6 +38,7 @@ Driver Chips #temp #vin #fanin pwm/dac i2c ISA adm1021 adm1021 2 - - - yes no lm84 2 - - - yes no + gl523sm 2 - - - yes no max1617 2 - - - yes no max1617a 2 - - - yes no thmc10 2 - - - yes no diff --git a/kernel/chips/adm1021.c b/kernel/chips/adm1021.c index 09cd5914..f7f0679a 100644 --- a/kernel/chips/adm1021.c +++ b/kernel/chips/adm1021.c @@ -42,7 +42,7 @@ static unsigned int normal_isa[] = {SENSORS_ISA_END}; static unsigned int normal_isa_range[] = {SENSORS_ISA_END}; /* Insmod parameters */ -SENSORS_INSMOD_5(adm1021,max1617,max1617a,thmc10,lm84); +SENSORS_INSMOD_6(adm1021,max1617,max1617a,thmc10,lm84,gl523sm); /* adm1021 constants specified below */ @@ -250,6 +250,8 @@ static int adm1021_detect(struct i2c_adapter *adapter, int address, kind = thmc10; else if (i == 0x00) kind = lm84; + else if (i == 0x23) + kind = gl523sm; else if ((i== 0x4d) && (adm1021_read_value(new_client,ADM1021_REG_DEV_ID) == 0x01)) kind = max1617a; diff --git a/kernel/include/sensors.h b/kernel/include/sensors.h index 42e69a11..35dc2218 100644 --- a/kernel/include/sensors.h +++ b/kernel/include/sensors.h @@ -299,6 +299,27 @@ struct sensors_address_data { {NULL}}; \ SENSORS_INSMOD +#define SENSORS_INSMOD_6(chip1,chip2,chip3,chip4,chip5,chip6) \ + enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 }; \ + SENSORS_MODULE_PARM(force, \ + "List of adapter,address pairs to boldly assume " \ + "to be present"); \ + SENSORS_MODULE_PARM_FORCE(chip1); \ + SENSORS_MODULE_PARM_FORCE(chip2); \ + SENSORS_MODULE_PARM_FORCE(chip3); \ + SENSORS_MODULE_PARM_FORCE(chip4); \ + SENSORS_MODULE_PARM_FORCE(chip5); \ + SENSORS_MODULE_PARM_FORCE(chip6); \ + static struct sensors_force_data forces[] = {{force,any_chip}, \ + {force_ ## chip1,chip1}, \ + {force_ ## chip2,chip2}, \ + {force_ ## chip3,chip3}, \ + {force_ ## chip4,chip4}, \ + {force_ ## chip5,chip5}, \ + {force_ ## chip6,chip6}, \ + {NULL}}; \ + SENSORS_INSMOD + typedef int sensors_found_addr_proc (struct i2c_adapter *adapter, int addr, unsigned short flags, int kind); diff --git a/prog/detect/sensors-detect b/prog/detect/sensors-detect index 840dfd0f..e505af8f 100755 --- a/prog/detect/sensors-detect +++ b/prog/detect/sensors-detect @@ -296,6 +296,12 @@ use subs qw(lm78_detect lm78_isa_detect lm78_alias_detect lm75_detect i2c_addrs => [0x18..0x1a,0x29..0x2b,0x4c..0x4e], i2c_detect => sub { adm1021_detect 4, @_ }, }, + { + name => "Genesys Logic GL523SM" + driver => "adm1021", + i2c_addrs => [0x18..0x1a,0x29..0x2b,0x4c..0x4e], + i2c_detect => sub { adm1021_detect 5, @_ }, + }, { name => "Analog Devices ADM1022", driver => "thmc50", @@ -1426,7 +1432,7 @@ sub adm1022_detect } # $_[0]: Chip to detect -# (0 = ADM1021, 1 = MAX1617, 2 = MAX1617A, 3 = THMC10, 4 = LM84) +# (0 = ADM1021, 1 = MAX1617, 2 = MAX1617A, 3 = THMC10, 4 = LM84, 5 = GL523) # $_[1]: A reference to the file descriptor to access this chip. # We may assume an i2c_set_slave_addr was already done. # $_[2]: Address @@ -1443,6 +1449,7 @@ sub adm1021_detect return if $chip == 0 and i2c_smbus_read_byte_data($file,0xfe) != 0x41; return if $chip == 3 and i2c_smbus_read_byte_data($file,0xfe) != 0x49; return if $chip == 4 and i2c_smbus_read_byte_data($file,0xfe) != 0x00; + return if $chip == 5 and i2c_smbus_read_byte_data($file,0xfe) != 0x23; return if $chip == 2 and i2c_smbus_read_byte_data($file,0xfe) != 0x4d and i2c_smbus_read_byte_data($file,0xff) != 0x01; # The remaining things are flaky at best. Perhaps something can be done