Lines Matching full:max8997
2 * max8997.c - mfd core driver for the Maxim 8966 and 8997
34 #include <linux/mfd/max8997.h>
35 #include <linux/mfd/max8997-private.h>
44 { .name = "max8997-pmic", },
45 { .name = "max8997-rtc", },
46 { .name = "max8997-battery", },
47 { .name = "max8997-haptic", },
48 { .name = "max8997-muic", },
49 { .name = "max8997-led", .id = 1 },
50 { .name = "max8997-led", .id = 2 },
55 { .compatible = "maxim,max8997-pmic", .data = (void *)TYPE_MAX8997 },
62 struct max8997_dev *max8997 = i2c_get_clientdata(i2c); in max8997_read_reg() local
65 mutex_lock(&max8997->iolock); in max8997_read_reg()
67 mutex_unlock(&max8997->iolock); in max8997_read_reg()
79 struct max8997_dev *max8997 = i2c_get_clientdata(i2c); in max8997_bulk_read() local
82 mutex_lock(&max8997->iolock); in max8997_bulk_read()
84 mutex_unlock(&max8997->iolock); in max8997_bulk_read()
94 struct max8997_dev *max8997 = i2c_get_clientdata(i2c); in max8997_write_reg() local
97 mutex_lock(&max8997->iolock); in max8997_write_reg()
99 mutex_unlock(&max8997->iolock); in max8997_write_reg()
106 struct max8997_dev *max8997 = i2c_get_clientdata(i2c); in max8997_bulk_write() local
109 mutex_lock(&max8997->iolock); in max8997_bulk_write()
111 mutex_unlock(&max8997->iolock); in max8997_bulk_write()
121 struct max8997_dev *max8997 = i2c_get_clientdata(i2c); in max8997_update_reg() local
124 mutex_lock(&max8997->iolock); in max8997_update_reg()
131 mutex_unlock(&max8997->iolock); in max8997_update_reg()
137 * Only the common platform data elements for max8997 are parsed here from the
138 * device tree. Other sub-modules of max8997 such as pmic, rtc and others have
141 * The max8997 platform data structure is instantiated here and the drivers for
173 struct max8997_dev *max8997; in max8997_i2c_probe() local
177 max8997 = devm_kzalloc(&i2c->dev, sizeof(struct max8997_dev), in max8997_i2c_probe()
179 if (max8997 == NULL) in max8997_i2c_probe()
182 i2c_set_clientdata(i2c, max8997); in max8997_i2c_probe()
183 max8997->dev = &i2c->dev; in max8997_i2c_probe()
184 max8997->i2c = i2c; in max8997_i2c_probe()
185 max8997->type = max8997_i2c_get_driver_data(i2c, id); in max8997_i2c_probe()
186 max8997->irq = i2c->irq; in max8997_i2c_probe()
188 if (IS_ENABLED(CONFIG_OF) && max8997->dev->of_node) { in max8997_i2c_probe()
189 pdata = max8997_i2c_parse_dt_pdata(max8997->dev); in max8997_i2c_probe()
197 max8997->pdata = pdata; in max8997_i2c_probe()
198 max8997->ono = pdata->ono; in max8997_i2c_probe()
200 mutex_init(&max8997->iolock); in max8997_i2c_probe()
202 max8997->rtc = i2c_new_dummy(i2c->adapter, I2C_ADDR_RTC); in max8997_i2c_probe()
203 if (!max8997->rtc) { in max8997_i2c_probe()
204 dev_err(max8997->dev, "Failed to allocate I2C device for RTC\n"); in max8997_i2c_probe()
207 i2c_set_clientdata(max8997->rtc, max8997); in max8997_i2c_probe()
209 max8997->haptic = i2c_new_dummy(i2c->adapter, I2C_ADDR_HAPTIC); in max8997_i2c_probe()
210 if (!max8997->haptic) { in max8997_i2c_probe()
211 dev_err(max8997->dev, "Failed to allocate I2C device for Haptic\n"); in max8997_i2c_probe()
215 i2c_set_clientdata(max8997->haptic, max8997); in max8997_i2c_probe()
217 max8997->muic = i2c_new_dummy(i2c->adapter, I2C_ADDR_MUIC); in max8997_i2c_probe()
218 if (!max8997->muic) { in max8997_i2c_probe()
219 dev_err(max8997->dev, "Failed to allocate I2C device for MUIC\n"); in max8997_i2c_probe()
223 i2c_set_clientdata(max8997->muic, max8997); in max8997_i2c_probe()
225 pm_runtime_set_active(max8997->dev); in max8997_i2c_probe()
227 max8997_irq_init(max8997); in max8997_i2c_probe()
229 ret = mfd_add_devices(max8997->dev, -1, max8997_devs, in max8997_i2c_probe()
233 dev_err(max8997->dev, "failed to add MFD devices %d\n", ret); in max8997_i2c_probe()
242 /* MAX8997 has a power button input. */ in max8997_i2c_probe()
243 device_init_wakeup(max8997->dev, true); in max8997_i2c_probe()
248 mfd_remove_devices(max8997->dev); in max8997_i2c_probe()
249 i2c_unregister_device(max8997->muic); in max8997_i2c_probe()
251 i2c_unregister_device(max8997->haptic); in max8997_i2c_probe()
253 i2c_unregister_device(max8997->rtc); in max8997_i2c_probe()
258 { "max8997", TYPE_MAX8997 },
419 struct max8997_dev *max8997 = i2c_get_clientdata(i2c); in max8997_freeze() local
424 &max8997->reg_dump[i]); in max8997_freeze()
428 &max8997->reg_dump[i + MAX8997_REG_PMIC_END]); in max8997_freeze()
432 &max8997->reg_dump[i + MAX8997_REG_PMIC_END + in max8997_freeze()
441 struct max8997_dev *max8997 = i2c_get_clientdata(i2c); in max8997_restore() local
446 max8997->reg_dump[i]); in max8997_restore()
450 max8997->reg_dump[i + MAX8997_REG_PMIC_END]); in max8997_restore()
454 max8997->reg_dump[i + MAX8997_REG_PMIC_END + in max8997_restore()
463 struct max8997_dev *max8997 = i2c_get_clientdata(i2c); in max8997_suspend() local
466 irq_set_irq_wake(max8997->irq, 1); in max8997_suspend()
473 struct max8997_dev *max8997 = i2c_get_clientdata(i2c); in max8997_resume() local
476 irq_set_irq_wake(max8997->irq, 0); in max8997_resume()
477 return max8997_irq_resume(max8997); in max8997_resume()
489 .name = "max8997",