hwmon: (smsc47m1) Fix section mismatch
[safe/jmp/linux-2.6] / drivers / hwmon / ams / ams-core.c
index 9b4a0e7..6c9ace1 100644 (file)
@@ -99,39 +99,31 @@ 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;
+       unsigned long flags;
+       u8 irqs_to_clear;
 
-               spin_lock_irqsave(&ams_info.irq_lock, flags);
+       mutex_lock(&ams_info.lock);
 
-               if (ams_info.worker_irqs & AMS_IRQ_FREEFALL) {
-                       if (verbose)
-                               printk(KERN_INFO "ams: freefall detected!\n");
+       spin_lock_irqsave(&ams_info.irq_lock, flags);
+       irqs_to_clear = ams_info.worker_irqs;
 
-                       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 */
-                       spin_unlock_irqrestore(&ams_info.irq_lock, flags);
-                       ams_info.clear_irq(AMS_IRQ_FREEFALL);
-                       spin_lock_irqsave(&ams_info.irq_lock, flags);
-               }
+               ams_info.worker_irqs &= ~AMS_IRQ_FREEFALL;
+       }
 
-               if (ams_info.worker_irqs & AMS_IRQ_SHOCK) {
-                       if (verbose)
-                               printk(KERN_INFO "ams: shock detected!\n");
+       if (ams_info.worker_irqs & AMS_IRQ_SHOCK) {
+               if (verbose)
+                       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);
-                       ams_info.clear_irq(AMS_IRQ_SHOCK);
-                       spin_lock_irqsave(&ams_info.irq_lock, flags);
-               }
+       spin_unlock_irqrestore(&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);
 }