]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ARM: at91: make gpio register base soc independant
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Fri, 16 Sep 2011 15:37:50 +0000 (23:37 +0800)
committerJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Mon, 28 Nov 2011 14:50:37 +0000 (22:50 +0800)
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Reviewed-by: Ryan Mallon <rmallon@gmail.com>
16 files changed:
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
arch/arm/mach-at91/include/mach/at91cap9.h
arch/arm/mach-at91/include/mach/at91rm9200.h
arch/arm/mach-at91/include/mach/at91sam9260.h
arch/arm/mach-at91/include/mach/at91sam9261.h
arch/arm/mach-at91/include/mach/at91sam9263.h
arch/arm/mach-at91/include/mach/at91sam9g45.h
arch/arm/mach-at91/include/mach/at91sam9rl.h

index ecdd54dd68c6c0139d10ca50595283bcf94545d7..fe00dceba0af0c3e1c883c6be54bc11e26fb5057 100644 (file)
@@ -296,19 +296,19 @@ void __init at91cap9_set_console_clock(int id)
 static struct at91_gpio_bank at91cap9_gpio[] = {
        {
                .id             = AT91CAP9_ID_PIOABCD,
-               .offset         = AT91_PIOA,
+               .regbase        = AT91CAP9_BASE_PIOA,
                .clock          = &pioABCD_clk,
        }, {
                .id             = AT91CAP9_ID_PIOABCD,
-               .offset         = AT91_PIOB,
+               .regbase        = AT91CAP9_BASE_PIOB,
                .clock          = &pioABCD_clk,
        }, {
                .id             = AT91CAP9_ID_PIOABCD,
-               .offset         = AT91_PIOC,
+               .regbase        = AT91CAP9_BASE_PIOC,
                .clock          = &pioABCD_clk,
        }, {
                .id             = AT91CAP9_ID_PIOABCD,
-               .offset         = AT91_PIOD,
+               .regbase        = AT91CAP9_BASE_PIOD,
                .clock          = &pioABCD_clk,
        }
 };
index 713d3bdbd28447a7280adb746f4acc13af602cfd..8ce86751c2e2e05a78f990c618da070b3469fafa 100644 (file)
@@ -271,19 +271,19 @@ void __init at91rm9200_set_console_clock(int id)
 static struct at91_gpio_bank at91rm9200_gpio[] = {
        {
                .id             = AT91RM9200_ID_PIOA,
-               .offset         = AT91_PIOA,
+               .regbase        = AT91RM9200_BASE_PIOA,
                .clock          = &pioA_clk,
        }, {
                .id             = AT91RM9200_ID_PIOB,
-               .offset         = AT91_PIOB,
+               .regbase        = AT91RM9200_BASE_PIOB,
                .clock          = &pioB_clk,
        }, {
                .id             = AT91RM9200_ID_PIOC,
-               .offset         = AT91_PIOC,
+               .regbase        = AT91RM9200_BASE_PIOC,
                .clock          = &pioC_clk,
        }, {
                .id             = AT91RM9200_ID_PIOD,
-               .offset         = AT91_PIOD,
+               .regbase        = AT91RM9200_BASE_PIOD,
                .clock          = &pioD_clk,
        }
 };
index b84a9f642f5953a5ff527d3b593b1a628b61232b..1e9c79f5a6ededcd541288c6e67911d1e33b9702 100644 (file)
@@ -273,15 +273,15 @@ void __init at91sam9260_set_console_clock(int id)
 static struct at91_gpio_bank at91sam9260_gpio[] = {
        {
                .id             = AT91SAM9260_ID_PIOA,
-               .offset         = AT91_PIOA,
+               .regbase        = AT91SAM9260_BASE_PIOA,
                .clock          = &pioA_clk,
        }, {
                .id             = AT91SAM9260_ID_PIOB,
-               .offset         = AT91_PIOB,
+               .regbase        = AT91SAM9260_BASE_PIOB,
                .clock          = &pioB_clk,
        }, {
                .id             = AT91SAM9260_ID_PIOC,
-               .offset         = AT91_PIOC,
+               .regbase        = AT91SAM9260_BASE_PIOC,
                .clock          = &pioC_clk,
        }
 };
index 658a5185abfd44cf4671c5d5fa7c6f44b4fc229e..574aa6b6a78bcbb94e70bca7ae6f5938d2fa919d 100644 (file)
@@ -254,15 +254,15 @@ void __init at91sam9261_set_console_clock(int id)
 static struct at91_gpio_bank at91sam9261_gpio[] = {
        {
                .id             = AT91SAM9261_ID_PIOA,
-               .offset         = AT91_PIOA,
+               .regbase        = AT91SAM9261_BASE_PIOA,
                .clock          = &pioA_clk,
        }, {
                .id             = AT91SAM9261_ID_PIOB,
-               .offset         = AT91_PIOB,
+               .regbase        = AT91SAM9261_BASE_PIOB,
                .clock          = &pioB_clk,
        }, {
                .id             = AT91SAM9261_ID_PIOC,
-               .offset         = AT91_PIOC,
+               .regbase        = AT91SAM9261_BASE_PIOC,
                .clock          = &pioC_clk,
        }
 };
index f83fbb0ee0c58e9bdaab924071bedaf148096bb2..dee0ed7d88e451f89cdfb2057255350364a91a53 100644 (file)
@@ -266,23 +266,23 @@ void __init at91sam9263_set_console_clock(int id)
 static struct at91_gpio_bank at91sam9263_gpio[] = {
        {
                .id             = AT91SAM9263_ID_PIOA,
-               .offset         = AT91_PIOA,
+               .regbase        = AT91SAM9263_BASE_PIOA,
                .clock          = &pioA_clk,
        }, {
                .id             = AT91SAM9263_ID_PIOB,
-               .offset         = AT91_PIOB,
+               .regbase        = AT91SAM9263_BASE_PIOB,
                .clock          = &pioB_clk,
        }, {
                .id             = AT91SAM9263_ID_PIOCDE,
-               .offset         = AT91_PIOC,
+               .regbase        = AT91SAM9263_BASE_PIOC,
                .clock          = &pioCDE_clk,
        }, {
                .id             = AT91SAM9263_ID_PIOCDE,
-               .offset         = AT91_PIOD,
+               .regbase        = AT91SAM9263_BASE_PIOD,
                .clock          = &pioCDE_clk,
        }, {
                .id             = AT91SAM9263_ID_PIOCDE,
-               .offset         = AT91_PIOE,
+               .regbase        = AT91SAM9263_BASE_PIOE,
                .clock          = &pioCDE_clk,
        }
 };
index 318b0407ea041fa8d8dae59c106d8427ea48b8ec..404d70cececb9a586e37c78ab5a60484b0ec6fc0 100644 (file)
@@ -296,23 +296,23 @@ void __init at91sam9g45_set_console_clock(int id)
 static struct at91_gpio_bank at91sam9g45_gpio[] = {
        {
                .id             = AT91SAM9G45_ID_PIOA,
-               .offset         = AT91_PIOA,
+               .regbase        = AT91SAM9G45_BASE_PIOA,
                .clock          = &pioA_clk,
        }, {
                .id             = AT91SAM9G45_ID_PIOB,
-               .offset         = AT91_PIOB,
+               .regbase        = AT91SAM9G45_BASE_PIOB,
                .clock          = &pioB_clk,
        }, {
                .id             = AT91SAM9G45_ID_PIOC,
-               .offset         = AT91_PIOC,
+               .regbase        = AT91SAM9G45_BASE_PIOC,
                .clock          = &pioC_clk,
        }, {
                .id             = AT91SAM9G45_ID_PIODE,
-               .offset         = AT91_PIOD,
+               .regbase        = AT91SAM9G45_BASE_PIOD,
                .clock          = &pioDE_clk,
        }, {
                .id             = AT91SAM9G45_ID_PIODE,
-               .offset         = AT91_PIOE,
+               .regbase        = AT91SAM9G45_BASE_PIOE,
                .clock          = &pioDE_clk,
        }
 };
index a238105d2c11dabb385c7f8bbbcfa20be87b2982..c4004e21d8059b742163681d3b9146af30ac5b91 100644 (file)
@@ -246,19 +246,19 @@ void __init at91sam9rl_set_console_clock(int id)
 static struct at91_gpio_bank at91sam9rl_gpio[] = {
        {
                .id             = AT91SAM9RL_ID_PIOA,
-               .offset         = AT91_PIOA,
+               .regbase        = AT91SAM9RL_BASE_PIOA,
                .clock          = &pioA_clk,
        }, {
                .id             = AT91SAM9RL_ID_PIOB,
-               .offset         = AT91_PIOB,
+               .regbase        = AT91SAM9RL_BASE_PIOB,
                .clock          = &pioB_clk,
        }, {
                .id             = AT91SAM9RL_ID_PIOC,
-               .offset         = AT91_PIOC,
+               .regbase        = AT91SAM9RL_BASE_PIOC,
                .clock          = &pioC_clk,
        }, {
                .id             = AT91SAM9RL_ID_PIOD,
-               .offset         = AT91_PIOD,
+               .regbase        = AT91SAM9RL_BASE_PIOD,
                .clock          = &pioD_clk,
        }
 };
index 938b34f577419b9dba43f466c3d59dfe4b73fe69..11d7297eee22a1bd34dfa5dad65c5a197d4ac58a 100644 (file)
@@ -65,7 +65,7 @@ extern void at91sam9_alt_reset(void);
 
 struct at91_gpio_bank {
        unsigned short id;              /* peripheral ID */
-       unsigned long offset;           /* offset from system peripheral base */
+       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);
index 224e9e2f867453bd85b08b371edf888f961d6e6e..cedb753f4cad366406ed9e8fda4907898869f4d5 100644 (file)
@@ -614,8 +614,12 @@ void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks)
 
                at91_gpio->bank = &data[i];
                at91_gpio->chip.base = PIN_BASE + i * 32;
-               at91_gpio->regbase = at91_gpio->bank->offset +
-                       (void __iomem *)AT91_VA_BASE_SYS;
+
+               at91_gpio->regbase = ioremap(at91_gpio->bank->regbase, 512);
+               if (!at91_gpio->regbase) {
+                       pr_err("at91_gpio.%d, failed to map registers, ignoring.\n", i);
+                       continue;
+               }
 
                /* enable PIO controller's clock */
                clk_enable(at91_gpio->bank->clock);
index c5df1e8f19557854199b08b767935f358d4307c0..f65d0834eee7ac69aac66e68ed9f2a07d45c338e 100644 (file)
 #define AT91_DMA       (0xffffec00 - AT91_BASE_SYS)
 #define AT91_DBGU      (0xffffee00 - AT91_BASE_SYS)
 #define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOD      (0xfffff800 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
 #define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
                        (0xfffffd50 - AT91_BASE_SYS) :  \
                        (0xfffffd60 - AT91_BASE_SYS))
 
+#define AT91CAP9_BASE_PIOA     0xfffff200
+#define AT91CAP9_BASE_PIOB     0xfffff400
+#define AT91CAP9_BASE_PIOC     0xfffff600
+#define AT91CAP9_BASE_PIOD     0xfffff800
+
 #define AT91_USART0    AT91CAP9_BASE_US0
 #define AT91_USART1    AT91CAP9_BASE_US1
 #define AT91_USART2    AT91CAP9_BASE_US2
index e4037b500302d1571701937c4547bc4f33e53e14..57409549585fee5e7e617b86ad343d5bd6521c4d 100644 (file)
  */
 #define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)    /* Advanced Interrupt Controller */
 #define AT91_DBGU      (0xfffff200 - AT91_BASE_SYS)    /* Debug Unit */
-#define AT91_PIOA      (0xfffff400 - AT91_BASE_SYS)    /* PIO Controller A */
-#define AT91_PIOB      (0xfffff600 - AT91_BASE_SYS)    /* PIO Controller B */
-#define AT91_PIOC      (0xfffff800 - AT91_BASE_SYS)    /* PIO Controller C */
-#define AT91_PIOD      (0xfffffa00 - AT91_BASE_SYS)    /* PIO Controller D */
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)    /* Power Management Controller */
 #define AT91_ST                (0xfffffd00 - AT91_BASE_SYS)    /* System Timer */
 #define AT91_RTC       (0xfffffe00 - AT91_BASE_SYS)    /* Real-Time Clock */
 #define AT91_MC                (0xffffff00 - AT91_BASE_SYS)    /* Memory Controllers */
 
+#define AT91RM9200_BASE_PIOA   0xfffff400      /* PIO Controller A */
+#define AT91RM9200_BASE_PIOB   0xfffff600      /* PIO Controller B */
+#define AT91RM9200_BASE_PIOC   0xfffff800      /* PIO Controller C */
+#define AT91RM9200_BASE_PIOD   0xfffffa00      /* PIO Controller D */
+
 #define AT91_USART0    AT91RM9200_BASE_US0
 #define AT91_USART1    AT91RM9200_BASE_US1
 #define AT91_USART2    AT91RM9200_BASE_US2
index 9a791165913f07f2a50489130a4fd9fecbb681b2..1bea3dcae7bc2522e81f19d8a4156933aa040bc4 100644 (file)
@@ -87,9 +87,6 @@
 #define AT91_CCFG      (0xffffef10 - AT91_BASE_SYS)
 #define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
 #define AT91_DBGU      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff800 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
 #define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
 #define AT91_WDT       (0xfffffd40 - AT91_BASE_SYS)
 #define AT91_GPBR      (0xfffffd50 - AT91_BASE_SYS)
 
+#define AT91SAM9260_BASE_PIOA  0xfffff400
+#define AT91SAM9260_BASE_PIOB  0xfffff600
+#define AT91SAM9260_BASE_PIOC  0xfffff800
+
 #define AT91_USART0    AT91SAM9260_BASE_US0
 #define AT91_USART1    AT91SAM9260_BASE_US1
 #define AT91_USART2    AT91SAM9260_BASE_US2
index ce596204cefa6c23cde9de020693a9ebe77fcabb..17ae9c73be5e9313f18acaed8ed21239b33a499e 100644 (file)
@@ -70,9 +70,6 @@
 #define AT91_MATRIX    (0xffffee00 - AT91_BASE_SYS)
 #define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
 #define AT91_DBGU      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff800 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
 #define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
 #define AT91_WDT       (0xfffffd40 - AT91_BASE_SYS)
 #define AT91_GPBR      (0xfffffd50 - AT91_BASE_SYS)
 
+#define AT91SAM9261_BASE_PIOA  0xfffff400
+#define AT91SAM9261_BASE_PIOB  0xfffff600
+#define AT91SAM9261_BASE_PIOC  0xfffff800
+
 #define AT91_USART0    AT91SAM9261_BASE_US0
 #define AT91_USART1    AT91SAM9261_BASE_US1
 #define AT91_USART2    AT91SAM9261_BASE_US2
index f1b92961a2b19a5d883d503dead47d70e0e4e5cd..dd54079c5671ccc28955a6fbf164411e973fbd88 100644 (file)
 #define AT91_CCFG      (0xffffed10 - AT91_BASE_SYS)
 #define AT91_DBGU      (0xffffee00 - AT91_BASE_SYS)
 #define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOD      (0xfffff800 - AT91_BASE_SYS)
-#define AT91_PIOE      (0xfffffa00 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
 #define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
 #define AT91_RTT1      (0xfffffd50 - AT91_BASE_SYS)
 #define AT91_GPBR      (0xfffffd60 - AT91_BASE_SYS)
 
+#define AT91SAM9263_BASE_PIOA  0xfffff200
+#define AT91SAM9263_BASE_PIOB  0xfffff400
+#define AT91SAM9263_BASE_PIOC  0xfffff600
+#define AT91SAM9263_BASE_PIOD  0xfffff800
+#define AT91SAM9263_BASE_PIOE  0xfffffa00
+
 #define AT91_USART0    AT91SAM9263_BASE_US0
 #define AT91_USART1    AT91SAM9263_BASE_US1
 #define AT91_USART2    AT91SAM9263_BASE_US2
index 406bb6496805f38e82790157b98b82b98622a366..a487af5a2237bc37e7e595dfdac4d503081eaf29 100644 (file)
 #define AT91_DMA       (0xffffec00 - AT91_BASE_SYS)
 #define AT91_DBGU      (0xffffee00 - AT91_BASE_SYS)
 #define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOD      (0xfffff800 - AT91_BASE_SYS)
-#define AT91_PIOE      (0xfffffa00 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
 #define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
 #define AT91_GPBR      (0xfffffd60 - AT91_BASE_SYS)
 #define AT91_RTC       (0xfffffdb0 - AT91_BASE_SYS)
 
+#define AT91SAM9G45_BASE_PIOA  0xfffff200
+#define AT91SAM9G45_BASE_PIOB  0xfffff400
+#define AT91SAM9G45_BASE_PIOC  0xfffff600
+#define AT91SAM9G45_BASE_PIOD  0xfffff800
+#define AT91SAM9G45_BASE_PIOE  0xfffffa00
+
 #define AT91_USART0    AT91SAM9G45_BASE_US0
 #define AT91_USART1    AT91SAM9G45_BASE_US1
 #define AT91_USART2    AT91SAM9G45_BASE_US2
index 1aabacd315d4adb74874fbd71e2532081e58e941..d3ef11ad04dfc33391ba12a0e86f497799a7115a 100644 (file)
 #define AT91_CCFG      (0xffffef10 - AT91_BASE_SYS)
 #define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
 #define AT91_DBGU      (0xfffff200 - AT91_BASE_SYS)
-#define AT91_PIOA      (0xfffff400 - AT91_BASE_SYS)
-#define AT91_PIOB      (0xfffff600 - AT91_BASE_SYS)
-#define AT91_PIOC      (0xfffff800 - AT91_BASE_SYS)
-#define AT91_PIOD      (0xfffffa00 - AT91_BASE_SYS)
 #define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
 #define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
 #define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
 #define AT91_GPBR      (0xfffffd60 - AT91_BASE_SYS)
 #define AT91_RTC       (0xfffffe00 - AT91_BASE_SYS)
 
+#define AT91SAM9RL_BASE_PIOA   0xfffff400
+#define AT91SAM9RL_BASE_PIOB   0xfffff600
+#define AT91SAM9RL_BASE_PIOC   0xfffff800
+#define AT91SAM9RL_BASE_PIOD   0xfffffa00
+
 #define AT91_USART0    AT91SAM9RL_BASE_US0
 #define AT91_USART1    AT91SAM9RL_BASE_US1
 #define AT91_USART2    AT91SAM9RL_BASE_US2