void __init da8xx_board_usb_init(const short pins[], struct da8xx_ohci_root_hub *usb11_pdata) { int ret; struct gpio_based *gpio = (usb11_pdata->type == GPIO_BASED) ? &usb11_pdata->method.gpio_method : NULL; ret = davinci_cfg_reg_list(pins); if (ret) { pr_warning("%s: USB 1.1 PinMux setup failed: %d\n", __func__, ret); return; } if (usb11_pdata->type == GPIO_BASED) { ret = gpio_request_one(gpio->power_control_pin, GPIOF_OUT_INIT_LOW, "ON_BD_USB_DRV"); if (ret) { pr_err("%s: failed to request GPIO for USB 1.1 port " "power control: %d\n", __func__, ret); return; } ret = gpio_request_one(gpio->over_current_indicator, GPIOF_IN, "ON_BD_USB_OVC"); if (ret) { pr_err("%s: failed to request GPIO for USB 1.1 port " "over-current indicator: %d\n", __func__, ret); goto usb11_setup_oc_fail; } } usb11_pdata->set_power = da8xx_usb_set_power; usb11_pdata->get_power = da8xx_usb_get_power; usb11_pdata->get_oci = da8xx_usb_get_oci; usb11_pdata->ocic_notify = da8xx_usb_ocic_notify; /* TPS2087 switch @ 5V */ usb11_pdata->potpgt = (3 + 1) / 2; ret = da8xx_register_usb11(usb11_pdata); if (ret) { pr_warning("%s: USB 1.1 registration failed: %d\n", __func__, ret); goto usb11_setup_fail; } return; usb11_setup_fail: if (usb11_pdata->type == GPIO_BASED) gpio_free(gpio->over_current_indicator); usb11_setup_oc_fail: if (usb11_pdata->type == GPIO_BASED) gpio_free(gpio->power_control_pin); }
static __init void omapl138_hawk_usb_init(void) { int ret; u32 cfgchip2; ret = davinci_cfg_reg_list(da850_hawk_usb11_pins); if (ret) { pr_warning("%s: USB 1.1 PinMux setup failed: %d\n", __func__, ret); return; } /* Setup the Ref. clock frequency for the HAWK at 24 MHz. */ cfgchip2 = __raw_readl(DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG)); cfgchip2 &= ~CFGCHIP2_REFFREQ; cfgchip2 |= CFGCHIP2_REFFREQ_24MHZ; __raw_writel(cfgchip2, DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG)); ret = gpio_request_one(DA850_USB1_VBUS_PIN, GPIOF_DIR_OUT, "USB1 VBUS"); if (ret < 0) { pr_err("%s: failed to request GPIO for USB 1.1 port " "power control: %d\n", __func__, ret); return; } ret = gpio_request_one(DA850_USB1_OC_PIN, GPIOF_DIR_IN, "USB1 OC"); if (ret < 0) { pr_err("%s: failed to request GPIO for USB 1.1 port " "over-current indicator: %d\n", __func__, ret); goto usb11_setup_oc_fail; } ret = da8xx_register_usb11(&omapl138_hawk_usb11_pdata); if (ret) { pr_warning("%s: USB 1.1 registration failed: %d\n", __func__, ret); goto usb11_setup_fail; } return; usb11_setup_fail: gpio_free(DA850_USB1_OC_PIN); usb11_setup_oc_fail: gpio_free(DA850_USB1_VBUS_PIN); }
static __init void da830_evm_usb_init(void) { u32 cfgchip2; int ret; /* * Set up USB clock/mode in the CFGCHIP2 register. * FYI: CFGCHIP2 is 0x0000ef00 initially. */ cfgchip2 = __raw_readl(DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG)); /* USB2.0 PHY reference clock is 24 MHz */ cfgchip2 &= ~CFGCHIP2_REFFREQ; cfgchip2 |= CFGCHIP2_REFFREQ_24MHZ; /* * Select internal reference clock for USB 2.0 PHY * and use it as a clock source for USB 1.1 PHY * (this is the default setting anyway). */ cfgchip2 &= ~CFGCHIP2_USB1PHYCLKMUX; cfgchip2 |= CFGCHIP2_USB2PHYCLKMUX; /* * We have to override VBUS/ID signals when MUSB is configured into the * host-only mode -- ID pin will float if no cable is connected, so the * controller won't be able to drive VBUS thinking that it's a B-device. * Otherwise, we want to use the OTG mode and enable VBUS comparators. */ cfgchip2 &= ~CFGCHIP2_OTGMODE; #ifdef CONFIG_USB_MUSB_HOST cfgchip2 |= CFGCHIP2_FORCE_HOST; #else cfgchip2 |= CFGCHIP2_SESENDEN | CFGCHIP2_VBDTCTEN; #endif __raw_writel(cfgchip2, DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG)); /* USB_REFCLKIN is not used. */ ret = davinci_cfg_reg(DA830_USB0_DRVVBUS); if (ret) pr_warning("%s: USB 2.0 PinMux setup failed: %d\n", __func__, ret); else { /* * TPS2065 switch @ 5V supplies 1 A (sustains 1.5 A), * with the power on to power good time of 3 ms. */ ret = da8xx_register_usb20(1000, 3); if (ret) pr_warning("%s: USB 2.0 registration failed: %d\n", __func__, ret); } ret = davinci_cfg_reg_list(da830_evm_usb11_pins); if (ret) { pr_warning("%s: USB 1.1 PinMux setup failed: %d\n", __func__, ret); return; } ret = gpio_request(ON_BD_USB_DRV, "ON_BD_USB_DRV"); if (ret) { printk(KERN_ERR "%s: failed to request GPIO for USB 1.1 port " "power control: %d\n", __func__, ret); return; } gpio_direction_output(ON_BD_USB_DRV, 0); ret = gpio_request(ON_BD_USB_OVC, "ON_BD_USB_OVC"); if (ret) { printk(KERN_ERR "%s: failed to request GPIO for USB 1.1 port " "over-current indicator: %d\n", __func__, ret); return; } gpio_direction_input(ON_BD_USB_OVC); ret = da8xx_register_usb11(&da830_evm_usb11_pdata); if (ret) pr_warning("%s: USB 1.1 registration failed: %d\n", __func__, ret); }