• Home
  • Raw
  • Download

Lines Matching +full:max77693 +full:- +full:led

2  * max77693.c - mfd core driver for the MAX 77693
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
35 #include <linux/mfd/max77693.h>
36 #include <linux/mfd/max77693-common.h>
37 #include <linux/mfd/max77693-private.h>
41 #define I2C_ADDR_PMIC (0xCC >> 1) /* Charger, Flash LED */
46 { .name = "max77693-pmic", },
48 .name = "max77693-charger",
49 .of_compatible = "maxim,max77693-charger",
52 .name = "max77693-muic",
53 .of_compatible = "maxim,max77693-muic",
56 .name = "max77693-haptic",
57 .of_compatible = "maxim,max77693-haptic",
60 .name = "max77693-led",
61 .of_compatible = "maxim,max77693-led",
80 .name = "max77693-led",
96 .name = "max77693-topsys",
114 .name = "max77693-charger",
151 .name = "max77693-muic",
169 struct max77693_dev *max77693; in max77693_i2c_probe() local
173 max77693 = devm_kzalloc(&i2c->dev, in max77693_i2c_probe()
175 if (max77693 == NULL) in max77693_i2c_probe()
176 return -ENOMEM; in max77693_i2c_probe()
178 i2c_set_clientdata(i2c, max77693); in max77693_i2c_probe()
179 max77693->dev = &i2c->dev; in max77693_i2c_probe()
180 max77693->i2c = i2c; in max77693_i2c_probe()
181 max77693->irq = i2c->irq; in max77693_i2c_probe()
182 max77693->type = id->driver_data; in max77693_i2c_probe()
184 max77693->regmap = devm_regmap_init_i2c(i2c, &max77693_regmap_config); in max77693_i2c_probe()
185 if (IS_ERR(max77693->regmap)) { in max77693_i2c_probe()
186 ret = PTR_ERR(max77693->regmap); in max77693_i2c_probe()
187 dev_err(max77693->dev, "failed to allocate register map: %d\n", in max77693_i2c_probe()
192 ret = regmap_read(max77693->regmap, MAX77693_PMIC_REG_PMIC_ID2, in max77693_i2c_probe()
195 dev_err(max77693->dev, "device not found on this channel\n"); in max77693_i2c_probe()
198 dev_info(max77693->dev, "device ID: 0x%x\n", reg_data); in max77693_i2c_probe()
200 max77693->i2c_muic = i2c_new_dummy(i2c->adapter, I2C_ADDR_MUIC); in max77693_i2c_probe()
201 if (!max77693->i2c_muic) { in max77693_i2c_probe()
202 dev_err(max77693->dev, "Failed to allocate I2C device for MUIC\n"); in max77693_i2c_probe()
203 return -ENODEV; in max77693_i2c_probe()
205 i2c_set_clientdata(max77693->i2c_muic, max77693); in max77693_i2c_probe()
207 max77693->i2c_haptic = i2c_new_dummy(i2c->adapter, I2C_ADDR_HAPTIC); in max77693_i2c_probe()
208 if (!max77693->i2c_haptic) { in max77693_i2c_probe()
209 dev_err(max77693->dev, "Failed to allocate I2C device for Haptic\n"); in max77693_i2c_probe()
210 ret = -ENODEV; in max77693_i2c_probe()
213 i2c_set_clientdata(max77693->i2c_haptic, max77693); in max77693_i2c_probe()
215 max77693->regmap_haptic = devm_regmap_init_i2c(max77693->i2c_haptic, in max77693_i2c_probe()
217 if (IS_ERR(max77693->regmap_haptic)) { in max77693_i2c_probe()
218 ret = PTR_ERR(max77693->regmap_haptic); in max77693_i2c_probe()
219 dev_err(max77693->dev, in max77693_i2c_probe()
225 * Initialize register map for MUIC device because use regmap-muic in max77693_i2c_probe()
226 * instance of MUIC device when irq of max77693 is initialized in max77693_i2c_probe()
227 * before call max77693-muic probe() function. in max77693_i2c_probe()
229 max77693->regmap_muic = devm_regmap_init_i2c(max77693->i2c_muic, in max77693_i2c_probe()
231 if (IS_ERR(max77693->regmap_muic)) { in max77693_i2c_probe()
232 ret = PTR_ERR(max77693->regmap_muic); in max77693_i2c_probe()
233 dev_err(max77693->dev, in max77693_i2c_probe()
238 ret = regmap_add_irq_chip(max77693->regmap, max77693->irq, in max77693_i2c_probe()
242 &max77693->irq_data_led); in max77693_i2c_probe()
244 dev_err(max77693->dev, "failed to add irq chip: %d\n", ret); in max77693_i2c_probe()
248 ret = regmap_add_irq_chip(max77693->regmap, max77693->irq, in max77693_i2c_probe()
252 &max77693->irq_data_topsys); in max77693_i2c_probe()
254 dev_err(max77693->dev, "failed to add irq chip: %d\n", ret); in max77693_i2c_probe()
258 ret = regmap_add_irq_chip(max77693->regmap, max77693->irq, in max77693_i2c_probe()
262 &max77693->irq_data_chg); in max77693_i2c_probe()
264 dev_err(max77693->dev, "failed to add irq chip: %d\n", ret); in max77693_i2c_probe()
268 ret = regmap_add_irq_chip(max77693->regmap_muic, max77693->irq, in max77693_i2c_probe()
272 &max77693->irq_data_muic); in max77693_i2c_probe()
274 dev_err(max77693->dev, "failed to add irq chip: %d\n", ret); in max77693_i2c_probe()
279 ret = regmap_update_bits(max77693->regmap, in max77693_i2c_probe()
283 dev_err(max77693->dev, in max77693_i2c_probe()
289 pm_runtime_set_active(max77693->dev); in max77693_i2c_probe()
291 ret = mfd_add_devices(max77693->dev, -1, max77693_devs, in max77693_i2c_probe()
299 mfd_remove_devices(max77693->dev); in max77693_i2c_probe()
301 regmap_del_irq_chip(max77693->irq, max77693->irq_data_muic); in max77693_i2c_probe()
303 regmap_del_irq_chip(max77693->irq, max77693->irq_data_chg); in max77693_i2c_probe()
305 regmap_del_irq_chip(max77693->irq, max77693->irq_data_topsys); in max77693_i2c_probe()
307 regmap_del_irq_chip(max77693->irq, max77693->irq_data_led); in max77693_i2c_probe()
309 i2c_unregister_device(max77693->i2c_haptic); in max77693_i2c_probe()
311 i2c_unregister_device(max77693->i2c_muic); in max77693_i2c_probe()
317 struct max77693_dev *max77693 = i2c_get_clientdata(i2c); in max77693_i2c_remove() local
319 mfd_remove_devices(max77693->dev); in max77693_i2c_remove()
321 regmap_del_irq_chip(max77693->irq, max77693->irq_data_muic); in max77693_i2c_remove()
322 regmap_del_irq_chip(max77693->irq, max77693->irq_data_chg); in max77693_i2c_remove()
323 regmap_del_irq_chip(max77693->irq, max77693->irq_data_topsys); in max77693_i2c_remove()
324 regmap_del_irq_chip(max77693->irq, max77693->irq_data_led); in max77693_i2c_remove()
326 i2c_unregister_device(max77693->i2c_muic); in max77693_i2c_remove()
327 i2c_unregister_device(max77693->i2c_haptic); in max77693_i2c_remove()
333 { "max77693", TYPE_MAX77693 },
341 struct max77693_dev *max77693 = i2c_get_clientdata(i2c); in max77693_suspend() local
344 enable_irq_wake(max77693->irq); in max77693_suspend()
345 disable_irq(max77693->irq); in max77693_suspend()
354 struct max77693_dev *max77693 = i2c_get_clientdata(i2c); in max77693_resume() local
357 disable_irq_wake(max77693->irq); in max77693_resume()
358 enable_irq(max77693->irq); in max77693_resume()
371 { .compatible = "maxim,max77693" },
379 .name = "max77693",
390 MODULE_DESCRIPTION("MAXIM 77693 multi-function core driver");