static int sw_ohci_hcd_resume(struct device *dev) { struct sw_hci_hcd *sw_ohci = NULL; struct usb_hcd *hcd = NULL; if (dev == NULL) return 0; hcd = dev_get_drvdata(dev); if (hcd == NULL) return 0; sw_ohci = dev->platform_data; if (sw_ohci == NULL) return 0; if (sw_ohci->probe == 0) return 0; pr_info("[%s]: resume\n", sw_ohci->hci_name); sw_start_ohc(sw_ohci); set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); ohci_finish_controller_resume(hcd); return 0; }
static int sw_ohci_hcd_resume(struct device *dev) { struct sw_hci_hcd *sw_ohci = NULL; struct usb_hcd *hcd = NULL; if(dev == NULL){ DMSG_PANIC("ERR: Argment is invalid\n"); return 0; } hcd = dev_get_drvdata(dev); if(hcd == NULL){ DMSG_PANIC("ERR: hcd is null\n"); return 0; } sw_ohci = dev->platform_data; if(sw_ohci == NULL){ DMSG_PANIC("ERR: sw_ohci is null\n"); return 0; } if(sw_ohci->probe == 0){ DMSG_PANIC("ERR: sw_ohci is disable, can not resume\n"); return 0; } if(sw_usb_suspend_disabled(sw_ohci->usbc_no)) return 0; DMSG_INFO("[%s]: sw_ohci_hcd_resume\n", sw_ohci->hci_name); sw_start_ohc(sw_ohci); set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); ohci_finish_controller_resume(hcd); return 0; }
static int sw_ohci_hcd_probe(struct platform_device *pdev) { int ret; int irq; struct resource *res; struct usb_hcd *hcd = NULL; struct sw_hci_hcd *sw_ohci = NULL; if (pdev == NULL) return -EINVAL; sw_ohci = pdev->dev.platform_data; if (!sw_ohci) return -ENODATA; sw_ohci->pdev = pdev; g_sw_ohci[sw_ohci->usbc_no] = sw_ohci; pr_debug("[%s%d]: probe, pdev->name: %s, pdev->id: %d, sw_ohci: 0x%p\n", SW_OHCI_NAME, sw_ohci->usbc_no, pdev->name, pdev->id, sw_ohci); /* get io resource */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { pr_err("%s: failed to get io memory\n", __func__); ret = -ENOMEM; goto err_get_iomem; } /*creat a usb_hcd for the ohci controller */ hcd = usb_create_hcd(&sw_ohci_hc_driver, &pdev->dev, SW_OHCI_NAME); if (!hcd) { pr_err("%s: failed to create hcd\n", __func__); ret = -ENOMEM; goto err_create_hcd; } hcd->rsrc_start = res->start; hcd->rsrc_len = resource_size(res); hcd->regs = ioremap(res->start, resource_size(res)); if (!hcd->regs) { pr_err("%s: failed to ioremap\n", __func__); ret = -ENOMEM; goto err_ioremap; } sw_ohci->hcd = hcd; /* ochi start to work */ sw_start_ohc(sw_ohci); ohci_hcd_init(hcd_to_ohci(hcd)); irq = platform_get_irq(pdev, 0); if (!irq) { pr_err("%s: failed to get irq\n", __func__); ret = -ENODEV; goto err_get_irq; } ret = usb_add_hcd(hcd, irq, IRQF_DISABLED | IRQF_SHARED); if (ret != 0) { pr_err("%s: failed to add hcd, rc=%d\n", __func__, ret); goto err_add_hcd; } platform_set_drvdata(pdev, hcd); pr_debug("[%s]: probe, clock: SW_VA_CCM_AHBMOD_OFFSET(0x%x), SW_VA_CCM_USBCLK_OFFSET(0x%x);" " usb: SW_USB_PMU_IRQ_ENABLE(0x%x), dram:(0x%x, 0x%x)\n", sw_ohci->hci_name, (u32) readl(SW_VA_CCM_IO_BASE + SW_VA_CCM_AHBMOD_OFFSET), (u32) readl(SW_VA_CCM_IO_BASE + SW_VA_CCM_USBCLK_OFFSET), (u32) readl(sw_ohci->usb_vbase + SW_USB_PMU_IRQ_ENABLE), (u32) readl(SW_VA_DRAM_IO_BASE + SW_SDRAM_REG_HPCR_USB1), (u32) readl(SW_VA_DRAM_IO_BASE + SW_SDRAM_REG_HPCR_USB2)); sw_ohci->probe = 1; /* Disable ohci, when driver probe */ if (sw_ohci->host_init_state == 0) { if (ohci_first_probe[sw_ohci->usbc_no]) { sw_usb_disable_ohci(sw_ohci->usbc_no); ohci_first_probe[sw_ohci->usbc_no]--; } } return 0; err_add_hcd: err_get_irq: iounmap(hcd->regs); err_ioremap: usb_put_hcd(hcd); err_get_iomem: err_create_hcd: sw_ohci->hcd = NULL; g_sw_ohci[sw_ohci->usbc_no] = NULL; return ret; }
static int sw_ohci_hcd_probe(struct platform_device *pdev) { int ret; struct usb_hcd *hcd = NULL; struct sw_hci_hcd *sw_ohci = NULL; if(pdev == NULL){ DMSG_PANIC("ERR: Argment is invaild\n"); return -1; } /* if usb is disabled, can not probe */ if (usb_disabled()){ DMSG_PANIC("ERR: usb hcd is disabled\n"); return -ENODEV; } sw_ohci = pdev->dev.platform_data; if(!sw_ohci){ DMSG_PANIC("ERR: sw_ohci is null\n"); ret = -ENOMEM; goto ERR1; } sw_ohci->pdev = pdev; g_sw_ohci[sw_ohci->usbc_no] = sw_ohci; DMSG_INFO("[%s%d]: probe, pdev->name: %s, pdev->id: %d, sw_ohci: 0x%p\n", ohci_name, sw_ohci->usbc_no, pdev->name, pdev->id, sw_ohci); /* get io resource */ sw_get_io_resource(pdev, sw_ohci); sw_ohci->ohci_base = sw_ohci->usb_vbase + SW_USB_OHCI_BASE_OFFSET; sw_ohci->ohci_reg_length = SW_USB_OHCI_LEN; /*creat a usb_hcd for the ohci controller*/ hcd = usb_create_hcd(&sw_ohci_hc_driver, &pdev->dev, ohci_name); if(!hcd){ DMSG_PANIC("ERR: usb_ohci_create_hcd failed\n"); ret = -ENOMEM; goto ERR2; } hcd->rsrc_start = (u32)sw_ohci->ohci_base; hcd->rsrc_len = sw_ohci->ohci_reg_length; hcd->regs = sw_ohci->ohci_base; sw_ohci->hcd = hcd; /* ochi start to work */ sw_start_ohc(sw_ohci); ohci_hcd_init(hcd_to_ohci(hcd)); ret = usb_add_hcd(hcd, sw_ohci->irq_no, IRQF_DISABLED | IRQF_SHARED); if(ret != 0){ DMSG_PANIC("ERR: usb_add_hcd failed\n"); ret = -ENOMEM; goto ERR3; } platform_set_drvdata(pdev, hcd); #ifdef SW_USB_OHCI_DEBUG DMSG_INFO("[%s]: probe, clock: 0x60(0x%x), 0xcc(0x%x); usb: 0x800(0x%x), dram:(0x%x, 0x%x)\n", sw_ohci->hci_name, (u32)USBC_Readl(sw_ohci->clock_vbase + 0x60), (u32)USBC_Readl(sw_ohci->clock_vbase + 0xcc), (u32)USBC_Readl(sw_ohci->usb_vbase + 0x800), (u32)USBC_Readl(sw_ohci->sdram_vbase + SW_SDRAM_REG_HPCR_USB1), (u32)USBC_Readl(sw_ohci->sdram_vbase + SW_SDRAM_REG_HPCR_USB2)); #endif sw_ohci->probe = 1; /* Disable ohci, when driver probe */ if(sw_ohci->host_init_state == 0){ if(ohci_first_probe[sw_ohci->usbc_no]){ sw_usb_disable_ohci(sw_ohci->usbc_no); ohci_first_probe[sw_ohci->usbc_no]--; } } return 0; ERR3: usb_put_hcd(hcd); ERR2: sw_ohci->hcd = NULL; g_sw_ohci[sw_ohci->usbc_no] = NULL; ERR1: return ret; }
static int sw_ohci_hcd_probe(struct platform_device *pdev) { int ret; struct usb_hcd *hcd = NULL; struct sw_hci_hcd *sw_ohci = NULL; if (pdev == NULL) return -EINVAL; /* if usb is disabled, can not probe */ if (usb_disabled()) return -ENODEV; sw_ohci = pdev->dev.platform_data; if (!sw_ohci) return -ENODATA; sw_ohci->pdev = pdev; g_sw_ohci[sw_ohci->usbc_no] = sw_ohci; pr_debug("[%s%d]: probe, pdev->name: %s, pdev->id: %d, sw_ohci: 0x%p\n", SW_OHCI_NAME, sw_ohci->usbc_no, pdev->name, pdev->id, sw_ohci); /* get io resource */ sw_get_io_resource(pdev, sw_ohci); sw_ohci->ohci_base = sw_ohci->usb_vbase + SW_USB_OHCI_BASE_OFFSET; sw_ohci->ohci_reg_length = SW_USB_OHCI_LEN; /*creat a usb_hcd for the ohci controller */ hcd = usb_create_hcd(&sw_ohci_hc_driver, &pdev->dev, SW_OHCI_NAME); if (!hcd) { pr_err("%s: failed to create hcd\n", __func__); ret = -ENOMEM; goto err_create_hcd; } hcd->rsrc_start = (u32) sw_ohci->ohci_base; hcd->rsrc_len = sw_ohci->ohci_reg_length; hcd->regs = sw_ohci->ohci_base; sw_ohci->hcd = hcd; /* ochi start to work */ sw_start_ohc(sw_ohci); ohci_hcd_init(hcd_to_ohci(hcd)); ret = usb_add_hcd(hcd, sw_ohci->irq_no, IRQF_DISABLED | IRQF_SHARED); if (ret != 0) { pr_err("%s: failed to add hcd, rc=%d\n", __func__, ret); goto err_add_hcd; } platform_set_drvdata(pdev, hcd); pr_debug("[%s]: probe, clock: 0x60(0x%x), 0xcc(0x%x);" " usb: 0x800(0x%x), dram:(0x%x, 0x%x)\n", sw_ohci->hci_name, (u32) USBC_Readl(sw_ohci->clock_vbase + 0x60), (u32) USBC_Readl(sw_ohci->clock_vbase + 0xcc), (u32) USBC_Readl(sw_ohci->usb_vbase + 0x800), (u32) USBC_Readl(sw_ohci->sdram_vbase + SW_SDRAM_REG_HPCR_USB1), (u32) USBC_Readl(sw_ohci->sdram_vbase + SW_SDRAM_REG_HPCR_USB2)); sw_ohci->probe = 1; /* Disable ohci, when driver probe */ if (sw_ohci->host_init_state == 0) { if (ohci_first_probe[sw_ohci->usbc_no]) { sw_usb_disable_ohci(sw_ohci->usbc_no); ohci_first_probe[sw_ohci->usbc_no]--; } } return 0; err_add_hcd: usb_put_hcd(hcd); err_create_hcd: sw_ohci->hcd = NULL; g_sw_ohci[sw_ohci->usbc_no] = NULL; return ret; }