[PATCH 1/2] rockchip: use standard dr_mode parsing function

Instead of duplicating the string values here, use usb_get_dr_mode() to handle the property lookup and converting the values to an enum.
This is implemented with a switch in preparation for the next patch which adds extra handling for peripheral mode.
Signed-off-by: John Keeping john@metanate.com --- arch/arm/mach-rockchip/board.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c index f1f70c81d0..6d33d65780 100644 --- a/arch/arm/mach-rockchip/board.c +++ b/arch/arm/mach-rockchip/board.c @@ -212,6 +212,7 @@ void enable_caches(void) #include <usb.h>
#if defined(CONFIG_USB_GADGET_DWC2_OTG) +#include <linux/usb/otg.h> #include <usb/dwc2_udc.h>
static struct dwc2_plat_otg_data otg_data = { @@ -223,18 +224,23 @@ static struct dwc2_plat_otg_data otg_data = { int board_usb_init(int index, enum usb_init_type init) { ofnode node; - const char *mode; bool matched = false;
/* find the usb_otg node */ node = ofnode_by_compatible(ofnode_null(), "snps,dwc2"); while (ofnode_valid(node)) { - mode = ofnode_read_string(node, "dr_mode"); - if (mode && strcmp(mode, "otg") == 0) { + switch (usb_get_dr_mode(node)) { + case USB_DR_MODE_OTG: matched = true; break; + + default: + break; }
+ if (matched) + break; + node = ofnode_by_compatible(node, "snps,dwc2"); } if (!matched) {

The OTG port is identified by inspecting the "dr_mode" property which is expected to be "otg" for this port. But it will work just as well as a device controller when dr_mode is set to "peripheral", which may be required if the mode detection pin is not set up correctly and the device controller needs to be programmed to override this.
Signed-off-by: John Keeping john@metanate.com --- arch/arm/mach-rockchip/board.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c index 6d33d65780..45d9eae870 100644 --- a/arch/arm/mach-rockchip/board.c +++ b/arch/arm/mach-rockchip/board.c @@ -231,6 +231,7 @@ int board_usb_init(int index, enum usb_init_type init) while (ofnode_valid(node)) { switch (usb_get_dr_mode(node)) { case USB_DR_MODE_OTG: + case USB_DR_MODE_PERIPHERAL: matched = true; break;

On 2023/4/12 19:52, John Keeping wrote:
The OTG port is identified by inspecting the "dr_mode" property which is expected to be "otg" for this port. But it will work just as well as a device controller when dr_mode is set to "peripheral", which may be required if the mode detection pin is not set up correctly and the device controller needs to be programmed to override this.
Signed-off-by: John Keeping john@metanate.com
Reviewed-by: Kever Yang kever.yang@rock-chips.com
Thanks, - Kever
arch/arm/mach-rockchip/board.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c index 6d33d65780..45d9eae870 100644 --- a/arch/arm/mach-rockchip/board.c +++ b/arch/arm/mach-rockchip/board.c @@ -231,6 +231,7 @@ int board_usb_init(int index, enum usb_init_type init) while (ofnode_valid(node)) { switch (usb_get_dr_mode(node)) { case USB_DR_MODE_OTG:
case USB_DR_MODE_PERIPHERAL: matched = true; break;

On 2023/4/12 19:52, John Keeping wrote:
Instead of duplicating the string values here, use usb_get_dr_mode() to handle the property lookup and converting the values to an enum.
This is implemented with a switch in preparation for the next patch which adds extra handling for peripheral mode.
Signed-off-by: John Keeping john@metanate.com
Reviewed-by: Kever Yang kever.yang@rock-chips.com
Thanks, - Kever
arch/arm/mach-rockchip/board.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c index f1f70c81d0..6d33d65780 100644 --- a/arch/arm/mach-rockchip/board.c +++ b/arch/arm/mach-rockchip/board.c @@ -212,6 +212,7 @@ void enable_caches(void) #include <usb.h>
#if defined(CONFIG_USB_GADGET_DWC2_OTG) +#include <linux/usb/otg.h> #include <usb/dwc2_udc.h>
static struct dwc2_plat_otg_data otg_data = { @@ -223,18 +224,23 @@ static struct dwc2_plat_otg_data otg_data = { int board_usb_init(int index, enum usb_init_type init) { ofnode node;
const char *mode; bool matched = false;
/* find the usb_otg node */ node = ofnode_by_compatible(ofnode_null(), "snps,dwc2"); while (ofnode_valid(node)) {
mode = ofnode_read_string(node, "dr_mode");
if (mode && strcmp(mode, "otg") == 0) {
switch (usb_get_dr_mode(node)) {
case USB_DR_MODE_OTG: matched = true; break;
default:
break;
}
if (matched)
break;
node = ofnode_by_compatible(node, "snps,dwc2"); } if (!matched) {
participants (2)
-
John Keeping
-
Kever Yang