summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2010-09-08 06:13:07 +0000
committerRafaël Carré <rafael.carre@gmail.com>2010-09-08 06:13:07 +0000
commitca0e95ad08263d4dc7e121074eaa07dab6c07507 (patch)
tree2e5aff5de5e930da6d656442ff265e2406362348
parentf1adafc05a12600e27c9366e2dd7033949e61c57 (diff)
downloadrockbox-ca0e95ad08263d4dc7e121074eaa07dab6c07507.tar.gz
rockbox-ca0e95ad08263d4dc7e121074eaa07dab6c07507.zip
USB AMSv2: use tables for usb_drv_port_speed() and usb_drv_mps_by_type()
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28044 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525v2.c45
1 files changed, 21 insertions, 24 deletions
diff --git a/firmware/target/arm/as3525/usb-drv-as3525v2.c b/firmware/target/arm/as3525/usb-drv-as3525v2.c
index 335c3144fe..d87ccb5f87 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525v2.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525v2.c
@@ -640,34 +640,31 @@ void INT_USB(void)
640 640
641int usb_drv_port_speed(void) 641int usb_drv_port_speed(void)
642{ 642{
643 switch(extract(DSTS, enumspd)) 643 static const uint8_t speed[4] = {
644 { 644 [DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ] = 1,
645 case DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ: 645 [DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ] = 0,
646 return 1; 646 [DSTS_ENUMSPD_FS_PHY_48MHZ] = 0,
647 case DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ: 647 [DSTS_ENUMSPD_LS_PHY_6MHZ] = 0,
648 case DSTS_ENUMSPD_FS_PHY_48MHZ: 648 };
649 return 0; 649
650 break; 650 unsigned enumspd = extract(DSTS, enumspd);
651 case DSTS_ENUMSPD_LS_PHY_6MHZ: 651
652 panicf("usb-drv: LS is not supported"); 652 if(enumspd == DSTS_ENUMSPD_LS_PHY_6MHZ)
653 return 0; 653 panicf("usb-drv: LS is not supported");
654 default: 654
655 panicf("usb-drv: wtf is this speed ?"); 655 return speed[enumspd & 3];
656 return 0;
657 }
658} 656}
659 657
660static unsigned long usb_drv_mps_by_type(int type) 658static unsigned long usb_drv_mps_by_type(int type)
661{ 659{
662 bool hs = usb_drv_port_speed(); 660 static const uint16_t mps[4][2] = {
663 switch(type) 661 /* type fs hs */
664 { 662 [USB_ENDPOINT_XFER_CONTROL] = { 64, 64 },
665 case USB_ENDPOINT_XFER_CONTROL: return 64; 663 [USB_ENDPOINT_XFER_ISOC] = { 1023, 1024 },
666 case USB_ENDPOINT_XFER_BULK: return hs ? 512 : 64; 664 [USB_ENDPOINT_XFER_BULK] = { 64, 512 },
667 case USB_ENDPOINT_XFER_INT: return hs ? 1024 : 64; 665 [USB_ENDPOINT_XFER_INT] = { 64, 1024 },
668 case USB_ENDPOINT_XFER_ISOC: return hs ? 1024 : 1023; 666 };
669 default: return 0; 667 return mps[type & 3][usb_drv_port_speed() & 1];
670 }
671} 668}
672 669
673int usb_drv_request_endpoint(int type, int dir) 670int usb_drv_request_endpoint(int type, int dir)