All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Samuel Ortiz <sameo@linux.intel.com>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	linux-acpi@vger.kernel.org,
	Faouaz TENOUTIT <faouaz.tenoutit@intel.com>
Subject: Re: [PATCH v4 2/2] ACPI: Export PLD (Physical Location of Device)
Date: Thu, 14 Aug 2014 06:05:24 +0800	[thread overview]
Message-ID: <20140813220524.GF7908@kroah.com> (raw)
In-Reply-To: <1407950132-15863-2-git-send-email-sameo@linux.intel.com>

On Wed, Aug 13, 2014 at 07:15:32PM +0200, Samuel Ortiz wrote:
> 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);

It's a device, why not call device_create_groups()?


> +			if (result) {
> +				ACPI_FREE(dev->pld);
> +				dev->pld = NULL;
> +			}
> +		}
> +	}

Is this being called after or before the device in question is
registered with the driver core?

Hint, I think I know the answer, but I want you to learn why this code
is wrong and will not work properly...

thanks,

greg k-h
--
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

  reply	other threads:[~2014-08-13 22:06 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 ` [PATCH v4 2/2] ACPI: Export PLD (Physical Location of Device) Samuel Ortiz
2014-08-13 22:05   ` Greg Kroah-Hartman [this message]
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=20140813220524.GF7908@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=faouaz.tenoutit@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=sameo@linux.intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.