ARM: at91: switch gpio clock to clkdev
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Sun, 13 Nov 2011 05:00:58 +0000 (13:00 +0800)
committerArnd Bergmann <arnd@arndb.de>
Tue, 29 Nov 2011 15:46:12 +0000 (15:46 +0000)
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
arch/arm/mach-at91/at91cap9.c
arch/arm/mach-at91/at91rm9200.c
arch/arm/mach-at91/at91sam9260.c
arch/arm/mach-at91/at91sam9261.c
arch/arm/mach-at91/at91sam9263.c
arch/arm/mach-at91/at91sam9g45.c
arch/arm/mach-at91/at91sam9rl.c
arch/arm/mach-at91/generic.h
arch/arm/mach-at91/gpio.c

index dcfa8af845abc689d44501dd48cde8edfb56ae04..f7f7e1ea2d1f907f3764bf6b03982e7518926c94 100644 (file)
@@ -222,6 +222,10 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
        /* fake hclk clock */
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
+       CLKDEV_CON_ID("pioA", &pioABCD_clk),
+       CLKDEV_CON_ID("pioB", &pioABCD_clk),
+       CLKDEV_CON_ID("pioC", &pioABCD_clk),
+       CLKDEV_CON_ID("pioD", &pioABCD_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -298,19 +302,15 @@ static struct at91_gpio_bank at91cap9_gpio[] = {
        {
                .id             = AT91CAP9_ID_PIOABCD,
                .regbase        = AT91CAP9_BASE_PIOA,
-               .clock          = &pioABCD_clk,
        }, {
                .id             = AT91CAP9_ID_PIOABCD,
                .regbase        = AT91CAP9_BASE_PIOB,
-               .clock          = &pioABCD_clk,
        }, {
                .id             = AT91CAP9_ID_PIOABCD,
                .regbase        = AT91CAP9_BASE_PIOC,
-               .clock          = &pioABCD_clk,
        }, {
                .id             = AT91CAP9_ID_PIOABCD,
                .regbase        = AT91CAP9_BASE_PIOD,
-               .clock          = &pioABCD_clk,
        }
 };
 
index c06c14fecba4b995c0269571da1181329c77afbd..7470f6381752fe1055052bde4c337fdb57103def 100644 (file)
@@ -196,6 +196,10 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
        /* fake hclk clock */
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
+       CLKDEV_CON_ID("pioA", &pioA_clk),
+       CLKDEV_CON_ID("pioB", &pioB_clk),
+       CLKDEV_CON_ID("pioC", &pioC_clk),
+       CLKDEV_CON_ID("pioD", &pioD_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -273,19 +277,15 @@ static struct at91_gpio_bank at91rm9200_gpio[] = {
        {
                .id             = AT91RM9200_ID_PIOA,
                .regbase        = AT91RM9200_BASE_PIOA,
-               .clock          = &pioA_clk,
        }, {
                .id             = AT91RM9200_ID_PIOB,
                .regbase        = AT91RM9200_BASE_PIOB,
-               .clock          = &pioB_clk,
        }, {
                .id             = AT91RM9200_ID_PIOC,
                .regbase        = AT91RM9200_BASE_PIOC,
-               .clock          = &pioC_clk,
        }, {
                .id             = AT91RM9200_ID_PIOD,
                .regbase        = AT91RM9200_BASE_PIOD,
-               .clock          = &pioD_clk,
        }
 };
 
index e94cc2268461def198b68b6f2a6cc4fea0aac8e9..943da2100cdc08ed8f91ae78d2cc12374100dc05 100644 (file)
@@ -210,6 +210,9 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("usart", "fffd8000.serial", &usart5_clk),
        /* fake hclk clock */
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
+       CLKDEV_CON_ID("pioA", &pioA_clk),
+       CLKDEV_CON_ID("pioB", &pioB_clk),
+       CLKDEV_CON_ID("pioC", &pioC_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -275,15 +278,12 @@ static struct at91_gpio_bank at91sam9260_gpio[] = {
        {
                .id             = AT91SAM9260_ID_PIOA,
                .regbase        = AT91SAM9260_BASE_PIOA,
-               .clock          = &pioA_clk,
        }, {
                .id             = AT91SAM9260_ID_PIOB,
                .regbase        = AT91SAM9260_BASE_PIOB,
-               .clock          = &pioB_clk,
        }, {
                .id             = AT91SAM9260_ID_PIOC,
                .regbase        = AT91SAM9260_BASE_PIOC,
-               .clock          = &pioC_clk,
        }
 };
 
index 80e3e0fac6b1a136c044db328af5b3761267c914..dd7924c996fcc5e4863d09f8a2688788f758efac 100644 (file)
@@ -175,6 +175,9 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
        CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &hck0),
+       CLKDEV_CON_ID("pioA", &pioA_clk),
+       CLKDEV_CON_ID("pioB", &pioB_clk),
+       CLKDEV_CON_ID("pioC", &pioC_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -254,15 +257,12 @@ static struct at91_gpio_bank at91sam9261_gpio[] = {
        {
                .id             = AT91SAM9261_ID_PIOA,
                .regbase        = AT91SAM9261_BASE_PIOA,
-               .clock          = &pioA_clk,
        }, {
                .id             = AT91SAM9261_ID_PIOB,
                .regbase        = AT91SAM9261_BASE_PIOB,
-               .clock          = &pioB_clk,
        }, {
                .id             = AT91SAM9261_ID_PIOC,
                .regbase        = AT91SAM9261_BASE_PIOC,
-               .clock          = &pioC_clk,
        }
 };
 
index 5c14b22928a89fdf2e7751aa5776e499fdf367ba..5a74741745930c68ab51ccb15e6685ee50c9f6ec 100644 (file)
@@ -192,6 +192,11 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk),
        /* fake hclk clock */
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
+       CLKDEV_CON_ID("pioA", &pioA_clk),
+       CLKDEV_CON_ID("pioB", &pioB_clk),
+       CLKDEV_CON_ID("pioC", &pioCDE_clk),
+       CLKDEV_CON_ID("pioD", &pioCDE_clk),
+       CLKDEV_CON_ID("pioE", &pioCDE_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -268,23 +273,18 @@ static struct at91_gpio_bank at91sam9263_gpio[] = {
        {
                .id             = AT91SAM9263_ID_PIOA,
                .regbase        = AT91SAM9263_BASE_PIOA,
-               .clock          = &pioA_clk,
        }, {
                .id             = AT91SAM9263_ID_PIOB,
                .regbase        = AT91SAM9263_BASE_PIOB,
-               .clock          = &pioB_clk,
        }, {
                .id             = AT91SAM9263_ID_PIOCDE,
                .regbase        = AT91SAM9263_BASE_PIOC,
-               .clock          = &pioCDE_clk,
        }, {
                .id             = AT91SAM9263_ID_PIOCDE,
                .regbase        = AT91SAM9263_BASE_PIOD,
-               .clock          = &pioCDE_clk,
        }, {
                .id             = AT91SAM9263_ID_PIOCDE,
                .regbase        = AT91SAM9263_BASE_PIOE,
-               .clock          = &pioCDE_clk,
        }
 };
 
index c0c9fa7b73f00c21dc132436510d24909984c4b8..4bb0bf00b3a41a9e8e54f219669d65b9e3b6cb8c 100644 (file)
@@ -232,6 +232,11 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("usart", "fff98000.serial", &usart3_clk),
        /* fake hclk clock */
        CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_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),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -298,23 +303,18 @@ static struct at91_gpio_bank at91sam9g45_gpio[] = {
        {
                .id             = AT91SAM9G45_ID_PIOA,
                .regbase        = AT91SAM9G45_BASE_PIOA,
-               .clock          = &pioA_clk,
        }, {
                .id             = AT91SAM9G45_ID_PIOB,
                .regbase        = AT91SAM9G45_BASE_PIOB,
-               .clock          = &pioB_clk,
        }, {
                .id             = AT91SAM9G45_ID_PIOC,
                .regbase        = AT91SAM9G45_BASE_PIOC,
-               .clock          = &pioC_clk,
        }, {
                .id             = AT91SAM9G45_ID_PIODE,
                .regbase        = AT91SAM9G45_BASE_PIOD,
-               .clock          = &pioDE_clk,
        }, {
                .id             = AT91SAM9G45_ID_PIODE,
                .regbase        = AT91SAM9G45_BASE_PIOE,
-               .clock          = &pioDE_clk,
        }
 };
 
index 6856badc518bc4facbebf8f6560ea6451f70003a..60555d4738f8b7996ce6d6882513bfa58eeddfc9 100644 (file)
@@ -183,6 +183,10 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk),
        CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
        CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
+       CLKDEV_CON_ID("pioA", &pioA_clk),
+       CLKDEV_CON_ID("pioB", &pioB_clk),
+       CLKDEV_CON_ID("pioC", &pioC_clk),
+       CLKDEV_CON_ID("pioD", &pioD_clk),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
@@ -246,19 +250,15 @@ static struct at91_gpio_bank at91sam9rl_gpio[] = {
        {
                .id             = AT91SAM9RL_ID_PIOA,
                .regbase        = AT91SAM9RL_BASE_PIOA,
-               .clock          = &pioA_clk,
        }, {
                .id             = AT91SAM9RL_ID_PIOB,
                .regbase        = AT91SAM9RL_BASE_PIOB,
-               .clock          = &pioB_clk,
        }, {
                .id             = AT91SAM9RL_ID_PIOC,
                .regbase        = AT91SAM9RL_BASE_PIOC,
-               .clock          = &pioC_clk,
        }, {
                .id             = AT91SAM9RL_ID_PIOD,
                .regbase        = AT91SAM9RL_BASE_PIOD,
-               .clock          = &pioD_clk,
        }
 };
 
index bc1776406f426da8304d58323e992ae04f0f16c5..40309588f3600a0ce0c779e50b2fba4f1d3b788a 100644 (file)
@@ -70,7 +70,6 @@ extern void at91_ioremap_shdwc(u32 base_addr);
 struct at91_gpio_bank {
        unsigned short id;              /* peripheral ID */
        unsigned long regbase;          /* offset from system peripheral base */
-       struct clk *clock;              /* associated clock */
 };
 extern void __init at91_gpio_init(struct at91_gpio_bank *, int nr_banks);
 extern void __init at91_gpio_irq_setup(void);
index cedb753f4cad366406ed9e8fda4907898869f4d5..4059f07eb95549ce911ba9c11967534cd9175362 100644 (file)
@@ -31,6 +31,7 @@ struct at91_gpio_chip {
        struct at91_gpio_chip   *next;          /* Bank sharing same clock */
        struct at91_gpio_bank   *bank;          /* Bank definition */
        void __iomem            *regbase;       /* Base of register bank */
+       struct clk              *clock;         /* associated clock */
 };
 
 #define to_at91_gpio_chip(c) container_of(c, struct at91_gpio_chip, chip)
@@ -58,11 +59,11 @@ static int at91_gpiolib_direction_input(struct gpio_chip *chip,
        }
 
 static struct at91_gpio_chip gpio_chip[] = {
-       AT91_GPIO_CHIP("A", 0x00 + PIN_BASE, 32),
-       AT91_GPIO_CHIP("B", 0x20 + PIN_BASE, 32),
-       AT91_GPIO_CHIP("C", 0x40 + PIN_BASE, 32),
-       AT91_GPIO_CHIP("D", 0x60 + PIN_BASE, 32),
-       AT91_GPIO_CHIP("E", 0x80 + PIN_BASE, 32),
+       AT91_GPIO_CHIP("pioA", 0x00 + PIN_BASE, 32),
+       AT91_GPIO_CHIP("pioB", 0x20 + PIN_BASE, 32),
+       AT91_GPIO_CHIP("pioC", 0x40 + PIN_BASE, 32),
+       AT91_GPIO_CHIP("pioD", 0x60 + PIN_BASE, 32),
+       AT91_GPIO_CHIP("pioE", 0x80 + PIN_BASE, 32),
 };
 
 static int gpio_banks;
@@ -302,7 +303,7 @@ void at91_gpio_suspend(void)
                __raw_writel(wakeups[i], pio + PIO_IER);
 
                if (!wakeups[i])
-                       clk_disable(gpio_chip[i].bank->clock);
+                       clk_disable(gpio_chip[i].clock);
                else {
 #ifdef CONFIG_PM_DEBUG
                        printk(KERN_DEBUG "GPIO-%c may wake for %08x\n", 'A'+i, wakeups[i]);
@@ -319,7 +320,7 @@ void at91_gpio_resume(void)
                void __iomem    *pio = gpio_chip[i].regbase;
 
                if (!wakeups[i])
-                       clk_enable(gpio_chip[i].bank->clock);
+                       clk_enable(gpio_chip[i].clock);
 
                __raw_writel(wakeups[i], pio + PIO_IDR);
                __raw_writel(backups[i], pio + PIO_IER);
@@ -621,8 +622,14 @@ void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks)
                        continue;
                }
 
+               at91_gpio->clock = clk_get_sys(NULL, at91_gpio->chip.label);
+               if (!at91_gpio->clock) {
+                       pr_err("at91_gpio.%d, failed to get clock, ignoring.\n", i);
+                       continue;
+               }
+
                /* enable PIO controller's clock */
-               clk_enable(at91_gpio->bank->clock);
+               clk_enable(at91_gpio->clock);
 
                /* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */
                if (last && last->bank->id == at91_gpio->bank->id)
This page took 0.039296 seconds and 5 git commands to generate.