Skip to content

Commit

Permalink
[ARM] 3866/1: AT91 clock update
Browse files Browse the repository at this point in the history
This patch makes the AT91 clock.c support processor-generic (AT91RM9200
and AT91SAM9xxx).  The clocks supported by a particular AT91 processor
are defined in the processor-specific file and are registered with
clock.c at startup.

Signed-off-by: Andrew Victor <andrew@sanpeople.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Andrew Victor authored and Russell King committed Sep 28, 2006
1 parent 7272991 commit 2eeaaa2
Show file tree
Hide file tree
Showing 13 changed files with 299 additions and 278 deletions.
154 changes: 153 additions & 1 deletion arch/arm/mach-at91rm9200/at91rm9200.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

#include <asm/hardware.h>
#include "generic.h"
#include "clock.h"

static struct map_desc at91rm9200_io_desc[] __initdata = {
{
Expand Down Expand Up @@ -102,9 +103,160 @@ static struct map_desc at91rm9200_io_desc[] __initdata = {
},
};

void __init at91rm9200_map_io(void)
/* --------------------------------------------------------------------
* Clocks
* -------------------------------------------------------------------- */

/*
* The peripheral clocks.
*/
static struct clk udc_clk = {
.name = "udc_clk",
.pmc_mask = 1 << AT91RM9200_ID_UDP,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk ohci_clk = {
.name = "ohci_clk",
.pmc_mask = 1 << AT91RM9200_ID_UHP,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk ether_clk = {
.name = "ether_clk",
.pmc_mask = 1 << AT91RM9200_ID_EMAC,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk mmc_clk = {
.name = "mci_clk",
.pmc_mask = 1 << AT91RM9200_ID_MCI,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk twi_clk = {
.name = "twi_clk",
.pmc_mask = 1 << AT91RM9200_ID_TWI,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk usart0_clk = {
.name = "usart0_clk",
.pmc_mask = 1 << AT91RM9200_ID_US0,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk usart1_clk = {
.name = "usart1_clk",
.pmc_mask = 1 << AT91RM9200_ID_US1,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk usart2_clk = {
.name = "usart2_clk",
.pmc_mask = 1 << AT91RM9200_ID_US2,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk usart3_clk = {
.name = "usart3_clk",
.pmc_mask = 1 << AT91RM9200_ID_US3,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk spi_clk = {
.name = "spi_clk",
.pmc_mask = 1 << AT91RM9200_ID_SPI,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk pioA_clk = {
.name = "pioA_clk",
.pmc_mask = 1 << AT91RM9200_ID_PIOA,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk pioB_clk = {
.name = "pioB_clk",
.pmc_mask = 1 << AT91RM9200_ID_PIOB,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk pioC_clk = {
.name = "pioC_clk",
.pmc_mask = 1 << AT91RM9200_ID_PIOC,
.type = CLK_TYPE_PERIPHERAL,
};
static struct clk pioD_clk = {
.name = "pioD_clk",
.pmc_mask = 1 << AT91RM9200_ID_PIOD,
.type = CLK_TYPE_PERIPHERAL,
};

static struct clk *periph_clocks[] __initdata = {
&pioA_clk,
&pioB_clk,
&pioC_clk,
&pioD_clk,
&usart0_clk,
&usart1_clk,
&usart2_clk,
&usart3_clk,
&mmc_clk,
&udc_clk,
&twi_clk,
&spi_clk,
// ssc 0 .. ssc2
// tc0 .. tc5
&ohci_clk,
&ether_clk,
// irq0 .. irq6
};

/*
* The four programmable clocks.
* You must configure pin multiplexing to bring these signals out.
*/
static struct clk pck0 = {
.name = "pck0",
.pmc_mask = AT91_PMC_PCK0,
.type = CLK_TYPE_PROGRAMMABLE,
.id = 0,
};
static struct clk pck1 = {
.name = "pck1",
.pmc_mask = AT91_PMC_PCK1,
.type = CLK_TYPE_PROGRAMMABLE,
.id = 1,
};
static struct clk pck2 = {
.name = "pck2",
.pmc_mask = AT91_PMC_PCK2,
.type = CLK_TYPE_PROGRAMMABLE,
.id = 2,
};
static struct clk pck3 = {
.name = "pck3",
.pmc_mask = AT91_PMC_PCK3,
.type = CLK_TYPE_PROGRAMMABLE,
.id = 3,
};

static void __init at91rm9200_register_clocks(void)
{
int i;

for (i = 0; i < ARRAY_SIZE(periph_clocks); i++)
clk_register(periph_clocks[i]);

clk_register(&pck0);
clk_register(&pck1);
clk_register(&pck2);
clk_register(&pck3);
}


/* --------------------------------------------------------------------
* AT91RM9200 processor initialization
* -------------------------------------------------------------------- */
void __init at91rm9200_initialize(unsigned long main_clock)
{
/* Map peripherals */
iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc));

/* Init clock subsystem */
at91_clock_init(main_clock);

/* Register the processor-specific clocks */
at91rm9200_register_clocks();
}

/*
Expand Down
7 changes: 2 additions & 5 deletions arch/arm/mach-at91rm9200/board-1arm.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
#include <asm/mach/map.h>
#include <asm/mach/irq.h>

#include <asm/hardware.h>
#include <asm/arch/board.h>
#include <asm/arch/gpio.h>

Expand Down Expand Up @@ -62,10 +61,8 @@ static struct at91_uart_config __initdata onearm_uart_config = {

static void __init onearm_map_io(void)
{
at91rm9200_map_io();

/* Initialize clocks: 18.432 MHz crystal */
at91_clock_init(18432000);
/* Initialize processor: 18.432 MHz crystal */
at91rm9200_initialize(18432000);

/* Setup the serial ports and console */
at91_init_serial(&onearm_uart_config);
Expand Down
7 changes: 2 additions & 5 deletions arch/arm/mach-at91rm9200/board-carmeva.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
#include <asm/mach/map.h>
#include <asm/mach/irq.h>

#include <asm/hardware.h>
#include <asm/arch/board.h>
#include <asm/arch/gpio.h>

Expand Down Expand Up @@ -63,10 +62,8 @@ static struct at91_uart_config __initdata carmeva_uart_config = {

static void __init carmeva_map_io(void)
{
at91rm9200_map_io();

/* Initialize clocks: 20.000 MHz crystal */
at91_clock_init(20000000);
/* Initialize processor: 20.000 MHz crystal */
at91rm9200_initialize(20000000);

/* Setup the serial ports and console */
at91_init_serial(&carmeva_uart_config);
Expand Down
7 changes: 2 additions & 5 deletions arch/arm/mach-at91rm9200/board-csb337.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
#include <asm/mach/map.h>
#include <asm/mach/irq.h>

#include <asm/hardware.h>
#include <asm/arch/board.h>
#include <asm/arch/gpio.h>

Expand Down Expand Up @@ -62,10 +61,8 @@ static struct at91_uart_config __initdata csb337_uart_config = {

static void __init csb337_map_io(void)
{
at91rm9200_map_io();

/* Initialize clocks: 3.6864 MHz crystal */
at91_clock_init(3686400);
/* Initialize processor: 3.6864 MHz crystal */
at91rm9200_initialize(3686400);

/* Setup the LEDs */
at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1);
Expand Down
7 changes: 2 additions & 5 deletions arch/arm/mach-at91rm9200/board-csb637.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
#include <asm/mach/map.h>
#include <asm/mach/irq.h>

#include <asm/hardware.h>
#include <asm/arch/board.h>
#include <asm/arch/gpio.h>

Expand Down Expand Up @@ -61,10 +60,8 @@ static struct at91_uart_config __initdata csb637_uart_config = {

static void __init csb637_map_io(void)
{
at91rm9200_map_io();

/* Initialize clocks: 3.6864 MHz crystal */
at91_clock_init(3686400);
/* Initialize processor: 3.6864 MHz crystal */
at91rm9200_initialize(3686400);

/* Setup the LEDs */
at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2);
Expand Down
7 changes: 2 additions & 5 deletions arch/arm/mach-at91rm9200/board-dk.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
#include <asm/mach/map.h>
#include <asm/mach/irq.h>

#include <asm/hardware.h>
#include <asm/arch/board.h>
#include <asm/arch/gpio.h>

Expand Down Expand Up @@ -65,10 +64,8 @@ static struct at91_uart_config __initdata dk_uart_config = {

static void __init dk_map_io(void)
{
at91rm9200_map_io();

/* Initialize clocks: 18.432 MHz crystal */
at91_clock_init(18432000);
/* Initialize processor: 18.432 MHz crystal */
at91rm9200_initialize(18432000);

/* Setup the LEDs */
at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2);
Expand Down
7 changes: 2 additions & 5 deletions arch/arm/mach-at91rm9200/board-eb9200.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
#include <asm/mach/map.h>
#include <asm/mach/irq.h>

#include <asm/hardware.h>
#include <asm/arch/board.h>
#include <asm/arch/gpio.h>

Expand Down Expand Up @@ -63,10 +62,8 @@ static struct at91_uart_config __initdata eb9200_uart_config = {

static void __init eb9200_map_io(void)
{
at91rm9200_map_io();

/* Initialize clocks: 18.432 MHz crystal */
at91_clock_init(18432000);
/* Initialize processor: 18.432 MHz crystal */
at91rm9200_initialize(18432000);

/* Setup the serial ports and console */
at91_init_serial(&eb9200_uart_config);
Expand Down
7 changes: 2 additions & 5 deletions arch/arm/mach-at91rm9200/board-ek.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
#include <asm/mach/map.h>
#include <asm/mach/irq.h>

#include <asm/hardware.h>
#include <asm/arch/board.h>
#include <asm/arch/gpio.h>

Expand Down Expand Up @@ -65,10 +64,8 @@ static struct at91_uart_config __initdata ek_uart_config = {

static void __init ek_map_io(void)
{
at91rm9200_map_io();

/* Initialize clocks: 18.432 MHz crystal */
at91_clock_init(18432000);
/* Initialize processor: 18.432 MHz crystal */
at91rm9200_initialize(18432000);

/* Setup the LEDs */
at91_init_leds(AT91_PIN_PB1, AT91_PIN_PB2);
Expand Down
7 changes: 2 additions & 5 deletions arch/arm/mach-at91rm9200/board-kafa.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
#include <asm/mach/map.h>
#include <asm/mach/irq.h>

#include <asm/hardware.h>
#include <asm/arch/board.h>
#include <asm/arch/gpio.h>

Expand Down Expand Up @@ -62,10 +61,8 @@ static struct at91_uart_config __initdata kafa_uart_config = {

static void __init kafa_map_io(void)
{
at91rm9200_map_io();

/* Initialize clocks: 18.432 MHz crystal */
at91_clock_init(18432000);
/* Initialize processor: 18.432 MHz crystal */
at91rm9200_initialize(18432000);

/* Set up the LEDs */
at91_init_leds(AT91_PIN_PB4, AT91_PIN_PB4);
Expand Down
7 changes: 2 additions & 5 deletions arch/arm/mach-at91rm9200/board-kb9202.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
#include <asm/mach/map.h>
#include <asm/mach/irq.h>

#include <asm/hardware.h>
#include <asm/arch/board.h>
#include <asm/arch/gpio.h>

Expand Down Expand Up @@ -63,10 +62,8 @@ static struct at91_uart_config __initdata kb9202_uart_config = {

static void __init kb9202_map_io(void)
{
at91rm9200_map_io();

/* Initialize clocks: 10 MHz crystal */
at91_clock_init(10000000);
/* Initialize processor: 10 MHz crystal */
at91rm9200_initialize(10000000);

/* Set up the LEDs */
at91_init_leds(AT91_PIN_PC19, AT91_PIN_PC18);
Expand Down
Loading

0 comments on commit 2eeaaa2

Please sign in to comment.