Commit 9c1d784a authored by Jens Taprogge's avatar Jens Taprogge Committed by Greg Kroah-Hartman

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: default avatarJens Taprogge <jens.taprogge@taprogge.org>
Signed-off-by: default avatarSamuel Iglesias Gonsalvez <siglesias@igalia.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 3f3a5927
......@@ -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);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment