@@ -1084,6 +1084,89 @@ at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data,
1084
1084
return NULL ;
1085
1085
}
1086
1086
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
+
1087
1170
/* --------------------------------------------------------------------
1088
1171
* GCLK
1089
1172
* -------------------------------------------------------------------- */
@@ -1166,6 +1249,9 @@ struct clk *at32_clock_list[] = {
1166
1249
& atmel_spi1_spi_clk ,
1167
1250
& atmel_lcdfb0_hck1 ,
1168
1251
& atmel_lcdfb0_pixclk ,
1252
+ & ssc0_pclk ,
1253
+ & ssc1_pclk ,
1254
+ & ssc2_pclk ,
1169
1255
& gclk0 ,
1170
1256
& gclk1 ,
1171
1257
& gclk2 ,
0 commit comments