|
@@ -67,8 +67,7 @@ static int write_modem(struct cardstate *cs)
|
|
struct sk_buff *skb = bcs->tx_skb;
|
|
struct sk_buff *skb = bcs->tx_skb;
|
|
int sent = -EOPNOTSUPP;
|
|
int sent = -EOPNOTSUPP;
|
|
|
|
|
|
- if (!tty || !tty->driver || !skb)
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ WARN_ON(!tty || !tty->ops || !skb);
|
|
|
|
|
|
if (!skb->len) {
|
|
if (!skb->len) {
|
|
dev_kfree_skb_any(skb);
|
|
dev_kfree_skb_any(skb);
|
|
@@ -109,8 +108,7 @@ static int send_cb(struct cardstate *cs)
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
int sent = 0;
|
|
int sent = 0;
|
|
|
|
|
|
- if (!tty || !tty->driver)
|
|
|
|
- return -EFAULT;
|
|
|
|
|
|
+ WARN_ON(!tty || !tty->ops);
|
|
|
|
|
|
cb = cs->cmdbuf;
|
|
cb = cs->cmdbuf;
|
|
if (!cb)
|
|
if (!cb)
|
|
@@ -370,19 +368,18 @@ static void gigaset_freecshw(struct cardstate *cs)
|
|
tasklet_kill(&cs->write_tasklet);
|
|
tasklet_kill(&cs->write_tasklet);
|
|
if (!cs->hw.ser)
|
|
if (!cs->hw.ser)
|
|
return;
|
|
return;
|
|
- dev_set_drvdata(&cs->hw.ser->dev.dev, NULL);
|
|
|
|
platform_device_unregister(&cs->hw.ser->dev);
|
|
platform_device_unregister(&cs->hw.ser->dev);
|
|
- kfree(cs->hw.ser);
|
|
|
|
- cs->hw.ser = NULL;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static void gigaset_device_release(struct device *dev)
|
|
static void gigaset_device_release(struct device *dev)
|
|
{
|
|
{
|
|
- struct platform_device *pdev = to_platform_device(dev);
|
|
|
|
|
|
+ struct cardstate *cs = dev_get_drvdata(dev);
|
|
|
|
|
|
- /* adapted from platform_device_release() in drivers/base/platform.c */
|
|
|
|
- kfree(dev->platform_data);
|
|
|
|
- kfree(pdev->resource);
|
|
|
|
|
|
+ if (!cs)
|
|
|
|
+ return;
|
|
|
|
+ dev_set_drvdata(dev, NULL);
|
|
|
|
+ kfree(cs->hw.ser);
|
|
|
|
+ cs->hw.ser = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -432,7 +429,9 @@ static int gigaset_set_modem_ctrl(struct cardstate *cs, unsigned old_state,
|
|
struct tty_struct *tty = cs->hw.ser->tty;
|
|
struct tty_struct *tty = cs->hw.ser->tty;
|
|
unsigned int set, clear;
|
|
unsigned int set, clear;
|
|
|
|
|
|
- if (!tty || !tty->driver || !tty->ops->tiocmset)
|
|
|
|
|
|
+ WARN_ON(!tty || !tty->ops);
|
|
|
|
+ /* tiocmset is an optional tty driver method */
|
|
|
|
+ if (!tty->ops->tiocmset)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
set = new_state & ~old_state;
|
|
set = new_state & ~old_state;
|
|
clear = old_state & ~new_state;
|
|
clear = old_state & ~new_state;
|