Commit b24c1a10 authored by Bo Shen's avatar Bo Shen Committed by Andreas Bießmann
Browse files

ARM: atmel: use pcr to enable or disable peripheral clock



When use pcr (peripheral control register), then we won't need
to care about the peripheral ID.
Signed-off-by: default avatarBo Shen <voice.shen@atmel.com>
Signed-off-by: default avatarAndreas Bießmann <andreas.devel@googlemail.com>
parent 7b1dc26f
...@@ -114,9 +114,25 @@ int at91_clock_init(unsigned long main_clock) ...@@ -114,9 +114,25 @@ int at91_clock_init(unsigned long main_clock)
void at91_periph_clk_enable(int id) void at91_periph_clk_enable(int id)
{ {
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
u32 regval;
if (id > 31) if (id > AT91_PMC_PCR_PID_MASK)
writel(1 << (id - 32), &pmc->pcer1); return;
else
writel(1 << id, &pmc->pcer); regval = AT91_PMC_PCR_EN | AT91_PMC_PCR_CMD_WRITE | id;
writel(regval, &pmc->pcr);
}
void at91_periph_clk_disable(int id)
{
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
u32 regval;
if (id > AT91_PMC_PCR_PID_MASK)
return;
regval = AT91_PMC_PCR_CMD_WRITE | id;
writel(regval, &pmc->pcr);
} }
...@@ -147,6 +147,10 @@ typedef struct at91_pmc { ...@@ -147,6 +147,10 @@ typedef struct at91_pmc {
#define AT91_PMC_IXR_PCKRDY3 0x00000800 #define AT91_PMC_IXR_PCKRDY3 0x00000800
#define AT91_PMC_IXR_MOSCSELS 0x00010000 #define AT91_PMC_IXR_MOSCSELS 0x00010000
#define AT91_PMC_PCR_PID_MASK (0x3f)
#define AT91_PMC_PCR_CMD_WRITE (0x1 << 12)
#define AT91_PMC_PCR_EN (0x1 << 28)
#define AT91_PMC_PCK (1 << 0) /* Processor Clock */ #define AT91_PMC_PCK (1 << 0) /* Processor Clock */
#define AT91RM9200_PMC_UDP (1 << 1) /* USB Devcice Port Clock [AT91RM9200 only] */ #define AT91RM9200_PMC_UDP (1 << 1) /* USB Devcice Port Clock [AT91RM9200 only] */
#define AT91RM9200_PMC_MCKUDP (1 << 2) /* USB Device Port Master Clock Automatic Disable on Suspend [AT91RM9200 only] */ #define AT91RM9200_PMC_MCKUDP (1 << 2) /* USB Device Port Master Clock Automatic Disable on Suspend [AT91RM9200 only] */
......
...@@ -80,4 +80,5 @@ static inline unsigned long get_mci_clk_rate(void) ...@@ -80,4 +80,5 @@ static inline unsigned long get_mci_clk_rate(void)
int at91_clock_init(unsigned long main_clock); int at91_clock_init(unsigned long main_clock);
void at91_periph_clk_enable(int id); void at91_periph_clk_enable(int id);
void at91_periph_clk_disable(int id);
#endif /* __ASM_ARM_ARCH_CLK_H__ */ #endif /* __ASM_ARM_ARCH_CLK_H__ */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment