Lines Matching refs:gpiochip
83 static int gpiochip_add_irqchip(struct gpio_chip *gpiochip,
86 static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip);
87 static int gpiochip_irqchip_init_valid_mask(struct gpio_chip *gpiochip);
88 static void gpiochip_irqchip_free_valid_mask(struct gpio_chip *gpiochip);
362 static int gpiochip_init_valid_mask(struct gpio_chip *gpiochip) in gpiochip_init_valid_mask() argument
366 struct device_node *np = gpiochip->of_node; in gpiochip_init_valid_mask()
370 gpiochip->need_valid_mask = true; in gpiochip_init_valid_mask()
373 if (!gpiochip->need_valid_mask) in gpiochip_init_valid_mask()
376 gpiochip->valid_mask = gpiochip_allocate_mask(gpiochip); in gpiochip_init_valid_mask()
377 if (!gpiochip->valid_mask) in gpiochip_init_valid_mask()
383 static void gpiochip_free_valid_mask(struct gpio_chip *gpiochip) in gpiochip_free_valid_mask() argument
385 kfree(gpiochip->valid_mask); in gpiochip_free_valid_mask()
386 gpiochip->valid_mask = NULL; in gpiochip_free_valid_mask()
389 bool gpiochip_line_is_valid(const struct gpio_chip *gpiochip, in gpiochip_line_is_valid() argument
393 if (likely(!gpiochip->valid_mask)) in gpiochip_line_is_valid()
395 return test_bit(offset, gpiochip->valid_mask); in gpiochip_line_is_valid()
1619 static int gpiochip_irqchip_init_valid_mask(struct gpio_chip *gpiochip) in gpiochip_irqchip_init_valid_mask() argument
1621 if (!gpiochip->irq.need_valid_mask) in gpiochip_irqchip_init_valid_mask()
1624 gpiochip->irq.valid_mask = gpiochip_allocate_mask(gpiochip); in gpiochip_irqchip_init_valid_mask()
1625 if (!gpiochip->irq.valid_mask) in gpiochip_irqchip_init_valid_mask()
1631 static void gpiochip_irqchip_free_valid_mask(struct gpio_chip *gpiochip) in gpiochip_irqchip_free_valid_mask() argument
1633 kfree(gpiochip->irq.valid_mask); in gpiochip_irqchip_free_valid_mask()
1634 gpiochip->irq.valid_mask = NULL; in gpiochip_irqchip_free_valid_mask()
1637 bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gpiochip, in gpiochip_irqchip_irq_valid() argument
1640 if (!gpiochip_line_is_valid(gpiochip, offset)) in gpiochip_irqchip_irq_valid()
1643 if (likely(!gpiochip->irq.valid_mask)) in gpiochip_irqchip_irq_valid()
1645 return test_bit(offset, gpiochip->irq.valid_mask); in gpiochip_irqchip_irq_valid()
1659 static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip, in gpiochip_set_cascaded_irqchip() argument
1666 if (!gpiochip->irq.domain) { in gpiochip_set_cascaded_irqchip()
1667 chip_err(gpiochip, "called %s before setting up irqchip\n", in gpiochip_set_cascaded_irqchip()
1673 if (gpiochip->can_sleep) { in gpiochip_set_cascaded_irqchip()
1674 chip_err(gpiochip, in gpiochip_set_cascaded_irqchip()
1683 gpiochip); in gpiochip_set_cascaded_irqchip()
1685 gpiochip->irq.parent_irq = parent_irq; in gpiochip_set_cascaded_irqchip()
1686 gpiochip->irq.parents = &gpiochip->irq.parent_irq; in gpiochip_set_cascaded_irqchip()
1687 gpiochip->irq.num_parents = 1; in gpiochip_set_cascaded_irqchip()
1691 for (offset = 0; offset < gpiochip->ngpio; offset++) { in gpiochip_set_cascaded_irqchip()
1692 if (!gpiochip_irqchip_irq_valid(gpiochip, offset)) in gpiochip_set_cascaded_irqchip()
1694 irq_set_parent(irq_find_mapping(gpiochip->irq.domain, offset), in gpiochip_set_cascaded_irqchip()
1709 void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip, in gpiochip_set_chained_irqchip() argument
1714 if (gpiochip->irq.threaded) { in gpiochip_set_chained_irqchip()
1715 chip_err(gpiochip, "tried to chain a threaded gpiochip\n"); in gpiochip_set_chained_irqchip()
1719 gpiochip_set_cascaded_irqchip(gpiochip, irqchip, parent_irq, in gpiochip_set_chained_irqchip()
1731 void gpiochip_set_nested_irqchip(struct gpio_chip *gpiochip, in gpiochip_set_nested_irqchip() argument
1735 gpiochip_set_cascaded_irqchip(gpiochip, irqchip, parent_irq, in gpiochip_set_nested_irqchip()
1849 static int gpiochip_add_irqchip(struct gpio_chip *gpiochip, in gpiochip_add_irqchip() argument
1853 struct irq_chip *irqchip = gpiochip->irq.chip; in gpiochip_add_irqchip()
1862 if (gpiochip->irq.parent_handler && gpiochip->can_sleep) { in gpiochip_add_irqchip()
1863 chip_err(gpiochip, "you cannot have chained interrupts on a chip that may sleep\n"); in gpiochip_add_irqchip()
1867 np = gpiochip->gpiodev->dev.of_node; in gpiochip_add_irqchip()
1868 type = gpiochip->irq.default_type; in gpiochip_add_irqchip()
1879 if (has_acpi_companion(gpiochip->parent) && type != IRQ_TYPE_NONE) { in gpiochip_add_irqchip()
1880 acpi_handle_warn(ACPI_HANDLE(gpiochip->parent), in gpiochip_add_irqchip()
1885 gpiochip->to_irq = gpiochip_to_irq; in gpiochip_add_irqchip()
1886 gpiochip->irq.default_type = type; in gpiochip_add_irqchip()
1887 gpiochip->irq.lock_key = lock_key; in gpiochip_add_irqchip()
1888 gpiochip->irq.request_key = request_key; in gpiochip_add_irqchip()
1890 if (gpiochip->irq.domain_ops) in gpiochip_add_irqchip()
1891 ops = gpiochip->irq.domain_ops; in gpiochip_add_irqchip()
1895 gpiochip->irq.domain = irq_domain_add_simple(np, gpiochip->ngpio, in gpiochip_add_irqchip()
1896 gpiochip->irq.first, in gpiochip_add_irqchip()
1897 ops, gpiochip); in gpiochip_add_irqchip()
1898 if (!gpiochip->irq.domain) in gpiochip_add_irqchip()
1911 if (gpiochip->irq.parent_handler) { in gpiochip_add_irqchip()
1912 void *data = gpiochip->irq.parent_handler_data ?: gpiochip; in gpiochip_add_irqchip()
1914 for (i = 0; i < gpiochip->irq.num_parents; i++) { in gpiochip_add_irqchip()
1920 irq_set_chained_handler_and_data(gpiochip->irq.parents[i], in gpiochip_add_irqchip()
1921 gpiochip->irq.parent_handler, in gpiochip_add_irqchip()
1926 acpi_gpiochip_request_interrupts(gpiochip); in gpiochip_add_irqchip()
1937 static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) in gpiochip_irqchip_remove() argument
1941 acpi_gpiochip_free_interrupts(gpiochip); in gpiochip_irqchip_remove()
1943 if (gpiochip->irq.chip && gpiochip->irq.parent_handler) { in gpiochip_irqchip_remove()
1944 struct gpio_irq_chip *irq = &gpiochip->irq; in gpiochip_irqchip_remove()
1953 if (gpiochip->irq.domain) { in gpiochip_irqchip_remove()
1956 for (offset = 0; offset < gpiochip->ngpio; offset++) { in gpiochip_irqchip_remove()
1957 if (!gpiochip_irqchip_irq_valid(gpiochip, offset)) in gpiochip_irqchip_remove()
1960 irq = irq_find_mapping(gpiochip->irq.domain, offset); in gpiochip_irqchip_remove()
1964 irq_domain_remove(gpiochip->irq.domain); in gpiochip_irqchip_remove()
1967 if (gpiochip->irq.chip) { in gpiochip_irqchip_remove()
1968 gpiochip->irq.chip->irq_request_resources = NULL; in gpiochip_irqchip_remove()
1969 gpiochip->irq.chip->irq_release_resources = NULL; in gpiochip_irqchip_remove()
1970 gpiochip->irq.chip = NULL; in gpiochip_irqchip_remove()
1973 gpiochip_irqchip_free_valid_mask(gpiochip); in gpiochip_irqchip_remove()
2003 int gpiochip_irqchip_add_key(struct gpio_chip *gpiochip, in gpiochip_irqchip_add_key() argument
2014 if (!gpiochip || !irqchip) in gpiochip_irqchip_add_key()
2017 if (!gpiochip->parent) { in gpiochip_irqchip_add_key()
2021 gpiochip->irq.threaded = threaded; in gpiochip_irqchip_add_key()
2022 of_node = gpiochip->parent->of_node; in gpiochip_irqchip_add_key()
2029 if (gpiochip->of_node) in gpiochip_irqchip_add_key()
2030 of_node = gpiochip->of_node; in gpiochip_irqchip_add_key()
2040 if (has_acpi_companion(gpiochip->parent) && type != IRQ_TYPE_NONE) { in gpiochip_irqchip_add_key()
2041 acpi_handle_warn(ACPI_HANDLE(gpiochip->parent), in gpiochip_irqchip_add_key()
2046 gpiochip->irq.chip = irqchip; in gpiochip_irqchip_add_key()
2047 gpiochip->irq.handler = handler; in gpiochip_irqchip_add_key()
2048 gpiochip->irq.default_type = type; in gpiochip_irqchip_add_key()
2049 gpiochip->to_irq = gpiochip_to_irq; in gpiochip_irqchip_add_key()
2050 gpiochip->irq.lock_key = lock_key; in gpiochip_irqchip_add_key()
2051 gpiochip->irq.request_key = request_key; in gpiochip_irqchip_add_key()
2052 gpiochip->irq.domain = irq_domain_add_simple(of_node, in gpiochip_irqchip_add_key()
2053 gpiochip->ngpio, first_irq, in gpiochip_irqchip_add_key()
2054 &gpiochip_domain_ops, gpiochip); in gpiochip_irqchip_add_key()
2055 if (!gpiochip->irq.domain) { in gpiochip_irqchip_add_key()
2056 gpiochip->irq.chip = NULL; in gpiochip_irqchip_add_key()
2070 acpi_gpiochip_request_interrupts(gpiochip); in gpiochip_irqchip_add_key()
2078 static inline int gpiochip_add_irqchip(struct gpio_chip *gpiochip, in gpiochip_add_irqchip() argument
2085 static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) {} in gpiochip_irqchip_remove() argument
2086 static inline int gpiochip_irqchip_init_valid_mask(struct gpio_chip *gpiochip) in gpiochip_irqchip_init_valid_mask() argument
2090 static inline void gpiochip_irqchip_free_valid_mask(struct gpio_chip *gpiochip) in gpiochip_irqchip_free_valid_mask() argument