diff mbox series

dt-bindings: usb: usb-device: Add panel-location

Message ID 20241212-usb-orientation-v1-1-0b69adf05f37@chromium.org
State New
Headers show
Series dt-bindings: usb: usb-device: Add panel-location | expand

Commit Message

Ricardo Ribalda Dec. 12, 2024, 9:44 p.m. UTC
For some devices like cameras the system needs to know where they are
mounted.

ACPI has a property for this purpose, which is parsed by
acpi_get_physical_device_location():
https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/06_Device_Configuration/Device_Configuration.html#pld-physical-location-of-device

In DT we have similar property for video-interface-devices called
orientation, but it is limited to the requirements of video devices:
Documentation/devicetree/bindings/media/video-interface-devices.yaml

Add a new property for usb-devices that matches the behavior of
ACPI's _PLD.

Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
---
 Documentation/devicetree/bindings/usb/usb-device.yaml | 14 ++++++++++++++
 1 file changed, 14 insertions(+)


---
base-commit: eefa7a9c069908412f8f5d15833901d1b46ae1b2
change-id: 20241212-usb-orientation-8e3717ebb02a

Best regards,

Comments

Rob Herring (Arm) Dec. 17, 2024, 2:56 p.m. UTC | #1
On Thu, Dec 12, 2024 at 09:44:37PM +0000, Ricardo Ribalda wrote:
> For some devices like cameras the system needs to know where they are
> mounted.

Why do you need this and why only this property and not the dozens 
others ACPI has?

> 
> ACPI has a property for this purpose, which is parsed by
> acpi_get_physical_device_location():
> https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/06_Device_Configuration/Device_Configuration.html#pld-physical-location-of-device
> 
> In DT we have similar property for video-interface-devices called
> orientation, but it is limited to the requirements of video devices:
> Documentation/devicetree/bindings/media/video-interface-devices.yaml
> 
> Add a new property for usb-devices that matches the behavior of
> ACPI's _PLD.
> 
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> ---
>  Documentation/devicetree/bindings/usb/usb-device.yaml | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/usb/usb-device.yaml b/Documentation/devicetree/bindings/usb/usb-device.yaml
> index da890ee60ce6..1ce79c1c3b31 100644
> --- a/Documentation/devicetree/bindings/usb/usb-device.yaml
> +++ b/Documentation/devicetree/bindings/usb/usb-device.yaml
> @@ -42,6 +42,20 @@ properties:
>        port to which this device is attached. The range is 1-255.
>      maxItems: 1
>  
> +  panel-location:
> +    description: Describes which panel surface of the system's housing the USB
> +      device resides on. It has the same meaning as the `ACPI`'s `_PLD` Panel
> +      object.
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    enum:
> +      - 0 # Top.
> +      - 1 # Bottom.
> +      - 2 # Left.
> +      - 3 # Right.
> +      - 4 # Front (aka as User Facing).
> +      - 5 # Back (aka as World Facing).
> +      - 6 # Unknown.
> +
>    "#address-cells":
>      description: should be 1 for hub nodes with device nodes,
>        should be 2 for device nodes with interface nodes.
> 
> ---
> base-commit: eefa7a9c069908412f8f5d15833901d1b46ae1b2
> change-id: 20241212-usb-orientation-8e3717ebb02a
> 
> Best regards,
> -- 
> Ricardo Ribalda <ribalda@chromium.org>
>
Ricardo Ribalda Dec. 17, 2024, 3:24 p.m. UTC | #2
Hi Rob

On Tue, 17 Dec 2024 at 16:02, Rob Herring <robh@kernel.org> wrote:
>
> On Thu, Dec 12, 2024 at 09:44:37PM +0000, Ricardo Ribalda wrote:
> > For some devices like cameras the system needs to know where they are
> > mounted.
>
> Why do you need this and why only this property and not the dozens
> others ACPI has?

Userspace needs that information to correctly show it in the UI. Eg;

- User facing camera needs to be mirrored during preview.
- The user facing camera is selected by default during videoconferences
- The world facing camera is selected by default when taking a photo
- User facing camera have different parameter defaults than world facing.

Right now, the only camera driver that expose the ACPI location
information is the IPU from intel
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/media/pci/intel/ipu-bridge.c#n258

And they are only using the panel.

If we need more information we can consider adding more parameters in
the future.


>
> >
> > ACPI has a property for this purpose, which is parsed by
> > acpi_get_physical_device_location():
> > https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/06_Device_Configuration/Device_Configuration.html#pld-physical-location-of-device
> >
> > In DT we have similar property for video-interface-devices called
> > orientation, but it is limited to the requirements of video devices:
> > Documentation/devicetree/bindings/media/video-interface-devices.yaml
> >
> > Add a new property for usb-devices that matches the behavior of
> > ACPI's _PLD.
> >
> > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> > ---
> >  Documentation/devicetree/bindings/usb/usb-device.yaml | 14 ++++++++++++++
> >  1 file changed, 14 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/usb/usb-device.yaml b/Documentation/devicetree/bindings/usb/usb-device.yaml
> > index da890ee60ce6..1ce79c1c3b31 100644
> > --- a/Documentation/devicetree/bindings/usb/usb-device.yaml
> > +++ b/Documentation/devicetree/bindings/usb/usb-device.yaml
> > @@ -42,6 +42,20 @@ properties:
> >        port to which this device is attached. The range is 1-255.
> >      maxItems: 1
> >
> > +  panel-location:
> > +    description: Describes which panel surface of the system's housing the USB
> > +      device resides on. It has the same meaning as the `ACPI`'s `_PLD` Panel
> > +      object.
> > +    $ref: /schemas/types.yaml#/definitions/uint32
> > +    enum:
> > +      - 0 # Top.
> > +      - 1 # Bottom.
> > +      - 2 # Left.
> > +      - 3 # Right.
> > +      - 4 # Front (aka as User Facing).
> > +      - 5 # Back (aka as World Facing).
> > +      - 6 # Unknown.
> > +
> >    "#address-cells":
> >      description: should be 1 for hub nodes with device nodes,
> >        should be 2 for device nodes with interface nodes.
> >
> > ---
> > base-commit: eefa7a9c069908412f8f5d15833901d1b46ae1b2
> > change-id: 20241212-usb-orientation-8e3717ebb02a
> >
> > Best regards,
> > --
> > Ricardo Ribalda <ribalda@chromium.org>
> >
Sakari Ailus Dec. 19, 2024, 12:29 p.m. UTC | #3
Hello,

On Thu, Dec 19, 2024 at 06:24:53AM -0600, Rob Herring wrote:
> On Tue, Dec 17, 2024 at 04:24:27PM +0100, Ricardo Ribalda wrote:
> > Hi Rob
> > 
> > On Tue, 17 Dec 2024 at 16:02, Rob Herring <robh@kernel.org> wrote:
> > >
> > > On Thu, Dec 12, 2024 at 09:44:37PM +0000, Ricardo Ribalda wrote:
> > > > For some devices like cameras the system needs to know where they are
> > > > mounted.
> > >
> > > Why do you need this and why only this property and not the dozens
> > > others ACPI has?
> > 
> > Userspace needs that information to correctly show it in the UI. Eg;
> > 
> > - User facing camera needs to be mirrored during preview.
> > - The user facing camera is selected by default during videoconferences
> > - The world facing camera is selected by default when taking a photo
> > - User facing camera have different parameter defaults than world facing.
> 
> We already have "orientation" defined for this purpose.

I was thinking of the same. It's defined (for cameras) in
Documentation/devicetree/bindings/media/video-interface-devices.yaml .

> 
> > 
> > Right now, the only camera driver that expose the ACPI location
> > information is the IPU from intel
> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/media/pci/intel/ipu-bridge.c#n258
> > 
> > And they are only using the panel.
> > 
> > If we need more information we can consider adding more parameters in
> > the future.
Rob Herring (Arm) Dec. 20, 2024, 10 p.m. UTC | #4
On Thu, Dec 19, 2024 at 6:42 AM Ricardo Ribalda <ribalda@chromium.org> wrote:
>
> On Thu, 19 Dec 2024 at 13:24, Rob Herring <robh@kernel.org> wrote:
> >
> > On Tue, Dec 17, 2024 at 04:24:27PM +0100, Ricardo Ribalda wrote:
> > > Hi Rob
> > >
> > > On Tue, 17 Dec 2024 at 16:02, Rob Herring <robh@kernel.org> wrote:
> > > >
> > > > On Thu, Dec 12, 2024 at 09:44:37PM +0000, Ricardo Ribalda wrote:
> > > > > For some devices like cameras the system needs to know where they are
> > > > > mounted.
> > > >
> > > > Why do you need this and why only this property and not the dozens
> > > > others ACPI has?
> > >
> > > Userspace needs that information to correctly show it in the UI. Eg;
> > >
> > > - User facing camera needs to be mirrored during preview.
> > > - The user facing camera is selected by default during videoconferences
> > > - The world facing camera is selected by default when taking a photo
> > > - User facing camera have different parameter defaults than world facing.
> >
> > We already have "orientation" defined for this purpose.
>
> Do you mean orientation from
> bindings/media/video-interface-devices.yaml ?
>
> I see a couple of issues:
> - Orientation has a very specific meaning for USB typeC. I'd prefer if
> we could avoid using that word.

Yes, but this is tied to the class of the device, not the bus. I find
defining the position for USB devices confusing.

> - For other applications different than cameras it might be useful to
> know the positions top, bottom, left, right, which are not available
> in video-interface-devices

Other devices may need some of the 20 other properties in the ACPI
table as well.

> - The value "external" does not makes too much sense for listed usb devices

Then don't use it.

> - It makes our lives easier if dt and acpi have the same meaning (less
> conversion)

We have little to no input into what ACPI does. If we're just going to
copy ACPI, then just use ACPI instead.

> All that said, for my specific usecase, reusing orientation from
> bindings/media/video-interface-devices.yaml works... So if that is
> what you all prefer I can send a v2 with that.
> Let me know what you think

We already have something for cameras. Use it.

Rob
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/usb/usb-device.yaml b/Documentation/devicetree/bindings/usb/usb-device.yaml
index da890ee60ce6..1ce79c1c3b31 100644
--- a/Documentation/devicetree/bindings/usb/usb-device.yaml
+++ b/Documentation/devicetree/bindings/usb/usb-device.yaml
@@ -42,6 +42,20 @@  properties:
       port to which this device is attached. The range is 1-255.
     maxItems: 1
 
+  panel-location:
+    description: Describes which panel surface of the system's housing the USB
+      device resides on. It has the same meaning as the `ACPI`'s `_PLD` Panel
+      object.
+    $ref: /schemas/types.yaml#/definitions/uint32
+    enum:
+      - 0 # Top.
+      - 1 # Bottom.
+      - 2 # Left.
+      - 3 # Right.
+      - 4 # Front (aka as User Facing).
+      - 5 # Back (aka as World Facing).
+      - 6 # Unknown.
+
   "#address-cells":
     description: should be 1 for hub nodes with device nodes,
       should be 2 for device nodes with interface nodes.