@@ -327,7 +327,6 @@ struct sc16is7xx_port {
327
327
unsigned char buf [SC16IS7XX_FIFO_SIZE ];
328
328
struct kthread_worker kworker ;
329
329
struct task_struct * kworker_task ;
330
- struct kthread_work irq_work ;
331
330
struct mutex efr_lock ;
332
331
struct sc16is7xx_one p [];
333
332
};
@@ -710,9 +709,9 @@ static bool sc16is7xx_port_irq(struct sc16is7xx_port *s, int portno)
710
709
return true;
711
710
}
712
711
713
- static void sc16is7xx_ist ( struct kthread_work * ws )
712
+ static irqreturn_t sc16is7xx_irq ( int irq , void * dev_id )
714
713
{
715
- struct sc16is7xx_port * s = to_sc16is7xx_port ( ws , irq_work ) ;
714
+ struct sc16is7xx_port * s = ( struct sc16is7xx_port * ) dev_id ;
716
715
717
716
mutex_lock (& s -> efr_lock );
718
717
@@ -727,13 +726,6 @@ static void sc16is7xx_ist(struct kthread_work *ws)
727
726
}
728
727
729
728
mutex_unlock (& s -> efr_lock );
730
- }
731
-
732
- static irqreturn_t sc16is7xx_irq (int irq , void * dev_id )
733
- {
734
- struct sc16is7xx_port * s = (struct sc16is7xx_port * )dev_id ;
735
-
736
- kthread_queue_work (& s -> kworker , & s -> irq_work );
737
729
738
730
return IRQ_HANDLED ;
739
731
}
@@ -1221,7 +1213,6 @@ static int sc16is7xx_probe(struct device *dev,
1221
1213
mutex_init (& s -> efr_lock );
1222
1214
1223
1215
kthread_init_worker (& s -> kworker );
1224
- kthread_init_work (& s -> irq_work , sc16is7xx_ist );
1225
1216
s -> kworker_task = kthread_run (kthread_worker_fn , & s -> kworker ,
1226
1217
"sc16is7xx" );
1227
1218
if (IS_ERR (s -> kworker_task )) {
@@ -1303,8 +1294,9 @@ static int sc16is7xx_probe(struct device *dev,
1303
1294
}
1304
1295
1305
1296
/* Setup interrupt */
1306
- ret = devm_request_irq (dev , irq , sc16is7xx_irq ,
1307
- IRQF_TRIGGER_FALLING , dev_name (dev ), s );
1297
+ ret = devm_request_threaded_irq (dev , irq , NULL , sc16is7xx_irq ,
1298
+ IRQF_TRIGGER_FALLING | IRQF_ONESHOT ,
1299
+ dev_name (dev ), s );
1308
1300
if (!ret )
1309
1301
return 0 ;
1310
1302
0 commit comments