#!/bin/sh
# set -x

touch /tmp/usb_change
#exec >& /var/log/hotplug.$1.$DEVNAME.$ACTION.log 2>&1
#echo "parameter is" "$1"
#env
[ "$1" = "firmware" -a "$ACTION" = "add" ] && {
	[ -f "/lib/firmware/$FIRMWARE" ] && {
		echo 1 > /sys$DEVPATH/loading
		cat /lib/firmware/$FIRMWARE > /sys$DEVPATH/data
		echo 0 > /sys$DEVPATH/loading
	}
	exit 0
}

[ "$1" = "ubi" ] && {
  [ "$ACTION" = "add" ] && {
    if [[ -f /sys$DEVPATH/name ]]; then
      sleep 1 #EWLC on the fly re-partition needs this
      mknod "/dev/ubivol/`cat /sys$DEVPATH/name`" c `sed s/:/\ / /sys$DEVPATH/dev`
      mknod "/dev/ubidev/`cat /sys$DEVPATH/name`" c `sed s/:/\ / /sys$DEVPATH/device/dev`
      ln -s /sys$DEVPATH "/dev/ubinfo/`cat /sys$DEVPATH/name`"
    else
      mknod /dev/`basename /sys$DEVPATH` c `sed s/:/\ / sys/$DEVPATH/dev`
    fi
  }

  [ "$ACTION" = "remove" ] && {
    if `echo $DEVNAME | grep -q _`; then
      for ubivol in /dev/ubivol/*; do
        if [ `ls -l $ubivol | awk '{FS = " " } {print $5 $6}'` = "$MAJOR,$MINOR" ]; then
          rm $ubivol /dev/ubidev/`basename $ubivol` /dev/ubinfo/`basename $ubivol`
        fi
      done
    else
      rm /dev/$DEVNAME
    fi
  }
  exit 0
}

[ "$1" = "mtd" ] && {
  echo $DEVNAME | grep -q mtd.\*ro && exit 0
  [ "$ACTION" = "add" ] && {
    mknod "/dev/mtdchar/`cat /sys$DEVPATH/name`" c `sed s/:/\ / /sys$DEVPATH/dev`
    [ -d /sys$DEVPATH/block* ] && {
      mknod "/dev/mtdblock/`cat /sys$DEVPATH/name`" b `sed s/:/\ / /sys/$DEVPATH/block*/dev`
    }
  }

  [ "$ACTION" = "remove" ] && {
    for mtddev in /dev/mtdchar/*; do
      if [ `ls -l $mtddev | awk '{FS = " " } {print $5 $6}'` = "$MAJOR,$MINOR" ]; then
        rm $mtddev
	rm /dev/mtdblock/`basename $mtddev`
      fi
    done
  }
  exit 0
}

[ "$1" = "block" -a "${DEVNAME#mtdblock}" != "$DEVNAME" -a -d /sys$DEVPATH/device ] && {
    [ "$ACTION" = "add" ] && mknod "/dev/mtdblock/`cat /sys$DEVPATH/device/name`" b `sed s/:/\ / /sys$DEVPATH/dev`
    [ "$ACTION" = "remove" ] && rm /dev/mtdblock/`cat /sys$DEVPATH/device/name`
}

[ "$1" = "block" -a "$DEVTYPE" = "partition" ] && {
    [ "$ACTION" = "add" ] && mknod /dev/$DEVNAME b $MAJOR $MINOR
    [ "$ACTION" = "remove" ] && rm /dev/$DEVNAME
    exit 0
}

[ "$PHYSDEVBUS" = "usb" -o "$PHYSDEVBUS" = "usb-serial" ] && {
  [ "$1" = "tty" ] && {
    [ "$ACTION" = "add" ] && {
      echo "ADD $DEVNAME" >> /tmp/usb_change
    }

    [ "$ACTION" = "remove" ] && {
      echo "REMOVE $DEVNAME" >> /tmp/usb_change
    }
    exit 0
  }
  echo "UNKNOWN $DEVNAME" >> /tmp/usb_change
  exit 0
}

exit 0
