static int __init mv_usb_init(void) { int status, dev, num, isHost; char* name_ptr; struct platform_device* mv_usb_dev_ptr; num = mvCtrlUsbMaxGet(); for(dev=0; dev<num; dev++) { #if defined(CONFIG_MV78200) || defined(CONFIG_MV632X) if (MV_FALSE == mvSocUnitIsMappedToThisCpu(USB0+dev)) { printk(KERN_INFO"USB %d is not mapped to this CPU\n", dev); continue; } #endif if (MV_FALSE == mvCtrlPwrClckGet(USB_UNIT_ID, dev)) { printk("\nWarning Integrated USB %d is Powered Off\n",dev); continue; } isHost = mvIsUsbHost & (1 << dev); if(isHost) { name_ptr = usb_host_name; } else { name_ptr = usb_dev_name; } status = mvUsbInit(dev, isHost); mv_usb_dev_ptr = kmalloc(sizeof(struct platform_device), GFP_KERNEL); if(mv_usb_dev_ptr == NULL) { printk("Can't allocate platform_device structure - %d bytes\n", sizeof(struct platform_device) ); return 1; } memset(mv_usb_dev_ptr, 0, sizeof(struct platform_device) ); mv_usb_dev_ptr->name = name_ptr; mv_usb_dev_ptr->id = PCI_VENDOR_ID_MARVELL | (MV_USB_VERSION << 16) | (dev << 24); mv_usb_dev_ptr->num_resources = 2; mv_usb_dev_ptr->resource = (struct resource*)kmalloc(2*sizeof(struct resource), GFP_KERNEL); if(mv_usb_dev_ptr->resource == NULL) { printk("Can't allocate 2 resource structure - %d bytes\n", 2*sizeof(struct resource) ); return 1; } memset(mv_usb_dev_ptr->resource, 0, 2*sizeof(struct resource)); mv_usb_dev_ptr->resource[0].start = ( INTER_REGS_BASE | MV_USB_CORE_CAP_LENGTH_REG(dev)); mv_usb_dev_ptr->resource[0].end = ((INTER_REGS_BASE | MV_USB_CORE_CAP_LENGTH_REG(dev)) + 4096); mv_usb_dev_ptr->resource[0].flags = IORESOURCE_DMA; mv_usb_dev_ptr->resource[1].start = IRQ_USB_CTRL(dev); mv_usb_dev_ptr->resource[1].flags = IORESOURCE_IRQ; mv_usb_dev_ptr->dev.dma_mask = kmalloc(sizeof(u64), GFP_KERNEL); *mv_usb_dev_ptr->dev.dma_mask = MV_USB_DMA_MASK; mv_usb_dev_ptr->dev.coherent_dma_mask = ~0; mv_usb_dev_ptr->dev.release = mv_usb_release; strncpy(mv_usb_dev_ptr->dev.bus_id, usb_bus_name, BUS_ID_SIZE); printk("Marvell USB EHCI %s controller #%d: %p\n", isHost ? "Host" : "Gadget", dev, mv_usb_dev_ptr); status = platform_device_register(mv_usb_dev_ptr); if (status) { printk("Can't register Marvell USB EHCI controller #%d, status=%d\n", dev, status); return status; } } return 0; }
static int __init mv_usb_init(void) { int status, dev, num, isHost; char* name_ptr; struct platform_device* mv_usb_dev_ptr; if(mvCtrlModelRevGet() == MV_5181L_A0_ID) { /* metal problem */ return 0; } num = mvCtrlUsbMaxGet(); for(dev=0; dev<num; dev++) { isHost = mvIsUsbHost & (1 << dev); if(isHost) { name_ptr = usb_host_name; } else { name_ptr = usb_dev_name; } status = mvUsbInit(dev, isHost); mv_usb_dev_ptr = kmalloc(sizeof(struct platform_device), GFP_KERNEL); if(mv_usb_dev_ptr == NULL) { printk("Can't allocate platform_device structure - %d bytes\n", sizeof(struct platform_device) ); return 1; } memset(mv_usb_dev_ptr, 0, sizeof(struct platform_device) ); mv_usb_dev_ptr->name = name_ptr; mv_usb_dev_ptr->id = MV_USB_DEVICE_ID | (dev << 16); mv_usb_dev_ptr->num_resources = 2; mv_usb_dev_ptr->resource = (struct resource*)kmalloc(2*sizeof(struct resource), GFP_KERNEL); if(mv_usb_dev_ptr->resource == NULL) { printk("Can't allocate 2 resource structure - %d bytes\n", 2*sizeof(struct resource) ); return 1; } memset(mv_usb_dev_ptr->resource, 0, 2*sizeof(struct resource)); mv_usb_dev_ptr->resource[0].start = ( INTER_REGS_BASE | MV_USB_CORE_CAP_LENGTH_REG(dev)); mv_usb_dev_ptr->resource[0].end = ((INTER_REGS_BASE | MV_USB_CORE_CAP_LENGTH_REG(dev)) + 4096); mv_usb_dev_ptr->resource[0].flags = IORESOURCE_MEM; mv_usb_dev_ptr->resource[1].start = IRQ_USB_CTRL(dev); mv_usb_dev_ptr->resource[1].flags = IORESOURCE_IRQ; mv_usb_dev_ptr->dev.dma_mask = kmalloc(sizeof(u64), GFP_KERNEL); *mv_usb_dev_ptr->dev.dma_mask = MV_USB_DMA_MASK; mv_usb_dev_ptr->dev.coherent_dma_mask = ~0; mv_usb_dev_ptr->dev.release = mv_usb_release; strncpy(mv_usb_dev_ptr->dev.bus_id, usb_bus_name, BUS_ID_SIZE); printk("Marvell USB EHCI %s controller #%d: %p\n", isHost ? "Host" : "Gadget", dev, mv_usb_dev_ptr); status = platform_device_register(mv_usb_dev_ptr); if (status) { printk("Can't register Marvell USB EHCI controller #%d, status=%d\n", dev, status); return status; } } return 0; }