Lines Matching +full:trickle +full:- +full:resistor +full:- +full:ohms

1 // SPDX-License-Identifier: GPL-2.0
16 #include <linux/clk-provider.h>
260 const struct chip_desc *chip = max31335->chip; in max31335_volatile_reg()
263 if (reg >= chip->sec_reg && reg < chip->sec_reg + MAX31335_TIME_SIZE) in max31335_volatile_reg()
267 if (reg == chip->int_status_reg) in max31335_volatile_reg()
271 if (chip->temp_reg && (reg == chip->temp_reg || reg == chip->temp_reg + 1)) in max31335_volatile_reg()
290 ret = regmap_bulk_read(max31335->regmap, max31335->chip->sec_reg, date, in max31335_read_time()
295 tm->tm_sec = bcd2bin(date[0] & 0x7f); in max31335_read_time()
296 tm->tm_min = bcd2bin(date[1] & 0x7f); in max31335_read_time()
297 tm->tm_hour = bcd2bin(date[2] & 0x3f); in max31335_read_time()
298 tm->tm_wday = bcd2bin(date[3] & 0x7) - 1; in max31335_read_time()
299 tm->tm_mday = bcd2bin(date[4] & 0x3f); in max31335_read_time()
300 tm->tm_mon = bcd2bin(date[5] & 0x1f) - 1; in max31335_read_time()
301 tm->tm_year = bcd2bin(date[6]) + 100; in max31335_read_time()
304 tm->tm_year += 100; in max31335_read_time()
314 date[0] = bin2bcd(tm->tm_sec); in max31335_set_time()
315 date[1] = bin2bcd(tm->tm_min); in max31335_set_time()
316 date[2] = bin2bcd(tm->tm_hour); in max31335_set_time()
317 date[3] = bin2bcd(tm->tm_wday + 1); in max31335_set_time()
318 date[4] = bin2bcd(tm->tm_mday); in max31335_set_time()
319 date[5] = bin2bcd(tm->tm_mon + 1); in max31335_set_time()
320 date[6] = bin2bcd(tm->tm_year % 100); in max31335_set_time()
322 if (tm->tm_year >= 200) in max31335_set_time()
325 return regmap_bulk_write(max31335->regmap, max31335->chip->sec_reg, date, in max31335_set_time()
336 ret = regmap_bulk_read(max31335->regmap, max31335->chip->alarm1_sec_reg, regs, in max31335_read_alarm()
341 alrm->time.tm_sec = bcd2bin(regs[0] & 0x7f); in max31335_read_alarm()
342 alrm->time.tm_min = bcd2bin(regs[1] & 0x7f); in max31335_read_alarm()
343 alrm->time.tm_hour = bcd2bin(regs[2] & 0x3f); in max31335_read_alarm()
344 alrm->time.tm_mday = bcd2bin(regs[3] & 0x3f); in max31335_read_alarm()
345 alrm->time.tm_mon = bcd2bin(regs[4] & 0x1f) - 1; in max31335_read_alarm()
346 alrm->time.tm_year = bcd2bin(regs[5]) + 100; in max31335_read_alarm()
353 alrm->time.tm_year += 100; in max31335_read_alarm()
355 ret = regmap_read(max31335->regmap, max31335->chip->int_en_reg, &ctrl); in max31335_read_alarm()
359 ret = regmap_read(max31335->regmap, max31335->chip->int_status_reg, &status); in max31335_read_alarm()
363 alrm->enabled = FIELD_GET(MAX31335_INT_EN1_A1IE, ctrl); in max31335_read_alarm()
364 alrm->pending = FIELD_GET(MAX31335_STATUS1_A1F, status); in max31335_read_alarm()
376 regs[0] = bin2bcd(alrm->time.tm_sec); in max31335_set_alarm()
377 regs[1] = bin2bcd(alrm->time.tm_min); in max31335_set_alarm()
378 regs[2] = bin2bcd(alrm->time.tm_hour); in max31335_set_alarm()
379 regs[3] = bin2bcd(alrm->time.tm_mday); in max31335_set_alarm()
380 regs[4] = bin2bcd(alrm->time.tm_mon + 1); in max31335_set_alarm()
381 regs[5] = bin2bcd(alrm->time.tm_year % 100); in max31335_set_alarm()
383 ret = regmap_bulk_write(max31335->regmap, max31335->chip->alarm1_sec_reg, in max31335_set_alarm()
388 reg = FIELD_PREP(MAX31335_INT_EN1_A1IE, alrm->enabled); in max31335_set_alarm()
389 ret = regmap_update_bits(max31335->regmap, max31335->chip->int_en_reg, in max31335_set_alarm()
394 ret = regmap_update_bits(max31335->regmap, max31335->chip->int_status_reg, in max31335_set_alarm()
404 return regmap_update_bits(max31335->regmap, max31335->chip->int_en_reg, in max31335_alarm_irq_enable()
411 struct mutex *lock = &max31335->rtc->ops_lock; in max31335_handle_irq()
416 ret = regmap_read(max31335->regmap, max31335->chip->int_status_reg, &status); in max31335_handle_irq()
421 ret = regmap_update_bits(max31335->regmap, max31335->chip->int_status_reg, in max31335_handle_irq()
426 rtc_update_irq(max31335->rtc, 1, RTC_AF | RTC_IRQF); in max31335_handle_irq()
446 u32 ohms, chargeable; in max31335_trickle_charger_setup() local
450 if (device_property_read_u32(dev, "aux-voltage-chargeable", in max31335_trickle_charger_setup()
454 if (device_property_read_u32(dev, "trickle-resistor-ohms", &ohms)) in max31335_trickle_charger_setup()
457 if (device_property_read_string(dev, "adi,tc-diode", &diode)) in max31335_trickle_charger_setup()
465 return dev_err_probe(dev, -EINVAL, in max31335_trickle_charger_setup()
466 "Invalid tc-diode value: %s\n", diode); in max31335_trickle_charger_setup()
469 if (ohms == max31335_trickle_resistors[i]) in max31335_trickle_charger_setup()
477 return regmap_write(max31335->regmap, max31335->chip->trickle_reg, in max31335_trickle_charger_setup()
491 ret = regmap_read(max31335->regmap, max31335->chip->clkout_reg, &reg); in max31335_clkout_recalc_rate()
495 freq_mask = __roundup_pow_of_two(ARRAY_SIZE(max31335_clkout_freq)) - 1; in max31335_clkout_recalc_rate()
520 freq_mask = __roundup_pow_of_two(ARRAY_SIZE(max31335_clkout_freq)) - 1; in max31335_clkout_set_rate()
522 return regmap_update_bits(max31335->regmap, max31335->chip->clkout_reg, in max31335_clkout_set_rate()
530 return regmap_set_bits(max31335->regmap, max31335->chip->clkout_reg, in max31335_clkout_enable()
538 regmap_clear_bits(max31335->regmap, max31335->chip->clkout_reg, in max31335_clkout_disable()
548 ret = regmap_read(max31335->regmap, max31335->chip->clkout_reg, &reg); in max31335_clkout_is_enabled()
565 .name = "max31335-clkout",
573 unsigned int reg = max31335->chip->ram_reg + offset; in max31335_nvmem_reg_read()
575 return regmap_bulk_read(max31335->regmap, reg, val, bytes); in max31335_nvmem_reg_read()
582 unsigned int reg = max31335->chip->ram_reg + offset; in max31335_nvmem_reg_write()
584 return regmap_bulk_write(max31335->regmap, reg, val, bytes); in max31335_nvmem_reg_write()
604 return -EOPNOTSUPP; in max31335_read_temp()
606 ret = regmap_bulk_read(max31335->regmap, max31335->chip->temp_reg, in max31335_read_temp()
649 if (!device_property_present(dev, "#clock-cells")) in max31335_clkout_register()
650 return regmap_clear_bits(max31335->regmap, max31335->chip->clkout_reg, in max31335_clkout_register()
653 max31335->clkout.init = &max31335_clk_init; in max31335_clkout_register()
655 ret = devm_clk_hw_register(dev, &max31335->clkout); in max31335_clkout_register()
660 &max31335->clkout); in max31335_clkout_register()
664 max31335->clkout.clk = devm_clk_get_enabled(dev, NULL); in max31335_clkout_register()
665 if (IS_ERR(max31335->clkout.clk)) in max31335_clkout_register()
666 return dev_err_probe(dev, PTR_ERR(max31335->clkout.clk), in max31335_clkout_register()
681 max31335 = devm_kzalloc(&client->dev, sizeof(*max31335), GFP_KERNEL); in max31335_probe()
683 return -ENOMEM; in max31335_probe()
685 max31335->regmap = devm_regmap_init_i2c(client, &regmap_config); in max31335_probe()
686 if (IS_ERR(max31335->regmap)) in max31335_probe()
687 return PTR_ERR(max31335->regmap); in max31335_probe()
692 return -ENODEV; in max31335_probe()
693 max31335->chip = match; in max31335_probe()
694 max31335->rtc = devm_rtc_allocate_device(&client->dev); in max31335_probe()
695 if (IS_ERR(max31335->rtc)) in max31335_probe()
696 return PTR_ERR(max31335->rtc); in max31335_probe()
698 max31335->rtc->ops = &max31335_rtc_ops; in max31335_probe()
699 max31335->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; in max31335_probe()
700 max31335->rtc->range_max = RTC_TIMESTAMP_END_2199; in max31335_probe()
701 max31335->rtc->alarm_offset_max = 24 * 60 * 60; in max31335_probe()
703 ret = max31335_clkout_register(&client->dev); in max31335_probe()
707 if (client->irq > 0) { in max31335_probe()
708 ret = devm_request_threaded_irq(&client->dev, client->irq, in max31335_probe()
713 dev_warn(&client->dev, in max31335_probe()
715 client->irq = 0; in max31335_probe()
717 max31335->irq = client->irq; in max31335_probe()
721 if (!client->irq) in max31335_probe()
722 clear_bit(RTC_FEATURE_ALARM, max31335->rtc->features); in max31335_probe()
725 ret = devm_rtc_nvmem_register(max31335->rtc, &max31335_nvmem_cfg); in max31335_probe()
727 return dev_err_probe(&client->dev, ret, in max31335_probe()
731 if (max31335->chip->temp_reg) { in max31335_probe()
732 hwmon = devm_hwmon_device_register_with_info(&client->dev, client->name, max31335, in max31335_probe()
735 return dev_err_probe(&client->dev, PTR_ERR(hwmon), in max31335_probe()
740 ret = max31335_trickle_charger_setup(&client->dev, max31335); in max31335_probe()
744 return devm_rtc_register_device(max31335->rtc); in max31335_probe()
765 .name = "rtc-max31335",