Skip to contentSkip to conversation

usb:typec: Add sysfs support for Type C connector's physical location

PATCH In review Won Chung 3 participants 6 messages Mar 1, 2022 – Mar 3, 2022

Subsystems (2)
lore
Share & tools
lore

Won Chung

author
#0 lore raw

PATCH v2 1/1 usb:typec: Add sysfs support for Type C connector's physical location

When ACPI table includes _PLD field for a Type C connector, share _PLD values in its sysfs. _PLD stands for physical location of device.

Currently without connector's location information, when there are multiple Type C ports, it is hard to distinguish which connector corresponds to which physical port at which location. For example, when there are two Type C connectors, it is hard to find out which connector corresponds to the Type C port on the left panel versus the Type C port on the right panel. With location information provided, we can determine which specific device at which location is doing what.

_PLD output includes much more fields, but only generic fields are added and exposed to sysfs, so that non-ACPI devices can also support it in the future. The minimal generic fields needed for locating a port are the following.
- panel
- vertical_position
- horizontal_position
- dock
- lid

---

Changes in v2:
- Use string for location.
- Clarify get_pld() with naming and return type.

 Documentation/ABI/testing/sysfs-class-typec |  35 ++++++
 drivers/usb/typec/class.c                   | 113 ++++++++++++++++++++
 drivers/usb/typec/class.h                   |   3 +
 3 files changed, 151 insertions(+)
Documentation/ABI/testing/sysfs-class-typec +35 -0
index 75088ecad202..4497a5aeb063 100644
@@ -141,6 +141,41 @@ Description:
 		- "reverse": CC2 orientation
 		- "unknown": Orientation cannot be determined.
 
+What:		/sys/class/typec/<port>/location/panel
+Date:		March 2022
+Contact:	Won Chung <[email protected]>
+Description:
+		Describes which panel surface of the system’s housing the
+		port resides on.
+
+What:		/sys/class/typec/<port>/location/vertical_position
+Date:		March 2022
+Contact:	Won Chung <[email protected]>
+Description:
+		Describes vertical position of the port on the panel surface.
+		Valid values: upper, center, lower
+
+What:		/sys/class/typec/<port>/location/horizontal_position
+Date:		March 2022
+Contact:	Won Chung <[email protected]>
+Description:
+		Describes horizontal position of the port on the panel surface.
+		Valid values: left, center, right
+
+What:		/sys/class/typec/<port>/location/dock
+Date:		March 2022
+Contact:	Won Chung <[email protected]>
+Description:
+		Set as "yes" if the port resides in a docking station or a port
+		replicator, otherwise set as "no".
+
+What:		/sys/class/typec/<port>/location/lid
+Date:		March 2022
+Contact:	Won Chung <[email protected]>
+Description:
+		Set as "yes" if the port resides on the lid of laptop system,
+		otherwise set as "no".
+
 USB Type-C partner devices (eg. /sys/class/typec/port0-partner/)
 
 What:		/sys/class/typec/<port>-partner/accessory_mode
drivers/usb/typec/class.c +113 -0

133 lines not on this page · raw message

drivers/usb/typec/class.h +3 -0
index 0f1bd6d19d67..1b52633400c8 100644
@@ -3,6 +3,7 @@
 #ifndef __USB_TYPEC_CLASS__
 #define __USB_TYPEC_CLASS__
 
+#include <linux/acpi.h>
 #include <linux/device.h>
 #include <linux/usb/typec.h>
 
@@ -54,6 +55,8 @@ struct typec_port {
 
 	const struct typec_capability	*cap;
 	const struct typec_operations   *ops;
+
+	struct acpi_pld_info		*pld;
 };
 
 #define to_typec_port(_dev_) container_of(_dev_, struct typec_port, dev)
Signature · 1 line
2.35.1.574.g5d30c73bfb-goog
maintainer
#1 lore raw

Hi Won,

Quoted 66 lines · Won Chung

When ACPI table includes _PLD field for a Type C connector, share _PLD values in its sysfs. _PLD stands for physical location of device.

Currently without connector's location information, when there are multiple Type C ports, it is hard to distinguish which connector corresponds to which physical port at which location. For example, when there are two Type C connectors, it is hard to find out which connector corresponds to the Type C port on the left panel versus the Type C port on the right panel. With location information provided, we can determine which specific device at which location is doing what.

_PLD output includes much more fields, but only generic fields are added and exposed to sysfs, so that non-ACPI devices can also support it in the future. The minimal generic fields needed for locating a port are the following.
- panel
- vertical_position
- horizontal_position
- dock
- lid

---

Changes in v2:
- Use string for location.
- Clarify get_pld() with naming and return type.

 Documentation/ABI/testing/sysfs-class-typec |  35 ++++++
 drivers/usb/typec/class.c                   | 113 ++++++++++++++++++++
 drivers/usb/typec/class.h                   |   3 +
 3 files changed, 151 insertions(+)
Documentation/ABI/testing/sysfs-class-typec +25 -0
index 75088ecad202..4497a5aeb063 100644
@@ -141,6 +141,41 @@ Description:
 		- "reverse": CC2 orientation
 		- "unknown": Orientation cannot be determined.
 
+What:		/sys/class/typec/<port>/location/panel
+Date:		March 2022
+Contact:	Won Chung <[email protected]>
+Description:
+		Describes which panel surface of the system’s housing the
+		port resides on.
+
+What:		/sys/class/typec/<port>/location/vertical_position
+Date:		March 2022
+Contact:	Won Chung <[email protected]>
+Description:
+		Describes vertical position of the port on the panel surface.
+		Valid values: upper, center, lower
+
+What:		/sys/class/typec/<port>/location/horizontal_position
+Date:		March 2022
+Contact:	Won Chung <[email protected]>
+Description:
+		Describes horizontal position of the port on the panel surface.
+		Valid values: left, center, right
+
+What:		/sys/class/typec/<port>/location/dock
+Date:		March 2022
+Contact:	Won Chung <[email protected]>
+Description:

Documentation/ABI/testing/sysfs-class-typec Description: · line 178

Quoted 10 lines
Documentation/ABI/testing/sysfs-class-typec +10 -0
+		Set as "yes" if the port resides in a docking station or a port
+		replicator, otherwise set as "no".
+
+What:		/sys/class/typec/<port>/location/lid
+Date:		March 2022
+Contact:	Won Chung <[email protected]>
+Description:
+		Set as "yes" if the port resides on the lid of laptop system,
+		otherwise set as "no".
+

I've probable lost track of the topic during my winter break, I'm sorry about that, but why are you proposing now that this should be made Type-C specific?
This information is not Type-C specific, so it definitely does not belong here.

Br,

Signature · 1 line
heikki
author
#2 lore raw
Quoted 87 lines · Heikki Krogerus

Hi Won,

Quoted 66 lines · Won Chung

When ACPI table includes _PLD field for a Type C connector, share _PLD values in its sysfs. _PLD stands for physical location of device.

Currently without connector's location information, when there are multiple Type C ports, it is hard to distinguish which connector corresponds to which physical port at which location. For example, when there are two Type C connectors, it is hard to find out which connector corresponds to the Type C port on the left panel versus the Type C port on the right panel. With location information provided, we can determine which specific device at which location is doing what.

_PLD output includes much more fields, but only generic fields are added and exposed to sysfs, so that non-ACPI devices can also support it in the future. The minimal generic fields needed for locating a port are the following.
- panel
- vertical_position
- horizontal_position
- dock
- lid

---

Changes in v2:
- Use string for location.
- Clarify get_pld() with naming and return type.

 Documentation/ABI/testing/sysfs-class-typec |  35 ++++++
 drivers/usb/typec/class.c                   | 113 ++++++++++++++++++++
 drivers/usb/typec/class.h                   |   3 +
 3 files changed, 151 insertions(+)
Documentation/ABI/testing/sysfs-class-typec +25 -0
index 75088ecad202..4497a5aeb063 100644
@@ -141,6 +141,41 @@ Description:
              - "reverse": CC2 orientation
              - "unknown": Orientation cannot be determined.
 
+What:                /sys/class/typec/<port>/location/panel
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes which panel surface of the system’s housing the
+             port resides on.
+
+What:                /sys/class/typec/<port>/location/vertical_position
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes vertical position of the port on the panel surface.
+             Valid values: upper, center, lower
+
+What:                /sys/class/typec/<port>/location/horizontal_position
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes horizontal position of the port on the panel surface.
+             Valid values: left, center, right
+
+What:                /sys/class/typec/<port>/location/dock
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:

Documentation/ABI/testing/sysfs-class-typec Description: · line 178

Quoted 10 lines
Documentation/ABI/testing/sysfs-class-typec +10 -0
+             Set as "yes" if the port resides in a docking station or a port
+             replicator, otherwise set as "no".
+
+What:                /sys/class/typec/<port>/location/lid
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Set as "yes" if the port resides on the lid of laptop system,
+             otherwise set as "no".
+

I've probable lost track of the topic during my winter break, I'm sorry about that, but why are you proposing now that this should be made Type-C specific?
This information is not Type-C specific, so it definitely does not belong here.

Quoted 4 lines

Br,

--
heikki

Hi Heikki,

Thank you for the comment. Sorry that my description was not clear.
This is follow up from "[PATCH v6] ACPI: device_sysfs: Add sysfs
support for _PLD" in which Rafael suggested to have generic location
in Type C connector than adding PLD specifically to ACPI device. I was
also convinced by Rafael since userspace code would also be quite
ACPI-specific to access PLD in ACPI device sysfs. The discussion can
be found in https://lore.kernel.org/all/CAOvb9yh7uNg9ZU3RsieGChsjLCfKQhHhipBi4RMuQYKEA4fu9A@mail.gmail.com/.
For your reference, in a diverged email thread, Greg also gave a
feedback: https://lore.kernel.org/all/[email protected]/.

Do you think it is still better to have this location information in ACPI device? I would appreciate it if you can share your thoughts in the original thread where the discussion is. Thank you very much!

Won

#3 lore raw
Quoted 95 lines · Won Chung
Quoted 87 lines · Heikki Krogerus

Hi Won,

Quoted 66 lines · Won Chung

When ACPI table includes _PLD field for a Type C connector, share _PLD values in its sysfs. _PLD stands for physical location of device.

Currently without connector's location information, when there are multiple Type C ports, it is hard to distinguish which connector corresponds to which physical port at which location. For example, when there are two Type C connectors, it is hard to find out which connector corresponds to the Type C port on the left panel versus the Type C port on the right panel. With location information provided, we can determine which specific device at which location is doing what.

_PLD output includes much more fields, but only generic fields are added and exposed to sysfs, so that non-ACPI devices can also support it in the future. The minimal generic fields needed for locating a port are the following.
- panel
- vertical_position
- horizontal_position
- dock
- lid

---

Changes in v2:
- Use string for location.
- Clarify get_pld() with naming and return type.

 Documentation/ABI/testing/sysfs-class-typec |  35 ++++++
 drivers/usb/typec/class.c                   | 113 ++++++++++++++++++++
 drivers/usb/typec/class.h                   |   3 +
 3 files changed, 151 insertions(+)
Documentation/ABI/testing/sysfs-class-typec +25 -0
index 75088ecad202..4497a5aeb063 100644
@@ -141,6 +141,41 @@ Description:
              - "reverse": CC2 orientation
              - "unknown": Orientation cannot be determined.
 
+What:                /sys/class/typec/<port>/location/panel
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes which panel surface of the system’s housing the
+             port resides on.
+
+What:                /sys/class/typec/<port>/location/vertical_position
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes vertical position of the port on the panel surface.
+             Valid values: upper, center, lower
+
+What:                /sys/class/typec/<port>/location/horizontal_position
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes horizontal position of the port on the panel surface.
+             Valid values: left, center, right
+
+What:                /sys/class/typec/<port>/location/dock
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:

Documentation/ABI/testing/sysfs-class-typec Description: · line 178

Quoted 10 lines
Documentation/ABI/testing/sysfs-class-typec +10 -0
+             Set as "yes" if the port resides in a docking station or a port
+             replicator, otherwise set as "no".
+
+What:                /sys/class/typec/<port>/location/lid
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Set as "yes" if the port resides on the lid of laptop system,
+             otherwise set as "no".
+

I've probable lost track of the topic during my winter break, I'm sorry about that, but why are you proposing now that this should be made Type-C specific?
This information is not Type-C specific, so it definitely does not belong here.

Quoted 4 lines

Br,

--
heikki

Quoted 6 lines

Hi Heikki,

Thank you for the comment. Sorry that my description was not clear. This is follow up from "[PATCH v6] ACPI: device_sysfs: Add sysfs support for _PLD" in which Rafael suggested to have generic location in Type C connector than adding PLD specifically to ACPI device.

Well, this doesn't have to be /sys/class/typec/<port>/location/ though.

For example, the device location information can be exposed in a more generic way is /sys/devices/.../location/ for all devices for which it is available, somewhat in analogy to /sys/devices/.../power/.

maintainer
#4 lore raw
Quoted 103 lines · Rafael J. Wysocki
Quoted 95 lines · Won Chung
Quoted 87 lines · Heikki Krogerus

Hi Won,

Quoted 66 lines · Won Chung

When ACPI table includes _PLD field for a Type C connector, share _PLD values in its sysfs. _PLD stands for physical location of device.

Currently without connector's location information, when there are multiple Type C ports, it is hard to distinguish which connector corresponds to which physical port at which location. For example, when there are two Type C connectors, it is hard to find out which connector corresponds to the Type C port on the left panel versus the Type C port on the right panel. With location information provided, we can determine which specific device at which location is doing what.

_PLD output includes much more fields, but only generic fields are added and exposed to sysfs, so that non-ACPI devices can also support it in the future. The minimal generic fields needed for locating a port are the following.
- panel
- vertical_position
- horizontal_position
- dock
- lid

---

Changes in v2:
- Use string for location.
- Clarify get_pld() with naming and return type.

 Documentation/ABI/testing/sysfs-class-typec |  35 ++++++
 drivers/usb/typec/class.c                   | 113 ++++++++++++++++++++
 drivers/usb/typec/class.h                   |   3 +
 3 files changed, 151 insertions(+)
Documentation/ABI/testing/sysfs-class-typec +25 -0
index 75088ecad202..4497a5aeb063 100644
@@ -141,6 +141,41 @@ Description:
              - "reverse": CC2 orientation
              - "unknown": Orientation cannot be determined.
 
+What:                /sys/class/typec/<port>/location/panel
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes which panel surface of the system’s housing the
+             port resides on.
+
+What:                /sys/class/typec/<port>/location/vertical_position
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes vertical position of the port on the panel surface.
+             Valid values: upper, center, lower
+
+What:                /sys/class/typec/<port>/location/horizontal_position
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes horizontal position of the port on the panel surface.
+             Valid values: left, center, right
+
+What:                /sys/class/typec/<port>/location/dock
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:

Documentation/ABI/testing/sysfs-class-typec Description: · line 178

Quoted 10 lines
Documentation/ABI/testing/sysfs-class-typec +10 -0
+             Set as "yes" if the port resides in a docking station or a port
+             replicator, otherwise set as "no".
+
+What:                /sys/class/typec/<port>/location/lid
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Set as "yes" if the port resides on the lid of laptop system,
+             otherwise set as "no".
+

I've probable lost track of the topic during my winter break, I'm sorry about that, but why are you proposing now that this should be made Type-C specific?
This information is not Type-C specific, so it definitely does not belong here.

Quoted 4 lines

Br,

--
heikki

Quoted 6 lines

Hi Heikki,

Thank you for the comment. Sorry that my description was not clear. This is follow up from "[PATCH v6] ACPI: device_sysfs: Add sysfs support for _PLD" in which Rafael suggested to have generic location in Type C connector than adding PLD specifically to ACPI device.

Quoted 5 lines

Well, this doesn't have to be /sys/class/typec/<port>/location/ though.

For example, the device location information can be exposed in a more generic way is /sys/devices/.../location/ for all devices for which it is available, somewhat in analogy to /sys/devices/.../power/.

Right, that's what I meant. These can be made generic.

thanks,

Signature · 1 line
heikki
author
#5 lore raw
Quoted 111 lines · Heikki Krogerus
Quoted 103 lines · Rafael J. Wysocki
Quoted 95 lines · Won Chung
Quoted 87 lines · Heikki Krogerus

Hi Won,

Quoted 66 lines · Won Chung

When ACPI table includes _PLD field for a Type C connector, share _PLD values in its sysfs. _PLD stands for physical location of device.

Currently without connector's location information, when there are multiple Type C ports, it is hard to distinguish which connector corresponds to which physical port at which location. For example, when there are two Type C connectors, it is hard to find out which connector corresponds to the Type C port on the left panel versus the Type C port on the right panel. With location information provided, we can determine which specific device at which location is doing what.

_PLD output includes much more fields, but only generic fields are added and exposed to sysfs, so that non-ACPI devices can also support it in the future. The minimal generic fields needed for locating a port are the following.
- panel
- vertical_position
- horizontal_position
- dock
- lid

---

Changes in v2:
- Use string for location.
- Clarify get_pld() with naming and return type.

 Documentation/ABI/testing/sysfs-class-typec |  35 ++++++
 drivers/usb/typec/class.c                   | 113 ++++++++++++++++++++
 drivers/usb/typec/class.h                   |   3 +
 3 files changed, 151 insertions(+)
Documentation/ABI/testing/sysfs-class-typec +25 -0
index 75088ecad202..4497a5aeb063 100644
@@ -141,6 +141,41 @@ Description:
              - "reverse": CC2 orientation
              - "unknown": Orientation cannot be determined.
 
+What:                /sys/class/typec/<port>/location/panel
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes which panel surface of the system’s housing the
+             port resides on.
+
+What:                /sys/class/typec/<port>/location/vertical_position
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes vertical position of the port on the panel surface.
+             Valid values: upper, center, lower
+
+What:                /sys/class/typec/<port>/location/horizontal_position
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Describes horizontal position of the port on the panel surface.
+             Valid values: left, center, right
+
+What:                /sys/class/typec/<port>/location/dock
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:

Documentation/ABI/testing/sysfs-class-typec Description: · line 178

Quoted 10 lines
Documentation/ABI/testing/sysfs-class-typec +10 -0
+             Set as "yes" if the port resides in a docking station or a port
+             replicator, otherwise set as "no".
+
+What:                /sys/class/typec/<port>/location/lid
+Date:                March 2022
+Contact:     Won Chung <[email protected]>
+Description:
+             Set as "yes" if the port resides on the lid of laptop system,
+             otherwise set as "no".
+

I've probable lost track of the topic during my winter break, I'm sorry about that, but why are you proposing now that this should be made Type-C specific?
This information is not Type-C specific, so it definitely does not belong here.

Quoted 4 lines

Br,

--
heikki

Quoted 6 lines

Hi Heikki,

Thank you for the comment. Sorry that my description was not clear. This is follow up from "[PATCH v6] ACPI: device_sysfs: Add sysfs support for _PLD" in which Rafael suggested to have generic location in Type C connector than adding PLD specifically to ACPI device.

Quoted 5 lines

Well, this doesn't have to be /sys/class/typec/<port>/location/ though.

For example, the device location information can be exposed in a more generic way is /sys/devices/.../location/ for all devices for which it is available, somewhat in analogy to /sys/devices/.../power/.

Quoted 6 lines

Right, that's what I meant. These can be made generic.

thanks,

--
heikki

Hi Heikki and Rafael,

Thank you for clarification and guidance. I created and sent a new patch on driver core for /sys/devices/.../location/.

Won