Lines Matching refs:tps6586x

120 struct tps6586x {  struct
135 static inline struct tps6586x *dev_to_tps6586x(struct device *dev) in dev_to_tps6586x() argument
142 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_write() local
144 return regmap_write(tps6586x->regmap, reg, val); in tps6586x_write()
150 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_writes() local
152 return regmap_bulk_write(tps6586x->regmap, reg, val, len); in tps6586x_writes()
158 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_read() local
162 ret = regmap_read(tps6586x->regmap, reg, &rval); in tps6586x_read()
171 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_reads() local
173 return regmap_bulk_read(tps6586x->regmap, reg, val, len); in tps6586x_reads()
179 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_set_bits() local
181 return regmap_update_bits(tps6586x->regmap, reg, bit_mask, bit_mask); in tps6586x_set_bits()
187 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_clr_bits() local
189 return regmap_update_bits(tps6586x->regmap, reg, bit_mask, 0); in tps6586x_clr_bits()
195 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_update() local
197 return regmap_update_bits(tps6586x->regmap, reg, mask, val); in tps6586x_update()
203 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_irq_get_virq() local
205 return irq_create_mapping(tps6586x->irq_domain, irq); in tps6586x_irq_get_virq()
211 struct tps6586x *tps6586x = dev_get_drvdata(dev); in tps6586x_get_version() local
213 return tps6586x->version; in tps6586x_get_version()
223 static int tps6586x_remove_subdevs(struct tps6586x *tps6586x) in tps6586x_remove_subdevs() argument
225 return device_for_each_child(tps6586x->dev, NULL, __remove_subdev); in tps6586x_remove_subdevs()
230 struct tps6586x *tps6586x = irq_data_get_irq_chip_data(data); in tps6586x_irq_lock() local
232 mutex_lock(&tps6586x->irq_lock); in tps6586x_irq_lock()
237 struct tps6586x *tps6586x = irq_data_get_irq_chip_data(irq_data); in tps6586x_irq_enable() local
241 tps6586x->mask_reg[data->mask_reg] &= ~data->mask_mask; in tps6586x_irq_enable()
242 tps6586x->irq_en |= (1 << __irq); in tps6586x_irq_enable()
247 struct tps6586x *tps6586x = irq_data_get_irq_chip_data(irq_data); in tps6586x_irq_disable() local
252 tps6586x->mask_reg[data->mask_reg] |= data->mask_mask; in tps6586x_irq_disable()
253 tps6586x->irq_en &= ~(1 << __irq); in tps6586x_irq_disable()
258 struct tps6586x *tps6586x = irq_data_get_irq_chip_data(data); in tps6586x_irq_sync_unlock() local
261 for (i = 0; i < ARRAY_SIZE(tps6586x->mask_reg); i++) { in tps6586x_irq_sync_unlock()
263 ret = tps6586x_write(tps6586x->dev, in tps6586x_irq_sync_unlock()
265 tps6586x->mask_reg[i]); in tps6586x_irq_sync_unlock()
269 mutex_unlock(&tps6586x->irq_lock); in tps6586x_irq_sync_unlock()
275 struct tps6586x *tps6586x = irq_data_get_irq_chip_data(irq_data); in tps6586x_irq_set_wake() local
276 return irq_set_irq_wake(tps6586x->irq, on); in tps6586x_irq_set_wake()
294 struct tps6586x *tps6586x = h->host_data; in tps6586x_irq_map() local
296 irq_set_chip_data(virq, tps6586x); in tps6586x_irq_map()
311 struct tps6586x *tps6586x = data; in tps6586x_irq() local
316 ret = tps6586x_reads(tps6586x->dev, TPS6586X_INT_ACK1, in tps6586x_irq()
320 dev_err(tps6586x->dev, "failed to read interrupt status\n"); in tps6586x_irq()
329 if (tps6586x->irq_en & (1 << i)) in tps6586x_irq()
331 irq_find_mapping(tps6586x->irq_domain, i)); in tps6586x_irq()
339 static int tps6586x_irq_init(struct tps6586x *tps6586x, int irq, in tps6586x_irq_init() argument
347 tps6586x->irq = irq; in tps6586x_irq_init()
349 mutex_init(&tps6586x->irq_lock); in tps6586x_irq_init()
351 tps6586x->mask_reg[i] = 0xff; in tps6586x_irq_init()
352 tps6586x_write(tps6586x->dev, TPS6586X_INT_MASK1 + i, 0xff); in tps6586x_irq_init()
355 tps6586x_reads(tps6586x->dev, TPS6586X_INT_ACK1, sizeof(tmp), tmp); in tps6586x_irq_init()
360 dev_err(tps6586x->dev, in tps6586x_irq_init()
368 tps6586x->irq_domain = irq_domain_add_simple(tps6586x->dev->of_node, in tps6586x_irq_init()
370 tps6586x); in tps6586x_irq_init()
371 if (!tps6586x->irq_domain) { in tps6586x_irq_init()
372 dev_err(tps6586x->dev, "Failed to create IRQ domain\n"); in tps6586x_irq_init()
376 "tps6586x", tps6586x); in tps6586x_irq_init()
379 device_init_wakeup(tps6586x->dev, 1); in tps6586x_irq_init()
384 static int tps6586x_add_subdevs(struct tps6586x *tps6586x, in tps6586x_add_subdevs() argument
400 pdev->dev.parent = tps6586x->dev; in tps6586x_add_subdevs()
413 tps6586x_remove_subdevs(tps6586x); in tps6586x_add_subdevs()
506 struct tps6586x *tps6586x; in tps6586x_i2c_probe() local
524 tps6586x = devm_kzalloc(&client->dev, sizeof(*tps6586x), GFP_KERNEL); in tps6586x_i2c_probe()
525 if (!tps6586x) in tps6586x_i2c_probe()
528 tps6586x->version = version; in tps6586x_i2c_probe()
529 tps6586x_print_version(client, tps6586x->version); in tps6586x_i2c_probe()
531 tps6586x->client = client; in tps6586x_i2c_probe()
532 tps6586x->dev = &client->dev; in tps6586x_i2c_probe()
533 i2c_set_clientdata(client, tps6586x); in tps6586x_i2c_probe()
535 tps6586x->regmap = devm_regmap_init_i2c(client, in tps6586x_i2c_probe()
537 if (IS_ERR(tps6586x->regmap)) { in tps6586x_i2c_probe()
538 ret = PTR_ERR(tps6586x->regmap); in tps6586x_i2c_probe()
545 ret = tps6586x_irq_init(tps6586x, client->irq, in tps6586x_i2c_probe()
553 ret = mfd_add_devices(tps6586x->dev, -1, in tps6586x_i2c_probe()
555 NULL, 0, tps6586x->irq_domain); in tps6586x_i2c_probe()
561 ret = tps6586x_add_subdevs(tps6586x, pdata); in tps6586x_i2c_probe()
575 mfd_remove_devices(tps6586x->dev); in tps6586x_i2c_probe()
578 free_irq(client->irq, tps6586x); in tps6586x_i2c_probe()
584 struct tps6586x *tps6586x = i2c_get_clientdata(client); in tps6586x_i2c_remove() local
586 tps6586x_remove_subdevs(tps6586x); in tps6586x_i2c_remove()
587 mfd_remove_devices(tps6586x->dev); in tps6586x_i2c_remove()
589 free_irq(client->irq, tps6586x); in tps6586x_i2c_remove()
595 struct tps6586x *tps6586x = dev_get_drvdata(dev); in tps6586x_i2c_suspend() local
597 if (tps6586x->client->irq) in tps6586x_i2c_suspend()
598 disable_irq(tps6586x->client->irq); in tps6586x_i2c_suspend()
605 struct tps6586x *tps6586x = dev_get_drvdata(dev); in tps6586x_i2c_resume() local
607 if (tps6586x->client->irq) in tps6586x_i2c_resume()
608 enable_irq(tps6586x->client->irq); in tps6586x_i2c_resume()