Re: [PATCH v2 2/2] hwmon: (w83l786ng) Convert to devm_hwmon_device_register_with_groups

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jun 25, 2014 at 09:39:51AM +0800, Axel Lin wrote:
> 
> Use ATTRIBUTE_GROUPS macro and devm_hwmon_device_register_with_groups() to
> simplify the code a bit.
> 
> Signed-off-by: Axel Lin <axel.lin@xxxxxxxxxx>

Acked-by: Kevin Lo <kevlo@xxxxxxxxx>

> ---
>  drivers/hwmon/w83l786ng.c | 86 ++++++++++++++++-------------------------------
>  1 file changed, 29 insertions(+), 57 deletions(-)
> 
> diff --git a/drivers/hwmon/w83l786ng.c b/drivers/hwmon/w83l786ng.c
> index 6caf33a..3302996 100644
> --- a/drivers/hwmon/w83l786ng.c
> +++ b/drivers/hwmon/w83l786ng.c
> @@ -124,7 +124,7 @@ DIV_TO_REG(long val)
>  }
>  
>  struct w83l786ng_data {
> -	struct device *hwmon_dev;
> +	struct i2c_client *client;
>  	struct mutex update_lock;
>  	char valid;			/* !=0 if following fields are valid */
>  	unsigned long last_updated;	/* In jiffies */
> @@ -162,8 +162,8 @@ w83l786ng_write_value(struct i2c_client *client, u8 reg, u8 value)
>  
>  static struct w83l786ng_data *w83l786ng_update_device(struct device *dev)
>  {
> -	struct i2c_client *client = to_i2c_client(dev);
> -	struct w83l786ng_data *data = i2c_get_clientdata(client);
> +	struct w83l786ng_data *data = dev_get_drvdata(dev);
> +	struct i2c_client *client = data->client;
>  	int i, j;
>  	u8 reg_tmp, pwmcfg;
>  
> @@ -252,8 +252,8 @@ store_in_##reg(struct device *dev, struct device_attribute *attr, \
>  	       const char *buf, size_t count) \
>  { \
>  	int nr = to_sensor_dev_attr(attr)->index; \
> -	struct i2c_client *client = to_i2c_client(dev); \
> -	struct w83l786ng_data *data = i2c_get_clientdata(client); \
> +	struct w83l786ng_data *data = dev_get_drvdata(dev); \
> +	struct i2c_client *client = data->client; \
>  	unsigned long val; \
>  	int err = kstrtoul(buf, 10, &val); \
>  	if (err) \
> @@ -305,8 +305,8 @@ store_fan_min(struct device *dev, struct device_attribute *attr,
>  	      const char *buf, size_t count)
>  {
>  	int nr = to_sensor_dev_attr(attr)->index;
> -	struct i2c_client *client = to_i2c_client(dev);
> -	struct w83l786ng_data *data = i2c_get_clientdata(client);
> +	struct w83l786ng_data *data = dev_get_drvdata(dev);
> +	struct i2c_client *client = data->client;
>  	unsigned long val;
>  	int err;
>  
> @@ -343,8 +343,8 @@ store_fan_div(struct device *dev, struct device_attribute *attr,
>  	      const char *buf, size_t count)
>  {
>  	int nr = to_sensor_dev_attr(attr)->index;
> -	struct i2c_client *client = to_i2c_client(dev);
> -	struct w83l786ng_data *data = i2c_get_clientdata(client);
> +	struct w83l786ng_data *data = dev_get_drvdata(dev);
> +	struct i2c_client *client = data->client;
>  
>  	unsigned long min;
>  	u8 tmp_fan_div;
> @@ -434,8 +434,8 @@ store_temp(struct device *dev, struct device_attribute *attr,
>  	    to_sensor_dev_attr_2(attr);
>  	int nr = sensor_attr->nr;
>  	int index = sensor_attr->index;
> -	struct i2c_client *client = to_i2c_client(dev);
> -	struct w83l786ng_data *data = i2c_get_clientdata(client);
> +	struct w83l786ng_data *data = dev_get_drvdata(dev);
> +	struct i2c_client *client = data->client;
>  	long val;
>  	int err;
>  
> @@ -489,8 +489,8 @@ store_pwm_mode(struct device *dev, struct device_attribute *attr,
>  	       const char *buf, size_t count)
>  {
>  	int nr = to_sensor_dev_attr(attr)->index;
> -	struct i2c_client *client = to_i2c_client(dev);
> -	struct w83l786ng_data *data = i2c_get_clientdata(client);
> +	struct w83l786ng_data *data = dev_get_drvdata(dev);
> +	struct i2c_client *client = data->client;
>  	u8 reg;
>  	unsigned long val;
>  	int err;
> @@ -517,8 +517,8 @@ store_pwm(struct device *dev, struct device_attribute *attr,
>  	  const char *buf, size_t count)
>  {
>  	int nr = to_sensor_dev_attr(attr)->index;
> -	struct i2c_client *client = to_i2c_client(dev);
> -	struct w83l786ng_data *data = i2c_get_clientdata(client);
> +	struct w83l786ng_data *data = dev_get_drvdata(dev);
> +	struct i2c_client *client = data->client;
>  	unsigned long val;
>  	int err;
>  
> @@ -541,8 +541,8 @@ store_pwm_enable(struct device *dev, struct device_attribute *attr,
>  		 const char *buf, size_t count)
>  {
>  	int nr = to_sensor_dev_attr(attr)->index;
> -	struct i2c_client *client = to_i2c_client(dev);
> -	struct w83l786ng_data *data = i2c_get_clientdata(client);
> +	struct w83l786ng_data *data = dev_get_drvdata(dev);
> +	struct i2c_client *client = data->client;
>  	u8 reg;
>  	unsigned long val;
>  	int err;
> @@ -597,8 +597,8 @@ store_tolerance(struct device *dev, struct device_attribute *attr,
>  		const char *buf, size_t count)
>  {
>  	int nr = to_sensor_dev_attr(attr)->index;
> -	struct i2c_client *client = to_i2c_client(dev);
> -	struct w83l786ng_data *data = i2c_get_clientdata(client);
> +	struct w83l786ng_data *data = dev_get_drvdata(dev);
> +	struct i2c_client *client = data->client;
>  	u8 tol_tmp, tol_mask;
>  	unsigned long val;
>  	int err;
> @@ -653,7 +653,7 @@ static struct sensor_device_attribute sda_tolerance[] = {
>  #define TOLERANCE_UNIT_ATTRS(X)	\
>  	&sda_tolerance[X].dev_attr.attr
>  
> -static struct attribute *w83l786ng_attributes[] = {
> +static struct attribute *w83l786ng_attrs[] = {
>  	IN_UNIT_ATTRS(0),
>  	IN_UNIT_ATTRS(1),
>  	IN_UNIT_ATTRS(2),
> @@ -668,9 +668,7 @@ static struct attribute *w83l786ng_attributes[] = {
>  	NULL
>  };
>  
> -static const struct attribute_group w83l786ng_group = {
> -	.attrs = w83l786ng_attributes,
> -};
> +ATTRIBUTE_GROUPS(w83l786ng);
>  
>  static int
>  w83l786ng_detect(struct i2c_client *client, struct i2c_board_info *info)
> @@ -725,15 +723,15 @@ w83l786ng_probe(struct i2c_client *client, const struct i2c_device_id *id)
>  {
>  	struct device *dev = &client->dev;
>  	struct w83l786ng_data *data;
> -	int i, err = 0;
> +	struct device *hwmon_dev;
> +	int i;
>  	u8 reg_tmp;
>  
> -	data = devm_kzalloc(&client->dev, sizeof(struct w83l786ng_data),
> -			    GFP_KERNEL);
> +	data = devm_kzalloc(dev, sizeof(struct w83l786ng_data), GFP_KERNEL);
>  	if (!data)
>  		return -ENOMEM;
>  
> -	i2c_set_clientdata(client, data);
> +	data->client = client;
>  	mutex_init(&data->update_lock);
>  
>  	/* Initialize the chip */
> @@ -750,35 +748,10 @@ w83l786ng_probe(struct i2c_client *client, const struct i2c_device_id *id)
>  	data->fan_div[0] = reg_tmp & 0x07;
>  	data->fan_div[1] = (reg_tmp >> 4) & 0x07;
>  
> -	/* Register sysfs hooks */
> -	err = sysfs_create_group(&client->dev.kobj, &w83l786ng_group);
> -	if (err)
> -		goto exit_remove;
> -
> -	data->hwmon_dev = hwmon_device_register(dev);
> -	if (IS_ERR(data->hwmon_dev)) {
> -		err = PTR_ERR(data->hwmon_dev);
> -		goto exit_remove;
> -	}
> -
> -	return 0;
> -
> -	/* Unregister sysfs hooks */
> -
> -exit_remove:
> -	sysfs_remove_group(&client->dev.kobj, &w83l786ng_group);
> -	return err;
> -}
> -
> -static int
> -w83l786ng_remove(struct i2c_client *client)
> -{
> -	struct w83l786ng_data *data = i2c_get_clientdata(client);
> -
> -	hwmon_device_unregister(data->hwmon_dev);
> -	sysfs_remove_group(&client->dev.kobj, &w83l786ng_group);
> -
> -	return 0;
> +	hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
> +							   data,
> +							   w83l786ng_groups);
> +	return PTR_ERR_OR_ZERO(hwmon_dev);
>  }
>  
>  static const struct i2c_device_id w83l786ng_id[] = {
> @@ -793,7 +766,6 @@ static struct i2c_driver w83l786ng_driver = {
>  		   .name = "w83l786ng",
>  	},
>  	.probe		= w83l786ng_probe,
> -	.remove		= w83l786ng_remove,
>  	.id_table	= w83l786ng_id,
>  	.detect		= w83l786ng_detect,
>  	.address_list	= normal_i2c,
> -- 
> 1.8.3.2
> 
> 
> 
> 

_______________________________________________
lm-sensors mailing list
lm-sensors@xxxxxxxxxxxxxx
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors




[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux