usb: phy: mxs: Disable external charger detect in mxs_phy_hw_init()
authorAndrey Smirnov <andrew.smirnov@gmail.com>
Wed, 29 May 2019 06:59:48 +0000 (23:59 -0700)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Thu, 6 Jun 2019 10:51:57 +0000 (13:51 +0300)
Since this driver already handles changer detction state, copy the
workaround code currently residing in arch/arm/mach-imx/anatop.c into
this drier to consolidate the places modifying it.

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Cc: Chris Healy <cphealy@gmail.com>
Cc: Felipe Balbi <balbi@kernel.org>
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: NXP Linux Team <linux-imx@nxp.com>
Cc: linux-usb@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Reviewed-by: Peter Chen <peter.chen@nxp.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/phy/phy-mxs-usb.c

index 1b1bb0a..6fa16ab 100644 (file)
@@ -63,6 +63,7 @@
 
 #define ANADIG_USB1_CHRG_DETECT_SET            0x1b4
 #define ANADIG_USB1_CHRG_DETECT_CLR            0x1b8
+#define ANADIG_USB2_CHRG_DETECT_SET            0x214
 #define ANADIG_USB1_CHRG_DETECT_EN_B           BIT(20)
 #define ANADIG_USB1_CHRG_DETECT_CHK_CHRG_B     BIT(19)
 #define ANADIG_USB1_CHRG_DETECT_CHK_CONTACT    BIT(18)
@@ -250,6 +251,19 @@ static int mxs_phy_hw_init(struct mxs_phy *mxs_phy)
        if (mxs_phy->data->flags & MXS_PHY_NEED_IP_FIX)
                writel(BM_USBPHY_IP_FIX, base + HW_USBPHY_IP_SET);
 
+       if (mxs_phy->regmap_anatop) {
+               unsigned int reg = mxs_phy->port_id ?
+                       ANADIG_USB1_CHRG_DETECT_SET :
+                       ANADIG_USB2_CHRG_DETECT_SET;
+               /*
+                * The external charger detector needs to be disabled,
+                * or the signal at DP will be poor
+                */
+               regmap_write(mxs_phy->regmap_anatop, reg,
+                            ANADIG_USB1_CHRG_DETECT_EN_B |
+                            ANADIG_USB1_CHRG_DETECT_CHK_CHRG_B);
+       }
+
        mxs_phy_tx_init(mxs_phy);
 
        return 0;