Lines Matching +full:chg +full:- +full:int
1 // SPDX-License-Identifier: GPL-2.0-only
3 * max8907.c - mfd driver for MAX8907
5 * Copyright (C) 2010 Gyungoh Yoo <jack.yoo@maxim-ic.com>
6 * Copyright (C) 2010-2012, NVIDIA CORPORATION. All rights reserved.
22 { .name = "max8907-regulator", },
23 { .name = "max8907-rtc", },
26 static bool max8907_gen_is_volatile_reg(struct device *dev, unsigned int reg) in max8907_gen_is_volatile_reg()
41 static bool max8907_gen_is_precious_reg(struct device *dev, unsigned int reg) in max8907_gen_is_precious_reg()
54 static bool max8907_gen_is_writeable_reg(struct device *dev, unsigned int reg) in max8907_gen_is_writeable_reg()
69 static bool max8907_rtc_is_volatile_reg(struct device *dev, unsigned int reg) in max8907_rtc_is_volatile_reg()
83 static bool max8907_rtc_is_precious_reg(struct device *dev, unsigned int reg) in max8907_rtc_is_precious_reg()
93 static bool max8907_rtc_is_writeable_reg(struct device *dev, unsigned int reg) in max8907_rtc_is_writeable_reg()
129 .name = "max8907 chg",
133 .irq_reg_stride = MAX8907_REG_CHG_IRQ2 - MAX8907_REG_CHG_IRQ1,
156 .irq_reg_stride = MAX8907_REG_ON_OFF_IRQ2 - MAX8907_REG_ON_OFF_IRQ1,
179 regmap_update_bits(max8907_pm_off->regmap_gen, MAX8907_REG_RESET_CNFG, in max8907_power_off()
183 static int max8907_i2c_probe(struct i2c_client *i2c) in max8907_i2c_probe()
186 int ret; in max8907_i2c_probe()
187 struct max8907_platform_data *pdata = dev_get_platdata(&i2c->dev); in max8907_i2c_probe()
191 pm_off = pdata->pm_off; in max8907_i2c_probe()
192 else if (i2c->dev.of_node) in max8907_i2c_probe()
193 pm_off = of_property_read_bool(i2c->dev.of_node, in max8907_i2c_probe()
194 "maxim,system-power-controller"); in max8907_i2c_probe()
196 max8907 = devm_kzalloc(&i2c->dev, sizeof(struct max8907), GFP_KERNEL); in max8907_i2c_probe()
198 ret = -ENOMEM; in max8907_i2c_probe()
202 max8907->dev = &i2c->dev; in max8907_i2c_probe()
203 max8907->i2c_gen = i2c; in max8907_i2c_probe()
205 max8907->regmap_gen = devm_regmap_init_i2c(i2c, in max8907_i2c_probe()
207 if (IS_ERR(max8907->regmap_gen)) { in max8907_i2c_probe()
208 ret = PTR_ERR(max8907->regmap_gen); in max8907_i2c_probe()
209 dev_err(&i2c->dev, "gen regmap init failed: %d\n", ret); in max8907_i2c_probe()
213 max8907->i2c_rtc = i2c_new_dummy_device(i2c->adapter, MAX8907_RTC_I2C_ADDR); in max8907_i2c_probe()
214 if (IS_ERR(max8907->i2c_rtc)) { in max8907_i2c_probe()
215 ret = PTR_ERR(max8907->i2c_rtc); in max8907_i2c_probe()
218 i2c_set_clientdata(max8907->i2c_rtc, max8907); in max8907_i2c_probe()
219 max8907->regmap_rtc = devm_regmap_init_i2c(max8907->i2c_rtc, in max8907_i2c_probe()
221 if (IS_ERR(max8907->regmap_rtc)) { in max8907_i2c_probe()
222 ret = PTR_ERR(max8907->regmap_rtc); in max8907_i2c_probe()
223 dev_err(&i2c->dev, "rtc regmap init failed: %d\n", ret); in max8907_i2c_probe()
227 ret = regmap_add_irq_chip(max8907->regmap_gen, max8907->i2c_gen->irq, in max8907_i2c_probe()
229 -1, &max8907_chg_irq_chip, in max8907_i2c_probe()
230 &max8907->irqc_chg); in max8907_i2c_probe()
232 dev_err(&i2c->dev, "failed to add chg irq chip: %d\n", ret); in max8907_i2c_probe()
235 ret = regmap_add_irq_chip(max8907->regmap_gen, max8907->i2c_gen->irq, in max8907_i2c_probe()
236 IRQF_ONESHOT | IRQF_SHARED, -1, in max8907_i2c_probe()
238 &max8907->irqc_on_off); in max8907_i2c_probe()
240 dev_err(&i2c->dev, "failed to add on off irq chip: %d\n", ret); in max8907_i2c_probe()
243 ret = regmap_add_irq_chip(max8907->regmap_rtc, max8907->i2c_gen->irq, in max8907_i2c_probe()
244 IRQF_ONESHOT | IRQF_SHARED, -1, in max8907_i2c_probe()
246 &max8907->irqc_rtc); in max8907_i2c_probe()
248 dev_err(&i2c->dev, "failed to add rtc irq chip: %d\n", ret); in max8907_i2c_probe()
252 ret = mfd_add_devices(max8907->dev, -1, max8907_cells, in max8907_i2c_probe()
255 dev_err(&i2c->dev, "failed to add MFD devices %d\n", ret); in max8907_i2c_probe()
267 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_rtc); in max8907_i2c_probe()
269 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_on_off); in max8907_i2c_probe()
271 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_chg); in max8907_i2c_probe()
274 i2c_unregister_device(max8907->i2c_rtc); in max8907_i2c_probe()
285 mfd_remove_devices(max8907->dev); in max8907_i2c_remove()
287 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_rtc); in max8907_i2c_remove()
288 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_on_off); in max8907_i2c_remove()
289 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_chg); in max8907_i2c_remove()
291 i2c_unregister_device(max8907->i2c_rtc); in max8907_i2c_remove()
318 static int __init max8907_i2c_init(void) in max8907_i2c_init()
320 int ret = -ENODEV; in max8907_i2c_init()
336 MODULE_DESCRIPTION("MAX8907 multi-function core driver");
337 MODULE_AUTHOR("Gyungoh Yoo <jack.yoo@maxim-ic.com>");