diff options
author | Bryan Wu <cooloney@kernel.org> | 2008-12-02 14:33:48 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-01-07 13:00:07 -0500 |
commit | c6cf8b003e5a37f8193c2883876c5942adcd7284 (patch) | |
tree | c0ce285fb7a70dfd149ecfc325ad4c468ea0bbbc /drivers/usb/musb/musb_core.c | |
parent | 6995eb68aab70e79eedb710d7d6d1f22d8aea4a7 (diff) |
USB: musb: add Blackfin specific configuration to MUSB
Some config registers are not avaiable in Blackfin, we have to comment them out.
v1-v2:
- remove Blackfin specific header file
- add Blackfin register version to musb_regs.h header file
Signed-off-by: Bryan Wu <cooloney@kernel.org>
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/musb/musb_core.c')
-rw-r--r-- | drivers/usb/musb/musb_core.c | 52 |
1 files changed, 18 insertions, 34 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 83720f61fdb..6c7faacfb53 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
@@ -148,7 +148,8 @@ static inline struct musb *dev_to_musb(struct device *dev) | |||
148 | 148 | ||
149 | /*-------------------------------------------------------------------------*/ | 149 | /*-------------------------------------------------------------------------*/ |
150 | 150 | ||
151 | #ifndef CONFIG_USB_TUSB6010 | 151 | #if !defined(CONFIG_USB_TUSB6010) && !defined(CONFIG_BLACKFIN) |
152 | |||
152 | /* | 153 | /* |
153 | * Load an endpoint's FIFO | 154 | * Load an endpoint's FIFO |
154 | */ | 155 | */ |
@@ -1124,25 +1125,25 @@ fifo_setup(struct musb *musb, struct musb_hw_ep *hw_ep, | |||
1124 | #endif | 1125 | #endif |
1125 | switch (cfg->style) { | 1126 | switch (cfg->style) { |
1126 | case FIFO_TX: | 1127 | case FIFO_TX: |
1127 | musb_writeb(mbase, MUSB_TXFIFOSZ, c_size); | 1128 | musb_write_txfifosz(mbase, c_size); |
1128 | musb_writew(mbase, MUSB_TXFIFOADD, c_off); | 1129 | musb_write_txfifoadd(mbase, c_off); |
1129 | hw_ep->tx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB); | 1130 | hw_ep->tx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB); |
1130 | hw_ep->max_packet_sz_tx = maxpacket; | 1131 | hw_ep->max_packet_sz_tx = maxpacket; |
1131 | break; | 1132 | break; |
1132 | case FIFO_RX: | 1133 | case FIFO_RX: |
1133 | musb_writeb(mbase, MUSB_RXFIFOSZ, c_size); | 1134 | musb_write_rxfifosz(mbase, c_size); |
1134 | musb_writew(mbase, MUSB_RXFIFOADD, c_off); | 1135 | musb_write_rxfifoadd(mbase, c_off); |
1135 | hw_ep->rx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB); | 1136 | hw_ep->rx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB); |
1136 | hw_ep->max_packet_sz_rx = maxpacket; | 1137 | hw_ep->max_packet_sz_rx = maxpacket; |
1137 | break; | 1138 | break; |
1138 | case FIFO_RXTX: | 1139 | case FIFO_RXTX: |
1139 | musb_writeb(mbase, MUSB_TXFIFOSZ, c_size); | 1140 | musb_write_txfifosz(mbase, c_size); |
1140 | musb_writew(mbase, MUSB_TXFIFOADD, c_off); | 1141 | musb_write_txfifoadd(mbase, c_off); |
1141 | hw_ep->rx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB); | 1142 | hw_ep->rx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB); |
1142 | hw_ep->max_packet_sz_rx = maxpacket; | 1143 | hw_ep->max_packet_sz_rx = maxpacket; |
1143 | 1144 | ||
1144 | musb_writeb(mbase, MUSB_RXFIFOSZ, c_size); | 1145 | musb_write_rxfifosz(mbase, c_size); |
1145 | musb_writew(mbase, MUSB_RXFIFOADD, c_off); | 1146 | musb_write_rxfifoadd(mbase, c_off); |
1146 | hw_ep->tx_double_buffered = hw_ep->rx_double_buffered; | 1147 | hw_ep->tx_double_buffered = hw_ep->rx_double_buffered; |
1147 | hw_ep->max_packet_sz_tx = maxpacket; | 1148 | hw_ep->max_packet_sz_tx = maxpacket; |
1148 | 1149 | ||
@@ -1246,9 +1247,10 @@ static int __init ep_config_from_table(struct musb *musb) | |||
1246 | */ | 1247 | */ |
1247 | static int __init ep_config_from_hw(struct musb *musb) | 1248 | static int __init ep_config_from_hw(struct musb *musb) |
1248 | { | 1249 | { |
1249 | u8 epnum = 0, reg; | 1250 | u8 epnum = 0; |
1250 | struct musb_hw_ep *hw_ep; | 1251 | struct musb_hw_ep *hw_ep; |
1251 | void *mbase = musb->mregs; | 1252 | void *mbase = musb->mregs; |
1253 | int ret = 0; | ||
1252 | 1254 | ||
1253 | DBG(2, "<== static silicon ep config\n"); | 1255 | DBG(2, "<== static silicon ep config\n"); |
1254 | 1256 | ||
@@ -1258,26 +1260,9 @@ static int __init ep_config_from_hw(struct musb *musb) | |||
1258 | musb_ep_select(mbase, epnum); | 1260 | musb_ep_select(mbase, epnum); |
1259 | hw_ep = musb->endpoints + epnum; | 1261 | hw_ep = musb->endpoints + epnum; |
1260 | 1262 | ||
1261 | /* read from core using indexed model */ | 1263 | ret = musb_read_fifosize(musb, hw_ep, epnum); |
1262 | reg = musb_readb(hw_ep->regs, 0x10 + MUSB_FIFOSIZE); | 1264 | if (ret < 0) |
1263 | if (!reg) { | ||
1264 | /* 0's returned when no more endpoints */ | ||
1265 | break; | 1265 | break; |
1266 | } | ||
1267 | musb->nr_endpoints++; | ||
1268 | musb->epmask |= (1 << epnum); | ||
1269 | |||
1270 | hw_ep->max_packet_sz_tx = 1 << (reg & 0x0f); | ||
1271 | |||
1272 | /* shared TX/RX FIFO? */ | ||
1273 | if ((reg & 0xf0) == 0xf0) { | ||
1274 | hw_ep->max_packet_sz_rx = hw_ep->max_packet_sz_tx; | ||
1275 | hw_ep->is_shared_fifo = true; | ||
1276 | continue; | ||
1277 | } else { | ||
1278 | hw_ep->max_packet_sz_rx = 1 << ((reg & 0xf0) >> 4); | ||
1279 | hw_ep->is_shared_fifo = false; | ||
1280 | } | ||
1281 | 1266 | ||
1282 | /* FIXME set up hw_ep->{rx,tx}_double_buffered */ | 1267 | /* FIXME set up hw_ep->{rx,tx}_double_buffered */ |
1283 | 1268 | ||
@@ -1326,7 +1311,7 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb) | |||
1326 | 1311 | ||
1327 | /* log core options (read using indexed model) */ | 1312 | /* log core options (read using indexed model) */ |
1328 | musb_ep_select(mbase, 0); | 1313 | musb_ep_select(mbase, 0); |
1329 | reg = musb_readb(mbase, 0x10 + MUSB_CONFIGDATA); | 1314 | reg = musb_read_configdata(mbase); |
1330 | 1315 | ||
1331 | strcpy(aInfo, (reg & MUSB_CONFIGDATA_UTMIDW) ? "UTMI-16" : "UTMI-8"); | 1316 | strcpy(aInfo, (reg & MUSB_CONFIGDATA_UTMIDW) ? "UTMI-16" : "UTMI-8"); |
1332 | if (reg & MUSB_CONFIGDATA_DYNFIFO) | 1317 | if (reg & MUSB_CONFIGDATA_DYNFIFO) |
@@ -1391,7 +1376,7 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb) | |||
1391 | } | 1376 | } |
1392 | 1377 | ||
1393 | /* log release info */ | 1378 | /* log release info */ |
1394 | hwvers = musb_readw(mbase, MUSB_HWVERS); | 1379 | hwvers = musb_read_hwvers(mbase); |
1395 | rev_major = (hwvers >> 10) & 0x1f; | 1380 | rev_major = (hwvers >> 10) & 0x1f; |
1396 | rev_minor = hwvers & 0x3ff; | 1381 | rev_minor = hwvers & 0x3ff; |
1397 | snprintf(aRevision, 32, "%d.%d%s", rev_major, | 1382 | snprintf(aRevision, 32, "%d.%d%s", rev_major, |
@@ -1400,8 +1385,7 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb) | |||
1400 | musb_driver_name, type, aRevision, aDate); | 1385 | musb_driver_name, type, aRevision, aDate); |
1401 | 1386 | ||
1402 | /* configure ep0 */ | 1387 | /* configure ep0 */ |
1403 | musb->endpoints[0].max_packet_sz_tx = MUSB_EP0_FIFOSIZE; | 1388 | musb_configure_ep0(musb); |
1404 | musb->endpoints[0].max_packet_sz_rx = MUSB_EP0_FIFOSIZE; | ||
1405 | 1389 | ||
1406 | /* discover endpoint configuration */ | 1390 | /* discover endpoint configuration */ |
1407 | musb->nr_endpoints = 1; | 1391 | musb->nr_endpoints = 1; |
@@ -1445,7 +1429,7 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb) | |||
1445 | 1429 | ||
1446 | hw_ep->regs = MUSB_EP_OFFSET(i, 0) + mbase; | 1430 | hw_ep->regs = MUSB_EP_OFFSET(i, 0) + mbase; |
1447 | #ifdef CONFIG_USB_MUSB_HDRC_HCD | 1431 | #ifdef CONFIG_USB_MUSB_HDRC_HCD |
1448 | hw_ep->target_regs = MUSB_BUSCTL_OFFSET(i, 0) + mbase; | 1432 | hw_ep->target_regs = musb_read_target_reg_base(i, mbase); |
1449 | hw_ep->rx_reinit = 1; | 1433 | hw_ep->rx_reinit = 1; |
1450 | hw_ep->tx_reinit = 1; | 1434 | hw_ep->tx_reinit = 1; |
1451 | #endif | 1435 | #endif |