diff options
| -rw-r--r-- | arch/avr32/mach-at32ap/at32ap7000.c | 86 | ||||
| -rw-r--r-- | include/asm-avr32/arch-at32ap/board.h | 14 |
2 files changed, 100 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, |
diff --git a/include/asm-avr32/arch-at32ap/board.h b/include/asm-avr32/arch-at32ap/board.h index 974480438849..0215965dc586 100644 --- a/include/asm-avr32/arch-at32ap/board.h +++ b/include/asm-avr32/arch-at32ap/board.h | |||
| @@ -36,4 +36,18 @@ struct platform_device * | |||
| 36 | at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data, | 36 | at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data, |
| 37 | unsigned long fbmem_start, unsigned long fbmem_len); | 37 | unsigned long fbmem_start, unsigned long fbmem_len); |
| 38 | 38 | ||
| 39 | /* depending on what's hooked up, not all SSC pins will be used */ | ||
| 40 | #define ATMEL_SSC_TK 0x01 | ||
| 41 | #define ATMEL_SSC_TF 0x02 | ||
| 42 | #define ATMEL_SSC_TD 0x04 | ||
| 43 | #define ATMEL_SSC_TX (ATMEL_SSC_TK | ATMEL_SSC_TF | ATMEL_SSC_TD) | ||
| 44 | |||
| 45 | #define ATMEL_SSC_RK 0x10 | ||
| 46 | #define ATMEL_SSC_RF 0x20 | ||
| 47 | #define ATMEL_SSC_RD 0x40 | ||
| 48 | #define ATMEL_SSC_RX (ATMEL_SSC_RK | ATMEL_SSC_RF | ATMEL_SSC_RD) | ||
| 49 | |||
| 50 | struct platform_device * | ||
| 51 | at32_add_device_ssc(unsigned int id, unsigned int flags); | ||
| 52 | |||
| 39 | #endif /* __ASM_ARCH_BOARD_H */ | 53 | #endif /* __ASM_ARCH_BOARD_H */ |
