diff options
| author | Felipe Balbi <felipe.balbi@nokia.com> | 2008-08-08 05:40:54 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-08-13 20:33:01 -0400 |
| commit | ca6d1b1333bc2e61e37982de1f28d8604c232414 (patch) | |
| tree | 6675d284fc932e9125fc7fd083eebb7f0a1d5695 | |
| parent | f362a47560070ec0aaf68ac6b45901eeed1c844f (diff) | |
usb: musb: pass configuration specifics via pdata
Use platform_data to pass musb configuration-specific
details to musb driver.
This patch will prevent that other platforms selecting
HAVE_CLK and enabling musb won't break tree building.
The other parts of it will come when linux-omap merge
up more omap2/3 board-files.
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
Acked-by: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
| -rw-r--r-- | arch/arm/mach-omap2/usb-tusb6010.c | 1 | ||||
| -rw-r--r-- | drivers/usb/musb/musb_core.c | 37 | ||||
| -rw-r--r-- | drivers/usb/musb/musb_core.h | 14 | ||||
| -rw-r--r-- | drivers/usb/musb/tusb6010.h | 169 | ||||
| -rw-r--r-- | include/linux/usb/musb.h | 38 |
5 files changed, 51 insertions, 208 deletions
diff --git a/arch/arm/mach-omap2/usb-tusb6010.c b/arch/arm/mach-omap2/usb-tusb6010.c index 1607c941d95f..10ef464d6be7 100644 --- a/arch/arm/mach-omap2/usb-tusb6010.c +++ b/arch/arm/mach-omap2/usb-tusb6010.c | |||
| @@ -317,7 +317,6 @@ tusb6010_setup_interface(struct musb_hdrc_platform_data *data, | |||
| 317 | printk(error, 6, status); | 317 | printk(error, 6, status); |
| 318 | return -ENODEV; | 318 | return -ENODEV; |
| 319 | } | 319 | } |
| 320 | data->multipoint = 1; | ||
| 321 | tusb_device.dev.platform_data = data; | 320 | tusb_device.dev.platform_data = data; |
| 322 | 321 | ||
| 323 | /* REVISIT let the driver know what DMA channels work */ | 322 | /* REVISIT let the driver know what DMA channels work */ |
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 462586d06da9..d68ec6daf335 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
| @@ -990,12 +990,6 @@ static void musb_shutdown(struct platform_device *pdev) | |||
| 990 | * We don't currently use dynamic fifo setup capability to do anything | 990 | * We don't currently use dynamic fifo setup capability to do anything |
| 991 | * more than selecting one of a bunch of predefined configurations. | 991 | * more than selecting one of a bunch of predefined configurations. |
| 992 | */ | 992 | */ |
| 993 | #ifdef MUSB_C_DYNFIFO_DEF | ||
| 994 | #define can_dynfifo() 1 | ||
| 995 | #else | ||
| 996 | #define can_dynfifo() 0 | ||
| 997 | #endif | ||
| 998 | |||
| 999 | #if defined(CONFIG_USB_TUSB6010) || \ | 993 | #if defined(CONFIG_USB_TUSB6010) || \ |
| 1000 | defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP34XX) | 994 | defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP34XX) |
| 1001 | static ushort __initdata fifo_mode = 4; | 995 | static ushort __initdata fifo_mode = 4; |
| @@ -1008,8 +1002,6 @@ module_param(fifo_mode, ushort, 0); | |||
| 1008 | MODULE_PARM_DESC(fifo_mode, "initial endpoint configuration"); | 1002 | MODULE_PARM_DESC(fifo_mode, "initial endpoint configuration"); |
| 1009 | 1003 | ||
| 1010 | 1004 | ||
| 1011 | #define DYN_FIFO_SIZE (1<<(MUSB_C_RAM_BITS+2)) | ||
| 1012 | |||
| 1013 | enum fifo_style { FIFO_RXTX, FIFO_TX, FIFO_RX } __attribute__ ((packed)); | 1005 | enum fifo_style { FIFO_RXTX, FIFO_TX, FIFO_RX } __attribute__ ((packed)); |
| 1014 | enum buf_mode { BUF_SINGLE, BUF_DOUBLE } __attribute__ ((packed)); | 1006 | enum buf_mode { BUF_SINGLE, BUF_DOUBLE } __attribute__ ((packed)); |
| 1015 | 1007 | ||
| @@ -1119,11 +1111,12 @@ fifo_setup(struct musb *musb, struct musb_hw_ep *hw_ep, | |||
| 1119 | 1111 | ||
| 1120 | c_size = size - 3; | 1112 | c_size = size - 3; |
| 1121 | if (cfg->mode == BUF_DOUBLE) { | 1113 | if (cfg->mode == BUF_DOUBLE) { |
| 1122 | if ((offset + (maxpacket << 1)) > DYN_FIFO_SIZE) | 1114 | if ((offset + (maxpacket << 1)) > |
| 1115 | (1 << (musb->config->ram_bits + 2))) | ||
| 1123 | return -EMSGSIZE; | 1116 | return -EMSGSIZE; |
| 1124 | c_size |= MUSB_FIFOSZ_DPB; | 1117 | c_size |= MUSB_FIFOSZ_DPB; |
| 1125 | } else { | 1118 | } else { |
| 1126 | if ((offset + maxpacket) > DYN_FIFO_SIZE) | 1119 | if ((offset + maxpacket) > (1 << (musb->config->ram_bits + 2))) |
| 1127 | return -EMSGSIZE; | 1120 | return -EMSGSIZE; |
| 1128 | } | 1121 | } |
| 1129 | 1122 | ||
| @@ -1219,13 +1212,13 @@ static int __init ep_config_from_table(struct musb *musb) | |||
| 1219 | /* assert(offset > 0) */ | 1212 | /* assert(offset > 0) */ |
| 1220 | 1213 | ||
| 1221 | /* NOTE: for RTL versions >= 1.400 EPINFO and RAMINFO would | 1214 | /* NOTE: for RTL versions >= 1.400 EPINFO and RAMINFO would |
| 1222 | * be better than static MUSB_C_NUM_EPS and DYN_FIFO_SIZE... | 1215 | * be better than static musb->config->num_eps and DYN_FIFO_SIZE... |
| 1223 | */ | 1216 | */ |
| 1224 | 1217 | ||
| 1225 | for (i = 0; i < n; i++) { | 1218 | for (i = 0; i < n; i++) { |
| 1226 | u8 epn = cfg->hw_ep_num; | 1219 | u8 epn = cfg->hw_ep_num; |
| 1227 | 1220 | ||
| 1228 | if (epn >= MUSB_C_NUM_EPS) { | 1221 | if (epn >= musb->config->num_eps) { |
| 1229 | pr_debug("%s: invalid ep %d\n", | 1222 | pr_debug("%s: invalid ep %d\n", |
| 1230 | musb_driver_name, epn); | 1223 | musb_driver_name, epn); |
| 1231 | continue; | 1224 | continue; |
| @@ -1242,8 +1235,8 @@ static int __init ep_config_from_table(struct musb *musb) | |||
| 1242 | 1235 | ||
| 1243 | printk(KERN_DEBUG "%s: %d/%d max ep, %d/%d memory\n", | 1236 | printk(KERN_DEBUG "%s: %d/%d max ep, %d/%d memory\n", |
| 1244 | musb_driver_name, | 1237 | musb_driver_name, |
| 1245 | n + 1, MUSB_C_NUM_EPS * 2 - 1, | 1238 | n + 1, musb->config->num_eps * 2 - 1, |
| 1246 | offset, DYN_FIFO_SIZE); | 1239 | offset, (1 << (musb->config->ram_bits + 2))); |
| 1247 | 1240 | ||
| 1248 | #ifdef CONFIG_USB_MUSB_HDRC_HCD | 1241 | #ifdef CONFIG_USB_MUSB_HDRC_HCD |
| 1249 | if (!musb->bulk_ep) { | 1242 | if (!musb->bulk_ep) { |
| @@ -1270,7 +1263,7 @@ static int __init ep_config_from_hw(struct musb *musb) | |||
| 1270 | 1263 | ||
| 1271 | /* FIXME pick up ep0 maxpacket size */ | 1264 | /* FIXME pick up ep0 maxpacket size */ |
| 1272 | 1265 | ||
| 1273 | for (epnum = 1; epnum < MUSB_C_NUM_EPS; epnum++) { | 1266 | for (epnum = 1; epnum < musb->config->num_eps; epnum++) { |
| 1274 | musb_ep_select(mbase, epnum); | 1267 | musb_ep_select(mbase, epnum); |
| 1275 | hw_ep = musb->endpoints + epnum; | 1268 | hw_ep = musb->endpoints + epnum; |
| 1276 | 1269 | ||
| @@ -1424,14 +1417,14 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb) | |||
| 1424 | musb->epmask = 1; | 1417 | musb->epmask = 1; |
| 1425 | 1418 | ||
| 1426 | if (reg & MUSB_CONFIGDATA_DYNFIFO) { | 1419 | if (reg & MUSB_CONFIGDATA_DYNFIFO) { |
| 1427 | if (can_dynfifo()) | 1420 | if (musb->config->dyn_fifo) |
| 1428 | status = ep_config_from_table(musb); | 1421 | status = ep_config_from_table(musb); |
| 1429 | else { | 1422 | else { |
| 1430 | ERR("reconfigure software for Dynamic FIFOs\n"); | 1423 | ERR("reconfigure software for Dynamic FIFOs\n"); |
| 1431 | status = -ENODEV; | 1424 | status = -ENODEV; |
| 1432 | } | 1425 | } |
| 1433 | } else { | 1426 | } else { |
| 1434 | if (!can_dynfifo()) | 1427 | if (!musb->config->dyn_fifo) |
| 1435 | status = ep_config_from_hw(musb); | 1428 | status = ep_config_from_hw(musb); |
| 1436 | else { | 1429 | else { |
| 1437 | ERR("reconfigure software for static FIFOs\n"); | 1430 | ERR("reconfigure software for static FIFOs\n"); |
| @@ -1788,7 +1781,8 @@ static void musb_irq_work(struct work_struct *data) | |||
| 1788 | */ | 1781 | */ |
| 1789 | 1782 | ||
| 1790 | static struct musb *__init | 1783 | static struct musb *__init |
| 1791 | allocate_instance(struct device *dev, void __iomem *mbase) | 1784 | allocate_instance(struct device *dev, |
| 1785 | struct musb_hdrc_config *config, void __iomem *mbase) | ||
| 1792 | { | 1786 | { |
| 1793 | struct musb *musb; | 1787 | struct musb *musb; |
| 1794 | struct musb_hw_ep *ep; | 1788 | struct musb_hw_ep *ep; |
| @@ -1820,8 +1814,9 @@ allocate_instance(struct device *dev, void __iomem *mbase) | |||
| 1820 | musb->mregs = mbase; | 1814 | musb->mregs = mbase; |
| 1821 | musb->ctrl_base = mbase; | 1815 | musb->ctrl_base = mbase; |
| 1822 | musb->nIrq = -ENODEV; | 1816 | musb->nIrq = -ENODEV; |
| 1817 | musb->config = config; | ||
| 1823 | for (epnum = 0, ep = musb->endpoints; | 1818 | for (epnum = 0, ep = musb->endpoints; |
| 1824 | epnum < MUSB_C_NUM_EPS; | 1819 | epnum < musb->config->num_eps; |
| 1825 | epnum++, ep++) { | 1820 | epnum++, ep++) { |
| 1826 | 1821 | ||
| 1827 | ep->musb = musb; | 1822 | ep->musb = musb; |
| @@ -1929,7 +1924,7 @@ bad_config: | |||
| 1929 | } | 1924 | } |
| 1930 | 1925 | ||
| 1931 | /* allocate */ | 1926 | /* allocate */ |
| 1932 | musb = allocate_instance(dev, ctrl); | 1927 | musb = allocate_instance(dev, plat->config, ctrl); |
| 1933 | if (!musb) | 1928 | if (!musb) |
| 1934 | return -ENOMEM; | 1929 | return -ENOMEM; |
| 1935 | 1930 | ||
| @@ -1987,7 +1982,7 @@ bad_config: | |||
| 1987 | musb_generic_disable(musb); | 1982 | musb_generic_disable(musb); |
| 1988 | 1983 | ||
| 1989 | /* setup musb parts of the core (especially endpoints) */ | 1984 | /* setup musb parts of the core (especially endpoints) */ |
| 1990 | status = musb_core_init(plat->multipoint | 1985 | status = musb_core_init(plat->config->multipoint |
| 1991 | ? MUSB_CONTROLLER_MHDRC | 1986 | ? MUSB_CONTROLLER_MHDRC |
| 1992 | : MUSB_CONTROLLER_HDRC, musb); | 1987 | : MUSB_CONTROLLER_HDRC, musb); |
| 1993 | if (status < 0) | 1988 | if (status < 0) |
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index 90035c12ab5f..eade46d81708 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h | |||
| @@ -56,18 +56,6 @@ struct musb_ep; | |||
| 56 | #include "musb_debug.h" | 56 | #include "musb_debug.h" |
| 57 | #include "musb_dma.h" | 57 | #include "musb_dma.h" |
| 58 | 58 | ||
| 59 | #ifdef CONFIG_USB_MUSB_SOC | ||
| 60 | /* | ||
| 61 | * Get core configuration from a header converted (by cfg_conv) | ||
| 62 | * from the Verilog config file generated by the core config utility | ||
| 63 | * | ||
| 64 | * For now we assume that header is provided along with other | ||
| 65 | * arch-specific files. Discrete chips will need a build tweak. | ||
| 66 | * So will using AHB IDs from silicon that provides them. | ||
| 67 | */ | ||
| 68 | #include <asm/arch/hdrc_cnf.h> | ||
| 69 | #endif | ||
| 70 | |||
| 71 | #include "musb_io.h" | 59 | #include "musb_io.h" |
| 72 | #include "musb_regs.h" | 60 | #include "musb_regs.h" |
| 73 | 61 | ||
| @@ -440,6 +428,8 @@ struct musb { | |||
| 440 | struct usb_gadget_driver *gadget_driver; /* its driver */ | 428 | struct usb_gadget_driver *gadget_driver; /* its driver */ |
| 441 | #endif | 429 | #endif |
| 442 | 430 | ||
| 431 | struct musb_hdrc_config *config; | ||
| 432 | |||
| 443 | #ifdef MUSB_CONFIG_PROC_FS | 433 | #ifdef MUSB_CONFIG_PROC_FS |
| 444 | struct proc_dir_entry *proc_entry; | 434 | struct proc_dir_entry *proc_entry; |
| 445 | #endif | 435 | #endif |
diff --git a/drivers/usb/musb/tusb6010.h b/drivers/usb/musb/tusb6010.h index db6dad0750ae..ab8c96286ce6 100644 --- a/drivers/usb/musb/tusb6010.h +++ b/drivers/usb/musb/tusb6010.h | |||
| @@ -230,173 +230,4 @@ extern u8 tusb_get_revision(struct musb *musb); | |||
| 230 | #define TUSB_REV_30 0x30 | 230 | #define TUSB_REV_30 0x30 |
| 231 | #define TUSB_REV_31 0x31 | 231 | #define TUSB_REV_31 0x31 |
| 232 | 232 | ||
| 233 | /*----------------------------------------------------------------------------*/ | ||
| 234 | |||
| 235 | #ifdef CONFIG_USB_TUSB6010 | ||
| 236 | |||
| 237 | /* configuration parameters specific to this silicon */ | ||
| 238 | |||
| 239 | /* Number of Tx endpoints. Legal values are 1 - 16 (this value includes EP0) */ | ||
| 240 | #define MUSB_C_NUM_EPT 16 | ||
| 241 | |||
| 242 | /* Number of Rx endpoints. Legal values are 1 - 16 (this value includes EP0) */ | ||
| 243 | #define MUSB_C_NUM_EPR 16 | ||
| 244 | |||
| 245 | /* Endpoint 1 to 15 direction types. C_EP1_DEF is defined if either Tx endpoint | ||
| 246 | * 1 or Rx endpoint 1 are used. | ||
| 247 | */ | ||
| 248 | #define MUSB_C_EP1_DEF | ||
| 249 | |||
| 250 | /* C_EP1_TX_DEF is defined if Tx endpoint 1 is used */ | ||
| 251 | #define MUSB_C_EP1_TX_DEF | ||
| 252 | |||
| 253 | /* C_EP1_RX_DEF is defined if Rx endpoint 1 is used */ | ||
| 254 | #define MUSB_C_EP1_RX_DEF | ||
| 255 | |||
| 256 | /* C_EP1_TOR_DEF is defined if Tx endpoint 1 and Rx endpoint 1 share a FIFO */ | ||
| 257 | /* #define C_EP1_TOR_DEF */ | ||
| 258 | |||
| 259 | /* C_EP1_TAR_DEF is defined if both Tx endpoint 1 and Rx endpoint 1 are used | ||
| 260 | * and do not share a FIFO. | ||
| 261 | */ | ||
| 262 | #define MUSB_C_EP1_TAR_DEF | ||
| 263 | |||
| 264 | /* Similarly for all other used endpoints */ | ||
| 265 | #define MUSB_C_EP2_DEF | ||
| 266 | #define MUSB_C_EP2_TX_DEF | ||
| 267 | #define MUSB_C_EP2_RX_DEF | ||
| 268 | #define MUSB_C_EP2_TAR_DEF | ||
| 269 | #define MUSB_C_EP3_DEF | ||
| 270 | #define MUSB_C_EP3_TX_DEF | ||
| 271 | #define MUSB_C_EP3_RX_DEF | ||
| 272 | #define MUSB_C_EP3_TAR_DEF | ||
| 273 | #define MUSB_C_EP4_DEF | ||
| 274 | #define MUSB_C_EP4_TX_DEF | ||
| 275 | #define MUSB_C_EP4_RX_DEF | ||
| 276 | #define MUSB_C_EP4_TAR_DEF | ||
| 277 | |||
| 278 | /* Endpoint 1 to 15 FIFO address bits. Legal values are 3 to 13 - corresponding | ||
| 279 | * to FIFO sizes of 8 to 8192 bytes. If an Tx endpoint shares a FIFO with an Rx | ||
| 280 | * endpoint then the Rx FIFO size must be the same as the Tx FIFO size. All | ||
| 281 | * endpoints 1 to 15 must be defined, unused endpoints should be set to 2. | ||
| 282 | */ | ||
| 283 | #define MUSB_C_EP1T_BITS 5 | ||
| 284 | #define MUSB_C_EP1R_BITS 5 | ||
| 285 | #define MUSB_C_EP2T_BITS 5 | ||
| 286 | #define MUSB_C_EP2R_BITS 5 | ||
| 287 | #define MUSB_C_EP3T_BITS 3 | ||
| 288 | #define MUSB_C_EP3R_BITS 3 | ||
| 289 | #define MUSB_C_EP4T_BITS 3 | ||
| 290 | #define MUSB_C_EP4R_BITS 3 | ||
| 291 | |||
| 292 | #define MUSB_C_EP5T_BITS 2 | ||
| 293 | #define MUSB_C_EP5R_BITS 2 | ||
| 294 | #define MUSB_C_EP6T_BITS 2 | ||
| 295 | #define MUSB_C_EP6R_BITS 2 | ||
| 296 | #define MUSB_C_EP7T_BITS 2 | ||
| 297 | #define MUSB_C_EP7R_BITS 2 | ||
| 298 | #define MUSB_C_EP8T_BITS 2 | ||
| 299 | #define MUSB_C_EP8R_BITS 2 | ||
| 300 | #define MUSB_C_EP9T_BITS 2 | ||
| 301 | #define MUSB_C_EP9R_BITS 2 | ||
| 302 | #define MUSB_C_EP10T_BITS 2 | ||
| 303 | #define MUSB_C_EP10R_BITS 2 | ||
| 304 | #define MUSB_C_EP11T_BITS 2 | ||
| 305 | #define MUSB_C_EP11R_BITS 2 | ||
| 306 | #define MUSB_C_EP12T_BITS 2 | ||
| 307 | #define MUSB_C_EP12R_BITS 2 | ||
| 308 | #define MUSB_C_EP13T_BITS 2 | ||
| 309 | #define MUSB_C_EP13R_BITS 2 | ||
| 310 | #define MUSB_C_EP14T_BITS 2 | ||
| 311 | #define MUSB_C_EP14R_BITS 2 | ||
| 312 | #define MUSB_C_EP15T_BITS 2 | ||
| 313 | #define MUSB_C_EP15R_BITS 2 | ||
| 314 | |||
| 315 | /* Define the following constant if the USB2.0 Transceiver Macrocell data width | ||
| 316 | * is 16-bits. | ||
| 317 | */ | ||
| 318 | /* #define C_UTM_16 */ | ||
| 319 | |||
| 320 | /* Define this constant if the CPU uses big-endian byte ordering. */ | ||
| 321 | /* #define C_BIGEND */ | ||
| 322 | |||
| 323 | /* Define the following constant if any Tx endpoint is required to support | ||
| 324 | * multiple bulk packets. | ||
| 325 | */ | ||
| 326 | /* #define C_MP_TX */ | ||
| 327 | |||
| 328 | /* Define the following constant if any Rx endpoint is required to support | ||
| 329 | * multiple bulk packets. | ||
| 330 | */ | ||
| 331 | /* #define C_MP_RX */ | ||
| 332 | |||
| 333 | /* Define the following constant if any Tx endpoint is required to support high | ||
| 334 | * bandwidth ISO. | ||
| 335 | */ | ||
| 336 | /* #define C_HB_TX */ | ||
| 337 | |||
| 338 | /* Define the following constant if any Rx endpoint is required to support high | ||
| 339 | * bandwidth ISO. | ||
| 340 | */ | ||
| 341 | /* #define C_HB_RX */ | ||
| 342 | |||
| 343 | /* Define the following constant if software connect/disconnect control is | ||
| 344 | * required. | ||
| 345 | */ | ||
| 346 | #define MUSB_C_SOFT_CON | ||
| 347 | |||
| 348 | /* Define the following constant if Vendor Control Registers are required. */ | ||
| 349 | /* #define C_VEND_REG */ | ||
| 350 | |||
| 351 | /* Vendor control register widths. */ | ||
| 352 | #define MUSB_C_VCTL_BITS 4 | ||
| 353 | #define MUSB_C_VSTAT_BITS 8 | ||
| 354 | |||
| 355 | /* Define the following constant to include a DMA controller. */ | ||
| 356 | /* #define C_DMA */ | ||
| 357 | |||
| 358 | /* Define the following constant if 2 or more DMA channels are required. */ | ||
| 359 | /* #define C_DMA2 */ | ||
| 360 | |||
| 361 | /* Define the following constant if 3 or more DMA channels are required. */ | ||
| 362 | /* #define C_DMA3 */ | ||
| 363 | |||
| 364 | /* Define the following constant if 4 or more DMA channels are required. */ | ||
| 365 | /* #define C_DMA4 */ | ||
| 366 | |||
| 367 | /* Define the following constant if 5 or more DMA channels are required. */ | ||
| 368 | /* #define C_DMA5 */ | ||
| 369 | |||
| 370 | /* Define the following constant if 6 or more DMA channels are required. */ | ||
| 371 | /* #define C_DMA6 */ | ||
| 372 | |||
| 373 | /* Define the following constant if 7 or more DMA channels are required. */ | ||
| 374 | /* #define C_DMA7 */ | ||
| 375 | |||
| 376 | /* Define the following constant if 8 or more DMA channels are required. */ | ||
| 377 | /* #define C_DMA8 */ | ||
| 378 | |||
| 379 | /* Enable Dynamic FIFO Sizing */ | ||
| 380 | #define MUSB_C_DYNFIFO_DEF | ||
| 381 | |||
| 382 | /* Derived constants. The following constants are derived from the previous | ||
| 383 | * configuration constants | ||
| 384 | */ | ||
| 385 | |||
| 386 | /* Total number of endpoints. Legal values are 2 - 16. This must be equal to | ||
| 387 | * the larger of C_NUM_EPT, C_NUM_EPR | ||
| 388 | */ | ||
| 389 | /* #define MUSB_C_NUM_EPS 5 */ | ||
| 390 | |||
| 391 | /* C_EPMAX_BITS is equal to the largest endpoint FIFO word address bits */ | ||
| 392 | #define MUSB_C_EPMAX_BITS 11 | ||
| 393 | |||
| 394 | /* C_RAM_BITS is the number of address bits required to address the RAM (32-bit | ||
| 395 | * addresses). It is defined as log2 of the sum of 2** of all the endpoint FIFO | ||
| 396 | * dword address bits (rounded up). | ||
| 397 | */ | ||
| 398 | #define MUSB_C_RAM_BITS 12 | ||
| 399 | |||
| 400 | #endif /* CONFIG_USB_TUSB6010 */ | ||
| 401 | |||
| 402 | #endif /* __TUSB6010_H__ */ | 233 | #endif /* __TUSB6010_H__ */ |
diff --git a/include/linux/usb/musb.h b/include/linux/usb/musb.h index d325a0d5bf4f..630962c04ca4 100644 --- a/include/linux/usb/musb.h +++ b/include/linux/usb/musb.h | |||
| @@ -19,6 +19,36 @@ enum musb_mode { | |||
| 19 | 19 | ||
| 20 | struct clk; | 20 | struct clk; |
| 21 | 21 | ||
| 22 | struct musb_hdrc_eps_bits { | ||
| 23 | const char name[16]; | ||
| 24 | u8 bits; | ||
| 25 | }; | ||
| 26 | |||
| 27 | struct musb_hdrc_config { | ||
| 28 | /* MUSB configuration-specific details */ | ||
| 29 | unsigned multipoint:1; /* multipoint device */ | ||
| 30 | unsigned dyn_fifo:1; /* supports dynamic fifo sizing */ | ||
| 31 | unsigned soft_con:1; /* soft connect required */ | ||
| 32 | unsigned utm_16:1; /* utm data witdh is 16 bits */ | ||
| 33 | unsigned big_endian:1; /* true if CPU uses big-endian */ | ||
| 34 | unsigned mult_bulk_tx:1; /* Tx ep required for multbulk pkts */ | ||
| 35 | unsigned mult_bulk_rx:1; /* Rx ep required for multbulk pkts */ | ||
| 36 | unsigned high_iso_tx:1; /* Tx ep required for HB iso */ | ||
| 37 | unsigned high_iso_rx:1; /* Rx ep required for HD iso */ | ||
| 38 | unsigned dma:1; /* supports DMA */ | ||
| 39 | unsigned vendor_req:1; /* vendor registers required */ | ||
| 40 | |||
| 41 | u8 num_eps; /* number of endpoints _with_ ep0 */ | ||
| 42 | u8 dma_channels; /* number of dma channels */ | ||
| 43 | u8 dyn_fifo_size; /* dynamic size in bytes */ | ||
| 44 | u8 vendor_ctrl; /* vendor control reg width */ | ||
| 45 | u8 vendor_stat; /* vendor status reg witdh */ | ||
| 46 | u8 dma_req_chan; /* bitmask for required dma channels */ | ||
| 47 | u8 ram_bits; /* ram address size */ | ||
| 48 | |||
| 49 | struct musb_hdrc_eps_bits *eps_bits; | ||
| 50 | }; | ||
| 51 | |||
| 22 | struct musb_hdrc_platform_data { | 52 | struct musb_hdrc_platform_data { |
| 23 | /* MUSB_HOST, MUSB_PERIPHERAL, or MUSB_OTG */ | 53 | /* MUSB_HOST, MUSB_PERIPHERAL, or MUSB_OTG */ |
| 24 | u8 mode; | 54 | u8 mode; |
| @@ -38,16 +68,14 @@ struct musb_hdrc_platform_data { | |||
| 38 | /* (HOST or OTG) msec/2 after VBUS on till power good */ | 68 | /* (HOST or OTG) msec/2 after VBUS on till power good */ |
| 39 | u8 potpgt; | 69 | u8 potpgt; |
| 40 | 70 | ||
| 41 | /* TBD: chip defaults should probably go someplace else, | ||
| 42 | * e.g. number of tx/rx endpoints, etc | ||
| 43 | */ | ||
| 44 | unsigned multipoint:1; | ||
| 45 | |||
| 46 | /* Power the device on or off */ | 71 | /* Power the device on or off */ |
| 47 | int (*set_power)(int state); | 72 | int (*set_power)(int state); |
| 48 | 73 | ||
| 49 | /* Turn device clock on or off */ | 74 | /* Turn device clock on or off */ |
| 50 | int (*set_clock)(struct clk *clock, int is_on); | 75 | int (*set_clock)(struct clk *clock, int is_on); |
| 76 | |||
| 77 | /* MUSB configuration-specific details */ | ||
| 78 | struct musb_hdrc_config *config; | ||
| 51 | }; | 79 | }; |
| 52 | 80 | ||
| 53 | 81 | ||
