Skip to content

Commit

Permalink
[AVR32] Add Atmel SSC driver platform device to AT32AP architecture
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Hans-Christian Egtvedt authored and Haavard Skinnemoen committed Jul 18, 2007
1 parent e122eaf commit 9cf6cf5
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 0 deletions.
86 changes: 86 additions & 0 deletions arch/avr32/mach-at32ap/at32ap7000.c
Original file line number Diff line number Diff line change
Expand Up @@ -1084,6 +1084,89 @@ at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data,
return NULL;
}

/* --------------------------------------------------------------------
* SSC
* -------------------------------------------------------------------- */
static struct resource ssc0_resource[] = {
PBMEM(0xffe01c00),
IRQ(10),
};
DEFINE_DEV(ssc, 0);
DEV_CLK(pclk, ssc0, pba, 7);

static struct resource ssc1_resource[] = {
PBMEM(0xffe02000),
IRQ(11),
};
DEFINE_DEV(ssc, 1);
DEV_CLK(pclk, ssc1, pba, 8);

static struct resource ssc2_resource[] = {
PBMEM(0xffe02400),
IRQ(12),
};
DEFINE_DEV(ssc, 2);
DEV_CLK(pclk, ssc2, pba, 9);

struct platform_device *__init
at32_add_device_ssc(unsigned int id, unsigned int flags)
{
struct platform_device *pdev;

switch (id) {
case 0:
pdev = &ssc0_device;
if (flags & ATMEL_SSC_RF)
select_peripheral(PA(21), PERIPH_A, 0); /* RF */
if (flags & ATMEL_SSC_RK)
select_peripheral(PA(22), PERIPH_A, 0); /* RK */
if (flags & ATMEL_SSC_TK)
select_peripheral(PA(23), PERIPH_A, 0); /* TK */
if (flags & ATMEL_SSC_TF)
select_peripheral(PA(24), PERIPH_A, 0); /* TF */
if (flags & ATMEL_SSC_TD)
select_peripheral(PA(25), PERIPH_A, 0); /* TD */
if (flags & ATMEL_SSC_RD)
select_peripheral(PA(26), PERIPH_A, 0); /* RD */
break;
case 1:
pdev = &ssc1_device;
if (flags & ATMEL_SSC_RF)
select_peripheral(PA(0), PERIPH_B, 0); /* RF */
if (flags & ATMEL_SSC_RK)
select_peripheral(PA(1), PERIPH_B, 0); /* RK */
if (flags & ATMEL_SSC_TK)
select_peripheral(PA(2), PERIPH_B, 0); /* TK */
if (flags & ATMEL_SSC_TF)
select_peripheral(PA(3), PERIPH_B, 0); /* TF */
if (flags & ATMEL_SSC_TD)
select_peripheral(PA(4), PERIPH_B, 0); /* TD */
if (flags & ATMEL_SSC_RD)
select_peripheral(PA(5), PERIPH_B, 0); /* RD */
break;
case 2:
pdev = &ssc2_device;
if (flags & ATMEL_SSC_TD)
select_peripheral(PB(13), PERIPH_A, 0); /* TD */
if (flags & ATMEL_SSC_RD)
select_peripheral(PB(14), PERIPH_A, 0); /* RD */
if (flags & ATMEL_SSC_TK)
select_peripheral(PB(15), PERIPH_A, 0); /* TK */
if (flags & ATMEL_SSC_TF)
select_peripheral(PB(16), PERIPH_A, 0); /* TF */
if (flags & ATMEL_SSC_RF)
select_peripheral(PB(17), PERIPH_A, 0); /* RF */
if (flags & ATMEL_SSC_RK)
select_peripheral(PB(18), PERIPH_A, 0); /* RK */
break;
default:
return NULL;
}

platform_device_register(pdev);
return pdev;
}

/* --------------------------------------------------------------------
* GCLK
* -------------------------------------------------------------------- */
Expand Down Expand Up @@ -1166,6 +1249,9 @@ struct clk *at32_clock_list[] = {
&atmel_spi1_spi_clk,
&atmel_lcdfb0_hck1,
&atmel_lcdfb0_pixclk,
&ssc0_pclk,
&ssc1_pclk,
&ssc2_pclk,
&gclk0,
&gclk1,
&gclk2,
Expand Down
14 changes: 14 additions & 0 deletions include/asm-avr32/arch-at32ap/board.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,18 @@ struct platform_device *
at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data,
unsigned long fbmem_start, unsigned long fbmem_len);

/* depending on what's hooked up, not all SSC pins will be used */
#define ATMEL_SSC_TK 0x01
#define ATMEL_SSC_TF 0x02
#define ATMEL_SSC_TD 0x04
#define ATMEL_SSC_TX (ATMEL_SSC_TK | ATMEL_SSC_TF | ATMEL_SSC_TD)

#define ATMEL_SSC_RK 0x10
#define ATMEL_SSC_RF 0x20
#define ATMEL_SSC_RD 0x40
#define ATMEL_SSC_RX (ATMEL_SSC_RK | ATMEL_SSC_RF | ATMEL_SSC_RD)

struct platform_device *
at32_add_device_ssc(unsigned int id, unsigned int flags);

#endif /* __ASM_ARCH_BOARD_H */

0 comments on commit 9cf6cf5

Please sign in to comment.