• Home
  • Raw
  • Download

Lines Matching refs:ctl

48 static void meson8_gpio_irq_sel_pin(struct meson_gpio_irq_controller *ctl,
50 static void meson_gpio_irq_init_dummy(struct meson_gpio_irq_controller *ctl);
51 static void meson_a1_gpio_irq_sel_pin(struct meson_gpio_irq_controller *ctl,
54 static void meson_a1_gpio_irq_init(struct meson_gpio_irq_controller *ctl);
57 void (*gpio_irq_sel_pin)(struct meson_gpio_irq_controller *ctl,
59 void (*gpio_irq_init)(struct meson_gpio_irq_controller *ctl);
146 static void meson_gpio_irq_update_bits(struct meson_gpio_irq_controller *ctl, in meson_gpio_irq_update_bits() argument
152 spin_lock_irqsave(&ctl->lock, flags); in meson_gpio_irq_update_bits()
154 tmp = readl_relaxed(ctl->base + reg); in meson_gpio_irq_update_bits()
157 writel_relaxed(tmp, ctl->base + reg); in meson_gpio_irq_update_bits()
159 spin_unlock_irqrestore(&ctl->lock, flags); in meson_gpio_irq_update_bits()
162 static void meson_gpio_irq_init_dummy(struct meson_gpio_irq_controller *ctl) in meson_gpio_irq_init_dummy() argument
166 static void meson8_gpio_irq_sel_pin(struct meson_gpio_irq_controller *ctl, in meson8_gpio_irq_sel_pin() argument
175 meson_gpio_irq_update_bits(ctl, reg_offset, in meson8_gpio_irq_sel_pin()
176 ctl->params->pin_sel_mask << bit_offset, in meson8_gpio_irq_sel_pin()
180 static void meson_a1_gpio_irq_sel_pin(struct meson_gpio_irq_controller *ctl, in meson_a1_gpio_irq_sel_pin() argument
190 meson_gpio_irq_update_bits(ctl, reg_offset, in meson_a1_gpio_irq_sel_pin()
191 ctl->params->pin_sel_mask << bit_offset, in meson_a1_gpio_irq_sel_pin()
196 static void meson_a1_gpio_irq_init(struct meson_gpio_irq_controller *ctl) in meson_a1_gpio_irq_init() argument
198 meson_gpio_irq_update_bits(ctl, REG_EDGE_POL, BIT(31), BIT(31)); in meson_a1_gpio_irq_init()
202 meson_gpio_irq_request_channel(struct meson_gpio_irq_controller *ctl, in meson_gpio_irq_request_channel() argument
209 spin_lock_irqsave(&ctl->lock, flags); in meson_gpio_irq_request_channel()
212 idx = find_first_zero_bit(ctl->channel_map, NUM_CHANNEL); in meson_gpio_irq_request_channel()
214 spin_unlock_irqrestore(&ctl->lock, flags); in meson_gpio_irq_request_channel()
220 set_bit(idx, ctl->channel_map); in meson_gpio_irq_request_channel()
222 spin_unlock_irqrestore(&ctl->lock, flags); in meson_gpio_irq_request_channel()
228 ctl->params->ops.gpio_irq_sel_pin(ctl, idx, hwirq); in meson_gpio_irq_request_channel()
236 *channel_hwirq = &(ctl->channel_irqs[idx]); in meson_gpio_irq_request_channel()
245 meson_gpio_irq_get_channel_idx(struct meson_gpio_irq_controller *ctl, in meson_gpio_irq_get_channel_idx() argument
248 return channel_hwirq - ctl->channel_irqs; in meson_gpio_irq_get_channel_idx()
252 meson_gpio_irq_release_channel(struct meson_gpio_irq_controller *ctl, in meson_gpio_irq_release_channel() argument
257 idx = meson_gpio_irq_get_channel_idx(ctl, channel_hwirq); in meson_gpio_irq_release_channel()
258 clear_bit(idx, ctl->channel_map); in meson_gpio_irq_release_channel()
261 static int meson_gpio_irq_type_setup(struct meson_gpio_irq_controller *ctl, in meson_gpio_irq_type_setup() argument
269 params = ctl->params; in meson_gpio_irq_type_setup()
270 idx = meson_gpio_irq_get_channel_idx(ctl, channel_hwirq); in meson_gpio_irq_type_setup()
298 meson_gpio_irq_update_bits(ctl, REG_EDGE_POL, in meson_gpio_irq_type_setup()
324 struct meson_gpio_irq_controller *ctl = data->domain->host_data; in meson_gpio_irq_set_type() local
328 ret = meson_gpio_irq_type_setup(ctl, type, channel_hwirq); in meson_gpio_irq_set_type()
385 struct meson_gpio_irq_controller *ctl = domain->host_data; in meson_gpio_irq_domain_alloc() local
398 ret = meson_gpio_irq_request_channel(ctl, hwirq, &channel_hwirq); in meson_gpio_irq_domain_alloc()
406 meson_gpio_irq_release_channel(ctl, channel_hwirq); in meson_gpio_irq_domain_alloc()
420 struct meson_gpio_irq_controller *ctl = domain->host_data; in meson_gpio_irq_domain_free() local
432 meson_gpio_irq_release_channel(ctl, channel_hwirq); in meson_gpio_irq_domain_free()
442 struct meson_gpio_irq_controller *ctl) in meson_gpio_irq_parse_dt() argument
451 ctl->params = match->data; in meson_gpio_irq_parse_dt()
455 ctl->channel_irqs, in meson_gpio_irq_parse_dt()
463 ctl->params->ops.gpio_irq_init(ctl); in meson_gpio_irq_parse_dt()
471 struct meson_gpio_irq_controller *ctl; in meson_gpio_intc_probe() local
488 ctl = devm_kzalloc(&pdev->dev, sizeof(*ctl), GFP_KERNEL); in meson_gpio_intc_probe()
489 if (!ctl) in meson_gpio_intc_probe()
492 spin_lock_init(&ctl->lock); in meson_gpio_intc_probe()
495 ctl->base = devm_ioremap_resource(&pdev->dev, res); in meson_gpio_intc_probe()
496 if (IS_ERR(ctl->base)) in meson_gpio_intc_probe()
497 return PTR_ERR(ctl->base); in meson_gpio_intc_probe()
499 ret = meson_gpio_irq_parse_dt(node, ctl); in meson_gpio_intc_probe()
503 ctl->domain = irq_domain_create_hierarchy(parent_domain, 0, in meson_gpio_intc_probe()
504 ctl->params->nr_hwirq, in meson_gpio_intc_probe()
507 ctl); in meson_gpio_intc_probe()
508 if (!ctl->domain) { in meson_gpio_intc_probe()
513 platform_set_drvdata(pdev, ctl); in meson_gpio_intc_probe()
516 ctl->params->nr_hwirq, NUM_CHANNEL); in meson_gpio_intc_probe()
523 struct meson_gpio_irq_controller *ctl = platform_get_drvdata(pdev); in meson_gpio_intc_remove() local
525 irq_domain_remove(ctl->domain); in meson_gpio_intc_remove()