diff options
Diffstat (limited to 'arch/avr32/mach-at32ap')
-rw-r--r-- | arch/avr32/mach-at32ap/at32ap700x.c | 4 | ||||
-rw-r--r-- | arch/avr32/mach-at32ap/clock.c | 4 | ||||
-rw-r--r-- | arch/avr32/mach-at32ap/clock.h | 3 | ||||
-rw-r--r-- | arch/avr32/mach-at32ap/include/mach/at32ap700x.h | 3 | ||||
-rw-r--r-- | arch/avr32/mach-at32ap/include/mach/portmux.h | 2 | ||||
-rw-r--r-- | arch/avr32/mach-at32ap/pio.c | 19 |
6 files changed, 24 insertions, 11 deletions
diff --git a/arch/avr32/mach-at32ap/at32ap700x.c b/arch/avr32/mach-at32ap/at32ap700x.c index 3cf49553e4f9..ea7bc1e8562b 100644 --- a/arch/avr32/mach-at32ap/at32ap700x.c +++ b/arch/avr32/mach-at32ap/at32ap700x.c | |||
@@ -421,7 +421,7 @@ static unsigned long hsb_clk_get_rate(struct clk *clk) | |||
421 | return bus_clk_get_rate(clk, shift); | 421 | return bus_clk_get_rate(clk, shift); |
422 | } | 422 | } |
423 | 423 | ||
424 | static void pba_clk_mode(struct clk *clk, int enabled) | 424 | void pba_clk_mode(struct clk *clk, int enabled) |
425 | { | 425 | { |
426 | unsigned long flags; | 426 | unsigned long flags; |
427 | u32 mask; | 427 | u32 mask; |
@@ -436,7 +436,7 @@ static void pba_clk_mode(struct clk *clk, int enabled) | |||
436 | spin_unlock_irqrestore(&pm_lock, flags); | 436 | spin_unlock_irqrestore(&pm_lock, flags); |
437 | } | 437 | } |
438 | 438 | ||
439 | static unsigned long pba_clk_get_rate(struct clk *clk) | 439 | unsigned long pba_clk_get_rate(struct clk *clk) |
440 | { | 440 | { |
441 | unsigned long cksel, shift = 0; | 441 | unsigned long cksel, shift = 0; |
442 | 442 | ||
diff --git a/arch/avr32/mach-at32ap/clock.c b/arch/avr32/mach-at32ap/clock.c index 138a00a2a2d0..442f08c5e641 100644 --- a/arch/avr32/mach-at32ap/clock.c +++ b/arch/avr32/mach-at32ap/clock.c | |||
@@ -198,7 +198,7 @@ dump_clock(struct clk *parent, struct clkinf *r) | |||
198 | unsigned i; | 198 | unsigned i; |
199 | 199 | ||
200 | /* skip clocks coupled to devices that aren't registered */ | 200 | /* skip clocks coupled to devices that aren't registered */ |
201 | if (parent->dev && !parent->dev->bus_id[0] && !parent->users) | 201 | if (parent->dev && !dev_name(parent->dev) && !parent->users) |
202 | return; | 202 | return; |
203 | 203 | ||
204 | /* <nest spaces> name <pad to end> */ | 204 | /* <nest spaces> name <pad to end> */ |
@@ -214,7 +214,7 @@ dump_clock(struct clk *parent, struct clkinf *r) | |||
214 | parent->users ? "on" : "off", /* NOTE: not-paranoid!! */ | 214 | parent->users ? "on" : "off", /* NOTE: not-paranoid!! */ |
215 | clk_get_rate(parent)); | 215 | clk_get_rate(parent)); |
216 | if (parent->dev) | 216 | if (parent->dev) |
217 | seq_printf(r->s, ", for %s", parent->dev->bus_id); | 217 | seq_printf(r->s, ", for %s", dev_name(parent->dev)); |
218 | seq_printf(r->s, "\n"); | 218 | seq_printf(r->s, "\n"); |
219 | 219 | ||
220 | /* cost of this scan is small, but not linear... */ | 220 | /* cost of this scan is small, but not linear... */ |
diff --git a/arch/avr32/mach-at32ap/clock.h b/arch/avr32/mach-at32ap/clock.h index 623bf0e9a1e7..4c7ebbdc6dfa 100644 --- a/arch/avr32/mach-at32ap/clock.h +++ b/arch/avr32/mach-at32ap/clock.h | |||
@@ -30,3 +30,6 @@ struct clk { | |||
30 | u16 users; /* Enabled if non-zero */ | 30 | u16 users; /* Enabled if non-zero */ |
31 | u16 index; /* Sibling index */ | 31 | u16 index; /* Sibling index */ |
32 | }; | 32 | }; |
33 | |||
34 | unsigned long pba_clk_get_rate(struct clk *clk); | ||
35 | void pba_clk_mode(struct clk *clk, int enabled); | ||
diff --git a/arch/avr32/mach-at32ap/include/mach/at32ap700x.h b/arch/avr32/mach-at32ap/include/mach/at32ap700x.h index a77d372f6f3e..5c4c971eed8e 100644 --- a/arch/avr32/mach-at32ap/include/mach/at32ap700x.h +++ b/arch/avr32/mach-at32ap/include/mach/at32ap700x.h | |||
@@ -211,4 +211,7 @@ | |||
211 | 211 | ||
212 | #define ATMEL_LCDC_ALT_15BIT (ATMEL_LCDC_CONTROL | ATMEL_LCDC_ALT_15B_DATA) | 212 | #define ATMEL_LCDC_ALT_15BIT (ATMEL_LCDC_CONTROL | ATMEL_LCDC_ALT_15B_DATA) |
213 | 213 | ||
214 | /* Bitmask for all EBI data (D16..D31) pins on port E */ | ||
215 | #define ATMEL_EBI_PE_DATA_ALL (0x0000FFFF) | ||
216 | |||
214 | #endif /* __ASM_ARCH_AT32AP700X_H__ */ | 217 | #endif /* __ASM_ARCH_AT32AP700X_H__ */ |
diff --git a/arch/avr32/mach-at32ap/include/mach/portmux.h b/arch/avr32/mach-at32ap/include/mach/portmux.h index 21c79373b53f..4873024e3b96 100644 --- a/arch/avr32/mach-at32ap/include/mach/portmux.h +++ b/arch/avr32/mach-at32ap/include/mach/portmux.h | |||
@@ -25,6 +25,6 @@ void at32_select_periph(unsigned int port, unsigned int pin, | |||
25 | unsigned int periph, unsigned long flags); | 25 | unsigned int periph, unsigned long flags); |
26 | void at32_select_gpio(unsigned int pin, unsigned long flags); | 26 | void at32_select_gpio(unsigned int pin, unsigned long flags); |
27 | void at32_deselect_pin(unsigned int pin); | 27 | void at32_deselect_pin(unsigned int pin); |
28 | void at32_reserve_pin(unsigned int pin); | 28 | void at32_reserve_pin(unsigned int port, u32 pin_mask); |
29 | 29 | ||
30 | #endif /* __ASM_ARCH_PORTMUX_H__ */ | 30 | #endif /* __ASM_ARCH_PORTMUX_H__ */ |
diff --git a/arch/avr32/mach-at32ap/pio.c b/arch/avr32/mach-at32ap/pio.c index ed81a8bcb22d..09a274c9d0b7 100644 --- a/arch/avr32/mach-at32ap/pio.c +++ b/arch/avr32/mach-at32ap/pio.c | |||
@@ -167,22 +167,29 @@ void at32_deselect_pin(unsigned int pin) | |||
167 | } | 167 | } |
168 | 168 | ||
169 | /* Reserve a pin, preventing anyone else from changing its configuration. */ | 169 | /* Reserve a pin, preventing anyone else from changing its configuration. */ |
170 | void __init at32_reserve_pin(unsigned int pin) | 170 | void __init at32_reserve_pin(unsigned int port, u32 pin_mask) |
171 | { | 171 | { |
172 | struct pio_device *pio; | 172 | struct pio_device *pio; |
173 | unsigned int pin_index = pin & 0x1f; | ||
174 | 173 | ||
175 | pio = gpio_to_pio(pin); | 174 | /* assign and verify pio */ |
175 | pio = gpio_to_pio(port); | ||
176 | if (unlikely(!pio)) { | 176 | if (unlikely(!pio)) { |
177 | printk("pio: invalid pin %u\n", pin); | 177 | printk(KERN_WARNING "pio: invalid port %u\n", port); |
178 | goto fail; | 178 | goto fail; |
179 | } | 179 | } |
180 | 180 | ||
181 | if (unlikely(test_and_set_bit(pin_index, &pio->pinmux_mask))) { | 181 | /* Test if any of the requested pins is already muxed */ |
182 | printk("%s: pin %u is busy\n", pio->name, pin_index); | 182 | spin_lock(&pio_lock); |
183 | if (unlikely(pio->pinmux_mask & pin_mask)) { | ||
184 | printk(KERN_WARNING "%s: pin(s) busy (req. 0x%x, busy 0x%x)\n", | ||
185 | pio->name, pin_mask, pio->pinmux_mask & pin_mask); | ||
186 | spin_unlock(&pio_lock); | ||
183 | goto fail; | 187 | goto fail; |
184 | } | 188 | } |
185 | 189 | ||
190 | /* Reserve pins */ | ||
191 | pio->pinmux_mask |= pin_mask; | ||
192 | spin_unlock(&pio_lock); | ||
186 | return; | 193 | return; |
187 | 194 | ||
188 | fail: | 195 | fail: |