aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2008-10-17 11:51:12 -0400
committerJean Delvare <khali@mahadeva.delvare>2008-10-17 11:51:12 -0400
commit47064d645bc55863c7887a7c96cde39c9a37ee5f (patch)
tree812e5badc94040e6001d3ca76bce97a3906caa60
parentd2cac802feae6f0c246a9251eefc482bf5ec0f0f (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/lm879
-rw-r--r--drivers/hwmon/lm87.c17
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,
65depending on the hardware configuration. 65depending on the hardware configuration.
66 66
67Some functions share pins, so not all functions are available at the same 67Some functions share pins, so not all functions are available at the same
68time. Which are depends on the hardware setup. This driver assumes that 68time. Which are depends on the hardware setup. This driver normally
69the BIOS configured the chip correctly. In that respect, it differs from 69assumes that firmware configured the chip correctly. Where this is not
70the original driver (from lm_sensors for Linux 2.4), which would force the 70the case, platform code must set the I2C client's platform_data to point
71LM87 to an arbitrary, compile-time chosen mode, regardless of the actual 71to a u8 value to be written to the channel register.
72chipset wiring.
73 72
74For reference, here is the list of exclusive functions: 73For 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)) {