The pci_device_id tables in linux-2.4.7-pre3/drivers/char/sonypi.c
claims that the driver wants to be loaded on all computers that have
an that have a PCI device with vendor id PCI_VENDOR_ID_INTEL and
a device ID of either PCI_DEVICE_ID_INTEL_82371AB_3 (0x7110) or
PCI_DEVICE_ID_INTEL_82801BA_10 (0x244c).  My Kapok 1100m notebook
computer has an Intel 82371ab, so the sonypi module automatically
loads at boot time and hangs the computer.

        sonypi_init_module needs to do some kind of test to figure out
if it is on a Sony Vaio and abort otherwise.  Looking at the result of
"lspci -v" on my Sony Vaio Picturebook, I see that, while none of the
PCI devices have Sony's vendor ID, a number of them have Sony's
vendor ID as their subsystem vendor ID's.  So, I have implemented the
following test to cause sonypi only to be loadable on machines that
have at least one PCI device that has a subsystem vendor ID of
PCI_VENDOR_ID_SONY.

-- 
Adam J. Richter     __     ______________   4880 Stevens Creek Blvd, Suite 104
[EMAIL PROTECTED]     \ /                  San Jose, California 95129-1034
+1 408 261-6630         | g g d r a s i l   United States of America
fax +1 408 261-6631      "Free Software For The Rest Of Us."
--- linux-2.4.7-pre3/drivers/char/sonypi.c      Sat Jul  7 18:00:12 2001
+++ linux/drivers/char/sonypi.c Sat Jul  7 18:00:28 2001
@@ -690,7 +690,11 @@
 };
 
 static int __init sonypi_init_module(void) {
-       return pci_module_init(&sonypi_driver);
+       if (pci_find_subsys(PCI_ANY_ID, PCI_ANY_ID,
+                           PCI_VENDOR_ID_SONY, PCI_ANY_ID, NULL) != NULL)
+               return pci_module_init(&sonypi_driver);
+       else
+               return -ENODEV;
 }
 
 static void __exit sonypi_cleanup_module(void) {

Reply via email to