diff options
author | Paul Mackerras <paulus@samba.org> | 2006-02-06 18:43:36 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-02-06 18:43:36 -0500 |
commit | 6cb6524d90b6e5497e79a1474bdb2f26755d1c02 (patch) | |
tree | fd475ac8f57a6bd39c976056324d1bc79d11b4c9 /drivers/usb/atm/cxacru.c | |
parent | 837e9594fc3cb9a06bddd7ecf66151334a2e13d2 (diff) | |
parent | 410c05427a69f53851637ccb85c2212131409fbd (diff) |
Merge ../linux-2.6
Diffstat (limited to 'drivers/usb/atm/cxacru.c')
-rw-r--r-- | drivers/usb/atm/cxacru.c | 92 |
1 files changed, 44 insertions, 48 deletions
diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c index af0a41e7870e..04631dcbabbc 100644 --- a/drivers/usb/atm/cxacru.c +++ b/drivers/usb/atm/cxacru.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/init.h> | 36 | #include <linux/init.h> |
37 | #include <linux/device.h> /* FIXME: linux/firmware.h should include it itself */ | 37 | #include <linux/device.h> /* FIXME: linux/firmware.h should include it itself */ |
38 | #include <linux/firmware.h> | 38 | #include <linux/firmware.h> |
39 | #include <linux/mutex.h> | ||
39 | 40 | ||
40 | #include "usbatm.h" | 41 | #include "usbatm.h" |
41 | 42 | ||
@@ -160,7 +161,7 @@ struct cxacru_data { | |||
160 | struct work_struct poll_work; | 161 | struct work_struct poll_work; |
161 | 162 | ||
162 | /* contol handles */ | 163 | /* contol handles */ |
163 | struct semaphore cm_serialize; | 164 | struct mutex cm_serialize; |
164 | u8 *rcv_buf; | 165 | u8 *rcv_buf; |
165 | u8 *snd_buf; | 166 | u8 *snd_buf; |
166 | struct urb *rcv_urb; | 167 | struct urb *rcv_urb; |
@@ -219,7 +220,7 @@ static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm, | |||
219 | goto fail; | 220 | goto fail; |
220 | } | 221 | } |
221 | 222 | ||
222 | down(&instance->cm_serialize); | 223 | mutex_lock(&instance->cm_serialize); |
223 | 224 | ||
224 | /* submit reading urb before the writing one */ | 225 | /* submit reading urb before the writing one */ |
225 | init_completion(&instance->rcv_done); | 226 | init_completion(&instance->rcv_done); |
@@ -288,7 +289,7 @@ static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm, | |||
288 | ret = offd; | 289 | ret = offd; |
289 | dbg("cm %#x", cm); | 290 | dbg("cm %#x", cm); |
290 | fail: | 291 | fail: |
291 | up(&instance->cm_serialize); | 292 | mutex_unlock(&instance->cm_serialize); |
292 | return ret; | 293 | return ret; |
293 | } | 294 | } |
294 | 295 | ||
@@ -352,7 +353,6 @@ static int cxacru_atm_start(struct usbatm_data *usbatm_instance, | |||
352 | struct atm_dev *atm_dev) | 353 | struct atm_dev *atm_dev) |
353 | { | 354 | { |
354 | struct cxacru_data *instance = usbatm_instance->driver_data; | 355 | struct cxacru_data *instance = usbatm_instance->driver_data; |
355 | struct device *dev = &usbatm_instance->usb_intf->dev; | ||
356 | /* | 356 | /* |
357 | struct atm_dev *atm_dev = usbatm_instance->atm_dev; | 357 | struct atm_dev *atm_dev = usbatm_instance->atm_dev; |
358 | */ | 358 | */ |
@@ -364,14 +364,14 @@ static int cxacru_atm_start(struct usbatm_data *usbatm_instance, | |||
364 | ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_MAC_ADDRESS, NULL, 0, | 364 | ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_MAC_ADDRESS, NULL, 0, |
365 | atm_dev->esi, sizeof(atm_dev->esi)); | 365 | atm_dev->esi, sizeof(atm_dev->esi)); |
366 | if (ret < 0) { | 366 | if (ret < 0) { |
367 | dev_err(dev, "cxacru_atm_start: CARD_GET_MAC_ADDRESS returned %d\n", ret); | 367 | atm_err(usbatm_instance, "cxacru_atm_start: CARD_GET_MAC_ADDRESS returned %d\n", ret); |
368 | return ret; | 368 | return ret; |
369 | } | 369 | } |
370 | 370 | ||
371 | /* start ADSL */ | 371 | /* start ADSL */ |
372 | ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_START, NULL, 0, NULL, 0); | 372 | ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_START, NULL, 0, NULL, 0); |
373 | if (ret < 0) { | 373 | if (ret < 0) { |
374 | dev_err(dev, "cxacru_atm_start: CHIP_ADSL_LINE_START returned %d\n", ret); | 374 | atm_err(usbatm_instance, "cxacru_atm_start: CHIP_ADSL_LINE_START returned %d\n", ret); |
375 | return ret; | 375 | return ret; |
376 | } | 376 | } |
377 | 377 | ||
@@ -383,13 +383,13 @@ static int cxacru_atm_start(struct usbatm_data *usbatm_instance, | |||
383 | static void cxacru_poll_status(struct cxacru_data *instance) | 383 | static void cxacru_poll_status(struct cxacru_data *instance) |
384 | { | 384 | { |
385 | u32 buf[CXINF_MAX] = {}; | 385 | u32 buf[CXINF_MAX] = {}; |
386 | struct device *dev = &instance->usbatm->usb_intf->dev; | 386 | struct usbatm_data *usbatm = instance->usbatm; |
387 | struct atm_dev *atm_dev = instance->usbatm->atm_dev; | 387 | struct atm_dev *atm_dev = usbatm->atm_dev; |
388 | int ret; | 388 | int ret; |
389 | 389 | ||
390 | ret = cxacru_cm_get_array(instance, CM_REQUEST_CARD_INFO_GET, buf, CXINF_MAX); | 390 | ret = cxacru_cm_get_array(instance, CM_REQUEST_CARD_INFO_GET, buf, CXINF_MAX); |
391 | if (ret < 0) { | 391 | if (ret < 0) { |
392 | dev_warn(dev, "poll status: error %d\n", ret); | 392 | atm_warn(usbatm, "poll status: error %d\n", ret); |
393 | goto reschedule; | 393 | goto reschedule; |
394 | } | 394 | } |
395 | 395 | ||
@@ -400,50 +400,50 @@ static void cxacru_poll_status(struct cxacru_data *instance) | |||
400 | switch (instance->line_status) { | 400 | switch (instance->line_status) { |
401 | case 0: | 401 | case 0: |
402 | atm_dev->signal = ATM_PHY_SIG_LOST; | 402 | atm_dev->signal = ATM_PHY_SIG_LOST; |
403 | dev_info(dev, "ADSL line: down\n"); | 403 | atm_info(usbatm, "ADSL line: down\n"); |
404 | break; | 404 | break; |
405 | 405 | ||
406 | case 1: | 406 | case 1: |
407 | atm_dev->signal = ATM_PHY_SIG_LOST; | 407 | atm_dev->signal = ATM_PHY_SIG_LOST; |
408 | dev_info(dev, "ADSL line: attemtping to activate\n"); | 408 | atm_info(usbatm, "ADSL line: attempting to activate\n"); |
409 | break; | 409 | break; |
410 | 410 | ||
411 | case 2: | 411 | case 2: |
412 | atm_dev->signal = ATM_PHY_SIG_LOST; | 412 | atm_dev->signal = ATM_PHY_SIG_LOST; |
413 | dev_info(dev, "ADSL line: training\n"); | 413 | atm_info(usbatm, "ADSL line: training\n"); |
414 | break; | 414 | break; |
415 | 415 | ||
416 | case 3: | 416 | case 3: |
417 | atm_dev->signal = ATM_PHY_SIG_LOST; | 417 | atm_dev->signal = ATM_PHY_SIG_LOST; |
418 | dev_info(dev, "ADSL line: channel analysis\n"); | 418 | atm_info(usbatm, "ADSL line: channel analysis\n"); |
419 | break; | 419 | break; |
420 | 420 | ||
421 | case 4: | 421 | case 4: |
422 | atm_dev->signal = ATM_PHY_SIG_LOST; | 422 | atm_dev->signal = ATM_PHY_SIG_LOST; |
423 | dev_info(dev, "ADSL line: exchange\n"); | 423 | atm_info(usbatm, "ADSL line: exchange\n"); |
424 | break; | 424 | break; |
425 | 425 | ||
426 | case 5: | 426 | case 5: |
427 | atm_dev->link_rate = buf[CXINF_DOWNSTREAM_RATE] * 1000 / 424; | 427 | atm_dev->link_rate = buf[CXINF_DOWNSTREAM_RATE] * 1000 / 424; |
428 | atm_dev->signal = ATM_PHY_SIG_FOUND; | 428 | atm_dev->signal = ATM_PHY_SIG_FOUND; |
429 | 429 | ||
430 | dev_info(dev, "ADSL line: up (%d kb/s down | %d kb/s up)\n", | 430 | atm_info(usbatm, "ADSL line: up (%d kb/s down | %d kb/s up)\n", |
431 | buf[CXINF_DOWNSTREAM_RATE], buf[CXINF_UPSTREAM_RATE]); | 431 | buf[CXINF_DOWNSTREAM_RATE], buf[CXINF_UPSTREAM_RATE]); |
432 | break; | 432 | break; |
433 | 433 | ||
434 | case 6: | 434 | case 6: |
435 | atm_dev->signal = ATM_PHY_SIG_LOST; | 435 | atm_dev->signal = ATM_PHY_SIG_LOST; |
436 | dev_info(dev, "ADSL line: waiting\n"); | 436 | atm_info(usbatm, "ADSL line: waiting\n"); |
437 | break; | 437 | break; |
438 | 438 | ||
439 | case 7: | 439 | case 7: |
440 | atm_dev->signal = ATM_PHY_SIG_LOST; | 440 | atm_dev->signal = ATM_PHY_SIG_LOST; |
441 | dev_info(dev, "ADSL line: initializing\n"); | 441 | atm_info(usbatm, "ADSL line: initializing\n"); |
442 | break; | 442 | break; |
443 | 443 | ||
444 | default: | 444 | default: |
445 | atm_dev->signal = ATM_PHY_SIG_UNKNOWN; | 445 | atm_dev->signal = ATM_PHY_SIG_UNKNOWN; |
446 | dev_info(dev, "Unknown line state %02x\n", instance->line_status); | 446 | atm_info(usbatm, "Unknown line state %02x\n", instance->line_status); |
447 | break; | 447 | break; |
448 | } | 448 | } |
449 | reschedule: | 449 | reschedule: |
@@ -504,8 +504,8 @@ static void cxacru_upload_firmware(struct cxacru_data *instance, | |||
504 | { | 504 | { |
505 | int ret; | 505 | int ret; |
506 | int off; | 506 | int off; |
507 | struct usb_device *usb_dev = instance->usbatm->usb_dev; | 507 | struct usbatm_data *usbatm = instance->usbatm; |
508 | struct device *dev = &instance->usbatm->usb_intf->dev; | 508 | struct usb_device *usb_dev = usbatm->usb_dev; |
509 | u16 signature[] = { usb_dev->descriptor.idVendor, usb_dev->descriptor.idProduct }; | 509 | u16 signature[] = { usb_dev->descriptor.idVendor, usb_dev->descriptor.idProduct }; |
510 | u32 val; | 510 | u32 val; |
511 | 511 | ||
@@ -515,7 +515,7 @@ static void cxacru_upload_firmware(struct cxacru_data *instance, | |||
515 | val = cpu_to_le32(instance->modem_type->pll_f_clk); | 515 | val = cpu_to_le32(instance->modem_type->pll_f_clk); |
516 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, PLLFCLK_ADDR, (u8 *) &val, 4); | 516 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, PLLFCLK_ADDR, (u8 *) &val, 4); |
517 | if (ret) { | 517 | if (ret) { |
518 | dev_err(dev, "FirmwarePllFClkValue failed: %d\n", ret); | 518 | usb_err(usbatm, "FirmwarePllFClkValue failed: %d\n", ret); |
519 | return; | 519 | return; |
520 | } | 520 | } |
521 | 521 | ||
@@ -523,7 +523,7 @@ static void cxacru_upload_firmware(struct cxacru_data *instance, | |||
523 | val = cpu_to_le32(instance->modem_type->pll_b_clk); | 523 | val = cpu_to_le32(instance->modem_type->pll_b_clk); |
524 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, PLLBCLK_ADDR, (u8 *) &val, 4); | 524 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, PLLBCLK_ADDR, (u8 *) &val, 4); |
525 | if (ret) { | 525 | if (ret) { |
526 | dev_err(dev, "FirmwarePllBClkValue failed: %d\n", ret); | 526 | usb_err(usbatm, "FirmwarePllBClkValue failed: %d\n", ret); |
527 | return; | 527 | return; |
528 | } | 528 | } |
529 | 529 | ||
@@ -531,14 +531,14 @@ static void cxacru_upload_firmware(struct cxacru_data *instance, | |||
531 | val = cpu_to_le32(SDRAM_ENA); | 531 | val = cpu_to_le32(SDRAM_ENA); |
532 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, SDRAMEN_ADDR, (u8 *) &val, 4); | 532 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, SDRAMEN_ADDR, (u8 *) &val, 4); |
533 | if (ret) { | 533 | if (ret) { |
534 | dev_err(dev, "Enable SDRAM failed: %d\n", ret); | 534 | usb_err(usbatm, "Enable SDRAM failed: %d\n", ret); |
535 | return; | 535 | return; |
536 | } | 536 | } |
537 | 537 | ||
538 | /* Firmware */ | 538 | /* Firmware */ |
539 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, FW_ADDR, fw->data, fw->size); | 539 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, FW_ADDR, fw->data, fw->size); |
540 | if (ret) { | 540 | if (ret) { |
541 | dev_err(dev, "Firmware upload failed: %d\n", ret); | 541 | usb_err(usbatm, "Firmware upload failed: %d\n", ret); |
542 | return; | 542 | return; |
543 | } | 543 | } |
544 | 544 | ||
@@ -546,7 +546,7 @@ static void cxacru_upload_firmware(struct cxacru_data *instance, | |||
546 | if (instance->modem_type->boot_rom_patch) { | 546 | if (instance->modem_type->boot_rom_patch) { |
547 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, BR_ADDR, bp->data, bp->size); | 547 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, BR_ADDR, bp->data, bp->size); |
548 | if (ret) { | 548 | if (ret) { |
549 | dev_err(dev, "Boot ROM patching failed: %d\n", ret); | 549 | usb_err(usbatm, "Boot ROM patching failed: %d\n", ret); |
550 | return; | 550 | return; |
551 | } | 551 | } |
552 | } | 552 | } |
@@ -554,7 +554,7 @@ static void cxacru_upload_firmware(struct cxacru_data *instance, | |||
554 | /* Signature */ | 554 | /* Signature */ |
555 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, SIG_ADDR, (u8 *) signature, 4); | 555 | ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, SIG_ADDR, (u8 *) signature, 4); |
556 | if (ret) { | 556 | if (ret) { |
557 | dev_err(dev, "Signature storing failed: %d\n", ret); | 557 | usb_err(usbatm, "Signature storing failed: %d\n", ret); |
558 | return; | 558 | return; |
559 | } | 559 | } |
560 | 560 | ||
@@ -566,7 +566,7 @@ static void cxacru_upload_firmware(struct cxacru_data *instance, | |||
566 | ret = cxacru_fw(usb_dev, FW_GOTO_MEM, 0x0, 0x0, FW_ADDR, NULL, 0); | 566 | ret = cxacru_fw(usb_dev, FW_GOTO_MEM, 0x0, 0x0, FW_ADDR, NULL, 0); |
567 | } | 567 | } |
568 | if (ret) { | 568 | if (ret) { |
569 | dev_err(dev, "Passing control to firmware failed: %d\n", ret); | 569 | usb_err(usbatm, "Passing control to firmware failed: %d\n", ret); |
570 | return; | 570 | return; |
571 | } | 571 | } |
572 | 572 | ||
@@ -580,7 +580,7 @@ static void cxacru_upload_firmware(struct cxacru_data *instance, | |||
580 | 580 | ||
581 | ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0); | 581 | ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0); |
582 | if (ret < 0) { | 582 | if (ret < 0) { |
583 | dev_err(dev, "modem failed to initialize: %d\n", ret); | 583 | usb_err(usbatm, "modem failed to initialize: %d\n", ret); |
584 | return; | 584 | return; |
585 | } | 585 | } |
586 | 586 | ||
@@ -597,7 +597,7 @@ static void cxacru_upload_firmware(struct cxacru_data *instance, | |||
597 | ret = cxacru_cm(instance, CM_REQUEST_CARD_DATA_SET, | 597 | ret = cxacru_cm(instance, CM_REQUEST_CARD_DATA_SET, |
598 | (u8 *) buf, len, NULL, 0); | 598 | (u8 *) buf, len, NULL, 0); |
599 | if (ret < 0) { | 599 | if (ret < 0) { |
600 | dev_err(dev, "load config data failed: %d\n", ret); | 600 | usb_err(usbatm, "load config data failed: %d\n", ret); |
601 | return; | 601 | return; |
602 | } | 602 | } |
603 | } | 603 | } |
@@ -608,18 +608,19 @@ static void cxacru_upload_firmware(struct cxacru_data *instance, | |||
608 | static int cxacru_find_firmware(struct cxacru_data *instance, | 608 | static int cxacru_find_firmware(struct cxacru_data *instance, |
609 | char* phase, const struct firmware **fw_p) | 609 | char* phase, const struct firmware **fw_p) |
610 | { | 610 | { |
611 | struct device *dev = &instance->usbatm->usb_intf->dev; | 611 | struct usbatm_data *usbatm = instance->usbatm; |
612 | struct device *dev = &usbatm->usb_intf->dev; | ||
612 | char buf[16]; | 613 | char buf[16]; |
613 | 614 | ||
614 | sprintf(buf, "cxacru-%s.bin", phase); | 615 | sprintf(buf, "cxacru-%s.bin", phase); |
615 | dbg("cxacru_find_firmware: looking for %s", buf); | 616 | dbg("cxacru_find_firmware: looking for %s", buf); |
616 | 617 | ||
617 | if (request_firmware(fw_p, buf, dev)) { | 618 | if (request_firmware(fw_p, buf, dev)) { |
618 | dev_dbg(dev, "no stage %s firmware found\n", phase); | 619 | usb_dbg(usbatm, "no stage %s firmware found\n", phase); |
619 | return -ENOENT; | 620 | return -ENOENT; |
620 | } | 621 | } |
621 | 622 | ||
622 | dev_info(dev, "found firmware %s\n", buf); | 623 | usb_info(usbatm, "found firmware %s\n", buf); |
623 | 624 | ||
624 | return 0; | 625 | return 0; |
625 | } | 626 | } |
@@ -627,20 +628,19 @@ static int cxacru_find_firmware(struct cxacru_data *instance, | |||
627 | static int cxacru_heavy_init(struct usbatm_data *usbatm_instance, | 628 | static int cxacru_heavy_init(struct usbatm_data *usbatm_instance, |
628 | struct usb_interface *usb_intf) | 629 | struct usb_interface *usb_intf) |
629 | { | 630 | { |
630 | struct device *dev = &usbatm_instance->usb_intf->dev; | ||
631 | const struct firmware *fw, *bp, *cf; | 631 | const struct firmware *fw, *bp, *cf; |
632 | struct cxacru_data *instance = usbatm_instance->driver_data; | 632 | struct cxacru_data *instance = usbatm_instance->driver_data; |
633 | 633 | ||
634 | int ret = cxacru_find_firmware(instance, "fw", &fw); | 634 | int ret = cxacru_find_firmware(instance, "fw", &fw); |
635 | if (ret) { | 635 | if (ret) { |
636 | dev_warn(dev, "firmware (cxacru-fw.bin) unavailable (hotplug misconfiguration?)\n"); | 636 | usb_warn(usbatm_instance, "firmware (cxacru-fw.bin) unavailable (system misconfigured?)\n"); |
637 | return ret; | 637 | return ret; |
638 | } | 638 | } |
639 | 639 | ||
640 | if (instance->modem_type->boot_rom_patch) { | 640 | if (instance->modem_type->boot_rom_patch) { |
641 | ret = cxacru_find_firmware(instance, "bp", &bp); | 641 | ret = cxacru_find_firmware(instance, "bp", &bp); |
642 | if (ret) { | 642 | if (ret) { |
643 | dev_warn(dev, "boot ROM patch (cxacru-bp.bin) unavailable (hotplug misconfiguration?)\n"); | 643 | usb_warn(usbatm_instance, "boot ROM patch (cxacru-bp.bin) unavailable (system misconfigured?)\n"); |
644 | release_firmware(fw); | 644 | release_firmware(fw); |
645 | return ret; | 645 | return ret; |
646 | } | 646 | } |
@@ -667,22 +667,19 @@ static int cxacru_heavy_init(struct usbatm_data *usbatm_instance, | |||
667 | } | 667 | } |
668 | 668 | ||
669 | static int cxacru_bind(struct usbatm_data *usbatm_instance, | 669 | static int cxacru_bind(struct usbatm_data *usbatm_instance, |
670 | struct usb_interface *intf, const struct usb_device_id *id, | 670 | struct usb_interface *intf, const struct usb_device_id *id) |
671 | int *need_heavy_init) | ||
672 | { | 671 | { |
673 | struct cxacru_data *instance; | 672 | struct cxacru_data *instance; |
674 | struct usb_device *usb_dev = interface_to_usbdev(intf); | 673 | struct usb_device *usb_dev = interface_to_usbdev(intf); |
675 | int ret; | 674 | int ret; |
676 | 675 | ||
677 | /* instance init */ | 676 | /* instance init */ |
678 | instance = kmalloc(sizeof(*instance), GFP_KERNEL); | 677 | instance = kzalloc(sizeof(*instance), GFP_KERNEL); |
679 | if (!instance) { | 678 | if (!instance) { |
680 | dbg("cxacru_bind: no memory for instance data"); | 679 | dbg("cxacru_bind: no memory for instance data"); |
681 | return -ENOMEM; | 680 | return -ENOMEM; |
682 | } | 681 | } |
683 | 682 | ||
684 | memset(instance, 0, sizeof(*instance)); | ||
685 | |||
686 | instance->usbatm = usbatm_instance; | 683 | instance->usbatm = usbatm_instance; |
687 | instance->modem_type = (struct cxacru_modem_type *) id->driver_info; | 684 | instance->modem_type = (struct cxacru_modem_type *) id->driver_info; |
688 | 685 | ||
@@ -721,13 +718,13 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance, | |||
721 | instance->snd_buf, PAGE_SIZE, | 718 | instance->snd_buf, PAGE_SIZE, |
722 | cxacru_blocking_completion, &instance->snd_done, 4); | 719 | cxacru_blocking_completion, &instance->snd_done, 4); |
723 | 720 | ||
724 | init_MUTEX(&instance->cm_serialize); | 721 | mutex_init(&instance->cm_serialize); |
725 | 722 | ||
726 | INIT_WORK(&instance->poll_work, (void *)cxacru_poll_status, instance); | 723 | INIT_WORK(&instance->poll_work, (void *)cxacru_poll_status, instance); |
727 | 724 | ||
728 | usbatm_instance->driver_data = instance; | 725 | usbatm_instance->driver_data = instance; |
729 | 726 | ||
730 | *need_heavy_init = cxacru_card_status(instance); | 727 | usbatm_instance->flags = (cxacru_card_status(instance) ? 0 : UDSL_SKIP_HEAVY_INIT); |
731 | 728 | ||
732 | return 0; | 729 | return 0; |
733 | 730 | ||
@@ -787,12 +784,12 @@ static const struct usb_device_id cxacru_usb_ids[] = { | |||
787 | { /* V = Conexant P = ADSL modem (Hasbani project) */ | 784 | { /* V = Conexant P = ADSL modem (Hasbani project) */ |
788 | USB_DEVICE(0x0572, 0xcb00), .driver_info = (unsigned long) &cxacru_cb00 | 785 | USB_DEVICE(0x0572, 0xcb00), .driver_info = (unsigned long) &cxacru_cb00 |
789 | }, | 786 | }, |
790 | { /* V = Conexant P = ADSL modem (Well PTI-800 */ | ||
791 | USB_DEVICE(0x0572, 0xcb02), .driver_info = (unsigned long) &cxacru_cb00 | ||
792 | }, | ||
793 | { /* V = Conexant P = ADSL modem */ | 787 | { /* V = Conexant P = ADSL modem */ |
794 | USB_DEVICE(0x0572, 0xcb01), .driver_info = (unsigned long) &cxacru_cb00 | 788 | USB_DEVICE(0x0572, 0xcb01), .driver_info = (unsigned long) &cxacru_cb00 |
795 | }, | 789 | }, |
790 | { /* V = Conexant P = ADSL modem (Well PTI-800) */ | ||
791 | USB_DEVICE(0x0572, 0xcb02), .driver_info = (unsigned long) &cxacru_cb00 | ||
792 | }, | ||
796 | { /* V = Conexant P = ADSL modem */ | 793 | { /* V = Conexant P = ADSL modem */ |
797 | USB_DEVICE(0x0572, 0xcb06), .driver_info = (unsigned long) &cxacru_cb00 | 794 | USB_DEVICE(0x0572, 0xcb06), .driver_info = (unsigned long) &cxacru_cb00 |
798 | }, | 795 | }, |
@@ -835,14 +832,13 @@ static const struct usb_device_id cxacru_usb_ids[] = { | |||
835 | MODULE_DEVICE_TABLE(usb, cxacru_usb_ids); | 832 | MODULE_DEVICE_TABLE(usb, cxacru_usb_ids); |
836 | 833 | ||
837 | static struct usbatm_driver cxacru_driver = { | 834 | static struct usbatm_driver cxacru_driver = { |
838 | .owner = THIS_MODULE, | ||
839 | .driver_name = cxacru_driver_name, | 835 | .driver_name = cxacru_driver_name, |
840 | .bind = cxacru_bind, | 836 | .bind = cxacru_bind, |
841 | .heavy_init = cxacru_heavy_init, | 837 | .heavy_init = cxacru_heavy_init, |
842 | .unbind = cxacru_unbind, | 838 | .unbind = cxacru_unbind, |
843 | .atm_start = cxacru_atm_start, | 839 | .atm_start = cxacru_atm_start, |
844 | .in = CXACRU_EP_DATA, | 840 | .bulk_in = CXACRU_EP_DATA, |
845 | .out = CXACRU_EP_DATA, | 841 | .bulk_out = CXACRU_EP_DATA, |
846 | .rx_padding = 3, | 842 | .rx_padding = 3, |
847 | .tx_padding = 11, | 843 | .tx_padding = 11, |
848 | }; | 844 | }; |