diff options
Diffstat (limited to 'arch/arm/mach-msm/board-msm7x30.c')
| -rw-r--r-- | arch/arm/mach-msm/board-msm7x30.c | 40 | 
1 files changed, 37 insertions, 3 deletions
diff --git a/arch/arm/mach-msm/board-msm7x30.c b/arch/arm/mach-msm/board-msm7x30.c index f9af5a46e8b..245884319d2 100644 --- a/arch/arm/mach-msm/board-msm7x30.c +++ b/arch/arm/mach-msm/board-msm7x30.c @@ -30,6 +30,7 @@  #include <asm/memory.h>  #include <asm/setup.h> +#include <mach/clk.h>  #include <mach/msm_iomap.h>  #include <mach/dma.h> @@ -39,8 +40,7 @@  #include "proc_comm.h"  #include "common.h" -static void __init msm7x30_fixup(struct tag *tag, char **cmdline, -		struct meminfo *mi) +static void __init msm7x30_fixup(struct tag *tag, char **cmdline)  {  	for (; tag->hdr.size; tag = tag_next(tag))  		if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) { @@ -60,10 +60,44 @@ static int hsusb_phy_init_seq[] = {  	-1  }; +static int hsusb_link_clk_reset(struct clk *link_clk, bool assert) +{ +	int ret; + +	if (assert) { +		ret = clk_reset(link_clk, CLK_RESET_ASSERT); +		if (ret) +			pr_err("usb hs_clk assert failed\n"); +	} else { +		ret = clk_reset(link_clk, CLK_RESET_DEASSERT); +		if (ret) +			pr_err("usb hs_clk deassert failed\n"); +	} +	return ret; +} + +static int hsusb_phy_clk_reset(struct clk *phy_clk) +{ +	int ret; + +	ret = clk_reset(phy_clk, CLK_RESET_ASSERT); +	if (ret) { +		pr_err("usb phy clk assert failed\n"); +		return ret; +	} +	usleep_range(10000, 12000); +	ret = clk_reset(phy_clk, CLK_RESET_DEASSERT); +	if (ret) +		pr_err("usb phy clk deassert failed\n"); +	return ret; +} +  static struct msm_otg_platform_data msm_otg_pdata = {  	.phy_init_seq		= hsusb_phy_init_seq, -	.mode                   = USB_PERIPHERAL, +	.mode                   = USB_DR_MODE_PERIPHERAL,  	.otg_control		= OTG_PHY_CONTROL, +	.link_clk_reset		= hsusb_link_clk_reset, +	.phy_clk_reset		= hsusb_phy_clk_reset,  };  struct msm_gpiomux_config msm_gpiomux_configs[GPIOMUX_NGPIOS] = {  | 
