diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2008-10-17 11:51:12 -0400 |
---|---|---|
committer | Jean Delvare <khali@mahadeva.delvare> | 2008-10-17 11:51:12 -0400 |
commit | 47064d645bc55863c7887a7c96cde39c9a37ee5f (patch) | |
tree | 812e5badc94040e6001d3ca76bce97a3906caa60 /drivers/hwmon/lm87.c | |
parent | d2cac802feae6f0c246a9251eefc482bf5ec0f0f (diff) |
hwmon: (lm87) Add support for configuration through platform_data
The lm87 driver normally assumes that firmware configured the chip
correctly. Since this is not always the case, alllow platform code to
set the channel register value via platform_data. All other
configuration registers can be changed after driver initialisation.
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Diffstat (limited to 'drivers/hwmon/lm87.c')
-rw-r--r-- | drivers/hwmon/lm87.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/hwmon/lm87.c b/drivers/hwmon/lm87.c index fa0e3794d9a4..2e4a3cea95f7 100644 --- a/drivers/hwmon/lm87.c +++ b/drivers/hwmon/lm87.c | |||
@@ -21,11 +21,10 @@ | |||
21 | * http://www.national.com/pf/LM/LM87.html | 21 | * http://www.national.com/pf/LM/LM87.html |
22 | * | 22 | * |
23 | * Some functions share pins, so not all functions are available at the same | 23 | * Some functions share pins, so not all functions are available at the same |
24 | * time. Which are depends on the hardware setup. This driver assumes that | 24 | * time. Which are depends on the hardware setup. This driver normally |
25 | * the BIOS configured the chip correctly. In that respect, it differs from | 25 | * assumes that firmware configured the chip correctly. Where this is not |
26 | * the original driver (from lm_sensors for Linux 2.4), which would force the | 26 | * the case, platform code must set the I2C client's platform_data to point |
27 | * LM87 to an arbitrary, compile-time chosen mode, regardless of the actual | 27 | * to a u8 value to be written to the channel register. |
28 | * chipset wiring. | ||
29 | * For reference, here is the list of exclusive functions: | 28 | * For reference, here is the list of exclusive functions: |
30 | * - in0+in5 (default) or temp3 | 29 | * - in0+in5 (default) or temp3 |
31 | * - fan1 (default) or in6 | 30 | * - fan1 (default) or in6 |
@@ -843,7 +842,13 @@ static void lm87_init_client(struct i2c_client *client) | |||
843 | { | 842 | { |
844 | struct lm87_data *data = i2c_get_clientdata(client); | 843 | struct lm87_data *data = i2c_get_clientdata(client); |
845 | 844 | ||
846 | data->channel = lm87_read_value(client, LM87_REG_CHANNEL_MODE); | 845 | if (client->dev.platform_data) { |
846 | data->channel = *(u8 *)client->dev.platform_data; | ||
847 | lm87_write_value(client, | ||
848 | LM87_REG_CHANNEL_MODE, data->channel); | ||
849 | } else { | ||
850 | data->channel = lm87_read_value(client, LM87_REG_CHANNEL_MODE); | ||
851 | } | ||
847 | data->config = lm87_read_value(client, LM87_REG_CONFIG) & 0x6F; | 852 | data->config = lm87_read_value(client, LM87_REG_CONFIG) & 0x6F; |
848 | 853 | ||
849 | if (!(data->config & 0x01)) { | 854 | if (!(data->config & 0x01)) { |