Thread (12 messages) 12 messages, 3 authors, 2017-07-17

Re: [PATCH 2/3] usb: chipidea: Hook into mux framework to toggle usb switch

From: Stephen Boyd <hidden>
Date: 2017-07-13 22:29:55
Also in: linux-arm-kernel, linux-arm-msm, lkml

Quoting Peter Rosin (2017-07-11 23:45:24)
On 2017-07-12 03:02, Stephen Boyd wrote:
quoted
@@ -102,4 +107,7 @@ Example:
              rx-burst-size-dword = <0x10>;
              extcon = <0>, <&usb_id>;
              phy-clkgate-delay-us = <400>;
+             mux-controls = <&usb_switch>;
+             mux-control-names = "usb_switch";
+             usb-switch-states = <0>, <1>;
I don't see the need for usb-switch-states? Just assume states 0/1 and
if someone later needs some other states, make them add a property that
overrides the defaults. Just document that 0 is host and 1 is device.
Fine by me. Rob H do you agree?
quoted
diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c
index 18cb8e46262d..9fd23ecc2da3 100644
--- a/drivers/usb/chipidea/host.c
+++ b/drivers/usb/chipidea/host.c
@@ -25,6 +25,7 @@
 #include <linux/usb/hcd.h>
 #include <linux/usb/chipidea.h>
 #include <linux/regulator/consumer.h>
+#include <linux/mux/consumer.h>
 
 #include "../host/ehci.h"
 
@@ -123,6 +124,13 @@ static int host_start(struct ci_hdrc *ci)
      if (usb_disabled())
              return -ENODEV;
 
+     if (!IS_ERR(ci->platdata->usb_switch.mux)) {
+             ret = mux_control_select(ci->platdata->usb_switch.mux,
+                                      ci->platdata->usb_switch.host);
+             if (ret)
+                     return ret;
+     }
+
You *must* call mux_control_deselect to clean up if there is a failure
later in host_start. Is that handled in some non-obvious way?
Good catch. Thanks. I'll add in the unwinding on the error path.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help