简介
上一节整体介绍了usb host框架,分析了其中的phy层。这一节我们分析usb 框架中的hcd层。Exynos 4412的USB 2.0的 Host Controller包含USB 2.0 EHCI Host Controller和 USB 1.1 OHCI Host Controller,我这里只讲EHCI Host Controller。
框架图
hcd层以stuct usb_hcd为核心。它主要有两个功能,一个是通过ehci_hcd去操作phy层,一个是通过hc_driver去操作上层传递下来的urb数据包。
hcd
先来看下hcd相关的dts
# exynos4.dtsi
exynos_usbphy: exynos-usbphy@125B0000 {
compatible = "samsung,exynos4210-usb2-phy";
reg = <0x125B0000 0x100>;
samsung,pmureg-phandle = <&pmu_system_controller>;
clocks = <&clock CLK_USB_DEVICE>, <&clock CLK_XUSBXTI>;
clock-names = "phy", "ref";
#phy-cells = <1>;
status = "disabled";
};
# exynos4412.dtsi
&exynos_usbphy {
compatible = "samsung,exynos4x12-usb2-phy";
samsung,sysreg-phandle = <&sys_reg>;
};
# exynos4412-tiny4412.dts
&exynos_usbphy {
status = "okay";
};
# exynos4.dtsi
ehci: ehci@12580000 {
compatible = "samsung,exynos4210-ehci";
reg = <0x12580000 0x100>;
interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clock CLK_USB_HOST>;
clock-names = "usbhost";
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
//exynos_ehci_get_phy中of_property_read_u32(child, "reg