On 四, 2012-09-27 at 09:40 +0800, Lv Zheng wrote: > ACPI devices are glued with physical devices through _ADR object, ACPI > enumerated devices are identified with _UID object. Currently we can > observe _HID/_CID through sysfs interfaces (hid/modalias), but there's > no mean for us to check _ADR/_UID from user space. This patch fix this > gap for ACPI developers and users. > why do we need to get this information from userspace? thanks, rui > Signed-off-by: Lv Zheng <lv.zheng@xxxxxxxxx> > --- > drivers/acpi/scan.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c > index bb7fe47..df53190 100644 > --- a/drivers/acpi/scan.c > +++ b/drivers/acpi/scan.c > @@ -216,6 +216,22 @@ acpi_device_hid_show(struct device *dev, struct device_attribute *attr, char *bu > static DEVICE_ATTR(hid, 0444, acpi_device_hid_show, NULL); > > static ssize_t > +acpi_device_uid_show(struct device *dev, struct device_attribute *attr, char *buf) { > + struct acpi_device *acpi_dev = to_acpi_device(dev); > + > + return sprintf(buf, "%s\n", acpi_dev->pnp.unique_id); > +} > +static DEVICE_ATTR(uid, 0444, acpi_device_uid_show, NULL); > + > +static ssize_t > +acpi_device_adr_show(struct device *dev, struct device_attribute *attr, char *buf) { > + struct acpi_device *acpi_dev = to_acpi_device(dev); > + > + return sprintf(buf, "0x%08x\n", (unsigned int)(acpi_dev->pnp.bus_address)); > +} > +static DEVICE_ATTR(adr, 0444, acpi_device_adr_show, NULL); > + > +static ssize_t > acpi_device_path_show(struct device *dev, struct device_attribute *attr, char *buf) { > struct acpi_device *acpi_dev = to_acpi_device(dev); > struct acpi_buffer path = {ACPI_ALLOCATE_BUFFER, NULL}; > @@ -257,6 +273,11 @@ static int acpi_device_setup_files(struct acpi_device *dev) > goto end; > } > > + if (dev->flags.bus_address) > + result = device_create_file(&dev->dev, &dev_attr_adr); > + if (dev->pnp.unique_id) > + result = device_create_file(&dev->dev, &dev_attr_uid); > + > /* > * If device has _EJ0, 'eject' file is created that is used to trigger > * hot-removal function from userland. > @@ -281,6 +302,10 @@ static void acpi_device_remove_files(struct acpi_device *dev) > if (ACPI_SUCCESS(status)) > device_remove_file(&dev->dev, &dev_attr_eject); > > + if (dev->pnp.unique_id) > + device_remove_file(&dev->dev, &dev_attr_uid); > + if (dev->flags.bus_address) > + device_remove_file(&dev->dev, &dev_attr_adr); > device_remove_file(&dev->dev, &dev_attr_modalias); > device_remove_file(&dev->dev, &dev_attr_hid); > if (dev->handle) -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html