diff options
author | Hans-Christian Egtvedt <hcegtvedt@atmel.com> | 2007-07-06 08:31:55 -0400 |
---|---|---|
committer | Haavard Skinnemoen <hskinnemoen@atmel.com> | 2007-07-18 14:45:52 -0400 |
commit | 9cf6cf58d06527fc5bc8e2965ddccdeca59ccee3 (patch) | |
tree | f0f8b3eb7cd431cb8a3240981c1f54c8a04f736b /arch/avr32/mach-at32ap/at32ap7000.c | |
parent | e122eaf69422e5d9ce93fc9786099098e3b9e1c4 (diff) |
[AVR32] Add Atmel SSC driver platform device to AT32AP architecture
This patch adds register definitions, clocks and IRQs to the platform devices.
Signed-off-by: Hans-Christian Egtvedt <hcegtvedt@atmel.com>
Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
Diffstat (limited to 'arch/avr32/mach-at32ap/at32ap7000.c')
-rw-r--r-- | arch/avr32/mach-at32ap/at32ap7000.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/arch/avr32/mach-at32ap/at32ap7000.c b/arch/avr32/mach-at32ap/at32ap7000.c index c74f3715f3f1..64cc5583ddfb 100644 --- a/arch/avr32/mach-at32ap/at32ap7000.c +++ b/arch/avr32/mach-at32ap/at32ap7000.c | |||
@@ -1085,6 +1085,89 @@ err_dup_modedb: | |||
1085 | } | 1085 | } |
1086 | 1086 | ||
1087 | /* -------------------------------------------------------------------- | 1087 | /* -------------------------------------------------------------------- |
1088 | * SSC | ||
1089 | * -------------------------------------------------------------------- */ | ||
1090 | static struct resource ssc0_resource[] = { | ||
1091 | PBMEM(0xffe01c00), | ||
1092 | IRQ(10), | ||
1093 | }; | ||
1094 | DEFINE_DEV(ssc, 0); | ||
1095 | DEV_CLK(pclk, ssc0, pba, 7); | ||
1096 | |||
1097 | static struct resource ssc1_resource[] = { | ||
1098 | PBMEM(0xffe02000), | ||
1099 | IRQ(11), | ||
1100 | }; | ||
1101 | DEFINE_DEV(ssc, 1); | ||
1102 | DEV_CLK(pclk, ssc1, pba, 8); | ||
1103 | |||
1104 | static struct resource ssc2_resource[] = { | ||
1105 | PBMEM(0xffe02400), | ||
1106 | IRQ(12), | ||
1107 | }; | ||
1108 | DEFINE_DEV(ssc, 2); | ||
1109 | DEV_CLK(pclk, ssc2, pba, 9); | ||
1110 | |||
1111 | struct platform_device *__init | ||
1112 | at32_add_device_ssc(unsigned int id, unsigned int flags) | ||
1113 | { | ||
1114 | struct platform_device *pdev; | ||
1115 | |||
1116 | switch (id) { | ||
1117 | case 0: | ||
1118 | pdev = &ssc0_device; | ||
1119 | if (flags & ATMEL_SSC_RF) | ||
1120 | select_peripheral(PA(21), PERIPH_A, 0); /* RF */ | ||
1121 | if (flags & ATMEL_SSC_RK) | ||
1122 | select_peripheral(PA(22), PERIPH_A, 0); /* RK */ | ||
1123 | if (flags & ATMEL_SSC_TK) | ||
1124 | select_peripheral(PA(23), PERIPH_A, 0); /* TK */ | ||
1125 | if (flags & ATMEL_SSC_TF) | ||
1126 | select_peripheral(PA(24), PERIPH_A, 0); /* TF */ | ||
1127 | if (flags & ATMEL_SSC_TD) | ||
1128 | select_peripheral(PA(25), PERIPH_A, 0); /* TD */ | ||
1129 | if (flags & ATMEL_SSC_RD) | ||
1130 | select_peripheral(PA(26), PERIPH_A, 0); /* RD */ | ||
1131 | break; | ||
1132 | case 1: | ||
1133 | pdev = &ssc1_device; | ||
1134 | if (flags & ATMEL_SSC_RF) | ||
1135 | select_peripheral(PA(0), PERIPH_B, 0); /* RF */ | ||
1136 | if (flags & ATMEL_SSC_RK) | ||
1137 | select_peripheral(PA(1), PERIPH_B, 0); /* RK */ | ||
1138 | if (flags & ATMEL_SSC_TK) | ||
1139 | select_peripheral(PA(2), PERIPH_B, 0); /* TK */ | ||
1140 | if (flags & ATMEL_SSC_TF) | ||
1141 | select_peripheral(PA(3), PERIPH_B, 0); /* TF */ | ||
1142 | if (flags & ATMEL_SSC_TD) | ||
1143 | select_peripheral(PA(4), PERIPH_B, 0); /* TD */ | ||
1144 | if (flags & ATMEL_SSC_RD) | ||
1145 | select_peripheral(PA(5), PERIPH_B, 0); /* RD */ | ||
1146 | break; | ||
1147 | case 2: | ||
1148 | pdev = &ssc2_device; | ||
1149 | if (flags & ATMEL_SSC_TD) | ||
1150 | select_peripheral(PB(13), PERIPH_A, 0); /* TD */ | ||
1151 | if (flags & ATMEL_SSC_RD) | ||
1152 | select_peripheral(PB(14), PERIPH_A, 0); /* RD */ | ||
1153 | if (flags & ATMEL_SSC_TK) | ||
1154 | select_peripheral(PB(15), PERIPH_A, 0); /* TK */ | ||
1155 | if (flags & ATMEL_SSC_TF) | ||
1156 | select_peripheral(PB(16), PERIPH_A, 0); /* TF */ | ||
1157 | if (flags & ATMEL_SSC_RF) | ||
1158 | select_peripheral(PB(17), PERIPH_A, 0); /* RF */ | ||
1159 | if (flags & ATMEL_SSC_RK) | ||
1160 | select_peripheral(PB(18), PERIPH_A, 0); /* RK */ | ||
1161 | break; | ||
1162 | default: | ||
1163 | return NULL; | ||
1164 | } | ||
1165 | |||
1166 | platform_device_register(pdev); | ||
1167 | return pdev; | ||
1168 | } | ||
1169 | |||
1170 | /* -------------------------------------------------------------------- | ||
1088 | * GCLK | 1171 | * GCLK |
1089 | * -------------------------------------------------------------------- */ | 1172 | * -------------------------------------------------------------------- */ |
1090 | static struct clk gclk0 = { | 1173 | static struct clk gclk0 = { |
@@ -1166,6 +1249,9 @@ struct clk *at32_clock_list[] = { | |||
1166 | &atmel_spi1_spi_clk, | 1249 | &atmel_spi1_spi_clk, |
1167 | &atmel_lcdfb0_hck1, | 1250 | &atmel_lcdfb0_hck1, |
1168 | &atmel_lcdfb0_pixclk, | 1251 | &atmel_lcdfb0_pixclk, |
1252 | &ssc0_pclk, | ||
1253 | &ssc1_pclk, | ||
1254 | &ssc2_pclk, | ||
1169 | &gclk0, | 1255 | &gclk0, |
1170 | &gclk1, | 1256 | &gclk1, |
1171 | &gclk2, | 1257 | &gclk2, |