mpc5200 psc3怎样用作usb?
psc3可复用为usb, 所以GPIO的配置寄存器里面肯定需要将它配置为usb口。 然后它还需要有一个独立的驱动程序么, 还是说利用现有的usb控制器驱动程序, 在kernel中改改什么地方就好了。 mpc5200的data sheet中并没有特别的说明psc3用作usb是具体需要配置什么。
在平台设备结构体数组中 struct platform_device ppc_sys_platform_devices[],
psc3的部分我改成如下形式
[MPC52xx_PSC3] = {
.name = "ppc-soc-ohci",
.id = 1,
.num_resources = 2,
.dev.dma_mask = &mpc52xx_dma_mask,
.dev.coherent_dma_mask = 0xffffffffULL,
.resource = (struct resource[]) {
{
.start = 0x2400,
.end = 0x249f,
.flags = IORESOURCE_MEM,
},
{
.start = MPC52xx_PSC3_IRQ,
.end = MPC52xx_PSC3_IRQ,
.flags = IORESOURCE_IRQ,
},
},
},
原先.name 对应的驱动名称是 mpc52xx-psc, 只有uart模式的驱动。 现在我把它改成和cpu的primary usb 接口一样的驱动, 这样编译后, 提示信息为:
new USB bus registered, assigned bus number 2
irq 42, io mem 0xf0002400
init err (fa000000 0000)
can't start PPC-SOC USB
startup error -75
USB bus 2 deregistered
failed with error -75
对usb驱动程序进行跟踪, 在ohci-hcd.c 文件中的一下代码中出现了init err提示, 错误产生的原因可能是什么呢?
if ((ohci_readl (ohci, &ohci->regs->fminterval) & 0x3fff0000) == 0
|| !ohci_readl (ohci, &ohci->regs->periodicstart)) {
if (!(ohci->flags & OHCI_QUIRK_INITRESET)) {
ohci->flags |= OHCI_QUIRK_INITRESET;
ohci_dbg (ohci, "enabling initreset quirk\n");
goto retry;
}
spin_unlock_irq (&ohci->lock);
ohci_err (ohci, "init err (%08x %04x)\n",
ohci_readl (ohci, &ohci->regs->fminterval),
ohci_readl (ohci, &ohci->regs->periodicstart));
return -EOVERFLOW;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
psc3可复用为usb