Lines Matching refs:gpiochip

85 static int gpiochip_add_irqchip(struct gpio_chip *gpiochip,
88 static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip);
89 static int gpiochip_irqchip_init_hw(struct gpio_chip *gpiochip);
90 static int gpiochip_irqchip_init_valid_mask(struct gpio_chip *gpiochip);
91 static void gpiochip_irqchip_free_valid_mask(struct gpio_chip *gpiochip);
387 static void gpiochip_free_valid_mask(struct gpio_chip *gpiochip) in gpiochip_free_valid_mask() argument
389 bitmap_free(gpiochip->valid_mask); in gpiochip_free_valid_mask()
390 gpiochip->valid_mask = NULL; in gpiochip_free_valid_mask()
393 bool gpiochip_line_is_valid(const struct gpio_chip *gpiochip, in gpiochip_line_is_valid() argument
397 if (likely(!gpiochip->valid_mask)) in gpiochip_line_is_valid()
399 return test_bit(offset, gpiochip->valid_mask); in gpiochip_line_is_valid()
1656 static void gpiochip_irqchip_free_valid_mask(struct gpio_chip *gpiochip) in gpiochip_irqchip_free_valid_mask() argument
1658 bitmap_free(gpiochip->irq.valid_mask); in gpiochip_irqchip_free_valid_mask()
1659 gpiochip->irq.valid_mask = NULL; in gpiochip_irqchip_free_valid_mask()
1662 bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gpiochip, in gpiochip_irqchip_irq_valid() argument
1665 if (!gpiochip_line_is_valid(gpiochip, offset)) in gpiochip_irqchip_irq_valid()
1668 if (likely(!gpiochip->irq.valid_mask)) in gpiochip_irqchip_irq_valid()
1670 return test_bit(offset, gpiochip->irq.valid_mask); in gpiochip_irqchip_irq_valid()
1729 void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip, in gpiochip_set_chained_irqchip() argument
1734 if (gpiochip->irq.threaded) { in gpiochip_set_chained_irqchip()
1735 chip_err(gpiochip, "tried to chain a threaded gpiochip\n"); in gpiochip_set_chained_irqchip()
1739 gpiochip_set_cascaded_irqchip(gpiochip, parent_irq, parent_handler); in gpiochip_set_chained_irqchip()
1750 void gpiochip_set_nested_irqchip(struct gpio_chip *gpiochip, in gpiochip_set_nested_irqchip() argument
1754 gpiochip_set_cascaded_irqchip(gpiochip, parent_irq, NULL); in gpiochip_set_nested_irqchip()
2194 static void gpiochip_set_irq_hooks(struct gpio_chip *gpiochip) in gpiochip_set_irq_hooks() argument
2196 struct irq_chip *irqchip = gpiochip->irq.chip; in gpiochip_set_irq_hooks()
2203 if (WARN_ON(gpiochip->irq.irq_enable)) in gpiochip_set_irq_hooks()
2211 chip_info(gpiochip, in gpiochip_set_irq_hooks()
2215 gpiochip->irq.irq_enable = irqchip->irq_enable; in gpiochip_set_irq_hooks()
2216 gpiochip->irq.irq_disable = irqchip->irq_disable; in gpiochip_set_irq_hooks()
2227 static int gpiochip_add_irqchip(struct gpio_chip *gpiochip, in gpiochip_add_irqchip() argument
2231 struct irq_chip *irqchip = gpiochip->irq.chip; in gpiochip_add_irqchip()
2240 if (gpiochip->irq.parent_handler && gpiochip->can_sleep) { in gpiochip_add_irqchip()
2241 chip_err(gpiochip, "you cannot have chained interrupts on a chip that may sleep\n"); in gpiochip_add_irqchip()
2245 np = gpiochip->gpiodev->dev.of_node; in gpiochip_add_irqchip()
2246 type = gpiochip->irq.default_type; in gpiochip_add_irqchip()
2257 if (has_acpi_companion(gpiochip->parent) && type != IRQ_TYPE_NONE) { in gpiochip_add_irqchip()
2258 acpi_handle_warn(ACPI_HANDLE(gpiochip->parent), in gpiochip_add_irqchip()
2263 gpiochip->to_irq = gpiochip_to_irq; in gpiochip_add_irqchip()
2264 gpiochip->irq.default_type = type; in gpiochip_add_irqchip()
2265 gpiochip->irq.lock_key = lock_key; in gpiochip_add_irqchip()
2266 gpiochip->irq.request_key = request_key; in gpiochip_add_irqchip()
2269 if (gpiochip_hierarchy_is_hierarchical(gpiochip)) { in gpiochip_add_irqchip()
2270 int ret = gpiochip_hierarchy_add_domain(gpiochip); in gpiochip_add_irqchip()
2275 if (gpiochip->irq.domain_ops) in gpiochip_add_irqchip()
2276 ops = gpiochip->irq.domain_ops; in gpiochip_add_irqchip()
2280 gpiochip->irq.domain = irq_domain_add_simple(np, in gpiochip_add_irqchip()
2281 gpiochip->ngpio, in gpiochip_add_irqchip()
2282 gpiochip->irq.first, in gpiochip_add_irqchip()
2283 ops, gpiochip); in gpiochip_add_irqchip()
2284 if (!gpiochip->irq.domain) in gpiochip_add_irqchip()
2288 if (gpiochip->irq.parent_handler) { in gpiochip_add_irqchip()
2289 void *data = gpiochip->irq.parent_handler_data ?: gpiochip; in gpiochip_add_irqchip()
2291 for (i = 0; i < gpiochip->irq.num_parents; i++) { in gpiochip_add_irqchip()
2297 irq_set_chained_handler_and_data(gpiochip->irq.parents[i], in gpiochip_add_irqchip()
2298 gpiochip->irq.parent_handler, in gpiochip_add_irqchip()
2303 gpiochip_set_irq_hooks(gpiochip); in gpiochip_add_irqchip()
2305 acpi_gpiochip_request_interrupts(gpiochip); in gpiochip_add_irqchip()
2316 static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) in gpiochip_irqchip_remove() argument
2318 struct irq_chip *irqchip = gpiochip->irq.chip; in gpiochip_irqchip_remove()
2321 acpi_gpiochip_free_interrupts(gpiochip); in gpiochip_irqchip_remove()
2323 if (irqchip && gpiochip->irq.parent_handler) { in gpiochip_irqchip_remove()
2324 struct gpio_irq_chip *irq = &gpiochip->irq; in gpiochip_irqchip_remove()
2333 if (gpiochip->irq.domain) { in gpiochip_irqchip_remove()
2336 for (offset = 0; offset < gpiochip->ngpio; offset++) { in gpiochip_irqchip_remove()
2337 if (!gpiochip_irqchip_irq_valid(gpiochip, offset)) in gpiochip_irqchip_remove()
2340 irq = irq_find_mapping(gpiochip->irq.domain, offset); in gpiochip_irqchip_remove()
2344 irq_domain_remove(gpiochip->irq.domain); in gpiochip_irqchip_remove()
2353 irqchip->irq_enable = gpiochip->irq.irq_enable; in gpiochip_irqchip_remove()
2354 irqchip->irq_disable = gpiochip->irq.irq_disable; in gpiochip_irqchip_remove()
2357 gpiochip->irq.irq_enable = NULL; in gpiochip_irqchip_remove()
2358 gpiochip->irq.irq_disable = NULL; in gpiochip_irqchip_remove()
2359 gpiochip->irq.chip = NULL; in gpiochip_irqchip_remove()
2361 gpiochip_irqchip_free_valid_mask(gpiochip); in gpiochip_irqchip_remove()
2391 int gpiochip_irqchip_add_key(struct gpio_chip *gpiochip, in gpiochip_irqchip_add_key() argument
2402 if (!gpiochip || !irqchip) in gpiochip_irqchip_add_key()
2405 if (!gpiochip->parent) { in gpiochip_irqchip_add_key()
2409 gpiochip->irq.threaded = threaded; in gpiochip_irqchip_add_key()
2410 of_node = gpiochip->parent->of_node; in gpiochip_irqchip_add_key()
2417 if (gpiochip->of_node) in gpiochip_irqchip_add_key()
2418 of_node = gpiochip->of_node; in gpiochip_irqchip_add_key()
2428 if (has_acpi_companion(gpiochip->parent) && type != IRQ_TYPE_NONE) { in gpiochip_irqchip_add_key()
2429 acpi_handle_warn(ACPI_HANDLE(gpiochip->parent), in gpiochip_irqchip_add_key()
2434 gpiochip->irq.chip = irqchip; in gpiochip_irqchip_add_key()
2435 gpiochip->irq.handler = handler; in gpiochip_irqchip_add_key()
2436 gpiochip->irq.default_type = type; in gpiochip_irqchip_add_key()
2437 gpiochip->to_irq = gpiochip_to_irq; in gpiochip_irqchip_add_key()
2438 gpiochip->irq.lock_key = lock_key; in gpiochip_irqchip_add_key()
2439 gpiochip->irq.request_key = request_key; in gpiochip_irqchip_add_key()
2440 gpiochip->irq.domain = irq_domain_add_simple(of_node, in gpiochip_irqchip_add_key()
2441 gpiochip->ngpio, first_irq, in gpiochip_irqchip_add_key()
2442 &gpiochip_domain_ops, gpiochip); in gpiochip_irqchip_add_key()
2443 if (!gpiochip->irq.domain) { in gpiochip_irqchip_add_key()
2444 gpiochip->irq.chip = NULL; in gpiochip_irqchip_add_key()
2448 gpiochip_set_irq_hooks(gpiochip); in gpiochip_irqchip_add_key()
2450 acpi_gpiochip_request_interrupts(gpiochip); in gpiochip_irqchip_add_key()
2458 static inline int gpiochip_add_irqchip(struct gpio_chip *gpiochip, in gpiochip_add_irqchip() argument
2464 static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) {} in gpiochip_irqchip_remove() argument
2466 static inline int gpiochip_irqchip_init_hw(struct gpio_chip *gpiochip) in gpiochip_irqchip_init_hw() argument
2471 static inline int gpiochip_irqchip_init_valid_mask(struct gpio_chip *gpiochip) in gpiochip_irqchip_init_valid_mask() argument
2475 static inline void gpiochip_irqchip_free_valid_mask(struct gpio_chip *gpiochip) in gpiochip_irqchip_free_valid_mask() argument