From: Samuel Ortiz <sameo@linux.intel.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: linux-acpi@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
sameo@linux.intel.com,
Faouaz TENOUTIT <faouaz.tenoutit@intel.com>
Subject: [PATCH v4 2/2] ACPI: Export PLD (Physical Location of Device)
Date: Wed, 13 Aug 2014 19:15:32 +0200 [thread overview]
Message-ID: <1407950132-15863-2-git-send-email-sameo@linux.intel.com> (raw)
In-Reply-To: <1407950132-15863-1-git-send-email-sameo@linux.intel.com>
From: Faouaz TENOUTIT <faouaz.tenoutit@intel.com>
This patch exports a sysfs directory with ACPI _PLD information:
$ ls -l /sys/bus/acpi/devices/ACPI-DEV/pld
-r--r--r-- root root 4096 2014-05-30 08:39 panel
-r--r--r-- root root 4096 2014-05-30 08:39 revision
-r--r--r-- root root 4096 2014-05-30 08:39 rotation
-r--r--r-- root root 4096 2014-05-30 08:39 shape
This information can be used by user applications to:
- Determine which specific connector or device input mechanism may be used
for a given task.
- Describes which panel surface of the system's housing the device
connection point resides on (Front, Back, ...)
More information about these _PLD fields can be found here:
Documentation/ABI/testing/sysfs-bus-acpi
Signed-off-by: Faouaz TENOUTIT <faouaz.tenoutit@intel.com>
Acked-by: Samuel Ortiz <samuel.ortiz@intel.com>
Acked-by: Andrew J Ross <andrew.j.ross@intel.com>
---
Documentation/ABI/testing/sysfs-bus-acpi | 60 ++++++++++++++++++++++++++++++++
drivers/acpi/scan.c | 53 ++++++++++++++++++++++++----
2 files changed, 107 insertions(+), 6 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-bus-acpi b/Documentation/ABI/testing/sysfs-bus-acpi
index 7fa9cbc..be58159 100644
--- a/Documentation/ABI/testing/sysfs-bus-acpi
+++ b/Documentation/ABI/testing/sysfs-bus-acpi
@@ -56,3 +56,63 @@ Description:
Writing 1 to this attribute will trigger hot removal of
this device object. This file exists for every device
object that has _EJ0 method.
+
+What: /sys/bus/acpi/devices/.../pld
+Date: August 2014
+Contact: Faouaz Tenoutit <faouaz.tenoutit@intel.com>
+Description:
+ This optional directory provides description of the physical
+ location, orientation and position of external devices.
+ It is for example used to describe how camera sensors are
+ physically mounted and allows user space software to rotate
+ images accordingly.
+
+What: /sys/bus/acpi/devices/.../pld/revision
+Date: August 2014
+Contact: Faouaz Tenoutit <faouaz.tenoutit@intel.com>
+Description:
+ The current Revision is 0x2
+
+What: /sys/bus/acpi/devices/.../pld/panel
+Date: August 2014
+Contact: Faouaz Tenoutit <faouaz.tenoutit@intel.com>
+Description:
+ Describes which panel surface of the system's housing the device
+ connection point resides on:
+ 0 Top
+ 1 Bottom
+ 2 Left
+ 3 Right
+ 4 Front
+ 5 Back
+ 6 Unknown
+
+What: /sys/bus/acpi/devices/.../pld/shape
+Date: August 2014
+Contact: Faouaz Tenoutit <faouaz.tenoutit@intel.com>
+Description:
+ Describes the shape of the device connection point:
+ 0 Round
+ 1 Oval
+ 2 Square
+ 3 Vertical Rectangle
+ 4 Horizontal Rectangle
+ 5 Vertical Trapezoid
+ 6 Horizontal Trapezoid
+ 7 Unknown - Shape rendered as a Rectangle with dotted lines
+ 8 Chamfered
+
+What: /sys/bus/acpi/devices/.../pld/rotation
+Date: August 2014
+Contact: Faouaz Tenoutit <faouaz.tenoutit@intel.com>
+Description:
+ Rotates the Shape clockwise in 45 degree steps around its
+ origin where:
+ 0 0°
+ 1 45°
+ 2 90°
+ 3 135°
+ 4 180°
+ 5 225°
+ 6 270°
+ 7 315°
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 2ca42d5..19889a3 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -686,6 +686,36 @@ static ssize_t status_show(struct device *dev, struct device_attribute *attr,
}
static DEVICE_ATTR_RO(status);
+#define ACPI_SYSFS_PLD_PROP(prop) \
+ static ssize_t prop##_show(struct device *dev, \
+ struct device_attribute *attr, \
+ char *buf) { \
+ struct acpi_device *acpi_dev = to_acpi_device(dev); \
+ return sprintf(buf, "%d\n", acpi_dev->pld->prop); \
+}; \
+static DEVICE_ATTR_RO(prop)
+
+/*
+ * sysfs PLD parameters
+ */
+ACPI_SYSFS_PLD_PROP(revision);
+ACPI_SYSFS_PLD_PROP(panel);
+ACPI_SYSFS_PLD_PROP(shape);
+ACPI_SYSFS_PLD_PROP(rotation);
+
+static struct attribute *acpi_pld_attrs[] = {
+ &dev_attr_revision.attr,
+ &dev_attr_panel.attr,
+ &dev_attr_shape.attr,
+ &dev_attr_rotation.attr,
+ NULL,
+};
+
+static const struct attribute_group acpi_pld_attr_group = {
+ .name = "pld",
+ .attrs = acpi_pld_attrs,
+};
+
static int acpi_device_setup_files(struct acpi_device *dev)
{
struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
@@ -768,11 +798,20 @@ static int acpi_device_setup_files(struct acpi_device *dev)
}
/*
- * If device has _PLD, initialize the 'pld' struct
+ * If device has _PLD, 'pld' directory is created
*/
- if (acpi_has_method(dev->handle, "_PLD"))
- acpi_get_physical_device_location(dev->handle,
- &dev->pld);
+ if (acpi_has_method(dev->handle, "_PLD")) {
+ status = acpi_get_physical_device_location(dev->handle,
+ &dev->pld);
+ if (ACPI_SUCCESS(status)) {
+ result = sysfs_create_group(&dev->dev.kobj,
+ &acpi_pld_attr_group);
+ if (result) {
+ ACPI_FREE(dev->pld);
+ dev->pld = NULL;
+ }
+ }
+ }
end:
return result;
@@ -815,10 +854,12 @@ static void acpi_device_remove_files(struct acpi_device *dev)
device_remove_file(&dev->dev, &dev_attr_path);
/*
- * If device has _PLD, free 'pld' struct
+ * If device has _PLD, remove 'pld' directory
*/
- if (dev->pld)
+ if (dev->pld) {
+ sysfs_remove_group(&dev->dev.kobj, &acpi_pld_attr_group);
ACPI_FREE(dev->pld);
+ }
}
/* --------------------------------------------------------------------------
ACPI Bus operations
--
2.0.0
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2014-08-13 17:18 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-13 17:15 [PATCH v4 1/2] USB: Use ACPI device information Samuel Ortiz
2014-08-13 17:15 ` Samuel Ortiz [this message]
2014-08-13 22:05 ` [PATCH v4 2/2] ACPI: Export PLD (Physical Location of Device) Greg Kroah-Hartman
2014-08-14 0:15 ` Rafael J. Wysocki
2014-08-14 0:46 ` Greg Kroah-Hartman
2014-08-13 22:03 ` [PATCH v4 1/2] USB: Use ACPI device information Greg Kroah-Hartman
2014-08-14 0:17 ` Rafael J. Wysocki
2014-08-14 0:45 ` Greg Kroah-Hartman
2014-08-15 0:03 ` Rafael J. Wysocki
2014-09-03 22:02 ` Rafael J. Wysocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1407950132-15863-2-git-send-email-sameo@linux.intel.com \
--to=sameo@linux.intel.com \
--cc=faouaz.tenoutit@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-acpi@vger.kernel.org \
--cc=rjw@rjwysocki.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox