diff options
Diffstat (limited to 'drivers/isdn/gigaset/ser-gigaset.c')
| -rw-r--r-- | drivers/isdn/gigaset/ser-gigaset.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/drivers/isdn/gigaset/ser-gigaset.c b/drivers/isdn/gigaset/ser-gigaset.c index 375be509e95f..2a506fe0c8a4 100644 --- a/drivers/isdn/gigaset/ser-gigaset.c +++ b/drivers/isdn/gigaset/ser-gigaset.c | |||
| @@ -67,8 +67,7 @@ static int write_modem(struct cardstate *cs) | |||
| 67 | struct sk_buff *skb = bcs->tx_skb; | 67 | struct sk_buff *skb = bcs->tx_skb; |
| 68 | int sent = -EOPNOTSUPP; | 68 | int sent = -EOPNOTSUPP; |
| 69 | 69 | ||
| 70 | if (!tty || !tty->driver || !skb) | 70 | WARN_ON(!tty || !tty->ops || !skb); |
| 71 | return -EINVAL; | ||
| 72 | 71 | ||
| 73 | if (!skb->len) { | 72 | if (!skb->len) { |
| 74 | dev_kfree_skb_any(skb); | 73 | dev_kfree_skb_any(skb); |
| @@ -109,8 +108,7 @@ static int send_cb(struct cardstate *cs) | |||
| 109 | unsigned long flags; | 108 | unsigned long flags; |
| 110 | int sent = 0; | 109 | int sent = 0; |
| 111 | 110 | ||
| 112 | if (!tty || !tty->driver) | 111 | WARN_ON(!tty || !tty->ops); |
| 113 | return -EFAULT; | ||
| 114 | 112 | ||
| 115 | cb = cs->cmdbuf; | 113 | cb = cs->cmdbuf; |
| 116 | if (!cb) | 114 | if (!cb) |
| @@ -370,19 +368,18 @@ static void gigaset_freecshw(struct cardstate *cs) | |||
| 370 | tasklet_kill(&cs->write_tasklet); | 368 | tasklet_kill(&cs->write_tasklet); |
| 371 | if (!cs->hw.ser) | 369 | if (!cs->hw.ser) |
| 372 | return; | 370 | return; |
| 373 | dev_set_drvdata(&cs->hw.ser->dev.dev, NULL); | ||
| 374 | platform_device_unregister(&cs->hw.ser->dev); | 371 | platform_device_unregister(&cs->hw.ser->dev); |
| 375 | kfree(cs->hw.ser); | ||
| 376 | cs->hw.ser = NULL; | ||
| 377 | } | 372 | } |
| 378 | 373 | ||
| 379 | static void gigaset_device_release(struct device *dev) | 374 | static void gigaset_device_release(struct device *dev) |
| 380 | { | 375 | { |
| 381 | struct platform_device *pdev = to_platform_device(dev); | 376 | struct cardstate *cs = dev_get_drvdata(dev); |
| 382 | 377 | ||
| 383 | /* adapted from platform_device_release() in drivers/base/platform.c */ | 378 | if (!cs) |
| 384 | kfree(dev->platform_data); | 379 | return; |
| 385 | kfree(pdev->resource); | 380 | dev_set_drvdata(dev, NULL); |
| 381 | kfree(cs->hw.ser); | ||
| 382 | cs->hw.ser = NULL; | ||
| 386 | } | 383 | } |
| 387 | 384 | ||
| 388 | /* | 385 | /* |
| @@ -432,7 +429,9 @@ static int gigaset_set_modem_ctrl(struct cardstate *cs, unsigned old_state, | |||
| 432 | struct tty_struct *tty = cs->hw.ser->tty; | 429 | struct tty_struct *tty = cs->hw.ser->tty; |
| 433 | unsigned int set, clear; | 430 | unsigned int set, clear; |
| 434 | 431 | ||
| 435 | if (!tty || !tty->driver || !tty->ops->tiocmset) | 432 | WARN_ON(!tty || !tty->ops); |
| 433 | /* tiocmset is an optional tty driver method */ | ||
| 434 | if (!tty->ops->tiocmset) | ||
| 436 | return -EINVAL; | 435 | return -EINVAL; |
| 437 | set = new_state & ~old_state; | 436 | set = new_state & ~old_state; |
| 438 | clear = old_state & ~new_state; | 437 | clear = old_state & ~new_state; |
