|
@@ -776,7 +776,7 @@ static void cmos_do_shutdown(int rtc_irq)
|
|
|
spin_unlock_irq(&rtc_lock);
|
|
|
}
|
|
|
|
|
|
-static void __exit cmos_do_remove(struct device *dev)
|
|
|
+static void cmos_do_remove(struct device *dev)
|
|
|
{
|
|
|
struct cmos_rtc *cmos = dev_get_drvdata(dev);
|
|
|
struct resource *ports;
|
|
@@ -996,8 +996,9 @@ static u32 rtc_handler(void *context)
|
|
|
struct cmos_rtc *cmos = dev_get_drvdata(dev);
|
|
|
unsigned char rtc_control = 0;
|
|
|
unsigned char rtc_intr;
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
- spin_lock_irq(&rtc_lock);
|
|
|
+ spin_lock_irqsave(&rtc_lock, flags);
|
|
|
if (cmos_rtc.suspend_ctrl)
|
|
|
rtc_control = CMOS_READ(RTC_CONTROL);
|
|
|
if (rtc_control & RTC_AIE) {
|
|
@@ -1006,7 +1007,7 @@ static u32 rtc_handler(void *context)
|
|
|
rtc_intr = CMOS_READ(RTC_INTR_FLAGS);
|
|
|
rtc_update_irq(cmos->rtc, 1, rtc_intr);
|
|
|
}
|
|
|
- spin_unlock_irq(&rtc_lock);
|
|
|
+ spin_unlock_irqrestore(&rtc_lock, flags);
|
|
|
|
|
|
pm_wakeup_event(dev, 0);
|
|
|
acpi_clear_event(ACPI_EVENT_RTC);
|
|
@@ -1129,7 +1130,7 @@ static int cmos_pnp_probe(struct pnp_dev *pnp, const struct pnp_device_id *id)
|
|
|
pnp_irq(pnp, 0));
|
|
|
}
|
|
|
|
|
|
-static void __exit cmos_pnp_remove(struct pnp_dev *pnp)
|
|
|
+static void cmos_pnp_remove(struct pnp_dev *pnp)
|
|
|
{
|
|
|
cmos_do_remove(&pnp->dev);
|
|
|
}
|
|
@@ -1161,7 +1162,7 @@ static struct pnp_driver cmos_pnp_driver = {
|
|
|
.name = (char *) driver_name,
|
|
|
.id_table = rtc_ids,
|
|
|
.probe = cmos_pnp_probe,
|
|
|
- .remove = __exit_p(cmos_pnp_remove),
|
|
|
+ .remove = cmos_pnp_remove,
|
|
|
.shutdown = cmos_pnp_shutdown,
|
|
|
|
|
|
/* flag ensures resume() gets called, and stops syslog spam */
|
|
@@ -1238,7 +1239,7 @@ static int __init cmos_platform_probe(struct platform_device *pdev)
|
|
|
return cmos_do_probe(&pdev->dev, resource, irq);
|
|
|
}
|
|
|
|
|
|
-static int __exit cmos_platform_remove(struct platform_device *pdev)
|
|
|
+static int cmos_platform_remove(struct platform_device *pdev)
|
|
|
{
|
|
|
cmos_do_remove(&pdev->dev);
|
|
|
return 0;
|
|
@@ -1263,7 +1264,7 @@ static void cmos_platform_shutdown(struct platform_device *pdev)
|
|
|
MODULE_ALIAS("platform:rtc_cmos");
|
|
|
|
|
|
static struct platform_driver cmos_platform_driver = {
|
|
|
- .remove = __exit_p(cmos_platform_remove),
|
|
|
+ .remove = cmos_platform_remove,
|
|
|
.shutdown = cmos_platform_shutdown,
|
|
|
.driver = {
|
|
|
.name = driver_name,
|