歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OK6410、2.6.36.2 USB_host 支持

OK6410、2.6.36.2 USB_host 支持

日期:2017/3/1 10:21:48   编辑:Linux編程

硬件環境: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