diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2021-02-22 10:39:39 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-02-22 10:39:39 +0100 |
commit | a97e0b863eefb4a1025e39429cabf67b3ea34b72 (patch) | |
tree | 06b7aeb8e72da446529522ad3b4450b3d287e837 | |
parent | 2b1f426e511bf5b41c84d05ec09949ebd5dc216e (diff) | |
parent | 9ccf645bfaee366acd8dbd6b270717dae94f5347 (diff) | |
download | barebox-a97e0b863eefb4a1025e39429cabf67b3ea34b72.tar.gz barebox-a97e0b863eefb4a1025e39429cabf67b3ea34b72.tar.xz |
Merge branch 'for-next/usb'
-rw-r--r-- | commands/usbgadget.c | 2 | ||||
-rw-r--r-- | drivers/usb/core/usb.c | 14 | ||||
-rw-r--r-- | drivers/usb/dwc2/host.c | 9 | ||||
-rw-r--r-- | drivers/usb/host/ehci-atmel.c | 8 | ||||
-rw-r--r-- | drivers/usb/host/ehci-hcd.c | 13 | ||||
-rw-r--r-- | drivers/usb/host/xhci.c | 8 | ||||
-rw-r--r-- | drivers/usb/imx/chipidea-imx.c | 9 | ||||
-rw-r--r-- | drivers/usb/imx/imx-usb-misc.c | 15 | ||||
-rw-r--r-- | drivers/usb/musb/musb_barebox.c | 9 | ||||
-rw-r--r-- | include/usb/ehci.h | 6 |
10 files changed, 26 insertions, 67 deletions
diff --git a/commands/usbgadget.c b/commands/usbgadget.c index 9133402f52..3b115f147d 100644 --- a/commands/usbgadget.c +++ b/commands/usbgadget.c @@ -67,7 +67,7 @@ BAREBOX_CMD_HELP_END BAREBOX_CMD_START(usbgadget) .cmd = do_usbgadget, BAREBOX_CMD_DESC("Create USB Gadget multifunction device") - BAREBOX_CMD_OPTS("[-asdAD]") + BAREBOX_CMD_OPTS("[-adAD]") BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP) BAREBOX_CMD_HELP(cmd_usbgadget_help) BAREBOX_CMD_END diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index ea244d4bcf..938a28e030 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c @@ -88,11 +88,25 @@ static inline void usb_host_release(struct usb_host *host) slice_release(&host->slice); } +static int usb_hw_detect(struct device_d *dev) +{ + struct usb_host *host; + + list_for_each_entry(host, &host_list, list) { + if (dev == host->hw_dev) + return usb_host_detect(host); + } + + return -ENODEV; +} + int usb_register_host(struct usb_host *host) { list_add_tail(&host->list, &host_list); host->busnum = host_busnum++; slice_init(&host->slice, dev_name(host->hw_dev)); + if (!host->hw_dev->detect) + host->hw_dev->detect = usb_hw_detect; return 0; } diff --git a/drivers/usb/dwc2/host.c b/drivers/usb/dwc2/host.c index 510a07dfb9..7a070d91f3 100644 --- a/drivers/usb/dwc2/host.c +++ b/drivers/usb/dwc2/host.c @@ -766,13 +766,6 @@ static int dwc2_host_init(struct usb_host *host) return 0; } -static int dwc2_detect(struct device_d *dev) -{ - struct dwc2 *dwc2 = dev->priv; - - return usb_host_detect(&dwc2->host); -} - int dwc2_register_host(struct dwc2 *dwc2) { struct usb_host *host; @@ -784,8 +777,6 @@ int dwc2_register_host(struct dwc2 *dwc2) host->submit_control_msg = dwc2_submit_control_msg; host->submit_int_msg = dwc2_submit_int_msg; - dwc2->dev->detect = dwc2_detect; - return usb_register_host(host); } diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c index 192c5ef9d1..c3f8ab7ad5 100644 --- a/drivers/usb/host/ehci-atmel.c +++ b/drivers/usb/host/ehci-atmel.c @@ -57,13 +57,6 @@ static void atmel_stop_clock(struct atmel_ehci_priv *atehci) clk_disable(atehci->uclk); } -static int atmel_ehci_detect(struct device_d *dev) -{ - struct atmel_ehci_priv *atehci = dev->priv; - - return ehci_detect(atehci->ehci); -} - static int atmel_ehci_probe(struct device_d *dev) { int ret; @@ -78,7 +71,6 @@ static int atmel_ehci_probe(struct device_d *dev) atehci = xzalloc(sizeof(*atehci)); atehci->dev = dev; dev->priv = atehci; - dev->detect = atmel_ehci_detect; atehci->iclk = clk_get(dev, "ehci_clk"); if (IS_ERR(atehci->iclk)) { diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 287849102d..8c4da9fd12 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -1349,11 +1349,6 @@ submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer, return result; } -int ehci_detect(struct ehci_host *ehci) -{ - return usb_host_detect(&ehci->host); -} - struct ehci_host *ehci_register(struct device_d *dev, struct ehci_data *data) { struct usb_host *host; @@ -1411,13 +1406,6 @@ void ehci_unregister(struct ehci_host *ehci) free(ehci); } -static int ehci_dev_detect(struct device_d *dev) -{ - struct ehci_host *ehci = dev->priv; - - return ehci_detect(ehci); -} - static int ehci_probe(struct device_d *dev) { struct resource *iores; @@ -1457,7 +1445,6 @@ static int ehci_probe(struct device_d *dev) return PTR_ERR(ehci); dev->priv = ehci; - dev->detect = ehci_dev_detect; return 0; } diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 317000d650..caab2400d8 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -1389,13 +1389,6 @@ int xhci_deregister(struct xhci_ctrl *ctrl) return 0; } -static int xhci_detect(struct device_d *dev) -{ - struct xhci_ctrl *ctrl = dev->priv; - - return usb_host_detect(&ctrl->host); -} - /* * xHCI platform driver */ @@ -1417,7 +1410,6 @@ static int xhci_probe(struct device_d *dev) HC_LENGTH(xhci_readl(&(ctrl->hccr)->cr_capbase))); dev->priv = ctrl; - dev->detect = xhci_detect; return xhci_register(ctrl); } diff --git a/drivers/usb/imx/chipidea-imx.c b/drivers/usb/imx/chipidea-imx.c index b144f41437..7b87f302a9 100644 --- a/drivers/usb/imx/chipidea-imx.c +++ b/drivers/usb/imx/chipidea-imx.c @@ -178,13 +178,6 @@ static int imx_chipidea_probe_dt(struct imx_chipidea *ci) return 0; } -static int ci_ehci_detect(struct device_d *dev) -{ - struct imx_chipidea *ci = dev->priv; - - return ehci_detect(ci->ehci); -} - static int ci_set_mode(void *ctx, enum usb_dr_mode mode) { struct imx_chipidea *ci = ctx; @@ -205,8 +198,6 @@ static int ci_set_mode(void *ctx, enum usb_dr_mode mode) } ci->ehci = ehci; - - ci->dev->detect = ci_ehci_detect; } else { dev_err(ci->dev, "Host support not available\n"); return -ENODEV; diff --git a/drivers/usb/imx/imx-usb-misc.c b/drivers/usb/imx/imx-usb-misc.c index b663d073aa..c16b4cf0ab 100644 --- a/drivers/usb/imx/imx-usb-misc.c +++ b/drivers/usb/imx/imx-usb-misc.c @@ -353,7 +353,7 @@ static __maybe_unused struct imx_usb_misc_data mx5_data = { #define MX6_USB_CTRL(n) ((n) * 4) #define MX6_USB_CTRL_OVER_CUR_DIS (1 << 7) -#define MX6_USB_CTRL_OVER_CUR_ACT_HIGH (1 << 8) +#define MX6_USB_CTRL_OVER_CUR_ACT_LOW (1 << 8) #define MX6_USB_CTRL_PWR_POLARITY (1 << 9) static void mx6_hsic_pullup(unsigned long reg, int on) @@ -379,8 +379,15 @@ static __maybe_unused int mx6_initialize_usb_hw(void __iomem *base, int port, case 0: case 1: val = readl(base + MX6_USB_CTRL(port)); - if (flags & MXC_EHCI_DISABLE_OVERCURRENT) + if (flags & MXC_EHCI_DISABLE_OVERCURRENT) { val |= MX6_USB_CTRL_OVER_CUR_DIS; + } else { + val &= ~MX6_USB_CTRL_OVER_CUR_DIS; + if (flags & MXC_EHCI_OC_PIN_ACTIVE_LOW) + val |= MX6_USB_CTRL_OVER_CUR_ACT_LOW; + else + val &= ~MX6_USB_CTRL_OVER_CUR_ACT_LOW; + } if (flags & MXC_EHCI_PWR_PIN_ACTIVE_HIGH) val |= MX6_USB_CTRL_PWR_POLARITY; writel(val, base + MX6_USB_CTRL(port)); @@ -453,9 +460,9 @@ static int usbmisc_imx7d_init(void __iomem *base, int port, } else { reg &= ~MX6_USB_CTRL_OVER_CUR_DIS; if (flags & MXC_EHCI_OC_PIN_ACTIVE_LOW) - reg &= ~MX6_USB_CTRL_OVER_CUR_ACT_HIGH; + reg |= MX6_USB_CTRL_OVER_CUR_ACT_LOW; else - reg |= MX6_USB_CTRL_OVER_CUR_ACT_HIGH; + reg &= ~MX6_USB_CTRL_OVER_CUR_ACT_LOW; } if (flags & MXC_EHCI_PWR_PIN_ACTIVE_HIGH) reg |= MX6_USB_CTRL_PWR_POLARITY; diff --git a/drivers/usb/musb/musb_barebox.c b/drivers/usb/musb/musb_barebox.c index b1f38c35ac..f54ad5e6e4 100644 --- a/drivers/usb/musb/musb_barebox.c +++ b/drivers/usb/musb/musb_barebox.c @@ -121,13 +121,6 @@ submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer, return submit_urb(dev, urb, 100); } -static int musb_detect(struct device_d *dev) -{ - struct musb *musb = dev->priv; - - return usb_host_detect(&musb->host); -} - int musb_register(struct musb *musb) { struct usb_host *host; @@ -139,8 +132,6 @@ int musb_register(struct musb *musb) host->submit_control_msg = submit_control_msg; host->submit_bulk_msg = submit_bulk_msg; - musb->controller->priv = musb; - musb->controller->detect = musb_detect; usb_register_host(host); return 0; diff --git a/include/usb/ehci.h b/include/usb/ehci.h index 9ca9252eb1..327500d49a 100644 --- a/include/usb/ehci.h +++ b/include/usb/ehci.h @@ -24,7 +24,6 @@ struct ehci_host; #ifdef CONFIG_USB_EHCI struct ehci_host *ehci_register(struct device_d *dev, struct ehci_data *data); void ehci_unregister(struct ehci_host *); -int ehci_detect(struct ehci_host *ehci); #else static inline struct ehci_host *ehci_register(struct device_d *dev, struct ehci_data *data) @@ -35,11 +34,6 @@ static inline struct ehci_host *ehci_register(struct device_d *dev, static inline void ehci_unregister(struct ehci_host *ehci) { } - -static inline int ehci_detect(struct ehci_host *ehci) -{ - return 0; -} #endif #endif /* __USB_EHCI_H */ |