S5PV210(TQ210)學習筆記——USB HOST移植
Linux內核(以3.8.3為例)默認僅提供了ehci-s5p.c,但是提供了很多其他平臺的ohci源碼,因此,我們可以參考ohci-exynos.c來編寫自己的ohci-s5p.c,然后參考ehci-s5p.c的代碼組織方式添加到內核就可以了。下面廢話少說,直接進入正題,開始USB HOST的EHCI和OHCI移植。
本文引用地址:http://m.butianyuan.cn/article/201611/322811.htm一 編寫自己的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頭文件改為:
- #include
二 修改drivers/usb/host目錄下的相關文件
(1)打開ohci-hcd.c文件,找到ohci-exynos,然后再其前面添加S5P平臺支持,修改后如下:
- #ifdefCONFIG_USB_OHCI_S5P
- #include"ohci-s5p.c"
- #definePLATFORM_DRIVERs5p_ohci_driver
- #endif
- #ifdefCONFIG_USB_OHCI_EXYNOS
- #include"ohci-exynos.c"
- #definePLATFORM_DRIVERexynos_ohci_driver
- #endif
- configUSB_OHCI_S5P
- boolean"S5POHCIsupport"
- dependsonUSB_OHCI_HCD&&PLAT_S5P
- help
- EnablesupportfortheS5PSOCson-chipOHCIcontroller.
- configUSB_OHCI_EXYNOS
- boolean"OHCIsupportforSamsungEXYNOSSoCSeries"
- dependsonUSB_OHCI_HCD&&ARCH_EXYNOS
- help
- 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模塊后面添加如下內容:
- #ifdefCONFIG_S5P_DEV_USB_OHCI
- staticstructresources5p_ohci_resource[]={
- [0]=DEFINE_RES_MEM(0xEC300000,SZ_256),
- [1]=DEFINE_RES_IRQ(S5P_IRQ_VIC1(23)),
- };
- structplatform_devices5p_device_ohci={
- .name="s5p-ohci",
- .id=-1,
- .num_resources=ARRAY_SIZE(s5p_ohci_resource),
- .resource=s5p_ohci_resource,
- .dev={
- .dma_mask=&samsung_device_dma_mask,
- .coherent_dma_mask=DMA_BIT_MASK(32),
- }
- };
- void__inits5p_ohci_set_platdata(structs5p_ohci_platdata*pd)
- {
- structs5p_ohci_platdata*npd;
- npd=s3c_set_platdata(pd,sizeof(structs5p_ohci_platdata),
- &s5p_device_ohci);
- if(!npd->phy_init)
- npd->phy_init=s5p_usb_phy_init;
- if(!npd->phy_exit)
- npd->phy_exit=s5p_usb_phy_exit;
- }
- #endif/*CONFIG_S5P_DEV_USB_OHCI*/
- #include
- configS5P_DEV_USB_EHCI
- bool
- help
- CompileinplatformdevicedefinitionforUSBEHCI
- configS5P_DEV_USB_OHCI
- bool
- help
- CompileinplatformdevicedefinitionforUSBOHCI
- #ifdefCONFIG_S5P_DEV_USB_EHCI
- &s5p_device_ehci,
- #endif
- #ifdefCONFIG_S5P_DEV_USB_OHCI
- &s5p_device_ohci,
- #endif
- #ifdefCONFIG_S5P_DEV_USB_EHCI
- staticstructs5p_ehci_platdatas5p_ehci_platdata;
- #endif
- #ifdefCONFIG_S5P_DEV_USB_OHCI
- staticstructs5p_ohci_platdatas5p_ohci_platdata;
- #endif
- #ifdefCONFIG_S5P_DEV_USB_EHCI
- s5p_ehci_set_platdata(&s5p_ehci_platdata);
- #endif
- #ifdefCONFIG_S5P_DEV_USB_OHCI
- s5p_ohci_set_platdata(&s5p_ohci_platdata);
- #endif
評論