Esempio n. 1
0
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
}
Esempio n. 2
0
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;
}