mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 14:33:24 -04:00
hwmon: (core) Use const APIs for the dynamically allocated sysfs attributes
The non-const sysfs attribute APIs are going to go away at some point. Switch to the const variants to prepare for that. Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Link: https://lore.kernel.org/r/20260806-sysfs-const-attr-hwmon-v2-2-22fee8b85509@weissschuh.net Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
committed by
Guenter Roeck
parent
dafe7f1ec9
commit
7df38f8d4c
@@ -57,8 +57,8 @@ struct hwmon_device_attribute {
|
||||
};
|
||||
|
||||
#define to_hwmon_attr(d) \
|
||||
container_of(d, struct hwmon_device_attribute, dev_attr)
|
||||
#define to_dev_attr(a) container_of(a, struct device_attribute, attr)
|
||||
container_of_const(d, struct hwmon_device_attribute, dev_attr)
|
||||
#define to_dev_attr(a) container_of_const(a, struct device_attribute, attr)
|
||||
|
||||
/*
|
||||
* Thermal zone information
|
||||
@@ -115,13 +115,13 @@ static const struct attribute_group *hwmon_dev_attr_groups[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static void hwmon_free_attrs(struct attribute **attrs)
|
||||
static void hwmon_free_attrs(const struct attribute *const *attrs)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; attrs[i]; i++) {
|
||||
struct device_attribute *dattr = to_dev_attr(attrs[i]);
|
||||
struct hwmon_device_attribute *hattr = to_hwmon_attr(dattr);
|
||||
const struct device_attribute *dattr = to_dev_attr(attrs[i]);
|
||||
const struct hwmon_device_attribute *hattr = to_hwmon_attr(dattr);
|
||||
|
||||
kfree(hattr);
|
||||
}
|
||||
@@ -132,8 +132,8 @@ static void hwmon_dev_release(struct device *dev)
|
||||
{
|
||||
struct hwmon_device *hwdev = to_hwmon_device(dev);
|
||||
|
||||
if (hwdev->group.attrs)
|
||||
hwmon_free_attrs(hwdev->group.attrs);
|
||||
if (hwdev->group.attrs_const)
|
||||
hwmon_free_attrs(hwdev->group.attrs_const);
|
||||
kfree(hwdev->groups);
|
||||
kfree(hwdev->label);
|
||||
kfree(hwdev);
|
||||
@@ -425,9 +425,9 @@ static int hwmon_pec_register(struct device *hdev)
|
||||
/* sysfs attribute management */
|
||||
|
||||
static ssize_t hwmon_attr_show(struct device *dev,
|
||||
struct device_attribute *devattr, char *buf)
|
||||
const struct device_attribute *devattr, char *buf)
|
||||
{
|
||||
struct hwmon_device_attribute *hattr = to_hwmon_attr(devattr);
|
||||
const struct hwmon_device_attribute *hattr = to_hwmon_attr(devattr);
|
||||
struct hwmon_device *hwdev = to_hwmon_device(dev);
|
||||
s64 val64;
|
||||
long val;
|
||||
@@ -450,10 +450,10 @@ static ssize_t hwmon_attr_show(struct device *dev,
|
||||
}
|
||||
|
||||
static ssize_t hwmon_attr_show_string(struct device *dev,
|
||||
struct device_attribute *devattr,
|
||||
const struct device_attribute *devattr,
|
||||
char *buf)
|
||||
{
|
||||
struct hwmon_device_attribute *hattr = to_hwmon_attr(devattr);
|
||||
const struct hwmon_device_attribute *hattr = to_hwmon_attr(devattr);
|
||||
struct hwmon_device *hwdev = to_hwmon_device(dev);
|
||||
enum hwmon_sensor_types type = hattr->type;
|
||||
const char *s;
|
||||
@@ -473,10 +473,10 @@ static ssize_t hwmon_attr_show_string(struct device *dev,
|
||||
}
|
||||
|
||||
static ssize_t hwmon_attr_store(struct device *dev,
|
||||
struct device_attribute *devattr,
|
||||
const struct device_attribute *devattr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct hwmon_device_attribute *hattr = to_hwmon_attr(devattr);
|
||||
const struct hwmon_device_attribute *hattr = to_hwmon_attr(devattr);
|
||||
struct hwmon_device *hwdev = to_hwmon_device(dev);
|
||||
long val;
|
||||
int ret;
|
||||
@@ -510,12 +510,12 @@ static bool is_string_attr(enum hwmon_sensor_types type, u32 attr)
|
||||
(type == hwmon_fan && attr == hwmon_fan_label);
|
||||
}
|
||||
|
||||
static struct attribute *hwmon_genattr(const void *drvdata,
|
||||
enum hwmon_sensor_types type,
|
||||
u32 attr,
|
||||
int index,
|
||||
const char *template,
|
||||
const struct hwmon_ops *ops)
|
||||
static const struct attribute *hwmon_genattr(const void *drvdata,
|
||||
enum hwmon_sensor_types type,
|
||||
u32 attr,
|
||||
int index,
|
||||
const char *template,
|
||||
const struct hwmon_ops *ops)
|
||||
{
|
||||
struct hwmon_device_attribute *hattr;
|
||||
struct device_attribute *dattr;
|
||||
@@ -552,8 +552,8 @@ static struct attribute *hwmon_genattr(const void *drvdata,
|
||||
hattr->ops = ops;
|
||||
|
||||
dattr = &hattr->dev_attr;
|
||||
dattr->show = is_string ? hwmon_attr_show_string : hwmon_attr_show;
|
||||
dattr->store = hwmon_attr_store;
|
||||
dattr->show_const = is_string ? hwmon_attr_show_string : hwmon_attr_show;
|
||||
dattr->store_const = hwmon_attr_store;
|
||||
|
||||
a = &dattr->attr;
|
||||
sysfs_attr_init(a);
|
||||
@@ -831,7 +831,7 @@ static int hwmon_num_channel_attrs(const struct hwmon_channel_info *info)
|
||||
}
|
||||
|
||||
static int hwmon_genattrs(const void *drvdata,
|
||||
struct attribute **attrs,
|
||||
const struct attribute **attrs,
|
||||
const struct hwmon_ops *ops,
|
||||
const struct hwmon_channel_info *info)
|
||||
{
|
||||
@@ -850,7 +850,7 @@ static int hwmon_genattrs(const void *drvdata,
|
||||
u32 attr;
|
||||
|
||||
while (attr_mask) {
|
||||
struct attribute *a;
|
||||
const struct attribute *a;
|
||||
|
||||
attr = __ffs(attr_mask);
|
||||
attr_mask &= ~BIT(attr);
|
||||
@@ -869,11 +869,11 @@ static int hwmon_genattrs(const void *drvdata,
|
||||
return aindex;
|
||||
}
|
||||
|
||||
static struct attribute **
|
||||
static const struct attribute **
|
||||
__hwmon_create_attrs(const void *drvdata, const struct hwmon_chip_info *chip)
|
||||
{
|
||||
int ret, i, aindex = 0, nattrs = 0;
|
||||
struct attribute **attrs;
|
||||
const struct attribute **attrs;
|
||||
|
||||
for (i = 0; chip->info[i]; i++)
|
||||
nattrs += hwmon_num_channel_attrs(chip->info[i]);
|
||||
@@ -928,7 +928,7 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
|
||||
hdev = &hwdev->dev;
|
||||
|
||||
if (chip) {
|
||||
struct attribute **attrs;
|
||||
const struct attribute **attrs;
|
||||
int ngroups = 2; /* terminating NULL plus &hwdev->groups */
|
||||
|
||||
if (groups)
|
||||
@@ -947,7 +947,7 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
|
||||
goto free_hwmon;
|
||||
}
|
||||
|
||||
hwdev->group.attrs = attrs;
|
||||
hwdev->group.attrs_const = attrs;
|
||||
ngroups = 0;
|
||||
hwdev->groups[ngroups++] = &hwdev->group;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user