usb: chipidea: imx: Disable internal 60Mhz clock with ULPI PHY
authorFabien Lahoudere <fabien.lahoudere@collabora.co.uk>
Mon, 26 Sep 2016 11:14:20 +0000 (13:14 +0200)
committerPeter Chen <peter.chen@nxp.com>
Mon, 14 Nov 2016 02:03:40 +0000 (10:03 +0800)
The internal 60Mhz clock for host2 and host3 are useless in ULPI
phy mode, so we disable it when configuring ULPI PHY node for
those host.

Signed-off-by: Fabien Lahoudere <fabien.lahoudere@collabora.co.uk>
Signed-off-by: Peter Chen <peter.chen@nxp.com>
drivers/usb/chipidea/usbmisc_imx.c

index 11f51bd..e77a4ed 100644 (file)
@@ -53,6 +53,9 @@
 #define MX53_USB_CTRL_1_H3_XCVR_CLK_SEL_ULPI BIT(6)
 #define MX53_USB_UH2_CTRL_OFFSET       0x14
 #define MX53_USB_UH3_CTRL_OFFSET       0x18
+#define MX53_USB_CLKONOFF_CTRL_OFFSET  0x24
+#define MX53_USB_CLKONOFF_CTRL_H2_INT60CKOFF BIT(21)
+#define MX53_USB_CLKONOFF_CTRL_H3_INT60CKOFF BIT(22)
 #define MX53_BM_OVER_CUR_DIS_H1                BIT(5)
 #define MX53_BM_OVER_CUR_DIS_OTG       BIT(8)
 #define MX53_BM_OVER_CUR_DIS_UHx       BIT(30)
@@ -239,6 +242,10 @@ static int usbmisc_imx53_init(struct imx_usbmisc_data *data)
                        val = readl(reg) | MX53_USB_UHx_CTRL_WAKE_UP_EN
                                | MX53_USB_UHx_CTRL_ULPI_INT_EN;
                        writel(val, reg);
+                       /* Disable internal 60Mhz clock */
+                       reg = usbmisc->base + MX53_USB_CLKONOFF_CTRL_OFFSET;
+                       val = readl(reg) | MX53_USB_CLKONOFF_CTRL_H2_INT60CKOFF;
+                       writel(val, reg);
                }
                if (data->disable_oc) {
                        reg = usbmisc->base + MX53_USB_UH2_CTRL_OFFSET;
@@ -260,6 +267,10 @@ static int usbmisc_imx53_init(struct imx_usbmisc_data *data)
                        val = readl(reg) | MX53_USB_UHx_CTRL_WAKE_UP_EN
                                | MX53_USB_UHx_CTRL_ULPI_INT_EN;
                        writel(val, reg);
+                       /* Disable internal 60Mhz clock */
+                       reg = usbmisc->base + MX53_USB_CLKONOFF_CTRL_OFFSET;
+                       val = readl(reg) | MX53_USB_CLKONOFF_CTRL_H3_INT60CKOFF;
+                       writel(val, reg);
                }
                if (data->disable_oc) {
                        reg = usbmisc->base + MX53_USB_UH3_CTRL_OFFSET;