Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+17 −25
Original line number Diff line number Diff line
@@ -99,23 +99,19 @@ static struct pmf_irq_client ams_shock_client = {
 */
static void ams_worker(struct work_struct *work)
{
	mutex_lock(&ams_info.lock);

	if (ams_info.has_device) {
	unsigned long flags;
	u8 irqs_to_clear;

	mutex_lock(&ams_info.lock);

	spin_lock_irqsave(&ams_info.irq_lock, flags);
	irqs_to_clear = ams_info.worker_irqs;

	if (ams_info.worker_irqs & AMS_IRQ_FREEFALL) {
		if (verbose)
			printk(KERN_INFO "ams: freefall detected!\n");

		ams_info.worker_irqs &= ~AMS_IRQ_FREEFALL;

			/* we must call this with interrupts enabled */
			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) {
@@ -123,15 +119,11 @@ static void ams_worker(struct work_struct *work)
			printk(KERN_INFO "ams: shock detected!\n");

		ams_info.worker_irqs &= ~AMS_IRQ_SHOCK;

			/* we must call this with interrupts enabled */
			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);
}