diff options
Diffstat (limited to 'firmware/target/arm/usb-s3c6400x.c')
-rw-r--r-- | firmware/target/arm/usb-s3c6400x.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/firmware/target/arm/usb-s3c6400x.c b/firmware/target/arm/usb-s3c6400x.c index 26db55ee67..43c9f2fd77 100644 --- a/firmware/target/arm/usb-s3c6400x.c +++ b/firmware/target/arm/usb-s3c6400x.c | |||
@@ -8,6 +8,7 @@ | |||
8 | * $Id$ | 8 | * $Id$ |
9 | * | 9 | * |
10 | * Copyright (C) 2009 by Michael Sparmann | 10 | * Copyright (C) 2009 by Michael Sparmann |
11 | * Copyright © 2010 Amaury Pouly | ||
11 | * | 12 | * |
12 | * This program is free software; you can redistribute it and/or | 13 | * This program is free software; you can redistribute it and/or |
13 | * modify it under the terms of the GNU General Public License | 14 | * modify it under the terms of the GNU General Public License |
@@ -81,6 +82,30 @@ int usb_drv_recv(int endpoint, void* ptr, int length) | |||
81 | return 0; | 82 | return 0; |
82 | } | 83 | } |
83 | 84 | ||
85 | int usb_drv_port_speed(void) | ||
86 | { | ||
87 | static const uint8_t speed[4] = { | ||
88 | [DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ] = 1, | ||
89 | [DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ] = 0, | ||
90 | [DSTS_ENUMSPD_FS_PHY_48MHZ] = 0, | ||
91 | [DSTS_ENUMSPD_LS_PHY_6MHZ] = 0, | ||
92 | }; | ||
93 | |||
94 | unsigned enumspd = extract(DSTS, enumspd); | ||
95 | |||
96 | if(enumspd == DSTS_ENUMSPD_LS_PHY_6MHZ) | ||
97 | panicf("usb-drv: LS is not supported"); | ||
98 | |||
99 | return speed[enumspd & 3]; | ||
100 | } | ||
101 | |||
102 | void usb_drv_set_test_mode(int mode) | ||
103 | { | ||
104 | /* there is a perfect matching between usb test mode code | ||
105 | * and the register field value */ | ||
106 | DCTL = (DCTL & ~bitm(DCTL, tstctl)) | (mode << DCTL_tstctl_bitp); | ||
107 | } | ||
108 | |||
84 | #if CONFIG_CPU == AS3525v2 /* FIXME FIXME FIXME */ | 109 | #if CONFIG_CPU == AS3525v2 /* FIXME FIXME FIXME */ |
85 | # include "as3525/usb-drv-as3525v2.c" | 110 | # include "as3525/usb-drv-as3525v2.c" |
86 | #else | 111 | #else |
@@ -100,11 +125,6 @@ static union | |||
100 | unsigned char payload[64]; | 125 | unsigned char payload[64]; |
101 | } ctrlreq USB_DEVBSS_ATTR; | 126 | } ctrlreq USB_DEVBSS_ATTR; |
102 | 127 | ||
103 | int usb_drv_port_speed(void) | ||
104 | { | ||
105 | return (DSTS & 2) == 0 ? 1 : 0; | ||
106 | } | ||
107 | |||
108 | static void reset_endpoints(int reinit) | 128 | static void reset_endpoints(int reinit) |
109 | { | 129 | { |
110 | unsigned int i; | 130 | unsigned int i; |
@@ -331,11 +351,6 @@ void usb_drv_cancel_all_transfers(void) | |||
331 | restore_irq(flags); | 351 | restore_irq(flags); |
332 | } | 352 | } |
333 | 353 | ||
334 | void usb_drv_set_test_mode(int mode) | ||
335 | { | ||
336 | (void)mode; | ||
337 | } | ||
338 | |||
339 | void usb_drv_init(void) | 354 | void usb_drv_init(void) |
340 | { | 355 | { |
341 | for (unsigned i = 0; i < sizeof(endpoints)/sizeof(struct ep_type); i++) | 356 | for (unsigned i = 0; i < sizeof(endpoints)/sizeof(struct ep_type); i++) |