core: make detach non-destructive
This commit is contained in:
parent
617a1d844f
commit
16c74879f2
@ -13,21 +13,36 @@ find_udc() {
|
|||||||
ls /sys/class/udc 2>/dev/null | head -n1 || true
|
ls /sys/class/udc 2>/dev/null | head -n1 || true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
udc_state() {
|
||||||
|
local udc="$1"
|
||||||
|
if [[ -z $udc ]]; then
|
||||||
|
echo "unknown"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
cat "/sys/class/udc/$udc/state" 2>/dev/null || echo "unknown"
|
||||||
|
}
|
||||||
|
|
||||||
detach_gadget() {
|
detach_gadget() {
|
||||||
local udc=""
|
local udc=""
|
||||||
udc="$(find_udc)"
|
udc="$(find_udc)"
|
||||||
|
local state
|
||||||
|
state="$(udc_state "$udc")"
|
||||||
|
case "$state" in
|
||||||
|
configured|addressed|default|suspended)
|
||||||
|
log "detach skipped (state=$state)"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
if [[ -n $udc && -w /sys/class/udc/$udc/soft_connect ]]; then
|
if [[ -n $udc && -w /sys/class/udc/$udc/soft_connect ]]; then
|
||||||
echo 0 >"/sys/class/udc/$udc/soft_connect" 2>/dev/null || true
|
echo 0 >"/sys/class/udc/$udc/soft_connect" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
if [[ -e $G/UDC ]]; then
|
if [[ -n ${LESAVKA_DETACH_CLEAR_UDC:-} && -e $G/UDC ]]; then
|
||||||
echo "" >"$G/UDC" 2>/dev/null || true
|
echo "" >"$G/UDC" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
if [[ -n $udc && -f /sys/class/udc/$udc/state ]]; then
|
if [[ -n $udc ]]; then
|
||||||
local state
|
|
||||||
state="$(cat "/sys/class/udc/$udc/state" 2>/dev/null || true)"
|
|
||||||
log "detached (state=${state:-unknown})"
|
log "detached (state=${state:-unknown})"
|
||||||
else
|
else
|
||||||
log "detached (no UDC state)"
|
log "detached (no UDC)"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,7 +57,10 @@ attach_gadget() {
|
|||||||
log "UDC not found; need full setup"
|
log "UDC not found; need full setup"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if [[ -e $G/UDC ]]; then
|
if [[ -n $udc && -w /sys/class/udc/$udc/soft_connect ]]; then
|
||||||
|
echo 1 >"/sys/class/udc/$udc/soft_connect" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
if [[ -n ${LESAVKA_ATTACH_WRITE_UDC:-} && -e $G/UDC ]]; then
|
||||||
echo "$udc" >"$G/UDC" 2>/dev/null || true
|
echo "$udc" >"$G/UDC" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
log "attached to $udc"
|
log "attached to $udc"
|
||||||
@ -54,13 +72,17 @@ case "${1:-}" in
|
|||||||
detach_gadget
|
detach_gadget
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
--detach-hard)
|
||||||
|
LESAVKA_DETACH_CLEAR_UDC=1 detach_gadget
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
--attach)
|
--attach)
|
||||||
if attach_gadget; then
|
if attach_gadget; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
--help|-h)
|
--help|-h)
|
||||||
echo "Usage: $0 [--attach|--detach]"
|
echo "Usage: $0 [--attach|--detach|--detach-hard]"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user