diff options
Diffstat (limited to 'drivers/usb/atm')
-rw-r--r-- | drivers/usb/atm/ueagle-atm.c | 114 |
1 files changed, 88 insertions, 26 deletions
diff --git a/drivers/usb/atm/ueagle-atm.c b/drivers/usb/atm/ueagle-atm.c index b5e8cbad223b..2cdabd3421e2 100644 --- a/drivers/usb/atm/ueagle-atm.c +++ b/drivers/usb/atm/ueagle-atm.c | |||
@@ -149,6 +149,9 @@ struct uea_softc { | |||
149 | 149 | ||
150 | int modem_index; | 150 | int modem_index; |
151 | unsigned int driver_info; | 151 | unsigned int driver_info; |
152 | int annex; | ||
153 | #define ANNEXA 0 | ||
154 | #define ANNEXB 1 | ||
152 | 155 | ||
153 | int booting; | 156 | int booting; |
154 | int reset; | 157 | int reset; |
@@ -207,10 +210,34 @@ struct uea_softc { | |||
207 | #define ELSA_PID_PSTFIRM 0x3350 | 210 | #define ELSA_PID_PSTFIRM 0x3350 |
208 | #define ELSA_PID_PREFIRM 0x3351 | 211 | #define ELSA_PID_PREFIRM 0x3351 |
209 | 212 | ||
213 | #define ELSA_PID_A_PREFIRM 0x3352 | ||
214 | #define ELSA_PID_A_PSTFIRM 0x3353 | ||
215 | #define ELSA_PID_B_PREFIRM 0x3362 | ||
216 | #define ELSA_PID_B_PSTFIRM 0x3363 | ||
217 | |||
210 | /* | 218 | /* |
211 | * Sagem USB IDs | 219 | * Devolo IDs : pots if (pid & 0x10) |
212 | */ | 220 | */ |
213 | #define EAGLE_VID 0x1110 | 221 | #define DEVOLO_VID 0x1039 |
222 | #define DEVOLO_EAGLE_I_A_PID_PSTFIRM 0x2110 | ||
223 | #define DEVOLO_EAGLE_I_A_PID_PREFIRM 0x2111 | ||
224 | |||
225 | #define DEVOLO_EAGLE_I_B_PID_PSTFIRM 0x2100 | ||
226 | #define DEVOLO_EAGLE_I_B_PID_PREFIRM 0x2101 | ||
227 | |||
228 | #define DEVOLO_EAGLE_II_A_PID_PSTFIRM 0x2130 | ||
229 | #define DEVOLO_EAGLE_II_A_PID_PREFIRM 0x2131 | ||
230 | |||
231 | #define DEVOLO_EAGLE_II_B_PID_PSTFIRM 0x2120 | ||
232 | #define DEVOLO_EAGLE_II_B_PID_PREFIRM 0x2121 | ||
233 | |||
234 | /* | ||
235 | * Reference design USB IDs | ||
236 | */ | ||
237 | #define ANALOG_VID 0x1110 | ||
238 | #define ADI930_PID_PREFIRM 0x9001 | ||
239 | #define ADI930_PID_PSTFIRM 0x9000 | ||
240 | |||
214 | #define EAGLE_I_PID_PREFIRM 0x9010 /* Eagle I */ | 241 | #define EAGLE_I_PID_PREFIRM 0x9010 /* Eagle I */ |
215 | #define EAGLE_I_PID_PSTFIRM 0x900F /* Eagle I */ | 242 | #define EAGLE_I_PID_PSTFIRM 0x900F /* Eagle I */ |
216 | 243 | ||
@@ -241,6 +268,9 @@ struct uea_softc { | |||
241 | 268 | ||
242 | #define PREFIRM 0 | 269 | #define PREFIRM 0 |
243 | #define PSTFIRM (1<<7) | 270 | #define PSTFIRM (1<<7) |
271 | #define AUTO_ANNEX_A (1<<8) | ||
272 | #define AUTO_ANNEX_B (1<<9) | ||
273 | |||
244 | enum { | 274 | enum { |
245 | ADI930 = 0, | 275 | ADI930 = 0, |
246 | EAGLE_I, | 276 | EAGLE_I, |
@@ -255,8 +285,8 @@ enum { | |||
255 | #define UEA_CHIP_VERSION(x) \ | 285 | #define UEA_CHIP_VERSION(x) \ |
256 | ((x)->driver_info & 0xf) | 286 | ((x)->driver_info & 0xf) |
257 | 287 | ||
258 | #define IS_ISDN(usb_dev) \ | 288 | #define IS_ISDN(x) \ |
259 | (le16_to_cpu((usb_dev)->descriptor.bcdDevice) & 0x80) | 289 | ((x)->annex & ANNEXB) |
260 | 290 | ||
261 | #define INS_TO_USBDEV(ins) ins->usb_dev | 291 | #define INS_TO_USBDEV(ins) ins->usb_dev |
262 | 292 | ||
@@ -511,6 +541,7 @@ static unsigned int debug; | |||
511 | static int use_iso[NB_MODEM] = {[0 ... (NB_MODEM - 1)] = 1}; | 541 | static int use_iso[NB_MODEM] = {[0 ... (NB_MODEM - 1)] = 1}; |
512 | static int sync_wait[NB_MODEM]; | 542 | static int sync_wait[NB_MODEM]; |
513 | static char *cmv_file[NB_MODEM]; | 543 | static char *cmv_file[NB_MODEM]; |
544 | static int annex[NB_MODEM]; | ||
514 | 545 | ||
515 | module_param(debug, uint, 0644); | 546 | module_param(debug, uint, 0644); |
516 | MODULE_PARM_DESC(debug, "module debug level (0=off,1=on,2=verbose)"); | 547 | MODULE_PARM_DESC(debug, "module debug level (0=off,1=on,2=verbose)"); |
@@ -521,6 +552,9 @@ MODULE_PARM_DESC(sync_wait, "wait the synchronisation before starting ATM"); | |||
521 | module_param_array(cmv_file, charp, NULL, 0644); | 552 | module_param_array(cmv_file, charp, NULL, 0644); |
522 | MODULE_PARM_DESC(cmv_file, | 553 | MODULE_PARM_DESC(cmv_file, |
523 | "file name with configuration and management variables"); | 554 | "file name with configuration and management variables"); |
555 | module_param_array(annex, uint, NULL, 0644); | ||
556 | MODULE_PARM_DESC(annex, | ||
557 | "manually set annex a/b (0=auto, 1=annex a, 2=annex b)"); | ||
524 | 558 | ||
525 | #define UPDATE_ATM_STAT(type, val) \ | 559 | #define UPDATE_ATM_STAT(type, val) \ |
526 | do { \ | 560 | do { \ |
@@ -810,17 +844,17 @@ static int request_dsp(struct uea_softc *sc) | |||
810 | char *dsp_name; | 844 | char *dsp_name; |
811 | 845 | ||
812 | if (UEA_CHIP_VERSION(sc) == EAGLE_IV) { | 846 | if (UEA_CHIP_VERSION(sc) == EAGLE_IV) { |
813 | if (IS_ISDN(sc->usb_dev)) | 847 | if (IS_ISDN(sc)) |
814 | dsp_name = FW_DIR "DSP4i.bin"; | 848 | dsp_name = FW_DIR "DSP4i.bin"; |
815 | else | 849 | else |
816 | dsp_name = FW_DIR "DSP4p.bin"; | 850 | dsp_name = FW_DIR "DSP4p.bin"; |
817 | } else if (UEA_CHIP_VERSION(sc) == ADI930) { | 851 | } else if (UEA_CHIP_VERSION(sc) == ADI930) { |
818 | if (IS_ISDN(sc->usb_dev)) | 852 | if (IS_ISDN(sc)) |
819 | dsp_name = FW_DIR "DSP9i.bin"; | 853 | dsp_name = FW_DIR "DSP9i.bin"; |
820 | else | 854 | else |
821 | dsp_name = FW_DIR "DSP9p.bin"; | 855 | dsp_name = FW_DIR "DSP9p.bin"; |
822 | } else { | 856 | } else { |
823 | if (IS_ISDN(sc->usb_dev)) | 857 | if (IS_ISDN(sc)) |
824 | dsp_name = FW_DIR "DSPei.bin"; | 858 | dsp_name = FW_DIR "DSPei.bin"; |
825 | else | 859 | else |
826 | dsp_name = FW_DIR "DSPep.bin"; | 860 | dsp_name = FW_DIR "DSPep.bin"; |
@@ -1515,7 +1549,7 @@ static void cmvs_file_name(struct uea_softc *sc, char *const cmv_name, int ver) | |||
1515 | else | 1549 | else |
1516 | file_arr[3] = 'e'; | 1550 | file_arr[3] = 'e'; |
1517 | 1551 | ||
1518 | file_arr[4] = IS_ISDN(sc->usb_dev) ? 'i' : 'p'; | 1552 | file_arr[4] = IS_ISDN(sc) ? 'i' : 'p'; |
1519 | file = file_arr; | 1553 | file = file_arr; |
1520 | } else | 1554 | } else |
1521 | file = cmv_file[sc->modem_index]; | 1555 | file = cmv_file[sc->modem_index]; |
@@ -2459,6 +2493,19 @@ static int uea_bind(struct usbatm_data *usbatm, struct usb_interface *intf, | |||
2459 | sc->modem_index = (modem_index < NB_MODEM) ? modem_index++ : 0; | 2493 | sc->modem_index = (modem_index < NB_MODEM) ? modem_index++ : 0; |
2460 | sc->driver_info = id->driver_info; | 2494 | sc->driver_info = id->driver_info; |
2461 | 2495 | ||
2496 | /* first try to use module parameter */ | ||
2497 | if (annex[sc->modem_index] == 1) | ||
2498 | sc->annex = ANNEXA; | ||
2499 | else if (annex[sc->modem_index] == 2) | ||
2500 | sc->annex = ANNEXB; | ||
2501 | /* try to autodetect annex */ | ||
2502 | else if (sc->driver_info & AUTO_ANNEX_A) | ||
2503 | sc->annex = ANNEXA; | ||
2504 | else if (sc->driver_info & AUTO_ANNEX_B) | ||
2505 | sc->annex = ANNEXB; | ||
2506 | else | ||
2507 | sc->annex = (le16_to_cpu(sc->usb_dev->descriptor.bcdDevice) & 0x80)?ANNEXB:ANNEXA; | ||
2508 | |||
2462 | /* ADI930 don't support iso */ | 2509 | /* ADI930 don't support iso */ |
2463 | if (UEA_CHIP_VERSION(id) != ADI930 && use_iso[sc->modem_index]) { | 2510 | if (UEA_CHIP_VERSION(id) != ADI930 && use_iso[sc->modem_index]) { |
2464 | int i; | 2511 | int i; |
@@ -2520,10 +2567,11 @@ static int uea_probe(struct usb_interface *intf, const struct usb_device_id *id) | |||
2520 | struct usb_device *usb = interface_to_usbdev(intf); | 2567 | struct usb_device *usb = interface_to_usbdev(intf); |
2521 | 2568 | ||
2522 | uea_enters(usb); | 2569 | uea_enters(usb); |
2523 | uea_info(usb, "ADSL device founded vid (%#X) pid (%#X) : %s %s\n", | 2570 | uea_info(usb, "ADSL device founded vid (%#X) pid (%#X) Rev (%#X): %s\n", |
2524 | le16_to_cpu(usb->descriptor.idVendor), | 2571 | le16_to_cpu(usb->descriptor.idVendor), |
2525 | le16_to_cpu(usb->descriptor.idProduct), | 2572 | le16_to_cpu(usb->descriptor.idProduct), |
2526 | chip_name[UEA_CHIP_VERSION(id)], IS_ISDN(usb)?"isdn":"pots"); | 2573 | le16_to_cpu(usb->descriptor.bcdDevice), |
2574 | chip_name[UEA_CHIP_VERSION(id)]); | ||
2527 | 2575 | ||
2528 | usb_reset_device(usb); | 2576 | usb_reset_device(usb); |
2529 | 2577 | ||
@@ -2556,26 +2604,40 @@ static void uea_disconnect(struct usb_interface *intf) | |||
2556 | * List of supported VID/PID | 2604 | * List of supported VID/PID |
2557 | */ | 2605 | */ |
2558 | static const struct usb_device_id uea_ids[] = { | 2606 | static const struct usb_device_id uea_ids[] = { |
2607 | {USB_DEVICE(ANALOG_VID, ADI930_PID_PREFIRM), .driver_info = ADI930 | PREFIRM}, | ||
2608 | {USB_DEVICE(ANALOG_VID, ADI930_PID_PSTFIRM), .driver_info = ADI930 | PSTFIRM}, | ||
2609 | {USB_DEVICE(ANALOG_VID, EAGLE_I_PID_PREFIRM), .driver_info = EAGLE_I | PREFIRM}, | ||
2610 | {USB_DEVICE(ANALOG_VID, EAGLE_I_PID_PSTFIRM), .driver_info = EAGLE_I | PSTFIRM}, | ||
2611 | {USB_DEVICE(ANALOG_VID, EAGLE_II_PID_PREFIRM), .driver_info = EAGLE_II | PREFIRM}, | ||
2612 | {USB_DEVICE(ANALOG_VID, EAGLE_II_PID_PSTFIRM), .driver_info = EAGLE_II | PSTFIRM}, | ||
2613 | {USB_DEVICE(ANALOG_VID, EAGLE_IIC_PID_PREFIRM), .driver_info = EAGLE_II | PREFIRM}, | ||
2614 | {USB_DEVICE(ANALOG_VID, EAGLE_IIC_PID_PSTFIRM), .driver_info = EAGLE_II | PSTFIRM}, | ||
2615 | {USB_DEVICE(ANALOG_VID, EAGLE_III_PID_PREFIRM), .driver_info = EAGLE_III | PREFIRM}, | ||
2616 | {USB_DEVICE(ANALOG_VID, EAGLE_III_PID_PSTFIRM), .driver_info = EAGLE_III | PSTFIRM}, | ||
2617 | {USB_DEVICE(ANALOG_VID, EAGLE_IV_PID_PREFIRM), .driver_info = EAGLE_IV | PREFIRM}, | ||
2618 | {USB_DEVICE(ANALOG_VID, EAGLE_IV_PID_PSTFIRM), .driver_info = EAGLE_IV | PSTFIRM}, | ||
2619 | {USB_DEVICE(DEVOLO_VID, DEVOLO_EAGLE_I_A_PID_PREFIRM), .driver_info = EAGLE_I | PREFIRM}, | ||
2620 | {USB_DEVICE(DEVOLO_VID, DEVOLO_EAGLE_I_A_PID_PSTFIRM), .driver_info = EAGLE_I | PSTFIRM | AUTO_ANNEX_A}, | ||
2621 | {USB_DEVICE(DEVOLO_VID, DEVOLO_EAGLE_I_B_PID_PREFIRM), .driver_info = EAGLE_I | PREFIRM}, | ||
2622 | {USB_DEVICE(DEVOLO_VID, DEVOLO_EAGLE_I_B_PID_PSTFIRM), .driver_info = EAGLE_I | PSTFIRM | AUTO_ANNEX_B}, | ||
2623 | {USB_DEVICE(DEVOLO_VID, DEVOLO_EAGLE_II_A_PID_PREFIRM), .driver_info = EAGLE_II | PREFIRM}, | ||
2624 | {USB_DEVICE(DEVOLO_VID, DEVOLO_EAGLE_II_A_PID_PSTFIRM), .driver_info = EAGLE_II | PSTFIRM | AUTO_ANNEX_A}, | ||
2625 | {USB_DEVICE(DEVOLO_VID, DEVOLO_EAGLE_II_B_PID_PREFIRM), .driver_info = EAGLE_II | PREFIRM}, | ||
2626 | {USB_DEVICE(DEVOLO_VID, DEVOLO_EAGLE_II_B_PID_PSTFIRM), .driver_info = EAGLE_II | PSTFIRM | AUTO_ANNEX_B}, | ||
2559 | {USB_DEVICE(ELSA_VID, ELSA_PID_PREFIRM), .driver_info = ADI930 | PREFIRM}, | 2627 | {USB_DEVICE(ELSA_VID, ELSA_PID_PREFIRM), .driver_info = ADI930 | PREFIRM}, |
2560 | {USB_DEVICE(ELSA_VID, ELSA_PID_PSTFIRM), .driver_info = ADI930 | PSTFIRM}, | 2628 | {USB_DEVICE(ELSA_VID, ELSA_PID_PSTFIRM), .driver_info = ADI930 | PSTFIRM}, |
2561 | {USB_DEVICE(EAGLE_VID, EAGLE_I_PID_PREFIRM), .driver_info = EAGLE_I | PREFIRM}, | 2629 | {USB_DEVICE(ELSA_VID, ELSA_PID_A_PREFIRM), .driver_info = ADI930 | PREFIRM}, |
2562 | {USB_DEVICE(EAGLE_VID, EAGLE_I_PID_PSTFIRM), .driver_info = EAGLE_I | PSTFIRM}, | 2630 | {USB_DEVICE(ELSA_VID, ELSA_PID_A_PSTFIRM), .driver_info = ADI930 | PSTFIRM | AUTO_ANNEX_A}, |
2563 | {USB_DEVICE(EAGLE_VID, EAGLE_II_PID_PREFIRM), .driver_info = EAGLE_II | PREFIRM}, | 2631 | {USB_DEVICE(ELSA_VID, ELSA_PID_B_PREFIRM), .driver_info = ADI930 | PREFIRM}, |
2564 | {USB_DEVICE(EAGLE_VID, EAGLE_II_PID_PSTFIRM), .driver_info = EAGLE_II | PSTFIRM}, | 2632 | {USB_DEVICE(ELSA_VID, ELSA_PID_B_PSTFIRM), .driver_info = ADI930 | PSTFIRM | AUTO_ANNEX_B}, |
2565 | {USB_DEVICE(EAGLE_VID, EAGLE_IIC_PID_PREFIRM), .driver_info = EAGLE_II | PREFIRM}, | ||
2566 | {USB_DEVICE(EAGLE_VID, EAGLE_IIC_PID_PSTFIRM), .driver_info = EAGLE_II | PSTFIRM}, | ||
2567 | {USB_DEVICE(EAGLE_VID, EAGLE_III_PID_PREFIRM), .driver_info = EAGLE_III | PREFIRM}, | ||
2568 | {USB_DEVICE(EAGLE_VID, EAGLE_III_PID_PSTFIRM), .driver_info = EAGLE_III | PSTFIRM}, | ||
2569 | {USB_DEVICE(EAGLE_VID, EAGLE_IV_PID_PREFIRM), .driver_info = EAGLE_IV | PREFIRM}, | ||
2570 | {USB_DEVICE(EAGLE_VID, EAGLE_IV_PID_PSTFIRM), .driver_info = EAGLE_IV | PSTFIRM}, | ||
2571 | {USB_DEVICE(USR_VID, MILLER_A_PID_PREFIRM), .driver_info = EAGLE_I | PREFIRM}, | 2633 | {USB_DEVICE(USR_VID, MILLER_A_PID_PREFIRM), .driver_info = EAGLE_I | PREFIRM}, |
2572 | {USB_DEVICE(USR_VID, MILLER_A_PID_PSTFIRM), .driver_info = EAGLE_I | PSTFIRM}, | 2634 | {USB_DEVICE(USR_VID, MILLER_A_PID_PSTFIRM), .driver_info = EAGLE_I | PSTFIRM | AUTO_ANNEX_A}, |
2573 | {USB_DEVICE(USR_VID, MILLER_B_PID_PREFIRM), .driver_info = EAGLE_I | PREFIRM}, | 2635 | {USB_DEVICE(USR_VID, MILLER_B_PID_PREFIRM), .driver_info = EAGLE_I | PREFIRM}, |
2574 | {USB_DEVICE(USR_VID, MILLER_B_PID_PSTFIRM), .driver_info = EAGLE_I | PSTFIRM}, | 2636 | {USB_DEVICE(USR_VID, MILLER_B_PID_PSTFIRM), .driver_info = EAGLE_I | PSTFIRM | AUTO_ANNEX_B}, |
2575 | {USB_DEVICE(USR_VID, HEINEKEN_A_PID_PREFIRM),.driver_info = EAGLE_I | PREFIRM}, | 2637 | {USB_DEVICE(USR_VID, HEINEKEN_A_PID_PREFIRM),.driver_info = EAGLE_I | PREFIRM}, |
2576 | {USB_DEVICE(USR_VID, HEINEKEN_A_PID_PSTFIRM),.driver_info = EAGLE_I | PSTFIRM}, | 2638 | {USB_DEVICE(USR_VID, HEINEKEN_A_PID_PSTFIRM),.driver_info = EAGLE_I | PSTFIRM | AUTO_ANNEX_A}, |
2577 | {USB_DEVICE(USR_VID, HEINEKEN_B_PID_PREFIRM),.driver_info = EAGLE_I | PREFIRM}, | 2639 | {USB_DEVICE(USR_VID, HEINEKEN_B_PID_PREFIRM),.driver_info = EAGLE_I | PREFIRM}, |
2578 | {USB_DEVICE(USR_VID, HEINEKEN_B_PID_PSTFIRM),.driver_info = EAGLE_I | PSTFIRM}, | 2640 | {USB_DEVICE(USR_VID, HEINEKEN_B_PID_PSTFIRM),.driver_info = EAGLE_I | PSTFIRM | AUTO_ANNEX_B}, |
2579 | {} | 2641 | {} |
2580 | }; | 2642 | }; |
2581 | 2643 | ||