irq_domain/powerpc: Replace custom xlate functions with library functions
This patch converts a number of the powerpc drivers to use the common library of irq_domain xlate functions, dropping a bunch of lines in the process. v5: - Remove tsi108 changes from patch Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Cc: Rob Herring <rob.herring@calxeda.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Milton Miller <miltonm@bga.com> Tested-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
parent
9f70b8eb3c
commit
ff8c3ab816
7 changed files with 7 additions and 97 deletions
|
@ -288,21 +288,10 @@ static int pmac_pic_host_map(struct irq_domain *h, unsigned int virq,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pmac_pic_host_xlate(struct irq_domain *h, struct device_node *ct,
|
|
||||||
const u32 *intspec, unsigned int intsize,
|
|
||||||
irq_hw_number_t *out_hwirq,
|
|
||||||
unsigned int *out_flags)
|
|
||||||
|
|
||||||
{
|
|
||||||
*out_flags = IRQ_TYPE_NONE;
|
|
||||||
*out_hwirq = *intspec;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct irq_domain_ops pmac_pic_host_ops = {
|
static const struct irq_domain_ops pmac_pic_host_ops = {
|
||||||
.match = pmac_pic_host_match,
|
.match = pmac_pic_host_match,
|
||||||
.map = pmac_pic_host_map,
|
.map = pmac_pic_host_map,
|
||||||
.xlate = pmac_pic_host_xlate,
|
.xlate = irq_domain_xlate_onecell,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __init pmac_pic_probe_oldstyle(void)
|
static void __init pmac_pic_probe_oldstyle(void)
|
||||||
|
|
|
@ -196,20 +196,9 @@ static int opb_host_map(struct irq_domain *host, unsigned int virq,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int opb_host_xlate(struct irq_domain *host, struct device_node *dn,
|
|
||||||
const u32 *intspec, unsigned int intsize,
|
|
||||||
irq_hw_number_t *out_hwirq, unsigned int *out_type)
|
|
||||||
{
|
|
||||||
/* Interrupt size must == 2 */
|
|
||||||
BUG_ON(intsize != 2);
|
|
||||||
*out_hwirq = intspec[0];
|
|
||||||
*out_type = intspec[1];
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct irq_domain_ops opb_host_ops = {
|
static const struct irq_domain_ops opb_host_ops = {
|
||||||
.map = opb_host_map,
|
.map = opb_host_map,
|
||||||
.xlate = opb_host_xlate,
|
.xlate = irq_domain_xlate_twocell,
|
||||||
};
|
};
|
||||||
|
|
||||||
irqreturn_t opb_irq_handler(int irq, void *private)
|
irqreturn_t opb_irq_handler(int irq, void *private)
|
||||||
|
|
|
@ -224,21 +224,9 @@ static int cpm2_pic_host_map(struct irq_domain *h, unsigned int virq,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpm2_pic_host_xlate(struct irq_domain *h, struct device_node *ct,
|
|
||||||
const u32 *intspec, unsigned int intsize,
|
|
||||||
irq_hw_number_t *out_hwirq, unsigned int *out_flags)
|
|
||||||
{
|
|
||||||
*out_hwirq = intspec[0];
|
|
||||||
if (intsize > 1)
|
|
||||||
*out_flags = intspec[1];
|
|
||||||
else
|
|
||||||
*out_flags = IRQ_TYPE_NONE;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct irq_domain_ops cpm2_pic_host_ops = {
|
static const struct irq_domain_ops cpm2_pic_host_ops = {
|
||||||
.map = cpm2_pic_host_map,
|
.map = cpm2_pic_host_map,
|
||||||
.xlate = cpm2_pic_host_xlate,
|
.xlate = irq_domain_xlate_onetwocell,
|
||||||
};
|
};
|
||||||
|
|
||||||
void cpm2_pic_init(struct device_node *node)
|
void cpm2_pic_init(struct device_node *node)
|
||||||
|
|
|
@ -692,26 +692,10 @@ static int ipic_host_map(struct irq_domain *h, unsigned int virq,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ipic_host_xlate(struct irq_domain *h, struct device_node *ct,
|
|
||||||
const u32 *intspec, unsigned int intsize,
|
|
||||||
irq_hw_number_t *out_hwirq, unsigned int *out_flags)
|
|
||||||
|
|
||||||
{
|
|
||||||
/* interrupt sense values coming from the device tree equal either
|
|
||||||
* LEVEL_LOW (low assertion) or EDGE_FALLING (high-to-low change)
|
|
||||||
*/
|
|
||||||
*out_hwirq = intspec[0];
|
|
||||||
if (intsize > 1)
|
|
||||||
*out_flags = intspec[1];
|
|
||||||
else
|
|
||||||
*out_flags = IRQ_TYPE_NONE;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct irq_domain_ops ipic_host_ops = {
|
static struct irq_domain_ops ipic_host_ops = {
|
||||||
.match = ipic_host_match,
|
.match = ipic_host_match,
|
||||||
.map = ipic_host_map,
|
.map = ipic_host_map,
|
||||||
.xlate = ipic_host_xlate,
|
.xlate = irq_domain_xlate_onetwocell,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ipic * __init ipic_init(struct device_node *node, unsigned int flags)
|
struct ipic * __init ipic_init(struct device_node *node, unsigned int flags)
|
||||||
|
|
|
@ -272,23 +272,10 @@ static int qe_ic_host_map(struct irq_domain *h, unsigned int virq,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int qe_ic_host_xlate(struct irq_domain *h, struct device_node *ct,
|
|
||||||
const u32 * intspec, unsigned int intsize,
|
|
||||||
irq_hw_number_t * out_hwirq,
|
|
||||||
unsigned int *out_flags)
|
|
||||||
{
|
|
||||||
*out_hwirq = intspec[0];
|
|
||||||
if (intsize > 1)
|
|
||||||
*out_flags = intspec[1];
|
|
||||||
else
|
|
||||||
*out_flags = IRQ_TYPE_NONE;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct irq_domain_ops qe_ic_host_ops = {
|
static struct irq_domain_ops qe_ic_host_ops = {
|
||||||
.match = qe_ic_host_match,
|
.match = qe_ic_host_match,
|
||||||
.map = qe_ic_host_map,
|
.map = qe_ic_host_map,
|
||||||
.xlate = qe_ic_host_xlate,
|
.xlate = irq_domain_xlate_onetwocell,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Return an interrupt vector or NO_IRQ if no interrupt is pending. */
|
/* Return an interrupt vector or NO_IRQ if no interrupt is pending. */
|
||||||
|
|
|
@ -190,21 +190,9 @@ static int uic_host_map(struct irq_domain *h, unsigned int virq,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int uic_host_xlate(struct irq_domain *h, struct device_node *ct,
|
|
||||||
const u32 *intspec, unsigned int intsize,
|
|
||||||
irq_hw_number_t *out_hwirq, unsigned int *out_type)
|
|
||||||
|
|
||||||
{
|
|
||||||
/* UIC intspecs must have 2 cells */
|
|
||||||
BUG_ON(intsize != 2);
|
|
||||||
*out_hwirq = intspec[0];
|
|
||||||
*out_type = intspec[1];
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct irq_domain_ops uic_host_ops = {
|
static struct irq_domain_ops uic_host_ops = {
|
||||||
.map = uic_host_map,
|
.map = uic_host_map,
|
||||||
.xlate = uic_host_xlate,
|
.xlate = irq_domain_xlate_twocell,
|
||||||
};
|
};
|
||||||
|
|
||||||
void uic_irq_cascade(unsigned int virq, struct irq_desc *desc)
|
void uic_irq_cascade(unsigned int virq, struct irq_desc *desc)
|
||||||
|
|
|
@ -296,24 +296,9 @@ static int mpc8xxx_gpio_irq_map(struct irq_domain *h, unsigned int virq,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mpc8xxx_gpio_irq_xlate(struct irq_domain *h, struct device_node *ct,
|
|
||||||
const u32 *intspec, unsigned int intsize,
|
|
||||||
irq_hw_number_t *out_hwirq,
|
|
||||||
unsigned int *out_flags)
|
|
||||||
|
|
||||||
{
|
|
||||||
/* interrupt sense values coming from the device tree equal either
|
|
||||||
* EDGE_FALLING or EDGE_BOTH
|
|
||||||
*/
|
|
||||||
*out_hwirq = intspec[0];
|
|
||||||
*out_flags = intspec[1];
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct irq_domain_ops mpc8xxx_gpio_irq_ops = {
|
static struct irq_domain_ops mpc8xxx_gpio_irq_ops = {
|
||||||
.map = mpc8xxx_gpio_irq_map,
|
.map = mpc8xxx_gpio_irq_map,
|
||||||
.xlate = mpc8xxx_gpio_irq_xlate,
|
.xlate = irq_domain_xlate_twocell,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct of_device_id mpc8xxx_gpio_ids[] __initdata = {
|
static struct of_device_id mpc8xxx_gpio_ids[] __initdata = {
|
||||||
|
|
Loading…
Reference in a new issue