Bugos DVB-T driver és a sleep esete Ubuntu-n

Anno jó pár hónappal ezelőtt (talán már 2 éve...) hozzám került egy AverMedia Volar HX nevű DVB-T (és egyéb) tuner cucc, USB-s cucc.
Sajnos a drivere zárt, ráadásul a 2.6.35-ös kernelnél megálltak, de némi buherálással azért működik a 3.2-es kernellel is. A problémám az volt mindig is, hogy sajnos a driver nem szereti, ha sleep-elem a gépet (nem sleep-el vagy kifagy), én viszont igen. Próbálkoztam mindenfélével (SUSPEND_MODULES, usb poweroff, usb suspend, stb) de egyetlen megoldás vált csak be: ha a driver-ről unbind-olom az eszközt, majd resume esetén vissza bind-olom.
Ha másvalaki is szív hasonló problémával, itt egy script, ami nekem erre az esetre bevált. Nem vagyok shell-script guru, szóval nem ér röhögni, ha nagyon ügyetlenül csináltam valamit.


/etc/pm/sleep.d/20_custom_avermedia.sh

#!/bin/sh
# Unbind AverMedia USB device so the driver will not prevent sleep any more

# driver is accessible here
DRIVER="/sys/bus/usb/drivers/AVerTV Volar HX AX MAX"
BINDFILE=/var/run/avermedia.bind

case "${1}" in
    hibernate|suspend)
	if [ -d "$DRIVER" ]; then
	    # find where device is attached to
	    DEVICE=`find "$DRIVER" | grep -o '[0-9]-[0-9]:[0-9]\.[0-9]'`
	    # save information
	    echo -n "$DEVICE" > $BINDFILE
	    # unbind device
	    echo -n "$DEVICE" | tee "$DRIVER/unbind"
	fi
	;;
    resume|thaw)
	if [ -e "$BINDFILE" ]; then
	    # get where the device was last attached to
	    # TODO: better solution is to scan USB bus, maybe the device is attached to elsewhere now
	    DEVICE=`cat $BINDFILE`
	    rm $BINDFILE
	    # bind device to driver
	    echo -n "$DEVICE" | tee "$DRIVER/bind"
	fi
	;;
esac 

Hozzászólások

Ugyanezt csináltam anno usb-s wifi dongle-lel, azzal a különbséggel, hogy annak a drivere a kernel része. :)