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()
68 if (d->chip->runtime_pm) { in regmap_irq_sync_unlock()
80 for (i = 0; i < d->chip->num_regs; i++) { in regmap_irq_sync_unlock()
81 reg = d->chip->mask_base + in regmap_irq_sync_unlock()
82 (i * map->reg_stride * d->irq_reg_stride); in regmap_irq_sync_unlock()
83 if (d->chip->mask_invert) { in regmap_irq_sync_unlock()
84 ret = regmap_update_bits(d->map, reg, in regmap_irq_sync_unlock()
85 d->mask_buf_def[i], ~d->mask_buf[i]); in regmap_irq_sync_unlock()
86 } else if (d->chip->unmask_base) { in regmap_irq_sync_unlock()
88 ret = regmap_update_bits(d->map, reg, in regmap_irq_sync_unlock()
89 d->mask_buf_def[i], ~d->mask_buf[i]); in regmap_irq_sync_unlock()
91 dev_err(d->map->dev, in regmap_irq_sync_unlock()
94 unmask_offset = d->chip->unmask_base - in regmap_irq_sync_unlock()
95 d->chip->mask_base; in regmap_irq_sync_unlock()
97 ret = regmap_update_bits(d->map, in regmap_irq_sync_unlock()
99 d->mask_buf_def[i], in regmap_irq_sync_unlock()
100 d->mask_buf[i]); in regmap_irq_sync_unlock()
102 ret = regmap_update_bits(d->map, reg, in regmap_irq_sync_unlock()
103 d->mask_buf_def[i], d->mask_buf[i]); in regmap_irq_sync_unlock()
106 dev_err(d->map->dev, "Failed to sync masks in %x\n", in regmap_irq_sync_unlock()
109 reg = d->chip->wake_base + in regmap_irq_sync_unlock()
110 (i * map->reg_stride * d->irq_reg_stride); in regmap_irq_sync_unlock()
111 if (d->wake_buf) { in regmap_irq_sync_unlock()
112 if (d->chip->wake_invert) in regmap_irq_sync_unlock()
113 ret = regmap_update_bits(d->map, reg, in regmap_irq_sync_unlock()
114 d->mask_buf_def[i], in regmap_irq_sync_unlock()
115 ~d->wake_buf[i]); in regmap_irq_sync_unlock()
117 ret = regmap_update_bits(d->map, reg, in regmap_irq_sync_unlock()
118 d->mask_buf_def[i], in regmap_irq_sync_unlock()
119 d->wake_buf[i]); in regmap_irq_sync_unlock()
121 dev_err(d->map->dev, in regmap_irq_sync_unlock()
126 if (!d->chip->init_ack_masked) in regmap_irq_sync_unlock()
133 if (d->mask_buf[i] && (d->chip->ack_base || d->chip->use_ack)) { in regmap_irq_sync_unlock()
134 reg = d->chip->ack_base + in regmap_irq_sync_unlock()
135 (i * map->reg_stride * d->irq_reg_stride); in regmap_irq_sync_unlock()
137 if (d->chip->ack_invert) in regmap_irq_sync_unlock()
138 ret = regmap_write(map, reg, ~d->mask_buf[i]); in regmap_irq_sync_unlock()
140 ret = regmap_write(map, reg, d->mask_buf[i]); in regmap_irq_sync_unlock()
142 dev_err(d->map->dev, "Failed to ack 0x%x: %d\n", in regmap_irq_sync_unlock()
147 if (d->chip->runtime_pm) in regmap_irq_sync_unlock()
151 if (d->wake_count < 0) in regmap_irq_sync_unlock()
152 for (i = d->wake_count; i < 0; i++) in regmap_irq_sync_unlock()
153 irq_set_irq_wake(d->irq, 0); in regmap_irq_sync_unlock()
154 else if (d->wake_count > 0) in regmap_irq_sync_unlock()
155 for (i = 0; i < d->wake_count; i++) in regmap_irq_sync_unlock()
156 irq_set_irq_wake(d->irq, 1); in regmap_irq_sync_unlock()
158 d->wake_count = 0; in regmap_irq_sync_unlock()
160 mutex_unlock(&d->lock); in regmap_irq_sync_unlock()
165 struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data); in regmap_irq_enable() local
166 struct regmap *map = d->map; in regmap_irq_enable()
167 const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq); in regmap_irq_enable()
169 d->mask_buf[irq_data->reg_offset / map->reg_stride] &= ~irq_data->mask; in regmap_irq_enable()
174 struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data); in regmap_irq_disable() local
175 struct regmap *map = d->map; in regmap_irq_disable()
176 const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq); in regmap_irq_disable()
178 d->mask_buf[irq_data->reg_offset / map->reg_stride] |= irq_data->mask; in regmap_irq_disable()
183 struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data); in regmap_irq_set_wake() local
184 struct regmap *map = d->map; in regmap_irq_set_wake()
185 const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq); in regmap_irq_set_wake()
188 if (d->wake_buf) in regmap_irq_set_wake()
189 d->wake_buf[irq_data->reg_offset / map->reg_stride] in regmap_irq_set_wake()
191 d->wake_count++; in regmap_irq_set_wake()
193 if (d->wake_buf) in regmap_irq_set_wake()
194 d->wake_buf[irq_data->reg_offset / map->reg_stride] in regmap_irq_set_wake()
196 d->wake_count--; in regmap_irq_set_wake()
210 static irqreturn_t regmap_irq_thread(int irq, void *d) in regmap_irq_thread() argument
212 struct regmap_irq_chip_data *data = d; in regmap_irq_thread()
359 struct regmap_irq_chip_data *d; in regmap_add_irq_chip() local
385 d = kzalloc(sizeof(*d), GFP_KERNEL); in regmap_add_irq_chip()
386 if (!d) in regmap_add_irq_chip()
389 d->status_buf = kzalloc(sizeof(unsigned int) * chip->num_regs, in regmap_add_irq_chip()
391 if (!d->status_buf) in regmap_add_irq_chip()
394 d->mask_buf = kzalloc(sizeof(unsigned int) * chip->num_regs, in regmap_add_irq_chip()
396 if (!d->mask_buf) in regmap_add_irq_chip()
399 d->mask_buf_def = kzalloc(sizeof(unsigned int) * chip->num_regs, in regmap_add_irq_chip()
401 if (!d->mask_buf_def) in regmap_add_irq_chip()
405 d->wake_buf = kzalloc(sizeof(unsigned int) * chip->num_regs, in regmap_add_irq_chip()
407 if (!d->wake_buf) in regmap_add_irq_chip()
411 d->irq_chip = regmap_irq_chip; in regmap_add_irq_chip()
412 d->irq_chip.name = chip->name; in regmap_add_irq_chip()
413 d->irq = irq; in regmap_add_irq_chip()
414 d->map = map; in regmap_add_irq_chip()
415 d->chip = chip; in regmap_add_irq_chip()
416 d->irq_base = irq_base; in regmap_add_irq_chip()
419 d->irq_reg_stride = chip->irq_reg_stride; in regmap_add_irq_chip()
421 d->irq_reg_stride = 1; in regmap_add_irq_chip()
424 d->irq_reg_stride == 1) { in regmap_add_irq_chip()
425 d->status_reg_buf = kmalloc(map->format.val_bytes * in regmap_add_irq_chip()
427 if (!d->status_reg_buf) in regmap_add_irq_chip()
431 mutex_init(&d->lock); in regmap_add_irq_chip()
434 d->mask_buf_def[chip->irqs[i].reg_offset / map->reg_stride] in regmap_add_irq_chip()
439 d->mask_buf[i] = d->mask_buf_def[i]; in regmap_add_irq_chip()
441 (i * map->reg_stride * d->irq_reg_stride); in regmap_add_irq_chip()
444 d->mask_buf[i], ~d->mask_buf[i]); in regmap_add_irq_chip()
445 else if (d->chip->unmask_base) { in regmap_add_irq_chip()
446 unmask_offset = d->chip->unmask_base - in regmap_add_irq_chip()
447 d->chip->mask_base; in regmap_add_irq_chip()
448 ret = regmap_update_bits(d->map, in regmap_add_irq_chip()
450 d->mask_buf[i], in regmap_add_irq_chip()
451 d->mask_buf[i]); in regmap_add_irq_chip()
454 d->mask_buf[i], d->mask_buf[i]); in regmap_add_irq_chip()
466 (i * map->reg_stride * d->irq_reg_stride); in regmap_add_irq_chip()
467 ret = regmap_read(map, reg, &d->status_buf[i]); in regmap_add_irq_chip()
474 if (d->status_buf[i] && (chip->ack_base || chip->use_ack)) { in regmap_add_irq_chip()
476 (i * map->reg_stride * d->irq_reg_stride); in regmap_add_irq_chip()
479 ~(d->status_buf[i] & d->mask_buf[i])); in regmap_add_irq_chip()
482 d->status_buf[i] & d->mask_buf[i]); in regmap_add_irq_chip()
492 if (d->wake_buf) { in regmap_add_irq_chip()
494 d->wake_buf[i] = d->mask_buf_def[i]; in regmap_add_irq_chip()
496 (i * map->reg_stride * d->irq_reg_stride); in regmap_add_irq_chip()
500 d->mask_buf_def[i], in regmap_add_irq_chip()
504 d->mask_buf_def[i], in regmap_add_irq_chip()
505 d->wake_buf[i]); in regmap_add_irq_chip()
515 d->domain = irq_domain_add_legacy(map->dev->of_node, in regmap_add_irq_chip()
517 &regmap_domain_ops, d); in regmap_add_irq_chip()
519 d->domain = irq_domain_add_linear(map->dev->of_node, in regmap_add_irq_chip()
521 &regmap_domain_ops, d); in regmap_add_irq_chip()
522 if (!d->domain) { in regmap_add_irq_chip()
530 chip->name, d); in regmap_add_irq_chip()
537 *data = d; in regmap_add_irq_chip()
544 kfree(d->wake_buf); in regmap_add_irq_chip()
545 kfree(d->mask_buf_def); in regmap_add_irq_chip()
546 kfree(d->mask_buf); in regmap_add_irq_chip()
547 kfree(d->status_buf); in regmap_add_irq_chip()
548 kfree(d->status_reg_buf); in regmap_add_irq_chip()
549 kfree(d); in regmap_add_irq_chip()
560 void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *d) in regmap_del_irq_chip() argument
562 if (!d) in regmap_del_irq_chip()
565 free_irq(irq, d); in regmap_del_irq_chip()
566 irq_domain_remove(d->domain); in regmap_del_irq_chip()
567 kfree(d->wake_buf); in regmap_del_irq_chip()
568 kfree(d->mask_buf_def); in regmap_del_irq_chip()
569 kfree(d->mask_buf); in regmap_del_irq_chip()
570 kfree(d->status_reg_buf); in regmap_del_irq_chip()
571 kfree(d->status_buf); in regmap_del_irq_chip()
572 kfree(d); in regmap_del_irq_chip()