高通平台USB host协议分析 之 一

先看一下内核对USB的配置
CONFIG_USB=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
CONFIG_USB_SUSPEND=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_EHSET=y
CONFIG_USB_EHCI_ROOT_HUB_TT=y
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
CONFIG_USB_EHCI_MSM_72K=y
CONFIG_USB_ACM=y
CONFIG_USB_STORAGE=y
CONFIG_USB_STORAGE_DATAFAB=y
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_ISD200=y
CONFIG_USB_STORAGE_USBAT=y
CONFIG_USB_STORAGE_SDDR09=y
CONFIG_USB_STORAGE_SDDR55=y
CONFIG_USB_STORAGE_JUMPSHOT=y
CONFIG_USB_STORAGE_ALAUDA=y
CONFIG_USB_STORAGE_ONETOUCH=y
CONFIG_USB_STORAGE_KARMA=y
CONFIG_USB_STORAGE_CYPRESS_ATACB=y
CONFIG_USB_EHSET_TEST_FIXTURE=y
CONFIG_USB_GADGET=y
CONFIG_USB_MSM_72K=y
CONFIG_USB_G_ANDROID=y
/kernel/driver/usb/host/Ehci-hcd.c

#ifdef CONFIG_USB_EHCI_MSM_72K   //通过包含文件的方式集成msm udc驱动的代码
#include "ehci-msm72k.c"
#define PLATFORM_DRIVER_PRESENT
#endif

...
...

static struct platform_driver *plat_drivers[]  = {

#if defined(CONFIG_USB_EHCI_MSM_72K) || defined(CONFIG_USB_EHCI_MSM)
     &ehci_msm_driver,
#endif

#ifdef CONFIG_USB_EHCI_MSM_HSIC
     &ehci_msm_hsic_driver,
#endif




#ifdef CONFIG_USB_EHCI_MSM
     &ehci_msm2_driver,
#endif

}

内核的一种一项配置
CONFIG_USB_EHCI_MSM_72K=y

可以看出高通的USB驱动采用的是EHCI的主机控制权规格. EHCI兼容OHCI和UHCI


static int __init ehci_hcd_init(void)
{
	int i, retval = 0;

	if (usb_disabled())
		return -ENODEV;

	printk(KERN_INFO "%s: " DRIVER_DESC "\n", hcd_name);
	set_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
	if (test_bit(USB_UHCI_LOADED, &usb_hcds_loaded) ||
			test_bit(USB_OHCI_LOADED, &usb_hcds_loaded))
		printk(KERN_WARNING "Warning! ehci_hcd should always be loaded"
				" before uhci_hcd and ohci_hcd, not after\n");

	pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n",
		 hcd_name,
		 sizeof(struct ehci_qh), sizeof(struct ehci_qtd),
		 sizeof(struct ehci_itd), sizeof(struct ehci_sitd));

#ifdef DEBUG
	ehci_debug_root = debugfs_create_dir("ehci", usb_debug_root);
	if (!ehci_debug_root) {
		retval = -ENOENT;
		goto err_debug;
	}
#endif

	for (i = 0; i < ARRAY_SIZE(plat_drivers); i++) {
		retval = platform_driver_register(plat_drivers[i]);  // 逐个注册上面定义的plat_drivers【】数组

		if (retval) {
			while (--i >= 0)
				platform_driver_unregister(plat_drivers[i]);
			goto clean0;
		}
	}
这是EHCI驱动的加载过程. 
从此我们可以看出EHC的公共文件如何和高通的UDC控制器驱动衔接并注册的。

转载于:https://www.cnblogs.com/yuzaipiaofei/archive/2013/01/14/4124139.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值