Skip to content

Commit 9cf6cf5

Browse files
Hans-Christian EgtvedtHaavard Skinnemoen
authored andcommitted
[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 <[email protected]> Signed-off-by: Haavard Skinnemoen <[email protected]>
1 parent e122eaf commit 9cf6cf5

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed

arch/avr32/mach-at32ap/at32ap7000.c

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1084,6 +1084,89 @@ at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data,
10841084
return NULL;
10851085
}
10861086

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+
10871170
/* --------------------------------------------------------------------
10881171
* GCLK
10891172
* -------------------------------------------------------------------- */
@@ -1166,6 +1249,9 @@ struct clk *at32_clock_list[] = {
11661249
&atmel_spi1_spi_clk,
11671250
&atmel_lcdfb0_hck1,
11681251
&atmel_lcdfb0_pixclk,
1252+
&ssc0_pclk,
1253+
&ssc1_pclk,
1254+
&ssc2_pclk,
11691255
&gclk0,
11701256
&gclk1,
11711257
&gclk2,

include/asm-avr32/arch-at32ap/board.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,18 @@ struct platform_device *
3636
at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data,
3737
unsigned long fbmem_start, unsigned long fbmem_len);
3838

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+
3953
#endif /* __ASM_ARCH_BOARD_H */

0 commit comments

Comments
 (0)