bluez-utils: added workaround for dtl1_cs CF cards
authorMarcin Juszkiewicz <hrw@openembedded.org>
Thu, 19 Jan 2006 19:12:48 +0000 (19:12 +0000)
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>
Thu, 19 Jan 2006 19:12:48 +0000 (19:12 +0000)
- dtl1_cs driver does not support suspend/resume so after resume
  we have to eject/insert card to get it working again
- close #417

packages/bluez/bluez-utils-dbus_2.20.bb
packages/bluez/bluez-utils-dbus_2.21.bb
packages/bluez/bluez-utils-dbus_2.24.bb
packages/bluez/bluez-utils-nodbus_2.20.bb
packages/bluez/bluez-utils-nodbus_2.21.bb
packages/bluez/bluez-utils-nodbus_2.24.bb
packages/bluez/bluez-utils.inc
packages/bluez/files/02dtl1_cs.sh [new file with mode: 0644]

index 1d7c172..2aad6ea 100644 (file)
@@ -1,6 +1,6 @@
 include bluez-utils.inc
 
-PR = "r10"
+PR = "r11"
 
 DEPENDS += "dbus"
 SRC_URI += "file://dbus.patch;patch=1 \
index 8c78d18..8db7852 100644 (file)
@@ -1,6 +1,6 @@
 include bluez-utils.inc
 
-PR = "r4"
+PR = "r5"
 
 DEPENDS += "dbus"
 SRC_URI += "file://dbus.patch;patch=1 \
index ecda02c..d8c97d9 100644 (file)
@@ -1,6 +1,6 @@
 include bluez-utils.inc
 
-PR = "r1"
+PR = "r2"
 
 DEPENDS += "dbus"
 SRC_URI += "file://dbus.patch;patch=1"
index f550939..006d125 100644 (file)
@@ -1,6 +1,6 @@
 include bluez-utils.inc
 
-PR = "r2"
+PR = "r3"
 
 SRC_URI += "file://hciattach_devlength.patch;patch=1"
 EXTRA_OECONF += "--without-dbus"
index d7487a0..49162d5 100644 (file)
@@ -1,6 +1,6 @@
 include bluez-utils.inc
 
-PR = "r2"
+PR = "r3"
 
 SRC_URI += "file://hciattach_devlength.patch;patch=1"
 EXTRA_OECONF += "--without-dbus"
index 774549b..7a9e732 100644 (file)
@@ -1,5 +1,5 @@
 include bluez-utils.inc
 
-PR = "r1"
+PR = "r2"
 
 EXTRA_OECONF += "--without-dbus"
index 5babed4..c68df7b 100644 (file)
@@ -10,7 +10,8 @@ SRC_URI = "http://bluez.sourceforge.net/download/bluez-utils-${PV}.tar.gz \
        file://blueboxes.patch;patch=1 \
        file://hcid.conf \
        file://bluetooth.default \
-       file://bluetooth.conf "
+       file://bluetooth.conf \
+       file://02dtl1_cs.sh"
 
 # Almost all serial CF cards w/ manfid 0x0000,0x0000 seem to use the bcs protocol
 # Let's default to that instead of 'any' and see if we break something with that
@@ -32,7 +33,7 @@ do_compile_prepend() {
 }
 
 do_install_append() {
-       install -d ${D}${base_sbindir} ${D}${base_bindir}/
+       install -d ${D}${base_sbindir} ${D}${base_bindir}/ ${D}${sysconfdir}/apm/event.d/
        mv ${D}${sbindir}/* ${D}${base_sbindir}/
        mv ${D}${bindir}/* ${D}${base_bindir}/
        rmdir ${D}${bindir} ${D}${sbindir}
@@ -41,6 +42,7 @@ do_install_append() {
        install -m 0644 ${WORKDIR}/hcid.conf ${D}${sysconfdir}/bluetooth/
        install -m 0644 ${WORKDIR}/bluetooth.default ${D}${sysconfdir}/default/bluetooth
        cat ${WORKDIR}/bluetooth.conf >> ${D}${sysconfdir}/pcmcia/bluetooth.conf
+       install -m 0755 ${WORKDIR}/02dtl1_cs.sh ${D}${sysconfdir}/apm/event.d/
 }
 
 CONFFILES_${PN} = "${sysconfdir}/bluetooth/hcid.conf ${sysconfdir}/bluetooth/rfcomm.conf \
diff --git a/packages/bluez/files/02dtl1_cs.sh b/packages/bluez/files/02dtl1_cs.sh
new file mode 100644 (file)
index 0000000..fefc72e
--- /dev/null
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+case "$1" in
+       suspend)
+               if [ "`/sbin/hciconfig`" != "" ]; then
+                       #If hciconfig outputs anything then there's probably a Bluetooth
+                       # CF card in the slot so shut it down.
+                       hcitool dc `hcitool con | grep ACL | sed 's/^.*\([0-9A-F]\{2\}\(:[0-9A-F]\{2\}\)\{5\}\).*$/\1/'`
+                       hciconfig hci0 down
+                       killall hciattach > /dev/null 2>&1 
+               fi 
+               ;;
+
+       resume)
+               #check for kernel version
+               if [ "`uname -r | grep 2.4.`" != "" ]; then
+                       k="o"
+               elif [ "`uname -r | grep 2.6.`" != "" ]; then
+                       k="ko"
+               else
+                       exit 0
+               fi
+
+               if test -e /sbin/cardctl; then
+                       CARDCTL=/sbin/cardctl
+               elif test -e /sbin/pccardctl; then
+                       CARDCTL=/sbin/pccardctl
+               else
+                       exit 0
+               fi
+
+               if [ "`lsmod | grep hci_uart`" != "" ]; then
+                       #If the hci_usb module is still loaded then there's a serial based
+                       # Bluetooth CF card in the slot, which only needs a resume to get it going
+                       # again. 
+                       rfcomm bind all
+                       $CARDCTL resume
+                       hciconfig hci0 up
+               else
+                       # only works for nokia dtl1 cards
+                       for f in /lib/modules/`uname -r`/kernel/drivers/bluetooth/dtl1_cs.$k
+                       do
+                               #Enumerate all the self-contained Bluetooth CF card drivers
+                               f=`echo $f | sed 's/\.'$k'$//'`
+                               f=`basename $f`
+                               if [ "`lsmod | grep $f`" != "" ]; then
+                                       #If one of these drivers is still loaded, then there is probably
+                                       #a non-serial based Bluetooth CF card in the slot that needs
+                                       #ejecting and reinserting to get it going again
+                                       rfcomm bind all
+                                       $CARDCTL eject
+                                       $CARDCTL insert
+                                       hciconfig hci0 up
+                               fi
+                       done
+               fi
+esac