static int puv3_rtc_suspend(struct platform_device *pdev, pm_message_t state) { ticnt_save = readl(RTC_RTAR); puv3_rtc_enable(pdev, 0); return 0; }
static int puv3_rtc_suspend(struct platform_device *pdev, pm_message_t state) { /* save RTAR for anyone using periodic interrupts */ ticnt_save = readl(RTC_RTAR); puv3_rtc_enable(pdev, 0); return 0; }
static int puv3_rtc_suspend(struct device *dev) { /* save RTAR for anyone using periodic interrupts */ ticnt_save = readl(RTC_RTAR); puv3_rtc_enable(dev, 0); return 0; }
static int puv3_rtc_resume(struct platform_device *pdev) { puv3_rtc_enable(pdev, 1); writel(ticnt_save, RTC_RTAR); return 0; }
static int __devinit puv3_rtc_probe(struct platform_device *pdev) { struct rtc_device *rtc; struct resource *res; int ret; pr_debug("%s: probe=%p\n", __func__, pdev); puv3_rtc_tickno = platform_get_irq(pdev, 1); if (puv3_rtc_tickno < 0) { dev_err(&pdev->dev, "no irq for rtc tick\n"); return -ENOENT; } puv3_rtc_alarmno = platform_get_irq(pdev, 0); if (puv3_rtc_alarmno < 0) { dev_err(&pdev->dev, "no irq for alarm\n"); return -ENOENT; } pr_debug("PKUnity_rtc: tick irq %d, alarm irq %d\n", puv3_rtc_tickno, puv3_rtc_alarmno); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (res == NULL) { dev_err(&pdev->dev, "failed to get memory region resource\n"); return -ENOENT; } puv3_rtc_mem = request_mem_region(res->start, resource_size(res), pdev->name); if (puv3_rtc_mem == NULL) { dev_err(&pdev->dev, "failed to reserve memory region\n"); ret = -ENOENT; goto err_nores; } puv3_rtc_enable(pdev, 1); rtc = rtc_device_register("pkunity", &pdev->dev, &puv3_rtcops, THIS_MODULE); if (IS_ERR(rtc)) { dev_err(&pdev->dev, "cannot attach rtc\n"); ret = PTR_ERR(rtc); goto err_nortc; } if (!device_can_wakeup(&pdev->dev)) device_init_wakeup(&pdev->dev, 1); platform_set_drvdata(pdev, rtc); return 0; err_nortc: puv3_rtc_enable(pdev, 0); release_resource(puv3_rtc_mem); err_nores: return ret; }
static int puv3_rtc_resume(struct device *dev) { puv3_rtc_enable(dev, 1); writel(ticnt_save, RTC_RTAR); return 0; }
static int puv3_rtc_probe(struct platform_device *pdev) { struct rtc_device *rtc; struct resource *res; int ret; dev_dbg(&pdev->dev, "%s: probe=%p\n", __func__, pdev); /* find the IRQs */ puv3_rtc_tickno = platform_get_irq(pdev, 1); if (puv3_rtc_tickno < 0) { dev_err(&pdev->dev, "no irq for rtc tick\n"); return -ENOENT; } puv3_rtc_alarmno = platform_get_irq(pdev, 0); if (puv3_rtc_alarmno < 0) { dev_err(&pdev->dev, "no irq for alarm\n"); return -ENOENT; } dev_dbg(&pdev->dev, "PKUnity_rtc: tick irq %d, alarm irq %d\n", puv3_rtc_tickno, puv3_rtc_alarmno); rtc = devm_rtc_allocate_device(&pdev->dev); if (IS_ERR(rtc)) return PTR_ERR(rtc); ret = devm_request_irq(&pdev->dev, puv3_rtc_alarmno, puv3_rtc_alarmirq, 0, "pkunity-rtc alarm", rtc); if (ret) { dev_err(&pdev->dev, "IRQ%d error %d\n", puv3_rtc_alarmno, ret); return ret; } ret = devm_request_irq(&pdev->dev, puv3_rtc_tickno, puv3_rtc_tickirq, 0, "pkunity-rtc tick", rtc); if (ret) { dev_err(&pdev->dev, "IRQ%d error %d\n", puv3_rtc_tickno, ret); return ret; } /* get the memory region */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (res == NULL) { dev_err(&pdev->dev, "failed to get memory region resource\n"); return -ENOENT; } puv3_rtc_mem = request_mem_region(res->start, resource_size(res), pdev->name); if (puv3_rtc_mem == NULL) { dev_err(&pdev->dev, "failed to reserve memory region\n"); ret = -ENOENT; goto err_nores; } puv3_rtc_enable(&pdev->dev, 1); /* register RTC and exit */ rtc->ops = &puv3_rtcops; ret = rtc_register_device(rtc); if (ret) { dev_err(&pdev->dev, "cannot attach rtc\n"); goto err_nortc; } /* platform setup code should have handled this; sigh */ if (!device_can_wakeup(&pdev->dev)) device_init_wakeup(&pdev->dev, 1); platform_set_drvdata(pdev, rtc); return 0; err_nortc: puv3_rtc_enable(&pdev->dev, 0); release_resource(puv3_rtc_mem); err_nores: return ret; }