From: Miguel Aguilar <miguel.agui...@ridgerun.com> Modifies the DaVinci USB driver in order to support the DM365 platform.
This patch needs the patch called "DaVinci: DM365: Correct USB source clock" by Sandeep Paulraj to work properly because it fixes the USB clock source for DM365. Signed-off-by: Miguel Aguilar <miguel.agui...@ridgerun.com> --- drivers/usb/musb/Kconfig | 4 ++-- drivers/usb/musb/davinci.c | 20 ++++++++++++++++---- drivers/usb/musb/davinci.h | 1 + 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig index 803adcb..9878a64 100644 --- a/drivers/usb/musb/Kconfig +++ b/drivers/usb/musb/Kconfig @@ -23,7 +23,7 @@ config USB_MUSB_HDRC or the USB host role, or both. Texas Instruments familiies using this IP include DaVinci - (35x, 644x ...), OMAP 243x, OMAP 3, and TUSB 6010. + (35x, 36x, 644x ...), OMAP 243x, OMAP 3, and TUSB 6010. Analog Devices parts using this IP include Blackfin BF54x, BF525 and BF527. @@ -42,7 +42,7 @@ config USB_MUSB_SOC default y if (BF54x && !BF544) default y if (BF52x && !BF522 && !BF523) -comment "DaVinci 35x and 644x USB support" +comment "DaVinci 35x, 36x, 644x USB support" depends on USB_MUSB_HDRC && ARCH_DAVINCI comment "OMAP 243x high speed USB support" diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c index e16ff60..f5374f9 100644 --- a/drivers/usb/musb/davinci.c +++ b/drivers/usb/musb/davinci.c @@ -62,10 +62,19 @@ static inline void phy_on(void) { u32 phy_ctrl = __raw_readl(USB_PHY_CTRL); - /* power everything up; start the on-chip PHY and its PLL */ - phy_ctrl &= ~(USBPHY_OSCPDWN | USBPHY_OTGPDWN | USBPHY_PHYPDWN); - phy_ctrl |= USBPHY_SESNDEN | USBPHY_VBDTCTEN | USBPHY_PHYPLLON; - __raw_writel(phy_ctrl, USB_PHY_CTRL); + if (cpu_is_davinci_dm365()) + /* + * DM365 PHYCLKFREQ field [15:12] is set to 2 + * to get clock from 24MHz crystal + */ + __raw_writel(USBPHY_SESNDEN | USBPHY_VBDTCTEN | + USBPHY_CLKFREQ_24MHZ, USB_PHY_CTRL); + else { + /* power everything up; start the on-chip PHY and its PLL */ + phy_ctrl &= ~(USBPHY_OSCPDWN | USBPHY_OTGPDWN | USBPHY_PHYPDWN); + phy_ctrl |= USBPHY_SESNDEN | USBPHY_VBDTCTEN | USBPHY_PHYPLLON; + __raw_writel(phy_ctrl, USB_PHY_CTRL); + } /* wait for PLL to lock before proceeding */ while ((__raw_readl(USB_PHY_CTRL) & USBPHY_PHYCLKGD) == 0) @@ -189,6 +198,8 @@ static void davinci_source_power(struct musb *musb, int is_on, int immediate) if (immediate) vbus_state = is_on; #endif + if (cpu_is_davinci_dm365()) + gpio_set_value(33, is_on); } static void davinci_set_vbus(struct musb *musb, int is_on) @@ -427,6 +438,7 @@ int __init musb_platform_init(struct musb *musb) } __raw_writel(deepsleep, DM355_DEEPSLEEP); } + /* reset the controller */ musb_writel(tibase, DAVINCI_USB_CTRL_REG, 0x1); diff --git a/drivers/usb/musb/davinci.h b/drivers/usb/musb/davinci.h index 046c844..ceabb36 100644 --- a/drivers/usb/musb/davinci.h +++ b/drivers/usb/musb/davinci.h @@ -16,6 +16,7 @@ /* Integrated highspeed/otg PHY */ #define USBPHY_CTL_PADDR (DAVINCI_SYSTEM_MODULE_BASE + 0x34) +#define USBPHY_CLKFREQ_24MHZ BIT(13) #define USBPHY_DATAPOL BIT(11) /* (dm355) switch D+/D- */ #define USBPHY_PHYCLKGD BIT(8) #define USBPHY_SESNDEN BIT(7) /* v(sess_end) comparator */ -- 1.6.0.4 _______________________________________________ Davinci-linux-open-source mailing list Davinci-linux-open-source@linux.davincidsp.com http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source