[lm-sensors] [PATCH] thmc50: add support for single temperature sensor

Jean Delvare khali at linux-fr.org
Thu Jun 19 11:09:41 CEST 2008


Hi Krzysztof,

On Wed, 18 Jun 2008 23:52:58 +0200, Krzysztof Helt wrote:
> From: Krzysztof Helt <krzysztof.h1 at wp.pl>
> 
> This patch add support for single temperature sensors.
> It is needed for upcoming support of the thmc51 sensor.
> 
> The previous version supported sensors with 2 or 3 
> temperatures.
> 
> Signed-off-by: Krzysztof Helt <krzysztof.h1 at wp.pl>
> ---
> 
> This patch requires the previous thmc50 patch (support for critical temperatures).
> 
> diff -urp linux-old/drivers/hwmon/thmc50.c linux-new/drivers/hwmon/thmc50.c
> --- linux-old/drivers/hwmon/thmc50.c	2008-06-11 22:28:55.205753933 +0200
> +++ linux-new/drivers/hwmon/thmc50.c	2008-06-11 22:29:44.973748412 +0200
> @@ -69,7 +69,7 @@ struct thmc50_data {
>  	struct mutex update_lock;
>  	enum chips type;
>  	unsigned long last_updated;	/* In jiffies */
> -	char has_temp3;		/* !=0 if it is ADM1022 in temp3 mode */
> +	char temp_num;		/* THMC51 = 1, ADM1022 = 2 or 3, otherwise 2 */
>  	char valid;		/* !=0 if following fields are valid */
>  
>  	/* Register values */
> @@ -328,18 +328,20 @@ static int thmc50_detect(struct i2c_adap
>  		goto exit_free;
>  	}
>  	data->type = kind;
> +	data->temp_num = 2;
>  
>  	if (kind == adm1022) {
>  		int id = i2c_adapter_id(client->adapter);
>  		int i;
>  
>  		type_name = "adm1022";
> -		data->has_temp3 = (config >> 7) & 1;	/* config MSB */
> +		if ((config >> 7) & 1) /* config MSB */
> +			data->temp_num = 3;
>  		for (i = 0; i + 1 < adm1022_temp3_num; i += 2)
>  			if (adm1022_temp3[i] == id &&
>  			    adm1022_temp3[i + 1] == address) {
>  				/* enable 2nd remote temp */
> -				data->has_temp3 = 1;
> +				data->temp_num = 3;
>  				break;
>  			}
>  	} else {
> @@ -363,7 +365,7 @@ static int thmc50_detect(struct i2c_adap
>  		goto exit_detach;
>  
>  	/* Register ADM1022 sysfs hooks */
> -	if (data->has_temp3)
> +	if (data->temp_num == 3)
>  		if ((err = sysfs_create_group(&client->dev.kobj,
>  					      &temp3_group)))
>  			goto exit_remove_sysfs_thmc50;
> @@ -378,7 +380,7 @@ static int thmc50_detect(struct i2c_adap
>  	return 0;
>  
>  exit_remove_sysfs:
> -	if (data->has_temp3)
> +	if (data->temp_num == 3)
>  		sysfs_remove_group(&client->dev.kobj, &temp3_group);
>  exit_remove_sysfs_thmc50:
>  	sysfs_remove_group(&client->dev.kobj, &thmc50_group);
> @@ -404,7 +406,7 @@ static int thmc50_detach_client(struct i
>  
>  	hwmon_device_unregister(data->hwmon_dev);
>  	sysfs_remove_group(&client->dev.kobj, &thmc50_group);
> -	if (data->has_temp3)
> +	if (data->temp_num == 3)
>  		sysfs_remove_group(&client->dev.kobj, &temp3_group);
>  
>  	if ((err = i2c_detach_client(client)))
> @@ -430,7 +432,7 @@ static void thmc50_init_client(struct i2
>  	}
>  	config = i2c_smbus_read_byte_data(client, THMC50_REG_CONF);
>  	config |= 0x1;	/* start the chip if it is in standby mode */
> -	if (data->has_temp3)
> +	if (data->temp_num == 3)
>  		config |= 0x80;		/* enable 2nd remote temp */
>  	i2c_smbus_write_byte_data(client, THMC50_REG_CONF, config);
>  }
> @@ -446,13 +448,12 @@ static struct thmc50_data *thmc50_update
>  	if (time_after(jiffies, data->last_updated + timeout)
>  	    || !data->valid) {
>  
> -		int temps = data->has_temp3 ? 3 : 2;
>  		int i;
>  		int prog = i2c_smbus_read_byte_data(client, THMC50_REG_CONF);
>  
>  		prog &= THMC50_REG_CONF_PROGRAMMED;
>  
> -		for (i = 0; i < temps; i++) {
> +		for (i = 0; i < data->temp_num; i++) {
>  			data->temp_input[i] = i2c_smbus_read_byte_data(client,
>  						THMC50_REG_TEMP[i]);
>  			data->temp_max[i] = i2c_smbus_read_byte_data(client,

Acked-by: Jean Delvare <khali at linux-fr.org>

However, this patch isn't needed without the patch that will add THMC51
support, so I suggest that we delay the merging of this first patch
until the second patch is also ready and reviewed.

-- 
Jean Delvare




More information about the lm-sensors mailing list