From 459fc208abd1b365fa013c17d433dfb5b4bc1e3a Mon Sep 17 00:00:00 2001 From: Dominik Brodowski Date: Thu, 16 Oct 2008 00:11:04 +0200 Subject: cpufreq: remove policy->governor setting in drivers initialization As policy->governor is already set to CPUFREQ_DEFAULT_GOVERNOR in the (always built-in) cpufreq core, we do not need to set it in the drivers. This fixes the sparc64 allmodconfig build failure. Also, remove a totally useles setting of ->policy in cpufreq-pxa3xx.c. Signed-off-by: Dominik Brodowski Acked-by: David S. Miller Signed-off-by: Linus Torvalds --- arch/avr32/mach-at32ap/cpufreq.c | 1 - 1 file changed, 1 deletion(-) (limited to 'arch/avr32/mach-at32ap') diff --git a/arch/avr32/mach-at32ap/cpufreq.c b/arch/avr32/mach-at32ap/cpufreq.c index 5dd8d25428b..d84efe4984a 100644 --- a/arch/avr32/mach-at32ap/cpufreq.c +++ b/arch/avr32/mach-at32ap/cpufreq.c @@ -87,7 +87,6 @@ static int __init at32_cpufreq_driver_init(struct cpufreq_policy *policy) policy->cur = at32_get_speed(0); policy->min = policy->cpuinfo.min_freq; policy->max = policy->cpuinfo.max_freq; - policy->governor = CPUFREQ_DEFAULT_GOVERNOR; printk("cpufreq: AT32AP CPU frequency driver\n"); -- cgit v1.2.3 From 4b1135a277f4b38f60b9c9f28adae467feb07856 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Thu, 16 Oct 2008 15:33:18 +0200 Subject: genirq: fix name space collisions of nr_irqs in arch/* local shadows of global variables are _bad_ Signed-off-by: Thomas Gleixner --- arch/avr32/mach-at32ap/extint.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'arch/avr32/mach-at32ap') diff --git a/arch/avr32/mach-at32ap/extint.c b/arch/avr32/mach-at32ap/extint.c index c36a6d59d6f..310477ba1bb 100644 --- a/arch/avr32/mach-at32ap/extint.c +++ b/arch/avr32/mach-at32ap/extint.c @@ -191,7 +191,7 @@ static int __init eic_probe(struct platform_device *pdev) struct eic *eic; struct resource *regs; unsigned int i; - unsigned int nr_irqs; + unsigned int nr_of_irqs; unsigned int int_irq; int ret; u32 pattern; @@ -224,7 +224,7 @@ static int __init eic_probe(struct platform_device *pdev) eic_writel(eic, IDR, ~0UL); eic_writel(eic, MODE, ~0UL); pattern = eic_readl(eic, MODE); - nr_irqs = fls(pattern); + nr_of_irqs = fls(pattern); /* Trigger on low level unless overridden by driver */ eic_writel(eic, EDGE, 0UL); @@ -232,7 +232,7 @@ static int __init eic_probe(struct platform_device *pdev) eic->chip = &eic_chip; - for (i = 0; i < nr_irqs; i++) { + for (i = 0; i < nr_of_irqs; i++) { set_irq_chip_and_handler(eic->first_irq + i, &eic_chip, handle_level_irq); set_irq_chip_data(eic->first_irq + i, eic); @@ -256,7 +256,7 @@ static int __init eic_probe(struct platform_device *pdev) eic->regs, int_irq); dev_info(&pdev->dev, "Handling %u external IRQs, starting with IRQ %u\n", - nr_irqs, eic->first_irq); + nr_of_irqs, eic->first_irq); return 0; -- cgit v1.2.3 From 6090065663ba5daab82d116d3040dc924e8cf79f Mon Sep 17 00:00:00 2001 From: Alex Raimondi Date: Mon, 13 Oct 2008 16:03:45 +0200 Subject: avr32: Fix bug in LCD pin setup on port C Bug was introduced with the new at32_select_periph function. Signed-off-by: Alex Raimondi Signed-off-by: Haavard Skinnemoen --- arch/avr32/mach-at32ap/at32ap700x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'arch/avr32/mach-at32ap') diff --git a/arch/avr32/mach-at32ap/at32ap700x.c b/arch/avr32/mach-at32ap/at32ap700x.c index 813b6844cdf..8c435a6f4a6 100644 --- a/arch/avr32/mach-at32ap/at32ap700x.c +++ b/arch/avr32/mach-at32ap/at32ap700x.c @@ -1470,7 +1470,7 @@ at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data, pin_mask = ATMEL_LCDC_PRI_24BIT | ATMEL_LCDC_PRI_CONTROL; /* LCDC on port C */ - portc_mask = (pin_mask & 0xfff80000) >> 19; + portc_mask = pin_mask & 0xfff80000; select_peripheral(PIOC, portc_mask, PERIPH_A, 0); /* LCDC on port D */ -- cgit v1.2.3 From e3f91ca48162c3eb70450314a4d09384fccb92fa Mon Sep 17 00:00:00 2001 From: Haavard Skinnemoen Date: Thu, 23 Oct 2008 11:23:08 +0200 Subject: avr32: Scale loops_per_jiffy when cpu frequency changes The loops_per_jiffy variable isn't updated when cpufreq changes the CPU frequency. This could cause udelay() and friends to produce wrong delays. Signed-off-by: Haavard Skinnemoen --- arch/avr32/mach-at32ap/cpufreq.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'arch/avr32/mach-at32ap') diff --git a/arch/avr32/mach-at32ap/cpufreq.c b/arch/avr32/mach-at32ap/cpufreq.c index d84efe4984a..024c586e936 100644 --- a/arch/avr32/mach-at32ap/cpufreq.c +++ b/arch/avr32/mach-at32ap/cpufreq.c @@ -40,6 +40,9 @@ static unsigned int at32_get_speed(unsigned int cpu) return (unsigned int)((clk_get_rate(cpuclk) + 500) / 1000); } +static unsigned int ref_freq; +static unsigned long loops_per_jiffy_ref; + static int at32_set_target(struct cpufreq_policy *policy, unsigned int target_freq, unsigned int relation) @@ -61,8 +64,19 @@ static int at32_set_target(struct cpufreq_policy *policy, freqs.cpu = 0; freqs.flags = 0; + if (!ref_freq) { + ref_freq = freqs.old; + loops_per_jiffy_ref = boot_cpu_data.loops_per_jiffy; + } + cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); + if (freqs.old < freqs.new) + boot_cpu_data.loops_per_jiffy = cpufreq_scale( + loops_per_jiffy_ref, ref_freq, freqs.new); clk_set_rate(cpuclk, freq); + if (freqs.new < freqs.old) + boot_cpu_data.loops_per_jiffy = cpufreq_scale( + loops_per_jiffy_ref, ref_freq, freqs.new); cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); pr_debug("cpufreq: set frequency %lu Hz\n", freq); -- cgit v1.2.3 From e82c6106b04b85879d802bbbeaed30d9b10a92e2 Mon Sep 17 00:00:00 2001 From: Haavard Skinnemoen Date: Thu, 23 Oct 2008 14:42:19 +0200 Subject: avr32: Fix GPIO initcall breakage Add essential system devices, including GPIO controllers, automatically at core_initcall time. This ensures that the devices are there when the PIO driver gets initialized at postcore_initcall, fixing a bug exposed by commit d6634db8fe1784d0a8e4e156970fec034708446e "avr32: Use platform_driver_probe for pio platform driver". Signed-off-by: Haavard Skinnemoen --- arch/avr32/mach-at32ap/at32ap700x.c | 5 ++++- arch/avr32/mach-at32ap/include/mach/board.h | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'arch/avr32/mach-at32ap') diff --git a/arch/avr32/mach-at32ap/at32ap700x.c b/arch/avr32/mach-at32ap/at32ap700x.c index 8c435a6f4a6..748ac68c73d 100644 --- a/arch/avr32/mach-at32ap/at32ap700x.c +++ b/arch/avr32/mach-at32ap/at32ap700x.c @@ -813,7 +813,7 @@ static struct resource pio4_resource[] = { DEFINE_DEV(pio, 4); DEV_CLK(mck, pio4, pba, 14); -void __init at32_add_system_devices(void) +static int __init system_device_init(void) { platform_device_register(&at32_pm0_device); platform_device_register(&at32_intc0_device); @@ -832,7 +832,10 @@ void __init at32_add_system_devices(void) platform_device_register(&pio2_device); platform_device_register(&pio3_device); platform_device_register(&pio4_device); + + return 0; } +core_initcall(system_device_init); /* -------------------------------------------------------------------- * PSIF diff --git a/arch/avr32/mach-at32ap/include/mach/board.h b/arch/avr32/mach-at32ap/include/mach/board.h index c48386d66bc..aafaf7a7888 100644 --- a/arch/avr32/mach-at32ap/include/mach/board.h +++ b/arch/avr32/mach-at32ap/include/mach/board.h @@ -14,8 +14,14 @@ */ extern unsigned long at32_board_osc_rates[]; -/* Add basic devices: system manager, interrupt controller, portmuxes, etc. */ -void at32_add_system_devices(void); +/* + * This used to add essential system devices, but this is now done + * automatically. Please don't use it in new board code. + */ +static inline void __deprecated at32_add_system_devices(void) +{ + +} #define ATMEL_MAX_UART 4 extern struct platform_device *atmel_default_console_device; -- cgit v1.2.3