summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorTilman Schmidt <tilman@imap.cc>2009-10-06 14:18:26 +0200
committerDavid S. Miller <davem@davemloft.net>2009-10-07 07:20:57 +0200
commit3305adffc556f7998b40c31afcef4c8755ce919a (patch)
treefe3d9bf1543356bd59ac259b61986587af370693 /drivers
parentisdn: make capidrv module parameter "debugmode" writeable (diff)
downloadlinux-3305adffc556f7998b40c31afcef4c8755ce919a.tar.xz
linux-3305adffc556f7998b40c31afcef4c8755ce919a.zip
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')
-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);