Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+7 -97
+1 -12
arch/powerpc/platforms/powermac/pic.c
··· 288 288 return 0; 289 289 } 290 290 291 - static int pmac_pic_host_xlate(struct irq_domain *h, struct device_node *ct, 292 - const u32 *intspec, unsigned int intsize, 293 - irq_hw_number_t *out_hwirq, 294 - unsigned int *out_flags) 295 - 296 - { 297 - *out_flags = IRQ_TYPE_NONE; 298 - *out_hwirq = *intspec; 299 - return 0; 300 - } 301 - 302 291 static const struct irq_domain_ops pmac_pic_host_ops = { 303 292 .match = pmac_pic_host_match, 304 293 .map = pmac_pic_host_map, 305 - .xlate = pmac_pic_host_xlate, 294 + .xlate = irq_domain_xlate_onecell, 306 295 }; 307 296 308 297 static void __init pmac_pic_probe_oldstyle(void)
+1 -12
arch/powerpc/platforms/wsp/opb_pic.c
··· 196 196 return 0; 197 197 } 198 198 199 - static int opb_host_xlate(struct irq_domain *host, struct device_node *dn, 200 - const u32 *intspec, unsigned int intsize, 201 - irq_hw_number_t *out_hwirq, unsigned int *out_type) 202 - { 203 - /* Interrupt size must == 2 */ 204 - BUG_ON(intsize != 2); 205 - *out_hwirq = intspec[0]; 206 - *out_type = intspec[1]; 207 - return 0; 208 - } 209 - 210 199 static const struct irq_domain_ops opb_host_ops = { 211 200 .map = opb_host_map, 212 - .xlate = opb_host_xlate, 201 + .xlate = irq_domain_xlate_twocell, 213 202 }; 214 203 215 204 irqreturn_t opb_irq_handler(int irq, void *private)
+1 -13
arch/powerpc/sysdev/cpm2_pic.c
··· 224 224 return 0; 225 225 } 226 226 227 - static int cpm2_pic_host_xlate(struct irq_domain *h, struct device_node *ct, 228 - const u32 *intspec, unsigned int intsize, 229 - irq_hw_number_t *out_hwirq, unsigned int *out_flags) 230 - { 231 - *out_hwirq = intspec[0]; 232 - if (intsize > 1) 233 - *out_flags = intspec[1]; 234 - else 235 - *out_flags = IRQ_TYPE_NONE; 236 - return 0; 237 - } 238 - 239 227 static const struct irq_domain_ops cpm2_pic_host_ops = { 240 228 .map = cpm2_pic_host_map, 241 - .xlate = cpm2_pic_host_xlate, 229 + .xlate = irq_domain_xlate_onetwocell, 242 230 }; 243 231 244 232 void cpm2_pic_init(struct device_node *node)
+1 -17
arch/powerpc/sysdev/ipic.c
··· 692 692 return 0; 693 693 } 694 694 695 - static int ipic_host_xlate(struct irq_domain *h, struct device_node *ct, 696 - const u32 *intspec, unsigned int intsize, 697 - irq_hw_number_t *out_hwirq, unsigned int *out_flags) 698 - 699 - { 700 - /* interrupt sense values coming from the device tree equal either 701 - * LEVEL_LOW (low assertion) or EDGE_FALLING (high-to-low change) 702 - */ 703 - *out_hwirq = intspec[0]; 704 - if (intsize > 1) 705 - *out_flags = intspec[1]; 706 - else 707 - *out_flags = IRQ_TYPE_NONE; 708 - return 0; 709 - } 710 - 711 695 static struct irq_domain_ops ipic_host_ops = { 712 696 .match = ipic_host_match, 713 697 .map = ipic_host_map, 714 - .xlate = ipic_host_xlate, 698 + .xlate = irq_domain_xlate_onetwocell, 715 699 }; 716 700 717 701 struct ipic * __init ipic_init(struct device_node *node, unsigned int flags)
+1 -14
arch/powerpc/sysdev/qe_lib/qe_ic.c
··· 272 272 return 0; 273 273 } 274 274 275 - static int qe_ic_host_xlate(struct irq_domain *h, struct device_node *ct, 276 - const u32 * intspec, unsigned int intsize, 277 - irq_hw_number_t * out_hwirq, 278 - unsigned int *out_flags) 279 - { 280 - *out_hwirq = intspec[0]; 281 - if (intsize > 1) 282 - *out_flags = intspec[1]; 283 - else 284 - *out_flags = IRQ_TYPE_NONE; 285 - return 0; 286 - } 287 - 288 275 static struct irq_domain_ops qe_ic_host_ops = { 289 276 .match = qe_ic_host_match, 290 277 .map = qe_ic_host_map, 291 - .xlate = qe_ic_host_xlate, 278 + .xlate = irq_domain_xlate_onetwocell, 292 279 }; 293 280 294 281 /* Return an interrupt vector or NO_IRQ if no interrupt is pending. */
+1 -13
arch/powerpc/sysdev/uic.c
··· 190 190 return 0; 191 191 } 192 192 193 - static int uic_host_xlate(struct irq_domain *h, struct device_node *ct, 194 - const u32 *intspec, unsigned int intsize, 195 - irq_hw_number_t *out_hwirq, unsigned int *out_type) 196 - 197 - { 198 - /* UIC intspecs must have 2 cells */ 199 - BUG_ON(intsize != 2); 200 - *out_hwirq = intspec[0]; 201 - *out_type = intspec[1]; 202 - return 0; 203 - } 204 - 205 193 static struct irq_domain_ops uic_host_ops = { 206 194 .map = uic_host_map, 207 - .xlate = uic_host_xlate, 195 + .xlate = irq_domain_xlate_twocell, 208 196 }; 209 197 210 198 void uic_irq_cascade(unsigned int virq, struct irq_desc *desc)
+1 -16
drivers/gpio/gpio-mpc8xxx.c
··· 296 296 return 0; 297 297 } 298 298 299 - static int mpc8xxx_gpio_irq_xlate(struct irq_domain *h, struct device_node *ct, 300 - const u32 *intspec, unsigned int intsize, 301 - irq_hw_number_t *out_hwirq, 302 - unsigned int *out_flags) 303 - 304 - { 305 - /* interrupt sense values coming from the device tree equal either 306 - * EDGE_FALLING or EDGE_BOTH 307 - */ 308 - *out_hwirq = intspec[0]; 309 - *out_flags = intspec[1]; 310 - 311 - return 0; 312 - } 313 - 314 299 static struct irq_domain_ops mpc8xxx_gpio_irq_ops = { 315 300 .map = mpc8xxx_gpio_irq_map, 316 - .xlate = mpc8xxx_gpio_irq_xlate, 301 + .xlate = irq_domain_xlate_twocell, 317 302 }; 318 303 319 304 static struct of_device_id mpc8xxx_gpio_ids[] __initdata = {