summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2021-02-22 10:39:39 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2021-02-22 10:39:39 +0100
commita97e0b863eefb4a1025e39429cabf67b3ea34b72 (patch)
tree06b7aeb8e72da446529522ad3b4450b3d287e837
parent2b1f426e511bf5b41c84d05ec09949ebd5dc216e (diff)
parent9ccf645bfaee366acd8dbd6b270717dae94f5347 (diff)
downloadbarebox-a97e0b863eefb4a1025e39429cabf67b3ea34b72.tar.gz
barebox-a97e0b863eefb4a1025e39429cabf67b3ea34b72.tar.xz
Merge branch 'for-next/usb'
-rw-r--r--commands/usbgadget.c2
-rw-r--r--drivers/usb/core/usb.c14
-rw-r--r--drivers/usb/dwc2/host.c9
-rw-r--r--drivers/usb/host/ehci-atmel.c8
-rw-r--r--drivers/usb/host/ehci-hcd.c13
-rw-r--r--drivers/usb/host/xhci.c8
-rw-r--r--drivers/usb/imx/chipidea-imx.c9
-rw-r--r--drivers/usb/imx/imx-usb-misc.c15
-rw-r--r--drivers/usb/musb/musb_barebox.c9
-rw-r--r--include/usb/ehci.h6
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 */