mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-14 06:17:32 +07:00
gpio: add irq domain activate/deactivate functions
This adds the two new functions gpiochip_irq_domain_activate and gpiochip_irq_domain_deactivate that can be used as the activate and deactivate functions in the struct irq_domain_ops. This is for situations where only gpiochip_{lock,unlock}_as_irq needs to be called. SPMI and SSBI GPIO are two users that will initially use these functions. Signed-off-by: Brian Masney <masneyb@onstation.org> Suggested-by: Stephen Boyd <sboyd@kernel.org> Reviewed-by: Stephen Boyd <sboyd@kernel.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
12a9eeaebb
commit
ef74f70e5a
@ -1775,6 +1775,43 @@ static const struct irq_domain_ops gpiochip_domain_ops = {
|
||||
.xlate = irq_domain_xlate_twocell,
|
||||
};
|
||||
|
||||
/**
|
||||
* gpiochip_irq_domain_activate() - Lock a GPIO to be used as an IRQ
|
||||
* @domain: The IRQ domain used by this IRQ chip
|
||||
* @data: Outermost irq_data associated with the IRQ
|
||||
* @reserve: If set, only reserve an interrupt vector instead of assigning one
|
||||
*
|
||||
* This function is a wrapper that calls gpiochip_lock_as_irq() and is to be
|
||||
* used as the activate function for the &struct irq_domain_ops. The host_data
|
||||
* for the IRQ domain must be the &struct gpio_chip.
|
||||
*/
|
||||
int gpiochip_irq_domain_activate(struct irq_domain *domain,
|
||||
struct irq_data *data, bool reserve)
|
||||
{
|
||||
struct gpio_chip *chip = domain->host_data;
|
||||
|
||||
return gpiochip_lock_as_irq(chip, data->hwirq);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiochip_irq_domain_activate);
|
||||
|
||||
/**
|
||||
* gpiochip_irq_domain_deactivate() - Unlock a GPIO used as an IRQ
|
||||
* @domain: The IRQ domain used by this IRQ chip
|
||||
* @data: Outermost irq_data associated with the IRQ
|
||||
*
|
||||
* This function is a wrapper that will call gpiochip_unlock_as_irq() and is to
|
||||
* be used as the deactivate function for the &struct irq_domain_ops. The
|
||||
* host_data for the IRQ domain must be the &struct gpio_chip.
|
||||
*/
|
||||
void gpiochip_irq_domain_deactivate(struct irq_domain *domain,
|
||||
struct irq_data *data)
|
||||
{
|
||||
struct gpio_chip *chip = domain->host_data;
|
||||
|
||||
return gpiochip_unlock_as_irq(chip, data->hwirq);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiochip_irq_domain_deactivate);
|
||||
|
||||
static int gpiochip_to_irq(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
if (!gpiochip_irqchip_irq_valid(chip, offset))
|
||||
|
@ -472,6 +472,11 @@ int gpiochip_irq_map(struct irq_domain *d, unsigned int irq,
|
||||
irq_hw_number_t hwirq);
|
||||
void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq);
|
||||
|
||||
int gpiochip_irq_domain_activate(struct irq_domain *domain,
|
||||
struct irq_data *data, bool reserve);
|
||||
void gpiochip_irq_domain_deactivate(struct irq_domain *domain,
|
||||
struct irq_data *data);
|
||||
|
||||
void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
|
||||
struct irq_chip *irqchip,
|
||||
unsigned int parent_irq,
|
||||
|
Loading…
Reference in New Issue
Block a user