Re: [RFC PATCH 0/2] Add gpio-usb-c-connector compatible

From: Krishna Kurapati PSSNV
Date: Sat Mar 30 2024 - 05:14:14 EST




On 3/29/2024 6:23 PM, Dmitry Baryshkov wrote:
On Fri, 29 Mar 2024 at 09:20, Krishna Kurapati
<quic_kriskura@xxxxxxxxxxx> wrote:

QDU1000 IDP [1] has a Type-c connector and supports USB 3.0.
However it relies on usb-conn-gpio driver to read the vbus and id
gpio's and provide role switch. However the driver currently has
only gpio-b-connector compatible present in ID table. Adding that
in DT would mean that the device supports Type-B connector and not
Type-c connector. Thanks to Dmitry Baryshkov for pointing it out [2].

USB-B connector is pretty simple, it really has just an ID pin and
VBUS input, which translates to two GPIOs being routed from the
_connector_ itself.

USB-C is much more complicated, it has two CC pins and a VBus power
pin. It is not enough just to measure CC pin levels. Moreover,
properly handling USB 3.0 inside a USB-C connector requires a separate
'orientation' signal to tell the host which two lanes must be used for
the USB SS signals. Thus it is no longer possible to route just two
pins from the connector to the SoC.

Having all that in mind, I suspect that you are not describing your
hardware properly. I suppose that you have a Type-C port controller /
redriver / switch, which handles CC lines communication and then
provides ID / VBUS signals to the host. In such a case, please
describe this TCPC in the DT file and use its compatible string
instead of "gpio-c-connector".


Hi Dmitry,

My bad. I must have provided more details of the HW.

I presume you are referring to addition of a connector node, type-c switch, pmic-glink and other remote endpoints like in other SoC's like SM8450/ SM8550/ SM8650.

This HW is slightly different. It has a Uni Phy for Super speed and hence no DP.

For orientation switching, on mobile SoC's, there is a provision for orientation gpio given in pmic-glink node and is handled in ucsi_glink driver. But on this version of HW, there is a USB-C Switch with its own firmware taking care of orientation switching. It takes 8 SS Lines and 2 CC lines coming from connector as input and gives out 4 SS Lines (SS TX1/TX2 RX1/RX2) as output which go to the SoC. So orientation switch is done by the USB-C-switch in between and it automatically routes appropriate active SS Lane from connector to the SoC.

As usual like in other targets, the DP and DM lines from type-c connector go to the SoC directly.

To handle role switch, the VBUS and ID Pin connections are given to SoC as well. There is a vbus controller regulator present to provide vbus to connected peripherals in host mode.

There is no PPM entity (ADSP in mobile SoC's) and no UCSI involved here. Hence we rely on usb-conn-gpio to read the vbus/id and switch roles accordingly.

Hope this answers the query as to why we wanted to use usb-conn-gpio and why we were trying to add a new compatible.

Regards,
Krishna,


This series intends to add that compatible in driver and bindings
so that it can be used in QDU1000 IDP DT.

[1]: https://lore.kernel.org/all/20240319091020.15137-3-quic_kbajaj@xxxxxxxxxxx/
[2]: https://lore.kernel.org/all/CAA8EJprXPvji8TgZu1idH7y4GtHtD4VmQABFBcRt-9BQaCberg@xxxxxxxxxxxxxx/

Krishna Kurapati (2):
dt-bindings: connector: Add gpio-usb-c-connector compatible
usb: common: usb-conn-gpio: Update ID table to add usb-c connector

Documentation/devicetree/bindings/connector/usb-connector.yaml | 3 +++
drivers/usb/common/usb-conn-gpio.c | 1 +
2 files changed, 4 insertions(+)

--
2.34.1



--
With best wishes
Dmitry