Commit 2c3d0c9f authored by Phil Reid's avatar Phil Reid Committed by Jonathan Cameron

iio: core: Add optional symbolic label to device attributes

If a label is defined in the device tree for this device add that
to the device specific attributes. This is useful for userspace to
be able to identify an individual device when multiple identical
chips are present in the system.
Tested-by: default avatarMichal Simek <michal.simek@xilinx.com>
Signed-off-by: default avatarPhil Reid <preid@electromag.com.au>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent dc7fe512
...@@ -1238,6 +1238,16 @@ static ssize_t iio_show_dev_name(struct device *dev, ...@@ -1238,6 +1238,16 @@ static ssize_t iio_show_dev_name(struct device *dev,
static DEVICE_ATTR(name, S_IRUGO, iio_show_dev_name, NULL); static DEVICE_ATTR(name, S_IRUGO, iio_show_dev_name, NULL);
static ssize_t iio_show_dev_label(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
return snprintf(buf, PAGE_SIZE, "%s\n", indio_dev->label);
}
static DEVICE_ATTR(label, S_IRUGO, iio_show_dev_label, NULL);
static ssize_t iio_show_timestamp_clock(struct device *dev, static ssize_t iio_show_timestamp_clock(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
char *buf) char *buf)
...@@ -1354,6 +1364,8 @@ static int iio_device_register_sysfs(struct iio_dev *indio_dev) ...@@ -1354,6 +1364,8 @@ static int iio_device_register_sysfs(struct iio_dev *indio_dev)
if (indio_dev->name) if (indio_dev->name)
attrcount++; attrcount++;
if (indio_dev->label)
attrcount++;
if (clk) if (clk)
attrcount++; attrcount++;
...@@ -1376,6 +1388,8 @@ static int iio_device_register_sysfs(struct iio_dev *indio_dev) ...@@ -1376,6 +1388,8 @@ static int iio_device_register_sysfs(struct iio_dev *indio_dev)
indio_dev->chan_attr_group.attrs[attrn++] = &p->dev_attr.attr; indio_dev->chan_attr_group.attrs[attrn++] = &p->dev_attr.attr;
if (indio_dev->name) if (indio_dev->name)
indio_dev->chan_attr_group.attrs[attrn++] = &dev_attr_name.attr; indio_dev->chan_attr_group.attrs[attrn++] = &dev_attr_name.attr;
if (indio_dev->label)
indio_dev->chan_attr_group.attrs[attrn++] = &dev_attr_label.attr;
if (clk) if (clk)
indio_dev->chan_attr_group.attrs[attrn++] = clk; indio_dev->chan_attr_group.attrs[attrn++] = clk;
...@@ -1647,6 +1661,9 @@ int __iio_device_register(struct iio_dev *indio_dev, struct module *this_mod) ...@@ -1647,6 +1661,9 @@ int __iio_device_register(struct iio_dev *indio_dev, struct module *this_mod)
if (!indio_dev->dev.of_node && indio_dev->dev.parent) if (!indio_dev->dev.of_node && indio_dev->dev.parent)
indio_dev->dev.of_node = indio_dev->dev.parent->of_node; indio_dev->dev.of_node = indio_dev->dev.parent->of_node;
indio_dev->label = of_get_property(indio_dev->dev.of_node, "label",
NULL);
ret = iio_check_unique_scan_index(indio_dev); ret = iio_check_unique_scan_index(indio_dev);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
...@@ -510,6 +510,7 @@ struct iio_buffer_setup_ops { ...@@ -510,6 +510,7 @@ struct iio_buffer_setup_ops {
* attributes * attributes
* @chan_attr_group: [INTERN] group for all attrs in base directory * @chan_attr_group: [INTERN] group for all attrs in base directory
* @name: [DRIVER] name of the device. * @name: [DRIVER] name of the device.
* @label: [DRIVER] unique name to identify which device this is
* @info: [DRIVER] callbacks and constant info from driver * @info: [DRIVER] callbacks and constant info from driver
* @clock_id: [INTERN] timestamping clock posix identifier * @clock_id: [INTERN] timestamping clock posix identifier
* @info_exist_lock: [INTERN] lock to prevent use during removal * @info_exist_lock: [INTERN] lock to prevent use during removal
...@@ -553,6 +554,7 @@ struct iio_dev { ...@@ -553,6 +554,7 @@ struct iio_dev {
struct list_head channel_attr_list; struct list_head channel_attr_list;
struct attribute_group chan_attr_group; struct attribute_group chan_attr_group;
const char *name; const char *name;
const char *label;
const struct iio_info *info; const struct iio_info *info;
clockid_t clock_id; clockid_t clock_id;
struct mutex info_exist_lock; struct mutex info_exist_lock;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment