PM / EM: Micro optimization in em_cpu_energy
[linux-2.6-microblaze.git] / drivers / rtc / rtc-cmos.c
index b795fe4..c633319 100644 (file)
@@ -649,10 +649,11 @@ static struct cmos_rtc    cmos_rtc;
 
 static irqreturn_t cmos_interrupt(int irq, void *p)
 {
+       unsigned long   flags;
        u8              irqstat;
        u8              rtc_control;
 
-       spin_lock(&rtc_lock);
+       spin_lock_irqsave(&rtc_lock, flags);
 
        /* When the HPET interrupt handler calls us, the interrupt
         * status is passed as arg1 instead of the irq number.  But
@@ -686,7 +687,7 @@ static irqreturn_t cmos_interrupt(int irq, void *p)
                        hpet_mask_rtc_irq_bit(RTC_AIE);
                CMOS_READ(RTC_INTR_FLAGS);
        }
-       spin_unlock(&rtc_lock);
+       spin_unlock_irqrestore(&rtc_lock, flags);
 
        if (is_intr(irqstat)) {
                rtc_update_irq(p, 1, irqstat);
@@ -1005,6 +1006,7 @@ static int cmos_suspend(struct device *dev)
                        enable_irq_wake(cmos->irq);
        }
 
+       memset(&cmos->saved_wkalrm, 0, sizeof(struct rtc_wkalrm));
        cmos_read_alarm(dev, &cmos->saved_wkalrm);
 
        dev_dbg(dev, "suspend%s, ctrl %02x\n",
@@ -1053,6 +1055,7 @@ static void cmos_check_wkalrm(struct device *dev)
                return;
        }
 
+       memset(&current_alarm, 0, sizeof(struct rtc_wkalrm));
        cmos_read_alarm(dev, &current_alarm);
        t_current_expires = rtc_tm_to_time64(&current_alarm.time);
        t_saved_expires = rtc_tm_to_time64(&cmos->saved_wkalrm.time);
@@ -1345,7 +1348,7 @@ static const struct pnp_device_id rtc_ids[] = {
 MODULE_DEVICE_TABLE(pnp, rtc_ids);
 
 static struct pnp_driver cmos_pnp_driver = {
-       .name           = (char *) driver_name,
+       .name           = driver_name,
        .id_table       = rtc_ids,
        .probe          = cmos_pnp_probe,
        .remove         = cmos_pnp_remove,