|
亚瑟王 发表于 2013-10-22 10:53
修改arch/arm/mach-s3c2416/mach-tq2416.c下的tq2416_hsudc_gpio_init函数,添加如下代码试试:
s3c_gp ...
程序更改的地方为:
在drivers/usb/gadget/s3c-hsudc.c更改为:
static void s3c_hsudc_init_phy(void)
{
#if 1
u32 cfg;
printk("Tony Usb Device init OK!\n");
cfg = readl(S3C2416_PWRCFG) | S3C2416_PWRCFG_USBPHY;
writel(cfg, S3C2416_PWRCFG);
cfg = readl(S3C2416_URSTCON);
cfg |= (S3C2416_URSTCON_FUNCRST | S3C2416_URSTCON_PHYRST);
writel(cfg, S3C2416_URSTCON);
mdelay(1);
cfg = readl(S3C2416_URSTCON);
cfg &= ~(S3C2416_URSTCON_FUNCRST | S3C2416_URSTCON_PHYRST);
writel(cfg, S3C2416_URSTCON);
cfg = readl(S3C2416_PHYCTRL);
cfg &= ~(S3C2416_PHYCTRL_CLKSEL | S3C2416_PHYCTRL_DSPORT);
cfg |= (S3C2416_PHYCTRL_EXTCLK | S3C2416_PHYCTRL_PLLSEL);
writel(cfg, S3C2416_PHYCTRL);
cfg = readl(S3C2416_PHYPWR);
cfg &= ~(S3C2416_PHYPWR_FSUSPEND | S3C2416_PHYPWR_PLL_PWRDN |
S3C2416_PHYPWR_XO_ON | S3C2416_PHYPWR_PLL_REFCLK |
S3C2416_PHYPWR_ANALOG_PD);
cfg |= S3C2416_PHYPWR_COMMON_ON;
writel(cfg, S3C2416_PHYPWR);
cfg = readl(S3C2416_UCLKCON);
cfg |= (S3C2416_UCLKCON_DETECT_VBUS | S3C2416_UCLKCON_FUNC_CLKEN);
writel(cfg, S3C2416_UCLKCON);
#endif
#if 0
u32 cfg;
cfg = readl(S3C2443_PWRCFG) | S3C2443_PWRCFG_USBPHY;
writel(cfg, S3C2443_PWRCFG);
cfg = readl(S3C2443_URSTCON);
cfg |= (S3C2443_URSTCON_FUNCRST | S3C2443_URSTCON_PHYRST);
writel(cfg, S3C2443_URSTCON);
mdelay(1);
cfg = readl(S3C2443_URSTCON);
cfg &= ~(S3C2443_URSTCON_FUNCRST | S3C2443_URSTCON_PHYRST);
writel(cfg, S3C2443_URSTCON);
cfg = readl(S3C2443_PHYCTRL);
cfg &= ~(S3C2443_PHYCTRL_CLKSEL | S3C2443_PHYCTRL_DSPORT);
cfg |= (S3C2443_PHYCTRL_EXTCLK | S3C2443_PHYCTRL_PLLSEL);
writel(cfg, S3C2443_PHYCTRL);
cfg = readl(S3C2443_PHYPWR);
cfg &= ~(S3C2443_PHYPWR_FSUSPEND | S3C2443_PHYPWR_PLL_PWRDN |
S3C2443_PHYPWR_XO_ON | S3C2443_PHYPWR_PLL_REFCLK |
S3C2443_PHYPWR_ANALOG_PD);
cfg |= S3C2443_PHYPWR_COMMON_ON;
writel(cfg, S3C2443_PHYPWR);
cfg = readl(S3C2443_UCLKCON);
cfg |= (S3C2443_UCLKCON_DETECT_VBUS | S3C2443_UCLKCON_FUNC_CLKEN |
S3C2443_UCLKCON_TCLKEN);
writel(cfg, S3C2443_UCLKCON);
#endif
}
在arch/arm/mach-s3c2416/mach-tq2416.c 更改为:
void tq2416_hsudc_gpio_init(void)
{
s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_UP);
s3c_gpio_setpull(S3C2410_GPF(2), S3C_GPIO_PULL_NONE);
s3c_gpio_cfgpin(S3C2410_GPH(14), S3C_GPIO_SFN(1));
s3c_gpio_cfgpin(S3C2410_GPF(2), S3C_GPIO_SFN(2));
s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 0);
}
内核里面我是否需要重新配置,或者说使用默认的配置即可?望回复。
|
|