Lines Matching refs:info

163 static inline int s5m8767_wait_for_udr_update(struct s5m_rtc_info *info)  in s5m8767_wait_for_udr_update()  argument
169 ret = regmap_read(info->regmap, info->regs->rtc_udr_update, in s5m8767_wait_for_udr_update()
171 } while (--retry && (data & info->regs->rtc_udr_mask) && !ret); in s5m8767_wait_for_udr_update()
174 dev_err(info->dev, "waiting for UDR update, reached max number of retries\n"); in s5m8767_wait_for_udr_update()
179 static inline int s5m_check_peding_alarm_interrupt(struct s5m_rtc_info *info, in s5m_check_peding_alarm_interrupt() argument
185 switch (info->device_type) { in s5m_check_peding_alarm_interrupt()
188 ret = regmap_read(info->regmap, S5M_RTC_STATUS, &val); in s5m_check_peding_alarm_interrupt()
193 ret = regmap_read(info->s5m87xx->regmap_pmic, S2MPS14_REG_ST2, in s5m_check_peding_alarm_interrupt()
211 static inline int s5m8767_rtc_set_time_reg(struct s5m_rtc_info *info) in s5m8767_rtc_set_time_reg() argument
216 ret = regmap_read(info->regmap, info->regs->rtc_udr_update, &data); in s5m8767_rtc_set_time_reg()
218 dev_err(info->dev, "failed to read update reg(%d)\n", ret); in s5m8767_rtc_set_time_reg()
222 data |= info->regs->rtc_udr_mask; in s5m8767_rtc_set_time_reg()
223 if (info->device_type == S5M8763X || info->device_type == S5M8767X) in s5m8767_rtc_set_time_reg()
226 ret = regmap_write(info->regmap, info->regs->rtc_udr_update, data); in s5m8767_rtc_set_time_reg()
228 dev_err(info->dev, "failed to write update reg(%d)\n", ret); in s5m8767_rtc_set_time_reg()
232 ret = s5m8767_wait_for_udr_update(info); in s5m8767_rtc_set_time_reg()
237 static inline int s5m8767_rtc_set_alarm_reg(struct s5m_rtc_info *info) in s5m8767_rtc_set_alarm_reg() argument
242 ret = regmap_read(info->regmap, info->regs->rtc_udr_update, &data); in s5m8767_rtc_set_alarm_reg()
244 dev_err(info->dev, "%s: fail to read update reg(%d)\n", in s5m8767_rtc_set_alarm_reg()
249 data |= info->regs->rtc_udr_mask; in s5m8767_rtc_set_alarm_reg()
250 switch (info->device_type) { in s5m8767_rtc_set_alarm_reg()
265 ret = regmap_write(info->regmap, info->regs->rtc_udr_update, data); in s5m8767_rtc_set_alarm_reg()
267 dev_err(info->dev, "%s: fail to write update reg(%d)\n", in s5m8767_rtc_set_alarm_reg()
272 ret = s5m8767_wait_for_udr_update(info); in s5m8767_rtc_set_alarm_reg()
275 if (info->device_type == S2MPS13X) in s5m8767_rtc_set_alarm_reg()
276 regmap_update_bits(info->regmap, info->regs->rtc_udr_update, in s5m8767_rtc_set_alarm_reg()
316 struct s5m_rtc_info *info = dev_get_drvdata(dev); in s5m_rtc_read_time() local
317 u8 data[info->regs->regs_count]; in s5m_rtc_read_time()
320 if (info->device_type == S2MPS14X || info->device_type == S2MPS13X) { in s5m_rtc_read_time()
321 ret = regmap_update_bits(info->regmap, in s5m_rtc_read_time()
322 info->regs->rtc_udr_update, in s5m_rtc_read_time()
331 ret = regmap_bulk_read(info->regmap, info->regs->time, data, in s5m_rtc_read_time()
332 info->regs->regs_count); in s5m_rtc_read_time()
336 switch (info->device_type) { in s5m_rtc_read_time()
344 s5m8767_data_to_tm(data, tm, info->rtc_24hr_mode); in s5m_rtc_read_time()
360 struct s5m_rtc_info *info = dev_get_drvdata(dev); in s5m_rtc_set_time() local
361 u8 data[info->regs->regs_count]; in s5m_rtc_set_time()
364 switch (info->device_type) { in s5m_rtc_set_time()
384 ret = regmap_raw_write(info->regmap, info->regs->time, data, in s5m_rtc_set_time()
385 info->regs->regs_count); in s5m_rtc_set_time()
389 ret = s5m8767_rtc_set_time_reg(info); in s5m_rtc_set_time()
396 struct s5m_rtc_info *info = dev_get_drvdata(dev); in s5m_rtc_read_alarm() local
397 u8 data[info->regs->regs_count]; in s5m_rtc_read_alarm()
401 ret = regmap_bulk_read(info->regmap, info->regs->alarm0, data, in s5m_rtc_read_alarm()
402 info->regs->regs_count); in s5m_rtc_read_alarm()
406 switch (info->device_type) { in s5m_rtc_read_alarm()
409 ret = regmap_read(info->regmap, S5M_ALARM0_CONF, &val); in s5m_rtc_read_alarm()
419 s5m8767_data_to_tm(data, &alrm->time, info->rtc_24hr_mode); in s5m_rtc_read_alarm()
421 for (i = 0; i < info->regs->regs_count; i++) { in s5m_rtc_read_alarm()
439 ret = s5m_check_peding_alarm_interrupt(info, alrm); in s5m_rtc_read_alarm()
444 static int s5m_rtc_stop_alarm(struct s5m_rtc_info *info) in s5m_rtc_stop_alarm() argument
446 u8 data[info->regs->regs_count]; in s5m_rtc_stop_alarm()
450 ret = regmap_bulk_read(info->regmap, info->regs->alarm0, data, in s5m_rtc_stop_alarm()
451 info->regs->regs_count); in s5m_rtc_stop_alarm()
455 s5m8767_data_to_tm(data, &tm, info->rtc_24hr_mode); in s5m_rtc_stop_alarm()
456 dev_dbg(info->dev, "%s: %d/%d/%d %d:%d:%d(%d)\n", __func__, in s5m_rtc_stop_alarm()
460 switch (info->device_type) { in s5m_rtc_stop_alarm()
462 ret = regmap_write(info->regmap, S5M_ALARM0_CONF, 0); in s5m_rtc_stop_alarm()
468 for (i = 0; i < info->regs->regs_count; i++) in s5m_rtc_stop_alarm()
471 ret = regmap_raw_write(info->regmap, info->regs->alarm0, data, in s5m_rtc_stop_alarm()
472 info->regs->regs_count); in s5m_rtc_stop_alarm()
476 ret = s5m8767_rtc_set_alarm_reg(info); in s5m_rtc_stop_alarm()
487 static int s5m_rtc_start_alarm(struct s5m_rtc_info *info) in s5m_rtc_start_alarm() argument
490 u8 data[info->regs->regs_count]; in s5m_rtc_start_alarm()
494 ret = regmap_bulk_read(info->regmap, info->regs->alarm0, data, in s5m_rtc_start_alarm()
495 info->regs->regs_count); in s5m_rtc_start_alarm()
499 s5m8767_data_to_tm(data, &tm, info->rtc_24hr_mode); in s5m_rtc_start_alarm()
500 dev_dbg(info->dev, "%s: %d/%d/%d %d:%d:%d(%d)\n", __func__, in s5m_rtc_start_alarm()
504 switch (info->device_type) { in s5m_rtc_start_alarm()
507 ret = regmap_write(info->regmap, S5M_ALARM0_CONF, alarm0_conf); in s5m_rtc_start_alarm()
524 ret = regmap_raw_write(info->regmap, info->regs->alarm0, data, in s5m_rtc_start_alarm()
525 info->regs->regs_count); in s5m_rtc_start_alarm()
528 ret = s5m8767_rtc_set_alarm_reg(info); in s5m_rtc_start_alarm()
541 struct s5m_rtc_info *info = dev_get_drvdata(dev); in s5m_rtc_set_alarm() local
542 u8 data[info->regs->regs_count]; in s5m_rtc_set_alarm()
545 switch (info->device_type) { in s5m_rtc_set_alarm()
565 ret = s5m_rtc_stop_alarm(info); in s5m_rtc_set_alarm()
569 ret = regmap_raw_write(info->regmap, info->regs->alarm0, data, in s5m_rtc_set_alarm()
570 info->regs->regs_count); in s5m_rtc_set_alarm()
574 ret = s5m8767_rtc_set_alarm_reg(info); in s5m_rtc_set_alarm()
579 ret = s5m_rtc_start_alarm(info); in s5m_rtc_set_alarm()
587 struct s5m_rtc_info *info = dev_get_drvdata(dev); in s5m_rtc_alarm_irq_enable() local
590 return s5m_rtc_start_alarm(info); in s5m_rtc_alarm_irq_enable()
592 return s5m_rtc_stop_alarm(info); in s5m_rtc_alarm_irq_enable()
597 struct s5m_rtc_info *info = data; in s5m_rtc_alarm_irq() local
599 rtc_update_irq(info->rtc_dev, 1, RTC_IRQF | RTC_AF); in s5m_rtc_alarm_irq()
612 static int s5m8767_rtc_init_reg(struct s5m_rtc_info *info) in s5m8767_rtc_init_reg() argument
617 switch (info->device_type) { in s5m8767_rtc_init_reg()
621 ret = regmap_update_bits(info->regmap, S5M_RTC_UDR_CON, in s5m8767_rtc_init_reg()
624 dev_err(info->dev, "%s: fail to change UDR time: %d\n", in s5m8767_rtc_init_reg()
631 ret = regmap_raw_write(info->regmap, S5M_ALARM0_CONF, data, 2); in s5m8767_rtc_init_reg()
637 ret = regmap_write(info->regmap, info->regs->ctrl, data[0]); in s5m8767_rtc_init_reg()
647 ret = s5m8767_rtc_set_alarm_reg(info); in s5m8767_rtc_init_reg()
654 info->rtc_24hr_mode = 1; in s5m8767_rtc_init_reg()
656 dev_err(info->dev, "%s: fail to write controlm reg(%d)\n", in s5m8767_rtc_init_reg()
668 struct s5m_rtc_info *info; in s5m_rtc_probe() local
677 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); in s5m_rtc_probe()
678 if (!info) in s5m_rtc_probe()
685 info->regs = &s2mps_rtc_regs; in s5m_rtc_probe()
690 info->regs = &s5m_rtc_regs; in s5m_rtc_probe()
695 info->regs = &s5m_rtc_regs; in s5m_rtc_probe()
705 info->i2c = i2c_new_dummy(s5m87xx->i2c->adapter, RTC_I2C_ADDR); in s5m_rtc_probe()
706 if (!info->i2c) { in s5m_rtc_probe()
711 info->regmap = devm_regmap_init_i2c(info->i2c, regmap_cfg); in s5m_rtc_probe()
712 if (IS_ERR(info->regmap)) { in s5m_rtc_probe()
713 ret = PTR_ERR(info->regmap); in s5m_rtc_probe()
719 info->dev = &pdev->dev; in s5m_rtc_probe()
720 info->s5m87xx = s5m87xx; in s5m_rtc_probe()
721 info->device_type = platform_get_device_id(pdev)->driver_data; in s5m_rtc_probe()
724 info->irq = regmap_irq_get_virq(s5m87xx->irq_data, alarm_irq); in s5m_rtc_probe()
725 if (info->irq <= 0) { in s5m_rtc_probe()
733 platform_set_drvdata(pdev, info); in s5m_rtc_probe()
735 ret = s5m8767_rtc_init_reg(info); in s5m_rtc_probe()
739 info->rtc_dev = devm_rtc_device_register(&pdev->dev, "s5m-rtc", in s5m_rtc_probe()
742 if (IS_ERR(info->rtc_dev)) { in s5m_rtc_probe()
743 ret = PTR_ERR(info->rtc_dev); in s5m_rtc_probe()
747 if (!info->irq) { in s5m_rtc_probe()
752 ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, in s5m_rtc_probe()
754 info); in s5m_rtc_probe()
757 info->irq, ret); in s5m_rtc_probe()
764 i2c_unregister_device(info->i2c); in s5m_rtc_probe()
771 struct s5m_rtc_info *info = platform_get_drvdata(pdev); in s5m_rtc_remove() local
773 i2c_unregister_device(info->i2c); in s5m_rtc_remove()
781 struct s5m_rtc_info *info = dev_get_drvdata(dev); in s5m_rtc_resume() local
784 if (info->irq && device_may_wakeup(dev)) in s5m_rtc_resume()
785 ret = disable_irq_wake(info->irq); in s5m_rtc_resume()
792 struct s5m_rtc_info *info = dev_get_drvdata(dev); in s5m_rtc_suspend() local
795 if (info->irq && device_may_wakeup(dev)) in s5m_rtc_suspend()
796 ret = enable_irq_wake(info->irq); in s5m_rtc_suspend()