irq.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * Renesas Solutions Highlander R7780RP-1 Support.
  3. *
  4. * Copyright (C) 2002 Atom Create Engineering Co., Ltd.
  5. * Copyright (C) 2006 Paul Mundt
  6. *
  7. * This file is subject to the terms and conditions of the GNU General Public
  8. * License. See the file "COPYING" in the main directory of this archive
  9. * for more details.
  10. */
  11. #include <linux/init.h>
  12. #include <linux/irq.h>
  13. #include <linux/io.h>
  14. #include <asm/r7780rp.h>
  15. #ifdef CONFIG_SH_R7780MP
  16. static int mask_pos[] = {12, 11, 9, 14, 15, 8, 13, 6, 5, 4, 3, 2, 0, 0, 1, 0};
  17. #else
  18. static int mask_pos[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 5, 6, 4, 0, 1, 2, 0};
  19. #endif
  20. static void enable_r7780rp_irq(unsigned int irq)
  21. {
  22. /* Set priority in IPR back to original value */
  23. ctrl_outw(ctrl_inw(IRLCNTR1) | (1 << mask_pos[irq]), IRLCNTR1);
  24. }
  25. static void disable_r7780rp_irq(unsigned int irq)
  26. {
  27. /* Set the priority in IPR to 0 */
  28. ctrl_outw(ctrl_inw(IRLCNTR1) & (0xffff ^ (1 << mask_pos[irq])),
  29. IRLCNTR1);
  30. }
  31. static struct irq_chip r7780rp_irq_chip __read_mostly = {
  32. .name = "R7780RP",
  33. .mask = disable_r7780rp_irq,
  34. .unmask = enable_r7780rp_irq,
  35. .mask_ack = disable_r7780rp_irq,
  36. };
  37. /*
  38. * Initialize IRQ setting
  39. */
  40. void __init init_r7780rp_IRQ(void)
  41. {
  42. int i;
  43. for (i = 0; i < 15; i++) {
  44. disable_irq_nosync(i);
  45. set_irq_chip_and_handler_name(i, &r7780rp_irq_chip,
  46. handle_level_irq, "level");
  47. enable_r7780rp_irq(i);
  48. }
  49. }