USB学习总结1—s3c6410的USB驱动修改

整理USB的内容的内容已经几天了,写点东西作为总结。全部内容分三部分,第一部分主要内容是USB驱动在Linux系统中的具体实现方法;第二部分参考《Linux设备驱动程序(第三版)》中的内容总结USB驱动的结构;最后,总结一下USB协议。

 

一、             首先是对USB设备的得支持。

1、viarch/arm/mach-s3c64xx/mach-mini6410.c
在mach-mini6410.c中添加该函数,实现对时钟的初始化。在USB host 初始化的过程中没有对OTG时钟未进行初始化,所以在使用USB供能前先添加次设置。

 

#ifdefCONFIG_USB_SUPPORT

/* InitializesOTG Phy. to output 48M clock */

voids3c_otg_phy_config(int enable) {

       u32 val;

 

       if (enable) {

              __raw_writel(0x0, S3C_PHYPWR);     /* Power up */

 

              val = __raw_readl(S3C_PHYCLK);

              val &=~S3C_PHYCLK_CLKSEL_MASK;

              __raw_writel(val, S3C_PHYCLK);

 

              __raw_writel(0x1, S3C_RSTCON);

              udelay(5);

              __raw_writel(0x0, S3C_RSTCON);     /* Finish the reset */

              udelay(5);

       } else {

              __raw_writel(0x19, S3C_PHYPWR);   /* Power down */

       }

}

EXPORT_SYMBOL(s3c_otg_phy_config);

#endif

 

2、vi drivers/usb/host/ohci-s3c2410.c
ohci-s3c2410.c文件下存放的是S3C平台下对OHCI的所有操作。

 

Line26后添加内容:

#define valid_port(idx) ((idx) == 1 || (idx) == 2)

#ifdef CONFIG_MACH_MINI6410
extern void s3c_otg_phy_config(int enable);
#endif
/* clock device associated with the hcd */

static struct clk *clk;
static struct clk *otg_clk, *usb_clk;

/* forward definitions */
Line48,static voids3c2410_start_hc()函数中添加时钟初始化函数,如下

 

static voids3c2410_start_hc(struct platform_device *dev, struct usb_hcd *hcd)

{

。。。

 

       clk_enable(otg_clk);

#ifdefCONFIG_MACH_MINI6410

       s3c_otg_phy_config(1);

#endif

 

       clk_enable(usb_clk);

       。。。

}


以上修改经验证在3.1.6内核同样适用


你可能感兴趣的:(c,linux,struct,UP,平台,output)