From: Felipe Balbi Date: Tue, 18 Mar 2008 18:26:30 +0000 (+0200) Subject: USB: MUSB: Let board specific code handle clock initialization X-Git-Tag: v2.6.25-omap1~97 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=a57ed57998a87b6b07bf5d35b693d1d6978e49c4;p=linux-2.6-omap-h63xx.git USB: MUSB: Let board specific code handle clock initialization Instead of clk_get() in omap2430.c driver, we can let musb_core.c do it by setting the clock id in musb_platform_data structure. Signed-off-by: Felipe Balbi Signed-off-by: Tony Lindgren --- diff --git a/arch/arm/mach-omap2/board-2430sdp-usb.c b/arch/arm/mach-omap2/board-2430sdp-usb.c index 908a0c0be5b..7f4e017f30e 100644 --- a/arch/arm/mach-omap2/board-2430sdp-usb.c +++ b/arch/arm/mach-omap2/board-2430sdp-usb.c @@ -13,9 +13,11 @@ #include #include #include +#include #include #include +#include #include static struct resource musb_resources[] = { @@ -34,6 +36,29 @@ static struct resource musb_resources[] = { }, }; +static int usbhs_ick_on; + +static int musb_set_clock(struct clk *clk, int state) +{ + if (state) { + if (usbhs_ick_on > 0) + return -ENODEV; + + omap2_block_sleep(); + clk_enable(clk); + usbhs_ick_on = 1; + } else { + if (usbhs_ick_on == 0) + return -ENODEV; + + clk_disable(clk); + usbhs_ick_on = 0; + omap2_allow_sleep(); + } + + return 0; +} + static struct musb_hdrc_platform_data musb_plat = { #ifdef CONFIG_USB_MUSB_OTG .mode = MUSB_OTG, @@ -43,6 +68,8 @@ static struct musb_hdrc_platform_data musb_plat = { .mode = MUSB_PERIPHERAL, #endif .multipoint = 1, + .clock = "usbhs_ick", + .set_clock = musb_set_clock, }; static u64 musb_dmamask = ~(u32)0; diff --git a/arch/arm/mach-omap2/board-3430sdp-usb.c b/arch/arm/mach-omap2/board-3430sdp-usb.c index 77088b42878..81c9af7f9e0 100644 --- a/arch/arm/mach-omap2/board-3430sdp-usb.c +++ b/arch/arm/mach-omap2/board-3430sdp-usb.c @@ -16,11 +16,13 @@ #include #include #include +#include #include #include #include #include +#include #include #ifdef CONFIG_USB_MUSB_SOC @@ -40,6 +42,29 @@ static struct resource musb_resources[] = { }, }; +static int hsotgusb_ick_on; + +static int musb_set_clock(struct clk *clk, int state) +{ + if (state) { + if (hsotgusb_ick_on > 0) + return -ENODEV; + + omap2_block_sleep(); + clk_enable(clk); + hsotgusb_ick_on = 1; + } else { + if (hsotgusb_ick_on == 0) + return -ENODEV; + + clk_disable(clk); + hsotgusb_ick_on = 0; + omap2_allow_sleep(); + } + + return 0; +} + static struct musb_hdrc_platform_data musb_plat = { #ifdef CONFIG_USB_MUSB_OTG .mode = MUSB_OTG, @@ -49,8 +74,8 @@ static struct musb_hdrc_platform_data musb_plat = { .mode = MUSB_PERIPHERAL, #endif .multipoint = 1, - .clock = NULL, - .set_clock = NULL, + .clock = "hsotgusb_ick", + .set_clock = musb_set_clock, }; static u64 musb_dmamask = ~(u32)0; diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c index caae81b0bed..364d746d635 100644 --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c @@ -219,13 +219,7 @@ int __init musb_platform_init(struct musb *musb) #if defined(CONFIG_ARCH_OMAP2430) omap_cfg_reg(AE5_2430_USB0HS_STP); - /* get the clock */ - musb->clock = clk_get((struct device *)musb->controller, "usbhs_ick"); -#else - musb->clock = clk_get((struct device *)musb->controller, "hsotgusb_ick"); #endif - if(IS_ERR(musb->clock)) - return PTR_ERR(musb->clock); musb->xceiv = *xceiv; musb_platform_resume(musb); @@ -261,13 +255,11 @@ int musb_platform_suspend(struct musb *musb) OTG_SYSCONFIG_REG |= AUTOIDLE; /* enable auto idle */ musb->xceiv.set_suspend(&musb->xceiv, 1); - clk_disable(musb->clock); return 0; } int musb_platform_resume(struct musb *musb) { - clk_enable(musb->clock); musb->xceiv.set_suspend(&musb->xceiv, 0); OTG_FORCESTDBY_REG &= ~ENABLEFORCE; /* disable MSTANDBY */