diff options
author | Jens Taprogge <jens.taprogge@taprogge.org> | 2012-09-12 14:55:42 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-09-12 09:56:02 -0700 |
commit | 9c1d784afc6fc37d328623d1adf503031b524788 (patch) | |
tree | dee75b17f6c47b38eaaf1d5aebd6cf38d1af7b89 /drivers/staging/ipack | |
parent | 3f3a592798fe4a6eff0448685280925a9b1830f4 (diff) |
Staging: ipack/devices/ipoctal: Get rid of ipoctal_list.
Use tty_dev->dev's drdata to associate struct ipocal_channel to the
respective tty_struct.
Signed-off-by: Jens Taprogge <jens.taprogge@taprogge.org>
Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/ipack')
-rw-r--r-- | drivers/staging/ipack/devices/ipoctal.c | 39 |
1 files changed, 3 insertions, 36 deletions
diff --git a/drivers/staging/ipack/devices/ipoctal.c b/drivers/staging/ipack/devices/ipoctal.c index a0c1e7651ea5..8b2be618fc9e 100644 --- a/drivers/staging/ipack/devices/ipoctal.c +++ b/drivers/staging/ipack/devices/ipoctal.c @@ -49,7 +49,6 @@ struct ipoctal_channel { }; struct ipoctal { - struct list_head list; struct ipack_device *dev; unsigned int board_id; struct ipoctal_channel channel[NR_CHANNELS]; @@ -57,34 +56,11 @@ struct ipoctal { struct tty_driver *tty_drv; }; -/* Linked list to save the registered devices */ -static LIST_HEAD(ipoctal_list); - -static struct ipoctal *ipoctal_find_board(struct tty_struct *tty) -{ - struct ipoctal *p; - - list_for_each_entry(p, &ipoctal_list, list) { - if (tty->driver->major == p->tty_drv->major) - return p; - } - - return NULL; -} - static int ipoctal_port_activate(struct tty_port *port, struct tty_struct *tty) { - struct ipoctal *ipoctal; struct ipoctal_channel *channel; - ipoctal = ipoctal_find_board(tty); - - if (ipoctal == NULL) { - dev_err(tty->dev, "Device not found. Major %d\n", - tty->driver->major); - return -ENODEV; - } - channel = &ipoctal->channel[tty->index]; + channel = dev_get_drvdata(tty->dev); iowrite8(CR_ENABLE_RX, &channel->regs->w.cr); return 0; @@ -93,17 +69,9 @@ static int ipoctal_port_activate(struct tty_port *port, struct tty_struct *tty) static int ipoctal_open(struct tty_struct *tty, struct file *file) { int res; - struct ipoctal *ipoctal; struct ipoctal_channel *channel; - ipoctal = ipoctal_find_board(tty); - - if (ipoctal == NULL) { - dev_err(tty->dev, "Device not found. Major %d\n", - tty->driver->major); - return -ENODEV; - } - channel = &ipoctal->channel[tty->index]; + channel = dev_get_drvdata(tty->dev); if (atomic_read(&channel->open)) return -EBUSY; @@ -457,6 +425,7 @@ static int ipoctal_inst_slot(struct ipoctal *ipoctal, unsigned int bus_nr, dev_err(&ipoctal->dev->dev, "Failed to register tty device.\n"); continue; } + dev_set_drvdata(tty_dev, channel); /* * Enable again the RX. TX will be enabled when @@ -732,7 +701,6 @@ static int ipoctal_probe(struct ipack_device *dev) goto out_uninst; dev_set_drvdata(&dev->dev, ipoctal); - list_add_tail(&ipoctal->list, &ipoctal_list); return 0; out_uninst: @@ -754,7 +722,6 @@ static void __ipoctal_remove(struct ipoctal *ipoctal) tty_unregister_driver(ipoctal->tty_drv); put_tty_driver(ipoctal->tty_drv); - list_del(&ipoctal->list); kfree(ipoctal); } |