usb: dwc2: override PHY input signals with usb role switch support
authorAmelie Delaunay <amelie.delaunay@st.com>
Wed, 9 Sep 2020 09:35:10 +0000 (11:35 +0200)
committerFelipe Balbi <balbi@kernel.org>
Fri, 2 Oct 2020 10:29:13 +0000 (13:29 +0300)
commit17f934024e84e73cd55dd620a48c1b9e21fac87f
treefd59a26241335974abd16ffb20a4459118316476
parent14793faeed41249638d9e5fecefd1f5aabfe3f07
usb: dwc2: override PHY input signals with usb role switch support

This patch adds support for usb role switch to dwc2, by using overriding
control of the PHY voltage valid and ID input signals.

iddig signal (ID) can be overridden:
- when setting GUSBCFG_FORCEHOSTMODE, iddig input pin is overridden with 1;
- when setting GUSBCFG_FORCEDEVMODE, iddig input pin is overridden with 0.

avalid/bvalid/vbusvalid signals can be overridden respectively with:
- GOTGCTL_AVALOEN + GOTGCTL_AVALOVAL
- GOTGCTL_BVALOEN + GOTGCTL_BVALOVAL
- GOTGCTL_VBVALEN + GOTGCTL_VBVALOVAL

It is possible to determine valid sessions thanks to usb role switch:
- if USB_ROLE_NONE then !avalid && !bvalid && !vbusvalid
- if USB_ROLE_DEVICE then !avalid && bvalid && vbusvalid
- if USB_ROLE_HOST then avalid && !bvalid && vbusvalid

Acked-by: Minas Harutyunyan <hminas@synopsys.com>
Acked-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Signed-off-by: Amelie Delaunay <amelie.delaunay@st.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
drivers/usb/dwc2/Kconfig
drivers/usb/dwc2/Makefile
drivers/usb/dwc2/core.h
drivers/usb/dwc2/drd.c [new file with mode: 0644]
drivers/usb/dwc2/gadget.c
drivers/usb/dwc2/platform.c