Changeset 9599


Ignore:
Timestamp:
2007-11-26T09:49:58+01:00 (8 years ago)
Author:
juhosg
Message:

[adm5120] more USB driver fixes, now it passes usbtests 1-14

Location:
trunk/target/linux/adm5120/files/drivers/usb/host
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/adm5120/files/drivers/usb/host/adm5120-hcd.c

    r9593 r9599  
    4646#include "../core/hub.h" 
    4747 
    48 #define DRIVER_VERSION  "v0.10.1" 
     48#define DRIVER_VERSION  "v0.14.0" 
    4949#define DRIVER_AUTHOR   "Gabor Juhos <juhosg at openwrt.org>" 
    5050#define DRIVER_DESC     "ADMtek USB 1.1 Host Controller Driver" 
     
    143143                td_cnt = urb->number_of_packets; 
    144144                break; 
    145         default: 
    146                 /* paranoia */ 
    147                 admhc_err(ahcd, "bad EP type %d", ed->type); 
    148                 return -EINVAL; 
    149145        } 
    150146 
     
    208204        admhc_dump_ed(ahcd, "admhc_urb_enqueue", urb_priv->ed, 1); 
    209205#endif 
     206 
    210207fail0: 
    211208        spin_unlock(&urb->lock); 
  • trunk/target/linux/adm5120/files/drivers/usb/host/adm5120-q.c

    r9593 r9599  
    232232static void ed_deschedule(struct admhcd *ahcd, struct ed *ed) 
    233233{ 
     234 
     235#ifdef ADMHC_VERBOSE_DEBUG 
     236        admhc_dump_ed(ahcd, "ED-DESCHED", ed, 1); 
     237#endif 
     238 
    234239        ed->hwINFO |= cpu_to_hc32(ahcd, ED_SKIP); 
    235240        wmb(); 
     
    334339static void start_ed_unlink(struct admhcd *ahcd, struct ed *ed) 
    335340{ 
     341 
     342#ifdef ADMHC_VERBOSE_DEBUG 
     343        admhc_dump_ed(ahcd, "ED-UNLINK", ed, 1); 
     344#endif 
     345 
    336346        ed->hwINFO |= cpu_to_hc32(ahcd, ED_DEQUEUE); 
    337347        ed_deschedule(ahcd, ed); 
     
    736746                                continue; 
    737747                        } 
    738  
     748#if 0 
    739749                        if (!list_empty(&ed->td_list)) { 
    740750                                struct td       *td; 
     
    750760                                        goto skip_ed; 
    751761                        } 
     762#endif 
    752763                } 
    753764 
     
    794805 
    795806                        /* HC may have partly processed this TD */ 
    796                         urb_print(ahcd, urb, "PARTIAL", 1); 
     807#ifdef ADMHC_VERBOSE_DEBUG 
     808                        urb_print(ahcd, urb, "PARTIAL", 0); 
     809#endif 
    797810                        td_done(ahcd, urb, td); 
    798811 
     
    810823                ed->hwHeadP &= ~cpu_to_hc32(ahcd, ED_H); 
    811824                ed->hwNextED = 0; 
    812                 wmb (); 
     825                wmb(); 
    813826                ed->hwINFO &= ~cpu_to_hc32(ahcd, ED_SKIP | ED_DEQUEUE); 
    814827 
     
    866879} 
    867880 
     881static void ed_intr_refill(struct admhcd *ahcd, struct ed *ed) 
     882{ 
     883        __hc32 toggle = ed->hwHeadP & cpu_to_hc32(ahcd, ED_C); 
     884 
     885        ed->hwHeadP = ed->hwTailP | toggle; 
     886} 
     887 
     888 
    868889static inline int is_ed_halted(struct admhcd *ahcd, struct ed *ed) 
    869890{ 
     
    883904 
    884905#ifdef ADMHC_VERBOSE_DEBUG 
    885         admhc_dump_ed(ahcd, "UPDATE", ed, 0); 
     906        admhc_dump_ed(ahcd, "UPDATE", ed, 1); 
    886907#endif 
    887908 
     
    899920                if (is_ed_halted(ahcd, ed) && is_td_halted(ahcd, ed, td)) 
    900921                        ed_unhalt(ahcd, ed, urb); 
     922 
     923                if (ed->type == PIPE_INTERRUPT) 
     924                        ed_intr_refill(ahcd,ed); 
    901925 
    902926                /* If all this urb's TDs are done, call complete() */ 
Note: See TracChangeset for help on using the changeset viewer.