Lines Matching refs:chip

161 	struct sunxi_rtc_dev *chip = (struct sunxi_rtc_dev *) id;  in sunxi_rtc_alarmirq()  local
164 val = readl(chip->base + SUNXI_ALRM_IRQ_STA); in sunxi_rtc_alarmirq()
168 writel(val, chip->base + SUNXI_ALRM_IRQ_STA); in sunxi_rtc_alarmirq()
170 rtc_update_irq(chip->rtc, 1, RTC_AF | RTC_IRQF); in sunxi_rtc_alarmirq()
178 static void sunxi_rtc_setaie(int to, struct sunxi_rtc_dev *chip) in sunxi_rtc_setaie() argument
184 alrm_val = readl(chip->base + SUNXI_ALRM_EN); in sunxi_rtc_setaie()
187 alrm_irq_val = readl(chip->base + SUNXI_ALRM_IRQ_EN); in sunxi_rtc_setaie()
191 chip->base + SUNXI_ALRM_IRQ_STA); in sunxi_rtc_setaie()
194 writel(alrm_val, chip->base + SUNXI_ALRM_EN); in sunxi_rtc_setaie()
195 writel(alrm_irq_val, chip->base + SUNXI_ALRM_IRQ_EN); in sunxi_rtc_setaie()
200 struct sunxi_rtc_dev *chip = dev_get_drvdata(dev); in sunxi_rtc_getalarm() local
206 alrm = readl(chip->base + SUNXI_ALRM_DHMS); in sunxi_rtc_getalarm()
207 date = readl(chip->base + SUNXI_RTC_YMD); in sunxi_rtc_getalarm()
216 chip->data_year->mask); in sunxi_rtc_getalarm()
224 alrm_tm->tm_year += SUNXI_YEAR_OFF(chip->data_year); in sunxi_rtc_getalarm()
226 alrm_en = readl(chip->base + SUNXI_ALRM_IRQ_EN); in sunxi_rtc_getalarm()
235 struct sunxi_rtc_dev *chip = dev_get_drvdata(dev); in sunxi_rtc_gettime() local
242 date = readl(chip->base + SUNXI_RTC_YMD); in sunxi_rtc_gettime()
243 time = readl(chip->base + SUNXI_RTC_HMS); in sunxi_rtc_gettime()
244 } while ((date != readl(chip->base + SUNXI_RTC_YMD)) || in sunxi_rtc_gettime()
245 (time != readl(chip->base + SUNXI_RTC_HMS))); in sunxi_rtc_gettime()
254 chip->data_year->mask); in sunxi_rtc_gettime()
262 rtc_tm->tm_year += SUNXI_YEAR_OFF(chip->data_year); in sunxi_rtc_gettime()
269 struct sunxi_rtc_dev *chip = dev_get_drvdata(dev); in sunxi_rtc_setalarm() local
307 sunxi_rtc_setaie(0, chip); in sunxi_rtc_setalarm()
308 writel(0, chip->base + SUNXI_ALRM_DHMS); in sunxi_rtc_setalarm()
315 writel(alrm, chip->base + SUNXI_ALRM_DHMS); in sunxi_rtc_setalarm()
317 writel(0, chip->base + SUNXI_ALRM_IRQ_EN); in sunxi_rtc_setalarm()
318 writel(SUNXI_ALRM_IRQ_EN_CNT_IRQ_EN, chip->base + SUNXI_ALRM_IRQ_EN); in sunxi_rtc_setalarm()
320 sunxi_rtc_setaie(wkalrm->enabled, chip); in sunxi_rtc_setalarm()
325 static int sunxi_rtc_wait(struct sunxi_rtc_dev *chip, int offset, in sunxi_rtc_wait() argument
332 reg = readl(chip->base + offset); in sunxi_rtc_wait()
345 struct sunxi_rtc_dev *chip = dev_get_drvdata(dev); in sunxi_rtc_settime() local
357 if (year < chip->data_year->min || year > chip->data_year->max) { in sunxi_rtc_settime()
359 chip->data_year->min, chip->data_year->max); in sunxi_rtc_settime()
363 rtc_tm->tm_year -= SUNXI_YEAR_OFF(chip->data_year); in sunxi_rtc_settime()
369 chip->data_year->mask); in sunxi_rtc_settime()
372 date |= SUNXI_LEAP_SET_VALUE(1, chip->data_year->leap_shift); in sunxi_rtc_settime()
378 writel(0, chip->base + SUNXI_RTC_HMS); in sunxi_rtc_settime()
379 writel(0, chip->base + SUNXI_RTC_YMD); in sunxi_rtc_settime()
381 writel(time, chip->base + SUNXI_RTC_HMS); in sunxi_rtc_settime()
389 if (sunxi_rtc_wait(chip, SUNXI_LOSC_CTRL, in sunxi_rtc_settime()
395 writel(date, chip->base + SUNXI_RTC_YMD); in sunxi_rtc_settime()
403 if (sunxi_rtc_wait(chip, SUNXI_LOSC_CTRL, in sunxi_rtc_settime()
414 struct sunxi_rtc_dev *chip = dev_get_drvdata(dev); in sunxi_rtc_alarm_irq_enable() local
417 sunxi_rtc_setaie(enabled, chip); in sunxi_rtc_alarm_irq_enable()
439 struct sunxi_rtc_dev *chip; in sunxi_rtc_probe() local
444 chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); in sunxi_rtc_probe()
445 if (!chip) in sunxi_rtc_probe()
448 platform_set_drvdata(pdev, chip); in sunxi_rtc_probe()
449 chip->dev = &pdev->dev; in sunxi_rtc_probe()
452 chip->base = devm_ioremap_resource(&pdev->dev, res); in sunxi_rtc_probe()
453 if (IS_ERR(chip->base)) in sunxi_rtc_probe()
454 return PTR_ERR(chip->base); in sunxi_rtc_probe()
456 chip->irq = platform_get_irq(pdev, 0); in sunxi_rtc_probe()
457 if (chip->irq < 0) { in sunxi_rtc_probe()
459 return chip->irq; in sunxi_rtc_probe()
461 ret = devm_request_irq(&pdev->dev, chip->irq, sunxi_rtc_alarmirq, in sunxi_rtc_probe()
462 0, dev_name(&pdev->dev), chip); in sunxi_rtc_probe()
473 chip->data_year = (struct sunxi_rtc_data_year *) of_id->data; in sunxi_rtc_probe()
476 writel(0, chip->base + SUNXI_ALRM_DHMS); in sunxi_rtc_probe()
479 writel(0, chip->base + SUNXI_ALRM_EN); in sunxi_rtc_probe()
482 writel(0, chip->base + SUNXI_ALRM_IRQ_EN); in sunxi_rtc_probe()
485 writel(SUNXI_ALRM_IRQ_STA_CNT_IRQ_PEND, chip->base + in sunxi_rtc_probe()
488 chip->rtc = rtc_device_register("rtc-sunxi", &pdev->dev, in sunxi_rtc_probe()
490 if (IS_ERR(chip->rtc)) { in sunxi_rtc_probe()
492 return PTR_ERR(chip->rtc); in sunxi_rtc_probe()
502 struct sunxi_rtc_dev *chip = platform_get_drvdata(pdev); in sunxi_rtc_remove() local
504 rtc_device_unregister(chip->rtc); in sunxi_rtc_remove()