Add dummy_signal_irq function to save check in ISR
Signed-off-by: Alex Dubov <oakad@yahoo.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
This commit is contained in:
Родитель
50743f4cb1
Коммит
217334d14d
|
@ -71,6 +71,7 @@ static void tifm_7xx1_remove_media(struct work_struct *work)
|
|||
static irqreturn_t tifm_7xx1_isr(int irq, void *dev_id)
|
||||
{
|
||||
struct tifm_adapter *fm = dev_id;
|
||||
struct tifm_dev *sock;
|
||||
unsigned int irq_status;
|
||||
unsigned int sock_irq_status, cnt;
|
||||
|
||||
|
@ -85,15 +86,13 @@ static irqreturn_t tifm_7xx1_isr(int irq, void *dev_id)
|
|||
writel(TIFM_IRQ_ENABLE, fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
|
||||
|
||||
for (cnt = 0; cnt < fm->max_sockets; cnt++) {
|
||||
sock = fm->sockets[cnt];
|
||||
sock_irq_status = (irq_status >> cnt) &
|
||||
(TIFM_IRQ_FIFOMASK | TIFM_IRQ_CARDMASK);
|
||||
|
||||
if (fm->sockets[cnt]) {
|
||||
if (sock_irq_status &&
|
||||
fm->sockets[cnt]->signal_irq)
|
||||
fm->sockets[cnt]->
|
||||
signal_irq(fm->sockets[cnt],
|
||||
sock_irq_status);
|
||||
if (sock) {
|
||||
if (sock_irq_status)
|
||||
sock->signal_irq(sock, sock_irq_status);
|
||||
|
||||
if (irq_status & (1 << cnt))
|
||||
fm->remove_mask |= 1 << cnt;
|
||||
|
|
|
@ -145,6 +145,12 @@ void tifm_free_device(struct device *dev)
|
|||
}
|
||||
EXPORT_SYMBOL(tifm_free_device);
|
||||
|
||||
static void tifm_dummy_signal_irq(struct tifm_dev *sock,
|
||||
unsigned int sock_irq_status)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm)
|
||||
{
|
||||
struct tifm_dev *dev = kzalloc(sizeof(struct tifm_dev), GFP_KERNEL);
|
||||
|
@ -155,6 +161,7 @@ struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm)
|
|||
dev->dev.parent = fm->dev;
|
||||
dev->dev.bus = &tifm_bus_type;
|
||||
dev->dev.release = tifm_free_device;
|
||||
dev->signal_irq = tifm_dummy_signal_irq;
|
||||
}
|
||||
return dev;
|
||||
}
|
||||
|
@ -212,6 +219,7 @@ static int tifm_device_remove(struct device *dev)
|
|||
struct tifm_driver *drv = fm_dev->drv;
|
||||
|
||||
if (drv) {
|
||||
fm_dev->signal_irq = tifm_dummy_signal_irq;
|
||||
if (drv->remove)
|
||||
drv->remove(fm_dev);
|
||||
fm_dev->drv = NULL;
|
||||
|
|
Загрузка…
Ссылка в новой задаче