[PATCH v6 23/25] usb: chipidea: Pullup D+ in device mode via phy APIs
From: Peter Chen <hidden>
Date: 2017-01-03 06:52:49
Also in:
linux-arm-msm, lkml
On Wed, Dec 28, 2016 at 02:57:09PM -0800, Stephen Boyd wrote:
quoted hunk ↗ jump to hunk
If the phy supports it, call phy_set_mode() to pull up D+ when required by setting the mode to PHY_MODE_USB_DEVICE. If we want to remove the pullup, set the mode to PHY_MODE_USB_HOST. Cc: Peter Chen <redacted> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Stephen Boyd <redacted> --- drivers/usb/chipidea/udc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c index 0d532a724d48..6d61fa0689b0 100644 --- a/drivers/usb/chipidea/udc.c +++ b/drivers/usb/chipidea/udc.c@@ -18,6 +18,7 @@ #include <linux/kernel.h> #include <linux/slab.h> #include <linux/pm_runtime.h> +#include <linux/phy/phy.h> #include <linux/usb/ch9.h> #include <linux/usb/gadget.h> #include <linux/usb/otg-fsm.h>@@ -1609,10 +1610,15 @@ static int ci_udc_pullup(struct usb_gadget *_gadget, int is_on) return 0; pm_runtime_get_sync(&ci->gadget.dev); - if (is_on) + if (is_on) { + if (ci->phy) + phy_set_mode(ci->phy, PHY_MODE_USB_DEVICE); hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS); - else + } else { hw_write(ci, OP_USBCMD, USBCMD_RS, 0); + if (ci->phy) + phy_set_mode(ci->phy, PHY_MODE_USB_HOST); + } pm_runtime_put_sync(&ci->gadget.dev); return 0;--
Would you describe the use case for it? Why not adding it at role switch routine? -- Best Regards, Peter Chen