return 0;
}
-int open_chan(struct list_head *chans)
+static int open_chan(struct list_head *chans)
{
struct list_head *ele;
struct chan *chan;
list_for_each(ele, &list) {
chan = list_entry(ele, struct chan, free_list);
- if (chan->input)
+ if (chan->input && chan->enabled)
free_irq(chan->line->driver->read_irq, chan);
- if (chan->output)
+ if (chan->output && chan->enabled)
free_irq(chan->line->driver->write_irq, chan);
chan->enabled = 0;
}
spin_unlock_irqrestore(&irqs_to_free_lock, flags);
}
else {
- if (chan->input)
+ if (chan->input && chan->enabled)
free_irq(chan->line->driver->read_irq, chan);
- if (chan->output)
+ if (chan->output && chan->enabled)
free_irq(chan->line->driver->write_irq, chan);
chan->enabled = 0;
}
return 0;
}
-int chan_out_fd(struct list_head *chans)
-{
- struct list_head *ele;
- struct chan *chan;
-
- list_for_each(ele, chans) {
- chan = list_entry(ele, struct chan, list);
- if (chan->primary && chan->output)
- return chan->fd;
- }
- return -1;
-}
-
void chan_interrupt(struct list_head *chans, struct delayed_work *task,
struct tty_struct *tty, int irq)
{