-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ARM: OMAP3: MUSB initialization for omap hw, v2
Create a generic board-file for initializing usb on omap2430 and omap3 boards. Patch modified by Tony to build the module based on CONFIG_USB_MUSB_SOC. Also merged in a patch adding the nop xceiv from Ajay Kumar Gupta <ajay.gupta@ti.com>. Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com> Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
- Loading branch information
Felipe Balbi
authored and
Tony Lindgren
committed
Mar 24, 2009
1 parent
828c707
commit 18cb7ac
Showing
8 changed files
with
209 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,187 @@ | ||
/* | ||
* linux/arch/arm/mach-omap2/usb-musb.c | ||
* | ||
* This file will contain the board specific details for the | ||
* MENTOR USB OTG controller on OMAP3430 | ||
* | ||
* Copyright (C) 2007-2008 Texas Instruments | ||
* Copyright (C) 2008 Nokia Corporation | ||
* Author: Vikram Pandita | ||
* | ||
* Generalization by: | ||
* Felipe Balbi <felipe.balbi@nokia.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
|
||
#include <linux/types.h> | ||
#include <linux/errno.h> | ||
#include <linux/delay.h> | ||
#include <linux/platform_device.h> | ||
#include <linux/clk.h> | ||
#include <linux/dma-mapping.h> | ||
#include <linux/io.h> | ||
|
||
#include <linux/usb/musb.h> | ||
|
||
#include <mach/hardware.h> | ||
#include <mach/irqs.h> | ||
#include <mach/pm.h> | ||
#include <mach/mux.h> | ||
#include <mach/usb.h> | ||
|
||
static struct resource musb_resources[] = { | ||
[0] = { /* start and end set dynamically */ | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
[1] = { /* general IRQ */ | ||
.start = INT_243X_HS_USB_MC, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
[2] = { /* DMA IRQ */ | ||
.start = INT_243X_HS_USB_DMA, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
}; | ||
|
||
static int clk_on; | ||
|
||
static int musb_set_clock(struct clk *clk, int state) | ||
{ | ||
if (state) { | ||
if (clk_on > 0) | ||
return -ENODEV; | ||
|
||
clk_enable(clk); | ||
clk_on = 1; | ||
} else { | ||
if (clk_on == 0) | ||
return -ENODEV; | ||
|
||
clk_disable(clk); | ||
clk_on = 0; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
static struct musb_hdrc_eps_bits musb_eps[] = { | ||
{ "ep1_tx", 10, }, | ||
{ "ep1_rx", 10, }, | ||
{ "ep2_tx", 9, }, | ||
{ "ep2_rx", 9, }, | ||
{ "ep3_tx", 3, }, | ||
{ "ep3_rx", 3, }, | ||
{ "ep4_tx", 3, }, | ||
{ "ep4_rx", 3, }, | ||
{ "ep5_tx", 3, }, | ||
{ "ep5_rx", 3, }, | ||
{ "ep6_tx", 3, }, | ||
{ "ep6_rx", 3, }, | ||
{ "ep7_tx", 3, }, | ||
{ "ep7_rx", 3, }, | ||
{ "ep8_tx", 2, }, | ||
{ "ep8_rx", 2, }, | ||
{ "ep9_tx", 2, }, | ||
{ "ep9_rx", 2, }, | ||
{ "ep10_tx", 2, }, | ||
{ "ep10_rx", 2, }, | ||
{ "ep11_tx", 2, }, | ||
{ "ep11_rx", 2, }, | ||
{ "ep12_tx", 2, }, | ||
{ "ep12_rx", 2, }, | ||
{ "ep13_tx", 2, }, | ||
{ "ep13_rx", 2, }, | ||
{ "ep14_tx", 2, }, | ||
{ "ep14_rx", 2, }, | ||
{ "ep15_tx", 2, }, | ||
{ "ep15_rx", 2, }, | ||
}; | ||
|
||
static struct musb_hdrc_config musb_config = { | ||
.multipoint = 1, | ||
.dyn_fifo = 1, | ||
.soft_con = 1, | ||
.dma = 1, | ||
.num_eps = 16, | ||
.dma_channels = 7, | ||
.dma_req_chan = (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), | ||
.ram_bits = 12, | ||
.eps_bits = musb_eps, | ||
}; | ||
|
||
static struct musb_hdrc_platform_data musb_plat = { | ||
#ifdef CONFIG_USB_MUSB_OTG | ||
.mode = MUSB_OTG, | ||
#elif defined(CONFIG_USB_MUSB_HDRC_HCD) | ||
.mode = MUSB_HOST, | ||
#elif defined(CONFIG_USB_GADGET_MUSB_HDRC) | ||
.mode = MUSB_PERIPHERAL, | ||
#endif | ||
/* .clock is set dynamically */ | ||
.set_clock = musb_set_clock, | ||
.config = &musb_config, | ||
|
||
/* REVISIT charge pump on TWL4030 can supply up to | ||
* 100 mA ... but this value is board-specific, like | ||
* "mode", and should be passed to usb_musb_init(). | ||
*/ | ||
.power = 50, /* up to 100 mA */ | ||
}; | ||
|
||
static u64 musb_dmamask = DMA_32BIT_MASK; | ||
|
||
static struct platform_device musb_device = { | ||
.name = "musb_hdrc", | ||
.id = -1, | ||
.dev = { | ||
.dma_mask = &musb_dmamask, | ||
.coherent_dma_mask = DMA_32BIT_MASK, | ||
.platform_data = &musb_plat, | ||
}, | ||
.num_resources = ARRAY_SIZE(musb_resources), | ||
.resource = musb_resources, | ||
}; | ||
|
||
#ifdef CONFIG_NOP_USB_XCEIV | ||
static u64 nop_xceiv_dmamask = DMA_32BIT_MASK; | ||
|
||
static struct platform_device nop_xceiv_device = { | ||
.name = "nop_usb_xceiv", | ||
.id = -1, | ||
.dev = { | ||
.dma_mask = &nop_xceiv_dmamask, | ||
.coherent_dma_mask = DMA_32BIT_MASK, | ||
.platform_data = NULL, | ||
}, | ||
}; | ||
#endif | ||
|
||
void __init usb_musb_init(void) | ||
{ | ||
if (cpu_is_omap243x()) | ||
musb_resources[0].start = OMAP243X_HS_BASE; | ||
else | ||
musb_resources[0].start = OMAP34XX_HSUSB_OTG_BASE; | ||
musb_resources[0].end = musb_resources[0].start + SZ_8K - 1; | ||
|
||
/* | ||
* REVISIT: This line can be removed once all the platforms using | ||
* musb_core.c have been converted to use use clkdev. | ||
*/ | ||
musb_plat.clock = "ick"; | ||
|
||
#ifdef CONFIG_NOP_USB_XCEIV | ||
if (platform_device_register(&nop_xceiv_device) < 0) { | ||
printk(KERN_ERR "Unable to register NOP-XCEIV device\n"); | ||
return; | ||
} | ||
#endif | ||
|
||
if (platform_device_register(&musb_device) < 0) { | ||
printk(KERN_ERR "Unable to register HS-USB (MUSB) device\n"); | ||
return; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters