Lines Matching refs:tps6586x
123 struct tps6586x { struct
138 static inline struct tps6586x *dev_to_tps6586x(struct device *dev) in dev_to_tps6586x() argument
145 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_write() local
147 return regmap_write(tps6586x->regmap, reg, val); in tps6586x_write()
153 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_writes() local
155 return regmap_bulk_write(tps6586x->regmap, reg, val, len); in tps6586x_writes()
161 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_read() local
165 ret = regmap_read(tps6586x->regmap, reg, &rval); in tps6586x_read()
174 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_reads() local
176 return regmap_bulk_read(tps6586x->regmap, reg, val, len); in tps6586x_reads()
182 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_set_bits() local
184 return regmap_update_bits(tps6586x->regmap, reg, bit_mask, bit_mask); in tps6586x_set_bits()
190 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_clr_bits() local
192 return regmap_update_bits(tps6586x->regmap, reg, bit_mask, 0); in tps6586x_clr_bits()
198 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_update() local
200 return regmap_update_bits(tps6586x->regmap, reg, mask, val); in tps6586x_update()
206 struct tps6586x *tps6586x = dev_to_tps6586x(dev); in tps6586x_irq_get_virq() local
208 return irq_create_mapping(tps6586x->irq_domain, irq); in tps6586x_irq_get_virq()
214 struct tps6586x *tps6586x = dev_get_drvdata(dev); in tps6586x_get_version() local
216 return tps6586x->version; in tps6586x_get_version()
226 static int tps6586x_remove_subdevs(struct tps6586x *tps6586x) in tps6586x_remove_subdevs() argument
228 return device_for_each_child(tps6586x->dev, NULL, __remove_subdev); in tps6586x_remove_subdevs()
233 struct tps6586x *tps6586x = irq_data_get_irq_chip_data(data); in tps6586x_irq_lock() local
235 mutex_lock(&tps6586x->irq_lock); in tps6586x_irq_lock()
240 struct tps6586x *tps6586x = irq_data_get_irq_chip_data(irq_data); in tps6586x_irq_enable() local
244 tps6586x->mask_reg[data->mask_reg] &= ~data->mask_mask; in tps6586x_irq_enable()
245 tps6586x->irq_en |= (1 << __irq); in tps6586x_irq_enable()
250 struct tps6586x *tps6586x = irq_data_get_irq_chip_data(irq_data); in tps6586x_irq_disable() local
255 tps6586x->mask_reg[data->mask_reg] |= data->mask_mask; in tps6586x_irq_disable()
256 tps6586x->irq_en &= ~(1 << __irq); in tps6586x_irq_disable()
261 struct tps6586x *tps6586x = irq_data_get_irq_chip_data(data); in tps6586x_irq_sync_unlock() local
264 for (i = 0; i < ARRAY_SIZE(tps6586x->mask_reg); i++) { in tps6586x_irq_sync_unlock()
266 ret = tps6586x_write(tps6586x->dev, in tps6586x_irq_sync_unlock()
268 tps6586x->mask_reg[i]); in tps6586x_irq_sync_unlock()
272 mutex_unlock(&tps6586x->irq_lock); in tps6586x_irq_sync_unlock()
278 struct tps6586x *tps6586x = irq_data_get_irq_chip_data(irq_data); in tps6586x_irq_set_wake() local
279 return irq_set_irq_wake(tps6586x->irq, on); in tps6586x_irq_set_wake()
297 struct tps6586x *tps6586x = h->host_data; in tps6586x_irq_map() local
299 irq_set_chip_data(virq, tps6586x); in tps6586x_irq_map()
321 struct tps6586x *tps6586x = data; in tps6586x_irq() local
325 ret = tps6586x_reads(tps6586x->dev, TPS6586X_INT_ACK1, in tps6586x_irq()
329 dev_err(tps6586x->dev, "failed to read interrupt status\n"); in tps6586x_irq()
338 if (tps6586x->irq_en & (1 << i)) in tps6586x_irq()
340 irq_find_mapping(tps6586x->irq_domain, i)); in tps6586x_irq()
348 static int tps6586x_irq_init(struct tps6586x *tps6586x, int irq, in tps6586x_irq_init() argument
356 tps6586x->irq = irq; in tps6586x_irq_init()
358 mutex_init(&tps6586x->irq_lock); in tps6586x_irq_init()
360 tps6586x->mask_reg[i] = 0xff; in tps6586x_irq_init()
361 tps6586x_write(tps6586x->dev, TPS6586X_INT_MASK1 + i, 0xff); in tps6586x_irq_init()
364 tps6586x_reads(tps6586x->dev, TPS6586X_INT_ACK1, sizeof(tmp), tmp); in tps6586x_irq_init()
369 dev_err(tps6586x->dev, in tps6586x_irq_init()
377 tps6586x->irq_domain = irq_domain_add_simple(tps6586x->dev->of_node, in tps6586x_irq_init()
379 tps6586x); in tps6586x_irq_init()
380 if (!tps6586x->irq_domain) { in tps6586x_irq_init()
381 dev_err(tps6586x->dev, "Failed to create IRQ domain\n"); in tps6586x_irq_init()
385 "tps6586x", tps6586x); in tps6586x_irq_init()
388 device_init_wakeup(tps6586x->dev, 1); in tps6586x_irq_init()
393 static int tps6586x_add_subdevs(struct tps6586x *tps6586x, in tps6586x_add_subdevs() argument
409 pdev->dev.parent = tps6586x->dev; in tps6586x_add_subdevs()
422 tps6586x_remove_subdevs(tps6586x); in tps6586x_add_subdevs()
517 struct tps6586x *tps6586x; in tps6586x_i2c_probe() local
535 tps6586x = devm_kzalloc(&client->dev, sizeof(*tps6586x), GFP_KERNEL); in tps6586x_i2c_probe()
536 if (!tps6586x) in tps6586x_i2c_probe()
539 tps6586x->version = version; in tps6586x_i2c_probe()
540 tps6586x_print_version(client, tps6586x->version); in tps6586x_i2c_probe()
542 tps6586x->client = client; in tps6586x_i2c_probe()
543 tps6586x->dev = &client->dev; in tps6586x_i2c_probe()
544 i2c_set_clientdata(client, tps6586x); in tps6586x_i2c_probe()
546 tps6586x->regmap = devm_regmap_init_i2c(client, in tps6586x_i2c_probe()
548 if (IS_ERR(tps6586x->regmap)) { in tps6586x_i2c_probe()
549 ret = PTR_ERR(tps6586x->regmap); in tps6586x_i2c_probe()
556 ret = tps6586x_irq_init(tps6586x, client->irq, in tps6586x_i2c_probe()
564 ret = mfd_add_devices(tps6586x->dev, -1, in tps6586x_i2c_probe()
566 NULL, 0, tps6586x->irq_domain); in tps6586x_i2c_probe()
572 ret = tps6586x_add_subdevs(tps6586x, pdata); in tps6586x_i2c_probe()
586 mfd_remove_devices(tps6586x->dev); in tps6586x_i2c_probe()
589 free_irq(client->irq, tps6586x); in tps6586x_i2c_probe()
595 struct tps6586x *tps6586x = i2c_get_clientdata(client); in tps6586x_i2c_remove() local
597 tps6586x_remove_subdevs(tps6586x); in tps6586x_i2c_remove()
598 mfd_remove_devices(tps6586x->dev); in tps6586x_i2c_remove()
600 free_irq(client->irq, tps6586x); in tps6586x_i2c_remove()