aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/gigaset/bas-gigaset.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/isdn/gigaset/bas-gigaset.c')
-rw-r--r--drivers/isdn/gigaset/bas-gigaset.c86
1 files changed, 41 insertions, 45 deletions
diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c
index 1c401b3f88e1..7c905305406b 100644
--- a/drivers/isdn/gigaset/bas-gigaset.c
+++ b/drivers/isdn/gigaset/bas-gigaset.c
@@ -113,7 +113,7 @@ struct bas_cardstate {
113 unsigned char int_in_buf[3]; 113 unsigned char int_in_buf[3];
114 114
115 spinlock_t lock; /* locks all following */ 115 spinlock_t lock; /* locks all following */
116 atomic_t basstate; /* bitmap (BS_*) */ 116 int basstate; /* bitmap (BS_*) */
117 int pending; /* uncompleted base request */ 117 int pending; /* uncompleted base request */
118 wait_queue_head_t waitqueue; 118 wait_queue_head_t waitqueue;
119 int rcvbuf_size; /* size of AT receive buffer */ 119 int rcvbuf_size; /* size of AT receive buffer */
@@ -370,27 +370,27 @@ static void check_pending(struct bas_cardstate *ucs)
370 case 0: 370 case 0:
371 break; 371 break;
372 case HD_OPEN_ATCHANNEL: 372 case HD_OPEN_ATCHANNEL:
373 if (atomic_read(&ucs->basstate) & BS_ATOPEN) 373 if (ucs->basstate & BS_ATOPEN)
374 ucs->pending = 0; 374 ucs->pending = 0;
375 break; 375 break;
376 case HD_OPEN_B1CHANNEL: 376 case HD_OPEN_B1CHANNEL:
377 if (atomic_read(&ucs->basstate) & BS_B1OPEN) 377 if (ucs->basstate & BS_B1OPEN)
378 ucs->pending = 0; 378 ucs->pending = 0;
379 break; 379 break;
380 case HD_OPEN_B2CHANNEL: 380 case HD_OPEN_B2CHANNEL:
381 if (atomic_read(&ucs->basstate) & BS_B2OPEN) 381 if (ucs->basstate & BS_B2OPEN)
382 ucs->pending = 0; 382 ucs->pending = 0;
383 break; 383 break;
384 case HD_CLOSE_ATCHANNEL: 384 case HD_CLOSE_ATCHANNEL:
385 if (!(atomic_read(&ucs->basstate) & BS_ATOPEN)) 385 if (!(ucs->basstate & BS_ATOPEN))
386 ucs->pending = 0; 386 ucs->pending = 0;
387 break; 387 break;
388 case HD_CLOSE_B1CHANNEL: 388 case HD_CLOSE_B1CHANNEL:
389 if (!(atomic_read(&ucs->basstate) & BS_B1OPEN)) 389 if (!(ucs->basstate & BS_B1OPEN))
390 ucs->pending = 0; 390 ucs->pending = 0;
391 break; 391 break;
392 case HD_CLOSE_B2CHANNEL: 392 case HD_CLOSE_B2CHANNEL:
393 if (!(atomic_read(&ucs->basstate) & BS_B2OPEN)) 393 if (!(ucs->basstate & BS_B2OPEN))
394 ucs->pending = 0; 394 ucs->pending = 0;
395 break; 395 break;
396 case HD_DEVICE_INIT_ACK: /* no reply expected */ 396 case HD_DEVICE_INIT_ACK: /* no reply expected */
@@ -456,8 +456,8 @@ inline static int update_basstate(struct bas_cardstate *ucs,
456 int state; 456 int state;
457 457
458 spin_lock_irqsave(&ucs->lock, flags); 458 spin_lock_irqsave(&ucs->lock, flags);
459 state = atomic_read(&ucs->basstate); 459 state = ucs->basstate;
460 atomic_set(&ucs->basstate, (state & ~clear) | set); 460 ucs->basstate = (state & ~clear) | set;
461 spin_unlock_irqrestore(&ucs->lock, flags); 461 spin_unlock_irqrestore(&ucs->lock, flags);
462 return state; 462 return state;
463} 463}
@@ -832,7 +832,7 @@ static void read_iso_callback(struct urb *urb)
832 urb->iso_frame_desc[i].status = 0; 832 urb->iso_frame_desc[i].status = 0;
833 urb->iso_frame_desc[i].actual_length = 0; 833 urb->iso_frame_desc[i].actual_length = 0;
834 } 834 }
835 if (likely(atomic_read(&ubc->running))) { 835 if (likely(ubc->running)) {
836 /* urb->dev is clobbered by USB subsystem */ 836 /* urb->dev is clobbered by USB subsystem */
837 urb->dev = bcs->cs->hw.bas->udev; 837 urb->dev = bcs->cs->hw.bas->udev;
838 urb->transfer_flags = URB_ISO_ASAP; 838 urb->transfer_flags = URB_ISO_ASAP;
@@ -909,7 +909,7 @@ static int starturbs(struct bc_state *bcs)
909 bcs->inputstate |= INS_flag_hunt; 909 bcs->inputstate |= INS_flag_hunt;
910 910
911 /* submit all isochronous input URBs */ 911 /* submit all isochronous input URBs */
912 atomic_set(&ubc->running, 1); 912 ubc->running = 1;
913 for (k = 0; k < BAS_INURBS; k++) { 913 for (k = 0; k < BAS_INURBS; k++) {
914 urb = ubc->isoinurbs[k]; 914 urb = ubc->isoinurbs[k];
915 if (!urb) { 915 if (!urb) {
@@ -992,7 +992,7 @@ static void stopurbs(struct bas_bc_state *ubc)
992{ 992{
993 int k, rc; 993 int k, rc;
994 994
995 atomic_set(&ubc->running, 0); 995 ubc->running = 0;
996 996
997 for (k = 0; k < BAS_INURBS; ++k) { 997 for (k = 0; k < BAS_INURBS; ++k) {
998 rc = usb_unlink_urb(ubc->isoinurbs[k]); 998 rc = usb_unlink_urb(ubc->isoinurbs[k]);
@@ -1068,7 +1068,7 @@ static int submit_iso_write_urb(struct isow_urbctx_t *ucx)
1068 } 1068 }
1069 break; 1069 break;
1070 } 1070 }
1071 ucx->limit = atomic_read(&ubc->isooutbuf->nextread); 1071 ucx->limit = ubc->isooutbuf->nextread;
1072 ifd->status = 0; 1072 ifd->status = 0;
1073 ifd->actual_length = 0; 1073 ifd->actual_length = 0;
1074 } 1074 }
@@ -1115,7 +1115,7 @@ static void write_iso_tasklet(unsigned long data)
1115 1115
1116 /* loop while completed URBs arrive in time */ 1116 /* loop while completed URBs arrive in time */
1117 for (;;) { 1117 for (;;) {
1118 if (unlikely(!(atomic_read(&ubc->running)))) { 1118 if (unlikely(!(ubc->running))) {
1119 gig_dbg(DEBUG_ISO, "%s: not running", __func__); 1119 gig_dbg(DEBUG_ISO, "%s: not running", __func__);
1120 return; 1120 return;
1121 } 1121 }
@@ -1220,7 +1220,7 @@ static void write_iso_tasklet(unsigned long data)
1220 1220
1221 /* mark the write buffer area covered by this URB as free */ 1221 /* mark the write buffer area covered by this URB as free */
1222 if (done->limit >= 0) 1222 if (done->limit >= 0)
1223 atomic_set(&ubc->isooutbuf->read, done->limit); 1223 ubc->isooutbuf->read = done->limit;
1224 1224
1225 /* mark URB as free */ 1225 /* mark URB as free */
1226 spin_lock_irqsave(&ubc->isooutlock, flags); 1226 spin_lock_irqsave(&ubc->isooutlock, flags);
@@ -1294,7 +1294,7 @@ static void read_iso_tasklet(unsigned long data)
1294 } 1294 }
1295 spin_unlock_irqrestore(&ubc->isoinlock, flags); 1295 spin_unlock_irqrestore(&ubc->isoinlock, flags);
1296 1296
1297 if (unlikely(!(atomic_read(&ubc->running)))) { 1297 if (unlikely(!(ubc->running))) {
1298 gig_dbg(DEBUG_ISO, 1298 gig_dbg(DEBUG_ISO,
1299 "%s: channel not running, " 1299 "%s: channel not running, "
1300 "dropped URB with status: %s", 1300 "dropped URB with status: %s",
@@ -1488,7 +1488,7 @@ static void write_ctrl_callback(struct urb *urb)
1488 default: /* any failure */ 1488 default: /* any failure */
1489 /* don't retry if suspend requested */ 1489 /* don't retry if suspend requested */
1490 if (++ucs->retry_ctrl > BAS_RETRY || 1490 if (++ucs->retry_ctrl > BAS_RETRY ||
1491 (atomic_read(&ucs->basstate) & BS_SUSPEND)) { 1491 (ucs->basstate & BS_SUSPEND)) {
1492 dev_err(&ucs->interface->dev, 1492 dev_err(&ucs->interface->dev,
1493 "control request 0x%02x failed: %s\n", 1493 "control request 0x%02x failed: %s\n",
1494 ucs->dr_ctrl.bRequest, 1494 ucs->dr_ctrl.bRequest,
@@ -1603,7 +1603,7 @@ static int gigaset_init_bchannel(struct bc_state *bcs)
1603 return -ENODEV; 1603 return -ENODEV;
1604 } 1604 }
1605 1605
1606 if (atomic_read(&cs->hw.bas->basstate) & BS_SUSPEND) { 1606 if (cs->hw.bas->basstate & BS_SUSPEND) {
1607 dev_notice(cs->dev, 1607 dev_notice(cs->dev,
1608 "not starting isochronous I/O, " 1608 "not starting isochronous I/O, "
1609 "suspend in progress\n"); 1609 "suspend in progress\n");
@@ -1658,8 +1658,7 @@ static int gigaset_close_bchannel(struct bc_state *bcs)
1658 return -ENODEV; 1658 return -ENODEV;
1659 } 1659 }
1660 1660
1661 if (!(atomic_read(&cs->hw.bas->basstate) & 1661 if (!(cs->hw.bas->basstate & (bcs->channel ? BS_B2OPEN : BS_B1OPEN))) {
1662 (bcs->channel ? BS_B2OPEN : BS_B1OPEN))) {
1663 /* channel not running: just signal common.c */ 1662 /* channel not running: just signal common.c */
1664 spin_unlock_irqrestore(&cs->lock, flags); 1663 spin_unlock_irqrestore(&cs->lock, flags);
1665 gigaset_bchannel_down(bcs); 1664 gigaset_bchannel_down(bcs);
@@ -1747,7 +1746,7 @@ static void write_command_callback(struct urb *urb)
1747 ucs->retry_cmd_out); 1746 ucs->retry_cmd_out);
1748 break; 1747 break;
1749 } 1748 }
1750 if (atomic_read(&ucs->basstate) & BS_SUSPEND) { 1749 if (ucs->basstate & BS_SUSPEND) {
1751 dev_warn(cs->dev, 1750 dev_warn(cs->dev,
1752 "command write: %s, " 1751 "command write: %s, "
1753 "won't retry - suspend requested\n", 1752 "won't retry - suspend requested\n",
@@ -1863,13 +1862,13 @@ static int start_cbsend(struct cardstate *cs)
1863 int retval = 0; 1862 int retval = 0;
1864 1863
1865 /* check if suspend requested */ 1864 /* check if suspend requested */
1866 if (atomic_read(&ucs->basstate) & BS_SUSPEND) { 1865 if (ucs->basstate & BS_SUSPEND) {
1867 gig_dbg(DEBUG_TRANSCMD|DEBUG_LOCKCMD, "suspending"); 1866 gig_dbg(DEBUG_TRANSCMD|DEBUG_LOCKCMD, "suspending");
1868 return -EHOSTUNREACH; 1867 return -EHOSTUNREACH;
1869 } 1868 }
1870 1869
1871 /* check if AT channel is open */ 1870 /* check if AT channel is open */
1872 if (!(atomic_read(&ucs->basstate) & BS_ATOPEN)) { 1871 if (!(ucs->basstate & BS_ATOPEN)) {
1873 gig_dbg(DEBUG_TRANSCMD|DEBUG_LOCKCMD, "AT channel not open"); 1872 gig_dbg(DEBUG_TRANSCMD|DEBUG_LOCKCMD, "AT channel not open");
1874 rc = req_submit(cs->bcs, HD_OPEN_ATCHANNEL, 0, BAS_TIMEOUT); 1873 rc = req_submit(cs->bcs, HD_OPEN_ATCHANNEL, 0, BAS_TIMEOUT);
1875 if (rc < 0) { 1874 if (rc < 0) {
@@ -1885,8 +1884,7 @@ static int start_cbsend(struct cardstate *cs)
1885 /* try to send first command in queue */ 1884 /* try to send first command in queue */
1886 spin_lock_irqsave(&cs->cmdlock, flags); 1885 spin_lock_irqsave(&cs->cmdlock, flags);
1887 1886
1888 while ((cb = cs->cmdbuf) != NULL && 1887 while ((cb = cs->cmdbuf) != NULL && (ucs->basstate & BS_ATREADY)) {
1889 atomic_read(&ucs->basstate) & BS_ATREADY) {
1890 ucs->retry_cmd_out = 0; 1888 ucs->retry_cmd_out = 0;
1891 rc = atwrite_submit(cs, cb->buf, cb->len); 1889 rc = atwrite_submit(cs, cb->buf, cb->len);
1892 if (unlikely(rc)) { 1890 if (unlikely(rc)) {
@@ -1924,7 +1922,7 @@ static int gigaset_write_cmd(struct cardstate *cs,
1924 unsigned long flags; 1922 unsigned long flags;
1925 int rc; 1923 int rc;
1926 1924
1927 gigaset_dbg_buffer(atomic_read(&cs->mstate) != MS_LOCKED ? 1925 gigaset_dbg_buffer(cs->mstate != MS_LOCKED ?
1928 DEBUG_TRANSCMD : DEBUG_LOCKCMD, 1926 DEBUG_TRANSCMD : DEBUG_LOCKCMD,
1929 "CMD Transmit", len, buf); 1927 "CMD Transmit", len, buf);
1930 1928
@@ -2039,7 +2037,7 @@ static int gigaset_freebcshw(struct bc_state *bcs)
2039 return 0; 2037 return 0;
2040 2038
2041 /* kill URBs and tasklets before freeing - better safe than sorry */ 2039 /* kill URBs and tasklets before freeing - better safe than sorry */
2042 atomic_set(&ubc->running, 0); 2040 ubc->running = 0;
2043 gig_dbg(DEBUG_INIT, "%s: killing iso URBs", __func__); 2041 gig_dbg(DEBUG_INIT, "%s: killing iso URBs", __func__);
2044 for (i = 0; i < BAS_OUTURBS; ++i) { 2042 for (i = 0; i < BAS_OUTURBS; ++i) {
2045 usb_kill_urb(ubc->isoouturbs[i].urb); 2043 usb_kill_urb(ubc->isoouturbs[i].urb);
@@ -2074,7 +2072,7 @@ static int gigaset_initbcshw(struct bc_state *bcs)
2074 return 0; 2072 return 0;
2075 } 2073 }
2076 2074
2077 atomic_set(&ubc->running, 0); 2075 ubc->running = 0;
2078 atomic_set(&ubc->corrbytes, 0); 2076 atomic_set(&ubc->corrbytes, 0);
2079 spin_lock_init(&ubc->isooutlock); 2077 spin_lock_init(&ubc->isooutlock);
2080 for (i = 0; i < BAS_OUTURBS; ++i) { 2078 for (i = 0; i < BAS_OUTURBS; ++i) {
@@ -2119,7 +2117,7 @@ static void gigaset_reinitbcshw(struct bc_state *bcs)
2119{ 2117{
2120 struct bas_bc_state *ubc = bcs->hw.bas; 2118 struct bas_bc_state *ubc = bcs->hw.bas;
2121 2119
2122 atomic_set(&bcs->hw.bas->running, 0); 2120 bcs->hw.bas->running = 0;
2123 atomic_set(&bcs->hw.bas->corrbytes, 0); 2121 atomic_set(&bcs->hw.bas->corrbytes, 0);
2124 bcs->hw.bas->numsub = 0; 2122 bcs->hw.bas->numsub = 0;
2125 spin_lock_init(&ubc->isooutlock); 2123 spin_lock_init(&ubc->isooutlock);
@@ -2150,7 +2148,7 @@ static int gigaset_initcshw(struct cardstate *cs)
2150 spin_lock_init(&ucs->lock); 2148 spin_lock_init(&ucs->lock);
2151 ucs->pending = 0; 2149 ucs->pending = 0;
2152 2150
2153 atomic_set(&ucs->basstate, 0); 2151 ucs->basstate = 0;
2154 init_timer(&ucs->timer_ctrl); 2152 init_timer(&ucs->timer_ctrl);
2155 init_timer(&ucs->timer_atrdy); 2153 init_timer(&ucs->timer_atrdy);
2156 init_timer(&ucs->timer_cmd_in); 2154 init_timer(&ucs->timer_cmd_in);
@@ -2307,7 +2305,7 @@ static int gigaset_probe(struct usb_interface *interface,
2307 2305
2308 /* tell common part that the device is ready */ 2306 /* tell common part that the device is ready */
2309 if (startmode == SM_LOCKED) 2307 if (startmode == SM_LOCKED)
2310 atomic_set(&cs->mstate, MS_LOCKED); 2308 cs->mstate = MS_LOCKED;
2311 2309
2312 /* save address of controller structure */ 2310 /* save address of controller structure */
2313 usb_set_intfdata(interface, cs); 2311 usb_set_intfdata(interface, cs);
@@ -2342,7 +2340,7 @@ static void gigaset_disconnect(struct usb_interface *interface)
2342 dev_info(cs->dev, "disconnecting Gigaset base\n"); 2340 dev_info(cs->dev, "disconnecting Gigaset base\n");
2343 2341
2344 /* mark base as not ready, all channels disconnected */ 2342 /* mark base as not ready, all channels disconnected */
2345 atomic_set(&ucs->basstate, 0); 2343 ucs->basstate = 0;
2346 2344
2347 /* tell LL all channels are down */ 2345 /* tell LL all channels are down */
2348 for (j = 0; j < BAS_CHANNELS; ++j) 2346 for (j = 0; j < BAS_CHANNELS; ++j)
@@ -2374,7 +2372,6 @@ static int gigaset_suspend(struct usb_interface *intf, pm_message_t message)
2374{ 2372{
2375 struct cardstate *cs = usb_get_intfdata(intf); 2373 struct cardstate *cs = usb_get_intfdata(intf);
2376 struct bas_cardstate *ucs = cs->hw.bas; 2374 struct bas_cardstate *ucs = cs->hw.bas;
2377 int basstate;
2378 int rc; 2375 int rc;
2379 2376
2380 /* set suspend flag; this stops AT command/response traffic */ 2377 /* set suspend flag; this stops AT command/response traffic */
@@ -2385,29 +2382,28 @@ static int gigaset_suspend(struct usb_interface *intf, pm_message_t message)
2385 2382
2386 /* wait a bit for blocking conditions to go away */ 2383 /* wait a bit for blocking conditions to go away */
2387 rc = wait_event_timeout(ucs->waitqueue, 2384 rc = wait_event_timeout(ucs->waitqueue,
2388 !(atomic_read(&ucs->basstate) & 2385 !(ucs->basstate &
2389 (BS_B1OPEN|BS_B2OPEN|BS_ATRDPEND|BS_ATWRPEND)), 2386 (BS_B1OPEN|BS_B2OPEN|BS_ATRDPEND|BS_ATWRPEND)),
2390 BAS_TIMEOUT*HZ/10); 2387 BAS_TIMEOUT*HZ/10);
2391 gig_dbg(DEBUG_SUSPEND, "wait_event_timeout() -> %d", rc); 2388 gig_dbg(DEBUG_SUSPEND, "wait_event_timeout() -> %d", rc);
2392 2389
2393 /* check for conditions preventing suspend */ 2390 /* check for conditions preventing suspend */
2394 basstate = atomic_read(&ucs->basstate); 2391 if (ucs->basstate & (BS_B1OPEN|BS_B2OPEN|BS_ATRDPEND|BS_ATWRPEND)) {
2395 if (basstate & (BS_B1OPEN|BS_B2OPEN|BS_ATRDPEND|BS_ATWRPEND)) {
2396 dev_warn(cs->dev, "cannot suspend:\n"); 2392 dev_warn(cs->dev, "cannot suspend:\n");
2397 if (basstate & BS_B1OPEN) 2393 if (ucs->basstate & BS_B1OPEN)
2398 dev_warn(cs->dev, " B channel 1 open\n"); 2394 dev_warn(cs->dev, " B channel 1 open\n");
2399 if (basstate & BS_B2OPEN) 2395 if (ucs->basstate & BS_B2OPEN)
2400 dev_warn(cs->dev, " B channel 2 open\n"); 2396 dev_warn(cs->dev, " B channel 2 open\n");
2401 if (basstate & BS_ATRDPEND) 2397 if (ucs->basstate & BS_ATRDPEND)
2402 dev_warn(cs->dev, " receiving AT reply\n"); 2398 dev_warn(cs->dev, " receiving AT reply\n");
2403 if (basstate & BS_ATWRPEND) 2399 if (ucs->basstate & BS_ATWRPEND)
2404 dev_warn(cs->dev, " sending AT command\n"); 2400 dev_warn(cs->dev, " sending AT command\n");
2405 update_basstate(ucs, 0, BS_SUSPEND); 2401 update_basstate(ucs, 0, BS_SUSPEND);
2406 return -EBUSY; 2402 return -EBUSY;
2407 } 2403 }
2408 2404
2409 /* close AT channel if open */ 2405 /* close AT channel if open */
2410 if (basstate & BS_ATOPEN) { 2406 if (ucs->basstate & BS_ATOPEN) {
2411 gig_dbg(DEBUG_SUSPEND, "closing AT channel"); 2407 gig_dbg(DEBUG_SUSPEND, "closing AT channel");
2412 rc = req_submit(cs->bcs, HD_CLOSE_ATCHANNEL, 0, 0); 2408 rc = req_submit(cs->bcs, HD_CLOSE_ATCHANNEL, 0, 0);
2413 if (rc) { 2409 if (rc) {
@@ -2546,25 +2542,25 @@ static void __exit bas_gigaset_exit(void)
2546 /* from now on, no isdn callback should be possible */ 2542 /* from now on, no isdn callback should be possible */
2547 2543
2548 /* close all still open channels */ 2544 /* close all still open channels */
2549 if (atomic_read(&ucs->basstate) & BS_B1OPEN) { 2545 if (ucs->basstate & BS_B1OPEN) {
2550 gig_dbg(DEBUG_INIT, "closing B1 channel"); 2546 gig_dbg(DEBUG_INIT, "closing B1 channel");
2551 usb_control_msg(ucs->udev, usb_sndctrlpipe(ucs->udev, 0), 2547 usb_control_msg(ucs->udev, usb_sndctrlpipe(ucs->udev, 0),
2552 HD_CLOSE_B1CHANNEL, OUT_VENDOR_REQ, 0, 0, 2548 HD_CLOSE_B1CHANNEL, OUT_VENDOR_REQ, 0, 0,
2553 NULL, 0, BAS_TIMEOUT); 2549 NULL, 0, BAS_TIMEOUT);
2554 } 2550 }
2555 if (atomic_read(&ucs->basstate) & BS_B2OPEN) { 2551 if (ucs->basstate & BS_B2OPEN) {
2556 gig_dbg(DEBUG_INIT, "closing B2 channel"); 2552 gig_dbg(DEBUG_INIT, "closing B2 channel");
2557 usb_control_msg(ucs->udev, usb_sndctrlpipe(ucs->udev, 0), 2553 usb_control_msg(ucs->udev, usb_sndctrlpipe(ucs->udev, 0),
2558 HD_CLOSE_B2CHANNEL, OUT_VENDOR_REQ, 0, 0, 2554 HD_CLOSE_B2CHANNEL, OUT_VENDOR_REQ, 0, 0,
2559 NULL, 0, BAS_TIMEOUT); 2555 NULL, 0, BAS_TIMEOUT);
2560 } 2556 }
2561 if (atomic_read(&ucs->basstate) & BS_ATOPEN) { 2557 if (ucs->basstate & BS_ATOPEN) {
2562 gig_dbg(DEBUG_INIT, "closing AT channel"); 2558 gig_dbg(DEBUG_INIT, "closing AT channel");
2563 usb_control_msg(ucs->udev, usb_sndctrlpipe(ucs->udev, 0), 2559 usb_control_msg(ucs->udev, usb_sndctrlpipe(ucs->udev, 0),
2564 HD_CLOSE_ATCHANNEL, OUT_VENDOR_REQ, 0, 0, 2560 HD_CLOSE_ATCHANNEL, OUT_VENDOR_REQ, 0, 0,
2565 NULL, 0, BAS_TIMEOUT); 2561 NULL, 0, BAS_TIMEOUT);
2566 } 2562 }
2567 atomic_set(&ucs->basstate, 0); 2563 ucs->basstate = 0;
2568 2564
2569 /* deregister this driver with the USB subsystem */ 2565 /* deregister this driver with the USB subsystem */
2570 usb_deregister(&gigaset_usb_driver); 2566 usb_deregister(&gigaset_usb_driver);