Lines Matching defs:ctl

47 static void meson8_gpio_irq_sel_pin(struct meson_gpio_irq_controller *ctl,
49 static void meson_gpio_irq_init_dummy(struct meson_gpio_irq_controller *ctl);
50 static void meson_a1_gpio_irq_sel_pin(struct meson_gpio_irq_controller *ctl,
53 static void meson_a1_gpio_irq_init(struct meson_gpio_irq_controller *ctl);
56 void (*gpio_irq_sel_pin)(struct meson_gpio_irq_controller *ctl,
58 void (*gpio_irq_init)(struct meson_gpio_irq_controller *ctl);
144 static void meson_gpio_irq_update_bits(struct meson_gpio_irq_controller *ctl,
150 spin_lock_irqsave(&ctl->lock, flags);
152 tmp = readl_relaxed(ctl->base + reg);
155 writel_relaxed(tmp, ctl->base + reg);
157 spin_unlock_irqrestore(&ctl->lock, flags);
160 static void meson_gpio_irq_init_dummy(struct meson_gpio_irq_controller *ctl)
164 static void meson8_gpio_irq_sel_pin(struct meson_gpio_irq_controller *ctl,
173 meson_gpio_irq_update_bits(ctl, reg_offset,
174 ctl->params->pin_sel_mask << bit_offset,
178 static void meson_a1_gpio_irq_sel_pin(struct meson_gpio_irq_controller *ctl,
188 meson_gpio_irq_update_bits(ctl, reg_offset,
189 ctl->params->pin_sel_mask << bit_offset,
194 static void meson_a1_gpio_irq_init(struct meson_gpio_irq_controller *ctl)
196 meson_gpio_irq_update_bits(ctl, REG_EDGE_POL, BIT(31), BIT(31));
200 meson_gpio_irq_request_channel(struct meson_gpio_irq_controller *ctl,
207 spin_lock_irqsave(&ctl->lock, flags);
210 idx = find_first_zero_bit(ctl->channel_map, NUM_CHANNEL);
212 spin_unlock_irqrestore(&ctl->lock, flags);
218 set_bit(idx, ctl->channel_map);
220 spin_unlock_irqrestore(&ctl->lock, flags);
226 ctl->params->ops.gpio_irq_sel_pin(ctl, idx, hwirq);
234 *channel_hwirq = &(ctl->channel_irqs[idx]);
243 meson_gpio_irq_get_channel_idx(struct meson_gpio_irq_controller *ctl,
246 return channel_hwirq - ctl->channel_irqs;
250 meson_gpio_irq_release_channel(struct meson_gpio_irq_controller *ctl,
255 idx = meson_gpio_irq_get_channel_idx(ctl, channel_hwirq);
256 clear_bit(idx, ctl->channel_map);
259 static int meson_gpio_irq_type_setup(struct meson_gpio_irq_controller *ctl,
267 params = ctl->params;
268 idx = meson_gpio_irq_get_channel_idx(ctl, channel_hwirq);
296 meson_gpio_irq_update_bits(ctl, REG_EDGE_POL,
322 struct meson_gpio_irq_controller *ctl = data->domain->host_data;
326 ret = meson_gpio_irq_type_setup(ctl, type, channel_hwirq);
383 struct meson_gpio_irq_controller *ctl = domain->host_data;
396 ret = meson_gpio_irq_request_channel(ctl, hwirq, &channel_hwirq);
404 meson_gpio_irq_release_channel(ctl, channel_hwirq);
418 struct meson_gpio_irq_controller *ctl = domain->host_data;
430 meson_gpio_irq_release_channel(ctl, channel_hwirq);
440 struct meson_gpio_irq_controller *ctl)
449 ctl->params = match->data;
453 ctl->channel_irqs,
461 ctl->params->ops.gpio_irq_init(ctl);
470 struct meson_gpio_irq_controller *ctl;
484 ctl = kzalloc(sizeof(*ctl), GFP_KERNEL);
485 if (!ctl)
488 spin_lock_init(&ctl->lock);
490 ctl->base = of_iomap(node, 0);
491 if (!ctl->base) {
496 ret = meson_gpio_irq_parse_dt(node, ctl);
501 ctl->params->nr_hwirq,
504 ctl);
512 ctl->params->nr_hwirq, NUM_CHANNEL);
517 iounmap(ctl->base);
519 kfree(ctl);