gpiolib: Add support for the irqdomain which doesn't use irq_fwspec as arg
Some gpio's parent irqdomain may not use the struct irq_fwspec as argument, such as msi irqdomain. So rename the callback populate_parent_fwspec() to populate_parent_alloc_arg() and make it allocate and populate the specific struct which is needed by the parent irqdomain. Signed-off-by: Kevin Hao <haokexin@gmail.com> Link: https://lore.kernel.org/r/20200114082821.14015-3-haokexin@gmail.com Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
@@ -94,16 +94,15 @@ struct gpio_irq_chip {
|
||||
unsigned int *parent_type);
|
||||
|
||||
/**
|
||||
* @populate_parent_fwspec:
|
||||
* @populate_parent_alloc_arg :
|
||||
*
|
||||
* This optional callback populates the &struct irq_fwspec for the
|
||||
* parent's IRQ domain. If this is not specified, then
|
||||
* This optional callback allocates and populates the specific struct
|
||||
* for the parent's IRQ domain. If this is not specified, then
|
||||
* &gpiochip_populate_parent_fwspec_twocell will be used. A four-cell
|
||||
* variant named &gpiochip_populate_parent_fwspec_fourcell is also
|
||||
* available.
|
||||
*/
|
||||
void (*populate_parent_fwspec)(struct gpio_chip *chip,
|
||||
struct irq_fwspec *fwspec,
|
||||
void *(*populate_parent_alloc_arg)(struct gpio_chip *chip,
|
||||
unsigned int parent_hwirq,
|
||||
unsigned int parent_type);
|
||||
|
||||
@@ -537,26 +536,22 @@ struct bgpio_pdata {
|
||||
|
||||
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
|
||||
|
||||
void gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *chip,
|
||||
struct irq_fwspec *fwspec,
|
||||
void *gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *chip,
|
||||
unsigned int parent_hwirq,
|
||||
unsigned int parent_type);
|
||||
void gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *chip,
|
||||
struct irq_fwspec *fwspec,
|
||||
void *gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *chip,
|
||||
unsigned int parent_hwirq,
|
||||
unsigned int parent_type);
|
||||
|
||||
#else
|
||||
|
||||
static inline void gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *chip,
|
||||
struct irq_fwspec *fwspec,
|
||||
static inline void *gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *chip,
|
||||
unsigned int parent_hwirq,
|
||||
unsigned int parent_type)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *chip,
|
||||
struct irq_fwspec *fwspec,
|
||||
static inline void *gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *chip,
|
||||
unsigned int parent_hwirq,
|
||||
unsigned int parent_type)
|
||||
{
|
||||
|
Reference in New Issue
Block a user