]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/hwmon/lm87.c
hwmon: (lm87) Add support for configuration through platform_data
[linux-2.6-omap-h63xx.git] / drivers / hwmon / lm87.c
index fa0e3794d9a40fed5e02dd143124e8a1e120f711..2e4a3cea95f7e957024d97af9f103551661bdcff 100644 (file)
  *   http://www.national.com/pf/LM/LM87.html
  *
  * Some functions share pins, so not all functions are available at the same
- * time. Which are depends on the hardware setup. This driver assumes that
- * the BIOS configured the chip correctly. In that respect, it  differs from
- * the original driver (from lm_sensors for Linux 2.4), which would force the
- * LM87 to an arbitrary, compile-time chosen mode, regardless of the actual
- * chipset wiring.
+ * time. Which are depends on the hardware setup. This driver normally
+ * assumes that firmware configured the chip correctly. Where this is not
+ * the case, platform code must set the I2C client's platform_data to point
+ * to a u8 value to be written to the channel register.
  * For reference, here is the list of exclusive functions:
  *  - in0+in5 (default) or temp3
  *  - fan1 (default) or in6
@@ -843,7 +842,13 @@ static void lm87_init_client(struct i2c_client *client)
 {
        struct lm87_data *data = i2c_get_clientdata(client);
 
-       data->channel = lm87_read_value(client, LM87_REG_CHANNEL_MODE);
+       if (client->dev.platform_data) {
+               data->channel = *(u8 *)client->dev.platform_data;
+               lm87_write_value(client,
+                                LM87_REG_CHANNEL_MODE, data->channel);
+       } else {
+               data->channel = lm87_read_value(client, LM87_REG_CHANNEL_MODE);
+       }
        data->config = lm87_read_value(client, LM87_REG_CONFIG) & 0x6F;
 
        if (!(data->config & 0x01)) {