usb_disable_interface
禁掉一个接口的所有端点
usb_unbind_interface
解除接口绑定
usb_driver_claim_interface
把一个驱动绑定到一个接口上
本质上也就是驱动和设备的关系嘛
usb_driver_release_interface
将一个driver与device解除绑定
Pxa310 的OTG
在generic.c 中注册了一个名为 “pxa3xx-otg” 的平台设备
在pxa310_otg.c 中又注册了这样一个驱动
static struct platform_driver pxa_otg_driver = {
.driver = {
.name = "pxa3xx-otg",
},
.probe = pxa_otg_probe,
.remove = pxa_otg_remove,
#ifdef CONFIG_PM
.suspend= pxa_otg_suspend,
.resume = pxa_otg_resume,
#endif
};
当匹配的时候,直接probe
pxa_otg_probe
struct pxa_otg {
struct otg_transceiver otg;
struct usb_device *udev;
unsigned working:1;
struct work_struct work;
unsigned long todo;
# define WORK_UPDATE_OTG 0 /* update OTG state machine */
# define WORK_HOST_RESUME 1 /* resume host */
# define WORK_TIMER 2 /* timer fired */
# define WORK_STOP 3 /* don't resubmit */
struct pxa_otgc* otg_ctrl;
};
首先创建了上面的这个结构体
初始化otg以及otg控制者
otgc_interrupt_handle
判断出中断类型 进行相应的处理
OTG的本质就是用来判断在某一个时刻谁做主设备,谁做从设备
pxa_otg_set_host
将一个usb_bus 设置为host
usb_gadget 实际上代表的是usb 从设备
pxa_otg_set_peripheral 设置了gadget ,并对其进行了初试化
pxa3xx_update_otg
查看是否设置了host,a 主机是否设置了hnp
如果设置了就把控制OTG的相应位置位