#!/usr/bin/env bash # Script to load suitable touch driver. # This is a back-end script and is called by '/etc/r.local' # ------------------------------------------------------------ # Algo: # ---- # 1. Parse touch controller name from script.bin. # 2. Depending upon touch controller name, load relevant function # Each function will: # - Copy appropriate 'script.bin' to 1st partition # - Copy appropriate 'uImage' to 1st partition # - Write module-name to '/etc/modules' file # - Copy appropriate 'xorg.conf.d' directory to '/usr/share/X11/' path # - Log events/errors in /var/log/aakash_tc.log # - Reboot with new settings # 3. If the module is already loaded, don't do anything(Load with # default setting and do not reboot) # ------------------------------------------------------------ # Convert script.bin to script.fex /opt/github/sunxi-tools/bin2fex /opt/nanda/script.bin > /tmp/script.fex # Parse Capacitive touch panel name TC_IN_SCRIPT_DOT_BIN=$(cat /tmp/script.fex | grep "ctp_used = 1" -A1 | grep ctp_name | sed 's/.*"\(.*\)".*/\1/g') # Parse Capacitive touch panel address(Required for gslx1680 to distinguish from 'ft5x_ts'. gslx's script has ctp_name = "ft5x_ts") TC_ADDR_IN_SCRIPT_DOT_BIN=$(cat /tmp/script.fex | grep "ctp_used = 1" -A3 | grep ctp_twi_addr | cut -d "x" -f 2) # echo ${TC_IN_SCRIPT_DOT_BIN} # echo ${TC_ADDR_IN_SCRIPT_DOT_BIN} function ft5x() { # Configure and load 'ft5x_ts' driver lsmod | grep ${TC_IN_SCRIPT_DOT_BIN} if [ "$(echo $?)" -eq 0 ]; then echo "$(date): ${TC_IN_SCRIPT_DOT_BIN} module already loaded" >> /var/log/aakash_tc.log else cp -v /opt/mount/script.bin.ft5x /opt/mount/script.bin #cp -v /lib/modules/uImage.3.0.76 /home/aakash/mount/uImage #echo -e "8192cu\nrtl8192cu\nrtlwifi\nft5x_ts" > /etc/modules echo "$(date): Deleting xorg.conf.d" >> /var/log/aakash_tc.log rm -r /usr/share/X11/xorg.conf.d echo "$(date): Copying xorg.conf.d.orig to xorg.conf.d" >> /var/log/aakash_tc.log cp -r /usr/share/X11/xorg.conf.d.orig /usr/share/X11/xorg.conf.d wait reboot fi } function gt811() { # Configure and load 'gt811_ts' driver lsmod | grep "gt811_ts" if [ "$(echo $?)" -eq 0 ]; then echo "$(date): ${TC_IN_SCRIPT_DOT_BIN} module already loaded" >> /var/log/aakash_tc.log else cp -v /opt/mount/script.bin.gt811 /opt/mount/script.bin #cp -v /lib/modules/uImage.3.0.76 /home/aakash/mount/uImage #echo -e "8192cu\nrtl8192cu\nrtlwifi\ngt811_ts" > /etc/modules echo "$(date): Deleting xorg.conf.d" >> /var/log/aakash_tc.log rm -r /usr/share/X11/xorg.conf.d echo "$(date): Copying xorg.conf.d.orig to xorg.conf.d" >> /var/log/aakash_tc.log cp -r /usr/share/X11/xorg.conf.d.orig /usr/share/X11/xorg.conf.d wait reboot fi } function ektf2k() { # Configure and load 'ektf2k' driver lsmod | grep "ektf2k" if [ "$(echo $?)" -eq 0 ]; then echo "$(date): ${TC_IN_SCRIPT_DOT_BIN} module already loaded" >> /var/log/aakash_tc.log else cp -v /opt/mount/script.bin.ektf2k /opt/mount/script.bin #cp -v /lib/modules/uImage.3.0.76 /home/aakash/mount/uImage #echo -e "8192cu\nrtl8192cu\nrtlwifi\nektf2k" > /etc/modules echo "$(date): Backing up xorg.conf.d" >> /var/log/aakash_tc.log cp -r /usr/share/X11/xorg.conf.d /usr/share/X11/xorg.conf.d.orig echo "$(date): Deleting xorg.conf.d" >> /var/log/aakash_tc.log rm -r /usr/share/X11/xorg.conf.d echo "$(date): Copying xorg.conf.d.ektf2k to xorg.conf.d" >> /var/log/aakash_tc.log cp -r /usr/share/X11/xorg.conf.d.ektf2k /usr/share/X11/xorg.conf.d wait reboot fi } function gslx1680() { # Configure and load 'ektf2k' driver # Load the driver as it was compiled separately from the kernel #insmod /lib/modules/3.4.75+/kernel/drivers/input/touchscreen/gslx680_ts.ko lsmod | grep "gslx680_ts" if [ "$(echo $?)" -eq 0 ]; then echo "$(date): gslx1680 module already loaded" >> /var/log/aakash_tc.log else cp -v /opt/mount/script.bin.gslx1680 /opt/mount/script.bin #cp -v /lib/modules/uImage.3.4.75 /home/aakash/mount/uImage #echo -e "8192cu\nrtl8192cu\nrtlwifi\n#gslx680_ts" > /etc/modules echo "$(date): Deleting xorg.conf.d" >> /var/log/aakash_tc.log rm -r /usr/share/X11/xorg.conf.d echo "$(date): Copying xorg.conf.d.orig to xorg.conf.d" >> /var/log/aakash_tc.log cp -r /usr/share/X11/xorg.conf.d.orig /usr/share/X11/xorg.conf.d wait reboot fi } if [ ${TC_IN_SCRIPT_DOT_BIN} == "ft5x_ts" ]; then # 'gslx1680' in script.bin has ctp_name = "ft5x_ts", but ctp_twi_addr is '0x3f' if [ ${TC_ADDR_IN_SCRIPT_DOT_BIN} == "3f" ]; then # Load gslx1680 driver echo "$(date): Detected gslx1680" >> /var/log/aakash_tc.log gslx1680 else # Load ft5x_ts driver echo "$(date): Detected ft5x" >> /var/log/aakash_tc.log ft5x fi elif [ ${TC_IN_SCRIPT_DOT_BIN} == "Goodix-TS" ]; then echo "$(date): Detected Goodix-TS" >> /var/log/aakash_tc.log gt811 elif [ ${TC_IN_SCRIPT_DOT_BIN} == "elan_ts" ]; then echo "$(date): Detected ektf2k" >> /var/log/aakash_tc.log ektf2k else echo "$(date): $TC_IN_SCRIPT_DOT_BIN" >> /var/log/aakash_tc.log echo "$(date): No suitable touch driver found." >> /var/log/aakash_tc.log fi