summarylogtreecommitdiffstats
path: root/smi-udev.sh
blob: d728aeb35057fd097fc63ae8e04b0f7e1c124ca5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/sh
# Autogenerated udev bootstrap for Silicon Motion USB Display

start_service() { systemctl start smiusbdisplay; }
stop_service()  { systemctl stop  smiusbdisplay; }

create_siliconmotion_symlink() {
  root=$1; device_id=$2; devnode=$3
  mkdir -p "$root/siliconmotion/by-id"
  ln -sf "$devnode" "$root/siliconmotion/by-id/$device_id"
}

unlink_siliconmotion_symlink() {
  root=$1; devname=$2
  for f in "$root/siliconmotion/by-id/"*; do
    { [ ! -e "$f" ] || { [ -L "$f" ] && [ "$f" -ef "$devname" ]; }; } && unlink "$f" 2>/dev/null || true
  done
  (cd "$root" && rmdir -p --ignore-fail-on-non-empty siliconmotion/by-id 2>/dev/null) || true
}

main() {
  action=$1; root=$2; devnode=$4
  case "$action" in
    add)
      device_id=$3
      create_siliconmotion_symlink "$root" "$device_id" "$devnode"
      start_service
      ;;
    remove)
      devname=$3
      unlink_siliconmotion_symlink "$root" "$devname"
      ;;
    START)
      start_service
      ;;
  esac
}

main "$@"