[lm-sensors] [PATCH 4/4] hwmon: (pmbus/zl6100) Only instantiate external temperature sensor if enabled
Robert Coulson
robert.coulson at ericsson.com
Tue Nov 29 00:18:20 CET 2011
> -----Original Message-----
> From: Guenter Roeck
> Sent: Wednesday, November 23, 2011 11:31 AM
> To: Jean Delvare
> Cc: Robert Coulson; lm-sensors at lm-sensors.org; Guenter Roeck
> Subject: [PATCH 4/4] hwmon: (pmbus/zl6100) Only instantiate
> external temperature sensor if enabled
>
> BMR4xx devices don't have an external temperature sensor, and
> instantiating it does not provide value anyway if it is disabled.
> Only instantiate it if it is enabled.
>
> Also optimize wait time between I2C chip accesses in the
> probe function, and replace unnecessary check for support for
> I2C_FUNC_SMBUS_READ_BYTE_DATA with now required support for
> I2C_FUNC_SMBUS_READ_WORD_DATA.
>
> Signed-off-by: Guenter Roeck <guenter.roeck at ericsson.com>
Reviewed-by: Robert Coulson <robert.coulson at ericsson.com>
> ---
> drivers/hwmon/pmbus/zl6100.c | 19 ++++++++++++++-----
> 1 files changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/hwmon/pmbus/zl6100.c
> b/drivers/hwmon/pmbus/zl6100.c index 7a72b6e..48c7b4a 100644
> --- a/drivers/hwmon/pmbus/zl6100.c
> +++ b/drivers/hwmon/pmbus/zl6100.c
> @@ -38,8 +38,11 @@ struct zl6100_data {
>
> #define to_zl6100_data(x) container_of(x, struct zl6100_data, info)
>
> +#define ZL6100_MFR_CONFIG 0xd0
> #define ZL6100_DEVICE_ID 0xe4
>
> +#define ZL6100_MFR_XTEMP_ENABLE (1 << 7)
> +
> #define ZL6100_WAIT_TIME 1000 /* uS */
>
> static ushort delay = ZL6100_WAIT_TIME; @@ -162,7 +165,7 @@
> static int zl6100_probe(struct i2c_client *client,
> const struct i2c_device_id *mid;
>
> if (!i2c_check_functionality(client->adapter,
> - I2C_FUNC_SMBUS_READ_BYTE_DATA
> + I2C_FUNC_SMBUS_READ_WORD_DATA
> | I2C_FUNC_SMBUS_READ_BLOCK_DATA))
> return -ENODEV;
>
> @@ -210,12 +213,9 @@ static int zl6100_probe(struct
> i2c_client *client,
> /*
> * Since there was a direct I2C device access above, wait before
> * accessing the chip again.
> - * Set the timestamp, wait, then set it again. This
> should provide
> - * enough buffer time to be safe.
> */
> data->access = ktime_get();
> zl6100_wait(data);
> - data->access = ktime_get();
>
> info = &data->info;
>
> @@ -223,7 +223,16 @@ static int zl6100_probe(struct
> i2c_client *client,
> info->func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT
> | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT
> | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT
> - | PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_STATUS_TEMP;
> + | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP;
> +
> + ret = i2c_smbus_read_word_data(client, ZL6100_MFR_CONFIG);
> + if (ret < 0)
> + goto err_mem;
> + if (ret & ZL6100_MFR_XTEMP_ENABLE)
> + info->func[0] |= PMBUS_HAVE_TEMP2;
> +
> + data->access = ktime_get();
> + zl6100_wait(data);
>
> info->read_word_data = zl6100_read_word_data;
> info->read_byte_data = zl6100_read_byte_data;
> --
> 1.7.3.1
>
>
More information about the lm-sensors
mailing list