Lines Matching refs:chip
121 struct sun6i_rtc_dev *chip = (struct sun6i_rtc_dev *) id; in sun6i_rtc_alarmirq() local
124 val = readl(chip->base + SUN6I_ALRM_IRQ_STA); in sun6i_rtc_alarmirq()
128 writel(val, chip->base + SUN6I_ALRM_IRQ_STA); in sun6i_rtc_alarmirq()
130 rtc_update_irq(chip->rtc, 1, RTC_AF | RTC_IRQF); in sun6i_rtc_alarmirq()
138 static void sun6i_rtc_setaie(int to, struct sun6i_rtc_dev *chip) in sun6i_rtc_setaie() argument
150 chip->base + SUN6I_ALRM_IRQ_STA); in sun6i_rtc_setaie()
153 writel(alrm_val, chip->base + SUN6I_ALRM_EN); in sun6i_rtc_setaie()
154 writel(alrm_irq_val, chip->base + SUN6I_ALRM_IRQ_EN); in sun6i_rtc_setaie()
155 writel(alrm_wake_val, chip->base + SUN6I_ALARM_CONFIG); in sun6i_rtc_setaie()
160 struct sun6i_rtc_dev *chip = dev_get_drvdata(dev); in sun6i_rtc_gettime() local
167 date = readl(chip->base + SUN6I_RTC_YMD); in sun6i_rtc_gettime()
168 time = readl(chip->base + SUN6I_RTC_HMS); in sun6i_rtc_gettime()
169 } while ((date != readl(chip->base + SUN6I_RTC_YMD)) || in sun6i_rtc_gettime()
170 (time != readl(chip->base + SUN6I_RTC_HMS))); in sun6i_rtc_gettime()
193 struct sun6i_rtc_dev *chip = dev_get_drvdata(dev); in sun6i_rtc_getalarm() local
197 alrm_en = readl(chip->base + SUN6I_ALRM_IRQ_EN); in sun6i_rtc_getalarm()
198 alrm_st = readl(chip->base + SUN6I_ALRM_IRQ_STA); in sun6i_rtc_getalarm()
201 rtc_time_to_tm(chip->alarm, &wkalrm->time); in sun6i_rtc_getalarm()
208 struct sun6i_rtc_dev *chip = dev_get_drvdata(dev); in sun6i_rtc_setalarm() local
236 sun6i_rtc_setaie(0, chip); in sun6i_rtc_setalarm()
237 writel(0, chip->base + SUN6I_ALRM_COUNTER); in sun6i_rtc_setalarm()
240 writel(time_gap, chip->base + SUN6I_ALRM_COUNTER); in sun6i_rtc_setalarm()
241 chip->alarm = time_set; in sun6i_rtc_setalarm()
243 sun6i_rtc_setaie(wkalrm->enabled, chip); in sun6i_rtc_setalarm()
248 static int sun6i_rtc_wait(struct sun6i_rtc_dev *chip, int offset, in sun6i_rtc_wait() argument
255 reg = readl(chip->base + offset); in sun6i_rtc_wait()
268 struct sun6i_rtc_dev *chip = dev_get_drvdata(dev); in sun6i_rtc_settime() local
295 if (sun6i_rtc_wait(chip, SUN6I_LOSC_CTRL, in sun6i_rtc_settime()
301 writel(time, chip->base + SUN6I_RTC_HMS); in sun6i_rtc_settime()
309 if (sun6i_rtc_wait(chip, SUN6I_LOSC_CTRL, in sun6i_rtc_settime()
315 writel(date, chip->base + SUN6I_RTC_YMD); in sun6i_rtc_settime()
323 if (sun6i_rtc_wait(chip, SUN6I_LOSC_CTRL, in sun6i_rtc_settime()
334 struct sun6i_rtc_dev *chip = dev_get_drvdata(dev); in sun6i_rtc_alarm_irq_enable() local
337 sun6i_rtc_setaie(enabled, chip); in sun6i_rtc_alarm_irq_enable()
352 struct sun6i_rtc_dev *chip; in sun6i_rtc_probe() local
356 chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); in sun6i_rtc_probe()
357 if (!chip) in sun6i_rtc_probe()
360 platform_set_drvdata(pdev, chip); in sun6i_rtc_probe()
361 chip->dev = &pdev->dev; in sun6i_rtc_probe()
364 chip->base = devm_ioremap_resource(&pdev->dev, res); in sun6i_rtc_probe()
365 if (IS_ERR(chip->base)) in sun6i_rtc_probe()
366 return PTR_ERR(chip->base); in sun6i_rtc_probe()
368 chip->irq = platform_get_irq(pdev, 0); in sun6i_rtc_probe()
369 if (chip->irq < 0) { in sun6i_rtc_probe()
371 return chip->irq; in sun6i_rtc_probe()
374 ret = devm_request_irq(&pdev->dev, chip->irq, sun6i_rtc_alarmirq, in sun6i_rtc_probe()
375 0, dev_name(&pdev->dev), chip); in sun6i_rtc_probe()
382 writel(0, chip->base + SUN6I_ALRM_COUNTER); in sun6i_rtc_probe()
385 writel(0, chip->base + SUN6I_ALRM_EN); in sun6i_rtc_probe()
388 writel(0, chip->base + SUN6I_ALRM_IRQ_EN); in sun6i_rtc_probe()
391 writel(0, chip->base + SUN6I_ALRM1_EN); in sun6i_rtc_probe()
394 writel(0, chip->base + SUN6I_ALRM1_IRQ_EN); in sun6i_rtc_probe()
398 chip->base + SUN6I_ALRM_IRQ_STA); in sun6i_rtc_probe()
402 chip->base + SUN6I_ALRM1_IRQ_STA); in sun6i_rtc_probe()
405 writel(0, chip->base + SUN6I_ALARM_CONFIG); in sun6i_rtc_probe()
407 chip->rtc = rtc_device_register("rtc-sun6i", &pdev->dev, in sun6i_rtc_probe()
409 if (IS_ERR(chip->rtc)) { in sun6i_rtc_probe()
411 return PTR_ERR(chip->rtc); in sun6i_rtc_probe()
421 struct sun6i_rtc_dev *chip = platform_get_drvdata(pdev); in sun6i_rtc_remove() local
423 rtc_device_unregister(chip->rtc); in sun6i_rtc_remove()