omap2: add USB initialization for tusb6010
Based on Kalle's and Tony's patches. Some variables re-organized and unused code removed. Signed-off-by: Kalle Valo <kalle.valo@iki.fi> Signed-off-by: Francisco Alecrim <francisco.alecrim@openbossa.org> [tony@atomide.com: this is needed to fix the related tusb6010 DMA API changes] Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
committed by
Tony Lindgren
parent
d660f9a26e
commit
97b9ad1633
@@ -37,6 +37,103 @@ static int slot1_cover_open;
|
|||||||
static int slot2_cover_open;
|
static int slot2_cover_open;
|
||||||
static struct device *mmc_device;
|
static struct device *mmc_device;
|
||||||
|
|
||||||
|
#define TUSB6010_ASYNC_CS 1
|
||||||
|
#define TUSB6010_SYNC_CS 4
|
||||||
|
#define TUSB6010_GPIO_INT 58
|
||||||
|
#define TUSB6010_GPIO_ENABLE 0
|
||||||
|
#define TUSB6010_DMACHAN 0x3f
|
||||||
|
|
||||||
|
#if defined(CONFIG_USB_TUSB6010) || \
|
||||||
|
defined(CONFIG_USB_TUSB6010_MODULE)
|
||||||
|
/*
|
||||||
|
* Enable or disable power to TUSB6010. When enabling, turn on 3.3 V and
|
||||||
|
* 1.5 V voltage regulators of PM companion chip. Companion chip will then
|
||||||
|
* provide then PGOOD signal to TUSB6010 which will release it from reset.
|
||||||
|
*/
|
||||||
|
static int tusb_set_power(int state)
|
||||||
|
{
|
||||||
|
int i, retval = 0;
|
||||||
|
|
||||||
|
if (state) {
|
||||||
|
gpio_set_value(TUSB6010_GPIO_ENABLE, 1);
|
||||||
|
msleep(1);
|
||||||
|
|
||||||
|
/* Wait until TUSB6010 pulls INT pin down */
|
||||||
|
i = 100;
|
||||||
|
while (i && gpio_get_value(TUSB6010_GPIO_INT)) {
|
||||||
|
msleep(1);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!i) {
|
||||||
|
printk(KERN_ERR "tusb: powerup failed\n");
|
||||||
|
retval = -ENODEV;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
gpio_set_value(TUSB6010_GPIO_ENABLE, 0);
|
||||||
|
msleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct musb_hdrc_config musb_config = {
|
||||||
|
.multipoint = 1,
|
||||||
|
.dyn_fifo = 1,
|
||||||
|
.num_eps = 16,
|
||||||
|
.ram_bits = 12,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct musb_hdrc_platform_data tusb_data = {
|
||||||
|
#if defined(CONFIG_USB_MUSB_OTG)
|
||||||
|
.mode = MUSB_OTG,
|
||||||
|
#elif defined(CONFIG_USB_MUSB_PERIPHERAL)
|
||||||
|
.mode = MUSB_PERIPHERAL,
|
||||||
|
#else /* defined(CONFIG_USB_MUSB_HOST) */
|
||||||
|
.mode = MUSB_HOST,
|
||||||
|
#endif
|
||||||
|
.set_power = tusb_set_power,
|
||||||
|
.min_power = 25, /* x2 = 50 mA drawn from VBUS as peripheral */
|
||||||
|
.power = 100, /* Max 100 mA VBUS for host mode */
|
||||||
|
.config = &musb_config,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __init n8x0_usb_init(void)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
static char announce[] __initdata = KERN_INFO "TUSB 6010\n";
|
||||||
|
|
||||||
|
/* PM companion chip power control pin */
|
||||||
|
ret = gpio_request(TUSB6010_GPIO_ENABLE, "TUSB6010 enable");
|
||||||
|
if (ret != 0) {
|
||||||
|
printk(KERN_ERR "Could not get TUSB power GPIO%i\n",
|
||||||
|
TUSB6010_GPIO_ENABLE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
gpio_direction_output(TUSB6010_GPIO_ENABLE, 0);
|
||||||
|
|
||||||
|
tusb_set_power(0);
|
||||||
|
|
||||||
|
ret = tusb6010_setup_interface(&tusb_data, TUSB6010_REFCLK_19, 2,
|
||||||
|
TUSB6010_ASYNC_CS, TUSB6010_SYNC_CS,
|
||||||
|
TUSB6010_GPIO_INT, TUSB6010_DMACHAN);
|
||||||
|
if (ret != 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
printk(announce);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
err:
|
||||||
|
gpio_free(TUSB6010_GPIO_ENABLE);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
static void __init n8x0_usb_init(void) {}
|
||||||
|
|
||||||
|
#endif /*CONFIG_USB_TUSB6010 */
|
||||||
|
|
||||||
|
|
||||||
static struct omap2_mcspi_device_config p54spi_mcspi_config = {
|
static struct omap2_mcspi_device_config p54spi_mcspi_config = {
|
||||||
.turbo_mode = 0,
|
.turbo_mode = 0,
|
||||||
.single_channel = 1,
|
.single_channel = 1,
|
||||||
@@ -562,6 +659,7 @@ static void __init n8x0_init_machine(void)
|
|||||||
n8x0_menelaus_init();
|
n8x0_menelaus_init();
|
||||||
n8x0_onenand_init();
|
n8x0_onenand_init();
|
||||||
n8x0_mmc_init();
|
n8x0_mmc_init();
|
||||||
|
n8x0_usb_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(NOKIA_N800, "Nokia N800")
|
MACHINE_START(NOKIA_N800, "Nokia N800")
|
||||||
|
@@ -1841,6 +1841,7 @@ static struct omap_clk omap2420_clks[] = {
|
|||||||
CLK(NULL, "aes_ick", &aes_ick, CK_242X),
|
CLK(NULL, "aes_ick", &aes_ick, CK_242X),
|
||||||
CLK(NULL, "pka_ick", &pka_ick, CK_242X),
|
CLK(NULL, "pka_ick", &pka_ick, CK_242X),
|
||||||
CLK(NULL, "usb_fck", &usb_fck, CK_242X),
|
CLK(NULL, "usb_fck", &usb_fck, CK_242X),
|
||||||
|
CLK("musb_hdrc", "fck", &osc_ck, CK_242X),
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user