Lines Matching refs:d
55 struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data); in regmap_irq_lock() local
57 mutex_lock(&d->lock); in regmap_irq_lock()
62 struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data); in regmap_irq_sync_unlock() local
63 struct regmap *map = d->map; in regmap_irq_sync_unlock()
67 if (d->chip->runtime_pm) { in regmap_irq_sync_unlock()
79 for (i = 0; i < d->chip->num_regs; i++) { in regmap_irq_sync_unlock()
80 reg = d->chip->mask_base + in regmap_irq_sync_unlock()
81 (i * map->reg_stride * d->irq_reg_stride); in regmap_irq_sync_unlock()
82 if (d->chip->mask_invert) in regmap_irq_sync_unlock()
83 ret = regmap_update_bits(d->map, reg, in regmap_irq_sync_unlock()
84 d->mask_buf_def[i], ~d->mask_buf[i]); in regmap_irq_sync_unlock()
86 ret = regmap_update_bits(d->map, reg, in regmap_irq_sync_unlock()
87 d->mask_buf_def[i], d->mask_buf[i]); in regmap_irq_sync_unlock()
89 dev_err(d->map->dev, "Failed to sync masks in %x\n", in regmap_irq_sync_unlock()
92 reg = d->chip->wake_base + in regmap_irq_sync_unlock()
93 (i * map->reg_stride * d->irq_reg_stride); in regmap_irq_sync_unlock()
94 if (d->wake_buf) { in regmap_irq_sync_unlock()
95 if (d->chip->wake_invert) in regmap_irq_sync_unlock()
96 ret = regmap_update_bits(d->map, reg, in regmap_irq_sync_unlock()
97 d->mask_buf_def[i], in regmap_irq_sync_unlock()
98 ~d->wake_buf[i]); in regmap_irq_sync_unlock()
100 ret = regmap_update_bits(d->map, reg, in regmap_irq_sync_unlock()
101 d->mask_buf_def[i], in regmap_irq_sync_unlock()
102 d->wake_buf[i]); in regmap_irq_sync_unlock()
104 dev_err(d->map->dev, in regmap_irq_sync_unlock()
109 if (!d->chip->init_ack_masked) in regmap_irq_sync_unlock()
116 if (d->mask_buf[i] && (d->chip->ack_base || d->chip->use_ack)) { in regmap_irq_sync_unlock()
117 reg = d->chip->ack_base + in regmap_irq_sync_unlock()
118 (i * map->reg_stride * d->irq_reg_stride); in regmap_irq_sync_unlock()
119 ret = regmap_write(map, reg, d->mask_buf[i]); in regmap_irq_sync_unlock()
121 dev_err(d->map->dev, "Failed to ack 0x%x: %d\n", in regmap_irq_sync_unlock()
126 if (d->chip->runtime_pm) in regmap_irq_sync_unlock()
130 if (d->wake_count < 0) in regmap_irq_sync_unlock()
131 for (i = d->wake_count; i < 0; i++) in regmap_irq_sync_unlock()
132 irq_set_irq_wake(d->irq, 0); in regmap_irq_sync_unlock()
133 else if (d->wake_count > 0) in regmap_irq_sync_unlock()
134 for (i = 0; i < d->wake_count; i++) in regmap_irq_sync_unlock()
135 irq_set_irq_wake(d->irq, 1); in regmap_irq_sync_unlock()
137 d->wake_count = 0; in regmap_irq_sync_unlock()
139 mutex_unlock(&d->lock); in regmap_irq_sync_unlock()
144 struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data); in regmap_irq_enable() local
145 struct regmap *map = d->map; in regmap_irq_enable()
146 const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq); in regmap_irq_enable()
148 d->mask_buf[irq_data->reg_offset / map->reg_stride] &= ~irq_data->mask; in regmap_irq_enable()
153 struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data); in regmap_irq_disable() local
154 struct regmap *map = d->map; in regmap_irq_disable()
155 const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq); in regmap_irq_disable()
157 d->mask_buf[irq_data->reg_offset / map->reg_stride] |= irq_data->mask; in regmap_irq_disable()
162 struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data); in regmap_irq_set_wake() local
163 struct regmap *map = d->map; in regmap_irq_set_wake()
164 const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq); in regmap_irq_set_wake()
167 if (d->wake_buf) in regmap_irq_set_wake()
168 d->wake_buf[irq_data->reg_offset / map->reg_stride] in regmap_irq_set_wake()
170 d->wake_count++; in regmap_irq_set_wake()
172 if (d->wake_buf) in regmap_irq_set_wake()
173 d->wake_buf[irq_data->reg_offset / map->reg_stride] in regmap_irq_set_wake()
175 d->wake_count--; in regmap_irq_set_wake()
189 static irqreturn_t regmap_irq_thread(int irq, void *d) in regmap_irq_thread() argument
191 struct regmap_irq_chip_data *data = d; in regmap_irq_thread()
345 struct regmap_irq_chip_data *d; in regmap_add_irq_chip() local
370 d = kzalloc(sizeof(*d), GFP_KERNEL); in regmap_add_irq_chip()
371 if (!d) in regmap_add_irq_chip()
374 d->status_buf = kzalloc(sizeof(unsigned int) * chip->num_regs, in regmap_add_irq_chip()
376 if (!d->status_buf) in regmap_add_irq_chip()
379 d->mask_buf = kzalloc(sizeof(unsigned int) * chip->num_regs, in regmap_add_irq_chip()
381 if (!d->mask_buf) in regmap_add_irq_chip()
384 d->mask_buf_def = kzalloc(sizeof(unsigned int) * chip->num_regs, in regmap_add_irq_chip()
386 if (!d->mask_buf_def) in regmap_add_irq_chip()
390 d->wake_buf = kzalloc(sizeof(unsigned int) * chip->num_regs, in regmap_add_irq_chip()
392 if (!d->wake_buf) in regmap_add_irq_chip()
396 d->irq_chip = regmap_irq_chip; in regmap_add_irq_chip()
397 d->irq_chip.name = chip->name; in regmap_add_irq_chip()
398 d->irq = irq; in regmap_add_irq_chip()
399 d->map = map; in regmap_add_irq_chip()
400 d->chip = chip; in regmap_add_irq_chip()
401 d->irq_base = irq_base; in regmap_add_irq_chip()
404 d->irq_reg_stride = chip->irq_reg_stride; in regmap_add_irq_chip()
406 d->irq_reg_stride = 1; in regmap_add_irq_chip()
409 d->irq_reg_stride == 1) { in regmap_add_irq_chip()
410 d->status_reg_buf = kmalloc(map->format.val_bytes * in regmap_add_irq_chip()
412 if (!d->status_reg_buf) in regmap_add_irq_chip()
416 mutex_init(&d->lock); in regmap_add_irq_chip()
419 d->mask_buf_def[chip->irqs[i].reg_offset / map->reg_stride] in regmap_add_irq_chip()
424 d->mask_buf[i] = d->mask_buf_def[i]; in regmap_add_irq_chip()
426 (i * map->reg_stride * d->irq_reg_stride); in regmap_add_irq_chip()
429 d->mask_buf[i], ~d->mask_buf[i]); in regmap_add_irq_chip()
432 d->mask_buf[i], d->mask_buf[i]); in regmap_add_irq_chip()
444 (i * map->reg_stride * d->irq_reg_stride); in regmap_add_irq_chip()
445 ret = regmap_read(map, reg, &d->status_buf[i]); in regmap_add_irq_chip()
452 if (d->status_buf[i] && (chip->ack_base || chip->use_ack)) { in regmap_add_irq_chip()
454 (i * map->reg_stride * d->irq_reg_stride); in regmap_add_irq_chip()
456 d->status_buf[i] & d->mask_buf[i]); in regmap_add_irq_chip()
466 if (d->wake_buf) { in regmap_add_irq_chip()
468 d->wake_buf[i] = d->mask_buf_def[i]; in regmap_add_irq_chip()
470 (i * map->reg_stride * d->irq_reg_stride); in regmap_add_irq_chip()
474 d->mask_buf_def[i], in regmap_add_irq_chip()
478 d->mask_buf_def[i], in regmap_add_irq_chip()
479 d->wake_buf[i]); in regmap_add_irq_chip()
489 d->domain = irq_domain_add_legacy(map->dev->of_node, in regmap_add_irq_chip()
491 ®map_domain_ops, d); in regmap_add_irq_chip()
493 d->domain = irq_domain_add_linear(map->dev->of_node, in regmap_add_irq_chip()
495 ®map_domain_ops, d); in regmap_add_irq_chip()
496 if (!d->domain) { in regmap_add_irq_chip()
504 chip->name, d); in regmap_add_irq_chip()
511 *data = d; in regmap_add_irq_chip()
518 kfree(d->wake_buf); in regmap_add_irq_chip()
519 kfree(d->mask_buf_def); in regmap_add_irq_chip()
520 kfree(d->mask_buf); in regmap_add_irq_chip()
521 kfree(d->status_buf); in regmap_add_irq_chip()
522 kfree(d->status_reg_buf); in regmap_add_irq_chip()
523 kfree(d); in regmap_add_irq_chip()
534 void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *d) in regmap_del_irq_chip() argument
536 if (!d) in regmap_del_irq_chip()
539 free_irq(irq, d); in regmap_del_irq_chip()
540 irq_domain_remove(d->domain); in regmap_del_irq_chip()
541 kfree(d->wake_buf); in regmap_del_irq_chip()
542 kfree(d->mask_buf_def); in regmap_del_irq_chip()
543 kfree(d->mask_buf); in regmap_del_irq_chip()
544 kfree(d->status_reg_buf); in regmap_del_irq_chip()
545 kfree(d->status_buf); in regmap_del_irq_chip()
546 kfree(d); in regmap_del_irq_chip()