Add alsa-card-wait@.service to handle cards in waiting state.
Update udev rules to use --export and trigger the wait service
when ALSA_CARD_STATE=waiting. Service runs "alsactl wrestore"
for deferred card initialization.
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
ENV{ALSA_CARD_HDA_ANALOG}!="", ENV{ALSA_CARD_NUMBER}="$env{ALSA_CARD_HDA_ANALOG}"
LABEL="alsa_restore_std"
-TEST!="@daemonswitch@", RUN+="@sbindir@/alsactl@args@ restore $env{ALSA_CARD_NUMBER}"
-TEST=="@daemonswitch@", RUN+="@sbindir@/alsactl@args@ nrestore $env{ALSA_CARD_NUMBER}"
+TEST!="@daemonswitch@", IMPORT{program}="@sbindir@/alsactl@args@ --export restore $env{ALSA_CARD_NUMBER}"
+TEST=="@daemonswitch@", IMPORT{program}="@sbindir@/alsactl@args@ --export nrestore $env{ALSA_CARD_NUMBER}"
+ENV{ALSA_CARD_STATE}=="waiting", ENV{SYSTEMD_WANTS}="alsa-card-wait@$env{ALSA_CARD_NUMBER}.service"
LABEL="alsa_restore_end"
systemdsystemunit_DATA = \
alsa-state.service \
- alsa-restore.service
+ alsa-restore.service \
+ alsa-card-wait@.service.in
install-data-hook:
$(MKDIR_P) -m 0755 \
alsa-restore.service: alsa-restore.service.in
$(edit)
+alsa-card-wait@.service: alsa-card-wait@.service.in
+ $(edit)
+
90-alsa-restore.rules: 90-alsa-restore.rules.in
$(edit)
CLEANFILES = \
alsa-state.service \
alsa-restore.service \
+ alsa-card-wait@.service \
90-alsa-restore.rules
%.7: %.xml
--- /dev/null
+#
+# ALSA card initialization handler for cards in waiting state
+# This service is triggered by udev when ALSA_CARD_STATE=waiting
+#
+
+[Unit]
+Description=ALSA Card Initialization for card %I
+
+[Service]
+Type=oneshot
+RemainAfterExit=no
+ExecStart=@sbindir@/alsactl@args@ wrestore %i