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 | |
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>
-rw-r--r-- | Documentation/hwmon/lm87 | 9 | ||||
-rw-r--r-- | drivers/hwmon/lm87.c | 17 |
2 files changed, 15 insertions, 11 deletions
diff --git a/Documentation/hwmon/lm87 b/Documentation/hwmon/lm87 index ec27aa1b94cb..6b47b67fd968 100644 --- a/Documentation/hwmon/lm87 +++ b/Documentation/hwmon/lm87 | |||
@@ -65,11 +65,10 @@ The LM87 has four pins which can serve one of two possible functions, | |||
65 | depending on the hardware configuration. | 65 | depending on the hardware configuration. |
66 | 66 | ||
67 | Some functions share pins, so not all functions are available at the same | 67 | Some functions share pins, so not all functions are available at the same |
68 | time. Which are depends on the hardware setup. This driver assumes that | 68 | time. Which are depends on the hardware setup. This driver normally |
69 | the BIOS configured the chip correctly. In that respect, it differs from | 69 | assumes that firmware configured the chip correctly. Where this is not |
70 | the original driver (from lm_sensors for Linux 2.4), which would force the | 70 | the case, platform code must set the I2C client's platform_data to point |
71 | LM87 to an arbitrary, compile-time chosen mode, regardless of the actual | 71 | to a u8 value to be written to the channel register. |
72 | chipset wiring. | ||
73 | 72 | ||
74 | For reference, here is the list of exclusive functions: | 73 | For reference, here is the list of exclusive functions: |
75 | - in0+in5 (default) or temp3 | 74 | - in0+in5 (default) or temp3 |
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)) { |