diff options
-rw-r--r-- | firmware/drivers/isp1583.c | 136 |
1 files changed, 71 insertions, 65 deletions
diff --git a/firmware/drivers/isp1583.c b/firmware/drivers/isp1583.c index fd95111779..26d638171c 100644 --- a/firmware/drivers/isp1583.c +++ b/firmware/drivers/isp1583.c | |||
@@ -19,7 +19,7 @@ | |||
19 | * KIND, either express or implied. | 19 | * KIND, either express or implied. |
20 | * | 20 | * |
21 | ****************************************************************************/ | 21 | ****************************************************************************/ |
22 | 22 | ||
23 | #include "config.h" | 23 | #include "config.h" |
24 | #include "usb_ch9.h" | 24 | #include "usb_ch9.h" |
25 | #include "usb_drv.h" | 25 | #include "usb_drv.h" |
@@ -92,8 +92,8 @@ static inline void usb_select_endpoint(int idx) | |||
92 | /* Select the endpoint */ | 92 | /* Select the endpoint */ |
93 | ISP1583_DFLOW_EPINDEX = idx; | 93 | ISP1583_DFLOW_EPINDEX = idx; |
94 | /* The delay time from the Write Endpoint Index register to the Read Data Port register must be at least 190 ns. | 94 | /* The delay time from the Write Endpoint Index register to the Read Data Port register must be at least 190 ns. |
95 | * The delay time from the Write Endpoint Index register to the Write Data Port register must be at least 100 ns. | 95 | * The delay time from the Write Endpoint Index register to the Write Data Port register must be at least 100 ns. |
96 | */ | 96 | */ |
97 | NOP; | 97 | NOP; |
98 | } | 98 | } |
99 | 99 | ||
@@ -102,26 +102,26 @@ static inline void usb_select_setup_endpoint(void) | |||
102 | /* Select the endpoint */ | 102 | /* Select the endpoint */ |
103 | ISP1583_DFLOW_EPINDEX = DFLOW_EPINDEX_EP0SETUP; | 103 | ISP1583_DFLOW_EPINDEX = DFLOW_EPINDEX_EP0SETUP; |
104 | /* The delay time from the Write Endpoint Index register to the Read Data Port register must be at least 190 ns. | 104 | /* The delay time from the Write Endpoint Index register to the Read Data Port register must be at least 190 ns. |
105 | * The delay time from the Write Endpoint Index register to the Write Data Port register must be at least 100 ns. | 105 | * The delay time from the Write Endpoint Index register to the Write Data Port register must be at least 100 ns. |
106 | */ | 106 | */ |
107 | NOP; | 107 | NOP; |
108 | } | 108 | } |
109 | 109 | ||
110 | static void usb_setup_endpoint(int idx, int max_pkt_size, int type) | 110 | static void usb_setup_endpoint(int idx, int max_pkt_size, int type) |
111 | { | 111 | { |
112 | if(epidx_n(idx)!=0) | 112 | if(epidx_n(idx)!=EP_CONTROL) |
113 | { | 113 | { |
114 | usb_select_endpoint(idx); | 114 | usb_select_endpoint(idx); |
115 | ISP1583_DFLOW_MAXPKSZ = max_pkt_size & 0x7FF; | 115 | ISP1583_DFLOW_MAXPKSZ = max_pkt_size & 0x7FF; |
116 | ISP1583_DFLOW_EPTYPE = (DFLOW_EPTYPE_NOEMPKT | DFLOW_EPTYPE_DBLBUF | (type & 0x3)); | 116 | ISP1583_DFLOW_EPTYPE = (DFLOW_EPTYPE_NOEMPKT | DFLOW_EPTYPE_DBLBUF | (type & 0x3)); |
117 | 117 | ||
118 | /* clear buffer ... */ | 118 | /* clear buffer ... */ |
119 | ISP1583_DFLOW_CTRLFUN |= DFLOW_CTRLFUN_CLBUF; | 119 | ISP1583_DFLOW_CTRLFUN |= DFLOW_CTRLFUN_CLBUF; |
120 | /* ... twice because of double buffering */ | 120 | /* ... twice because of double buffering */ |
121 | usb_select_endpoint(idx); | 121 | usb_select_endpoint(idx); |
122 | ISP1583_DFLOW_CTRLFUN |= DFLOW_CTRLFUN_CLBUF; | 122 | ISP1583_DFLOW_CTRLFUN |= DFLOW_CTRLFUN_CLBUF; |
123 | } | 123 | } |
124 | 124 | ||
125 | struct usb_endpoint *ep; | 125 | struct usb_endpoint *ep; |
126 | ep = &(endpoints[epidx_n(idx)]); | 126 | ep = &(endpoints[epidx_n(idx)]); |
127 | ep->halt[epidx_dir(idx)] = 0; | 127 | ep->halt[epidx_dir(idx)] = 0; |
@@ -135,7 +135,7 @@ static void usb_setup_endpoint(int idx, int max_pkt_size, int type) | |||
135 | 135 | ||
136 | static void usb_enable_endpoint(int idx) | 136 | static void usb_enable_endpoint(int idx) |
137 | { | 137 | { |
138 | if(epidx_n(idx)!=0) | 138 | if(epidx_n(idx)!=EP_CONTROL) |
139 | { | 139 | { |
140 | usb_select_endpoint(idx); | 140 | usb_select_endpoint(idx); |
141 | /* Enable interrupt */ | 141 | /* Enable interrupt */ |
@@ -143,7 +143,7 @@ static void usb_enable_endpoint(int idx) | |||
143 | /* Enable endpoint */ | 143 | /* Enable endpoint */ |
144 | ISP1583_DFLOW_EPTYPE |= DFLOW_EPTYPE_ENABLE; | 144 | ISP1583_DFLOW_EPTYPE |= DFLOW_EPTYPE_ENABLE; |
145 | } | 145 | } |
146 | 146 | ||
147 | endpoints[epidx_n(idx)].enabled[epidx_dir(idx)] = 1; | 147 | endpoints[epidx_n(idx)].enabled[epidx_dir(idx)] = 1; |
148 | } | 148 | } |
149 | /* | 149 | /* |
@@ -152,7 +152,7 @@ static void usb_disable_endpoint(int idx, bool set_struct) | |||
152 | usb_select_endpoint(idx); | 152 | usb_select_endpoint(idx); |
153 | ISP1583_DFLOW_EPTYPE &= ~DFLOW_EPTYPE_ENABLE; | 153 | ISP1583_DFLOW_EPTYPE &= ~DFLOW_EPTYPE_ENABLE; |
154 | bc_int_value(&ISP1583_INIT_INTEN_A, &ISP1583_INIT_INTEN_B, ISP1583_INIT_INTEN_READ, 1 << (10 + idx)); | 154 | bc_int_value(&ISP1583_INIT_INTEN_A, &ISP1583_INIT_INTEN_B, ISP1583_INIT_INTEN_READ, 1 << (10 + idx)); |
155 | 155 | ||
156 | if(set_struct) | 156 | if(set_struct) |
157 | endpoints[epidx_n(idx)].enabled[epidx_dir(idx)] = 0; | 157 | endpoints[epidx_n(idx)].enabled[epidx_dir(idx)] = 0; |
158 | } | 158 | } |
@@ -197,7 +197,7 @@ static int usb_receive(int n) | |||
197 | len = usb_get_packet(endpoints[n].in_buf + endpoints[n].in_ptr, | 197 | len = usb_get_packet(endpoints[n].in_buf + endpoints[n].in_ptr, |
198 | endpoints[n].in_max_len - endpoints[n].in_ptr); | 198 | endpoints[n].in_max_len - endpoints[n].in_ptr); |
199 | endpoints[n].in_ptr += len; | 199 | endpoints[n].in_ptr += len; |
200 | 200 | ||
201 | if (endpoints[n].in_ptr >= endpoints[n].in_min_len) | 201 | if (endpoints[n].in_ptr >= endpoints[n].in_min_len) |
202 | { | 202 | { |
203 | endpoints[n].in_min_len = -1; | 203 | endpoints[n].in_min_len = -1; |
@@ -242,22 +242,22 @@ static int usb_send(int n) | |||
242 | logf("ALREADY SENT TO EP!"); | 242 | logf("ALREADY SENT TO EP!"); |
243 | return -1; | 243 | return -1; |
244 | } | 244 | } |
245 | 245 | ||
246 | if (usb_out_buffer_full(n)) | 246 | if (usb_out_buffer_full(n)) |
247 | { | 247 | { |
248 | logf("BUFFER FULL!"); | 248 | logf("BUFFER FULL!"); |
249 | return -1; | 249 | return -1; |
250 | } | 250 | } |
251 | 251 | ||
252 | usb_select_endpoint(ep_index(n, DIR_TX)); | 252 | usb_select_endpoint(ep_index(n, DIR_TX)); |
253 | max_pkt_size = endpoints[n].max_pkt_size[DIR_TX]; | 253 | max_pkt_size = endpoints[n].max_pkt_size[DIR_TX]; |
254 | len = endpoints[n].out_len - endpoints[n].out_ptr; | 254 | len = endpoints[n].out_len - endpoints[n].out_ptr; |
255 | if (len > max_pkt_size) | 255 | if (len > max_pkt_size) |
256 | len = max_pkt_size; | 256 | len = max_pkt_size; |
257 | 257 | ||
258 | if(len < max_pkt_size) | 258 | if(len < max_pkt_size) |
259 | ISP1583_DFLOW_BUFLEN = len; | 259 | ISP1583_DFLOW_BUFLEN = len; |
260 | 260 | ||
261 | p = endpoints[n].out_buf + endpoints[n].out_ptr; | 261 | p = endpoints[n].out_buf + endpoints[n].out_ptr; |
262 | i = 0; | 262 | i = 0; |
263 | while (len - i >= 2) | 263 | while (len - i >= 2) |
@@ -276,7 +276,7 @@ static int usb_send(int n) | |||
276 | */ | 276 | */ |
277 | if (endpoints[n].out_ptr == endpoints[n].out_len) | 277 | if (endpoints[n].out_ptr == endpoints[n].out_len) |
278 | endpoints[n].out_ptr = -1; | 278 | endpoints[n].out_ptr = -1; |
279 | 279 | ||
280 | logf("send_end"); | 280 | logf("send_end"); |
281 | return 0; | 281 | return 0; |
282 | } | 282 | } |
@@ -312,7 +312,7 @@ static void usb_status_ack(int ep, int dir) | |||
312 | usb_select_setup_endpoint(); | 312 | usb_select_setup_endpoint(); |
313 | else | 313 | else |
314 | usb_select_endpoint(ep_index(ep, dir)); | 314 | usb_select_endpoint(ep_index(ep, dir)); |
315 | 315 | ||
316 | ISP1583_DFLOW_CTRLFUN |= DFLOW_CTRLFUN_STATUS; | 316 | ISP1583_DFLOW_CTRLFUN |= DFLOW_CTRLFUN_STATUS; |
317 | } | 317 | } |
318 | 318 | ||
@@ -336,12 +336,12 @@ static void usb_handle_setup_rx(void) | |||
336 | } | 336 | } |
337 | else | 337 | else |
338 | { | 338 | { |
339 | usb_drv_stall(0, true, false); | 339 | usb_drv_stall(EP_CONTROL, true, false); |
340 | usb_drv_stall(0, true, true); | 340 | usb_drv_stall(EP_CONTROL, true, true); |
341 | logf("usb_handle_setup_rx() failed"); | 341 | logf("usb_handle_setup_rx() failed"); |
342 | return; | 342 | return; |
343 | } | 343 | } |
344 | 344 | ||
345 | logf("usb_handle_setup_rx(): %02x %02x %02x %02x %02x %02x %02x %02x", setup_pkt_buf[0], setup_pkt_buf[1], setup_pkt_buf[2], setup_pkt_buf[3], setup_pkt_buf[4], setup_pkt_buf[5], setup_pkt_buf[6], setup_pkt_buf[7]); | 345 | logf("usb_handle_setup_rx(): %02x %02x %02x %02x %02x %02x %02x %02x", setup_pkt_buf[0], setup_pkt_buf[1], setup_pkt_buf[2], setup_pkt_buf[3], setup_pkt_buf[4], setup_pkt_buf[5], setup_pkt_buf[6], setup_pkt_buf[7]); |
346 | } | 346 | } |
347 | 347 | ||
@@ -369,25 +369,31 @@ bool usb_drv_powered(void) | |||
369 | 369 | ||
370 | static void setup_endpoints(void) | 370 | static void setup_endpoints(void) |
371 | { | 371 | { |
372 | usb_setup_endpoint(ep_index(0, DIR_RX), 64, 0); | ||
373 | usb_setup_endpoint(ep_index(0, DIR_TX), 64, 0); | ||
374 | |||
375 | int i; | 372 | int i; |
373 | int max_pkt_size = (high_speed_mode ? 512 : 64); | ||
374 | |||
375 | usb_setup_endpoint(ep_index(EP_CONTROL, DIR_RX), 64, | ||
376 | USB_ENDPOINT_XFER_CONTROL); | ||
377 | usb_setup_endpoint(ep_index(EP_CONTROL, DIR_TX), 64, | ||
378 | USB_ENDPOINT_XFER_CONTROL); | ||
379 | |||
376 | for(i = 1; i < USB_NUM_ENDPOINTS-1; i++) | 380 | for(i = 1; i < USB_NUM_ENDPOINTS-1; i++) |
377 | { | 381 | { |
378 | usb_setup_endpoint(ep_index(i, DIR_RX), (high_speed_mode ? 512 : 64), 2); /* 2 = TYPE_BULK */ | 382 | usb_setup_endpoint(ep_index(i, DIR_RX), max_pkt_size, |
379 | usb_setup_endpoint(ep_index(i, DIR_TX), (high_speed_mode ? 512 : 64), 2); | 383 | USB_ENDPOINT_XFER_BULK); |
384 | usb_setup_endpoint(ep_index(i, DIR_TX), max_pkt_size, | ||
385 | USB_ENDPOINT_XFER_BULK); | ||
380 | } | 386 | } |
381 | 387 | ||
382 | usb_enable_endpoint(ep_index(0, DIR_RX)); | 388 | usb_enable_endpoint(ep_index(EP_CONTROL, DIR_RX)); |
383 | usb_enable_endpoint(ep_index(0, DIR_TX)); | 389 | usb_enable_endpoint(ep_index(EP_CONTROL, DIR_TX)); |
384 | 390 | ||
385 | for (i = 1; i < USB_NUM_ENDPOINTS-1; i++) | 391 | for (i = 1; i < USB_NUM_ENDPOINTS-1; i++) |
386 | { | 392 | { |
387 | usb_enable_endpoint(ep_index(i, DIR_RX)); | 393 | usb_enable_endpoint(ep_index(i, DIR_RX)); |
388 | usb_enable_endpoint(ep_index(i, DIR_TX)); | 394 | usb_enable_endpoint(ep_index(i, DIR_TX)); |
389 | } | 395 | } |
390 | 396 | ||
391 | ZVM_SPECIFIC; | 397 | ZVM_SPECIFIC; |
392 | } | 398 | } |
393 | 399 | ||
@@ -414,45 +420,45 @@ void usb_drv_init(void) | |||
414 | sleep(10); | 420 | sleep(10); |
415 | /* Enable CLKAON & GLINTENA */ | 421 | /* Enable CLKAON & GLINTENA */ |
416 | ISP1583_INIT_MODE = STANDARD_INIT_MODE; | 422 | ISP1583_INIT_MODE = STANDARD_INIT_MODE; |
417 | 423 | ||
418 | /* Disable all OTG functions */ | 424 | /* Disable all OTG functions */ |
419 | ISP1583_INIT_OTG = 0; | 425 | ISP1583_INIT_OTG = 0; |
420 | 426 | ||
421 | #ifdef DEBUG | 427 | #ifdef DEBUG |
422 | logf("BUS_CONF/DA0:%d MODE0/DA1: %d MODE1: %d", (bool)(ISP1583_INIT_MODE & INIT_MODE_TEST0), (bool)(ISP1583_INIT_MODE & INIT_MODE_TEST1), (bool)(ISP1583_INIT_MODE & INIT_MODE_TEST2)); | 428 | logf("BUS_CONF/DA0:%d MODE0/DA1: %d MODE1: %d", (bool)(ISP1583_INIT_MODE & INIT_MODE_TEST0), (bool)(ISP1583_INIT_MODE & INIT_MODE_TEST1), (bool)(ISP1583_INIT_MODE & INIT_MODE_TEST2)); |
423 | logf("Chip ID: 0x%x", ISP1583_GEN_CHIPID); | 429 | logf("Chip ID: 0x%x", ISP1583_GEN_CHIPID); |
424 | //logf("INV0: 0x% IRQEDGE: 0x%x IRQPORT: 0x%x", IO_GIO_INV0, IO_GIO_IRQEDGE, IO_GIO_IRQPORT); | 430 | //logf("INV0: 0x% IRQEDGE: 0x%x IRQPORT: 0x%x", IO_GIO_INV0, IO_GIO_IRQEDGE, IO_GIO_IRQPORT); |
425 | #endif | 431 | #endif |
426 | 432 | ||
427 | /*Set interrupt generation to target-specific mode + | 433 | /*Set interrupt generation to target-specific mode + |
428 | * Set the control pipe to ACK only interrupt + | 434 | * Set the control pipe to ACK only interrupt + |
429 | * Set the IN pipe to ACK only interrupt + | 435 | * Set the IN pipe to ACK only interrupt + |
430 | * Set OUT pipe to ACK and NYET interrupt | 436 | * Set OUT pipe to ACK and NYET interrupt |
431 | */ | 437 | */ |
432 | 438 | ||
433 | ISP1583_INIT_INTCONF = 0x54 | INT_CONF_TARGET; | 439 | ISP1583_INIT_INTCONF = 0x54 | INT_CONF_TARGET; |
434 | /* Clear all interrupts */ | 440 | /* Clear all interrupts */ |
435 | set_int_value(ISP1583_GEN_INT_A, ISP1583_GEN_INT_B, 0xFFFFFFFF); | 441 | set_int_value(ISP1583_GEN_INT_A, ISP1583_GEN_INT_B, 0xFFFFFFFF); |
436 | /* Enable USB interrupts */ | 442 | /* Enable USB interrupts */ |
437 | set_int_value(ISP1583_INIT_INTEN_A, ISP1583_INIT_INTEN_B, STANDARD_INTEN); | 443 | set_int_value(ISP1583_INIT_INTEN_A, ISP1583_INIT_INTEN_B, STANDARD_INTEN); |
438 | 444 | ||
439 | ZVM_SPECIFIC; | 445 | ZVM_SPECIFIC; |
440 | 446 | ||
441 | /* Enable interrupt at CPU level */ | 447 | /* Enable interrupt at CPU level */ |
442 | EN_INT_CPU_TARGET; | 448 | EN_INT_CPU_TARGET; |
443 | 449 | ||
444 | setup_endpoints(); | 450 | setup_endpoints(); |
445 | 451 | ||
446 | /* Clear device address and disable it */ | 452 | /* Clear device address and disable it */ |
447 | ISP1583_INIT_ADDRESS = 0; | 453 | ISP1583_INIT_ADDRESS = 0; |
448 | 454 | ||
449 | /* Turn SoftConnect on */ | 455 | /* Turn SoftConnect on */ |
450 | ISP1583_INIT_MODE |= INIT_MODE_SOFTCT; | 456 | ISP1583_INIT_MODE |= INIT_MODE_SOFTCT; |
451 | 457 | ||
452 | ZVM_SPECIFIC; | 458 | ZVM_SPECIFIC; |
453 | 459 | ||
454 | //tick_add_task(usb_helper); | 460 | //tick_add_task(usb_helper); |
455 | 461 | ||
456 | logf("usb_init_device() finished"); | 462 | logf("usb_init_device() finished"); |
457 | } | 463 | } |
458 | 464 | ||
@@ -460,7 +466,7 @@ int usb_drv_port_speed(void) | |||
460 | { | 466 | { |
461 | return (int)high_speed_mode; | 467 | return (int)high_speed_mode; |
462 | } | 468 | } |
463 | 469 | ||
464 | void usb_drv_exit(void) | 470 | void usb_drv_exit(void) |
465 | { | 471 | { |
466 | logf("usb_drv_exit()"); | 472 | logf("usb_drv_exit()"); |
@@ -468,7 +474,7 @@ void usb_drv_exit(void) | |||
468 | /* Disable device */ | 474 | /* Disable device */ |
469 | ISP1583_INIT_MODE &= ~INIT_MODE_SOFTCT; | 475 | ISP1583_INIT_MODE &= ~INIT_MODE_SOFTCT; |
470 | ISP1583_INIT_ADDRESS = 0; | 476 | ISP1583_INIT_ADDRESS = 0; |
471 | 477 | ||
472 | /* Disable interrupts */ | 478 | /* Disable interrupts */ |
473 | set_int_value(ISP1583_INIT_INTEN_A, ISP1583_INIT_INTEN_B, 0); | 479 | set_int_value(ISP1583_INIT_INTEN_A, ISP1583_INIT_INTEN_B, 0); |
474 | /* and the CPU's one... */ | 480 | /* and the CPU's one... */ |
@@ -478,9 +484,9 @@ void usb_drv_exit(void) | |||
478 | /* Send usb controller to suspend mode */ | 484 | /* Send usb controller to suspend mode */ |
479 | ISP1583_INIT_MODE = INIT_MODE_GOSUSP; | 485 | ISP1583_INIT_MODE = INIT_MODE_GOSUSP; |
480 | ISP1583_INIT_MODE = 0; | 486 | ISP1583_INIT_MODE = 0; |
481 | 487 | ||
482 | //tick_remove_task(usb_helper); | 488 | //tick_remove_task(usb_helper); |
483 | 489 | ||
484 | ZVM_SPECIFIC; | 490 | ZVM_SPECIFIC; |
485 | } | 491 | } |
486 | 492 | ||
@@ -517,7 +523,7 @@ static void in_callback(int ep, unsigned char *buf, int len) | |||
517 | int usb_drv_recv(int ep, void* ptr, int length) | 523 | int usb_drv_recv(int ep, void* ptr, int length) |
518 | { | 524 | { |
519 | logf("usb_drv_recv(%d, 0x%x, %d)", ep, (int)ptr, length); | 525 | logf("usb_drv_recv(%d, 0x%x, %d)", ep, (int)ptr, length); |
520 | if(ep == 0 && length == 0 && ptr == NULL) | 526 | if(ep == EP_CONTROL && length == 0 && ptr == NULL) |
521 | { | 527 | { |
522 | usb_status_ack(ep, DIR_TX); | 528 | usb_status_ack(ep, DIR_TX); |
523 | return 0; | 529 | return 0; |
@@ -527,7 +533,7 @@ int usb_drv_recv(int ep, void* ptr, int length) | |||
527 | endpoints[ep].in_max_len = length; | 533 | endpoints[ep].in_max_len = length; |
528 | endpoints[ep].in_min_len = length; | 534 | endpoints[ep].in_min_len = length; |
529 | endpoints[ep].in_ptr = 0; | 535 | endpoints[ep].in_ptr = 0; |
530 | if(ep == 0) | 536 | if(ep == EP_CONTROL) |
531 | { | 537 | { |
532 | usb_data_stage_enable(ep, DIR_RX); | 538 | usb_data_stage_enable(ep, DIR_RX); |
533 | return usb_receive(ep); | 539 | return usb_receive(ep); |
@@ -560,7 +566,7 @@ static void usb_drv_wait(int ep, bool send) | |||
560 | int usb_drv_send(int ep, void* ptr, int length) | 566 | int usb_drv_send(int ep, void* ptr, int length) |
561 | { | 567 | { |
562 | logf("usb_drv_send_nb(%d, 0x%x, %d)", ep, (int)ptr, length); | 568 | logf("usb_drv_send_nb(%d, 0x%x, %d)", ep, (int)ptr, length); |
563 | if(ep == 0 && length == 0 && ptr == NULL) | 569 | if(ep == EP_CONTROL && length == 0 && ptr == NULL) |
564 | { | 570 | { |
565 | usb_status_ack(ep, DIR_RX); | 571 | usb_status_ack(ep, DIR_RX); |
566 | return 0; | 572 | return 0; |
@@ -572,7 +578,7 @@ int usb_drv_send(int ep, void* ptr, int length) | |||
572 | endpoints[ep].out_len = length; | 578 | endpoints[ep].out_len = length; |
573 | endpoints[ep].out_ptr = 0; | 579 | endpoints[ep].out_ptr = 0; |
574 | endpoints[ep].out_in_progress = 1; | 580 | endpoints[ep].out_in_progress = 1; |
575 | if(ep == 0) | 581 | if(ep == EP_CONTROL) |
576 | { | 582 | { |
577 | int rc = usb_send(ep); | 583 | int rc = usb_send(ep); |
578 | usb_data_stage_enable(ep, DIR_TX); | 584 | usb_data_stage_enable(ep, DIR_TX); |
@@ -602,7 +608,7 @@ void usb_drv_cancel_all_transfers(void) | |||
602 | int usb_drv_request_endpoint(int type, int dir) | 608 | int usb_drv_request_endpoint(int type, int dir) |
603 | { | 609 | { |
604 | int i, bit; | 610 | int i, bit; |
605 | 611 | ||
606 | if (type != USB_ENDPOINT_XFER_BULK) | 612 | if (type != USB_ENDPOINT_XFER_BULK) |
607 | return -1; | 613 | return -1; |
608 | 614 | ||
@@ -631,13 +637,13 @@ static void bus_reset(void) | |||
631 | /* Enable USB interrupts */ | 637 | /* Enable USB interrupts */ |
632 | ISP1583_INIT_INTCONF = 0x54 | INT_CONF_TARGET; | 638 | ISP1583_INIT_INTCONF = 0x54 | INT_CONF_TARGET; |
633 | set_int_value(ISP1583_INIT_INTEN_A, ISP1583_INIT_INTEN_B, STANDARD_INTEN); | 639 | set_int_value(ISP1583_INIT_INTEN_A, ISP1583_INIT_INTEN_B, STANDARD_INTEN); |
634 | 640 | ||
635 | /* Disable all OTG functions */ | 641 | /* Disable all OTG functions */ |
636 | ISP1583_INIT_OTG = 0; | 642 | ISP1583_INIT_OTG = 0; |
637 | 643 | ||
638 | /* Clear device address and enable it */ | 644 | /* Clear device address and enable it */ |
639 | ISP1583_INIT_ADDRESS = INIT_ADDRESS_DEVEN; | 645 | ISP1583_INIT_ADDRESS = INIT_ADDRESS_DEVEN; |
640 | 646 | ||
641 | ZVM_SPECIFIC; | 647 | ZVM_SPECIFIC; |
642 | 648 | ||
643 | /* Reset endpoints to default */ | 649 | /* Reset endpoints to default */ |
@@ -651,13 +657,13 @@ void IRAM_ATTR usb_drv_int(void) | |||
651 | { | 657 | { |
652 | unsigned long ints; | 658 | unsigned long ints; |
653 | ints = ISP1583_GEN_INT_READ & ISP1583_INIT_INTEN_READ; | 659 | ints = ISP1583_GEN_INT_READ & ISP1583_INIT_INTEN_READ; |
654 | 660 | ||
655 | if(!ints) | 661 | if(!ints) |
656 | return; | 662 | return; |
657 | 663 | ||
658 | /* Unlock the device's registers */ | 664 | /* Unlock the device's registers */ |
659 | ISP1583_GEN_UNLCKDEV = ISP1583_UNLOCK_CODE; | 665 | ISP1583_GEN_UNLCKDEV = ISP1583_UNLOCK_CODE; |
660 | 666 | ||
661 | //logf(" handling int [0x%lx & 0x%lx = 0x%x]", ISP1583_GEN_INT_READ, ISP1583_INIT_INTEN_READ, (int)ints); | 667 | //logf(" handling int [0x%lx & 0x%lx = 0x%x]", ISP1583_GEN_INT_READ, ISP1583_INIT_INTEN_READ, (int)ints); |
662 | 668 | ||
663 | if(ints & INT_IEBRST) /* Bus reset */ | 669 | if(ints & INT_IEBRST) /* Bus reset */ |
@@ -690,7 +696,7 @@ void IRAM_ATTR usb_drv_int(void) | |||
690 | { | 696 | { |
691 | if(i>25) | 697 | if(i>25) |
692 | break; | 698 | break; |
693 | 699 | ||
694 | if(ep_event & (1 << i)) | 700 | if(ep_event & (1 << i)) |
695 | { | 701 | { |
696 | logf("EP%d %s interrupt", (i - 10) / 2, i % 2 ? "RX" : "TX"); | 702 | logf("EP%d %s interrupt", (i - 10) / 2, i % 2 ? "RX" : "TX"); |
@@ -718,7 +724,7 @@ void IRAM_ATTR usb_drv_int(void) | |||
718 | } | 724 | } |
719 | /* Mask all (enabled) interrupts */ | 725 | /* Mask all (enabled) interrupts */ |
720 | set_int_value(ISP1583_GEN_INT_A, ISP1583_GEN_INT_B, ints); | 726 | set_int_value(ISP1583_GEN_INT_A, ISP1583_GEN_INT_B, ints); |
721 | 727 | ||
722 | ZVM_SPECIFIC; | 728 | ZVM_SPECIFIC; |
723 | } | 729 | } |
724 | 730 | ||
@@ -726,7 +732,7 @@ void usb_drv_set_address(int address) | |||
726 | { | 732 | { |
727 | logf("usb_drv_set_address(0x%x)", address); | 733 | logf("usb_drv_set_address(0x%x)", address); |
728 | ISP1583_INIT_ADDRESS = (address & 0x7F) | INIT_ADDRESS_DEVEN; | 734 | ISP1583_INIT_ADDRESS = (address & 0x7F) | INIT_ADDRESS_DEVEN; |
729 | 735 | ||
730 | ZVM_SPECIFIC; | 736 | ZVM_SPECIFIC; |
731 | } | 737 | } |
732 | 738 | ||