void imapx200_serial_gpio_cfg(void) { #ifdef CONFIG_SERIAL_IMAPX_CH0 imapx_gpio_setcfg(IMAPX_GPA_RANGE(0, 3), IG_CTRL0, IG_NORMAL); #endif #ifdef CONFIG_SERIAL_IMAPX_CH1 imapx_gpio_setcfg(IMAPX_GPA_RANGE(4, 7), IG_CTRL0, IG_NORMAL); #endif #ifdef CONFIG_SERIAL_IMAPX_CH2 imapx_gpio_setcfg(IMAPX_GPB_RANGE(0, 1), IG_CTRL0, IG_NORMAL); #endif #ifdef CONFIG_SERIAL_IMAPX_CH3 imapx_gpio_setcfg(IMAPX_GPB_RANGE(2, 3), IG_CTRL0, IG_NORMAL); #endif }
static int usb_hcd_imapx200_probe(const struct hc_driver *driver,struct platform_device *pdev) { struct platform_data *pInfo; struct usb_hcd *hcd; struct resource *r_mem; int irq, valTmp, i, ret = 0; IMAP_EHCI_DEBUG("++usb_hcd_imapx200_probe\r\n"); pInfo = pdev->dev.platform_data; if(pInfo) { dev_err(&pdev->dev,"This Paramer <pdev> err !"); return -ENODEV; } irq = platform_get_irq(pdev,0); if(irq < 0) { dev_err(&pdev->dev,"no resource of IORESOURCE_IRQ"); return -ENXIO; } IMAP_EHCI_DEBUG("USB Resource IRQ is 0x%x \r\n",irq); r_mem = platform_get_resource(pdev,IORESOURCE_MEM,0); if(!r_mem) { dev_err(&pdev->dev,"no resource of IORESOURCE_MEM"); return -ENXIO; } hcd = usb_create_hcd(driver, &pdev->dev,dev_name(&pdev->dev)); if(!hcd) { dev_err(&pdev->dev,"usb_create_hcd failed!"); return -ENOMEM; } hcd->rsrc_start = r_mem->start; hcd->rsrc_len = r_mem->end - r_mem->start + 1; IMAP_EHCI_DEBUG("USB Resource MEM is 0x%x \r\n",r_mem->start); IMAP_EHCI_DEBUG("USB Resource len is 0x%x \r\n",hcd->rsrc_len); if(!request_mem_region(hcd->rsrc_start,hcd->rsrc_len,driver->description)) { dev_err(&pdev->dev,"request_mem_region failed"); ret = -EBUSY; goto err_put; } hcd->regs = ioremap(hcd->rsrc_start,hcd->rsrc_len); if(!hcd->regs) { dev_err(&pdev->dev,"ioremap_nocache failed"); ret = -ENOMEM; goto err_ioremap; } IMAP_EHCI_DEBUG("USB Register Map Address 0x%x \r\n",hcd->regs); // config OTG to HOST /* if not gadget, we initial otg as host */ #if defined(CONFIG_IG_OTG_HOST) valTmp = __raw_readl(rMEM_CFG); valTmp |= (1<<8); __raw_writel(valTmp,rMEM_CFG); imapx_gpio_setcfg(IMAPX_GPE15, IG_OUTPUT, IG_NORMAL); #endif // epll setting valTmp = __raw_readl(rDIV_CFG2); valTmp &=~(3<<16); valTmp |= (2<<16); valTmp &=~(0x1f<<18); valTmp |=(8<<18); __raw_writel(valTmp,rDIV_CFG2); // usb gate valTmp = __raw_readl(rPAD_CFG); valTmp &= ~0xe; __raw_writel(valTmp, rPAD_CFG); __raw_writel(0x0, rUSB_SRST); for(i=0;i<6000;i++); valTmp = __raw_readl(rPAD_CFG); valTmp |= 0xe; __raw_writel(valTmp,rPAD_CFG); mdelay(4); __raw_writel(0x5,rUSB_SRST); for(i=0;i<1000;i++); __raw_writel(0xf,rUSB_SRST); // OTG config /* if not gadget, we initial otg as host */ #if defined(CONFIG_IG_OTG_HOST) imapx_gpio_setpin(IMAPX_GPE15, 1, IG_NORMAL); #endif dev_set_drvdata(&pdev->dev,hcd); ret = usb_add_hcd(hcd,irq,IRQF_DISABLED); if(ret) goto err_add_hcd; IMAP_EHCI_DEBUG("--usb_hcd_imapx200_probe\r\n"); return ret; err_add_hcd: iounmap(hcd->regs); err_ioremap: release_mem_region(hcd->rsrc_start,hcd->rsrc_len); err_put: usb_put_hcd(hcd); return ret; }