summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorIgor Opaniuk <igor.opaniuk@toradex.com>2020-09-30 16:42:38 +0300
committerAndrejs Cainikovs <andrejs.cainikovs@toradex.com>2022-07-20 14:55:33 +0200
commit40f30ddbda5c99eabf9f2760fc12ee630700f24b (patch)
tree0beca84a34fbc963bef2c37a0db43846bb8e9143 /drivers/usb
parentfd021b41a5d6d50237f75334fa8d86ce81591cd7 (diff)
usb: gadget: ci_udc: introduce board_ci_udc_phy_mode
Introduce board_ci_udc_phy_mode() weak function which provides opportunity to re-define the logic of OTG role detection, and use board specific way of generation of USB cable states (for example, when USB ID pin is connected to a GPIO pin). Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com> (cherry picked from commit 3007faba2321fd89ba7afe7e6b184c1c4defcbb8)
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/ci_udc.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/usb/gadget/ci_udc.c b/drivers/usb/gadget/ci_udc.c
index 5f8fc7d651..318f746b05 100644
--- a/drivers/usb/gadget/ci_udc.c
+++ b/drivers/usb/gadget/ci_udc.c
@@ -1357,21 +1357,22 @@ static int ci_udc_otg_clk_init(struct udevice *dev,
return 0;
}
-static int ci_udc_otg_phy_mode(struct udevice *dev)
+int __weak board_ci_udc_phy_mode(void *__iomem phy_base, int phy_off)
{
- struct ci_udc_priv_data *priv = dev_get_priv(dev);
-
void *__iomem phy_ctrl, *__iomem phy_status;
- void *__iomem phy_base = (void *__iomem)devfdt_get_addr(&priv->otgdev);
u32 val;
if (is_mx6() || is_mx7ulp() || is_imx8() || is_imx8ulp()) {
+ printf("We are in is_imx8\n");
phy_base = (void __iomem *)fdtdec_get_addr_size_auto_noparent(gd->fdt_blob,
- priv->phy_off,
+ phy_off,
"reg", 0, NULL, false);
- if ((fdt_addr_t)phy_base == FDT_ADDR_T_NONE)
+ if ((fdt_addr_t)phy_base == FDT_ADDR_T_NONE) {
+ printf("(fdt_addr_t)phy_base == fdt_addr_t_none)\n");
return -EINVAL;
+ }
+ printf("Getting phy ctrl\n");
phy_ctrl = (void __iomem *)(phy_base + USBPHY_CTRL);
val = readl(phy_ctrl);
if (val & USBPHY_CTRL_OTG_ID)
@@ -1391,6 +1392,15 @@ static int ci_udc_otg_phy_mode(struct udevice *dev)
}
}
+
+static int ci_udc_otg_phy_mode(struct udevice *dev)
+{
+ struct ci_udc_priv_data *priv = dev_get_priv(dev);
+
+ void *__iomem phy_base = (void *__iomem)devfdt_get_addr(&priv->otgdev);
+ return board_ci_udc_phy_mode(phy_base, priv->phy_off);
+}
+
static int ci_udc_otg_ofdata_to_platdata(struct udevice *dev)
{
struct ci_udc_priv_data *priv = dev_get_priv(dev);