setup-sh7709.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /*
  2. * SH7707/SH7709 Setup
  3. *
  4. * Copyright (C) 2006 Paul Mundt
  5. *
  6. * This file is subject to the terms and conditions of the GNU General Public
  7. * License. See the file "COPYING" in the main directory of this archive
  8. * for more details.
  9. */
  10. #include <linux/platform_device.h>
  11. #include <linux/init.h>
  12. #include <linux/serial.h>
  13. #include <asm/sci.h>
  14. static struct plat_sci_port sci_platform_data[] = {
  15. {
  16. .mapbase = 0xfffffe80,
  17. .flags = UPF_BOOT_AUTOCONF,
  18. .type = PORT_SCI,
  19. .irqs = { 23, 24, 25, 0 },
  20. }, {
  21. .mapbase = 0xa4000150,
  22. .flags = UPF_BOOT_AUTOCONF,
  23. .type = PORT_SCIF,
  24. .irqs = { 56, 57, 59, 58 },
  25. }, {
  26. .mapbase = 0xa4000140,
  27. .flags = UPF_BOOT_AUTOCONF,
  28. .type = PORT_IRDA,
  29. .irqs = { 52, 53, 55, 54 },
  30. }, {
  31. .flags = 0,
  32. }
  33. };
  34. static struct platform_device sci_device = {
  35. .name = "sh-sci",
  36. .id = -1,
  37. .dev = {
  38. .platform_data = sci_platform_data,
  39. },
  40. };
  41. static struct platform_device *sh7709_devices[] __initdata = {
  42. &sci_device,
  43. };
  44. static int __init sh7709_devices_setup(void)
  45. {
  46. return platform_add_devices(sh7709_devices,
  47. ARRAY_SIZE(sh7709_devices));
  48. }
  49. __initcall(sh7709_devices_setup);
  50. static struct ipr_data ipr_irq_table[] = {
  51. { 16, 0, 12, 2 }, /* TMU TUNI0 */
  52. { 17, 0, 8, 4 }, /* TMU TUNI1 */
  53. { 18, 0, 4, 1 }, /* TMU TUNI1 */
  54. { 19, 0, 4, 1 }, /* TMU TUNI1 */
  55. { 20, 0, 0, 2 }, /* RTC CUI */
  56. { 21, 0, 0, 2 }, /* RTC CUI */
  57. { 22, 0, 0, 2 }, /* RTC CUI */
  58. { 23, 1, 4, 3 }, /* SCI */
  59. { 24, 1, 4, 3 }, /* SCI */
  60. { 25, 1, 4, 3 }, /* SCI */
  61. { 26, 1, 4, 3 }, /* SCI */
  62. { 27, 1, 12, 3 }, /* WDT ITI */
  63. { 32, 2, 0, 1 }, /* IRQ 0 */
  64. { 33, 2, 4, 1 }, /* IRQ 1 */
  65. { 34, 2, 8, 1 }, /* IRQ 2 APM */
  66. { 35, 2, 12, 1 }, /* IRQ 3 TOUCHSCREEN */
  67. { 36, 3, 0, 1 }, /* IRQ 4 */
  68. { 37, 3, 4, 1 }, /* IRQ 5 */
  69. { 48, 4, 12, 7 }, /* DMA */
  70. { 49, 4, 12, 7 }, /* DMA */
  71. { 50, 4, 12, 7 }, /* DMA */
  72. { 51, 4, 12, 7 }, /* DMA */
  73. { 52, 4, 8, 3 }, /* IRDA */
  74. { 53, 4, 8, 3 }, /* IRDA */
  75. { 54, 4, 8, 3 }, /* IRDA */
  76. { 55, 4, 8, 3 }, /* IRDA */
  77. { 56, 4, 4, 3 }, /* SCIF */
  78. { 57, 4, 4, 3 }, /* SCIF */
  79. { 58, 4, 4, 3 }, /* SCIF */
  80. { 59, 4, 4, 3 }, /* SCIF */
  81. };
  82. static unsigned long ipr_offsets[] = {
  83. 0xfffffee2, /* 0: IPRA */
  84. 0xfffffee4, /* 1: IPRB */
  85. 0xa4000016, /* 2: IPRC */
  86. 0xa4000018, /* 3: IPRD */
  87. 0xa400001a, /* 4: IPRE */
  88. };
  89. static struct ipr_desc ipr_irq_desc = {
  90. .ipr_offsets = ipr_offsets,
  91. .nr_offsets = ARRAY_SIZE(ipr_offsets),
  92. .ipr_data = ipr_irq_table,
  93. .nr_irqs = ARRAY_SIZE(ipr_irq_table),
  94. .chip = {
  95. .name = "IPR-sh7709",
  96. },
  97. };
  98. void __init init_IRQ_ipr(void)
  99. {
  100. register_ipr_controller(&ipr_irq_desc);
  101. }