staticvoid ssb_hcd_usb20wa(struct ssb_device *dev)
{ if (dev->id.coreid == SSB_DEV_USB20_HOST) { /* * USB 2.0 special considerations: * * In addition to the standard SSB reset sequence, the Host * Control Register must be programmed to bring the USB core * and various phy components out of reset.
*/
ssb_write32(dev, 0x200, 0x7ff);
ret = platform_device_add_resources(hci_dev, hci_res,
ARRAY_SIZE(hci_res)); if (ret) goto err_alloc; if (ohci)
ret = platform_device_add_data(hci_dev, &ohci_pdata, sizeof(ohci_pdata)); else
ret = platform_device_add_data(hci_dev, &ehci_pdata, sizeof(ehci_pdata)); if (ret) goto err_alloc;
ret = platform_device_add(hci_dev); if (ret) goto err_alloc;
/* USBcores are only connected on embedded devices. */
chipid_top = (dev->bus->chip_id & 0xFF00); if (chipid_top != 0x4700 && chipid_top != 0x5300) return -ENODEV;
/* TODO: Probably need checks here; is the core connected? */
if (dma_set_mask_and_coherent(dev->dma_dev, DMA_BIT_MASK(32))) return -EOPNOTSUPP;
usb_dev = devm_kzalloc(dev->dev, sizeof(struct ssb_hcd_device),
GFP_KERNEL); if (!usb_dev) return -ENOMEM;
/* We currently always attach SSB_DEV_USB11_HOSTDEV * as HOST OHCI. If we want to attach it as Client device, * we must branch here and call into the (yet to
* be written) Client mode driver. Same for remove(). */
usb_dev->enable_flags = ssb_hcd_init_chip(dev);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.