> > 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? Developers may want to check _ADR from user land to see whether the glue implementation is correct. Same situation may be encountered on _UID. We may discuss here to see whether the two files are required for ACPI users. Thus this optional feature hasn't been combined with the former _UID enabling one. Best regards/Lv Zheng > > 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) ��.n��������+%������w��{.n�����{�����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f