Re: [lm-sensors] [PATCH] hwmon: Add basic support for lm64 tolm63.c

From: Jean Delvare
Date: Thu Mar 18 2010 - 03:41:47 EST


Hi Matthew,

On Wed, 17 Mar 2010 15:55:22 -0400, Matthew Garrett wrote:
> The lm64 appears to be an lm63 with added gpio lines. Add support for the
> hwmon functionality - gpio can be added at some later stage if someone
> has a need for them.
>
> Signed-off-by: Matthew Garrett <mjg@xxxxxxxxxx>
> ---
> Documentation/hwmon/lm63 | 7 +++++++
> drivers/hwmon/lm63.c | 19 +++++++++++++++----
> 2 files changed, 22 insertions(+), 4 deletions(-)

Can you please send me a dump of your LM64 chip?

Review:

>
> diff --git a/Documentation/hwmon/lm63 b/Documentation/hwmon/lm63
> index 31660bf..b6f0495 100644
> --- a/Documentation/hwmon/lm63
> +++ b/Documentation/hwmon/lm63
> @@ -7,6 +7,11 @@ Supported chips:
> Addresses scanned: I2C 0x4c
> Datasheet: Publicly available at the National Semiconductor website
> http://www.national.com/pf/LM/LM63.html
> + * National Semiconductor LM64
> + Prefix: 'lm64'
> + Addresses scanned: I2C 0x18 and 0x4e
> + Datasheet: Publicly available at the National Semiconductor website
> + http://www.national.com/pf/LM/LM64.html
>
> Author: Jean Delvare <khali@xxxxxxxxxxxx>
>
> @@ -55,3 +60,5 @@ The lm63 driver will not update its values more frequently than every
> second; reading them more often will do no harm, but will return 'old'
> values.
>
> +The lm64 is effectively an lm63 with gpio lines. The driver does not
> +support these gpio lines at present.

Please use "LM64" and "LM63" when referring to the devices themselves.
And spell GPIO with capitals, too. Same applies to the patch
description, BTW.

> \ No newline at end of file

Please add the missing newline.

> diff --git a/drivers/hwmon/lm63.c b/drivers/hwmon/lm63.c
> index bf81aff..01b23ef 100644
> --- a/drivers/hwmon/lm63.c
> +++ b/drivers/hwmon/lm63.c
> @@ -53,7 +53,7 @@
> * Address is fully defined internally and cannot be changed.
> */
>
> -static const unsigned short normal_i2c[] = { 0x4c, I2C_CLIENT_END };
> +static const unsigned short normal_i2c[] = { 0x18, 0x4c, 0x4e, I2C_CLIENT_END };
>
> /*
> * The LM63 registers
> @@ -131,12 +131,15 @@ static struct lm63_data *lm63_update_device(struct device *dev);
> static int lm63_detect(struct i2c_client *client, struct i2c_board_info *info);
> static void lm63_init_client(struct i2c_client *client);
>
> +enum chips { lm63, lm64 };
> +
> /*
> * Driver data (common to all clients)
> */
>
> static const struct i2c_device_id lm63_id[] = {
> - { "lm63", 0 },
> + { "lm63", lm63 },
> + { "lm64", lm64 },
> { }
> };
> MODULE_DEVICE_TABLE(i2c, lm63_id);
> @@ -177,6 +180,7 @@ struct lm63_data {
> 2: remote high limit */
> u8 temp2_crit_hyst;
> u8 alarms;
> + int kind;
> };
>
> /*
> @@ -422,6 +426,7 @@ static int lm63_detect(struct i2c_client *new_client,
> struct i2c_adapter *adapter = new_client->adapter;
> u8 man_id, chip_id, reg_config1, reg_config2;
> u8 reg_alert_status, reg_alert_mask;
> + int address = new_client->addr;
>
> if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
> return -ENODEV;
> @@ -439,7 +444,6 @@ static int lm63_detect(struct i2c_client *new_client,
> LM63_REG_ALERT_MASK);
>
> if (man_id != 0x01 /* National Semiconductor */
> - || chip_id != 0x41 /* LM63 */
> || (reg_config1 & 0x18) != 0x00
> || (reg_config2 & 0xF8) != 0x00
> || (reg_alert_status & 0x20) != 0x00
> @@ -450,7 +454,12 @@ static int lm63_detect(struct i2c_client *new_client,
> return -ENODEV;
> }
>
> - strlcpy(info->type, "lm63", I2C_NAME_SIZE);
> + if (chip_id == 0x41 && address == 0x4c)
> + strlcpy(info->type, "lm63", I2C_NAME_SIZE);
> + else if (chip_id == 0x51 && (address == 0x18 || address == 0x4e))
> + strlcpy(info->type, "lm64", I2C_NAME_SIZE);
> + else
> + return -ENODEV;
>
> return 0;
> }
> @@ -471,6 +480,8 @@ static int lm63_probe(struct i2c_client *new_client,
> data->valid = 0;
> mutex_init(&data->update_lock);
>
> + data->kind = id->driver_data;

You don't use this value anywhere, so why bother storing it?

> +
> /* Initialize the LM63 chip */
> lm63_init_client(new_client);
>

Your patch is missing an update to drivers/hwmon/Kconfig.

Please submit an updated patch and I'll apply it.

--
Jean Delvare
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/