Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1470098 > unrolled thread
| Started by | Heikki Krogerus <heikki.krogerus@linux.intel.com> |
|---|---|
| First post | 2016-08-25 14:10 +0200 |
| Last post | 2016-08-30 19:10 +0200 |
| Articles | 10 — 3 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [PATCHv6 1/3] usb: USB Type-C connector class Heikki Krogerus <heikki.krogerus@linux.intel.com> - 2016-08-25 14:10 +0200
Re: [PATCHv6 1/3] usb: USB Type-C connector class Vincent Palatin <vpalatin@chromium.org> - 2016-08-26 15:20 +0200
Re: [PATCHv6 1/3] usb: USB Type-C connector class Heikki Krogerus <heikki.krogerus@linux.intel.com> - 2016-08-26 16:20 +0200
Re: [PATCHv6 1/3] usb: USB Type-C connector class Guenter Roeck <linux@roeck-us.net> - 2016-08-29 15:10 +0200
Re: [PATCHv6 1/3] usb: USB Type-C connector class Heikki Krogerus <heikki.krogerus@linux.intel.com> - 2016-08-29 15:50 +0200
Re: [PATCHv6 1/3] usb: USB Type-C connector class Heikki Krogerus <heikki.krogerus@linux.intel.com> - 2016-08-29 16:20 +0200
Re: [PATCHv6 1/3] usb: USB Type-C connector class Guenter Roeck <linux@roeck-us.net> - 2016-08-29 22:10 +0200
Re: [PATCHv6 1/3] usb: USB Type-C connector class Heikki Krogerus <heikki.krogerus@linux.intel.com> - 2016-08-30 10:30 +0200
Re: [PATCHv6 1/3] usb: USB Type-C connector class Guenter Roeck <linux@roeck-us.net> - 2016-08-30 17:30 +0200
Re: [PATCHv6 1/3] usb: USB Type-C connector class Guenter Roeck <linux@roeck-us.net> - 2016-08-30 19:10 +0200
| From | Heikki Krogerus <heikki.krogerus@linux.intel.com> |
|---|---|
| Date | 2016-08-25 14:10 +0200 |
| Subject | Re: [PATCHv6 1/3] usb: USB Type-C connector class |
| Message-ID | <sa1DP-Mw-15@gated-at.bofh.it> |
Hi,
On Wed, Aug 24, 2016 at 04:08:23PM +0200, Vincent Palatin wrote:
> Sorry if I'm making redundant comments with previous discussions, I
> might have missed a few threads.
>
>
> On Mon, Aug 22, 2016 at 2:05 PM, Heikki Krogerus
> <heikki.krogerus@linux.intel.com> wrote:
> > The purpose of USB Type-C connector class is to provide
> > unified interface for the user space to get the status and
> > basic information about USB Type-C connectors on a system,
> > control over data role swapping, and when the port supports
> > USB Power Delivery, also control over power role swapping
> > and Alternate Modes.
> >
> > Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > ---
> > Documentation/ABI/testing/sysfs-class-typec | 199 +++++
> > Documentation/usb/typec.txt | 103 +++
> > MAINTAINERS | 9 +
> > drivers/usb/Kconfig | 2 +
> > drivers/usb/Makefile | 2 +
> > drivers/usb/typec/Kconfig | 7 +
> > drivers/usb/typec/Makefile | 1 +
> > drivers/usb/typec/typec.c | 1090 +++++++++++++++++++++++++++
> > include/linux/usb/typec.h | 260 +++++++
> > 9 files changed, 1673 insertions(+)
> > create mode 100644 Documentation/ABI/testing/sysfs-class-typec
> > create mode 100644 Documentation/usb/typec.txt
> > create mode 100644 drivers/usb/typec/Kconfig
> > create mode 100644 drivers/usb/typec/Makefile
> > create mode 100644 drivers/usb/typec/typec.c
> > create mode 100644 include/linux/usb/typec.h
> >
> > diff --git a/Documentation/ABI/testing/sysfs-class-typec b/Documentation/ABI/testing/sysfs-class-typec
> > new file mode 100644
> > index 0000000..e6179d3
> > --- /dev/null
> > +++ b/Documentation/ABI/testing/sysfs-class-typec
> > @@ -0,0 +1,199 @@
> > +USB Type-C port devices (eg. /sys/class/typec/usbc0/)
> > +
> > +What: /sys/class/typec/<port>/current_data_role
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + The current USB data role the port is operating in. This
> > + attribute can be used for requesting data role swapping on the
> > + port.
>
> role swapping is sometimes a long operation. maybe we need to say
> explicitly whether the 'write' is synchronous and returns when the
> swap has succeeded / failed or asynchronous (and requires polling
> current_data_role afterwards to know the result ?)
OK.
> > +
> > + Valid values:
> > + - host
> > + - device
>
> the USB workgroup has settled for DFP/UFP rather than host/device ?
(I don't think the workgroup has settled on anything.)
I already proposed DFP/UFP, but it did not fly. The naming really does
not need to reflect the spec exactly, especially since there is no
guarantee they will not change the names in future versions of the
spec. "host/device", "source/sink" are completely understandable,
unlike DRP/UFP.
>
> > +
> > +What: /sys/class/typec/<port>/current_power_role
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + The current power role of the port. This attribute can be used
> > + to request power role swap on the port when the port supports
>
> ditto
>
>
> > + USB Power Delivery.
> > +
> > + Valid values:
> > + - source
> > + - sink
> > +
> > +What: /sys/class/typec/<port>/current_vconn_role
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Shows the current VCONN role of the port. This attribute can be
> > + used to request VCONN role swap on the port when the port
> > + supports USB Power Delivery.
> > +
> > + Valid values are:
> > + - source
> > + - sink
>
>
> either we are currently sourcing vconn or not, but even if you are
> not, you are probably not a vconn sink either (ie only vconn-powered
> accessory are, your usual linux-powered laptop/phone is probably not)
It's not relevant to know whether the vconn is being actually used or
not here. I'm not sure what's your point?
And vconn does not only supply vonn-powered accessories, but
powered cables as well.
> > +
> > +What: /sys/class/typec/<port>/power_operation_mode
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Shows the current power operational mode the port is in.
> > +
> > + Valid values:
> > + - USB - Normal power levels defined in USB specifications
> > + - BC1.2 - Power levels defined in Battery Charging Specification
> > + v1.2
> > + - USB Type-C 1.5A - Higher 1.5A current defined in USB Type-C
> > + specification.
> > + - USB Type-C 3.0A - Higher 3A current defined in USB Type-C
> > + specification.
> > + - USB Power Delivery - The voltages and currents defined in USB
> > + Power Delivery specification
> > +
> > +What: /sys/class/typec/<port>/preferred_role
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + The user space can notify the driver about the preferred role.
> > + It should be handled as enabling of Try.SRC or Try.SNK, as
> > + defined in USB Type-C specification, in the port drivers. By
> > + default there is no preferred role.
> > +
> > + Valid values:
> > + - host
> > + - device
> > + - For example "none" to remove preference (anything else except
> > + "host" or "device")
>
>
> host/device are not really power roles, source/sink are (or SNK/SRC)
Try.SRC/SNK are primarily designed for systems that don't implement
USB PD, and therefore source = host and sink = device. But even when
USB PD is supported, the initial data role will be host in case of
source and device in case of sink.
And as said before, the naming does not need to match that of the spec
here.
> > +
> > +What: /sys/class/typec/<port>/supported_accessory_modes
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Lists the Accessory Modes, defined in the USB Type-C
> > + specification, the port supports.
>
>
> there aren't many modes defined in the type-C spec (most of them are
> in other specs or proprietary) overall I don't really what modes my
> port supports (and the list might be open-ended, e.g. user space
> implementations), I'm really interested in what the partner port
> supports.
I think you are mixing Accessory Modes and Alternate Modes (most
likely because of the vconn-powered accessory concept). Note that
vconn-powered accessory is actually just a sink that implements an
alternate mode.
You can have vendor specific alternate modes, but the accessory modes
are what the spec defines, so Audio and Debug (and Digital Audio in
the future).
>
> > +
> > +What: /sys/class/typec/<port>/supported_data_roles
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Lists the USB data roles the port is capable of supporting.
> > +
> > + Valid values:
> > + - device
> > + - host
> > + - device, host (DRD as defined in USB Type-C specification v1.2)
> > +
> > +What: /sys/class/typec/<port>/supported_power_roles
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Lists the power roles the port is capable of supporting.
> > +
> > + Valid values:
> > + - source
> > + - sink
> > +
> > +What: /sys/class/typec/<port>/supports_usb_power_delivery
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Shows if the port supports USB Power Delivery.
> > + - 1 if USB Power Delivery is supported
> > + - 0 when it's not
> > +
> > +
> > +USB Type-C partner devices (eg. /sys/class/typec/usbc0-partner/)
> > +
> > +What: /sys/class/typec/<port>-partner/accessory
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + The attribute is visible only when the partner's type is
> > + "Accessory". The type can be read from its own attribute.
> > +
> > + Shows the name of the Accessory Mode. The Accessory Modes are
> > + defined in USB Type-C Specification.
> > +
> > +What: /sys/class/typec/<port>-partner/type
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Shows the type of the partner. Can be one of the following:
> > + - USB - When the partner is normal USB host/peripheral.
> > + - Charger - When the partner has been identified as dedicated
> > + charger.
> > + - Alternate Mode - When the partner supports Alternate Modes.
> > + - Accessory - When the partner is one of the accessories with
> > + specific Accessory Mode defined in USB Type-C
> > + specification.
>
>
> where a dock would be classified ?
A dock is just USB PD capable device with a bunch of alternate modes
that is attached to the port. There is no specific identifier for a
"dock".
> > +
> > +USB Type-C cable devices (eg. /sys/class/typec/usbc0-cable/)
> > +
> > +Note: Electronically Marked Cables will have a device also for one cable plug
> > +(eg. /sys/class/typec/usbc0-plug0). If the cable is active and has also SOP
> > +Double Prime controller (USB Power Deliver specification ch. 2.4) it will have
> > +second device also for the other plug. Both plugs may have their alternate modes
> > +as described in USB Type-C and USB Power Delivery specifications.
> > +
> > +What: /sys/class/typec/<port>-cable/active
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Shows if the cable is active or passive.
> > +
> > + Valid values:
> > + - 0 when the cable is passive
> > + - 1 when the cable is active
> > +
> > +What: /sys/class/typec/<port>-cable/plug_type
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Shows type of the plug on the cable:
> > + - Type-A - Standard A
> > + - Type-B - Standard B
> > + - Type-C - USB Type-C
> > + - Captive - Non-standard
> > +
> > +
> > +Alternate Mode devices (For example,
> > +/sys/class/typec/usbc0-partner/usbc0-partner.svid:xxxx/). The ports, partners
> > +and cable plugs can have alternate modes.
> > +
> > +What: /sys/class/typec/<dev>/<dev>.svid:<svid>/<mode>/active
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Shows if the mode is active or not. The attribute can be used
> > + for entering/exiting the mode with partners and cable plugs, and
> > + with the port alternate modes it can be used for disabling
> > + support for specific alternate modes.
> > +
> > +What: /sys/class/typec/<dev>/<dev>.svid:<svid>/<mode>/description
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Shows description of the mode. The description is optional for
> > + the drivers, just like with the Billboard Devices.
> > +
> > +What: /sys/class/typec/<dev>/<dev>.svid:<svid>/<mode>/vdo
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Shows the VDO in hexadecimal returned from the Discover Modes
> > + command.
> > +
> > +What: /sys/class/typec/<port>/<port>.svid:<svid>/<mode>/supported_roles
> > +Date: June 2016
> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > +Description:
> > + Shows the roles, source or sink, the mode is supported with.
> > +
> > + This attribute is available for the devices describing the
> > + alternate modes a port supports, and it will not be exposed with
> > + the devices presenting the alternate modes the partners or cable
> > + plugs support.
> > diff --git a/Documentation/usb/typec.txt b/Documentation/usb/typec.txt
> > new file mode 100644
> > index 0000000..dce5f07
> > --- /dev/null
> > +++ b/Documentation/usb/typec.txt
> > @@ -0,0 +1,103 @@
> > +USB Type-C connector class
> > +==========================
> > +
> > +Introduction
> > +------------
> > +The typec class is meant for describing the USB Type-C ports in a system to the
> > +user space in unified fashion. The class is designed to provide nothing else
> > +except the user space interface implementation in hope that it can be utilized
> > +on as many platforms as possible.
> > +
> > +The platforms are expected to register every USB Type-C port they have with the
> > +class. In a normal case the registration will be done by a USB Type-C or PD PHY
> > +driver, but it may be a driver for firmware interface such as UCSI, driver for
> > +USB PD controller or even driver for Thunderbolt3 controller. This document
> > +considers the component registering the USB Type-C ports with the class as "port
> > +driver".
> > +
> > +On top of showing the capabilities, the class also offer the user space control
> > +over the roles and alternate modes they support when the port driver is capable
> > +of supporting those features.
> > +
> > +The class provides an API for the port drivers described in this document. The
> > +attributes are described in Documentation/ABI/testing/sysfs-class-typec.
> > +
> > +
> > +Interface
> > +---------
> > +Every port will be presented as its own device under /sys/class/typec/. The
> > +first port will be named "usbc0", the second "usbc1" and so on.
>
>
> I would need a way to map /sys/bus/usb/ entries with /sys/class/typec/ entries.
This needs planning, however this should not effect the class driver
at this point. The linking needs to happen in the drivers registering
the ports at least in the beginning. I fear there isn't a single
method that could be used on all types of platforms.
With ACPI we can find the port with the companion ACPI device for
the port itself. I don't know is this documented anywhere, but the
ACPI device object of the port is provided as a child for the typec
devices on boards that I've seen so far. I have no idea how the
linking even could be done in DT.
> > +
> > +When connected, the partner will be presented also as its own device under
> > +/sys/class/typec/. The parent of the partner device will always be the port. The
> > +partner attached to port "usbc0" will be named "usbc0-partner". Full patch to
>
> s/patch/path/
OK.
<snip>
> > +/*
> > + * typec_altmode_update_active - Notify about Enter/Exit mode
> > + * @alt: Handle to the Alternate Mode
> > + * @mode: Mode id
> > + * @active: True when the mode has been enterred
> > + */
> > +void typec_altmode_update_active(struct typec_altmode *alt, int mode,
> > + bool active)
> > +{
> > + struct typec_mode *m = alt->modes + mode;
> > + char dir[6];
> > +
> > + m->active = active;
> > + sprintf(dir, "mode%d", mode);
>
>
> maybe we need a safety check here and verify that `mode` is a single
> digit or clip properly the string ?
Sure.
>
> > + sysfs_notify(&alt->dev.kobj, dir, "active");
> > +}
> > +EXPORT_SYMBOL(typec_altmode_update_active);
Thanks for the review,
--
heikki
[toc] | [next] | [standalone]
| From | Vincent Palatin <vpalatin@chromium.org> |
|---|---|
| Date | 2016-08-26 15:20 +0200 |
| Message-ID | <sapd7-7yi-19@gated-at.bofh.it> |
| In reply to | #1470098 |
On Thu, Aug 25, 2016 at 1:59 PM, Heikki Krogerus
<heikki.krogerus@linux.intel.com> wrote:
> Hi,
>
> On Wed, Aug 24, 2016 at 04:08:23PM +0200, Vincent Palatin wrote:
>> Sorry if I'm making redundant comments with previous discussions, I
>> might have missed a few threads.
>>
>>
>> On Mon, Aug 22, 2016 at 2:05 PM, Heikki Krogerus
>> <heikki.krogerus@linux.intel.com> wrote:
>> > The purpose of USB Type-C connector class is to provide
>> > unified interface for the user space to get the status and
>> > basic information about USB Type-C connectors on a system,
>> > control over data role swapping, and when the port supports
>> > USB Power Delivery, also control over power role swapping
>> > and Alternate Modes.
>> >
>> > Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > ---
>> > Documentation/ABI/testing/sysfs-class-typec | 199 +++++
>> > Documentation/usb/typec.txt | 103 +++
>> > MAINTAINERS | 9 +
>> > drivers/usb/Kconfig | 2 +
>> > drivers/usb/Makefile | 2 +
>> > drivers/usb/typec/Kconfig | 7 +
>> > drivers/usb/typec/Makefile | 1 +
>> > drivers/usb/typec/typec.c | 1090 +++++++++++++++++++++++++++
>> > include/linux/usb/typec.h | 260 +++++++
>> > 9 files changed, 1673 insertions(+)
>> > create mode 100644 Documentation/ABI/testing/sysfs-class-typec
>> > create mode 100644 Documentation/usb/typec.txt
>> > create mode 100644 drivers/usb/typec/Kconfig
>> > create mode 100644 drivers/usb/typec/Makefile
>> > create mode 100644 drivers/usb/typec/typec.c
>> > create mode 100644 include/linux/usb/typec.h
>> >
>> > diff --git a/Documentation/ABI/testing/sysfs-class-typec b/Documentation/ABI/testing/sysfs-class-typec
>> > new file mode 100644
>> > index 0000000..e6179d3
>> > --- /dev/null
>> > +++ b/Documentation/ABI/testing/sysfs-class-typec
>> > @@ -0,0 +1,199 @@
>> > +USB Type-C port devices (eg. /sys/class/typec/usbc0/)
>> > +
>> > +What: /sys/class/typec/<port>/current_data_role
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + The current USB data role the port is operating in. This
>> > + attribute can be used for requesting data role swapping on the
>> > + port.
>>
>> role swapping is sometimes a long operation. maybe we need to say
>> explicitly whether the 'write' is synchronous and returns when the
>> swap has succeeded / failed or asynchronous (and requires polling
>> current_data_role afterwards to know the result ?)
>
> OK.
>
>> > +
>> > + Valid values:
>> > + - host
>> > + - device
>>
>> the USB workgroup has settled for DFP/UFP rather than host/device ?
>
> (I don't think the workgroup has settled on anything.)
>
> I already proposed DFP/UFP, but it did not fly. The naming really does
> not need to reflect the spec exactly, especially since there is no
> guarantee they will not change the names in future versions of the
> spec. "host/device", "source/sink" are completely understandable,
> unlike DRP/UFP.
OK.
>>
>> > +
>> > +What: /sys/class/typec/<port>/current_power_role
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + The current power role of the port. This attribute can be used
>> > + to request power role swap on the port when the port supports
>>
>> ditto
>>
>>
>> > + USB Power Delivery.
>> > +
>> > + Valid values:
>> > + - source
>> > + - sink
>> > +
>> > +What: /sys/class/typec/<port>/current_vconn_role
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Shows the current VCONN role of the port. This attribute can be
>> > + used to request VCONN role swap on the port when the port
>> > + supports USB Power Delivery.
>> > +
>> > + Valid values are:
>> > + - source
>> > + - sink
>>
>>
>> either we are currently sourcing vconn or not, but even if you are
>> not, you are probably not a vconn sink either (ie only vconn-powered
>> accessory are, your usual linux-powered laptop/phone is probably not)
>
> It's not relevant to know whether the vconn is being actually used or
> not here. I'm not sure what's your point?
My point was: saying we are a VCONN "sink" just because we are not
currently sourcing vconn is usually not true.
>
> And vconn does not only supply vonn-powered accessories, but
> powered cables as well.
>
>> > +
>> > +What: /sys/class/typec/<port>/power_operation_mode
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Shows the current power operational mode the port is in.
>> > +
>> > + Valid values:
>> > + - USB - Normal power levels defined in USB specifications
>> > + - BC1.2 - Power levels defined in Battery Charging Specification
>> > + v1.2
>> > + - USB Type-C 1.5A - Higher 1.5A current defined in USB Type-C
>> > + specification.
>> > + - USB Type-C 3.0A - Higher 3A current defined in USB Type-C
>> > + specification.
>> > + - USB Power Delivery - The voltages and currents defined in USB
>> > + Power Delivery specification
>> > +
>> > +What: /sys/class/typec/<port>/preferred_role
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + The user space can notify the driver about the preferred role.
>> > + It should be handled as enabling of Try.SRC or Try.SNK, as
>> > + defined in USB Type-C specification, in the port drivers. By
>> > + default there is no preferred role.
>> > +
>> > + Valid values:
>> > + - host
>> > + - device
>> > + - For example "none" to remove preference (anything else except
>> > + "host" or "device")
>>
>>
>> host/device are not really power roles, source/sink are (or SNK/SRC)
>
> Try.SRC/SNK are primarily designed for systems that don't implement
> USB PD, and therefore source = host and sink = device. But even when
> USB PD is supported, the initial data role will be host in case of
> source and device in case of sink.
>
> And as said before, the naming does not need to match that of the spec
> here.
sure it does not, I just found it confusing since we are referring
only to the power role.
>
>> > +
>> > +What: /sys/class/typec/<port>/supported_accessory_modes
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Lists the Accessory Modes, defined in the USB Type-C
>> > + specification, the port supports.
>>
>>
>> there aren't many modes defined in the type-C spec (most of them are
>> in other specs or proprietary) overall I don't really what modes my
>> port supports (and the list might be open-ended, e.g. user space
>> implementations), I'm really interested in what the partner port
>> supports.
>
> I think you are mixing Accessory Modes and Alternate Modes (most
> likely because of the vconn-powered accessory concept).
Indeed I was.
> Note that
> vconn-powered accessory is actually just a sink that implements an
> alternate mode.
>
> You can have vendor specific alternate modes, but the accessory modes
> are what the spec defines, so Audio and Debug (and Digital Audio in
> the future).
>
>>
>> > +
>> > +What: /sys/class/typec/<port>/supported_data_roles
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Lists the USB data roles the port is capable of supporting.
>> > +
>> > + Valid values:
>> > + - device
>> > + - host
>> > + - device, host (DRD as defined in USB Type-C specification v1.2)
>> > +
>> > +What: /sys/class/typec/<port>/supported_power_roles
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Lists the power roles the port is capable of supporting.
>> > +
>> > + Valid values:
>> > + - source
>> > + - sink
>> > +
>> > +What: /sys/class/typec/<port>/supports_usb_power_delivery
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Shows if the port supports USB Power Delivery.
>> > + - 1 if USB Power Delivery is supported
>> > + - 0 when it's not
>> > +
>> > +
>> > +USB Type-C partner devices (eg. /sys/class/typec/usbc0-partner/)
>> > +
>> > +What: /sys/class/typec/<port>-partner/accessory
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + The attribute is visible only when the partner's type is
>> > + "Accessory". The type can be read from its own attribute.
>> > +
>> > + Shows the name of the Accessory Mode. The Accessory Modes are
>> > + defined in USB Type-C Specification.
>> > +
>> > +What: /sys/class/typec/<port>-partner/type
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Shows the type of the partner. Can be one of the following:
>> > + - USB - When the partner is normal USB host/peripheral.
>> > + - Charger - When the partner has been identified as dedicated
>> > + charger.
>> > + - Alternate Mode - When the partner supports Alternate Modes.
>> > + - Accessory - When the partner is one of the accessories with
>> > + specific Accessory Mode defined in USB Type-C
>> > + specification.
>>
>>
>> where a dock would be classified ?
>
> A dock is just USB PD capable device with a bunch of alternate modes
> that is attached to the port. There is no specific identifier for a
> "dock".
My remark was a bit too stern,
I meant a dock might be 'USB' 'Charger' 'Alternate Mode' , all at the
same time or alternately depending what you plug in.
I don't really see those types as mutually exclusive.
>
>> > +
>> > +USB Type-C cable devices (eg. /sys/class/typec/usbc0-cable/)
>> > +
>> > +Note: Electronically Marked Cables will have a device also for one cable plug
>> > +(eg. /sys/class/typec/usbc0-plug0). If the cable is active and has also SOP
>> > +Double Prime controller (USB Power Deliver specification ch. 2.4) it will have
>> > +second device also for the other plug. Both plugs may have their alternate modes
>> > +as described in USB Type-C and USB Power Delivery specifications.
>> > +
>> > +What: /sys/class/typec/<port>-cable/active
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Shows if the cable is active or passive.
>> > +
>> > + Valid values:
>> > + - 0 when the cable is passive
>> > + - 1 when the cable is active
>> > +
>> > +What: /sys/class/typec/<port>-cable/plug_type
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Shows type of the plug on the cable:
>> > + - Type-A - Standard A
>> > + - Type-B - Standard B
>> > + - Type-C - USB Type-C
>> > + - Captive - Non-standard
>> > +
>> > +
>> > +Alternate Mode devices (For example,
>> > +/sys/class/typec/usbc0-partner/usbc0-partner.svid:xxxx/). The ports, partners
>> > +and cable plugs can have alternate modes.
>> > +
>> > +What: /sys/class/typec/<dev>/<dev>.svid:<svid>/<mode>/active
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Shows if the mode is active or not. The attribute can be used
>> > + for entering/exiting the mode with partners and cable plugs, and
>> > + with the port alternate modes it can be used for disabling
>> > + support for specific alternate modes.
>> > +
>> > +What: /sys/class/typec/<dev>/<dev>.svid:<svid>/<mode>/description
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Shows description of the mode. The description is optional for
>> > + the drivers, just like with the Billboard Devices.
>> > +
>> > +What: /sys/class/typec/<dev>/<dev>.svid:<svid>/<mode>/vdo
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Shows the VDO in hexadecimal returned from the Discover Modes
>> > + command.
>> > +
>> > +What: /sys/class/typec/<port>/<port>.svid:<svid>/<mode>/supported_roles
>> > +Date: June 2016
>> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>> > +Description:
>> > + Shows the roles, source or sink, the mode is supported with.
>> > +
>> > + This attribute is available for the devices describing the
>> > + alternate modes a port supports, and it will not be exposed with
>> > + the devices presenting the alternate modes the partners or cable
>> > + plugs support.
>> > diff --git a/Documentation/usb/typec.txt b/Documentation/usb/typec.txt
>> > new file mode 100644
>> > index 0000000..dce5f07
>> > --- /dev/null
>> > +++ b/Documentation/usb/typec.txt
>> > @@ -0,0 +1,103 @@
>> > +USB Type-C connector class
>> > +==========================
>> > +
>> > +Introduction
>> > +------------
>> > +The typec class is meant for describing the USB Type-C ports in a system to the
>> > +user space in unified fashion. The class is designed to provide nothing else
>> > +except the user space interface implementation in hope that it can be utilized
>> > +on as many platforms as possible.
>> > +
>> > +The platforms are expected to register every USB Type-C port they have with the
>> > +class. In a normal case the registration will be done by a USB Type-C or PD PHY
>> > +driver, but it may be a driver for firmware interface such as UCSI, driver for
>> > +USB PD controller or even driver for Thunderbolt3 controller. This document
>> > +considers the component registering the USB Type-C ports with the class as "port
>> > +driver".
>> > +
>> > +On top of showing the capabilities, the class also offer the user space control
>> > +over the roles and alternate modes they support when the port driver is capable
>> > +of supporting those features.
>> > +
>> > +The class provides an API for the port drivers described in this document. The
>> > +attributes are described in Documentation/ABI/testing/sysfs-class-typec.
>> > +
>> > +
>> > +Interface
>> > +---------
>> > +Every port will be presented as its own device under /sys/class/typec/. The
>> > +first port will be named "usbc0", the second "usbc1" and so on.
>>
>>
>> I would need a way to map /sys/bus/usb/ entries with /sys/class/typec/ entries.
>
> This needs planning, however this should not effect the class driver
> at this point. The linking needs to happen in the drivers registering
> the ports at least in the beginning. I fear there isn't a single
> method that could be used on all types of platforms.
>
> With ACPI we can find the port with the companion ACPI device for
> the port itself. I don't know is this documented anywhere, but the
> ACPI device object of the port is provided as a child for the typec
> devices on boards that I've seen so far. I have no idea how the
> linking even could be done in DT.
>
>> > +
>> > +When connected, the partner will be presented also as its own device under
>> > +/sys/class/typec/. The parent of the partner device will always be the port. The
>> > +partner attached to port "usbc0" will be named "usbc0-partner". Full patch to
>>
>> s/patch/path/
>
> OK.
>
> <snip>
>
>> > +/*
>> > + * typec_altmode_update_active - Notify about Enter/Exit mode
>> > + * @alt: Handle to the Alternate Mode
>> > + * @mode: Mode id
>> > + * @active: True when the mode has been enterred
>> > + */
>> > +void typec_altmode_update_active(struct typec_altmode *alt, int mode,
>> > + bool active)
>> > +{
>> > + struct typec_mode *m = alt->modes + mode;
>> > + char dir[6];
>> > +
>> > + m->active = active;
>> > + sprintf(dir, "mode%d", mode);
>>
>>
>> maybe we need a safety check here and verify that `mode` is a single
>> digit or clip properly the string ?
>
> Sure.
>
>>
>> > + sysfs_notify(&alt->dev.kobj, dir, "active");
>> > +}
>> > +EXPORT_SYMBOL(typec_altmode_update_active);
>
>
> Thanks for the review,
>
> --
> heikki
[toc] | [prev] | [next] | [standalone]
| From | Heikki Krogerus <heikki.krogerus@linux.intel.com> |
|---|---|
| Date | 2016-08-26 16:20 +0200 |
| Message-ID | <saq9c-879-13@gated-at.bofh.it> |
| In reply to | #1470718 |
Hi Vincent, On Fri, Aug 26, 2016 at 03:16:16PM +0200, Vincent Palatin wrote: > >> > +What: /sys/class/typec/<port>/current_vconn_role > >> > +Date: June 2016 > >> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com> > >> > +Description: > >> > + Shows the current VCONN role of the port. This attribute can be > >> > + used to request VCONN role swap on the port when the port > >> > + supports USB Power Delivery. > >> > + > >> > + Valid values are: > >> > + - source > >> > + - sink > >> > >> > >> either we are currently sourcing vconn or not, but even if you are > >> not, you are probably not a vconn sink either (ie only vconn-powered > >> accessory are, your usual linux-powered laptop/phone is probably not) > > > > It's not relevant to know whether the vconn is being actually used or > > not here. I'm not sure what's your point? > > > My point was: saying we are a VCONN "sink" just because we are not > currently sourcing vconn is usually not true. OK, I understand your point now. You are correct. I think we need to change this attribute and call it "vconn_source" that reports "1" or "0". I'll change that and send one more version of these on Monday (hopefully the last one) unless somebody disagrees. > >> > +What: /sys/class/typec/<port>-partner/type > >> > +Date: June 2016 > >> > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com> > >> > +Description: > >> > + Shows the type of the partner. Can be one of the following: > >> > + - USB - When the partner is normal USB host/peripheral. > >> > + - Charger - When the partner has been identified as dedicated > >> > + charger. > >> > + - Alternate Mode - When the partner supports Alternate Modes. > >> > + - Accessory - When the partner is one of the accessories with > >> > + specific Accessory Mode defined in USB Type-C > >> > + specification. > >> > >> > >> where a dock would be classified ? > > > > A dock is just USB PD capable device with a bunch of alternate modes > > that is attached to the port. There is no specific identifier for a > > "dock". > > My remark was a bit too stern, > I meant a dock might be 'USB' 'Charger' 'Alternate Mode' , all at the > same time or alternately depending what you plug in. > I don't really see those types as mutually exclusive. So USB type means the partner does not have alternate modes (I'll clear that in the documentation), Charger is a dedicated charger and therefore can not be anything else (no USB, no alternate modes). To answer your original question, a dock would be reported as Alternate Mode. Thanks, -- heikki
[toc] | [prev] | [next] | [standalone]
| From | Guenter Roeck <linux@roeck-us.net> |
|---|---|
| Date | 2016-08-29 15:10 +0200 |
| Message-ID | <sbuu5-7IC-21@gated-at.bofh.it> |
| In reply to | #1470738 |
Heikki, On 08/26/2016 07:07 AM, Heikki Krogerus wrote: > >>>>> +What: /sys/class/typec/<port>-partner/type >>>>> +Date: June 2016 >>>>> +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com> >>>>> +Description: >>>>> + Shows the type of the partner. Can be one of the following: >>>>> + - USB - When the partner is normal USB host/peripheral. >>>>> + - Charger - When the partner has been identified as dedicated >>>>> + charger. >>>>> + - Alternate Mode - When the partner supports Alternate Modes. >>>>> + - Accessory - When the partner is one of the accessories with >>>>> + specific Accessory Mode defined in USB Type-C >>>>> + specification. >>>> >>>> >>>> where a dock would be classified ? >>> >>> A dock is just USB PD capable device with a bunch of alternate modes >>> that is attached to the port. There is no specific identifier for a >>> "dock". >> >> My remark was a bit too stern, >> I meant a dock might be 'USB' 'Charger' 'Alternate Mode' , all at the >> same time or alternately depending what you plug in. >> I don't really see those types as mutually exclusive. > > So USB type means the partner does not have alternate modes (I'll > clear that in the documentation), Charger is a dedicated charger and > therefore can not be anything else (no USB, no alternate modes). > This is probably the most difficult attribute to support. Many PD capable chargers support alternate modes (for firmware upgrades). As I mentioned earlier, it is difficult to match reported Type-C partner types (or really anything reported in the SVDM Identity command) to the above types. Does it really make sense to deviate that much from the Type-C specification ? I can understand why you hesitate to use DFP / UFP, as those terms are really hard to understand for the non-initiated. However, here it is really difficult to even determine which value to set. The best I can come up with is - Not PD capable. Report USB (obviously includes non-PD capable chargers) - PD capable, supports alternate modes. Report as Alternate Mode (including PD chargers supporting alternate modes) - PD capable, does not support alternate modes. Report as Accessory if connected as accessory, as charger if we the port is connected as sink, USB otherwise Overall this is quite vague and, especially for chargers, most of the time misses the point. I would really prefer if we could stay closer to the specification in this case, and not try to merge multiple orthogonal attributes into one. Thanks, Guenter
[toc] | [prev] | [next] | [standalone]
| From | Heikki Krogerus <heikki.krogerus@linux.intel.com> |
|---|---|
| Date | 2016-08-29 15:50 +0200 |
| Message-ID | <sbv6N-7Wm-13@gated-at.bofh.it> |
| In reply to | #1471821 |
On Mon, Aug 29, 2016 at 06:04:52AM -0700, Guenter Roeck wrote: > Heikki, > > On 08/26/2016 07:07 AM, Heikki Krogerus wrote: > > > > > > > > +What: /sys/class/typec/<port>-partner/type > > > > > > +Date: June 2016 > > > > > > +Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com> > > > > > > +Description: > > > > > > + Shows the type of the partner. Can be one of the following: > > > > > > + - USB - When the partner is normal USB host/peripheral. > > > > > > + - Charger - When the partner has been identified as dedicated > > > > > > + charger. > > > > > > + - Alternate Mode - When the partner supports Alternate Modes. > > > > > > + - Accessory - When the partner is one of the accessories with > > > > > > + specific Accessory Mode defined in USB Type-C > > > > > > + specification. > > > > > > > > > > > > > > > where a dock would be classified ? > > > > > > > > A dock is just USB PD capable device with a bunch of alternate modes > > > > that is attached to the port. There is no specific identifier for a > > > > "dock". > > > > > > My remark was a bit too stern, > > > I meant a dock might be 'USB' 'Charger' 'Alternate Mode' , all at the > > > same time or alternately depending what you plug in. > > > I don't really see those types as mutually exclusive. > > > > So USB type means the partner does not have alternate modes (I'll > > clear that in the documentation), Charger is a dedicated charger and > > therefore can not be anything else (no USB, no alternate modes). > > > > This is probably the most difficult attribute to support. > > Many PD capable chargers support alternate modes (for firmware upgrades). > As I mentioned earlier, it is difficult to match reported Type-C partner > types (or really anything reported in the SVDM Identity command) > to the above types. > > Does it really make sense to deviate that much from the Type-C specification ? > I can understand why you hesitate to use DFP / UFP, as those terms are > really hard to understand for the non-initiated. However, here it is really > difficult to even determine which value to set. The best I can come up with is > > - Not PD capable. Report USB (obviously includes non-PD capable chargers) > - PD capable, supports alternate modes. Report as Alternate Mode (including > PD chargers supporting alternate modes) > - PD capable, does not support alternate modes. Report as Accessory if > connected as accessory, as charger if we the port is connected as sink, > USB otherwise > > Overall this is quite vague and, especially for chargers, most of the time > misses the point. > > I would really prefer if we could stay closer to the specification in this > case, and not try to merge multiple orthogonal attributes into one. OK. So what would you propose? Thanks, -- heikki
[toc] | [prev] | [next] | [standalone]
| From | Heikki Krogerus <heikki.krogerus@linux.intel.com> |
|---|---|
| Date | 2016-08-29 16:20 +0200 |
| Message-ID | <sbvzP-8mr-7@gated-at.bofh.it> |
| In reply to | #1471856 |
Hi Guenter, > > Overall this is quite vague and, especially for chargers, most of the time > > misses the point. > > > > I would really prefer if we could stay closer to the specification in this > > case, and not try to merge multiple orthogonal attributes into one. > > OK. So what would you propose? I'm actually only conserned about the accessory case, as there we are really not a source/sink/DRP, nor are we DPF/UFP/DRD. Should we use this attribute to only express if the type of the partner is "normal" or an accessory? Thanks, -- heikki
[toc] | [prev] | [next] | [standalone]
| From | Guenter Roeck <linux@roeck-us.net> |
|---|---|
| Date | 2016-08-29 22:10 +0200 |
| Message-ID | <sbB2y-3pN-19@gated-at.bofh.it> |
| In reply to | #1471871 |
Hello Heikki, On Mon, Aug 29, 2016 at 05:07:39PM +0300, Heikki Krogerus wrote: > Hi Guenter, > > > > Overall this is quite vague and, especially for chargers, most of the time > > > misses the point. > > > > > > I would really prefer if we could stay closer to the specification in this > > > case, and not try to merge multiple orthogonal attributes into one. > > > > OK. So what would you propose? > > I'm actually only conserned about the accessory case, as there we are > really not a source/sink/DRP, nor are we DPF/UFP/DRD. Should we use > this attribute to only express if the type of the partner is "normal" > or an accessory? > We currently have three attributes to cover accessory modes. supported_accessory_modes Lists the Accessory Modes, defined in the USB Type-C specification, the port supports. [ This is a bit vague. I think we should list the actual strings. The modes are called "Audio Adapter Accessory Mode" and "Debug Accessory Mode", yet the reported text is "Audio" and "Debug". Also, "Digital Audio" isn't supported as of specification revision 1.2. So the strings doesn't exactly follow the specification. ] accessory Shows the name of the Accessory Mode. The Accessory Modes are defined in USB Type-C Specification. type Shows the type of the partner. One of the possible accessory modes is TYPEC_ACCESSORY_NONE. If you are only interested in accessory mode support, maybe we don't need the 'type' attribute at all. We could make the 'accessory' attribute always visible and display one of "none", "Audio", "Debug", or "Digital Audio". It might also make sense to rename the attribute to "accessory_mode". On a side note, while looking into this, I noticed the following: + if (port->cap->accessory) + for (accessory = port->cap->accessory, i = 0; + i < port->cap->num_accessory; accessory++, i++) + ret += sprintf(buf, "%s\n", + typec_accessory_modes[*accessory]); This means the list of supported accessories always starts with ", ". Thanks, Guenter
[toc] | [prev] | [next] | [standalone]
| From | Heikki Krogerus <heikki.krogerus@linux.intel.com> |
|---|---|
| Date | 2016-08-30 10:30 +0200 |
| Message-ID | <sbMAG-2mW-27@gated-at.bofh.it> |
| In reply to | #1472096 |
Hi Guenter, On Mon, Aug 29, 2016 at 11:50:49AM -0700, Guenter Roeck wrote: > Hello Heikki, > > On Mon, Aug 29, 2016 at 05:07:39PM +0300, Heikki Krogerus wrote: > > Hi Guenter, > > > > > > Overall this is quite vague and, especially for chargers, most of the time > > > > misses the point. > > > > > > > > I would really prefer if we could stay closer to the specification in this > > > > case, and not try to merge multiple orthogonal attributes into one. > > > > > > OK. So what would you propose? > > > > I'm actually only conserned about the accessory case, as there we are > > really not a source/sink/DRP, nor are we DPF/UFP/DRD. Should we use > > this attribute to only express if the type of the partner is "normal" > > or an accessory? > > > > We currently have three attributes to cover accessory modes. > > supported_accessory_modes > Lists the Accessory Modes, defined in the USB Type-C > specification, the port supports. > > [ This is a bit vague. I think we should list the actual strings. > The modes are called "Audio Adapter Accessory Mode" and "Debug > Accessory Mode", yet the reported text is "Audio" and "Debug". > Also, "Digital Audio" isn't supported as of specification revision > 1.2. So the strings doesn't exactly follow the specification. ] I'm fine if we want to use more precise strings. > accessory > Shows the name of the Accessory Mode. The Accessory Modes are > defined in USB Type-C Specification. > > type > Shows the type of the partner. > > One of the possible accessory modes is TYPEC_ACCESSORY_NONE. > > If you are only interested in accessory mode support, maybe we don't need > the 'type' attribute at all. We could make the 'accessory' attribute always > visible and display one of "none", "Audio", "Debug", or "Digital Audio". > It might also make sense to rename the attribute to "accessory_mode". That works for me. How about if I add the "supports_usb_power_delivery" attribute for the partners instead to give some details about them. Any objections? > On a side note, while looking into this, I noticed the following: > > + if (port->cap->accessory) > + for (accessory = port->cap->accessory, i = 0; > + i < port->cap->num_accessory; accessory++, i++) > + ret += sprintf(buf, "%s\n", > + typec_accessory_modes[*accessory]); > > This means the list of supported accessories always starts with ", ". Where does it print ", "? I'm not sure what is wrong here, but I'll update this code in any case. I'll change the accessory member in typec_capability into fixed size array to make it easier to deal with for now. Thanks, -- heikki
[toc] | [prev] | [next] | [standalone]
| From | Guenter Roeck <linux@roeck-us.net> |
|---|---|
| Date | 2016-08-30 17:30 +0200 |
| Message-ID | <sbT97-6Di-15@gated-at.bofh.it> |
| In reply to | #1472314 |
Hello Heikki, On Tue, Aug 30, 2016 at 11:22:27AM +0300, Heikki Krogerus wrote: > > > > If you are only interested in accessory mode support, maybe we don't need > > the 'type' attribute at all. We could make the 'accessory' attribute always > > visible and display one of "none", "Audio", "Debug", or "Digital Audio". > > It might also make sense to rename the attribute to "accessory_mode". > > That works for me. > > How about if I add the "supports_usb_power_delivery" attribute for the > partners instead to give some details about them. Any objections? > At first glance, the attribute name looks a bit awkward. Let me look into the specification to see what might make sense to report. On top of my head, I don't recall if we are able to report this for a dock which isn't currently connected to power. > > On a side note, while looking into this, I noticed the following: > > > > + if (port->cap->accessory) > > + for (accessory = port->cap->accessory, i = 0; > > + i < port->cap->num_accessory; accessory++, i++) > > + ret += sprintf(buf, "%s\n", > > + typec_accessory_modes[*accessory]); > > > > This means the list of supported accessories always starts with ", ". > > Where does it print ", "? > > I'm not sure what is wrong here, but I'll update this code in any Nothing. Looks like I lost my ability to read code. Somehow the ',' above made it into the string. There is some inconsistency in the output when compared to the other "supported" attributes, though. Here the supported modes are printed in consecutive lines; elsewhere they are printed in a single line with ',' as separator. Thanks, Guenter
[toc] | [prev] | [next] | [standalone]
| From | Guenter Roeck <linux@roeck-us.net> |
|---|---|
| Date | 2016-08-30 19:10 +0200 |
| Message-ID | <sbUHT-7Jg-21@gated-at.bofh.it> |
| In reply to | #1472314 |
Heikki, On Tue, Aug 30, 2016 at 11:22:27AM +0300, Heikki Krogerus wrote: > > How about if I add the "supports_usb_power_delivery" attribute for the > partners instead to give some details about them. Any objections? > After looking into the code again, I assume the idea is to have the existing supports_usb_power_delivery attribute report if the local port supports the PD, and to have the partner attribute report if the partner supports the PD protocol. In other words, it would report the value of usb_pd in struct typec_partner. If so, I am ok with it. You might actually consider adding the same attribute to the cable attributes as well. Thanks, Guenter
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web