歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

OK6410、2.6.36.2 USB_host 支持

硬件環境:OK6410 A板。    主機環境:XP, VMware Ubuntu10.10。  移植內核版本:Linux2.6.36.2。  驅動參考:飛凌提供的內核。

對於USB-HOST功能:

其實2410的OHCI驅動已經相當完善,但是由於OK6410來說,還需要一個48M 的時鐘信號產生,才能使能USB-HOST功能

     第一步,在mach-ok6410.c裡面添加頭文件

#include <plat/regs-usb-hsotg-phy.h>
#include <plat/clock.h>

然後在任意一個地方添加

  1. #ifdef CONFIG_USB_SUPPORT   
  2. void s3c_hsotg_phy_config(int enable) {  
  3.  u32 val;  
  4.  if (enable) {  
  5.   __raw_writel(0x0, S3C_PHYPWR); /* Power up */  
  6.   val = __raw_readl(S3C_PHYCLK);  
  7.   val &= ~S3C_PHYCLK_CLKSEL_MASK;  
  8.   __raw_writel(val, S3C_PHYCLK);  
  9.   __raw_writel(0x1, S3C_RSTCON);  
  10.   udelay(5);  
  11.   __raw_writel(0x0, S3C_RSTCON); /* Finish the reset */  
  12.   udelay(5);  
  13.  } else {  
  14.   __raw_writel(0x19, S3C_PHYPWR); /* Power down */  
  15.  }  
  16. }  
  17. EXPORT_SYMBOL(s3c_hsotg_phy_config);  
  18. #endif  

這段代碼是參靠飛凌的,而這段代碼實現的就是一個輸出48M時鐘信號的開關,當enable=1時,執行enable部分的代碼,使能48M時鐘信號輸出,當enable=0時,執行else部分的代碼,就禁止48M時鐘信號,最後還需要在ok6410_machine_init(void)單板初始化函數裡面添加48M時鐘使能信號:

s3c_hsotg_phy_config(1);

以及在硬件初始化函數 *ok6410_devices[] __initdata裡面添加&s3c_device_usb_hsotg,默認下*ok6410_devices[] __initdata裡面已經添加了&s3c_device_ohci,所以我們不需要再添加了。

而對於這個函數的實現是在/drivers/usb/目錄下的相應的驅動函數裡定義的,不需要去自己寫。

最後就是在MAKE MENUCONFIG時,選中USB選項裡面的相關項目就行了:

 DEVICE DRIVERS--------->

              <*>   Support for Host-side USB                             

      [*]     USB verbose debug messages                                
      [*]     USB announce new devices                                  
             *** Miscellaneous USB options ***                        
      [*]     USB device filesystem (DEPRECATED)                       
      [*]     USB device class-devices (DEPRECATED) 

      <*>   OHCI HCD support  

好了,到這裡,就完成了 OK6410的LINUX2.6.39.2的USB-OTG功能了,編譯,運行,試試,呵呵,如果你們想看相關驅動代碼的話,就直接到/linux2.6.39.2/drivers/usb/core以及/linux2.6.39.2/drivers/usb/host裡面看看。

Copyright © Linux教程網 All Rights Reserved