On Saturday 29 April 2006 20:30, Mikael Pettersson wrote: > I have a pair of Athlon64 machines that dual-boot 32-bit and > 64-bit kernels. One annoying difference between the kernels > is that the PC Speaker driver (CONFIG_INPUT_PCSPKR=y) only > works in the 32-bit kernels. Ah, I would consider this more a feature than a bug but ok :) > In the 64-bit kernels it remains > inactive and doesn't even generate any boot-time initialisation > or error messages. > > Today I debugged that issue, and found that the PC Speaker > driver's ->probe() routine doesn't even get called in the > 64-bit kernels. The reason for that is that the arch code > apparently has to explictly add a "pcspkr" platform device > in order for the driver core to call the ->probe() routine. > arch/i386/kernel/setup.c unconditionally adds a "pcspkr" > device, but the x86_64 kernel has no code at all related to > the PC Speaker. > > The patch below copies the relevant code from i386 to x86_64, > which makes the PC Speaker work for me on x86_64. Ok thanks. Applied. > Is there a better way to do this? ACPI? Maybe. ACPI folks, any opinion? -Andi (known to rip out the speaker cables in new machines) > > /Mikael > > diff -rupN linux-2.6.17-rc3/arch/x86_64/kernel/setup.c linux-2.6.17-rc3.x86_64-pcspkr/arch/x86_64/kernel/setup.c > --- linux-2.6.17-rc3/arch/x86_64/kernel/setup.c 2006-04-28 20:54:10.000000000 +0200 > +++ linux-2.6.17-rc3.x86_64-pcspkr/arch/x86_64/kernel/setup.c 2006-04-29 18:42:08.000000000 +0200 > @@ -1426,3 +1426,22 @@ struct seq_operations cpuinfo_op = { > .show = show_cpuinfo, > }; > > +#ifdef CONFIG_INPUT_PCSPKR > +#include <linux/platform_device.h> > +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); > + > + return ret; > +} > +device_initcall(add_pcspkr); > +#endif > - To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html