Lines Matching +full:irqs +full:- +full:map +full:- +full:range
1 // SPDX-License-Identifier: (GPL-2.0 OR MIT)
5 * Author: <alexandre.belloni@free-electrons.com>
19 #include <linux/pinctrl/pinconf-generic.h>
120 struct regmap *map; member
204 *groups = info->func[function].groups; in ocelot_get_function_groups()
205 *num_groups = info->func[function].ngroups; in ocelot_get_function_groups()
216 if (function == p->functions[i]) in ocelot_pin_function_idx()
220 return -1; in ocelot_pin_function_idx()
232 return -EINVAL; in ocelot_pinmux_set_mux()
241 regmap_update_bits(info->map, OCELOT_GPIO_ALT0, BIT(pin->pin), in ocelot_pinmux_set_mux()
242 f << pin->pin); in ocelot_pinmux_set_mux()
243 regmap_update_bits(info->map, OCELOT_GPIO_ALT1, BIT(pin->pin), in ocelot_pinmux_set_mux()
244 f << (pin->pin - 1)); in ocelot_pinmux_set_mux()
250 struct pinctrl_gpio_range *range, in ocelot_gpio_set_direction() argument
255 regmap_update_bits(info->map, OCELOT_GPIO_OE, BIT(pin), in ocelot_gpio_set_direction()
262 struct pinctrl_gpio_range *range, in ocelot_gpio_request_enable() argument
267 regmap_update_bits(info->map, OCELOT_GPIO_ALT0, BIT(offset), 0); in ocelot_gpio_request_enable()
268 regmap_update_bits(info->map, OCELOT_GPIO_ALT1, BIT(offset), 0); in ocelot_gpio_request_enable()
313 .name = "ocelot-pinctrl",
333 info->func[f].ngroups = npins; in ocelot_create_group_func_map()
334 info->func[f].groups = devm_kcalloc(dev, in ocelot_create_group_func_map()
338 if (!info->func[f].groups) in ocelot_create_group_func_map()
339 return -ENOMEM; in ocelot_create_group_func_map()
342 info->func[f].groups[i] = ocelot_pins[pins[i]].name; in ocelot_create_group_func_map()
353 ret = ocelot_create_group_func_map(&pdev->dev, info); in ocelot_pinctrl_register()
355 dev_err(&pdev->dev, "Unable to create group func map.\n"); in ocelot_pinctrl_register()
359 info->pctl = devm_pinctrl_register(&pdev->dev, &ocelot_desc, info); in ocelot_pinctrl_register()
360 if (IS_ERR(info->pctl)) { in ocelot_pinctrl_register()
361 dev_err(&pdev->dev, "Failed to register pinctrl\n"); in ocelot_pinctrl_register()
362 return PTR_ERR(info->pctl); in ocelot_pinctrl_register()
373 regmap_read(info->map, OCELOT_GPIO_IN, &val); in ocelot_gpio_get()
384 regmap_write(info->map, OCELOT_GPIO_OUT_SET, BIT(offset)); in ocelot_gpio_set()
386 regmap_write(info->map, OCELOT_GPIO_OUT_CLR, BIT(offset)); in ocelot_gpio_set()
395 regmap_read(info->map, OCELOT_GPIO_OE, &val); in ocelot_gpio_get_direction()
403 return pinctrl_gpio_direction_input(chip->base + offset); in ocelot_gpio_direction_input()
413 regmap_write(info->map, OCELOT_GPIO_OUT_SET, pin); in ocelot_gpio_direction_output()
415 regmap_write(info->map, OCELOT_GPIO_OUT_CLR, pin); in ocelot_gpio_direction_output()
417 return pinctrl_gpio_direction_output(chip->base + offset); in ocelot_gpio_direction_output()
437 regmap_update_bits(info->map, OCELOT_GPIO_INTR_ENA, BIT(gpio), 0); in ocelot_irq_mask()
446 regmap_update_bits(info->map, OCELOT_GPIO_INTR_ENA, BIT(gpio), in ocelot_irq_unmask()
456 regmap_write_bits(info->map, OCELOT_GPIO_INTR, BIT(gpio), BIT(gpio)); in ocelot_irq_ack()
483 return -EINVAL; in ocelot_irq_set_type()
501 unsigned long irqs; in ocelot_irq_handler() local
503 regmap_read(info->map, OCELOT_GPIO_INTR_IDENT, ®); in ocelot_irq_handler()
509 irqs = reg; in ocelot_irq_handler()
511 for_each_set_bit(irq, &irqs, OCELOT_PINS) { in ocelot_irq_handler()
512 generic_handle_irq(irq_linear_revmap(chip->irq.domain, irq)); in ocelot_irq_handler()
524 info->gpio_chip = ocelot_gpiolib_chip; in ocelot_gpiochip_register()
526 gc = &info->gpio_chip; in ocelot_gpiochip_register()
527 gc->ngpio = OCELOT_PINS; in ocelot_gpiochip_register()
528 gc->parent = &pdev->dev; in ocelot_gpiochip_register()
529 gc->base = 0; in ocelot_gpiochip_register()
530 gc->of_node = info->dev->of_node; in ocelot_gpiochip_register()
531 gc->label = "ocelot-gpio"; in ocelot_gpiochip_register()
533 ret = devm_gpiochip_add_data(&pdev->dev, gc, info); in ocelot_gpiochip_register()
537 irq = irq_of_parse_and_map(pdev->dev.of_node, 0); in ocelot_gpiochip_register()
560 { .compatible = "mscc,ocelot-pinctrl" },
566 struct device *dev = &pdev->dev; in ocelot_pinctrl_probe()
573 return -ENOMEM; in ocelot_pinctrl_probe()
582 info->map = devm_regmap_init_mmio(dev, base, in ocelot_pinctrl_probe()
584 if (IS_ERR(info->map)) { in ocelot_pinctrl_probe()
586 return PTR_ERR(info->map); in ocelot_pinctrl_probe()
588 dev_set_drvdata(dev, info->map); in ocelot_pinctrl_probe()
589 info->dev = dev; in ocelot_pinctrl_probe()
604 .name = "pinctrl-ocelot",