diff --git a/[refs] b/[refs] index 2230d1308e36..53303a4859b2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 644b55ce889edd37d6406df26e2d96d7a7390749 +refs/heads/master: 4ac212ad4e8fafc22fa147fc255ff5fa5435cf33 diff --git a/trunk/arch/arm/Kconfig b/trunk/arch/arm/Kconfig index 691aae309c8a..d6145298a325 100644 --- a/trunk/arch/arm/Kconfig +++ b/trunk/arch/arm/Kconfig @@ -721,8 +721,7 @@ config LEDS config LEDS_TIMER bool "Timer LED" if (!ARCH_CDB89712 && !ARCH_OMAP) || \ - OMAP_OSK_MISTRAL || MACH_OMAP_H2 \ - || MACH_OMAP_PERSEUS2 + MACH_OMAP_H2 || MACH_OMAP_PERSEUS2 depends on LEDS depends on !GENERIC_CLOCKEVENTS default y if ARCH_EBSA110 @@ -739,9 +738,7 @@ config LEDS_TIMER config LEDS_CPU bool "CPU usage LED" if (!ARCH_CDB89712 && !ARCH_EBSA110 && \ - !ARCH_OMAP) \ - || OMAP_OSK_MISTRAL || MACH_OMAP_H2 \ - || MACH_OMAP_PERSEUS2 + !ARCH_OMAP) || MACH_OMAP_H2 || MACH_OMAP_PERSEUS2 depends on LEDS help If you say Y here, the red LED will be used to give a good real diff --git a/trunk/arch/arm/mach-imx/generic.c b/trunk/arch/arm/mach-imx/generic.c index 4cfc9d3af28a..a58b678006df 100644 --- a/trunk/arch/arm/mach-imx/generic.c +++ b/trunk/arch/arm/mach-imx/generic.c @@ -101,11 +101,10 @@ EXPORT_SYMBOL(imx_gpio_mode); int imx_gpio_request(unsigned gpio, const char *label) { - if(gpio >= (GPIO_PORT_MAX + 1) * 32) { + if(gpio >= (GPIO_PORT_MAX + 1) * 32) printk(KERN_ERR "imx_gpio: Attempt to request nonexistent GPIO %d for \"%s\"\n", gpio, label ? label : "?"); return -EINVAL; - } if(test_and_set_bit(gpio, imx_gpio_alloc_map)) { printk(KERN_ERR "imx_gpio: GPIO %d already used. Allocation for \"%s\" failed\n", @@ -130,7 +129,7 @@ EXPORT_SYMBOL(imx_gpio_free); int imx_gpio_direction_input(unsigned gpio) { - imx_gpio_mode(gpio | GPIO_IN | GPIO_GIUS | GPIO_DR); + imx_gpio_mode(gpio| GPIO_IN); return 0; } @@ -139,7 +138,7 @@ EXPORT_SYMBOL(imx_gpio_direction_input); int imx_gpio_direction_output(unsigned gpio, int value) { imx_gpio_set_value(gpio, value); - imx_gpio_mode(gpio | GPIO_OUT | GPIO_GIUS | GPIO_DR); + imx_gpio_mode(gpio| GPIO_OUT); return 0; } diff --git a/trunk/arch/arm/mach-omap1/board-h3.c b/trunk/arch/arm/mach-omap1/board-h3.c index 79d4ef4c54d4..7b260b7c537b 100644 --- a/trunk/arch/arm/mach-omap1/board-h3.c +++ b/trunk/arch/arm/mach-omap1/board-h3.c @@ -294,11 +294,9 @@ static int h3_select_irda(struct device *dev, int state) return err; } -static void set_trans_mode(struct work_struct *work) +static void set_trans_mode(void *data) { - struct omap_irda_config *irda_config = - container_of(work, struct omap_irda_config, gpio_expa.work); - int mode = irda_config->mode; + int *mode = data; unsigned char expa; int err = 0; @@ -308,7 +306,7 @@ static void set_trans_mode(struct work_struct *work) expa &= ~0x03; - if (mode & IR_SIRMODE) { + if (*mode & IR_SIRMODE) { expa |= 0x01; } else { /* MIR/FIR */ expa |= 0x03; @@ -323,9 +321,9 @@ static int h3_transceiver_mode(struct device *dev, int mode) { struct omap_irda_config *irda_config = dev->platform_data; - irda_config->mode = mode; cancel_delayed_work(&irda_config->gpio_expa); - PREPARE_DELAYED_WORK(&irda_config->gpio_expa, set_trans_mode); + PREPARE_WORK(&irda_config->gpio_expa, set_trans_mode, &mode); +#error this is not permitted - mode is an argument variable schedule_delayed_work(&irda_config->gpio_expa, 0); return 0; diff --git a/trunk/arch/arm/mach-omap1/leds-osk.c b/trunk/arch/arm/mach-omap1/leds-osk.c index 86de303ecab2..0cbf1b0071f8 100644 --- a/trunk/arch/arm/mach-omap1/leds-osk.c +++ b/trunk/arch/arm/mach-omap1/leds-osk.c @@ -133,13 +133,13 @@ void osk_leds_event(led_event_t evt) mistral_setled(); break; - case led_idle_start: /* idle == off */ - hw_led_state &= ~IDLE_LED; + case led_idle_start: + hw_led_state |= IDLE_LED; mistral_setled(); break; case led_idle_end: - hw_led_state |= IDLE_LED; + hw_led_state &= ~IDLE_LED; mistral_setled(); break; diff --git a/trunk/arch/arm/mach-omap1/pm.c b/trunk/arch/arm/mach-omap1/pm.c index 2e68be607295..5bb348e2e315 100644 --- a/trunk/arch/arm/mach-omap1/pm.c +++ b/trunk/arch/arm/mach-omap1/pm.c @@ -57,6 +57,7 @@ #include #include #include +#include #include #include #include @@ -249,6 +250,11 @@ void omap_pm_suspend(void) omap_serial_wake_trigger(1); + if (machine_is_omap_osk()) { + /* Stop LED1 (D9) blink */ + tps65010_set_led(LED1, OFF); + } + if (!cpu_is_omap15xx()) omap_writew(0xffff, ULPD_SOFT_DISABLE_REQ_REG); @@ -441,6 +447,11 @@ void omap_pm_suspend(void) omap_serial_wake_trigger(0); printk("PM: OMAP%x is re-starting from deep sleep...\n", system_rev); + + if (machine_is_omap_osk()) { + /* Let LED1 (D9) blink again */ + tps65010_set_led(LED1, BLINK); + } } #if defined(DEBUG) && defined(CONFIG_PROC_FS) diff --git a/trunk/arch/arm/mach-omap2/clock.c b/trunk/arch/arm/mach-omap2/clock.c index d9af4367f8bb..588adb5ab47f 100644 --- a/trunk/arch/arm/mach-omap2/clock.c +++ b/trunk/arch/arm/mach-omap2/clock.c @@ -1160,8 +1160,8 @@ int __init omap2_clk_init(void) clk_enable(&sync_32k_ick); clk_enable(&omapctrl_ick); - /* Force the APLLs always active. The clocks are idled - * automatically by hardware. */ + /* Force the APLLs active during bootup to avoid disabling and + * enabling them unnecessarily. */ clk_enable(&apll96_ck); clk_enable(&apll54_ck); @@ -1174,3 +1174,12 @@ int __init omap2_clk_init(void) return 0; } + +static int __init omap2_disable_aplls(void) +{ + clk_disable(&apll96_ck); + clk_disable(&apll54_ck); + + return 0; +} +late_initcall(omap2_disable_aplls); diff --git a/trunk/arch/arm/mach-omap2/serial.c b/trunk/arch/arm/mach-omap2/serial.c index e9c367fc9f61..aaa5589e8169 100644 --- a/trunk/arch/arm/mach-omap2/serial.c +++ b/trunk/arch/arm/mach-omap2/serial.c @@ -84,7 +84,7 @@ static inline void __init omap_serial_reset(struct plat_serial8250_port *p) serial_write_reg(p, UART_OMAP_MDR1, 0x07); serial_write_reg(p, UART_OMAP_SCR, 0x08); serial_write_reg(p, UART_OMAP_MDR1, 0x00); - serial_write_reg(p, UART_OMAP_SYSC, (0x02 << 3) | (1 << 2) | (1 << 0)); + serial_write_reg(p, UART_OMAP_SYSC, 0x01); } void __init omap_serial_init() diff --git a/trunk/arch/arm/mach-pxa/irq.c b/trunk/arch/arm/mach-pxa/irq.c index ae2ae08032d7..4b867b0789d5 100644 --- a/trunk/arch/arm/mach-pxa/irq.c +++ b/trunk/arch/arm/mach-pxa/irq.c @@ -365,7 +365,7 @@ void __init pxa_init_irq_gpio(int gpio_nr) set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); } - for (irq = IRQ_GPIO(2); irq < IRQ_GPIO(gpio_nr); irq++) { + for (irq = IRQ_GPIO(2); irq <= IRQ_GPIO(gpio_nr); irq++) { set_irq_chip(irq, &pxa_muxed_gpio_chip); set_irq_handler(irq, handle_edge_irq); set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); diff --git a/trunk/arch/arm/plat-omap/common.c b/trunk/arch/arm/plat-omap/common.c index 4f0f9c4e938e..7987aa6e95f8 100644 --- a/trunk/arch/arm/plat-omap/common.c +++ b/trunk/arch/arm/plat-omap/common.c @@ -172,7 +172,7 @@ console_initcall(omap_add_serial_console); #if defined(CONFIG_ARCH_OMAP16XX) #define TIMER_32K_SYNCHRONIZED 0xfffbc410 #elif defined(CONFIG_ARCH_OMAP24XX) -#define TIMER_32K_SYNCHRONIZED (OMAP24XX_32KSYNCT_BASE + 0x10) +#define TIMER_32K_SYNCHRONIZED 0x48004010 #endif #ifdef TIMER_32K_SYNCHRONIZED diff --git a/trunk/arch/arm/plat-omap/dmtimer.c b/trunk/arch/arm/plat-omap/dmtimer.c index 3856f5aedfc1..36073dfaa4db 100644 --- a/trunk/arch/arm/plat-omap/dmtimer.c +++ b/trunk/arch/arm/plat-omap/dmtimer.c @@ -271,6 +271,11 @@ int omap_dm_timer_get_irq(struct omap_dm_timer *timer) #if defined(CONFIG_ARCH_OMAP1) +struct clk *omap_dm_timer_get_fclk(struct omap_dm_timer *timer) +{ + BUG(); +} + /** * omap_dm_timer_modify_idlect_mask - Check if any running timers use ARMXOR * @inputmask: current value of idlect mask diff --git a/trunk/arch/arm/plat-omap/timer32k.c b/trunk/arch/arm/plat-omap/timer32k.c index ea76f1979a3d..b0af014b0e2c 100644 --- a/trunk/arch/arm/plat-omap/timer32k.c +++ b/trunk/arch/arm/plat-omap/timer32k.c @@ -71,7 +71,7 @@ struct sys_timer omap_timer; #if defined(CONFIG_ARCH_OMAP16XX) #define TIMER_32K_SYNCHRONIZED 0xfffbc410 #elif defined(CONFIG_ARCH_OMAP24XX) -#define TIMER_32K_SYNCHRONIZED (OMAP24XX_32KSYNCT_BASE + 0x10) +#define TIMER_32K_SYNCHRONIZED 0x48004010 #else #error OMAP 32KHz timer does not currently work on 15XX! #endif @@ -147,15 +147,14 @@ static inline void omap_32k_timer_ack_irq(void) static void omap_32k_timer_set_mode(enum clock_event_mode mode, struct clock_event_device *evt) { - omap_32k_timer_stop(); - switch (mode) { + case CLOCK_EVT_MODE_ONESHOT: case CLOCK_EVT_MODE_PERIODIC: omap_32k_timer_start(OMAP_32K_TIMER_TICK_PERIOD); break; - case CLOCK_EVT_MODE_ONESHOT: case CLOCK_EVT_MODE_UNUSED: case CLOCK_EVT_MODE_SHUTDOWN: + omap_32k_timer_stop(); break; case CLOCK_EVT_MODE_RESUME: break; @@ -195,6 +194,8 @@ omap_32k_ticks_to_nsecs(unsigned long ticks_32k) return (unsigned long long) ticks_32k * 1000 * 5*5*5*5*5*5 >> 9; } +static unsigned long omap_32k_last_tick = 0; + /* * Returns current time from boot in nsecs. It's OK for this to wrap * around for now, as it's just a relative time stamp. @@ -224,6 +225,7 @@ static __init void omap_init_32k_timer(void) { if (cpu_class_is_omap1()) setup_irq(INT_OS_TIMER, &omap_32k_timer_irq); + omap_32k_last_tick = omap_32k_sync_timer_read(); #ifdef CONFIG_ARCH_OMAP2 /* REVISIT: Check 24xx TIOCP_CFG settings after idle works */ diff --git a/trunk/drivers/input/joystick/iforce/iforce-packets.c b/trunk/drivers/input/joystick/iforce/iforce-packets.c index 45c4939ced75..3154ccd74000 100644 --- a/trunk/drivers/input/joystick/iforce/iforce-packets.c +++ b/trunk/drivers/input/joystick/iforce/iforce-packets.c @@ -246,12 +246,13 @@ void iforce_process_packet(struct iforce *iforce, u16 cmd, unsigned char *data) int iforce_get_id_packet(struct iforce *iforce, char *packet) { + int status; + switch (iforce->bus) { - case IFORCE_USB: { -#ifdef CONFIG_JOYSTICK_IFORCE_USB - int status; + case IFORCE_USB: +#ifdef CONFIG_JOYSTICK_IFORCE_USB iforce->cr.bRequest = packet[0]; iforce->ctrl->dev = iforce->usbdev; @@ -272,7 +273,6 @@ int iforce_get_id_packet(struct iforce *iforce, char *packet) #else dbg("iforce_get_id_packet: iforce->bus = USB!"); #endif - } break; case IFORCE_232: diff --git a/trunk/drivers/input/keyboard/gpio_keys.c b/trunk/drivers/input/keyboard/gpio_keys.c index f0b22b8b2769..739212252b09 100644 --- a/trunk/drivers/input/keyboard/gpio_keys.c +++ b/trunk/drivers/input/keyboard/gpio_keys.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include diff --git a/trunk/drivers/input/mouse/touchkit_ps2.h b/trunk/drivers/input/mouse/touchkit_ps2.h index 8a0dd3574aef..61e9dfd8419f 100644 --- a/trunk/drivers/input/mouse/touchkit_ps2.h +++ b/trunk/drivers/input/mouse/touchkit_ps2.h @@ -15,8 +15,7 @@ #ifdef CONFIG_MOUSE_PS2_TOUCHKIT int touchkit_ps2_detect(struct psmouse *psmouse, int set_properties); #else -static inline int touchkit_ps2_detect(struct psmouse *psmouse, - int set_properties) +inline int touchkit_ps2_detect(struct psmouse *psmouse, int set_properties) { return -ENOSYS; } diff --git a/trunk/drivers/input/serio/gscps2.c b/trunk/drivers/input/serio/gscps2.c index 3e99df6be084..74f14e097789 100644 --- a/trunk/drivers/input/serio/gscps2.c +++ b/trunk/drivers/input/serio/gscps2.c @@ -340,8 +340,8 @@ static int __init gscps2_probe(struct parisc_device *dev) if (dev->id.sversion == 0x96) hpa += GSC_DINO_OFFSET; - ps2port = kzalloc(sizeof(struct gscps2port), GFP_KERNEL); - serio = kzalloc(sizeof(struct serio), GFP_KERNEL); + ps2port = kmalloc(sizeof(struct gscps2port), GFP_KERNEL); + serio = kmalloc(sizeof(struct serio), GFP_KERNEL); if (!ps2port || !serio) { ret = -ENOMEM; goto fail_nomem; @@ -349,6 +349,8 @@ static int __init gscps2_probe(struct parisc_device *dev) dev_set_drvdata(&dev->dev, ps2port); + memset(ps2port, 0, sizeof(struct gscps2port)); + memset(serio, 0, sizeof(struct serio)); ps2port->port = serio; ps2port->padev = dev; ps2port->addr = ioremap_nocache(hpa, GSC_STATUS + 4); diff --git a/trunk/drivers/input/serio/i8042.c b/trunk/drivers/input/serio/i8042.c index 06b05dd22485..3888dc307e0c 100644 --- a/trunk/drivers/input/serio/i8042.c +++ b/trunk/drivers/input/serio/i8042.c @@ -512,7 +512,6 @@ static irqreturn_t __devinit i8042_aux_test_irq(int irq, void *dev_id) { unsigned long flags; unsigned char str, data; - int ret = 0; spin_lock_irqsave(&i8042_lock, flags); str = i8042_read_status(); @@ -521,11 +520,10 @@ static irqreturn_t __devinit i8042_aux_test_irq(int irq, void *dev_id) if (i8042_irq_being_tested && data == 0xa5 && (str & I8042_STR_AUXDATA)) complete(&i8042_aux_irq_delivered); - ret = 1; } spin_unlock_irqrestore(&i8042_lock, flags); - return IRQ_RETVAL(ret); + return IRQ_HANDLED; } /* diff --git a/trunk/drivers/mtd/maps/lubbock-flash.c b/trunk/drivers/mtd/maps/lubbock-flash.c index e8560683b973..1aa0447c5e66 100644 --- a/trunk/drivers/mtd/maps/lubbock-flash.c +++ b/trunk/drivers/mtd/maps/lubbock-flash.c @@ -15,7 +15,9 @@ #include #include #include +#include +#include #include #include #include @@ -24,7 +26,7 @@ #include #include #include -#include + #define ROM_ADDR 0x00000000 #define FLASH_ADDR 0x04000000 @@ -33,7 +35,7 @@ static void lubbock_map_inval_cache(struct map_info *map, unsigned long from, ssize_t len) { - flush_ioremap_region(map->phys, map->cached, from, len); + consistent_sync((char *)map->cached + from, len, DMA_FROM_DEVICE); } static struct map_info lubbock_maps[2] = { { diff --git a/trunk/drivers/mtd/maps/mainstone-flash.c b/trunk/drivers/mtd/maps/mainstone-flash.c index d76487d82dcd..eaa4bbb868a3 100644 --- a/trunk/drivers/mtd/maps/mainstone-flash.c +++ b/trunk/drivers/mtd/maps/mainstone-flash.c @@ -15,6 +15,8 @@ #include #include #include +#include +#include #include #include @@ -24,7 +26,6 @@ #include #include #include -#include #define ROM_ADDR 0x00000000 @@ -35,7 +36,7 @@ static void mainstone_map_inval_cache(struct map_info *map, unsigned long from, ssize_t len) { - flush_ioremap_region(map->phys, map->cached, from, len); + consistent_sync((char *)map->cached + from, len, DMA_FROM_DEVICE); } static struct map_info mainstone_maps[2] = { { diff --git a/trunk/include/asm-arm/arch-at91/irqs.h b/trunk/include/asm-arm/arch-at91/irqs.h index 70b1216dce5d..1127a3b5e928 100644 --- a/trunk/include/asm-arm/arch-at91/irqs.h +++ b/trunk/include/asm-arm/arch-at91/irqs.h @@ -42,7 +42,4 @@ */ #define NR_IRQS (NR_AIC_IRQS + (5 * 32)) -/* FIQ is AIC source 0. */ -#define FIQ_START AT91_ID_FIQ - #endif diff --git a/trunk/include/asm-arm/arch-omap/irda.h b/trunk/include/asm-arm/arch-omap/irda.h index 96bb12fab438..345a649ec838 100644 --- a/trunk/include/asm-arm/arch-omap/irda.h +++ b/trunk/include/asm-arm/arch-omap/irda.h @@ -31,7 +31,6 @@ struct omap_irda_config { unsigned long src_start; int tx_trigger; int rx_trigger; - int mode; }; #endif diff --git a/trunk/include/asm-arm/cacheflush.h b/trunk/include/asm-arm/cacheflush.h index 6c1c968b2987..d1294a46c70c 100644 --- a/trunk/include/asm-arm/cacheflush.h +++ b/trunk/include/asm-arm/cacheflush.h @@ -426,13 +426,6 @@ static inline void flush_anon_page(struct vm_area_struct *vma, */ #define flush_icache_page(vma,page) do { } while (0) -static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt, - unsigned offset, size_t size) -{ - const void *start = (void __force *)virt + offset; - dmac_inv_range(start, start + size); -} - #define __cacheid_present(val) (val != read_cpuid(CPUID_ID)) #define __cacheid_type_v7(val) ((val & (7 << 29)) == (4 << 29)) diff --git a/trunk/include/asm-arm/plat-s3c/map.h b/trunk/include/asm-arm/plat-s3c/map.h index b84289d32a54..95a82b0e84a1 100644 --- a/trunk/include/asm-arm/plat-s3c/map.h +++ b/trunk/include/asm-arm/plat-s3c/map.h @@ -30,11 +30,11 @@ #define S3C_ADDR(x) (S3C_ADDR_BASE + (x)) #endif -#define S3C_VA_IRQ S3C_ADDR(0x00000000) /* irq controller(s) */ -#define S3C_VA_SYS S3C_ADDR(0x00100000) /* system control */ -#define S3C_VA_MEM S3C_ADDR(0x00200000) /* system control */ -#define S3C_VA_TIMER S3C_ADDR(0x00300000) /* timer block */ -#define S3C_VA_WATCHDOG S3C_ADDR(0x00400000) /* watchdog */ -#define S3C_VA_UART S3C_ADDR(0x01000000) /* UART */ +#define S3C_VA_IRQ S3C_ADDR(0x000000000) /* irq controller(s) */ +#define S3C_VA_SYS S3C_ADDR(0x001000000) /* system control */ +#define S3C_VA_MEM S3C_ADDR(0x002000000) /* system control */ +#define S3C_VA_TIMER S3C_ADDR(0x003000000) /* timer block */ +#define S3C_VA_WATCHDOG S3C_ADDR(0x004000000) /* watchdog */ +#define S3C_VA_UART S3C_ADDR(0x010000000) /* UART */ #endif /* __ASM_PLAT_MAP_H */ diff --git a/trunk/init/main.c b/trunk/init/main.c index 9def935ab13a..450e6ee52ab6 100644 --- a/trunk/init/main.c +++ b/trunk/init/main.c @@ -397,6 +397,10 @@ static void __init smp_init(void) { unsigned int cpu; +#ifndef CONFIG_HOTPLUG_CPU + cpu_possible_map = cpu_present_map; +#endif + /* FIXME: This should be done in userspace --RR */ for_each_present_cpu(cpu) { if (num_online_cpus() >= max_cpus) @@ -541,6 +545,10 @@ asmlinkage void __init start_kernel(void) setup_arch(&command_line); setup_command_line(command_line); unwind_setup(); +#ifndef CONFIG_HOTPLUG_CPU + if (max_cpus < 2) + cpu_possible_map = cpu_online_map; +#endif setup_per_cpu_areas(); smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */ diff --git a/trunk/security/selinux/hooks.c b/trunk/security/selinux/hooks.c index d8bc4172819c..36946629b6ca 100644 --- a/trunk/security/selinux/hooks.c +++ b/trunk/security/selinux/hooks.c @@ -1907,6 +1907,9 @@ static void selinux_bprm_post_apply_creds(struct linux_binprm *bprm) spin_unlock_irq(¤t->sighand->siglock); } + /* Always clear parent death signal on SID transitions. */ + current->pdeath_signal = 0; + /* Check whether the new SID can inherit resource limits from the old SID. If not, reset all soft limits to the lower of the current task's hard limit and the init