diff options
Diffstat (limited to 'drivers/rtc/rtc-wm8350.c')
| -rw-r--r-- | drivers/rtc/rtc-wm8350.c | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/drivers/rtc/rtc-wm8350.c b/drivers/rtc/rtc-wm8350.c index c91edc572eb6..f1e440521c54 100644 --- a/drivers/rtc/rtc-wm8350.c +++ b/drivers/rtc/rtc-wm8350.c | |||
| @@ -315,9 +315,9 @@ static int wm8350_rtc_update_irq_enable(struct device *dev, | |||
| 315 | return 0; | 315 | return 0; |
| 316 | } | 316 | } |
| 317 | 317 | ||
| 318 | static void wm8350_rtc_alarm_handler(struct wm8350 *wm8350, int irq, | 318 | static irqreturn_t wm8350_rtc_alarm_handler(int irq, void *data) |
| 319 | void *data) | ||
| 320 | { | 319 | { |
| 320 | struct wm8350 *wm8350 = data; | ||
| 321 | struct rtc_device *rtc = wm8350->rtc.rtc; | 321 | struct rtc_device *rtc = wm8350->rtc.rtc; |
| 322 | int ret; | 322 | int ret; |
| 323 | 323 | ||
| @@ -330,14 +330,18 @@ static void wm8350_rtc_alarm_handler(struct wm8350 *wm8350, int irq, | |||
| 330 | dev_err(&(wm8350->rtc.pdev->dev), | 330 | dev_err(&(wm8350->rtc.pdev->dev), |
| 331 | "Failed to disable alarm: %d\n", ret); | 331 | "Failed to disable alarm: %d\n", ret); |
| 332 | } | 332 | } |
| 333 | |||
| 334 | return IRQ_HANDLED; | ||
| 333 | } | 335 | } |
| 334 | 336 | ||
| 335 | static void wm8350_rtc_update_handler(struct wm8350 *wm8350, int irq, | 337 | static irqreturn_t wm8350_rtc_update_handler(int irq, void *data) |
| 336 | void *data) | ||
| 337 | { | 338 | { |
| 339 | struct wm8350 *wm8350 = data; | ||
| 338 | struct rtc_device *rtc = wm8350->rtc.rtc; | 340 | struct rtc_device *rtc = wm8350->rtc.rtc; |
| 339 | 341 | ||
| 340 | rtc_update_irq(rtc, 1, RTC_IRQF | RTC_UF); | 342 | rtc_update_irq(rtc, 1, RTC_IRQF | RTC_UF); |
| 343 | |||
| 344 | return IRQ_HANDLED; | ||
| 341 | } | 345 | } |
| 342 | 346 | ||
| 343 | static const struct rtc_class_ops wm8350_rtc_ops = { | 347 | static const struct rtc_class_ops wm8350_rtc_ops = { |
| @@ -350,8 +354,9 @@ static const struct rtc_class_ops wm8350_rtc_ops = { | |||
| 350 | }; | 354 | }; |
| 351 | 355 | ||
| 352 | #ifdef CONFIG_PM | 356 | #ifdef CONFIG_PM |
| 353 | static int wm8350_rtc_suspend(struct platform_device *pdev, pm_message_t state) | 357 | static int wm8350_rtc_suspend(struct device *dev) |
| 354 | { | 358 | { |
| 359 | struct platform_device *pdev = to_platform_device(dev); | ||
| 355 | struct wm8350 *wm8350 = dev_get_drvdata(&pdev->dev); | 360 | struct wm8350 *wm8350 = dev_get_drvdata(&pdev->dev); |
| 356 | int ret = 0; | 361 | int ret = 0; |
| 357 | u16 reg; | 362 | u16 reg; |
| @@ -369,8 +374,9 @@ static int wm8350_rtc_suspend(struct platform_device *pdev, pm_message_t state) | |||
| 369 | return ret; | 374 | return ret; |
| 370 | } | 375 | } |
| 371 | 376 | ||
| 372 | static int wm8350_rtc_resume(struct platform_device *pdev) | 377 | static int wm8350_rtc_resume(struct device *dev) |
| 373 | { | 378 | { |
| 379 | struct platform_device *pdev = to_platform_device(dev); | ||
| 374 | struct wm8350 *wm8350 = dev_get_drvdata(&pdev->dev); | 380 | struct wm8350 *wm8350 = dev_get_drvdata(&pdev->dev); |
| 375 | int ret; | 381 | int ret; |
| 376 | 382 | ||
| @@ -455,15 +461,14 @@ static int wm8350_rtc_probe(struct platform_device *pdev) | |||
| 455 | return ret; | 461 | return ret; |
| 456 | } | 462 | } |
| 457 | 463 | ||
| 458 | wm8350_mask_irq(wm8350, WM8350_IRQ_RTC_SEC); | ||
| 459 | wm8350_mask_irq(wm8350, WM8350_IRQ_RTC_PER); | ||
| 460 | |||
| 461 | wm8350_register_irq(wm8350, WM8350_IRQ_RTC_SEC, | 464 | wm8350_register_irq(wm8350, WM8350_IRQ_RTC_SEC, |
| 462 | wm8350_rtc_update_handler, NULL); | 465 | wm8350_rtc_update_handler, 0, |
| 466 | "RTC Seconds", wm8350); | ||
| 467 | wm8350_mask_irq(wm8350, WM8350_IRQ_RTC_SEC); | ||
| 463 | 468 | ||
| 464 | wm8350_register_irq(wm8350, WM8350_IRQ_RTC_ALM, | 469 | wm8350_register_irq(wm8350, WM8350_IRQ_RTC_ALM, |
| 465 | wm8350_rtc_alarm_handler, NULL); | 470 | wm8350_rtc_alarm_handler, 0, |
| 466 | wm8350_unmask_irq(wm8350, WM8350_IRQ_RTC_ALM); | 471 | "RTC Alarm", wm8350); |
| 467 | 472 | ||
| 468 | return 0; | 473 | return 0; |
| 469 | } | 474 | } |
| @@ -473,8 +478,6 @@ static int __devexit wm8350_rtc_remove(struct platform_device *pdev) | |||
| 473 | struct wm8350 *wm8350 = platform_get_drvdata(pdev); | 478 | struct wm8350 *wm8350 = platform_get_drvdata(pdev); |
| 474 | struct wm8350_rtc *wm_rtc = &wm8350->rtc; | 479 | struct wm8350_rtc *wm_rtc = &wm8350->rtc; |
| 475 | 480 | ||
| 476 | wm8350_mask_irq(wm8350, WM8350_IRQ_RTC_SEC); | ||
| 477 | |||
| 478 | wm8350_free_irq(wm8350, WM8350_IRQ_RTC_SEC); | 481 | wm8350_free_irq(wm8350, WM8350_IRQ_RTC_SEC); |
| 479 | wm8350_free_irq(wm8350, WM8350_IRQ_RTC_ALM); | 482 | wm8350_free_irq(wm8350, WM8350_IRQ_RTC_ALM); |
| 480 | 483 | ||
| @@ -483,13 +486,17 @@ static int __devexit wm8350_rtc_remove(struct platform_device *pdev) | |||
| 483 | return 0; | 486 | return 0; |
| 484 | } | 487 | } |
| 485 | 488 | ||
| 489 | static struct dev_pm_ops wm8350_rtc_pm_ops = { | ||
| 490 | .suspend = wm8350_rtc_suspend, | ||
| 491 | .resume = wm8350_rtc_resume, | ||
| 492 | }; | ||
| 493 | |||
| 486 | static struct platform_driver wm8350_rtc_driver = { | 494 | static struct platform_driver wm8350_rtc_driver = { |
| 487 | .probe = wm8350_rtc_probe, | 495 | .probe = wm8350_rtc_probe, |
| 488 | .remove = __devexit_p(wm8350_rtc_remove), | 496 | .remove = __devexit_p(wm8350_rtc_remove), |
| 489 | .suspend = wm8350_rtc_suspend, | ||
| 490 | .resume = wm8350_rtc_resume, | ||
| 491 | .driver = { | 497 | .driver = { |
| 492 | .name = "wm8350-rtc", | 498 | .name = "wm8350-rtc", |
| 499 | .pm = &wm8350_rtc_pm_ops, | ||
| 493 | }, | 500 | }, |
| 494 | }; | 501 | }; |
| 495 | 502 | ||
