aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2011-11-13 00:00:58 -0500
committerArnd Bergmann <arnd@arndb.de>2011-11-29 10:46:12 -0500
commit619d4a4b40f44c1b45263a0e0c9598e3139a1fec (patch)
tree1cf30395b134a16812a18fb58e47f125920ad29d
parented20178d6266e0b9c9370e6862ac1eadadb8b321 (diff)
ARM: at91: switch gpio clock to clkdev
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
-rw-r--r--arch/arm/mach-at91/at91cap9.c8
-rw-r--r--arch/arm/mach-at91/at91rm9200.c8
-rw-r--r--arch/arm/mach-at91/at91sam9260.c6
-rw-r--r--arch/arm/mach-at91/at91sam9261.c6
-rw-r--r--arch/arm/mach-at91/at91sam9263.c10
-rw-r--r--arch/arm/mach-at91/at91sam9g45.c10
-rw-r--r--arch/arm/mach-at91/at91sam9rl.c8
-rw-r--r--arch/arm/mach-at91/generic.h1
-rw-r--r--arch/arm/mach-at91/gpio.c23
9 files changed, 43 insertions, 37 deletions
diff --git a/arch/arm/mach-at91/at91cap9.c b/arch/arm/mach-at91/at91cap9.c
index dcfa8af845ab..f7f7e1ea2d1f 100644
--- a/arch/arm/mach-at91/at91cap9.c
+++ b/arch/arm/mach-at91/at91cap9.c
@@ -222,6 +222,10 @@ static struct clk_lookup periph_clocks_lookups[] = {
222 CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), 222 CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
223 /* fake hclk clock */ 223 /* fake hclk clock */
224 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), 224 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
225 CLKDEV_CON_ID("pioA", &pioABCD_clk),
226 CLKDEV_CON_ID("pioB", &pioABCD_clk),
227 CLKDEV_CON_ID("pioC", &pioABCD_clk),
228 CLKDEV_CON_ID("pioD", &pioABCD_clk),
225}; 229};
226 230
227static struct clk_lookup usart_clocks_lookups[] = { 231static struct clk_lookup usart_clocks_lookups[] = {
@@ -298,19 +302,15 @@ static struct at91_gpio_bank at91cap9_gpio[] = {
298 { 302 {
299 .id = AT91CAP9_ID_PIOABCD, 303 .id = AT91CAP9_ID_PIOABCD,
300 .regbase = AT91CAP9_BASE_PIOA, 304 .regbase = AT91CAP9_BASE_PIOA,
301 .clock = &pioABCD_clk,
302 }, { 305 }, {
303 .id = AT91CAP9_ID_PIOABCD, 306 .id = AT91CAP9_ID_PIOABCD,
304 .regbase = AT91CAP9_BASE_PIOB, 307 .regbase = AT91CAP9_BASE_PIOB,
305 .clock = &pioABCD_clk,
306 }, { 308 }, {
307 .id = AT91CAP9_ID_PIOABCD, 309 .id = AT91CAP9_ID_PIOABCD,
308 .regbase = AT91CAP9_BASE_PIOC, 310 .regbase = AT91CAP9_BASE_PIOC,
309 .clock = &pioABCD_clk,
310 }, { 311 }, {
311 .id = AT91CAP9_ID_PIOABCD, 312 .id = AT91CAP9_ID_PIOABCD,
312 .regbase = AT91CAP9_BASE_PIOD, 313 .regbase = AT91CAP9_BASE_PIOD,
313 .clock = &pioABCD_clk,
314 } 314 }
315}; 315};
316 316
diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c
index c06c14fecba4..7470f6381752 100644
--- a/arch/arm/mach-at91/at91rm9200.c
+++ b/arch/arm/mach-at91/at91rm9200.c
@@ -196,6 +196,10 @@ static struct clk_lookup periph_clocks_lookups[] = {
196 CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk), 196 CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
197 /* fake hclk clock */ 197 /* fake hclk clock */
198 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), 198 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
199 CLKDEV_CON_ID("pioA", &pioA_clk),
200 CLKDEV_CON_ID("pioB", &pioB_clk),
201 CLKDEV_CON_ID("pioC", &pioC_clk),
202 CLKDEV_CON_ID("pioD", &pioD_clk),
199}; 203};
200 204
201static struct clk_lookup usart_clocks_lookups[] = { 205static struct clk_lookup usart_clocks_lookups[] = {
@@ -273,19 +277,15 @@ static struct at91_gpio_bank at91rm9200_gpio[] = {
273 { 277 {
274 .id = AT91RM9200_ID_PIOA, 278 .id = AT91RM9200_ID_PIOA,
275 .regbase = AT91RM9200_BASE_PIOA, 279 .regbase = AT91RM9200_BASE_PIOA,
276 .clock = &pioA_clk,
277 }, { 280 }, {
278 .id = AT91RM9200_ID_PIOB, 281 .id = AT91RM9200_ID_PIOB,
279 .regbase = AT91RM9200_BASE_PIOB, 282 .regbase = AT91RM9200_BASE_PIOB,
280 .clock = &pioB_clk,
281 }, { 283 }, {
282 .id = AT91RM9200_ID_PIOC, 284 .id = AT91RM9200_ID_PIOC,
283 .regbase = AT91RM9200_BASE_PIOC, 285 .regbase = AT91RM9200_BASE_PIOC,
284 .clock = &pioC_clk,
285 }, { 286 }, {
286 .id = AT91RM9200_ID_PIOD, 287 .id = AT91RM9200_ID_PIOD,
287 .regbase = AT91RM9200_BASE_PIOD, 288 .regbase = AT91RM9200_BASE_PIOD,
288 .clock = &pioD_clk,
289 } 289 }
290}; 290};
291 291
diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c
index e94cc2268461..943da2100cdc 100644
--- a/arch/arm/mach-at91/at91sam9260.c
+++ b/arch/arm/mach-at91/at91sam9260.c
@@ -210,6 +210,9 @@ static struct clk_lookup periph_clocks_lookups[] = {
210 CLKDEV_CON_DEV_ID("usart", "fffd8000.serial", &usart5_clk), 210 CLKDEV_CON_DEV_ID("usart", "fffd8000.serial", &usart5_clk),
211 /* fake hclk clock */ 211 /* fake hclk clock */
212 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), 212 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
213 CLKDEV_CON_ID("pioA", &pioA_clk),
214 CLKDEV_CON_ID("pioB", &pioB_clk),
215 CLKDEV_CON_ID("pioC", &pioC_clk),
213}; 216};
214 217
215static struct clk_lookup usart_clocks_lookups[] = { 218static struct clk_lookup usart_clocks_lookups[] = {
@@ -275,15 +278,12 @@ static struct at91_gpio_bank at91sam9260_gpio[] = {
275 { 278 {
276 .id = AT91SAM9260_ID_PIOA, 279 .id = AT91SAM9260_ID_PIOA,
277 .regbase = AT91SAM9260_BASE_PIOA, 280 .regbase = AT91SAM9260_BASE_PIOA,
278 .clock = &pioA_clk,
279 }, { 281 }, {
280 .id = AT91SAM9260_ID_PIOB, 282 .id = AT91SAM9260_ID_PIOB,
281 .regbase = AT91SAM9260_BASE_PIOB, 283 .regbase = AT91SAM9260_BASE_PIOB,
282 .clock = &pioB_clk,
283 }, { 284 }, {
284 .id = AT91SAM9260_ID_PIOC, 285 .id = AT91SAM9260_ID_PIOC,
285 .regbase = AT91SAM9260_BASE_PIOC, 286 .regbase = AT91SAM9260_BASE_PIOC,
286 .clock = &pioC_clk,
287 } 287 }
288}; 288};
289 289
diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c
index 80e3e0fac6b1..dd7924c996fc 100644
--- a/arch/arm/mach-at91/at91sam9261.c
+++ b/arch/arm/mach-at91/at91sam9261.c
@@ -175,6 +175,9 @@ static struct clk_lookup periph_clocks_lookups[] = {
175 CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), 175 CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
176 CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk), 176 CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
177 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &hck0), 177 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &hck0),
178 CLKDEV_CON_ID("pioA", &pioA_clk),
179 CLKDEV_CON_ID("pioB", &pioB_clk),
180 CLKDEV_CON_ID("pioC", &pioC_clk),
178}; 181};
179 182
180static struct clk_lookup usart_clocks_lookups[] = { 183static struct clk_lookup usart_clocks_lookups[] = {
@@ -254,15 +257,12 @@ static struct at91_gpio_bank at91sam9261_gpio[] = {
254 { 257 {
255 .id = AT91SAM9261_ID_PIOA, 258 .id = AT91SAM9261_ID_PIOA,
256 .regbase = AT91SAM9261_BASE_PIOA, 259 .regbase = AT91SAM9261_BASE_PIOA,
257 .clock = &pioA_clk,
258 }, { 260 }, {
259 .id = AT91SAM9261_ID_PIOB, 261 .id = AT91SAM9261_ID_PIOB,
260 .regbase = AT91SAM9261_BASE_PIOB, 262 .regbase = AT91SAM9261_BASE_PIOB,
261 .clock = &pioB_clk,
262 }, { 263 }, {
263 .id = AT91SAM9261_ID_PIOC, 264 .id = AT91SAM9261_ID_PIOC,
264 .regbase = AT91SAM9261_BASE_PIOC, 265 .regbase = AT91SAM9261_BASE_PIOC,
265 .clock = &pioC_clk,
266 } 266 }
267}; 267};
268 268
diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c
index 5c14b22928a8..5a7474174593 100644
--- a/arch/arm/mach-at91/at91sam9263.c
+++ b/arch/arm/mach-at91/at91sam9263.c
@@ -192,6 +192,11 @@ static struct clk_lookup periph_clocks_lookups[] = {
192 CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk), 192 CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk),
193 /* fake hclk clock */ 193 /* fake hclk clock */
194 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), 194 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
195 CLKDEV_CON_ID("pioA", &pioA_clk),
196 CLKDEV_CON_ID("pioB", &pioB_clk),
197 CLKDEV_CON_ID("pioC", &pioCDE_clk),
198 CLKDEV_CON_ID("pioD", &pioCDE_clk),
199 CLKDEV_CON_ID("pioE", &pioCDE_clk),
195}; 200};
196 201
197static struct clk_lookup usart_clocks_lookups[] = { 202static struct clk_lookup usart_clocks_lookups[] = {
@@ -268,23 +273,18 @@ static struct at91_gpio_bank at91sam9263_gpio[] = {
268 { 273 {
269 .id = AT91SAM9263_ID_PIOA, 274 .id = AT91SAM9263_ID_PIOA,
270 .regbase = AT91SAM9263_BASE_PIOA, 275 .regbase = AT91SAM9263_BASE_PIOA,
271 .clock = &pioA_clk,
272 }, { 276 }, {
273 .id = AT91SAM9263_ID_PIOB, 277 .id = AT91SAM9263_ID_PIOB,
274 .regbase = AT91SAM9263_BASE_PIOB, 278 .regbase = AT91SAM9263_BASE_PIOB,
275 .clock = &pioB_clk,
276 }, { 279 }, {
277 .id = AT91SAM9263_ID_PIOCDE, 280 .id = AT91SAM9263_ID_PIOCDE,
278 .regbase = AT91SAM9263_BASE_PIOC, 281 .regbase = AT91SAM9263_BASE_PIOC,
279 .clock = &pioCDE_clk,
280 }, { 282 }, {
281 .id = AT91SAM9263_ID_PIOCDE, 283 .id = AT91SAM9263_ID_PIOCDE,
282 .regbase = AT91SAM9263_BASE_PIOD, 284 .regbase = AT91SAM9263_BASE_PIOD,
283 .clock = &pioCDE_clk,
284 }, { 285 }, {
285 .id = AT91SAM9263_ID_PIOCDE, 286 .id = AT91SAM9263_ID_PIOCDE,
286 .regbase = AT91SAM9263_BASE_PIOE, 287 .regbase = AT91SAM9263_BASE_PIOE,
287 .clock = &pioCDE_clk,
288 } 288 }
289}; 289};
290 290
diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c
index c0c9fa7b73f0..4bb0bf00b3a4 100644
--- a/arch/arm/mach-at91/at91sam9g45.c
+++ b/arch/arm/mach-at91/at91sam9g45.c
@@ -232,6 +232,11 @@ static struct clk_lookup periph_clocks_lookups[] = {
232 CLKDEV_CON_DEV_ID("usart", "fff98000.serial", &usart3_clk), 232 CLKDEV_CON_DEV_ID("usart", "fff98000.serial", &usart3_clk),
233 /* fake hclk clock */ 233 /* fake hclk clock */
234 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk), 234 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk),
235 CLKDEV_CON_ID("pioA", &pioA_clk),
236 CLKDEV_CON_ID("pioB", &pioB_clk),
237 CLKDEV_CON_ID("pioC", &pioC_clk),
238 CLKDEV_CON_ID("pioD", &pioDE_clk),
239 CLKDEV_CON_ID("pioE", &pioDE_clk),
235}; 240};
236 241
237static struct clk_lookup usart_clocks_lookups[] = { 242static struct clk_lookup usart_clocks_lookups[] = {
@@ -298,23 +303,18 @@ static struct at91_gpio_bank at91sam9g45_gpio[] = {
298 { 303 {
299 .id = AT91SAM9G45_ID_PIOA, 304 .id = AT91SAM9G45_ID_PIOA,
300 .regbase = AT91SAM9G45_BASE_PIOA, 305 .regbase = AT91SAM9G45_BASE_PIOA,
301 .clock = &pioA_clk,
302 }, { 306 }, {
303 .id = AT91SAM9G45_ID_PIOB, 307 .id = AT91SAM9G45_ID_PIOB,
304 .regbase = AT91SAM9G45_BASE_PIOB, 308 .regbase = AT91SAM9G45_BASE_PIOB,
305 .clock = &pioB_clk,
306 }, { 309 }, {
307 .id = AT91SAM9G45_ID_PIOC, 310 .id = AT91SAM9G45_ID_PIOC,
308 .regbase = AT91SAM9G45_BASE_PIOC, 311 .regbase = AT91SAM9G45_BASE_PIOC,
309 .clock = &pioC_clk,
310 }, { 312 }, {
311 .id = AT91SAM9G45_ID_PIODE, 313 .id = AT91SAM9G45_ID_PIODE,
312 .regbase = AT91SAM9G45_BASE_PIOD, 314 .regbase = AT91SAM9G45_BASE_PIOD,
313 .clock = &pioDE_clk,
314 }, { 315 }, {
315 .id = AT91SAM9G45_ID_PIODE, 316 .id = AT91SAM9G45_ID_PIODE,
316 .regbase = AT91SAM9G45_BASE_PIOE, 317 .regbase = AT91SAM9G45_BASE_PIOE,
317 .clock = &pioDE_clk,
318 } 318 }
319}; 319};
320 320
diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c
index 6856badc518b..60555d4738f8 100644
--- a/arch/arm/mach-at91/at91sam9rl.c
+++ b/arch/arm/mach-at91/at91sam9rl.c
@@ -183,6 +183,10 @@ static struct clk_lookup periph_clocks_lookups[] = {
183 CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk), 183 CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk),
184 CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), 184 CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
185 CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), 185 CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
186 CLKDEV_CON_ID("pioA", &pioA_clk),
187 CLKDEV_CON_ID("pioB", &pioB_clk),
188 CLKDEV_CON_ID("pioC", &pioC_clk),
189 CLKDEV_CON_ID("pioD", &pioD_clk),
186}; 190};
187 191
188static struct clk_lookup usart_clocks_lookups[] = { 192static struct clk_lookup usart_clocks_lookups[] = {
@@ -246,19 +250,15 @@ static struct at91_gpio_bank at91sam9rl_gpio[] = {
246 { 250 {
247 .id = AT91SAM9RL_ID_PIOA, 251 .id = AT91SAM9RL_ID_PIOA,
248 .regbase = AT91SAM9RL_BASE_PIOA, 252 .regbase = AT91SAM9RL_BASE_PIOA,
249 .clock = &pioA_clk,
250 }, { 253 }, {
251 .id = AT91SAM9RL_ID_PIOB, 254 .id = AT91SAM9RL_ID_PIOB,
252 .regbase = AT91SAM9RL_BASE_PIOB, 255 .regbase = AT91SAM9RL_BASE_PIOB,
253 .clock = &pioB_clk,
254 }, { 256 }, {
255 .id = AT91SAM9RL_ID_PIOC, 257 .id = AT91SAM9RL_ID_PIOC,
256 .regbase = AT91SAM9RL_BASE_PIOC, 258 .regbase = AT91SAM9RL_BASE_PIOC,
257 .clock = &pioC_clk,
258 }, { 259 }, {
259 .id = AT91SAM9RL_ID_PIOD, 260 .id = AT91SAM9RL_ID_PIOD,
260 .regbase = AT91SAM9RL_BASE_PIOD, 261 .regbase = AT91SAM9RL_BASE_PIOD,
261 .clock = &pioD_clk,
262 } 262 }
263}; 263};
264 264
diff --git a/arch/arm/mach-at91/generic.h b/arch/arm/mach-at91/generic.h
index bc1776406f42..40309588f360 100644
--- a/arch/arm/mach-at91/generic.h
+++ b/arch/arm/mach-at91/generic.h
@@ -70,7 +70,6 @@ extern void at91_ioremap_shdwc(u32 base_addr);
70struct at91_gpio_bank { 70struct at91_gpio_bank {
71 unsigned short id; /* peripheral ID */ 71 unsigned short id; /* peripheral ID */
72 unsigned long regbase; /* offset from system peripheral base */ 72 unsigned long regbase; /* offset from system peripheral base */
73 struct clk *clock; /* associated clock */
74}; 73};
75extern void __init at91_gpio_init(struct at91_gpio_bank *, int nr_banks); 74extern void __init at91_gpio_init(struct at91_gpio_bank *, int nr_banks);
76extern void __init at91_gpio_irq_setup(void); 75extern void __init at91_gpio_irq_setup(void);
diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c
index cedb753f4cad..4059f07eb955 100644
--- a/arch/arm/mach-at91/gpio.c
+++ b/arch/arm/mach-at91/gpio.c
@@ -31,6 +31,7 @@ struct at91_gpio_chip {
31 struct at91_gpio_chip *next; /* Bank sharing same clock */ 31 struct at91_gpio_chip *next; /* Bank sharing same clock */
32 struct at91_gpio_bank *bank; /* Bank definition */ 32 struct at91_gpio_bank *bank; /* Bank definition */
33 void __iomem *regbase; /* Base of register bank */ 33 void __iomem *regbase; /* Base of register bank */
34 struct clk *clock; /* associated clock */
34}; 35};
35 36
36#define to_at91_gpio_chip(c) container_of(c, struct at91_gpio_chip, chip) 37#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,
58 } 59 }
59 60
60static struct at91_gpio_chip gpio_chip[] = { 61static struct at91_gpio_chip gpio_chip[] = {
61 AT91_GPIO_CHIP("A", 0x00 + PIN_BASE, 32), 62 AT91_GPIO_CHIP("pioA", 0x00 + PIN_BASE, 32),
62 AT91_GPIO_CHIP("B", 0x20 + PIN_BASE, 32), 63 AT91_GPIO_CHIP("pioB", 0x20 + PIN_BASE, 32),
63 AT91_GPIO_CHIP("C", 0x40 + PIN_BASE, 32), 64 AT91_GPIO_CHIP("pioC", 0x40 + PIN_BASE, 32),
64 AT91_GPIO_CHIP("D", 0x60 + PIN_BASE, 32), 65 AT91_GPIO_CHIP("pioD", 0x60 + PIN_BASE, 32),
65 AT91_GPIO_CHIP("E", 0x80 + PIN_BASE, 32), 66 AT91_GPIO_CHIP("pioE", 0x80 + PIN_BASE, 32),
66}; 67};
67 68
68static int gpio_banks; 69static int gpio_banks;
@@ -302,7 +303,7 @@ void at91_gpio_suspend(void)
302 __raw_writel(wakeups[i], pio + PIO_IER); 303 __raw_writel(wakeups[i], pio + PIO_IER);
303 304
304 if (!wakeups[i]) 305 if (!wakeups[i])
305 clk_disable(gpio_chip[i].bank->clock); 306 clk_disable(gpio_chip[i].clock);
306 else { 307 else {
307#ifdef CONFIG_PM_DEBUG 308#ifdef CONFIG_PM_DEBUG
308 printk(KERN_DEBUG "GPIO-%c may wake for %08x\n", 'A'+i, wakeups[i]); 309 printk(KERN_DEBUG "GPIO-%c may wake for %08x\n", 'A'+i, wakeups[i]);
@@ -319,7 +320,7 @@ void at91_gpio_resume(void)
319 void __iomem *pio = gpio_chip[i].regbase; 320 void __iomem *pio = gpio_chip[i].regbase;
320 321
321 if (!wakeups[i]) 322 if (!wakeups[i])
322 clk_enable(gpio_chip[i].bank->clock); 323 clk_enable(gpio_chip[i].clock);
323 324
324 __raw_writel(wakeups[i], pio + PIO_IDR); 325 __raw_writel(wakeups[i], pio + PIO_IDR);
325 __raw_writel(backups[i], pio + PIO_IER); 326 __raw_writel(backups[i], pio + PIO_IER);
@@ -621,8 +622,14 @@ void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks)
621 continue; 622 continue;
622 } 623 }
623 624
625 at91_gpio->clock = clk_get_sys(NULL, at91_gpio->chip.label);
626 if (!at91_gpio->clock) {
627 pr_err("at91_gpio.%d, failed to get clock, ignoring.\n", i);
628 continue;
629 }
630
624 /* enable PIO controller's clock */ 631 /* enable PIO controller's clock */
625 clk_enable(at91_gpio->bank->clock); 632 clk_enable(at91_gpio->clock);
626 633
627 /* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */ 634 /* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */
628 if (last && last->bank->id == at91_gpio->bank->id) 635 if (last && last->bank->id == at91_gpio->bank->id)