[PATCH 1/2] hardy-lbm: bcm5974: remove dynamic quirks, instead post-install quirkline

Henrik Rydberg rydberg at euromail.se
Thu Jul 24 10:18:03 UTC 2008


This patch aims at resolving the problem of initializing
the bcm5974 by installing a quirkline in /etc/modprobe.d/bcm5974,
which makes usbhid ignore the trackpad.

The install/remove scripts are only added, not linked into
postinst; hoping for some help to do it properly.

Signed-off-by: Henrik Rydberg <rydberg at euromail.se>
---
 debian/control-scripts/bcm5974-post-install |   71 +++++++++++++++++++++++++++
 debian/control-scripts/bcm5974-post-remove  |   27 ++++++++++
 updates/input/mouse/bcm5974.c               |   48 +------------------
 3 files changed, 99 insertions(+), 47 deletions(-)
 create mode 100755 debian/control-scripts/bcm5974-post-install
 create mode 100755 debian/control-scripts/bcm5974-post-remove

diff --git a/debian/control-scripts/bcm5974-post-install b/debian/control-scripts/bcm5974-post-install
new file mode 100755
index 0000000..79d99c6
--- /dev/null
+++ b/debian/control-scripts/bcm5974-post-install
@@ -0,0 +1,71 @@
+#!/bin/bash
+#
+# bcm5943-post-install - post-installing the BCM5974
+#
+# Copyright (C) 2008	   Henrik Rydberg (rydberg at euromail.se)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+DRIVER=bcm5974
+ETCPATH=/etc/modprobe.d/$DRIVER
+LSUSB=/usr/sbin/lsusb
+
+MANID=05ac
+DEVID=
+QUIRKID=
+
+# Macbook Air
+MATCH[0]=0223; QUIRK[0]=00020800
+MATCH[1]=0224; QUIRK[1]=00024800
+MATCH[2]=0225; QUIRK[2]=00020800
+# Macbook Pro Penryn
+MATCH[3]=0230; QUIRK[3]=00020800
+MATCH[4]=0231; QUIRK[4]=00024800
+MATCH[5]=0232; QUIRK[5]=00020800
+# End list
+MATCH[6]=
+
+if [ -x $LSUSB ]; then
+	typeset -i i=0
+	while [ "${MATCH[$i]}" != "" ]; do
+		if [ "`$LSUSB|grep ${MANID}:${MATCH[$i]}`" != "" ]; then
+			DEVID=0x${MANID}:0x${MATCH[$i]}
+			QUIRKID=0x${QUIRK[$i]}
+	        fi
+		i=$i+1
+	done
+else
+	echo bcm5974: $LSUSB not found
+	exit 1
+fi
+
+if [ "$DEVID" = "" ]; then
+	#echo No suitable device found
+	exit 1
+fi
+
+cat > $ETCPATH <<EOF
+### Options for the bcm5974 driver
+
+## This line makes usbhid ignore the trackpad
+options usbhid quirks=$DEVID:$QUIRKID
+
+## Debug level - uncomment this to get raw packets in /var/log/debug
+#options bcm5974 debug=99
+EOF
+
+exit 0
+
diff --git a/debian/control-scripts/bcm5974-post-remove b/debian/control-scripts/bcm5974-post-remove
new file mode 100755
index 0000000..f348e28
--- /dev/null
+++ b/debian/control-scripts/bcm5974-post-remove
@@ -0,0 +1,27 @@
+#!/bin/bash
+#
+# bcm5943-post-remove - post-removing the BCM5974
+#
+# Copyright (C) 2008	   Henrik Rydberg (rydberg at euromail.se)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+DRIVER=bcm5974
+ETCPATH=/etc/modprobe.d/$DRIVER
+
+rm -f $ETCPATH
+
+exit 0
diff --git a/updates/input/mouse/bcm5974.c b/updates/input/mouse/bcm5974.c
index c43fc0c..2b94835 100644
--- a/updates/input/mouse/bcm5974.c
+++ b/updates/input/mouse/bcm5974.c
@@ -663,55 +663,9 @@ static struct usb_driver atp_driver = {
 	.id_table = atp_table,
 };

-#define USB_VENDOR_ID_APPLE		0x05ac
-#define USB_DEVICE_ID_APPLE_WELLSPRING_ANSI   0x0223
-#define USB_DEVICE_ID_APPLE_WELLSPRING_ISO    0x0224
-#define USB_DEVICE_ID_APPLE_WELLSPRING_JIS    0x0225
-#define USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI   0x0230
-#define USB_DEVICE_ID_APPLE_WELLSPRING2_ISO    0x0231
-#define USB_DEVICE_ID_APPLE_WELLSPRING2_JIS    0x0232
-
-static const struct hid_blacklist {
-	__u16 idVendor;
-	__u16 idProduct;
-	__u32 quirks;
-} hid_blacklist[] = {
-	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ANSI, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
-	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ISO, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_APPLE_ISO_KEYBOARD | HID_QUIRK_IGNORE_MOUSE},
-	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_JIS, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE},
-	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE},
-	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ISO, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_APPLE_ISO_KEYBOARD | HID_QUIRK_IGNORE_MOUSE },
-	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_JIS, HID_QUIRK_APPLE_HAS_FN  | HID_QUIRK_IGNORE_MOUSE },
-	{0,0,0}
-};
-
-static int __init atp_update_quirks(void)
-{
-	struct hid_blacklist *bp;
-	int result=0;
-	for (bp=hid_blacklist; bp->quirks; bp++)
-	{
-		result = usbhid_modify_dquirk(bp->idVendor,bp->idProduct,bp->quirks);
-		if (result < 0)
-		{
-			dbg_hid("Could not modify quirk for %04x:%04x\n",bp->idVendor,bp->idProduct);
-			break;
-		}
-	}
-	return result;
-}
-
 static int __init atp_init(void)
 {
-	int result;
-
-	/*
-	 * Update the kernel quirk table for this device.
-	 */
-	result = atp_update_quirks();
-	if (result >= 0)
-		return usb_register(&atp_driver);
-	return(result);
+	return usb_register(&atp_driver);
 }

 static void __exit atp_exit(void)
-- 
1.5.4.3





More information about the kernel-team mailing list