mirror of
https://github.com/lm-sensors/lm-sensors
synced 2025-09-02 23:35:57 +00:00
Support MAX6633, MAX6634, MAX6635 and LM76.
git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@2440 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
@@ -135,7 +135,13 @@ lm90
|
|||||||
adm1032 2 - - - yes no
|
adm1032 2 - - - yes no
|
||||||
|
|
||||||
lm92
|
lm92
|
||||||
|
(all are reported as an "lm92")
|
||||||
lm92 1 - - - yes no
|
lm92 1 - - - yes no
|
||||||
|
max6633 1 - - - yes no
|
||||||
|
max6634 1 - - - yes no
|
||||||
|
max6635 1 - - - yes no
|
||||||
|
(lm76 needs force parameter)
|
||||||
|
lm76 1 - - - yes no
|
||||||
|
|
||||||
maxilife
|
maxilife
|
||||||
maxilife-as 5 4 3 - yes no
|
maxilife-as 5 4 3 - yes no
|
||||||
|
@@ -7,6 +7,13 @@ Supported chips:
|
|||||||
* National Semiconductors LM92
|
* National Semiconductors LM92
|
||||||
Prefix `lm92'
|
Prefix `lm92'
|
||||||
Addresses scanned: I2C 0x48 - 0x4b (inclusive)
|
Addresses scanned: I2C 0x48 - 0x4b (inclusive)
|
||||||
|
* National Semiconductors LM76
|
||||||
|
Prefix `lm92'
|
||||||
|
Addresses scanned: none, force parameter needed
|
||||||
|
* Maxim MAX6633/MAX6634/MAX6635
|
||||||
|
Prefix `lm92'
|
||||||
|
Addresses scanned: I2C 0x48 - 0x4f (inclusive)
|
||||||
|
MAX6633 with address in 0x40 - 0x47 needs force parameter
|
||||||
|
|
||||||
Author: Abraham van der Merwe <abraham@2d3d.co.za>
|
Author: Abraham van der Merwe <abraham@2d3d.co.za>
|
||||||
|
|
||||||
@@ -46,6 +53,10 @@ control the thresholds for resetting alarms.
|
|||||||
At the moment the driver controls these sensors in comparator mode and the
|
At the moment the driver controls these sensors in comparator mode and the
|
||||||
interrupt pins (INT, T_CRIT_A) are ignored.
|
interrupt pins (INT, T_CRIT_A) are ignored.
|
||||||
|
|
||||||
|
Support was added later for the LM76 and Maxim MAX6633/MAX6634/MAX6635,
|
||||||
|
which are mostly compatible. They have not all been tested, so you
|
||||||
|
may need to use the force parameter.
|
||||||
|
|
||||||
|
|
||||||
Hardware Configurations
|
Hardware Configurations
|
||||||
-----------------------
|
-----------------------
|
||||||
|
@@ -107,7 +107,7 @@ static DECLARE_MUTEX (mutex);
|
|||||||
|
|
||||||
/* addresses to scan */
|
/* addresses to scan */
|
||||||
static unsigned short normal_i2c[] = { SENSORS_I2C_END };
|
static unsigned short normal_i2c[] = { SENSORS_I2C_END };
|
||||||
static unsigned short normal_i2c_range[] = { 0x48, 0x4b, SENSORS_I2C_END };
|
static unsigned short normal_i2c_range[] = { 0x48, 0x4f, SENSORS_I2C_END };
|
||||||
static unsigned int normal_isa[] = { SENSORS_ISA_END };
|
static unsigned int normal_isa[] = { SENSORS_ISA_END };
|
||||||
static unsigned int normal_isa_range[] = { SENSORS_ISA_END };
|
static unsigned int normal_isa_range[] = { SENSORS_ISA_END };
|
||||||
|
|
||||||
@@ -231,6 +231,35 @@ static void lm92_alarms (struct i2c_client *client,int operation,int ctl_name,in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int max6635_check(struct i2c_client *client)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
u16 temp_low, temp_high, temp_hyst, temp_crit;
|
||||||
|
u8 conf;
|
||||||
|
|
||||||
|
temp_low = i2c_smbus_read_word_data(client, LM92_REG_TRIP_LOW);
|
||||||
|
temp_high = i2c_smbus_read_word_data(client, LM92_REG_TRIP_HIGH);
|
||||||
|
temp_hyst = i2c_smbus_read_word_data(client, LM92_REG_TRIP_HYSTERESIS);
|
||||||
|
temp_crit = i2c_smbus_read_word_data(client, LM92_REG_TRIP_CRITICAL);
|
||||||
|
|
||||||
|
if ((temp_low & 0x7f00) || (temp_high & 0x7f00)
|
||||||
|
|| (temp_hyst & 0x7f00) || (temp_crit & 0x7f00))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
conf = i2c_smbus_read_byte_data(client, LM92_REG_CONFIGURATION);
|
||||||
|
|
||||||
|
for (i=0; i<128; i+=16) {
|
||||||
|
if (temp_low != i2c_smbus_read_word_data(client, LM92_REG_TRIP_LOW + i)
|
||||||
|
|| temp_high != i2c_smbus_read_word_data(client, LM92_REG_TRIP_HIGH + i)
|
||||||
|
|| temp_hyst != i2c_smbus_read_word_data(client, LM92_REG_TRIP_HYSTERESIS + i)
|
||||||
|
|| temp_crit != i2c_smbus_read_word_data(client, LM92_REG_TRIP_CRITICAL + i)
|
||||||
|
|| conf != i2c_smbus_read_byte_data(client, LM92_REG_CONFIGURATION + i))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int lm92_init_client (struct i2c_client *client)
|
static int lm92_init_client (struct i2c_client *client)
|
||||||
{
|
{
|
||||||
lm92_t *data = (lm92_t *) client->data;
|
lm92_t *data = (lm92_t *) client->data;
|
||||||
@@ -294,11 +323,18 @@ static int lm92_detect (struct i2c_adapter *adapter,int address,unsigned short f
|
|||||||
return (-ERESTARTSYS);
|
return (-ERESTARTSYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((kind < 0 && lm92_read16 (client,LM92_REG_MANUFACTURER,&manufacturer) < 0) ||
|
if (kind < 0) {
|
||||||
manufacturer != LM92_MANUFACTURER_ID) {
|
/* Is it an lm92? */
|
||||||
kfree (client);
|
if (address < 0x4c
|
||||||
up (&mutex);
|
&& (lm92_read16(client,LM92_REG_MANUFACTURER,&manufacturer) < 0
|
||||||
return (-ENODEV);
|
|| manufacturer != LM92_MANUFACTURER_ID)) {
|
||||||
|
/* Is it a MAX6635/MAX6635/MAX6635? */
|
||||||
|
if (!max6635_check(client)) {
|
||||||
|
kfree (client);
|
||||||
|
up (&mutex);
|
||||||
|
return (-ENODEV);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((result = i2c_attach_client (client))) {
|
if ((result = i2c_attach_client (client))) {
|
||||||
|
Reference in New Issue
Block a user