Merge remote-tracking branch 'usb-chipidea-next/ci-for-usb-next'
[deliverable/linux.git] / drivers / usb / chipidea / usbmisc_imx.c
index ab8b027e8cc870615d399abb631849875db72427..20d02a5e418d936231fcb091e183c6f939d16701 100644 (file)
@@ -56,6 +56,7 @@
 
 #define MX6_BM_NON_BURST_SETTING       BIT(1)
 #define MX6_BM_OVER_CUR_DIS            BIT(7)
+#define MX6_BM_OVER_CUR_POLARITY       BIT(8)
 #define MX6_BM_WAKEUP_ENABLE           BIT(10)
 #define MX6_BM_ID_WAKEUP               BIT(16)
 #define MX6_BM_VBUS_WAKEUP             BIT(17)
@@ -266,11 +267,14 @@ static int usbmisc_imx6q_init(struct imx_usbmisc_data *data)
 
        spin_lock_irqsave(&usbmisc->lock, flags);
 
+       reg = readl(usbmisc->base + data->index * 4);
        if (data->disable_oc) {
-               reg = readl(usbmisc->base + data->index * 4);
-               writel(reg | MX6_BM_OVER_CUR_DIS,
-                       usbmisc->base + data->index * 4);
+               reg |= MX6_BM_OVER_CUR_DIS;
+       } else if (data->oc_polarity == 1) {
+               /* High active */
+               reg &= ~(MX6_BM_OVER_CUR_DIS | MX6_BM_OVER_CUR_POLARITY);
        }
+       writel(reg, usbmisc->base + data->index * 4);
 
        /* SoC non-burst setting */
        reg = readl(usbmisc->base + data->index * 4);
@@ -365,10 +369,14 @@ static int usbmisc_imx7d_init(struct imx_usbmisc_data *data)
                return -EINVAL;
 
        spin_lock_irqsave(&usbmisc->lock, flags);
+       reg = readl(usbmisc->base);
        if (data->disable_oc) {
-               reg = readl(usbmisc->base);
-               writel(reg | MX6_BM_OVER_CUR_DIS, usbmisc->base);
+               reg |= MX6_BM_OVER_CUR_DIS;
+       } else if (data->oc_polarity == 1) {
+               /* High active */
+               reg &= ~(MX6_BM_OVER_CUR_DIS | MX6_BM_OVER_CUR_POLARITY);
        }
+       writel(reg, usbmisc->base);
 
        reg = readl(usbmisc->base + MX7D_USBNC_USB_CTRL2);
        reg &= ~MX7D_USB_VBUS_WAKEUP_SOURCE_MASK;
@@ -492,6 +500,10 @@ static const struct of_device_id usbmisc_imx_dt_ids[] = {
                .compatible = "fsl,imx6ul-usbmisc",
                .data = &imx6sx_usbmisc_ops,
        },
+       {
+               .compatible = "fsl,imx7d-usbmisc",
+               .data = &imx7d_usbmisc_ops,
+       },
        { /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, usbmisc_imx_dt_ids);
This page took 0.024409 seconds and 5 git commands to generate.