summaryrefslogtreecommitdiff
path: root/drivers/isdn/gigaset/ev-layer.c
diff options
context:
space:
mode:
authorTilman Schmidt <tilman@imap.cc>2009-10-06 16:18:26 +0400
committerDavid S. Miller <davem@davemloft.net>2009-10-07 09:20:57 +0400
commit3305adffc556f7998b40c31afcef4c8755ce919a (patch)
treefe3d9bf1543356bd59ac259b61986587af370693 /drivers/isdn/gigaset/ev-layer.c
parent9803f79695f552265d5c70f148876b5e2a77dd6a (diff)
downloadlinux-3305adffc556f7998b40c31afcef4c8755ce919a.tar.xz
gigaset: fix reject/hangup handling
Signal D channel disconnect in a few cases where it was missed, including when an incoming call is disconnected before it was accepted. Impact: error handling improvement Signed-off-by: Tilman Schmidt <tilman@imap.cc> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/isdn/gigaset/ev-layer.c')
-rw-r--r--drivers/isdn/gigaset/ev-layer.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/isdn/gigaset/ev-layer.c b/drivers/isdn/gigaset/ev-layer.c
index 2d91049571a4..ff2ec2ce2168 100644
--- a/drivers/isdn/gigaset/ev-layer.c
+++ b/drivers/isdn/gigaset/ev-layer.c
@@ -707,6 +707,11 @@ static void disconnect(struct at_state_t **at_state_p)
if (bcs) {
/* B channel assigned: invoke hardware specific handler */
cs->ops->close_bchannel(bcs);
+ /* notify LL */
+ if (bcs->chstate & (CHS_D_UP | CHS_NOTIFY_LL)) {
+ bcs->chstate &= ~(CHS_D_UP | CHS_NOTIFY_LL);
+ gigaset_i4l_channel_cmd(bcs, ISDN_STAT_DHUP);
+ }
} else {
/* no B channel assigned: just deallocate */
spin_lock_irqsave(&cs->lock, flags);