diff options
author | Rafaël Carré <rafael.carre@gmail.com> | 2010-09-08 06:13:07 +0000 |
---|---|---|
committer | Rafaël Carré <rafael.carre@gmail.com> | 2010-09-08 06:13:07 +0000 |
commit | ca0e95ad08263d4dc7e121074eaa07dab6c07507 (patch) | |
tree | 2e5aff5de5e930da6d656442ff265e2406362348 /firmware | |
parent | f1adafc05a12600e27c9366e2dd7033949e61c57 (diff) | |
download | rockbox-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
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/arm/as3525/usb-drv-as3525v2.c | 45 |
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 | ||
641 | int usb_drv_port_speed(void) | 641 | int 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 | ||
660 | static unsigned long usb_drv_mps_by_type(int type) | 658 | static 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 | ||
673 | int usb_drv_request_endpoint(int type, int dir) | 670 | int usb_drv_request_endpoint(int type, int dir) |