Switch to the __DEVICE_ATTR() macro which can handle callbacks taking both const and non-const attribute structure arguments. Allow the step-wise migration of the drivers. Also use container_of_const() over container_of() to avoid casting away the constness accidentally.
Unified · Split
| @@ -341,7 +341,7 @@ static int hwmon_match_device(struct device *dev, const void *data) · 340 unmodified lines | ||
| 341 | 341 | return dev->class == &hwmon_class; |
| 342 | 342 | } |
| 343 | 343 | |
| 344 | −static ssize_t pec_show(struct device *dev, struct device_attribute *dummy, | |
| 344 | +static ssize_t pec_show(struct device *dev, const struct device_attribute *dummy, | |
| 345 | 345 | char *buf) |
| 346 | 346 | { |
| 347 | 347 | struct i2c_client *client = to_i2c_client(dev); |
| @@ -349,7 +349,7 @@ static ssize_t pec_show(struct device *dev, struct device_attribute *dummy, · 1 unmodified line | ||
| 349 | 349 | return sysfs_emit(buf, "%d\n", !!(client->flags & I2C_CLIENT_PEC)); |
| 350 | 350 | } |
| 351 | 351 | |
| 352 | −static ssize_t pec_store(struct device *dev, struct device_attribute *devattr, | |
| 352 | +static ssize_t pec_store(struct device *dev, const struct device_attribute *devattr, | |
| 353 | 353 | const char *buf, size_t count) |
| 354 | 354 | { |
| 355 | 355 | struct i2c_client *client = to_i2c_client(dev); |
| @@ -390,7 +390,7 @@ put: · 34 unmodified lines | ||
| 390 | 390 | return err; |
| 391 | 391 | } |
| 392 | 392 | |
| 393 | −static DEVICE_ATTR_RW(pec); | |
| 393 | +static const DEVICE_ATTR_RW(pec); | |
| 394 | 394 | |
| 395 | 395 | static void hwmon_remove_pec(void *dev) |
| 396 | 396 | { |
| @@ -15,10 +15,10 @@ struct sensor_device_attribute{ · 14 unmodified lines | ||
| 15 | 15 | int index; |
| 16 | 16 | }; |
| 17 | 17 | #define to_sensor_dev_attr(_dev_attr) \ |
| 18 | − container_of(_dev_attr, struct sensor_device_attribute, dev_attr) | |
| 18 | + container_of_const(_dev_attr, struct sensor_device_attribute, dev_attr) | |
| 19 | 19 | |
| 20 | −#define SENSOR_ATTR(_name, _mode, _show, _store, _index) \ | |
| 21 | − { .dev_attr = __ATTR(_name, _mode, _show, _store), \ | |
| 20 | +#define SENSOR_ATTR(_name, _mode, _show, _store, _index) \ | |
| 21 | + { .dev_attr = __DEVICE_ATTR(_name, _mode, _show, _store), \ | |
| 22 | 22 | .index = _index } |
| 23 | 23 | |
| 24 | 24 | #define SENSOR_ATTR_RO(_name, _func, _index) \ |
| @@ -49,11 +49,11 @@ struct sensor_device_attribute_2 { · 24 unmodified lines | ||
| 49 | 49 | u8 nr; |
| 50 | 50 | }; |
| 51 | 51 | #define to_sensor_dev_attr_2(_dev_attr) \ |
| 52 | − container_of(_dev_attr, struct sensor_device_attribute_2, dev_attr) | |
| 52 | + container_of_const(_dev_attr, struct sensor_device_attribute_2, dev_attr) | |
| 53 | 53 | |
| 54 | −#define SENSOR_ATTR_2(_name, _mode, _show, _store, _nr, _index) \ | |
| 55 | − { .dev_attr = __ATTR(_name, _mode, _show, _store), \ | |
| 56 | − .index = _index, \ | |
| 54 | +#define SENSOR_ATTR_2(_name, _mode, _show, _store, _nr, _index) \ | |
| 55 | + { .dev_attr = __DEVICE_ATTR(_name, _mode, _show, _store), \ | |
| 56 | + .index = _index, \ | |
| 57 | 57 | .nr = _nr } |
| 58 | 58 | |
| 59 | 59 | #define SENSOR_ATTR_2_RO(_name, _func, _nr, _index) \ |