OSDN Git Service

0-auto-detect: enable bluetooth for other platforms
[android-x86/bootable-newinstaller.git] / initrd / scripts / 0-auto-detect
index d8dfa96..e8fe138 100644 (file)
@@ -1,14 +1,23 @@
 #
 # By Chih-Wei Huang <cwhuang@linux.org.tw>
-# Last updated 2009/07/18
+# Last updated 2009/08/14
 #
 # License: GNU Public License
 # We explicitely grant the right to use the scripts
 # with Android-x86 project.
 #
 
-# TODO: implement a more generic auto detection by scanning /sys
-# For now we just look up the machine name.
+# An auto detect function provided by kinneko
+auto_detect()
+{
+       tmp=/tmp/dev2mod
+       echo 'dev2mod() { while read dev; do case $dev in' > $tmp
+       sort -r /lib/modules/`uname -r`/modules.alias | \
+               sed -n 's/^alias  *\([^ ]*\)  *\(.*\)/\1)modprobe \2;;/p' >> $tmp
+       echo 'esac; done; }' >> $tmp
+       source $tmp
+       cat /sys/bus/*/devices/*/modalias | dev2mod
+}
 
 # FB0DEV: framebuffer driver
 # LANDEV: lan driver
 # SNDDEV: sound driver
 # CAMDEV: camera driver
 # PREDEV: any module the drivers depend on but can't be loaded automatically
+# EXTMOD: any other module
 
-get_asus_info()
+asus_info()
 {
-       board=`cat /sys/class/dmi/id/board_name`
+       # common for all Eee PC models
+       [ -c /dev/fb0 ] || FB0DEV=i915
+       EXTMOD=eeepc-laptop
+       PREDEV=snd-hda-codec-realtek
+       SNDDEV=snd-hda-intel
+       CAMDEV=uvcvideo
+
+       board=`cat /sys/class/dmi/id/product_name`
        # assume Eee PC models
        case "$board" in
-               700|701|900)
+               700|701|702|900)
                        LANDEV=atl2
                        WIFDEV=ath5k
                        ;;
@@ -34,63 +51,122 @@ get_asus_info()
                        LANDEV=atl1e
                        WIFDEV=ath5k
                        ;;
-               901)
+               901|1000|1000H)
                        LANDEV=atl1e
                        WIFDEV=rt2860sta
+                       ;;
+               ET1602*)
+                       FB0DEV=
+                       UVESA_MODE=${UVESA_MODE:-1366x768}
+                       LANDEV=r8169
+                       WIFDEV=rt2860sta
+                       ;;
+               T91)
+                       FB0DEV=
+                       UVESA_MODE=${UVESA_MODE:-1024x600}
+                       LANDEV=atl1e
+                       WIFDEV=ath9k
+                       ;;
+               A6VM*)
+                       EXTMOD=asus-laptop
+                       LANDEV=skge
+                       WIFDEV=ipw2200
+                       ;;
                *)
                        LANDEV=atl1e
                        WIFDEV=ath9k
-#                      WIFDEV=rt2860sta
                        ;;
        esac
-
-       # common for all Eee PC models
-       FB0DEV=i915
-       SNDDEV=snd-hda-intel
-       CAMDEV=uvcvideo
-       PREDEV=snd-hda-codec-realtek
 }
 
-get_vbox_info()
+vbox_info()
 {
        LANDEV=pcnet32
        SNDDEV="snd-sb16 isapnp=0 irq=5"
+       VESA=1
 }
 
-get_qemu_info()
+qemu_info()
 {
        LANDEV=8139cp
        SNDDEV=snd-ens1370
 }
 
-get_vmware_info()
+vmware_info()
 {
        LANDEV=pcnet32
        SNDDEV=snd-ens1371
 }
 
-check_product()
+detect_hardware()
 {
-       grep -q "$1" /sys/class/dmi/id/uevent
+       [ "$AUTO" = "1" ] && return
+       case "`cat /sys/class/dmi/id/uevent`" in
+               *ASUSTeK*)
+                       get_info=asus_info
+                       ;;
+               *Acer*AO*)
+                       get_info=ao_info
+                       ;;
+               *VirtualBox*)
+                       get_info=vbox_info
+                       ;;
+               *QEMU*)
+                       get_info=qemu_info
+                       ;;
+               *VMware*)
+                       get_info=vmware_info
+                       ;;
+               *)
+                       ;;
+       esac
+       [ -n "$get_info" ] && $get_info && FOUND=1
 }
 
-detect_hardware()
+find_network_dev_name()
 {
-       check_product ASUSTeK && get_asus_info
-       check_product VirtualBox && get_vbox_info
-       check_product QEMU && get_qemu_info
-       check_product VMware && get_vmware_info
+       wififound=0
+       rmline=`grep -n "#REMOVE FROM HERE" init.rc|cut -d':' -f1`
+       rmline=`expr $rmline + 1`
+       sed -i -e "$rmline,\$d" init.rc
+       for netdev in `ls /sys/class/net`; do
+               if [ $netdev = "lo" -o $netdev = "wmaster0" ]; then
+                       continue
+               fi              
+               w=/sys/class/net/$netdev
+               if [ -d $w/wireless -o -d $w/phy80211 ]; then
+                       if [ $wififound -eq 0 ]; then
+                               sed -i "s|\(^ *service wpa_supplicant .*\)\(-i.*\)\( -c.*$\)|\1-i $netdev\3|g" init.rc
+                               wififound=1
+                       fi
+               fi
+               echo "service dhcpcd$netdev /system/bin/dhcpcd $netdev" >> init.rc
+               echo "   group system dhcp" >> init.rc
+               echo "   disabled" >>init.rc
+               echo "   oneshot" >> init.rc
+       done
 }
 
 load_modules()
 {
-       detect_hardware
-       for m in $PREDEV; do
-               modprobe $m
-       done
-       [ -n "$FB0DEV" ] && modprobe $FB0DEV
-       [ -n "$LANDEV" ] && modprobe $LANDEV
-       [ -n "$WIFDEV" ] && modprobe $WIFDEV
-       [ -n "$SNDDEV" ] && modprobe $SNDDEV
-       [ -n "$CAMDEV" ] && modprobe $CAMDEV
+       if [ -n "$FOUND" ]; then
+               BTDEV="bnep rfcomm sco btusb"
+               for m in $BTDEV $PREDEV $EXTMOD; do
+                       modprobe $m
+               done
+               [ -n "$FB0DEV" -a -z "$UVESA_MODE" ] && modprobe $FB0DEV
+               [ -n "$LANDEV" ] && modprobe $LANDEV
+               [ -n "$WIFDEV" ] && modprobe $WIFDEV
+               [ -n "$SNDDEV" ] && modprobe $SNDDEV
+               [ -n "$CAMDEV" ] && modprobe $CAMDEV
+       else
+               auto_detect
+       fi
+
+       mdev -s
+       [ -c /dev/video0 ] || modprobe vivi
+       [ -d /proc/asound/card0 ] || modprobe snd-dummy
+       [ -c /dev/fb0 ] || modprobe uvesafb mode_option=${UVESA_MODE:-800x600}-16 ${UVESA_OPTION:-mtrr=3 scroll=ywrap}
+       find_network_dev_name
+#      find_wifi_dev_name
 }