您的位置 首页 资料

S5PV210(TQ210)学习笔记——USB HOST移植

在写USB驱动程序的时候意外发现默认状态下内核没有驱动S5PV210的USBHOST控制器,于是,我自己动手移植了一下S5PV210的USBHOST模块,S5P

在写USB驱动程序的时分意外发现默许状态下内核没有驱动S5PV210的USB HOST控制器,所以,我自己着手移植了一下S5PV210的USB HOST模块,S5PV210的USB HOST控制器跟S3C2440的有些不同,S5PV210一起支撑EHCI和OHCI接口(两者的差异自己谷歌搜一下),这样,S5PV210在功能上就彻底支撑USB2.0接口了。

Linux内核(以3.8.3为例)默许仅供给了ehci-s5p.c,可是供给了许多其他渠道的ohci源码,因而,咱们能够参阅ohci-exynos.c来编写自己的ohci-s5p.c,然后参阅ehci-s5p.c的代码安排方法增加到内核就能够了。下面废话少说,直接进入正题,开端USB HOST的EHCI和OHCI移植。

一 编写自己的ohci-s5p.c

咱们以ohci-exynos.c为模板,修正以合适咱们的S5P渠道。

(1)复制ohci-exynos.c为ohci-s5p.c

(2)替换一切的exynos为s5p

(3)因为有些当地是exynos4,所以,还需要将s5p4替换为s5p

(4)如果是3.4版别的内核不需要修正头文件,可是3.8.3内核对文件结构作了调整,仍是将ohci-exynos.h头文件改为:

  1. #include

二 修正drivers/usb/host目录下的相关文件

(1)翻开ohci-hcd.c文件,找到ohci-exynos,然后再其前面增加S5P渠道支撑,修正后如下:

  1. #ifdefCONFIG_USB_OHCI_S5P
  2. #include”ohci-s5p.c”
  3. #definePLATFORM_DRIVERs5p_ohci_driver
  4. #endif
  5. #ifdefCONFIG_USB_OHCI_EXYNOS
  6. #include”ohci-exynos.c”
  7. #definePLATFORM_DRIVERexynos_ohci_driver
  8. #endif

(2)翻开Kconfig文件,在config USB_OHCI_EXYNOS前面增加S5P装备支撑,修正后如下:

  1. configUSB_OHCI_S5P
  2. boolean”S5POHCIsupport”
  3. dependsonUSB_OHCI_HCD&&PLAT_S5P
  4. help
  5. EnablesupportfortheS5PSOCson-chipOHCIcontroller.
  6. configUSB_OHCI_EXYNOS
  7. boolean”OHCIsupportforSamsungEXYNOSSoCSeries”
  8. dependsonUSB_OHCI_HCD&&ARCH_EXYNOS
  9. help
  10. EnablesupportfortheSamsungExynosSOCson-chipOHCIcontroller.

三 编写usb-ohci-s5p.h头文件

(1)切换目录到include/linux/platform_data/,然后复制usb-exynos.h到usb-ohci-s5p.h。

(2)翻开usb-ohci-s5p.h,将一切的exynos4替换为s5p。

(3)将EXYNOS替换为S5P。

完结这三步,ohci的驱动就现已做好了,可是还需要增加渠道支撑。

四 装备渠道支撑

(1)切换到目录arch/arm/plat-samsung,然后翻开devs.c文件

(2)在CONFIG_S5P_DEV_USB_EHCI模块后边增加如下内容:

  1. #ifdefCONFIG_S5P_DEV_USB_OHCI
  2. staticstructresources5p_ohci_resource[]={
  3. [0]=DEFINE_RES_MEM(0xEC300000,SZ_256),
  4. [1]=DEFINE_RES_IRQ(S5P_IRQ_VIC1(23)),
  5. };
  6. structplatform_devices5p_device_ohci={
  7. .name=”s5p-ohci”,
  8. .id=-1,
  9. .num_resources=ARRAY_SIZE(s5p_ohci_resource),
  10. .resource=s5p_ohci_resource,
  11. .dev={
  12. .dma_mask=&samsung_device_dma_mask,
  13. .coherent_dma_mask=DMA_BIT_MASK(32),
  14. }
  15. };
  16. void__inits5p_ohci_set_platdata(structs5p_ohci_platdata*pd)
  17. {
  18. structs5p_ohci_platdata*npd;
  19. npd=s3c_set_platdata(pd,sizeof(structs5p_ohci_platdata),
  20. &s5p_device_ohci);
  21. if(!npd->phy_init)
  22. npd->phy_init=s5p_usb_phy_init;
  23. if(!npd->phy_exit)
  24. npd->phy_exit=s5p_usb_phy_exit;
  25. }
  26. #endif/*CONFIG_S5P_DEV_USB_OHCI*/

(2)增加ohci的头文件

  1. #include

(3)翻开Kconfig文件,在S5P_DEV_USB_EHCI模块后边增加OHCI支撑,修正后如下

  1. configS5P_DEV_USB_EHCI
  2. bool
  3. help
  4. CompileinplatformdevicedefinitionforUSBEHCI
  5. configS5P_DEV_USB_OHCI
  6. bool
  7. help
  8. CompileinplatformdevicedefinitionforUSBOHCI

(4)切换到arch/arm/mach-s5pv210目录,翻开mach-smdkv210.c,在smdkv210_devices的界说中增加ehci和ohci设备,如下:

  1. #ifdefCONFIG_S5P_DEV_USB_EHCI
  2. &s5p_device_ehci,
  3. #endif
  4. #ifdefCONFIG_S5P_DEV_USB_OHCI
  5. &s5p_device_ohci,
  6. #endif

然后界说platform_data文件,内容如下:

  1. #ifdefCONFIG_S5P_DEV_USB_EHCI
  2. staticstructs5p_ehci_platdatas5p_ehci_platdata;
  3. #endif
  4. #ifdefCONFIG_S5P_DEV_USB_OHCI
  5. staticstructs5p_ohci_platdatas5p_ohci_platdata;
  6. #endif

最终,设置platform_data,在smdkv210_machine_init函数中增加如下内容:

  1. #ifdefCONFIG_S5P_DEV_USB_EHCI
  2. s5p_ehci_set_platdata(&s5p_ehci_platdata);
  3. #endif
  4. #ifdefCONFIG_S5P_DEV_USB_OHCI
  5. s5p_ohci_set_platdata(&s5p_ohci_platdata);
  6. #endif

这样,就将渠道设备注册给内核了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/256202.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部