|
@@ -21,11 +21,10 @@
|
|
|
* 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)) {
|