Messages in this thread Patch in this message |  | | From | David Brownell <> | Subject | [patch 2.6.19-rc6 3/6] X86_PC optionally creates rtc_cmos platform device | Date | Mon, 20 Nov 2006 10:22:09 -0800 |
| |
Update X86_PC platforms (i386, x86_64) to create an "rtc_cmos" platform device when PNPACPI won't be creating a corresponding PNP node for us. There may be other platform devices that should get corresponding treatment; it might help get rid of more legacy ISA probing logic.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Index: g26/arch/x86_64/kernel/setup.c =================================================================== --- g26.orig/arch/x86_64/kernel/setup.c 2006-11-20 10:03:06.000000000 -0800 +++ g26/arch/x86_64/kernel/setup.c 2006-11-20 10:10:43.000000000 -0800 @@ -1212,22 +1212,58 @@ struct seq_operations cpuinfo_op = { .show = show_cpuinfo, }; -#if defined(CONFIG_INPUT_PCSPKR) || defined(CONFIG_INPUT_PCSPKR_MODULE) + +#ifdef CONFIG_X86_PC + #include <linux/platform_device.h> -static __init int add_pcspkr(void) -{ - struct platform_device *pd; - int ret; +#include <asm/mc146818rtc.h> + +#if defined(CONFIG_INPUT_PCSPKR) || defined(CONFIG_INPUT_PCSPKR_MODULE) +static struct platform_device pcspkr_dev = { + .name = "pcspkr", + .id = -1, +}; +#endif /* PCSPKR */ - pd = platform_device_alloc("pcspkr", -1); - if (!pd) - return -ENOMEM; - - ret = platform_device_add(pd); - if (ret) - platform_device_put(pd); +#ifndef CONFIG_PNPACPI +struct resource rtc_platform_resources[] = { { + .flags = IORESOURCE_IO, + .start = RTC_PORT(0), + .end = RTC_PORT(1), +}, { + .flags = IORESOURCE_IRQ, + .start = RTC_IRQ +} }; - return ret; -} -device_initcall(add_pcspkr); +struct platform_device rtc_dev = { + .name = "rtc_cmos", + .id = -1, + .resource = rtc_platform_resources, + .num_resources = ARRAY_SIZE(rtc_platform_resources), +}; +#endif /* !PNPACPI */ + +static struct platform_device *x86_pc_devs[] __initdata = { +#if defined(CONFIG_INPUT_PCSPKR) || defined(CONFIG_INPUT_PCSPKR_MODULE) + &pcspkr_dev, +#endif +#ifndef CONFIG_PNPACPI + &rtc_dev, +#endif +}; + +static __init int add_devices(void) +{ +#ifndef CONFIG_PNPACPI + /* On most motherboards starting with ATX (1995+), + * RTC alarms can wake the system + */ + device_init_wakeup(&rtc_dev.dev, 1); #endif + + return platform_add_devices(x86_pc_devs, ARRAY_SIZE(x86_pc_devs)); +} +arch_initcall(add_devices); + +#endif /* X86_PC */ + Index: g26/arch/i386/kernel/setup.c =================================================================== --- g26.orig/arch/i386/kernel/setup.c 2006-11-20 10:03:06.000000000 -0800 +++ g26/arch/i386/kernel/setup.c 2006-11-20 10:10:43.000000000 -0800 @@ -1481,22 +1481,56 @@ void __init setup_arch(char **cmdline_p) tsc_init(); } -static __init int add_pcspkr(void) -{ - struct platform_device *pd; - int ret; - pd = platform_device_alloc("pcspkr", -1); - if (!pd) - return -ENOMEM; - - ret = platform_device_add(pd); - if (ret) - platform_device_put(pd); +#ifdef CONFIG_X86_PC + +#include <linux/platform_device.h> +#include <asm/mc146818rtc.h> + +static struct platform_device pcspkr_dev = { + .name = "pcspkr", + .id = -1, +}; + +#ifndef CONFIG_PNPACPI +struct resource rtc_platform_resources[] = { { + .flags = IORESOURCE_IO, + .start = RTC_PORT(0), + .end = RTC_PORT(1), +}, { + .flags = IORESOURCE_IRQ, + .start = RTC_IRQ +} }; + +struct platform_device rtc_dev = { + .name = "rtc_cmos", + .id = -1, + .resource = rtc_platform_resources, + .num_resources = ARRAY_SIZE(rtc_platform_resources), +}; +#endif /* !PNPACPI */ - return ret; +static struct platform_device *x86_pc_devs[] __initdata = { + &pcspkr_dev, +#ifndef CONFIG_PNPACPI + &rtc_dev, +#endif +}; + +static __init int add_devices(void) +{ +#ifndef CONFIG_PNPACPI + /* On most motherboards starting with ATX (1995+), + * RTC alarms can wake the system + */ + device_init_wakeup(&rtc_dev.dev, 1); +#endif + + return platform_add_devices(x86_pc_devs, ARRAY_SIZE(x86_pc_devs)); } -device_initcall(add_pcspkr); +arch_initcall(add_devices); + +#endif /* X86_PC */ /* * Local Variables: - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |