diff options
| author | Marc Zyngier <[email protected]> | 2015-10-13 12:51:35 +0100 | 
|---|---|---|
| committer | Thomas Gleixner <[email protected]> | 2015-10-13 19:01:24 +0200 | 
| commit | 1bf4ddc46c5d6123897a54cea4ffe3e90f30600b (patch) | |
| tree | 6a14bb9d75d3f6dc90fdfd032fcabfa8aa9823c6 /include | |
| parent | c0131f09de8c2d301814cac86d78f643b8ee0574 (diff) | |
irqdomain: Introduce irq_domain_create_{linear, tree}
Just like we have irq_domain_add_{linear,tree} to create a irq domain
identified by an of_node, introduce irq_domain_create_{linear,tree}
that do the same thing, except that they take a struct fwnode_handle.
Existing functions get rewritten in terms of the new ones so that
everything keeps working as before (and __irq_domain_add is now
fwnode_handle based as well).
Signed-off-by: Marc Zyngier <[email protected]>
Reviewed-and-tested-by: Hanjun Guo <[email protected]>
Tested-by: Lorenzo Pieralisi <[email protected]>
Cc: <[email protected]>
Cc: Tomasz Nowicki <[email protected]>
Cc: Suravee Suthikulpanit <[email protected]>
Cc: Graeme Gregory <[email protected]>
Cc: Jake Oshins <[email protected]>
Cc: Jiang Liu <[email protected]>
Cc: Jason Cooper <[email protected]>
Cc: Rafael J. Wysocki <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Thomas Gleixner <[email protected]>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/irqdomain.h | 31 | 
1 files changed, 25 insertions, 6 deletions
| diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h index 7e7842e90d40..995d4c5100d3 100644 --- a/include/linux/irqdomain.h +++ b/include/linux/irqdomain.h @@ -188,7 +188,7 @@ static inline struct device_node *irq_domain_get_of_node(struct irq_domain *d)  }  #ifdef CONFIG_IRQ_DOMAIN -struct irq_domain *__irq_domain_add(struct device_node *of_node, int size, +struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, int size,  				    irq_hw_number_t hwirq_max, int direct_max,  				    const struct irq_domain_ops *ops,  				    void *host_data); @@ -207,11 +207,15 @@ extern struct irq_domain *irq_find_matching_fwnode(struct fwnode_handle *fwnode,  						   enum irq_domain_bus_token bus_token);  extern void irq_set_default_host(struct irq_domain *host); +static inline struct fwnode_handle *of_node_to_fwnode(struct device_node *node) +{ +	return node ? &node->fwnode : NULL; +} +  static inline struct irq_domain *irq_find_matching_host(struct device_node *node,  							enum irq_domain_bus_token bus_token)  { -	return irq_find_matching_fwnode(node ? &node->fwnode : NULL, -					bus_token); +	return irq_find_matching_fwnode(of_node_to_fwnode(node), bus_token);  }  static inline struct irq_domain *irq_find_host(struct device_node *node) @@ -231,14 +235,14 @@ static inline struct irq_domain *irq_domain_add_linear(struct device_node *of_no  					 const struct irq_domain_ops *ops,  					 void *host_data)  { -	return __irq_domain_add(of_node, size, size, 0, ops, host_data); +	return __irq_domain_add(of_node_to_fwnode(of_node), size, size, 0, ops, host_data);  }  static inline struct irq_domain *irq_domain_add_nomap(struct device_node *of_node,  					 unsigned int max_irq,  					 const struct irq_domain_ops *ops,  					 void *host_data)  { -	return __irq_domain_add(of_node, 0, max_irq, max_irq, ops, host_data); +	return __irq_domain_add(of_node_to_fwnode(of_node), 0, max_irq, max_irq, ops, host_data);  }  static inline struct irq_domain *irq_domain_add_legacy_isa(  				struct device_node *of_node, @@ -252,7 +256,22 @@ static inline struct irq_domain *irq_domain_add_tree(struct device_node *of_node  					 const struct irq_domain_ops *ops,  					 void *host_data)  { -	return __irq_domain_add(of_node, 0, ~0, 0, ops, host_data); +	return __irq_domain_add(of_node_to_fwnode(of_node), 0, ~0, 0, ops, host_data); +} + +static inline struct irq_domain *irq_domain_create_linear(struct fwnode_handle *fwnode, +					 unsigned int size, +					 const struct irq_domain_ops *ops, +					 void *host_data) +{ +	return __irq_domain_add(fwnode, size, size, 0, ops, host_data); +} + +static inline struct irq_domain *irq_domain_create_tree(struct fwnode_handle *fwnode, +					 const struct irq_domain_ops *ops, +					 void *host_data) +{ +	return __irq_domain_add(fwnode, 0, ~0, 0, ops, host_data);  }  extern void irq_domain_remove(struct irq_domain *host); |