Commit dbee3562 authored by Dmitry Torokhov's avatar Dmitry Torokhov Committed by Jean Delvare

hwmon: (ams) Simplify IRQ handling routine

Simplify the IRQ handling routine of ams driver.
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
parent ee4cd32e
...@@ -99,39 +99,31 @@ static struct pmf_irq_client ams_shock_client = { ...@@ -99,39 +99,31 @@ static struct pmf_irq_client ams_shock_client = {
*/ */
static void ams_worker(struct work_struct *work) static void ams_worker(struct work_struct *work)
{ {
mutex_lock(&ams_info.lock); unsigned long flags;
u8 irqs_to_clear;
if (ams_info.has_device) {
unsigned long flags;
spin_lock_irqsave(&ams_info.irq_lock, flags); mutex_lock(&ams_info.lock);
if (ams_info.worker_irqs & AMS_IRQ_FREEFALL) { spin_lock_irqsave(&ams_info.irq_lock, flags);
if (verbose) irqs_to_clear = ams_info.worker_irqs;
printk(KERN_INFO "ams: freefall detected!\n");
ams_info.worker_irqs &= ~AMS_IRQ_FREEFALL; if (ams_info.worker_irqs & AMS_IRQ_FREEFALL) {
if (verbose)
printk(KERN_INFO "ams: freefall detected!\n");
/* we must call this with interrupts enabled */ ams_info.worker_irqs &= ~AMS_IRQ_FREEFALL;
spin_unlock_irqrestore(&ams_info.irq_lock, flags); }
ams_info.clear_irq(AMS_IRQ_FREEFALL);
spin_lock_irqsave(&ams_info.irq_lock, flags);
}
if (ams_info.worker_irqs & AMS_IRQ_SHOCK) { if (ams_info.worker_irqs & AMS_IRQ_SHOCK) {
if (verbose) if (verbose)
printk(KERN_INFO "ams: shock detected!\n"); printk(KERN_INFO "ams: shock detected!\n");
ams_info.worker_irqs &= ~AMS_IRQ_SHOCK; ams_info.worker_irqs &= ~AMS_IRQ_SHOCK;
}
/* we must call this with interrupts enabled */ spin_unlock_irqrestore(&ams_info.irq_lock, flags);
spin_unlock_irqrestore(&ams_info.irq_lock, flags);
ams_info.clear_irq(AMS_IRQ_SHOCK);
spin_lock_irqsave(&ams_info.irq_lock, flags);
}
spin_unlock_irqrestore(&ams_info.irq_lock, flags); ams_info.clear_irq(irqs_to_clear);
}
mutex_unlock(&ams_info.lock); mutex_unlock(&ams_info.lock);
} }
......
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