Lines Matching full:info
272 struct max77686_rtc_info *info) in max77686_rtc_data_to_tm() argument
274 u8 mask = info->drv_data->mask; in max77686_rtc_data_to_tm()
278 if (info->rtc_24hr_mode) { in max77686_rtc_data_to_tm()
298 if (!info->drv_data->alarm_enable_reg) in max77686_rtc_data_to_tm()
303 struct max77686_rtc_info *info) in max77686_rtc_tm_to_data() argument
312 if (info->drv_data->alarm_enable_reg) { in max77686_rtc_tm_to_data()
320 dev_err(info->dev, "RTC cannot handle the year %d.\n", in max77686_rtc_tm_to_data()
328 static int max77686_rtc_update(struct max77686_rtc_info *info, in max77686_rtc_update() argument
333 unsigned long delay = info->drv_data->delay; in max77686_rtc_update()
340 ret = regmap_update_bits(info->rtc_regmap, in max77686_rtc_update()
341 info->drv_data->map[REG_RTC_UPDATE0], in max77686_rtc_update()
344 dev_err(info->dev, "Fail to write update reg(ret=%d, data=0x%x)\n", in max77686_rtc_update()
356 struct max77686_rtc_info *info = dev_get_drvdata(dev); in max77686_rtc_read_time() local
360 mutex_lock(&info->lock); in max77686_rtc_read_time()
362 ret = max77686_rtc_update(info, MAX77686_RTC_READ); in max77686_rtc_read_time()
366 ret = regmap_bulk_read(info->rtc_regmap, in max77686_rtc_read_time()
367 info->drv_data->map[REG_RTC_SEC], in max77686_rtc_read_time()
370 dev_err(info->dev, "Fail to read time reg(%d)\n", ret); in max77686_rtc_read_time()
374 max77686_rtc_data_to_tm(data, tm, info); in max77686_rtc_read_time()
377 mutex_unlock(&info->lock); in max77686_rtc_read_time()
383 struct max77686_rtc_info *info = dev_get_drvdata(dev); in max77686_rtc_set_time() local
387 ret = max77686_rtc_tm_to_data(tm, data, info); in max77686_rtc_set_time()
391 mutex_lock(&info->lock); in max77686_rtc_set_time()
393 ret = regmap_bulk_write(info->rtc_regmap, in max77686_rtc_set_time()
394 info->drv_data->map[REG_RTC_SEC], in max77686_rtc_set_time()
397 dev_err(info->dev, "Fail to write time reg(%d)\n", ret); in max77686_rtc_set_time()
401 ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); in max77686_rtc_set_time()
404 mutex_unlock(&info->lock); in max77686_rtc_set_time()
410 struct max77686_rtc_info *info = dev_get_drvdata(dev); in max77686_rtc_read_alarm() local
413 const unsigned int *map = info->drv_data->map; in max77686_rtc_read_alarm()
416 mutex_lock(&info->lock); in max77686_rtc_read_alarm()
418 ret = max77686_rtc_update(info, MAX77686_RTC_READ); in max77686_rtc_read_alarm()
422 ret = regmap_bulk_read(info->rtc_regmap, map[REG_ALARM1_SEC], in max77686_rtc_read_alarm()
425 dev_err(info->dev, "Fail to read alarm reg(%d)\n", ret); in max77686_rtc_read_alarm()
429 max77686_rtc_data_to_tm(data, &alrm->time, info); in max77686_rtc_read_alarm()
433 if (info->drv_data->alarm_enable_reg) { in max77686_rtc_read_alarm()
436 dev_err(info->dev, in max77686_rtc_read_alarm()
441 ret = regmap_read(info->rtc_regmap, map[REG_RTC_AE1], &val); in max77686_rtc_read_alarm()
443 dev_err(info->dev, in max77686_rtc_read_alarm()
461 if (info->drv_data->alarm_pending_status_reg == MAX77686_INVALID_REG) in max77686_rtc_read_alarm()
464 ret = regmap_read(info->regmap, in max77686_rtc_read_alarm()
465 info->drv_data->alarm_pending_status_reg, &val); in max77686_rtc_read_alarm()
467 dev_err(info->dev, in max77686_rtc_read_alarm()
476 mutex_unlock(&info->lock); in max77686_rtc_read_alarm()
480 static int max77686_rtc_stop_alarm(struct max77686_rtc_info *info) in max77686_rtc_stop_alarm() argument
485 const unsigned int *map = info->drv_data->map; in max77686_rtc_stop_alarm()
487 if (!mutex_is_locked(&info->lock)) in max77686_rtc_stop_alarm()
488 dev_warn(info->dev, "%s: should have mutex locked\n", __func__); in max77686_rtc_stop_alarm()
490 ret = max77686_rtc_update(info, MAX77686_RTC_READ); in max77686_rtc_stop_alarm()
494 if (info->drv_data->alarm_enable_reg) { in max77686_rtc_stop_alarm()
497 dev_err(info->dev, in max77686_rtc_stop_alarm()
502 ret = regmap_write(info->rtc_regmap, map[REG_RTC_AE1], 0); in max77686_rtc_stop_alarm()
504 ret = regmap_bulk_read(info->rtc_regmap, map[REG_ALARM1_SEC], in max77686_rtc_stop_alarm()
507 dev_err(info->dev, "Fail to read alarm reg(%d)\n", ret); in max77686_rtc_stop_alarm()
511 max77686_rtc_data_to_tm(data, &tm, info); in max77686_rtc_stop_alarm()
516 ret = regmap_bulk_write(info->rtc_regmap, map[REG_ALARM1_SEC], in max77686_rtc_stop_alarm()
521 dev_err(info->dev, "Fail to write alarm reg(%d)\n", ret); in max77686_rtc_stop_alarm()
525 ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); in max77686_rtc_stop_alarm()
530 static int max77686_rtc_start_alarm(struct max77686_rtc_info *info) in max77686_rtc_start_alarm() argument
535 const unsigned int *map = info->drv_data->map; in max77686_rtc_start_alarm()
537 if (!mutex_is_locked(&info->lock)) in max77686_rtc_start_alarm()
538 dev_warn(info->dev, "%s: should have mutex locked\n", __func__); in max77686_rtc_start_alarm()
540 ret = max77686_rtc_update(info, MAX77686_RTC_READ); in max77686_rtc_start_alarm()
544 if (info->drv_data->alarm_enable_reg) { in max77686_rtc_start_alarm()
545 ret = regmap_write(info->rtc_regmap, map[REG_RTC_AE1], in max77686_rtc_start_alarm()
548 ret = regmap_bulk_read(info->rtc_regmap, map[REG_ALARM1_SEC], in max77686_rtc_start_alarm()
551 dev_err(info->dev, "Fail to read alarm reg(%d)\n", ret); in max77686_rtc_start_alarm()
555 max77686_rtc_data_to_tm(data, &tm, info); in max77686_rtc_start_alarm()
563 if (data[RTC_YEAR] & info->drv_data->mask) in max77686_rtc_start_alarm()
568 ret = regmap_bulk_write(info->rtc_regmap, map[REG_ALARM1_SEC], in max77686_rtc_start_alarm()
573 dev_err(info->dev, "Fail to write alarm reg(%d)\n", ret); in max77686_rtc_start_alarm()
577 ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); in max77686_rtc_start_alarm()
584 struct max77686_rtc_info *info = dev_get_drvdata(dev); in max77686_rtc_set_alarm() local
588 ret = max77686_rtc_tm_to_data(&alrm->time, data, info); in max77686_rtc_set_alarm()
592 mutex_lock(&info->lock); in max77686_rtc_set_alarm()
594 ret = max77686_rtc_stop_alarm(info); in max77686_rtc_set_alarm()
598 ret = regmap_bulk_write(info->rtc_regmap, in max77686_rtc_set_alarm()
599 info->drv_data->map[REG_ALARM1_SEC], in max77686_rtc_set_alarm()
603 dev_err(info->dev, "Fail to write alarm reg(%d)\n", ret); in max77686_rtc_set_alarm()
607 ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); in max77686_rtc_set_alarm()
612 ret = max77686_rtc_start_alarm(info); in max77686_rtc_set_alarm()
614 mutex_unlock(&info->lock); in max77686_rtc_set_alarm()
621 struct max77686_rtc_info *info = dev_get_drvdata(dev); in max77686_rtc_alarm_irq_enable() local
624 mutex_lock(&info->lock); in max77686_rtc_alarm_irq_enable()
626 ret = max77686_rtc_start_alarm(info); in max77686_rtc_alarm_irq_enable()
628 ret = max77686_rtc_stop_alarm(info); in max77686_rtc_alarm_irq_enable()
629 mutex_unlock(&info->lock); in max77686_rtc_alarm_irq_enable()
636 struct max77686_rtc_info *info = data; in max77686_rtc_alarm_irq() local
638 dev_dbg(info->dev, "RTC alarm IRQ: %d\n", irq); in max77686_rtc_alarm_irq()
640 rtc_update_irq(info->rtc_dev, 1, RTC_IRQF | RTC_AF); in max77686_rtc_alarm_irq()
653 static int max77686_rtc_init_reg(struct max77686_rtc_info *info) in max77686_rtc_init_reg() argument
662 info->rtc_24hr_mode = 1; in max77686_rtc_init_reg()
664 ret = regmap_bulk_write(info->rtc_regmap, in max77686_rtc_init_reg()
665 info->drv_data->map[REG_RTC_CONTROLM], in max77686_rtc_init_reg()
668 dev_err(info->dev, "Fail to write controlm reg(%d)\n", ret); in max77686_rtc_init_reg()
672 ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); in max77686_rtc_init_reg()
676 static int max77686_init_rtc_regmap(struct max77686_rtc_info *info) in max77686_init_rtc_regmap() argument
678 struct device *parent = info->dev->parent; in max77686_init_rtc_regmap()
682 if (info->drv_data->rtc_irq_from_platform) { in max77686_init_rtc_regmap()
683 struct platform_device *pdev = to_platform_device(info->dev); in max77686_init_rtc_regmap()
685 info->rtc_irq = platform_get_irq(pdev, 0); in max77686_init_rtc_regmap()
686 if (info->rtc_irq < 0) in max77686_init_rtc_regmap()
687 return info->rtc_irq; in max77686_init_rtc_regmap()
689 info->rtc_irq = parent_i2c->irq; in max77686_init_rtc_regmap()
692 info->regmap = dev_get_regmap(parent, NULL); in max77686_init_rtc_regmap()
693 if (!info->regmap) { in max77686_init_rtc_regmap()
694 dev_err(info->dev, "Failed to get rtc regmap\n"); in max77686_init_rtc_regmap()
698 if (info->drv_data->rtc_i2c_addr == MAX77686_INVALID_I2C_ADDR) { in max77686_init_rtc_regmap()
699 info->rtc_regmap = info->regmap; in max77686_init_rtc_regmap()
703 info->rtc = devm_i2c_new_dummy_device(info->dev, parent_i2c->adapter, in max77686_init_rtc_regmap()
704 info->drv_data->rtc_i2c_addr); in max77686_init_rtc_regmap()
705 if (IS_ERR(info->rtc)) { in max77686_init_rtc_regmap()
706 dev_err(info->dev, "Failed to allocate I2C device for RTC\n"); in max77686_init_rtc_regmap()
707 return PTR_ERR(info->rtc); in max77686_init_rtc_regmap()
710 info->rtc_regmap = devm_regmap_init_i2c(info->rtc, in max77686_init_rtc_regmap()
711 info->drv_data->regmap_config); in max77686_init_rtc_regmap()
712 if (IS_ERR(info->rtc_regmap)) { in max77686_init_rtc_regmap()
713 ret = PTR_ERR(info->rtc_regmap); in max77686_init_rtc_regmap()
714 dev_err(info->dev, "Failed to allocate RTC regmap: %d\n", ret); in max77686_init_rtc_regmap()
719 ret = regmap_add_irq_chip(info->rtc_regmap, info->rtc_irq, in max77686_init_rtc_regmap()
721 0, info->drv_data->rtc_irq_chip, in max77686_init_rtc_regmap()
722 &info->rtc_irq_data); in max77686_init_rtc_regmap()
724 dev_err(info->dev, "Failed to add RTC irq chip: %d\n", ret); in max77686_init_rtc_regmap()
733 struct max77686_rtc_info *info; in max77686_rtc_probe() local
737 info = devm_kzalloc(&pdev->dev, sizeof(struct max77686_rtc_info), in max77686_rtc_probe()
739 if (!info) in max77686_rtc_probe()
742 mutex_init(&info->lock); in max77686_rtc_probe()
743 info->dev = &pdev->dev; in max77686_rtc_probe()
744 info->drv_data = (const struct max77686_rtc_driver_data *) in max77686_rtc_probe()
747 ret = max77686_init_rtc_regmap(info); in max77686_rtc_probe()
751 platform_set_drvdata(pdev, info); in max77686_rtc_probe()
753 ret = max77686_rtc_init_reg(info); in max77686_rtc_probe()
761 info->rtc_dev = devm_rtc_device_register(&pdev->dev, id->name, in max77686_rtc_probe()
764 if (IS_ERR(info->rtc_dev)) { in max77686_rtc_probe()
765 ret = PTR_ERR(info->rtc_dev); in max77686_rtc_probe()
772 info->virq = regmap_irq_get_virq(info->rtc_irq_data, in max77686_rtc_probe()
774 if (info->virq <= 0) { in max77686_rtc_probe()
779 ret = request_threaded_irq(info->virq, NULL, max77686_rtc_alarm_irq, 0, in max77686_rtc_probe()
780 "rtc-alarm1", info); in max77686_rtc_probe()
783 info->virq, ret); in max77686_rtc_probe()
790 regmap_del_irq_chip(info->rtc_irq, info->rtc_irq_data); in max77686_rtc_probe()
797 struct max77686_rtc_info *info = platform_get_drvdata(pdev); in max77686_rtc_remove() local
799 free_irq(info->virq, info); in max77686_rtc_remove()
800 regmap_del_irq_chip(info->rtc_irq, info->rtc_irq_data); in max77686_rtc_remove()
808 struct max77686_rtc_info *info = dev_get_drvdata(dev); in max77686_rtc_suspend() local
812 struct max77686_rtc_info *info = dev_get_drvdata(dev); in max77686_rtc_suspend() local
814 ret = enable_irq_wake(info->virq); in max77686_rtc_suspend()
825 if (!info->drv_data->rtc_irq_from_platform) in max77686_rtc_suspend()
826 disable_irq(info->rtc_irq); in max77686_rtc_suspend()
833 struct max77686_rtc_info *info = dev_get_drvdata(dev); in max77686_rtc_resume() local
835 if (!info->drv_data->rtc_irq_from_platform) in max77686_rtc_resume()
836 enable_irq(info->rtc_irq); in max77686_rtc_resume()
839 struct max77686_rtc_info *info = dev_get_drvdata(dev); in max77686_rtc_resume() local
841 return disable_irq_wake(info->virq); in max77686_rtc_resume()