Lines Matching +full:sleep +full:- +full:keep +full:- +full:hsclk
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * tps65910.c -- TI TPS6591x chip family multi-function driver
34 .name = "tps65910-gpio",
37 .name = "tps65910-pmic",
40 .name = "tps65910-rtc",
45 .name = "tps65910-power",
229 dev_warn(tps65910->dev, "No interrupt support, no core IRQ\n"); in tps65910_irq_init()
230 return -EINVAL; in tps65910_irq_init()
234 dev_warn(tps65910->dev, "No interrupt support, no pdata\n"); in tps65910_irq_init()
235 return -EINVAL; in tps65910_irq_init()
247 tps65910->chip_irq = irq; in tps65910_irq_init()
248 ret = devm_regmap_add_irq_chip(tps65910->dev, tps65910->regmap, in tps65910_irq_init()
249 tps65910->chip_irq, in tps65910_irq_init()
250 IRQF_ONESHOT, pdata->irq_base, in tps65910_irq_init()
251 tps6591x_irqs_chip, &tps65910->irq_data); in tps65910_irq_init()
253 dev_warn(tps65910->dev, "Failed to add irq_chip %d\n", ret); in tps65910_irq_init()
254 tps65910->chip_irq = 0; in tps65910_irq_init()
269 /* Check for non-existing register */ in is_volatile_reg()
283 .max_register = TPS65910_MAX_REGISTER - 1,
292 if (!pmic_pdata->en_ck32k_xtal) in tps65910_ck32k_init()
295 ret = regmap_clear_bits(tps65910->regmap, TPS65910_DEVCTRL, in tps65910_ck32k_init()
298 dev_err(tps65910->dev, "clear ck32k_ctrl failed: %d\n", ret); in tps65910_ck32k_init()
311 if (!pmic_pdata->en_dev_slp) in tps65910_sleepinit()
314 dev = tps65910->dev; in tps65910_sleepinit()
316 /* enabling SLEEP device state */ in tps65910_sleepinit()
317 ret = regmap_set_bits(tps65910->regmap, TPS65910_DEVCTRL, in tps65910_sleepinit()
324 if (pmic_pdata->slp_keepon.therm_keepon) { in tps65910_sleepinit()
325 ret = regmap_set_bits(tps65910->regmap, in tps65910_sleepinit()
334 if (pmic_pdata->slp_keepon.clkout32k_keepon) { in tps65910_sleepinit()
335 ret = regmap_set_bits(tps65910->regmap, in tps65910_sleepinit()
344 if (pmic_pdata->slp_keepon.i2chs_keepon) { in tps65910_sleepinit()
345 ret = regmap_set_bits(tps65910->regmap, in tps65910_sleepinit()
357 regmap_clear_bits(tps65910->regmap, TPS65910_DEVCTRL, in tps65910_sleepinit()
374 struct device_node *np = client->dev.of_node; in tps65910_parse_dt()
379 *chip_id = (unsigned long)device_get_match_data(&client->dev); in tps65910_parse_dt()
381 board_info = devm_kzalloc(&client->dev, sizeof(*board_info), in tps65910_parse_dt()
386 ret = of_property_read_u32(np, "ti,vmbch-threshold", &prop); in tps65910_parse_dt()
388 board_info->vmbch_threshold = prop; in tps65910_parse_dt()
390 ret = of_property_read_u32(np, "ti,vmbch2-threshold", &prop); in tps65910_parse_dt()
392 board_info->vmbch2_threshold = prop; in tps65910_parse_dt()
394 prop = of_property_read_bool(np, "ti,en-ck32k-xtal"); in tps65910_parse_dt()
395 board_info->en_ck32k_xtal = prop; in tps65910_parse_dt()
397 prop = of_property_read_bool(np, "ti,sleep-enable"); in tps65910_parse_dt()
398 board_info->en_dev_slp = prop; in tps65910_parse_dt()
400 prop = of_property_read_bool(np, "ti,sleep-keep-therm"); in tps65910_parse_dt()
401 board_info->slp_keepon.therm_keepon = prop; in tps65910_parse_dt()
403 prop = of_property_read_bool(np, "ti,sleep-keep-ck32k"); in tps65910_parse_dt()
404 board_info->slp_keepon.clkout32k_keepon = prop; in tps65910_parse_dt()
406 prop = of_property_read_bool(np, "ti,sleep-keep-hsclk"); in tps65910_parse_dt()
407 board_info->slp_keepon.i2chs_keepon = prop; in tps65910_parse_dt()
409 board_info->irq = client->irq; in tps65910_parse_dt()
410 board_info->irq_base = -1; in tps65910_parse_dt()
411 board_info->pm_off = of_property_read_bool(np, in tps65910_parse_dt()
412 "ti,system-power-controller"); in tps65910_parse_dt()
430 tps65910 = dev_get_drvdata(&tps65910_i2c_client->dev); in tps65910_power_off()
432 regmap_update_bits(tps65910->regmap, TPS65910_DEVCTRL, in tps65910_power_off()
444 unsigned long chip_id = id->driver_data; in tps65910_i2c_probe()
447 pmic_plat_data = dev_get_platdata(&i2c->dev); in tps65910_i2c_probe()
449 if (!pmic_plat_data && i2c->dev.of_node) { in tps65910_i2c_probe()
455 return -EINVAL; in tps65910_i2c_probe()
457 init_data = devm_kzalloc(&i2c->dev, sizeof(*init_data), GFP_KERNEL); in tps65910_i2c_probe()
459 return -ENOMEM; in tps65910_i2c_probe()
461 tps65910 = devm_kzalloc(&i2c->dev, sizeof(*tps65910), GFP_KERNEL); in tps65910_i2c_probe()
463 return -ENOMEM; in tps65910_i2c_probe()
465 tps65910->of_plat_data = of_pmic_plat_data; in tps65910_i2c_probe()
467 tps65910->dev = &i2c->dev; in tps65910_i2c_probe()
468 tps65910->i2c_client = i2c; in tps65910_i2c_probe()
469 tps65910->id = chip_id; in tps65910_i2c_probe()
476 tps65910->regmap = devm_regmap_init_i2c(i2c, &tps65910_regmap_config); in tps65910_i2c_probe()
477 if (IS_ERR(tps65910->regmap)) { in tps65910_i2c_probe()
478 ret = PTR_ERR(tps65910->regmap); in tps65910_i2c_probe()
479 dev_err(&i2c->dev, "regmap initialization failed: %d\n", ret); in tps65910_i2c_probe()
483 init_data->irq = pmic_plat_data->irq; in tps65910_i2c_probe()
484 init_data->irq_base = pmic_plat_data->irq_base; in tps65910_i2c_probe()
486 tps65910_irq_init(tps65910, init_data->irq, init_data); in tps65910_i2c_probe()
490 if (pmic_plat_data->pm_off && !pm_power_off) { in tps65910_i2c_probe()
494 * power-off mode on TPS65911, it's a NO-OP on TPS65910. in tps65910_i2c_probe()
496 ret = regmap_set_bits(tps65910->regmap, TPS65910_DEVCTRL, in tps65910_i2c_probe()
499 dev_err(&i2c->dev, "failed to set power-off mode: %d\n", in tps65910_i2c_probe()
508 ret = devm_mfd_add_devices(tps65910->dev, -1, in tps65910_i2c_probe()
511 regmap_irq_get_domain(tps65910->irq_data)); in tps65910_i2c_probe()
513 dev_err(&i2c->dev, "mfd_add_devices failed: %d\n", ret); in tps65910_i2c_probe()