Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 72204
b: refs/heads/master
c: 2042c1c
h: refs/heads/master
v: v3
  • Loading branch information
Haavard Skinnemoen committed Oct 23, 2007
1 parent 0db8d69 commit e3e6311
Show file tree
Hide file tree
Showing 3 changed files with 214 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 86298962c06c2584a8c4df5fb92a70179ca7e4f5
refs/heads/master: 2042c1c4e7a5e3b69ff3c3c5db6bf6416abd8b24
208 changes: 208 additions & 0 deletions trunk/arch/avr32/mach-at32ap/at32ap7000.c
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,17 @@ static struct clk pico_clk = {
.users = 1,
};

static struct resource dmaca0_resource[] = {
{
.start = 0xff200000,
.end = 0xff20ffff,
.flags = IORESOURCE_MEM,
},
IRQ(2),
};
DEFINE_DEV(dmaca, 0);
DEV_CLK(hclk, dmaca0, hsb, 10);

/* --------------------------------------------------------------------
* HMATRIX
* -------------------------------------------------------------------- */
Expand Down Expand Up @@ -655,6 +666,7 @@ void __init at32_add_system_devices(void)
platform_device_register(&at32_eic0_device);
platform_device_register(&smc0_device);
platform_device_register(&pdc_device);
platform_device_register(&dmaca0_device);

platform_device_register(&at32_systc0_device);

Expand Down Expand Up @@ -959,6 +971,96 @@ at32_add_device_spi(unsigned int id, struct spi_board_info *b, unsigned int n)
return pdev;
}

/* --------------------------------------------------------------------
* TWI
* -------------------------------------------------------------------- */
static struct resource atmel_twi0_resource[] __initdata = {
PBMEM(0xffe00800),
IRQ(5),
};
static struct clk atmel_twi0_pclk = {
.name = "twi_pclk",
.parent = &pba_clk,
.mode = pba_clk_mode,
.get_rate = pba_clk_get_rate,
.index = 2,
};

struct platform_device *__init at32_add_device_twi(unsigned int id)
{
struct platform_device *pdev;

if (id != 0)
return NULL;

pdev = platform_device_alloc("atmel_twi", id);
if (!pdev)
return NULL;

if (platform_device_add_resources(pdev, atmel_twi0_resource,
ARRAY_SIZE(atmel_twi0_resource)))
goto err_add_resources;

select_peripheral(PA(6), PERIPH_A, 0); /* SDA */
select_peripheral(PA(7), PERIPH_A, 0); /* SDL */

atmel_twi0_pclk.dev = &pdev->dev;

platform_device_add(pdev);
return pdev;

err_add_resources:
platform_device_put(pdev);
return NULL;
}

/* --------------------------------------------------------------------
* MMC
* -------------------------------------------------------------------- */
static struct resource atmel_mci0_resource[] __initdata = {
PBMEM(0xfff02400),
IRQ(28),
};
static struct clk atmel_mci0_pclk = {
.name = "mci_clk",
.parent = &pbb_clk,
.mode = pbb_clk_mode,
.get_rate = pbb_clk_get_rate,
.index = 9,
};

struct platform_device *__init at32_add_device_mci(unsigned int id)
{
struct platform_device *pdev;

if (id != 0)
return NULL;

pdev = platform_device_alloc("atmel_mci", id);
if (!pdev)
return NULL;

if (platform_device_add_resources(pdev, atmel_mci0_resource,
ARRAY_SIZE(atmel_mci0_resource)))
goto err_add_resources;

select_peripheral(PA(10), PERIPH_A, 0); /* CLK */
select_peripheral(PA(11), PERIPH_A, 0); /* CMD */
select_peripheral(PA(12), PERIPH_A, 0); /* DATA0 */
select_peripheral(PA(13), PERIPH_A, 0); /* DATA1 */
select_peripheral(PA(14), PERIPH_A, 0); /* DATA2 */
select_peripheral(PA(15), PERIPH_A, 0); /* DATA3 */

atmel_mci0_pclk.dev = &pdev->dev;

platform_device_add(pdev);
return pdev;

err_add_resources:
platform_device_put(pdev);
return NULL;
}

/* --------------------------------------------------------------------
* LCDC
* -------------------------------------------------------------------- */
Expand Down Expand Up @@ -1292,6 +1394,105 @@ at32_add_device_ide(unsigned int id, unsigned int extint,
return pdev;
}

/* --------------------------------------------------------------------
* AC97C
* -------------------------------------------------------------------- */
static struct resource atmel_ac97c0_resource[] __initdata = {
PBMEM(0xfff02800),
IRQ(29),
};
static struct clk atmel_ac97c0_pclk = {
.name = "pclk",
.parent = &pbb_clk,
.mode = pbb_clk_mode,
.get_rate = pbb_clk_get_rate,
.index = 10,
};

struct platform_device *__init at32_add_device_ac97c(unsigned int id)
{
struct platform_device *pdev;

if (id != 0)
return NULL;

pdev = platform_device_alloc("atmel_ac97c", id);
if (!pdev)
return NULL;

if (platform_device_add_resources(pdev, atmel_ac97c0_resource,
ARRAY_SIZE(atmel_ac97c0_resource)))
goto err_add_resources;

select_peripheral(PB(20), PERIPH_B, 0); /* SYNC */
select_peripheral(PB(21), PERIPH_B, 0); /* SDO */
select_peripheral(PB(22), PERIPH_B, 0); /* SDI */
select_peripheral(PB(23), PERIPH_B, 0); /* SCLK */

atmel_ac97c0_pclk.dev = &pdev->dev;

platform_device_add(pdev);
return pdev;

err_add_resources:
platform_device_put(pdev);
return NULL;
}

/* --------------------------------------------------------------------
* ABDAC
* -------------------------------------------------------------------- */
static struct resource abdac0_resource[] __initdata = {
PBMEM(0xfff02000),
IRQ(27),
};
static struct clk abdac0_pclk = {
.name = "pclk",
.parent = &pbb_clk,
.mode = pbb_clk_mode,
.get_rate = pbb_clk_get_rate,
.index = 8,
};
static struct clk abdac0_sample_clk = {
.name = "sample_clk",
.mode = genclk_mode,
.get_rate = genclk_get_rate,
.set_rate = genclk_set_rate,
.set_parent = genclk_set_parent,
.index = 6,
};

struct platform_device *__init at32_add_device_abdac(unsigned int id)
{
struct platform_device *pdev;

if (id != 0)
return NULL;

pdev = platform_device_alloc("abdac", id);
if (!pdev)
return NULL;

if (platform_device_add_resources(pdev, abdac0_resource,
ARRAY_SIZE(abdac0_resource)))
goto err_add_resources;

select_peripheral(PB(20), PERIPH_A, 0); /* DATA1 */
select_peripheral(PB(21), PERIPH_A, 0); /* DATA0 */
select_peripheral(PB(22), PERIPH_A, 0); /* DATAN1 */
select_peripheral(PB(23), PERIPH_A, 0); /* DATAN0 */

abdac0_pclk.dev = &pdev->dev;
abdac0_sample_clk.dev = &pdev->dev;

platform_device_add(pdev);
return pdev;

err_add_resources:
platform_device_put(pdev);
return NULL;
}

/* --------------------------------------------------------------------
* GCLK
* -------------------------------------------------------------------- */
Expand Down Expand Up @@ -1355,6 +1556,7 @@ struct clk *at32_clock_list[] = {
&smc0_mck,
&pdc_hclk,
&pdc_pclk,
&dmaca0_hclk,
&pico_clk,
&pio0_mck,
&pio1_mck,
Expand All @@ -1372,13 +1574,18 @@ struct clk *at32_clock_list[] = {
&macb1_pclk,
&atmel_spi0_spi_clk,
&atmel_spi1_spi_clk,
&atmel_twi0_pclk,
&atmel_mci0_pclk,
&atmel_lcdfb0_hck1,
&atmel_lcdfb0_pixclk,
&ssc0_pclk,
&ssc1_pclk,
&ssc2_pclk,
&usba0_hclk,
&usba0_pclk,
&atmel_ac97c0_pclk,
&abdac0_pclk,
&abdac0_sample_clk,
&gclk0,
&gclk1,
&gclk2,
Expand Down Expand Up @@ -1420,6 +1627,7 @@ void __init at32_clock_init(void)
genclk_init_parent(&gclk3);
genclk_init_parent(&gclk4);
genclk_init_parent(&atmel_lcdfb0_pixclk);
genclk_init_parent(&abdac0_sample_clk);

/*
* Turn on all clocks that have at least one user already, and
Expand Down
5 changes: 5 additions & 0 deletions trunk/include/asm-avr32/arch-at32ap/board.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,9 @@ at32_add_device_ide(unsigned int id, unsigned int extint,
struct platform_device *
at32_add_device_ssc(unsigned int id, unsigned int flags);

struct platform_device *at32_add_device_twi(unsigned int id);
struct platform_device *at32_add_device_mci(unsigned int id);
struct platform_device *at32_add_device_ac97c(unsigned int id);
struct platform_device *at32_add_device_abdac(unsigned int id);

#endif /* __ASM_ARCH_BOARD_H */

0 comments on commit e3e6311

Please sign in to comment.