All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Tenoutit, Faouaz" <faouaz.tenoutit@intel.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: "linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>
Subject: RE: [PATCH 1/2] ACPI: Export PLD (Physical Location of Device)
Date: Wed, 9 Jul 2014 15:09:58 +0000	[thread overview]
Message-ID: <56D4B9BFEADA5948B14547D2A81CE2C0284660CE@HASMSX106.ger.corp.intel.com> (raw)
In-Reply-To: <1884955.CnA0paX6L0@vostro.rjw.lan>


________________________________________
From: linux-acpi-owner@vger.kernel.org [linux-acpi-owner@vger.kernel.org] on behalf of Rafael J. Wysocki [rjw@rjwysocki.net]
Sent: Monday, July 07, 2014 11:03 PM
To: Tenoutit, Faouaz
Cc: linux-acpi@vger.kernel.org
Subject: Re: [PATCH 1/2] ACPI: Export PLD (Physical Location of Device)

On Wednesday, July 02, 2014 09:01:04 AM Tenoutit, Faouaz wrote:
> This patch will export a sysfs entry with PLD information for each acpi device:
>
> $ ls -l /sys/bus/acpi/devices/ACPI-DEV/pld
> -r--r--r-- root     root         4096 2014-05-30 08:39 bay
> -r--r--r-- root     root         4096 2014-05-30 08:39 cabinet_number
> -r--r--r-- root     root         4096 2014-05-30 08:39 card_cage_number
> -r--r--r-- root     root         4096 2014-05-30 08:39 color
> -r--r--r-- root     root         4096 2014-05-30 08:39 dock
> -r--r--r-- root     root         4096 2014-05-30 08:39 ejectable
> -r--r--r-- root     root         4096 2014-05-30 08:39 group_orientation
> -r--r--r-- root     root         4096 2014-05-30 08:39 group_position
> -r--r--r-- root     root         4096 2014-05-30 08:39 group_token
> -r--r--r-- root     root         4096 2014-05-30 08:39 height
> -r--r--r-- root     root         4096 2014-05-30 08:39 horizontal_offset
> -r--r--r-- root     root         4096 2014-05-30 08:39 horizontal_position
> -r--r--r-- root     root         4096 2014-05-30 08:39 ignore_color
> -r--r--r-- root     root         4096 2014-05-30 08:39 lid
> -r--r--r-- root     root         4096 2014-05-30 08:39 order
> -r--r--r-- root     root         4096 2014-05-30 08:39 ospm_eject_required
> -r--r--r-- root     root         4096 2014-05-30 08:39 panel
> -r--r--r-- root     root         4096 2014-05-30 08:39 reference
> -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
> -r--r--r-- root     root         4096 2014-05-30 08:39 user_visible
> -r--r--r-- root     root         4096 2014-05-30 08:39 vertical_offset
> -r--r--r-- root     root         4096 2014-05-30 08:39 vertical_position
> -r--r--r-- root     root         4096 2014-05-30 08:39 width
>
> 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>

It doesn't look like the majority of this patch is necessary for patch [2/2].
Can you please separate out the part needed by patch [2/2] from it?
> Sure, I'll upload a new version

I'm not sure if it's a good idea to export all _PLD information to user space
this way.  Is there any particular user space framework that needs this
information?
> Android is using these information to auto-detect devices facing for example (back/front camera,...)

> ---
>  Documentation/ABI/testing/sysfs-bus-acpi | 144 +++++++++++++++++++++++++++++++
>  drivers/acpi/scan.c                      |  97 +++++++++++++++++++++
>  include/acpi/acpi_bus.h                  |   1 +
>  3 files changed, 242 insertions(+)
>
> diff --git a/Documentation/ABI/testing/sysfs-bus-acpi b/Documentation/ABI/testing/sysfs-bus-acpi
> index 7fa9cbc..a1a5e24 100644
> --- a/Documentation/ABI/testing/sysfs-bus-acpi
> +++ b/Documentation/ABI/testing/sysfs-bus-acpi
> @@ -56,3 +56,147 @@ 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:        June 2014
> +Contact:    Faouaz Tenoutit <faouaz.tenoutit@intel.com>
> +Description:
> +    This optional folder provides description of the physical
> +    location of a device’s external connection point.
> +    This information can be used by system software to describe
> +    to the user which specific connector or device input
> +    mechanism may be used for a given task or may need user
> +    intervention for correct operation.
> +
> +    The entries of this folder are described bellow:
> +
> +---------------------------------------------------------------------
> +    Name            |                   Description
> +---------------------------------------------------------------------
> +revision            | The current Revision is 0x2
> +---------------------------------------------------------------------
> +ignore_color        | If this bit is set, the Color field is ignored,
> +                    | as the color is unknown.
> +---------------------------------------------------------------------
> +color               | 24-bit RGB value for the color of the device
> +                    | connection point.
> +                    | Bits 8:15=red value
> +                    | Bits 16:23=green value
> +                    | Bits 24:31=blue value
> +---------------------------------------------------------------------
> +width               | Width of the widest point of the device
> +                    | connection point, in millimeters
> +---------------------------------------------------------------------
> +height              | Height of the tallest point of the device
> +                    | connection point, in millimeters
> +---------------------------------------------------------------------
> +user_visible        | Set if the device connection point can be
> +                    | seen by the user without disassembly.
> +---------------------------------------------------------------------
> +dock                | Set if the device connection point resides in
> +                    | a docking station or port replicator.
> +---------------------------------------------------------------------
> +lid                 | Set if this device connection point resides on
> +                    | the lid of laptop system.
> +---------------------------------------------------------------------
> +panel               | 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 (Vertical Position and
> +                    |       Horizontal Position will be ignored)
> +---------------------------------------------------------------------
> +vertical_position   | Vertical position on the panel where the
> +                    | device connection point resides:
> +                    |   0 – Upper
> +                    |   1 – Center
> +                    |   2 – Lower
> +---------------------------------------------------------------------
> +horizontal_position | Horizontal position on the panel where the
> +                    | device connection point resides:
> +                    |   0 – Upper
> +                    |   1 – Center
> +                    |   2 – Lower
> +---------------------------------------------------------------------
> +shape               | Describes the shape of the device
> +                    | connection point. The Width and Height
> +                    | fields may be used to distort a shape, e.g. A
> +                    | Round shape will look like an Oval shape if
> +                    | the Width and Height are not equal. And a
> +                    | Vertical Rectangle or Horizontal Rectangle
> +                    | may look like a square if Width and Height
> +                    | are equal.
> +                    |   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
> +---------------------------------------------------------------------
> +group_orientation   | if Set, indicates vertical grouping, otherwise
> +                    | horizontal is assumed.
> +---------------------------------------------------------------------
> +group_token         | Unique numerical value identifying a group.
> +---------------------------------------------------------------------
> +group_position      | Identifies this device connection point’s
> +                    | position in the group (i.e. 1st, 2nd)
> +---------------------------------------------------------------------
> +bay                 | Set if describing a device in a bay or if
> +                    | device connection point is a bay.
> +---------------------------------------------------------------------
> +ejectable           | Set if the device is ejectable. Indicates
> +                    | ejectability in the absence of _EJx objects.
> +---------------------------------------------------------------------
> +ospm_eject_required | OSPM Ejection required: Set if OSPM
> +                    | needs to be involved with ejection process.
> +                    | User-operated physical hardware ejection is
> +                    | not possible.
> +---------------------------------------------------------------------
> +cabinet_number      | For single cabinet system, this field is
> +                    | Number always 0.
> +---------------------------------------------------------------------
> +card_cage_number    | For single card cage system, this field is
> +                    | Number always 0.
> +---------------------------------------------------------------------
> +reference           | if Set, this _PLD defines a “reference” shape
> +                    | that is used to help orient the user with
> +                    | respect to the other shapes when rendering
> +                    | _PLDs.
> +---------------------------------------------------------------------
> +rotation            | 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°
> +---------------------------------------------------------------------
> +order               | Identifies the drawing order of the
> +                    | connection point described by a _PLD.
> +                    | Order = 0 connection points are drawn
> +                    | before Order = 1 connection points. Order =
> +                    | 1 before Order = 2, and so on. Order = 31
> +                    | connection points are drawn last. Order
> +                    | should always start at 0 and be
> +                    | consecutively assigned.
> +---------------------------------------------------------------------
> +vertical_offset     | Offset of Shape Origin from Panel Origin (in
> +                    | mm). A value of 0xFFFFFFFF indicates that
> +                    | this field is not supplied.
> +---------------------------------------------------------------------
> +horizontal_offset   | Offset of Shape Origin from Panel Origin (in
> +                    | mm). A value of 0xFFFFFFFF indicates that
> +                    | this field is not supplied.
> +---------------------------------------------------------------------
> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
> index 7efe546..53957be 100644
> --- a/drivers/acpi/scan.c
> +++ b/drivers/acpi/scan.c
> @@ -683,6 +683,78 @@ 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(ignore_color);
> +ACPI_SYSFS_PLD_PROP(color);
> +ACPI_SYSFS_PLD_PROP(width);
> +ACPI_SYSFS_PLD_PROP(height);
> +ACPI_SYSFS_PLD_PROP(user_visible);
> +ACPI_SYSFS_PLD_PROP(dock);
> +ACPI_SYSFS_PLD_PROP(lid);
> +ACPI_SYSFS_PLD_PROP(panel);
> +ACPI_SYSFS_PLD_PROP(vertical_position);
> +ACPI_SYSFS_PLD_PROP(horizontal_position);
> +ACPI_SYSFS_PLD_PROP(shape);
> +ACPI_SYSFS_PLD_PROP(group_orientation);
> +ACPI_SYSFS_PLD_PROP(group_token);
> +ACPI_SYSFS_PLD_PROP(group_position);
> +ACPI_SYSFS_PLD_PROP(bay);
> +ACPI_SYSFS_PLD_PROP(ejectable);
> +ACPI_SYSFS_PLD_PROP(ospm_eject_required);
> +ACPI_SYSFS_PLD_PROP(cabinet_number);
> +ACPI_SYSFS_PLD_PROP(card_cage_number);
> +ACPI_SYSFS_PLD_PROP(reference);
> +ACPI_SYSFS_PLD_PROP(rotation);
> +ACPI_SYSFS_PLD_PROP(order);
> +ACPI_SYSFS_PLD_PROP(vertical_offset);
> +ACPI_SYSFS_PLD_PROP(horizontal_offset);
> +
> +static struct attribute *acpi_pld_attrs[] = {
> +    &dev_attr_revision.attr,
> +    &dev_attr_ignore_color.attr,
> +    &dev_attr_color.attr,
> +    &dev_attr_width.attr,
> +    &dev_attr_height.attr,
> +    &dev_attr_user_visible.attr,
> +    &dev_attr_dock.attr,
> +    &dev_attr_lid.attr,
> +    &dev_attr_panel.attr,
> +    &dev_attr_vertical_position.attr,
> +    &dev_attr_horizontal_position.attr,
> +    &dev_attr_shape.attr,
> +    &dev_attr_group_orientation.attr,
> +    &dev_attr_group_token.attr,
> +    &dev_attr_group_position.attr,
> +    &dev_attr_bay.attr,
> +    &dev_attr_ejectable.attr,
> +    &dev_attr_ospm_eject_required.attr,
> +    &dev_attr_cabinet_number.attr,
> +    &dev_attr_card_cage_number.attr,
> +    &dev_attr_reference.attr,
> +    &dev_attr_rotation.attr,
> +    &dev_attr_order.attr,
> +    &dev_attr_vertical_offset.attr,
> +    &dev_attr_horizontal_offset.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};
> @@ -764,6 +836,23 @@ static int acpi_device_setup_files(struct acpi_device *dev)
>                              &dev_attr_real_power_state);
>      }
>
> +    /*
> +     * If device has _PLD, 'pld' directory is created
> +     */
> +    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;
> +                goto end;
> +            }
> +        }
> +    }
> +
>  end:
>      return result;
>  }
> @@ -803,6 +892,14 @@ static void acpi_device_remove_files(struct acpi_device *dev)
>          device_remove_file(&dev->dev, &dev_attr_status);
>      if (dev->handle)
>          device_remove_file(&dev->dev, &dev_attr_path);
> +
> +    /*
> +     * If device has _PLD, remove 'pld' directory
> +     */
> +    if (dev->pld) {
> +        sysfs_remove_group(&dev->dev.kobj, &acpi_pld_attr_group);
> +        ACPI_FREE(dev->pld);
> +    }
>  }
>  /* --------------------------------------------------------------------------
>              ACPI Bus operations
> diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
> index 84a2e29..92d174e 100644
> --- a/include/acpi/acpi_bus.h
> +++ b/include/acpi/acpi_bus.h
> @@ -347,6 +347,7 @@ struct acpi_device {
>      struct acpi_scan_handler *handler;
>      struct acpi_hotplug_context *hp;
>      struct acpi_driver *driver;
> +    struct acpi_pld_info *pld;
>      void *driver_data;
>      struct device dev;
>      unsigned int physical_node_count;
> --
> 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

--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
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
---------------------------------------------------------------------
Intel Corporation SAS (French simplified joint stock company)
Registered headquarters: "Les Montalets"- 2, rue de Paris, 
92196 Meudon Cedex, France
Registration Number:  302 456 199 R.C.S. NANTERRE
Capital: 4,572,000 Euros

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

--
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-07-09 15:11 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-02  9:01 [PATCH 1/2] ACPI: Export PLD (Physical Location of Device) Tenoutit, Faouaz
2014-07-07 21:03 ` Rafael J. Wysocki
2014-07-09 15:09   ` Tenoutit, Faouaz [this message]

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=56D4B9BFEADA5948B14547D2A81CE2C0284660CE@HASMSX106.ger.corp.intel.com \
    --to=faouaz.tenoutit@intel.com \
    --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 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.