• Home
  • Raw
  • Download

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.
23 { .name = "max8907-regulator", },
24 { .name = "max8907-rtc", },
27 static bool max8907_gen_is_volatile_reg(struct device *dev, unsigned int reg) in max8907_gen_is_volatile_reg()
42 static bool max8907_gen_is_precious_reg(struct device *dev, unsigned int reg) in max8907_gen_is_precious_reg()
55 static bool max8907_gen_is_writeable_reg(struct device *dev, unsigned int reg) in max8907_gen_is_writeable_reg()
70 static bool max8907_rtc_is_volatile_reg(struct device *dev, unsigned int reg) in max8907_rtc_is_volatile_reg()
84 static bool max8907_rtc_is_precious_reg(struct device *dev, unsigned int reg) in max8907_rtc_is_precious_reg()
94 static bool max8907_rtc_is_writeable_reg(struct device *dev, unsigned int reg) in max8907_rtc_is_writeable_reg()
130 .name = "max8907 chg",
134 .irq_reg_stride = MAX8907_REG_CHG_IRQ2 - MAX8907_REG_CHG_IRQ1,
157 .irq_reg_stride = MAX8907_REG_ON_OFF_IRQ2 - MAX8907_REG_ON_OFF_IRQ1,
180 regmap_update_bits(max8907_pm_off->regmap_gen, MAX8907_REG_RESET_CNFG, in max8907_power_off()
184 static int max8907_i2c_probe(struct i2c_client *i2c, in max8907_i2c_probe()
188 int ret; in max8907_i2c_probe()
189 struct max8907_platform_data *pdata = dev_get_platdata(&i2c->dev); in max8907_i2c_probe()
193 pm_off = pdata->pm_off; in max8907_i2c_probe()
194 else if (i2c->dev.of_node) in max8907_i2c_probe()
195 pm_off = of_property_read_bool(i2c->dev.of_node, in max8907_i2c_probe()
196 "maxim,system-power-controller"); in max8907_i2c_probe()
198 max8907 = devm_kzalloc(&i2c->dev, sizeof(struct max8907), GFP_KERNEL); in max8907_i2c_probe()
200 ret = -ENOMEM; in max8907_i2c_probe()
204 max8907->dev = &i2c->dev; in max8907_i2c_probe()
205 dev_set_drvdata(max8907->dev, max8907); in max8907_i2c_probe()
207 max8907->i2c_gen = i2c; in max8907_i2c_probe()
209 max8907->regmap_gen = devm_regmap_init_i2c(i2c, in max8907_i2c_probe()
211 if (IS_ERR(max8907->regmap_gen)) { in max8907_i2c_probe()
212 ret = PTR_ERR(max8907->regmap_gen); in max8907_i2c_probe()
213 dev_err(&i2c->dev, "gen regmap init failed: %d\n", ret); in max8907_i2c_probe()
217 max8907->i2c_rtc = i2c_new_dummy_device(i2c->adapter, MAX8907_RTC_I2C_ADDR); in max8907_i2c_probe()
218 if (IS_ERR(max8907->i2c_rtc)) { in max8907_i2c_probe()
219 ret = PTR_ERR(max8907->i2c_rtc); in max8907_i2c_probe()
222 i2c_set_clientdata(max8907->i2c_rtc, max8907); in max8907_i2c_probe()
223 max8907->regmap_rtc = devm_regmap_init_i2c(max8907->i2c_rtc, in max8907_i2c_probe()
225 if (IS_ERR(max8907->regmap_rtc)) { in max8907_i2c_probe()
226 ret = PTR_ERR(max8907->regmap_rtc); in max8907_i2c_probe()
227 dev_err(&i2c->dev, "rtc regmap init failed: %d\n", ret); in max8907_i2c_probe()
231 irq_set_status_flags(max8907->i2c_gen->irq, IRQ_NOAUTOEN); in max8907_i2c_probe()
233 ret = regmap_add_irq_chip(max8907->regmap_gen, max8907->i2c_gen->irq, in max8907_i2c_probe()
234 IRQF_ONESHOT | IRQF_SHARED, -1, in max8907_i2c_probe()
236 &max8907->irqc_chg); in max8907_i2c_probe()
238 dev_err(&i2c->dev, "failed to add chg irq chip: %d\n", ret); in max8907_i2c_probe()
241 ret = regmap_add_irq_chip(max8907->regmap_gen, max8907->i2c_gen->irq, in max8907_i2c_probe()
242 IRQF_ONESHOT | IRQF_SHARED, -1, in max8907_i2c_probe()
244 &max8907->irqc_on_off); in max8907_i2c_probe()
246 dev_err(&i2c->dev, "failed to add on off irq chip: %d\n", ret); in max8907_i2c_probe()
249 ret = regmap_add_irq_chip(max8907->regmap_rtc, max8907->i2c_gen->irq, in max8907_i2c_probe()
250 IRQF_ONESHOT | IRQF_SHARED, -1, in max8907_i2c_probe()
252 &max8907->irqc_rtc); in max8907_i2c_probe()
254 dev_err(&i2c->dev, "failed to add rtc irq chip: %d\n", ret); in max8907_i2c_probe()
258 enable_irq(max8907->i2c_gen->irq); in max8907_i2c_probe()
260 ret = mfd_add_devices(max8907->dev, -1, max8907_cells, in max8907_i2c_probe()
263 dev_err(&i2c->dev, "failed to add MFD devices %d\n", ret); in max8907_i2c_probe()
275 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_rtc); in max8907_i2c_probe()
277 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_on_off); in max8907_i2c_probe()
279 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_chg); in max8907_i2c_probe()
282 i2c_unregister_device(max8907->i2c_rtc); in max8907_i2c_probe()
289 static int max8907_i2c_remove(struct i2c_client *i2c) in max8907_i2c_remove()
293 mfd_remove_devices(max8907->dev); in max8907_i2c_remove()
295 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_rtc); in max8907_i2c_remove()
296 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_on_off); in max8907_i2c_remove()
297 regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_chg); in max8907_i2c_remove()
299 i2c_unregister_device(max8907->i2c_rtc); in max8907_i2c_remove()
328 static int __init max8907_i2c_init(void) in max8907_i2c_init()
330 int ret = -ENODEV; in max8907_i2c_init()
346 MODULE_DESCRIPTION("MAX8907 multi-function core driver");
347 MODULE_AUTHOR("Gyungoh Yoo <jack.yoo@maxim-ic.com>");