All of lore.kernel.org
 help / color / mirror / Atom feed
From: b.brezillon@overkiz.com (boris brezillon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 17/42] ARM: at91: move at91sam9g45 SoC to new at91 clk implem
Date: Wed, 24 Jul 2013 00:29:32 +0200	[thread overview]
Message-ID: <51EF03CC.2080303@overkiz.com> (raw)
In-Reply-To: <1374072548-19702-1-git-send-email-b.brezillon@overkiz.com>

Le 17/07/2013 16:49, Boris BREZILLON a ?crit :
> This patch removes all references to the old at91 clks implementation and
> make use of the new at91 clk implem for at91sam9g45 SoC.
>
> All dt specific lookups are removed (handled in clk device tree binding).
>
> Signed-off-by: Boris BREZILLON <b.brezillon@overkiz.com>
> ---
>   arch/arm/mach-at91/at91sam9g45.c         |  702 ++++++++++++++++++------------
>   arch/arm/mach-at91/at91sam9g45_devices.c |    1 -
>   2 files changed, 424 insertions(+), 279 deletions(-)
>
> diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c
> index 29ba2ca..a24915a 100644
> --- a/arch/arm/mach-at91/at91sam9g45.c
> +++ b/arch/arm/mach-at91/at91sam9g45.c
> @@ -24,7 +24,6 @@
>   #include "at91_aic.h"
>   #include "soc.h"
>   #include "generic.h"
> -#include "clock.h"
>   #include "sam9_smc.h"
>   
>   /* --------------------------------------------------------------------
> @@ -34,299 +33,446 @@
>   /*
>    * The peripheral clocks.
>    */
> -static struct clk pioA_clk = {
> -	.name		= "pioA_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_PIOA,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk pioB_clk = {
> -	.name		= "pioB_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_PIOB,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk pioC_clk = {
> -	.name		= "pioC_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_PIOC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk pioDE_clk = {
> -	.name		= "pioDE_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_PIODE,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk trng_clk = {
> -	.name		= "trng_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_TRNG,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk usart0_clk = {
> -	.name		= "usart0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_US0,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk usart1_clk = {
> -	.name		= "usart1_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_US1,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk usart2_clk = {
> -	.name		= "usart2_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_US2,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk usart3_clk = {
> -	.name		= "usart3_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_US3,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk mmc0_clk = {
> -	.name		= "mci0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_MCI0,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk twi0_clk = {
> -	.name		= "twi0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_TWI0,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk twi1_clk = {
> -	.name		= "twi1_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_TWI1,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk spi0_clk = {
> -	.name		= "spi0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_SPI0,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk spi1_clk = {
> -	.name		= "spi1_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_SPI1,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk ssc0_clk = {
> -	.name		= "ssc0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_SSC0,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk ssc1_clk = {
> -	.name		= "ssc1_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_SSC1,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk tcb0_clk = {
> -	.name		= "tcb0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_TCB,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk pwm_clk = {
> -	.name		= "pwm_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_PWMC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk tsc_clk = {
> -	.name		= "tsc_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_TSC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk dma_clk = {
> -	.name		= "dma_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_DMA,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk uhphs_clk = {
> -	.name		= "uhphs_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_UHPHS,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk lcdc_clk = {
> -	.name		= "lcdc_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_LCDC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk ac97_clk = {
> -	.name		= "ac97_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_AC97C,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk macb_clk = {
> -	.name		= "pclk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_EMAC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk isi_clk = {
> -	.name		= "isi_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_ISI,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk udphs_clk = {
> -	.name		= "udphs_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_UDPHS,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk mmc1_clk = {
> -	.name		= "mci1_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_MCI1,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -
> -/* Video decoder clock - Only for sam9m10/sam9m11 */
> -static struct clk vdec_clk = {
> -	.name		= "vdec_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_VDEC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -
> -static struct clk adc_op_clk = {
> -	.name		= "adc_op_clk",
> -	.type		= CLK_TYPE_PERIPHERAL,
> -	.rate_hz	= 13200000,
> -};
> -
> -/* AES/TDES/SHA clock - Only for sam9m11/sam9g56 */
> -static struct clk aestdessha_clk = {
> -	.name		= "aestdessha_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_AESTDESSHA,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -
> -static struct clk *periph_clocks[] __initdata = {
> -	&pioA_clk,
> -	&pioB_clk,
> -	&pioC_clk,
> -	&pioDE_clk,
> -	&trng_clk,
> -	&usart0_clk,
> -	&usart1_clk,
> -	&usart2_clk,
> -	&usart3_clk,
> -	&mmc0_clk,
> -	&twi0_clk,
> -	&twi1_clk,
> -	&spi0_clk,
> -	&spi1_clk,
> -	&ssc0_clk,
> -	&ssc1_clk,
> -	&tcb0_clk,
> -	&pwm_clk,
> -	&tsc_clk,
> -	&dma_clk,
> -	&uhphs_clk,
> -	&lcdc_clk,
> -	&ac97_clk,
> -	&macb_clk,
> -	&isi_clk,
> -	&udphs_clk,
> -	&mmc1_clk,
> -	&adc_op_clk,
> -	&aestdessha_clk,
> -	// irq0
> -};
> -
> -static struct clk_lookup periph_clocks_lookups[] = {
> -	/* One additional fake clock for macb_hclk */
> -	CLKDEV_CON_ID("hclk", &macb_clk),
> -	/* One additional fake clock for ohci */
> -	CLKDEV_CON_ID("ohci_clk", &uhphs_clk),
> -	CLKDEV_CON_DEV_ID("hclk", "at91sam9g45-lcdfb.0", &lcdc_clk),
> -	CLKDEV_CON_DEV_ID("hclk", "at91sam9g45es-lcdfb.0", &lcdc_clk),
> -	CLKDEV_CON_DEV_ID("ehci_clk", "atmel-ehci", &uhphs_clk),
> -	CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk),
> -	CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.0", &mmc0_clk),
> -	CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.1", &mmc1_clk),
> -	CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk),
> -	CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk),
> -	CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb0_clk),
> -	CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tcb0_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10.0", &twi0_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10.1", &twi1_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "at91sam9g45_ssc.0", &ssc0_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "at91sam9g45_ssc.1", &ssc1_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "fff9c000.ssc", &ssc0_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "fffa0000.ssc", &ssc1_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "atmel-trng", &trng_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "atmel_sha", &aestdessha_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "atmel_tdes", &aestdessha_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "atmel_aes", &aestdessha_clk),
> -	/* more usart lookup table for DT entries */
> -	CLKDEV_CON_DEV_ID("usart", "ffffee00.serial", &mck),
> -	CLKDEV_CON_DEV_ID("usart", "fff8c000.serial", &usart0_clk),
> -	CLKDEV_CON_DEV_ID("usart", "fff90000.serial", &usart1_clk),
> -	CLKDEV_CON_DEV_ID("usart", "fff94000.serial", &usart2_clk),
> -	CLKDEV_CON_DEV_ID("usart", "fff98000.serial", &usart3_clk),
> -	/* more tc lookup table for DT entries */
> -	CLKDEV_CON_DEV_ID("t0_clk", "fff7c000.timer", &tcb0_clk),
> -	CLKDEV_CON_DEV_ID("t0_clk", "fffd4000.timer", &tcb0_clk),
> -	CLKDEV_CON_DEV_ID("hclk", "700000.ohci", &uhphs_clk),
> -	CLKDEV_CON_DEV_ID("ehci_clk", "800000.ehci", &uhphs_clk),
> -	CLKDEV_CON_DEV_ID("mci_clk", "fff80000.mmc", &mmc0_clk),
> -	CLKDEV_CON_DEV_ID("mci_clk", "fffd0000.mmc", &mmc1_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fff84000.i2c", &twi0_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fff88000.i2c", &twi1_clk),
> -	CLKDEV_CON_DEV_ID("spi_clk", "fffa4000.spi", &spi0_clk),
> -	CLKDEV_CON_DEV_ID("spi_clk", "fffa8000.spi", &spi1_clk),
> -	CLKDEV_CON_DEV_ID("hclk", "600000.gadget", &utmi_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "600000.gadget", &udphs_clk),
> -	/* fake hclk clock */
> -	CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fffff200.gpio", &pioA_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioB_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioC_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioDE_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioDE_clk),
> -
> -	CLKDEV_CON_ID("pioA", &pioA_clk),
> -	CLKDEV_CON_ID("pioB", &pioB_clk),
> -	CLKDEV_CON_ID("pioC", &pioC_clk),
> -	CLKDEV_CON_ID("pioD", &pioDE_clk),
> -	CLKDEV_CON_ID("pioE", &pioDE_clk),
> -	/* Fake adc clock */
> -	CLKDEV_CON_ID("adc_clk", &tsc_clk),
> -};
> -
> -static struct clk_lookup usart_clocks_lookups[] = {
> -	CLKDEV_CON_DEV_ID("usart", "atmel_usart.0", &mck),
> -	CLKDEV_CON_DEV_ID("usart", "atmel_usart.1", &usart0_clk),
> -	CLKDEV_CON_DEV_ID("usart", "atmel_usart.2", &usart1_clk),
> -	CLKDEV_CON_DEV_ID("usart", "atmel_usart.3", &usart2_clk),
> -	CLKDEV_CON_DEV_ID("usart", "atmel_usart.4", &usart3_clk),
> +static struct clk_lookup pioA_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pioA_clk", NULL),
> +	CLKDEV_INIT(NULL, "pioA", NULL),
> +};
> +
> +static struct clk_lookup pioB_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pioB_clk", NULL),
> +	CLKDEV_INIT(NULL, "pioB", NULL),
> +};
> +
> +static struct clk_lookup pioC_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pioC_clk", NULL),
> +	CLKDEV_INIT(NULL, "pioC", NULL),
> +};
> +
> +static struct clk_lookup pioDE_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pioDE_clk", NULL),
> +	CLKDEV_INIT(NULL, "pioD", NULL),
> +	CLKDEV_INIT(NULL, "pioE", NULL),
> +};
> +
> +static struct clk_lookup trng_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "trng_clk", NULL),
> +	CLKDEV_INIT("atmel-trng", NULL, NULL),
> +};
> +
> +static struct clk_lookup usart0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "usart0_clk", NULL),
> +	CLKDEV_INIT("atmel_usart.1", "usart", NULL),
> +};
> +
> +static struct clk_lookup usart1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "usart1_clk", NULL),
> +	CLKDEV_INIT("atmel_usart.2", "usart", NULL),
> +};
> +
> +static struct clk_lookup usart2_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "usart2_clk", NULL),
> +	CLKDEV_INIT("atmel_usart.3", "usart", NULL),
> +};
> +
> +static struct clk_lookup usart3_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "usart3_clk", NULL),
> +	CLKDEV_INIT("atmel_usart.4", "usart", NULL),
> +};
> +
> +static struct clk_lookup mci0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "mci0_clk", NULL),
> +	CLKDEV_INIT("atmel_mci.0", "mci_clk", NULL),
> +};
> +
> +static struct clk_lookup twi0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "twi0_clk", NULL),
> +	CLKDEV_INIT("i2c-at91sam9g10.0", NULL, NULL),
> +};
> +
> +static struct clk_lookup twi1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "twi1_clk", NULL),
> +	CLKDEV_INIT("i2c-at91sam9g10.1", NULL, NULL),
> +};
> +
> +static struct clk_lookup spi0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "spi0_clk", NULL),
> +	CLKDEV_INIT("atmel_spi.0", "spi_clk", NULL),
> +};
> +
> +static struct clk_lookup spi1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "spi0_clk", NULL),
> +	CLKDEV_INIT("atmel_spi.1", "spi_clk", NULL),
> +};
> +
> +static struct clk_lookup ssc0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "ssc0_clk", NULL),
> +	CLKDEV_INIT("at91sam9g45_ssc.0", "pclk", NULL),
> +};
> +
> +static struct clk_lookup ssc1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "ssc1_clk", NULL),
> +	CLKDEV_INIT("at91sam9g45_ssc.0", "pclk", NULL),
> +};
> +
> +static struct clk_lookup tcb0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "tcb0_clk", NULL),
> +	CLKDEV_INIT("atmel_tcb.0", "t0_clk", NULL),
> +	CLKDEV_INIT("atmel_tcb.1", "t0_clk", NULL),
> +};
> +
> +static struct clk_lookup pwm_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pwm_clk", NULL),
> +};
> +
> +static struct clk_lookup tsc_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "tsc_clk", NULL),
> +	CLKDEV_INIT("adc_clk", NULL, NULL),
> +};
> +
> +static struct clk_lookup dma_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "dma_clk", NULL),
> +};
> +
> +static struct clk_lookup uhphs_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "uhphs_clk", NULL),
> +	CLKDEV_INIT(NULL, "ohci_clk", NULL),
> +	CLKDEV_INIT("atmel-ehci", "ehci_clk", NULL),
> +	CLKDEV_INIT("at91_ohci", "hclk", NULL),
> +};
> +
> +static struct clk_lookup lcdc_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "lcdc_clk", NULL),
> +	CLKDEV_INIT("hclk", "at91sam9g45-lcdfb.0", NULL),
> +	CLKDEV_INIT("hclk", "at91sam9g45es-lcdfb.0", NULL),
> +};
> +
> +static struct clk_lookup ac97_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "ac97_clk", NULL),
> +};
> +
> +static struct clk_lookup macb_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pclk", NULL),
> +	CLKDEV_INIT(NULL, "hclk", NULL),
> +};
> +
> +static struct clk_lookup isi_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "isi_clk", NULL),
> +};
> +
> +static struct clk_lookup udphs_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "udphs_clk", NULL),
> +	CLKDEV_INIT("atmel_usba_udc", "pclk", NULL),
> +};
> +
> +static struct clk_lookup aestdessha_clk_lookup[] = {
> +	CLKDEV_INIT("atmel_sha", NULL, NULL),
> +	CLKDEV_INIT("atmel_tdes", NULL, NULL),
> +	CLKDEV_INIT("atmel_aes", NULL, NULL),
> +};
> +
> +static struct clk_lookup mci1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "mci1_clk", NULL),
> +	CLKDEV_INIT("atmel_mci.1", "mci_clk", NULL),
> +};
> +
> +static struct clk_lookup vdec_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "vdec_clk", NULL),
> +};
> +
> +static size_t periph_clock_lookup_sizes[] __initdata = {
> +	0,
> +	0,
> +	ARRAY_SIZE(pioA_clk_lookup),
> +	ARRAY_SIZE(pioB_clk_lookup),
> +	ARRAY_SIZE(pioC_clk_lookup),
> +	ARRAY_SIZE(pioDE_clk_lookup),
> +	ARRAY_SIZE(trng_clk_lookup),
> +	ARRAY_SIZE(usart0_clk_lookup),
> +	ARRAY_SIZE(usart1_clk_lookup),
> +	ARRAY_SIZE(usart2_clk_lookup),
> +	ARRAY_SIZE(usart3_clk_lookup),
> +	ARRAY_SIZE(mci0_clk_lookup),
> +	ARRAY_SIZE(twi0_clk_lookup),
> +	ARRAY_SIZE(twi1_clk_lookup),
> +	ARRAY_SIZE(spi0_clk_lookup),
> +	ARRAY_SIZE(spi1_clk_lookup),
> +	ARRAY_SIZE(ssc0_clk_lookup),
> +	ARRAY_SIZE(ssc1_clk_lookup),
> +	ARRAY_SIZE(tcb0_clk_lookup),
> +	ARRAY_SIZE(pwm_clk_lookup),
> +	ARRAY_SIZE(tsc_clk_lookup),
> +	ARRAY_SIZE(dma_clk_lookup),
> +	ARRAY_SIZE(uhphs_clk_lookup),
> +	ARRAY_SIZE(lcdc_clk_lookup),
> +	ARRAY_SIZE(ac97_clk_lookup),
> +	ARRAY_SIZE(macb_clk_lookup),
> +	ARRAY_SIZE(isi_clk_lookup),
> +	ARRAY_SIZE(udphs_clk_lookup),
> +	0,
> +	ARRAY_SIZE(mci1_clk_lookup),
> +};
> +
> +static struct clk_lookup *periph_clock_lookups[] __initdata = {
> +	NULL,
> +	NULL,
> +	pioA_clk_lookup,
> +	pioB_clk_lookup,
> +	pioC_clk_lookup,
> +	pioDE_clk_lookup,
> +	trng_clk_lookup,
> +	usart0_clk_lookup,
> +	usart1_clk_lookup,
> +	usart2_clk_lookup,
> +	usart3_clk_lookup,
> +	mci0_clk_lookup,
> +	twi0_clk_lookup,
> +	twi1_clk_lookup,
> +	spi0_clk_lookup,
> +	spi1_clk_lookup,
> +	ssc0_clk_lookup,
> +	ssc1_clk_lookup,
> +	tcb0_clk_lookup,
> +	pwm_clk_lookup,
> +	tsc_clk_lookup,
> +	dma_clk_lookup,
> +	uhphs_clk_lookup,
> +	lcdc_clk_lookup,
> +	ac97_clk_lookup,
> +	macb_clk_lookup,
> +	isi_clk_lookup,
> +	udphs_clk_lookup,
> +	NULL,
> +	mci1_clk_lookup,
> +};
> +
> +
> +/*
> + * The system clocks.
> + */
> +static struct clk_lookup ddr_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "ddrck", NULL),
> +};
> +
> +static struct clk_lookup uhp_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "uhpck", NULL),
> +};
> +
> +static struct clk_lookup pck0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pck0", NULL),
> +};
> +
> +static struct clk_lookup pck1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pck1", NULL),
> +};
> +
> +static size_t system_clock_lookup_sizes[] __initdata = {
> +	0,
> +	0,
> +	ARRAY_SIZE(ddr_clk_lookup),
> +	0,
> +	0,
> +	0,
> +	ARRAY_SIZE(uhp_clk_lookup),
> +	0,
> +	ARRAY_SIZE(pck0_clk_lookup),
> +	ARRAY_SIZE(pck1_clk_lookup),
> +};
> +
> +static struct clk_lookup *system_clock_lookups[] __initdata = {
> +	NULL,
> +	NULL,
> +	ddr_clk_lookup,
> +	NULL,
> +	NULL,
> +	NULL,
> +	uhp_clk_lookup,
> +	NULL,
> +	pck0_clk_lookup,
> +	pck1_clk_lookup,
>   };
>   
>   /*
>    * The two 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 const char *prog_clock_parent_names[] __initdata = {
> +	"clk32k",
> +	"main",
> +	"plladiv",
> +	"utmi_clk",
> +	"mck",
>   };
> -static struct clk pck1 = {
> -	.name		= "pck1",
> -	.pmc_mask	= AT91_PMC_PCK1,
> -	.type		= CLK_TYPE_PROGRAMMABLE,
> -	.id		= 1,
> +
> +static const char *prog_clock_names[] __initdata = {
> +	"prog0",
> +	"prog1",
> +};
> +
> +/*
> + * The pll clocks.
> + */
> +static struct clk_lookup pll_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "plla", NULL),
> +};
> +
> +static struct clk_range at91sam9g45_plla_output[] = {
> +	CLK_RANGE(745000000, 800000000),
> +	CLK_RANGE(695000000, 750000000),
> +	CLK_RANGE(645000000, 700000000),
> +	CLK_RANGE(595000000, 650000000),
> +	CLK_RANGE(545000000, 600000000),
> +	CLK_RANGE(495000000, 550000000),
> +	CLK_RANGE(445000000, 500000000),
> +	CLK_RANGE(400000000, 450000000),
> +};
> +static u8 at91sam9g45_plla_out[] = {0, 1, 2, 3, 0, 1, 2, 3};
> +static u16 at91sam9g45_plla_icpll[] = {0, 0, 0, 0, 1, 1, 1, 1};
> +
> +struct clk_pll_characteristics at91sam9g45_plla_characteristics = {
> +	.input = CLK_RANGE(2000000, 32000000),
> +	.num_output = ARRAY_SIZE(at91sam9g45_plla_output),
> +	.output = at91sam9g45_plla_output,
> +	.out = at91sam9g45_plla_out,
> +	.icpll = at91sam9g45_plla_icpll,
> +};
> +
> +
> +/*
> + * The master clock.
> + */
> +static struct clk_lookup mck_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "mck", NULL),
> +	CLKDEV_INIT("atmel_usart.0", "usart", NULL),
> +};
> +
> +struct clk_master_characteristics at91sam9g45_master_characteristics = {
> +	.output = CLK_RANGE(0, 133000000),
> +	.have_div3_pres = 0,
> +	.divisors = {1, 2, 4, 3},
> +};
> +
> +static const char *master_clock_parent_names[] __initdata = {
> +	"clk32k",
> +	"main",
> +	"plladiv",
> +	"utmi_clk",
> +};
> +
> +/*
> + * UTMI clock.
> + */
> +static struct clk_lookup utmi_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "utmi_clk", NULL),
> +	CLKDEV_INIT("atmel_usba_udc", "hclk", NULL),
> +};
> +
> +/*
> + * USB clock.
> + */
> +static const char *usb_clock_parent_names[] __initdata = {
> +	"plladiv",
> +	"utmi_clk",
> +};
> +
> +static struct clk_lookup usb_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "usb_clk", NULL),
>   };
>   
>   static void __init at91sam9g45_register_clocks(void)
>   {
>   	int i;
> +	int k;
> +	size_t size;
> +	struct clk *clk;
> +	const char *name;
> +	struct clk_lookup *lookup;
> +
> +	clk = at91_clk_register_pll("plla", "main", 0,
> +				    &at91sam9g45_pll_layout,
> +				    &at91sam9g45_plla_characteristics);
> +	for (i = 0; i < ARRAY_SIZE(pll_clk_lookup); i++)
> +		pll_clk_lookup[i].clk = clk;
> +	clkdev_add_table(pll_clk_lookup, ARRAY_SIZE(pll_clk_lookup));
> +	clk = at91_clk_register_plldiv("plladiv", "plla");
>   
> -	for (i = 0; i < ARRAY_SIZE(periph_clocks); i++)
> -		clk_register(periph_clocks[i]);
> +	clk = at91_clk_register_utmi("utmi_clk", "main");
> +	for (i = 0; i < ARRAY_SIZE(utmi_clk_lookup); i++)
> +		utmi_clk_lookup[i].clk = clk;
> +	clkdev_add_table(utmi_clk_lookup, ARRAY_SIZE(utmi_clk_lookup));
>   
> -	clkdev_add_table(periph_clocks_lookups,
> -			 ARRAY_SIZE(periph_clocks_lookups));
> -	clkdev_add_table(usart_clocks_lookups,
> -			 ARRAY_SIZE(usart_clocks_lookups));
> +	clk = at91_clk_register_master("mck",
> +				       ARRAY_SIZE(master_clock_parent_names),
> +				       master_clock_parent_names,
> +				       &at91rm9200_master_layout,
> +				       &at91sam9g45_master_characteristics);
> +	for (i = 0; i < ARRAY_SIZE(mck_clk_lookup); i++)
> +		mck_clk_lookup[i].clk = clk;
> +	clkdev_add_table(mck_clk_lookup, ARRAY_SIZE(mck_clk_lookup));
>   
> -	if (cpu_is_at91sam9m10() || cpu_is_at91sam9m11())
> -		clk_register(&vdec_clk);
> +	for (i = 0; i < ARRAY_SIZE(periph_clock_lookup_sizes); i++) {
> +		size = periph_clock_lookup_sizes[i];
> +		lookup = periph_clock_lookups[i];
> +		if (!size || !lookup)
> +			continue;
> +		name = periph_clock_lookups[i][0].con_id;
> +		if (!name)
> +			continue;
> +		clk = at91_clk_register_peripheral(name, "mck", i);
> +
> +		for (k = 0; k < size; k++)
> +			lookup[k].clk = clk;
> +		clkdev_add_table(lookup, size);
> +	}
> +
> +	if (cpu_is_at91sam9m10() || cpu_is_at91sam9m11()) {
> +		clk = at91_clk_register_peripheral(vdec_clk_lookup[0].con_id,
> +						   "mck",
> +						   AT91SAM9G45_ID_VDEC);
> +		for (k = 0; k < ARRAY_SIZE(vdec_clk_lookup); k++)
> +			vdec_clk_lookup[k].clk = clk;
> +		clkdev_add_table(vdec_clk_lookup, ARRAY_SIZE(vdec_clk_lookup));
> +	}
> +
> +	if (cpu_is_at91sam9m11() || cpu_is_at91sam9g46()) {
> +		clk = at91_clk_register_peripheral(vdec_clk_lookup[0].con_id,
> +						   "mck",
> +						   AT91SAM9G45_ID_AESTDESSHA);
There is a bug here. It should be:
clk = at91_clk_register_peripheral(aestdessha_clk_lookup[0].con_id, 
"mck", AT91SAM9G45_ID_AESTDESSHA);
> +		for (k = 0; k < ARRAY_SIZE(aestdessha_clk_lookup); k++)
> +			aestdessha_clk_lookup[k].clk = clk;
> +		clkdev_add_table(vdec_clk_lookup,
> +				 ARRAY_SIZE(aestdessha_clk_lookup));
Same bug here:

clkdev_add_table(aestdessha_clk_lookup, ARRAY_SIZE(aestdessha_clk_lookup));


These bugs will be fixed in next version.
> +	}
> +
> +	for (i = 0; i < ARRAY_SIZE(prog_clock_names); i++) {
> +		name = prog_clock_names[i];
> +		clk = at91_clk_register_programmable(name,
> +					prog_clock_parent_names,
> +					ARRAY_SIZE(prog_clock_parent_names),
> +					i, &at91sam9g45_programmable_layout);
> +	}
> +
> +	clk = at91sam9x5_clk_register_usb("usbck", usb_clock_parent_names,
> +					  ARRAY_SIZE(usb_clock_parent_names),
> +					  0);
> +	for (i = 0; i < ARRAY_SIZE(usb_clk_lookup); i++)
> +		usb_clk_lookup[i].clk = clk;
> +	clkdev_add_table(usb_clk_lookup, ARRAY_SIZE(usb_clk_lookup));
> +
> +	for (i = 0; i < ARRAY_SIZE(system_clock_lookup_sizes); i++) {
> +		size = system_clock_lookup_sizes[i];
> +		lookup = system_clock_lookups[i];
> +		if (!size || !lookup)
> +			continue;
> +		name = system_clock_lookups[i][0].con_id;
> +		if (!name)
> +			continue;
> +		clk = at91_clk_register_system(name, i);
> +		for (k = 0; k < size; k++)
> +			lookup[k].clk = clk;
> +		clkdev_add_table(lookup, size);
> +	}
>   
> -	clk_register(&pck0);
> -	clk_register(&pck1);
> +	clk_register_fixed_rate(NULL, "adc_op_clk", "mck", 0, 13200000);
>   }
>   
>   /* --------------------------------------------------------------------
> diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
> index cb36fa8..13c650c 100644
> --- a/arch/arm/mach-at91/at91sam9g45_devices.c
> +++ b/arch/arm/mach-at91/at91sam9g45_devices.c
> @@ -37,7 +37,6 @@
>   
>   #include "board.h"
>   #include "generic.h"
> -#include "clock.h"
>   
>   
>   /* --------------------------------------------------------------------

WARNING: multiple messages have this Message-ID (diff)
From: boris brezillon <b.brezillon@overkiz.com>
To: Boris BREZILLON <b.brezillon@overkiz.com>
Cc: Nicolas Ferre <nicolas.ferre@atmel.com>,
	Ludovic Desroches <ludovic.desroches@atmel.com>,
	Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>,
	Mike Turquette <mturquette@linaro.org>,
	Andrew Victor <linux@maxim.org.za>,
	Russell King <linux@arm.linux.org.uk>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 17/42] ARM: at91: move at91sam9g45 SoC to new at91 clk implem
Date: Wed, 24 Jul 2013 00:29:32 +0200	[thread overview]
Message-ID: <51EF03CC.2080303@overkiz.com> (raw)
In-Reply-To: <1374072548-19702-1-git-send-email-b.brezillon@overkiz.com>

Le 17/07/2013 16:49, Boris BREZILLON a écrit :
> This patch removes all references to the old at91 clks implementation and
> make use of the new at91 clk implem for at91sam9g45 SoC.
>
> All dt specific lookups are removed (handled in clk device tree binding).
>
> Signed-off-by: Boris BREZILLON <b.brezillon@overkiz.com>
> ---
>   arch/arm/mach-at91/at91sam9g45.c         |  702 ++++++++++++++++++------------
>   arch/arm/mach-at91/at91sam9g45_devices.c |    1 -
>   2 files changed, 424 insertions(+), 279 deletions(-)
>
> diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c
> index 29ba2ca..a24915a 100644
> --- a/arch/arm/mach-at91/at91sam9g45.c
> +++ b/arch/arm/mach-at91/at91sam9g45.c
> @@ -24,7 +24,6 @@
>   #include "at91_aic.h"
>   #include "soc.h"
>   #include "generic.h"
> -#include "clock.h"
>   #include "sam9_smc.h"
>   
>   /* --------------------------------------------------------------------
> @@ -34,299 +33,446 @@
>   /*
>    * The peripheral clocks.
>    */
> -static struct clk pioA_clk = {
> -	.name		= "pioA_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_PIOA,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk pioB_clk = {
> -	.name		= "pioB_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_PIOB,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk pioC_clk = {
> -	.name		= "pioC_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_PIOC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk pioDE_clk = {
> -	.name		= "pioDE_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_PIODE,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk trng_clk = {
> -	.name		= "trng_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_TRNG,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk usart0_clk = {
> -	.name		= "usart0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_US0,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk usart1_clk = {
> -	.name		= "usart1_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_US1,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk usart2_clk = {
> -	.name		= "usart2_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_US2,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk usart3_clk = {
> -	.name		= "usart3_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_US3,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk mmc0_clk = {
> -	.name		= "mci0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_MCI0,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk twi0_clk = {
> -	.name		= "twi0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_TWI0,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk twi1_clk = {
> -	.name		= "twi1_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_TWI1,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk spi0_clk = {
> -	.name		= "spi0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_SPI0,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk spi1_clk = {
> -	.name		= "spi1_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_SPI1,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk ssc0_clk = {
> -	.name		= "ssc0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_SSC0,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk ssc1_clk = {
> -	.name		= "ssc1_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_SSC1,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk tcb0_clk = {
> -	.name		= "tcb0_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_TCB,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk pwm_clk = {
> -	.name		= "pwm_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_PWMC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk tsc_clk = {
> -	.name		= "tsc_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_TSC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk dma_clk = {
> -	.name		= "dma_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_DMA,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk uhphs_clk = {
> -	.name		= "uhphs_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_UHPHS,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk lcdc_clk = {
> -	.name		= "lcdc_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_LCDC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk ac97_clk = {
> -	.name		= "ac97_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_AC97C,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk macb_clk = {
> -	.name		= "pclk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_EMAC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk isi_clk = {
> -	.name		= "isi_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_ISI,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk udphs_clk = {
> -	.name		= "udphs_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_UDPHS,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -static struct clk mmc1_clk = {
> -	.name		= "mci1_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_MCI1,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -
> -/* Video decoder clock - Only for sam9m10/sam9m11 */
> -static struct clk vdec_clk = {
> -	.name		= "vdec_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_VDEC,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -
> -static struct clk adc_op_clk = {
> -	.name		= "adc_op_clk",
> -	.type		= CLK_TYPE_PERIPHERAL,
> -	.rate_hz	= 13200000,
> -};
> -
> -/* AES/TDES/SHA clock - Only for sam9m11/sam9g56 */
> -static struct clk aestdessha_clk = {
> -	.name		= "aestdessha_clk",
> -	.pmc_mask	= 1 << AT91SAM9G45_ID_AESTDESSHA,
> -	.type		= CLK_TYPE_PERIPHERAL,
> -};
> -
> -static struct clk *periph_clocks[] __initdata = {
> -	&pioA_clk,
> -	&pioB_clk,
> -	&pioC_clk,
> -	&pioDE_clk,
> -	&trng_clk,
> -	&usart0_clk,
> -	&usart1_clk,
> -	&usart2_clk,
> -	&usart3_clk,
> -	&mmc0_clk,
> -	&twi0_clk,
> -	&twi1_clk,
> -	&spi0_clk,
> -	&spi1_clk,
> -	&ssc0_clk,
> -	&ssc1_clk,
> -	&tcb0_clk,
> -	&pwm_clk,
> -	&tsc_clk,
> -	&dma_clk,
> -	&uhphs_clk,
> -	&lcdc_clk,
> -	&ac97_clk,
> -	&macb_clk,
> -	&isi_clk,
> -	&udphs_clk,
> -	&mmc1_clk,
> -	&adc_op_clk,
> -	&aestdessha_clk,
> -	// irq0
> -};
> -
> -static struct clk_lookup periph_clocks_lookups[] = {
> -	/* One additional fake clock for macb_hclk */
> -	CLKDEV_CON_ID("hclk", &macb_clk),
> -	/* One additional fake clock for ohci */
> -	CLKDEV_CON_ID("ohci_clk", &uhphs_clk),
> -	CLKDEV_CON_DEV_ID("hclk", "at91sam9g45-lcdfb.0", &lcdc_clk),
> -	CLKDEV_CON_DEV_ID("hclk", "at91sam9g45es-lcdfb.0", &lcdc_clk),
> -	CLKDEV_CON_DEV_ID("ehci_clk", "atmel-ehci", &uhphs_clk),
> -	CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk),
> -	CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.0", &mmc0_clk),
> -	CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.1", &mmc1_clk),
> -	CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk),
> -	CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk),
> -	CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb0_clk),
> -	CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tcb0_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10.0", &twi0_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10.1", &twi1_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "at91sam9g45_ssc.0", &ssc0_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "at91sam9g45_ssc.1", &ssc1_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "fff9c000.ssc", &ssc0_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "fffa0000.ssc", &ssc1_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "atmel-trng", &trng_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "atmel_sha", &aestdessha_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "atmel_tdes", &aestdessha_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "atmel_aes", &aestdessha_clk),
> -	/* more usart lookup table for DT entries */
> -	CLKDEV_CON_DEV_ID("usart", "ffffee00.serial", &mck),
> -	CLKDEV_CON_DEV_ID("usart", "fff8c000.serial", &usart0_clk),
> -	CLKDEV_CON_DEV_ID("usart", "fff90000.serial", &usart1_clk),
> -	CLKDEV_CON_DEV_ID("usart", "fff94000.serial", &usart2_clk),
> -	CLKDEV_CON_DEV_ID("usart", "fff98000.serial", &usart3_clk),
> -	/* more tc lookup table for DT entries */
> -	CLKDEV_CON_DEV_ID("t0_clk", "fff7c000.timer", &tcb0_clk),
> -	CLKDEV_CON_DEV_ID("t0_clk", "fffd4000.timer", &tcb0_clk),
> -	CLKDEV_CON_DEV_ID("hclk", "700000.ohci", &uhphs_clk),
> -	CLKDEV_CON_DEV_ID("ehci_clk", "800000.ehci", &uhphs_clk),
> -	CLKDEV_CON_DEV_ID("mci_clk", "fff80000.mmc", &mmc0_clk),
> -	CLKDEV_CON_DEV_ID("mci_clk", "fffd0000.mmc", &mmc1_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fff84000.i2c", &twi0_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fff88000.i2c", &twi1_clk),
> -	CLKDEV_CON_DEV_ID("spi_clk", "fffa4000.spi", &spi0_clk),
> -	CLKDEV_CON_DEV_ID("spi_clk", "fffa8000.spi", &spi1_clk),
> -	CLKDEV_CON_DEV_ID("hclk", "600000.gadget", &utmi_clk),
> -	CLKDEV_CON_DEV_ID("pclk", "600000.gadget", &udphs_clk),
> -	/* fake hclk clock */
> -	CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fffff200.gpio", &pioA_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioB_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioC_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioDE_clk),
> -	CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioDE_clk),
> -
> -	CLKDEV_CON_ID("pioA", &pioA_clk),
> -	CLKDEV_CON_ID("pioB", &pioB_clk),
> -	CLKDEV_CON_ID("pioC", &pioC_clk),
> -	CLKDEV_CON_ID("pioD", &pioDE_clk),
> -	CLKDEV_CON_ID("pioE", &pioDE_clk),
> -	/* Fake adc clock */
> -	CLKDEV_CON_ID("adc_clk", &tsc_clk),
> -};
> -
> -static struct clk_lookup usart_clocks_lookups[] = {
> -	CLKDEV_CON_DEV_ID("usart", "atmel_usart.0", &mck),
> -	CLKDEV_CON_DEV_ID("usart", "atmel_usart.1", &usart0_clk),
> -	CLKDEV_CON_DEV_ID("usart", "atmel_usart.2", &usart1_clk),
> -	CLKDEV_CON_DEV_ID("usart", "atmel_usart.3", &usart2_clk),
> -	CLKDEV_CON_DEV_ID("usart", "atmel_usart.4", &usart3_clk),
> +static struct clk_lookup pioA_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pioA_clk", NULL),
> +	CLKDEV_INIT(NULL, "pioA", NULL),
> +};
> +
> +static struct clk_lookup pioB_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pioB_clk", NULL),
> +	CLKDEV_INIT(NULL, "pioB", NULL),
> +};
> +
> +static struct clk_lookup pioC_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pioC_clk", NULL),
> +	CLKDEV_INIT(NULL, "pioC", NULL),
> +};
> +
> +static struct clk_lookup pioDE_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pioDE_clk", NULL),
> +	CLKDEV_INIT(NULL, "pioD", NULL),
> +	CLKDEV_INIT(NULL, "pioE", NULL),
> +};
> +
> +static struct clk_lookup trng_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "trng_clk", NULL),
> +	CLKDEV_INIT("atmel-trng", NULL, NULL),
> +};
> +
> +static struct clk_lookup usart0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "usart0_clk", NULL),
> +	CLKDEV_INIT("atmel_usart.1", "usart", NULL),
> +};
> +
> +static struct clk_lookup usart1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "usart1_clk", NULL),
> +	CLKDEV_INIT("atmel_usart.2", "usart", NULL),
> +};
> +
> +static struct clk_lookup usart2_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "usart2_clk", NULL),
> +	CLKDEV_INIT("atmel_usart.3", "usart", NULL),
> +};
> +
> +static struct clk_lookup usart3_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "usart3_clk", NULL),
> +	CLKDEV_INIT("atmel_usart.4", "usart", NULL),
> +};
> +
> +static struct clk_lookup mci0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "mci0_clk", NULL),
> +	CLKDEV_INIT("atmel_mci.0", "mci_clk", NULL),
> +};
> +
> +static struct clk_lookup twi0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "twi0_clk", NULL),
> +	CLKDEV_INIT("i2c-at91sam9g10.0", NULL, NULL),
> +};
> +
> +static struct clk_lookup twi1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "twi1_clk", NULL),
> +	CLKDEV_INIT("i2c-at91sam9g10.1", NULL, NULL),
> +};
> +
> +static struct clk_lookup spi0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "spi0_clk", NULL),
> +	CLKDEV_INIT("atmel_spi.0", "spi_clk", NULL),
> +};
> +
> +static struct clk_lookup spi1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "spi0_clk", NULL),
> +	CLKDEV_INIT("atmel_spi.1", "spi_clk", NULL),
> +};
> +
> +static struct clk_lookup ssc0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "ssc0_clk", NULL),
> +	CLKDEV_INIT("at91sam9g45_ssc.0", "pclk", NULL),
> +};
> +
> +static struct clk_lookup ssc1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "ssc1_clk", NULL),
> +	CLKDEV_INIT("at91sam9g45_ssc.0", "pclk", NULL),
> +};
> +
> +static struct clk_lookup tcb0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "tcb0_clk", NULL),
> +	CLKDEV_INIT("atmel_tcb.0", "t0_clk", NULL),
> +	CLKDEV_INIT("atmel_tcb.1", "t0_clk", NULL),
> +};
> +
> +static struct clk_lookup pwm_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pwm_clk", NULL),
> +};
> +
> +static struct clk_lookup tsc_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "tsc_clk", NULL),
> +	CLKDEV_INIT("adc_clk", NULL, NULL),
> +};
> +
> +static struct clk_lookup dma_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "dma_clk", NULL),
> +};
> +
> +static struct clk_lookup uhphs_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "uhphs_clk", NULL),
> +	CLKDEV_INIT(NULL, "ohci_clk", NULL),
> +	CLKDEV_INIT("atmel-ehci", "ehci_clk", NULL),
> +	CLKDEV_INIT("at91_ohci", "hclk", NULL),
> +};
> +
> +static struct clk_lookup lcdc_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "lcdc_clk", NULL),
> +	CLKDEV_INIT("hclk", "at91sam9g45-lcdfb.0", NULL),
> +	CLKDEV_INIT("hclk", "at91sam9g45es-lcdfb.0", NULL),
> +};
> +
> +static struct clk_lookup ac97_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "ac97_clk", NULL),
> +};
> +
> +static struct clk_lookup macb_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pclk", NULL),
> +	CLKDEV_INIT(NULL, "hclk", NULL),
> +};
> +
> +static struct clk_lookup isi_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "isi_clk", NULL),
> +};
> +
> +static struct clk_lookup udphs_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "udphs_clk", NULL),
> +	CLKDEV_INIT("atmel_usba_udc", "pclk", NULL),
> +};
> +
> +static struct clk_lookup aestdessha_clk_lookup[] = {
> +	CLKDEV_INIT("atmel_sha", NULL, NULL),
> +	CLKDEV_INIT("atmel_tdes", NULL, NULL),
> +	CLKDEV_INIT("atmel_aes", NULL, NULL),
> +};
> +
> +static struct clk_lookup mci1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "mci1_clk", NULL),
> +	CLKDEV_INIT("atmel_mci.1", "mci_clk", NULL),
> +};
> +
> +static struct clk_lookup vdec_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "vdec_clk", NULL),
> +};
> +
> +static size_t periph_clock_lookup_sizes[] __initdata = {
> +	0,
> +	0,
> +	ARRAY_SIZE(pioA_clk_lookup),
> +	ARRAY_SIZE(pioB_clk_lookup),
> +	ARRAY_SIZE(pioC_clk_lookup),
> +	ARRAY_SIZE(pioDE_clk_lookup),
> +	ARRAY_SIZE(trng_clk_lookup),
> +	ARRAY_SIZE(usart0_clk_lookup),
> +	ARRAY_SIZE(usart1_clk_lookup),
> +	ARRAY_SIZE(usart2_clk_lookup),
> +	ARRAY_SIZE(usart3_clk_lookup),
> +	ARRAY_SIZE(mci0_clk_lookup),
> +	ARRAY_SIZE(twi0_clk_lookup),
> +	ARRAY_SIZE(twi1_clk_lookup),
> +	ARRAY_SIZE(spi0_clk_lookup),
> +	ARRAY_SIZE(spi1_clk_lookup),
> +	ARRAY_SIZE(ssc0_clk_lookup),
> +	ARRAY_SIZE(ssc1_clk_lookup),
> +	ARRAY_SIZE(tcb0_clk_lookup),
> +	ARRAY_SIZE(pwm_clk_lookup),
> +	ARRAY_SIZE(tsc_clk_lookup),
> +	ARRAY_SIZE(dma_clk_lookup),
> +	ARRAY_SIZE(uhphs_clk_lookup),
> +	ARRAY_SIZE(lcdc_clk_lookup),
> +	ARRAY_SIZE(ac97_clk_lookup),
> +	ARRAY_SIZE(macb_clk_lookup),
> +	ARRAY_SIZE(isi_clk_lookup),
> +	ARRAY_SIZE(udphs_clk_lookup),
> +	0,
> +	ARRAY_SIZE(mci1_clk_lookup),
> +};
> +
> +static struct clk_lookup *periph_clock_lookups[] __initdata = {
> +	NULL,
> +	NULL,
> +	pioA_clk_lookup,
> +	pioB_clk_lookup,
> +	pioC_clk_lookup,
> +	pioDE_clk_lookup,
> +	trng_clk_lookup,
> +	usart0_clk_lookup,
> +	usart1_clk_lookup,
> +	usart2_clk_lookup,
> +	usart3_clk_lookup,
> +	mci0_clk_lookup,
> +	twi0_clk_lookup,
> +	twi1_clk_lookup,
> +	spi0_clk_lookup,
> +	spi1_clk_lookup,
> +	ssc0_clk_lookup,
> +	ssc1_clk_lookup,
> +	tcb0_clk_lookup,
> +	pwm_clk_lookup,
> +	tsc_clk_lookup,
> +	dma_clk_lookup,
> +	uhphs_clk_lookup,
> +	lcdc_clk_lookup,
> +	ac97_clk_lookup,
> +	macb_clk_lookup,
> +	isi_clk_lookup,
> +	udphs_clk_lookup,
> +	NULL,
> +	mci1_clk_lookup,
> +};
> +
> +
> +/*
> + * The system clocks.
> + */
> +static struct clk_lookup ddr_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "ddrck", NULL),
> +};
> +
> +static struct clk_lookup uhp_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "uhpck", NULL),
> +};
> +
> +static struct clk_lookup pck0_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pck0", NULL),
> +};
> +
> +static struct clk_lookup pck1_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "pck1", NULL),
> +};
> +
> +static size_t system_clock_lookup_sizes[] __initdata = {
> +	0,
> +	0,
> +	ARRAY_SIZE(ddr_clk_lookup),
> +	0,
> +	0,
> +	0,
> +	ARRAY_SIZE(uhp_clk_lookup),
> +	0,
> +	ARRAY_SIZE(pck0_clk_lookup),
> +	ARRAY_SIZE(pck1_clk_lookup),
> +};
> +
> +static struct clk_lookup *system_clock_lookups[] __initdata = {
> +	NULL,
> +	NULL,
> +	ddr_clk_lookup,
> +	NULL,
> +	NULL,
> +	NULL,
> +	uhp_clk_lookup,
> +	NULL,
> +	pck0_clk_lookup,
> +	pck1_clk_lookup,
>   };
>   
>   /*
>    * The two 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 const char *prog_clock_parent_names[] __initdata = {
> +	"clk32k",
> +	"main",
> +	"plladiv",
> +	"utmi_clk",
> +	"mck",
>   };
> -static struct clk pck1 = {
> -	.name		= "pck1",
> -	.pmc_mask	= AT91_PMC_PCK1,
> -	.type		= CLK_TYPE_PROGRAMMABLE,
> -	.id		= 1,
> +
> +static const char *prog_clock_names[] __initdata = {
> +	"prog0",
> +	"prog1",
> +};
> +
> +/*
> + * The pll clocks.
> + */
> +static struct clk_lookup pll_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "plla", NULL),
> +};
> +
> +static struct clk_range at91sam9g45_plla_output[] = {
> +	CLK_RANGE(745000000, 800000000),
> +	CLK_RANGE(695000000, 750000000),
> +	CLK_RANGE(645000000, 700000000),
> +	CLK_RANGE(595000000, 650000000),
> +	CLK_RANGE(545000000, 600000000),
> +	CLK_RANGE(495000000, 550000000),
> +	CLK_RANGE(445000000, 500000000),
> +	CLK_RANGE(400000000, 450000000),
> +};
> +static u8 at91sam9g45_plla_out[] = {0, 1, 2, 3, 0, 1, 2, 3};
> +static u16 at91sam9g45_plla_icpll[] = {0, 0, 0, 0, 1, 1, 1, 1};
> +
> +struct clk_pll_characteristics at91sam9g45_plla_characteristics = {
> +	.input = CLK_RANGE(2000000, 32000000),
> +	.num_output = ARRAY_SIZE(at91sam9g45_plla_output),
> +	.output = at91sam9g45_plla_output,
> +	.out = at91sam9g45_plla_out,
> +	.icpll = at91sam9g45_plla_icpll,
> +};
> +
> +
> +/*
> + * The master clock.
> + */
> +static struct clk_lookup mck_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "mck", NULL),
> +	CLKDEV_INIT("atmel_usart.0", "usart", NULL),
> +};
> +
> +struct clk_master_characteristics at91sam9g45_master_characteristics = {
> +	.output = CLK_RANGE(0, 133000000),
> +	.have_div3_pres = 0,
> +	.divisors = {1, 2, 4, 3},
> +};
> +
> +static const char *master_clock_parent_names[] __initdata = {
> +	"clk32k",
> +	"main",
> +	"plladiv",
> +	"utmi_clk",
> +};
> +
> +/*
> + * UTMI clock.
> + */
> +static struct clk_lookup utmi_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "utmi_clk", NULL),
> +	CLKDEV_INIT("atmel_usba_udc", "hclk", NULL),
> +};
> +
> +/*
> + * USB clock.
> + */
> +static const char *usb_clock_parent_names[] __initdata = {
> +	"plladiv",
> +	"utmi_clk",
> +};
> +
> +static struct clk_lookup usb_clk_lookup[] = {
> +	CLKDEV_INIT(NULL, "usb_clk", NULL),
>   };
>   
>   static void __init at91sam9g45_register_clocks(void)
>   {
>   	int i;
> +	int k;
> +	size_t size;
> +	struct clk *clk;
> +	const char *name;
> +	struct clk_lookup *lookup;
> +
> +	clk = at91_clk_register_pll("plla", "main", 0,
> +				    &at91sam9g45_pll_layout,
> +				    &at91sam9g45_plla_characteristics);
> +	for (i = 0; i < ARRAY_SIZE(pll_clk_lookup); i++)
> +		pll_clk_lookup[i].clk = clk;
> +	clkdev_add_table(pll_clk_lookup, ARRAY_SIZE(pll_clk_lookup));
> +	clk = at91_clk_register_plldiv("plladiv", "plla");
>   
> -	for (i = 0; i < ARRAY_SIZE(periph_clocks); i++)
> -		clk_register(periph_clocks[i]);
> +	clk = at91_clk_register_utmi("utmi_clk", "main");
> +	for (i = 0; i < ARRAY_SIZE(utmi_clk_lookup); i++)
> +		utmi_clk_lookup[i].clk = clk;
> +	clkdev_add_table(utmi_clk_lookup, ARRAY_SIZE(utmi_clk_lookup));
>   
> -	clkdev_add_table(periph_clocks_lookups,
> -			 ARRAY_SIZE(periph_clocks_lookups));
> -	clkdev_add_table(usart_clocks_lookups,
> -			 ARRAY_SIZE(usart_clocks_lookups));
> +	clk = at91_clk_register_master("mck",
> +				       ARRAY_SIZE(master_clock_parent_names),
> +				       master_clock_parent_names,
> +				       &at91rm9200_master_layout,
> +				       &at91sam9g45_master_characteristics);
> +	for (i = 0; i < ARRAY_SIZE(mck_clk_lookup); i++)
> +		mck_clk_lookup[i].clk = clk;
> +	clkdev_add_table(mck_clk_lookup, ARRAY_SIZE(mck_clk_lookup));
>   
> -	if (cpu_is_at91sam9m10() || cpu_is_at91sam9m11())
> -		clk_register(&vdec_clk);
> +	for (i = 0; i < ARRAY_SIZE(periph_clock_lookup_sizes); i++) {
> +		size = periph_clock_lookup_sizes[i];
> +		lookup = periph_clock_lookups[i];
> +		if (!size || !lookup)
> +			continue;
> +		name = periph_clock_lookups[i][0].con_id;
> +		if (!name)
> +			continue;
> +		clk = at91_clk_register_peripheral(name, "mck", i);
> +
> +		for (k = 0; k < size; k++)
> +			lookup[k].clk = clk;
> +		clkdev_add_table(lookup, size);
> +	}
> +
> +	if (cpu_is_at91sam9m10() || cpu_is_at91sam9m11()) {
> +		clk = at91_clk_register_peripheral(vdec_clk_lookup[0].con_id,
> +						   "mck",
> +						   AT91SAM9G45_ID_VDEC);
> +		for (k = 0; k < ARRAY_SIZE(vdec_clk_lookup); k++)
> +			vdec_clk_lookup[k].clk = clk;
> +		clkdev_add_table(vdec_clk_lookup, ARRAY_SIZE(vdec_clk_lookup));
> +	}
> +
> +	if (cpu_is_at91sam9m11() || cpu_is_at91sam9g46()) {
> +		clk = at91_clk_register_peripheral(vdec_clk_lookup[0].con_id,
> +						   "mck",
> +						   AT91SAM9G45_ID_AESTDESSHA);
There is a bug here. It should be:
clk = at91_clk_register_peripheral(aestdessha_clk_lookup[0].con_id, 
"mck", AT91SAM9G45_ID_AESTDESSHA);
> +		for (k = 0; k < ARRAY_SIZE(aestdessha_clk_lookup); k++)
> +			aestdessha_clk_lookup[k].clk = clk;
> +		clkdev_add_table(vdec_clk_lookup,
> +				 ARRAY_SIZE(aestdessha_clk_lookup));
Same bug here:

clkdev_add_table(aestdessha_clk_lookup, ARRAY_SIZE(aestdessha_clk_lookup));


These bugs will be fixed in next version.
> +	}
> +
> +	for (i = 0; i < ARRAY_SIZE(prog_clock_names); i++) {
> +		name = prog_clock_names[i];
> +		clk = at91_clk_register_programmable(name,
> +					prog_clock_parent_names,
> +					ARRAY_SIZE(prog_clock_parent_names),
> +					i, &at91sam9g45_programmable_layout);
> +	}
> +
> +	clk = at91sam9x5_clk_register_usb("usbck", usb_clock_parent_names,
> +					  ARRAY_SIZE(usb_clock_parent_names),
> +					  0);
> +	for (i = 0; i < ARRAY_SIZE(usb_clk_lookup); i++)
> +		usb_clk_lookup[i].clk = clk;
> +	clkdev_add_table(usb_clk_lookup, ARRAY_SIZE(usb_clk_lookup));
> +
> +	for (i = 0; i < ARRAY_SIZE(system_clock_lookup_sizes); i++) {
> +		size = system_clock_lookup_sizes[i];
> +		lookup = system_clock_lookups[i];
> +		if (!size || !lookup)
> +			continue;
> +		name = system_clock_lookups[i][0].con_id;
> +		if (!name)
> +			continue;
> +		clk = at91_clk_register_system(name, i);
> +		for (k = 0; k < size; k++)
> +			lookup[k].clk = clk;
> +		clkdev_add_table(lookup, size);
> +	}
>   
> -	clk_register(&pck0);
> -	clk_register(&pck1);
> +	clk_register_fixed_rate(NULL, "adc_op_clk", "mck", 0, 13200000);
>   }
>   
>   /* --------------------------------------------------------------------
> diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
> index cb36fa8..13c650c 100644
> --- a/arch/arm/mach-at91/at91sam9g45_devices.c
> +++ b/arch/arm/mach-at91/at91sam9g45_devices.c
> @@ -37,7 +37,6 @@
>   
>   #include "board.h"
>   #include "generic.h"
> -#include "clock.h"
>   
>   
>   /* --------------------------------------------------------------------


  reply	other threads:[~2013-07-23 22:29 UTC|newest]

Thread overview: 129+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-17 13:34 [PATCH v2 00/42] ARM: at91: move to common clk framework Boris BREZILLON
2013-07-17 13:34 ` Boris BREZILLON
2013-07-17 13:37 ` [PATCH v2 01/42] ARM: at91: move at91_pmc.h to include/linux/clk/at91.h Boris BREZILLON
2013-07-17 13:37   ` Boris BREZILLON
2013-07-23 18:03   ` Jean-Christophe PLAGNIOL-VILLARD
2013-07-23 18:03     ` Jean-Christophe PLAGNIOL-VILLARD
2013-07-23 22:24     ` boris brezillon
2013-07-23 22:24       ` boris brezillon
2013-07-17 13:40 ` [PATCH v2 02/42] ARM: at91: add PMC main clock Boris BREZILLON
2013-07-17 13:40   ` Boris BREZILLON
2013-07-17 16:39   ` boris brezillon
2013-07-17 16:39     ` boris brezillon
2013-07-26 16:41   ` boris brezillon
2013-07-26 16:41     ` boris brezillon
2013-07-17 13:42 ` [PATCH v2 03/42] ARM: at91: add PMC pll clocks Boris BREZILLON
2013-07-17 13:42   ` Boris BREZILLON
2013-07-17 13:42   ` Boris BREZILLON
2013-07-17 13:44 ` [PATCH v2 04/42] ARM: at91: add PMC master clock Boris BREZILLON
2013-07-17 13:44   ` Boris BREZILLON
2013-07-17 13:45 ` [PATCH v2 05/42] ARM: at91: add PMC system clocks Boris BREZILLON
2013-07-17 13:45   ` Boris BREZILLON
2013-07-17 13:46 ` [PATCH v2 06/42] ARM: at91: add PMC peripheral clocks Boris BREZILLON
2013-07-17 13:46   ` Boris BREZILLON
2013-07-17 13:47 ` [PATCH v2 07/42] ARM: at91: add PMC programmable clocks Boris BREZILLON
2013-07-17 13:47   ` Boris BREZILLON
2013-07-17 13:50 ` [PATCH v2 08/42] ARM: at91: add PMC utmi clock Boris BREZILLON
2013-07-17 13:50   ` Boris BREZILLON
2013-07-17 13:52 ` [PATCH v2 09/42] ARM: at91: add PMC usb clock Boris BREZILLON
2013-07-17 13:52   ` Boris BREZILLON
2013-07-17 13:53 ` [PATCH v2 10/42] ARM: at91: add PMC smd clock Boris BREZILLON
2013-07-17 13:53   ` Boris BREZILLON
2013-07-17 13:55 ` [PATCH v2 11/42] ARM: at91: add PMC clk device tree binding doc Boris BREZILLON
2013-07-17 13:55   ` Boris BREZILLON
2013-07-17 14:35 ` [PATCH v2 12/42] ARM: at91: move to common clk framework Boris BREZILLON
2013-07-17 14:35   ` Boris BREZILLON
2013-07-17 14:41 ` [PATCH v2 13/42] ARM: at91: move at91rm9200 SoC to new at91 clk implem Boris BREZILLON
2013-07-17 14:41   ` Boris BREZILLON
2013-07-17 14:42 ` [PATCH v2 14/42] ARM: at91: move at91sam9260 " Boris BREZILLON
2013-07-17 14:42   ` Boris BREZILLON
2013-07-17 14:44 ` [PATCH v2 15/42] ARM: at91: move at91sam9261 " Boris BREZILLON
2013-07-17 14:44   ` Boris BREZILLON
2013-07-17 14:45 ` [PATCH v2 16/42] ARM: at91: move at91sam9263 " Boris BREZILLON
2013-07-17 14:45   ` Boris BREZILLON
2013-07-17 14:49 ` [PATCH v2 17/42] ARM: at91: move at91sam9g45 " Boris BREZILLON
2013-07-17 14:49   ` Boris BREZILLON
2013-07-23 22:29   ` boris brezillon [this message]
2013-07-23 22:29     ` boris brezillon
2013-07-17 14:49 ` [PATCH v2 18/42] ARM: at91: move at91sam9n12 " Boris BREZILLON
2013-07-17 14:49   ` Boris BREZILLON
2013-07-17 14:52 ` [PATCH v2 19/42] ARM: at91: move at91sam9rl " Boris BREZILLON
2013-07-17 14:52   ` Boris BREZILLON
2013-07-17 14:53 ` [PATCH v2 20/42] ARM: at91: move at91sam9x5 SoCs " Boris BREZILLON
2013-07-17 14:53   ` Boris BREZILLON
2013-07-17 14:59 ` [PATCH v2 21/42] ARM: at91: move at91sam9 " Boris BREZILLON
2013-07-17 14:59   ` Boris BREZILLON
2013-07-17 14:59 ` [PATCH v2 22/42] ARM: at91: move sama5d3 " Boris BREZILLON
2013-07-17 14:59   ` Boris BREZILLON
2013-07-17 15:00 ` [PATCH v2 23/42] ARM: at91: move at91rm9200 boards " Boris BREZILLON
2013-07-17 15:00   ` Boris BREZILLON
2013-07-17 15:37 ` [PATCH v2 24/42] ARM: at91: move at91sam9 " Boris BREZILLON
2013-07-17 15:37   ` Boris BREZILLON
2013-07-17 17:13   ` Russell King - ARM Linux
2013-07-17 17:13     ` Russell King - ARM Linux
2013-07-17 20:32     ` boris brezillon
2013-07-17 20:32       ` boris brezillon
2013-07-17 15:46 ` [PATCH v2 25/42] ARM: at91: move pit timer to common clk framework Boris BREZILLON
2013-07-17 15:46   ` Boris BREZILLON
2013-07-17 15:47 ` [PATCH v2 26/42] USB: ohci-at91: add usb_clk for transition " Boris BREZILLON
2013-07-17 15:47   ` Boris BREZILLON
2013-07-31  7:56   ` boris brezillon
2013-07-31  7:56     ` boris brezillon
2013-07-31 14:32     ` Alan Stern
2013-07-31 14:32       ` Alan Stern
2013-07-17 15:49 ` [PATCH v2 27/42] usb: gadget: at91_udc: " Boris BREZILLON
2013-07-17 15:49   ` Boris BREZILLON
2013-07-17 15:51 ` [PATCH v2 28/42] ARM: at91/dt: move at91rm9200 SoC to new at91 clk implem Boris BREZILLON
2013-07-17 15:51   ` Boris BREZILLON
2013-07-17 15:53 ` [PATCH v2 29/42] ARM: at91/dt: move at91sam9260 " Boris BREZILLON
2013-07-17 15:53   ` Boris BREZILLON
2013-07-17 15:55 ` [PATCH v2 30/42] ARM: at91/dt: move at91sam9263 " Boris BREZILLON
2013-07-17 15:55   ` Boris BREZILLON
2013-07-17 16:00 ` [PATCH v2 31/42] ARM: at91/dt: move at91sam9g45 " Boris BREZILLON
2013-07-17 16:00   ` Boris BREZILLON
2013-07-17 16:02 ` [PATCH v2 32/42] ARM: at91/dt: move at91sam9n12 " Boris BREZILLON
2013-07-17 16:02   ` Boris BREZILLON
2013-07-17 16:05 ` [PATCH v2 33/42] ARM: at91/dt: move at91sam9x5 SoCs " Boris BREZILLON
2013-07-17 16:05   ` Boris BREZILLON
2013-07-17 16:45 ` [PATCH v2 34/42] ARM: at91/dt: move at91sam9g20 SoC " Boris BREZILLON
2013-07-17 16:45   ` Boris BREZILLON
2013-07-17 16:50 ` [PATCH v2 35/42] ARM: at91/dt: move sama5d3 SoCs " Boris BREZILLON
2013-07-17 16:50   ` Boris BREZILLON
2013-07-17 20:06 ` [PATCH v2 36/42] ARM: at91/dt: move sam9260/sam9g20 " Boris BREZILLON
2013-07-17 20:06   ` Boris BREZILLON
2013-07-17 20:08 ` [PATCH v2 37/42] ARM: at91/dt: move rm9200 boards " Boris BREZILLON
2013-07-17 20:08   ` Boris BREZILLON
2013-07-17 20:09 ` [PATCH v2 38/42] ARM: at91/dt: move sam9263 " Boris BREZILLON
2013-07-17 20:09   ` Boris BREZILLON
2013-07-17 20:17 ` [PATCH v2 39/42] ARM: at91/dt: move sam9g45 " Boris BREZILLON
2013-07-17 20:17   ` Boris BREZILLON
2013-07-17 20:19 ` [PATCH v2 40/42] ARM: at91/dt: move sam9n12 " Boris BREZILLON
2013-07-17 20:19   ` Boris BREZILLON
2013-07-17 20:21 ` [PATCH v2 41/42] ARM: at91/dt: move sam9x5 " Boris BREZILLON
2013-07-17 20:21   ` Boris BREZILLON
2013-07-17 20:32 ` [PATCH v2 42/42] ARM: at91/dt: move sama5d3 " Boris BREZILLON
2013-07-17 20:32   ` Boris BREZILLON
2013-07-18  8:51 ` [PATCH v2 00/42] ARM: at91: move to common clk framework boris brezillon
2013-07-18  8:51   ` boris brezillon
2013-07-26 14:10 ` Richard Genoud
2013-07-26 14:10   ` Richard Genoud
2013-07-26 15:44   ` boris brezillon
2013-07-26 15:44     ` boris brezillon
2013-07-26 16:35     ` boris brezillon
2013-07-26 16:35       ` boris brezillon
2013-07-29  8:00       ` Richard Genoud
2013-07-29  8:00         ` Richard Genoud
2013-07-29  9:25         ` boris brezillon
2013-07-29  9:25           ` boris brezillon
2013-07-29 14:18           ` Richard Genoud
2013-07-29 14:18             ` Richard Genoud
2013-07-29 14:34             ` boris brezillon
2013-07-29 14:34               ` boris brezillon
2013-07-29 15:09               ` Richard Genoud
2013-07-29 15:09                 ` Richard Genoud
2013-07-29 15:14                 ` boris brezillon
2013-07-29 15:14                   ` boris brezillon
2013-07-29 16:44                 ` boris brezillon
2013-07-29 16:44                   ` boris brezillon
2013-07-27  4:41 ` boris brezillon
2013-07-27  4:41   ` boris brezillon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51EF03CC.2080303@overkiz.com \
    --to=b.brezillon@overkiz.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.