aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@ingics.com>2014-07-16 11:10:46 -0400
committerGuenter Roeck <linux@roeck-us.net>2014-08-04 10:01:39 -0400
commit573bfe67ca1057febc6a0ccd8caff9a9fdb01994 (patch)
treef1444b948775b9d4205c77c515fb674449c80d67
parenta2cc242823399bcb64dcd487f8b51c061844165c (diff)
hwmon: (adt7462) Convert to devm_hwmon_device_register_with_groups
Use ATTRIBUTE_GROUPS macro and devm_hwmon_device_register_with_groups() to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-rw-r--r--drivers/hwmon/adt7462.c106
1 files changed, 42 insertions, 64 deletions
diff --git a/drivers/hwmon/adt7462.c b/drivers/hwmon/adt7462.c
index c4a1784e3f2b..5929e126da63 100644
--- a/drivers/hwmon/adt7462.c
+++ b/drivers/hwmon/adt7462.c
@@ -202,8 +202,7 @@ static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END };
202 (((value) & prefix##_MASK) >> prefix##_SHIFT) 202 (((value) & prefix##_MASK) >> prefix##_SHIFT)
203 203
204struct adt7462_data { 204struct adt7462_data {
205 struct device *hwmon_dev; 205 struct i2c_client *client;
206 struct attribute_group attrs;
207 struct mutex lock; 206 struct mutex lock;
208 char sensors_valid; 207 char sensors_valid;
209 char limits_valid; 208 char limits_valid;
@@ -681,8 +680,8 @@ static int find_trange_value(int trange)
681 680
682static struct adt7462_data *adt7462_update_device(struct device *dev) 681static struct adt7462_data *adt7462_update_device(struct device *dev)
683{ 682{
684 struct i2c_client *client = to_i2c_client(dev); 683 struct adt7462_data *data = dev_get_drvdata(dev);
685 struct adt7462_data *data = i2c_get_clientdata(client); 684 struct i2c_client *client = data->client;
686 unsigned long local_jiffies = jiffies; 685 unsigned long local_jiffies = jiffies;
687 int i; 686 int i;
688 687
@@ -804,8 +803,8 @@ static ssize_t set_temp_min(struct device *dev,
804 size_t count) 803 size_t count)
805{ 804{
806 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 805 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
807 struct i2c_client *client = to_i2c_client(dev); 806 struct adt7462_data *data = dev_get_drvdata(dev);
808 struct adt7462_data *data = i2c_get_clientdata(client); 807 struct i2c_client *client = data->client;
809 long temp; 808 long temp;
810 809
811 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index)) 810 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
@@ -842,8 +841,8 @@ static ssize_t set_temp_max(struct device *dev,
842 size_t count) 841 size_t count)
843{ 842{
844 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 843 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
845 struct i2c_client *client = to_i2c_client(dev); 844 struct adt7462_data *data = dev_get_drvdata(dev);
846 struct adt7462_data *data = i2c_get_clientdata(client); 845 struct i2c_client *client = data->client;
847 long temp; 846 long temp;
848 847
849 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index)) 848 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
@@ -905,8 +904,8 @@ static ssize_t set_volt_max(struct device *dev,
905 size_t count) 904 size_t count)
906{ 905{
907 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 906 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
908 struct i2c_client *client = to_i2c_client(dev); 907 struct adt7462_data *data = dev_get_drvdata(dev);
909 struct adt7462_data *data = i2c_get_clientdata(client); 908 struct i2c_client *client = data->client;
910 int x = voltage_multiplier(data, attr->index); 909 int x = voltage_multiplier(data, attr->index);
911 long temp; 910 long temp;
912 911
@@ -947,8 +946,8 @@ static ssize_t set_volt_min(struct device *dev,
947 size_t count) 946 size_t count)
948{ 947{
949 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 948 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
950 struct i2c_client *client = to_i2c_client(dev); 949 struct adt7462_data *data = dev_get_drvdata(dev);
951 struct adt7462_data *data = i2c_get_clientdata(client); 950 struct i2c_client *client = data->client;
952 int x = voltage_multiplier(data, attr->index); 951 int x = voltage_multiplier(data, attr->index);
953 long temp; 952 long temp;
954 953
@@ -1037,8 +1036,8 @@ static ssize_t set_fan_min(struct device *dev,
1037 const char *buf, size_t count) 1036 const char *buf, size_t count)
1038{ 1037{
1039 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1038 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1040 struct i2c_client *client = to_i2c_client(dev); 1039 struct adt7462_data *data = dev_get_drvdata(dev);
1041 struct adt7462_data *data = i2c_get_clientdata(client); 1040 struct i2c_client *client = data->client;
1042 long temp; 1041 long temp;
1043 1042
1044 if (kstrtol(buf, 10, &temp) || !temp || 1043 if (kstrtol(buf, 10, &temp) || !temp ||
@@ -1085,8 +1084,8 @@ static ssize_t set_force_pwm_max(struct device *dev,
1085 const char *buf, 1084 const char *buf,
1086 size_t count) 1085 size_t count)
1087{ 1086{
1088 struct i2c_client *client = to_i2c_client(dev); 1087 struct adt7462_data *data = dev_get_drvdata(dev);
1089 struct adt7462_data *data = i2c_get_clientdata(client); 1088 struct i2c_client *client = data->client;
1090 long temp; 1089 long temp;
1091 u8 reg; 1090 u8 reg;
1092 1091
@@ -1118,8 +1117,8 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
1118 const char *buf, size_t count) 1117 const char *buf, size_t count)
1119{ 1118{
1120 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1119 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1121 struct i2c_client *client = to_i2c_client(dev); 1120 struct adt7462_data *data = dev_get_drvdata(dev);
1122 struct adt7462_data *data = i2c_get_clientdata(client); 1121 struct i2c_client *client = data->client;
1123 long temp; 1122 long temp;
1124 1123
1125 if (kstrtol(buf, 10, &temp)) 1124 if (kstrtol(buf, 10, &temp))
@@ -1148,8 +1147,8 @@ static ssize_t set_pwm_max(struct device *dev,
1148 const char *buf, 1147 const char *buf,
1149 size_t count) 1148 size_t count)
1150{ 1149{
1151 struct i2c_client *client = to_i2c_client(dev); 1150 struct adt7462_data *data = dev_get_drvdata(dev);
1152 struct adt7462_data *data = i2c_get_clientdata(client); 1151 struct i2c_client *client = data->client;
1153 long temp; 1152 long temp;
1154 1153
1155 if (kstrtol(buf, 10, &temp)) 1154 if (kstrtol(buf, 10, &temp))
@@ -1180,8 +1179,8 @@ static ssize_t set_pwm_min(struct device *dev,
1180 size_t count) 1179 size_t count)
1181{ 1180{
1182 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1181 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1183 struct i2c_client *client = to_i2c_client(dev); 1182 struct adt7462_data *data = dev_get_drvdata(dev);
1184 struct adt7462_data *data = i2c_get_clientdata(client); 1183 struct i2c_client *client = data->client;
1185 long temp; 1184 long temp;
1186 1185
1187 if (kstrtol(buf, 10, &temp)) 1186 if (kstrtol(buf, 10, &temp))
@@ -1214,8 +1213,8 @@ static ssize_t set_pwm_hyst(struct device *dev,
1214 size_t count) 1213 size_t count)
1215{ 1214{
1216 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1215 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1217 struct i2c_client *client = to_i2c_client(dev); 1216 struct adt7462_data *data = dev_get_drvdata(dev);
1218 struct adt7462_data *data = i2c_get_clientdata(client); 1217 struct i2c_client *client = data->client;
1219 long temp; 1218 long temp;
1220 1219
1221 if (kstrtol(buf, 10, &temp)) 1220 if (kstrtol(buf, 10, &temp))
@@ -1259,8 +1258,8 @@ static ssize_t set_pwm_tmax(struct device *dev,
1259{ 1258{
1260 int temp; 1259 int temp;
1261 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1260 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1262 struct i2c_client *client = to_i2c_client(dev); 1261 struct adt7462_data *data = dev_get_drvdata(dev);
1263 struct adt7462_data *data = i2c_get_clientdata(client); 1262 struct i2c_client *client = data->client;
1264 int tmin, trange_value; 1263 int tmin, trange_value;
1265 long trange; 1264 long trange;
1266 1265
@@ -1300,8 +1299,8 @@ static ssize_t set_pwm_tmin(struct device *dev,
1300 size_t count) 1299 size_t count)
1301{ 1300{
1302 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1301 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1303 struct i2c_client *client = to_i2c_client(dev); 1302 struct adt7462_data *data = dev_get_drvdata(dev);
1304 struct adt7462_data *data = i2c_get_clientdata(client); 1303 struct i2c_client *client = data->client;
1305 long temp; 1304 long temp;
1306 1305
1307 if (kstrtol(buf, 10, &temp)) 1306 if (kstrtol(buf, 10, &temp))
@@ -1357,8 +1356,8 @@ static ssize_t set_pwm_auto(struct device *dev,
1357 size_t count) 1356 size_t count)
1358{ 1357{
1359 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1358 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1360 struct i2c_client *client = to_i2c_client(dev); 1359 struct adt7462_data *data = dev_get_drvdata(dev);
1361 struct adt7462_data *data = i2c_get_clientdata(client); 1360 struct i2c_client *client = data->client;
1362 long temp; 1361 long temp;
1363 1362
1364 if (kstrtol(buf, 10, &temp)) 1363 if (kstrtol(buf, 10, &temp))
@@ -1416,8 +1415,8 @@ static ssize_t set_pwm_auto_temp(struct device *dev,
1416 size_t count) 1415 size_t count)
1417{ 1416{
1418 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1417 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1419 struct i2c_client *client = to_i2c_client(dev); 1418 struct adt7462_data *data = dev_get_drvdata(dev);
1420 struct adt7462_data *data = i2c_get_clientdata(client); 1419 struct i2c_client *client = data->client;
1421 long temp; 1420 long temp;
1422 1421
1423 if (kstrtol(buf, 10, &temp)) 1422 if (kstrtol(buf, 10, &temp))
@@ -1701,7 +1700,7 @@ static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1701static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO, 1700static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1702 show_pwm_auto_temp, set_pwm_auto_temp, 3); 1701 show_pwm_auto_temp, set_pwm_auto_temp, 3);
1703 1702
1704static struct attribute *adt7462_attr[] = { 1703static struct attribute *adt7462_attrs[] = {
1705 &sensor_dev_attr_temp1_max.dev_attr.attr, 1704 &sensor_dev_attr_temp1_max.dev_attr.attr,
1706 &sensor_dev_attr_temp2_max.dev_attr.attr, 1705 &sensor_dev_attr_temp2_max.dev_attr.attr,
1707 &sensor_dev_attr_temp3_max.dev_attr.attr, 1706 &sensor_dev_attr_temp3_max.dev_attr.attr,
@@ -1872,6 +1871,8 @@ static struct attribute *adt7462_attr[] = {
1872 NULL 1871 NULL
1873}; 1872};
1874 1873
1874ATTRIBUTE_GROUPS(adt7462);
1875
1875/* Return 0 if detection is successful, -ENODEV otherwise */ 1876/* Return 0 if detection is successful, -ENODEV otherwise */
1876static int adt7462_detect(struct i2c_client *client, 1877static int adt7462_detect(struct i2c_client *client,
1877 struct i2c_board_info *info) 1878 struct i2c_board_info *info)
@@ -1902,45 +1903,23 @@ static int adt7462_detect(struct i2c_client *client,
1902static int adt7462_probe(struct i2c_client *client, 1903static int adt7462_probe(struct i2c_client *client,
1903 const struct i2c_device_id *id) 1904 const struct i2c_device_id *id)
1904{ 1905{
1906 struct device *dev = &client->dev;
1905 struct adt7462_data *data; 1907 struct adt7462_data *data;
1906 int err; 1908 struct device *hwmon_dev;
1907 1909
1908 data = devm_kzalloc(&client->dev, sizeof(struct adt7462_data), 1910 data = devm_kzalloc(dev, sizeof(struct adt7462_data), GFP_KERNEL);
1909 GFP_KERNEL);
1910 if (!data) 1911 if (!data)
1911 return -ENOMEM; 1912 return -ENOMEM;
1912 1913
1913 i2c_set_clientdata(client, data); 1914 data->client = client;
1914 mutex_init(&data->lock); 1915 mutex_init(&data->lock);
1915 1916
1916 dev_info(&client->dev, "%s chip found\n", client->name); 1917 dev_info(&client->dev, "%s chip found\n", client->name);
1917 1918
1918 /* Register sysfs hooks */ 1919 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1919 data->attrs.attrs = adt7462_attr; 1920 data,
1920 err = sysfs_create_group(&client->dev.kobj, &data->attrs); 1921 adt7462_groups);
1921 if (err) 1922 return PTR_ERR_OR_ZERO(hwmon_dev);
1922 return err;
1923
1924 data->hwmon_dev = hwmon_device_register(&client->dev);
1925 if (IS_ERR(data->hwmon_dev)) {
1926 err = PTR_ERR(data->hwmon_dev);
1927 goto exit_remove;
1928 }
1929
1930 return 0;
1931
1932exit_remove:
1933 sysfs_remove_group(&client->dev.kobj, &data->attrs);
1934 return err;
1935}
1936
1937static int adt7462_remove(struct i2c_client *client)
1938{
1939 struct adt7462_data *data = i2c_get_clientdata(client);
1940
1941 hwmon_device_unregister(data->hwmon_dev);
1942 sysfs_remove_group(&client->dev.kobj, &data->attrs);
1943 return 0;
1944} 1923}
1945 1924
1946static const struct i2c_device_id adt7462_id[] = { 1925static const struct i2c_device_id adt7462_id[] = {
@@ -1955,7 +1934,6 @@ static struct i2c_driver adt7462_driver = {
1955 .name = "adt7462", 1934 .name = "adt7462",
1956 }, 1935 },
1957 .probe = adt7462_probe, 1936 .probe = adt7462_probe,
1958 .remove = adt7462_remove,
1959 .id_table = adt7462_id, 1937 .id_table = adt7462_id,
1960 .detect = adt7462_detect, 1938 .detect = adt7462_detect,
1961 .address_list = normal_i2c, 1939 .address_list = normal_i2c,