-ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS!="card*", TEST=="@sbindir@", TEST=="@mydatadir@", GOTO="alsa_restore_go"
+# do not edit this file, it will be overwritten on update
+
+ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS!="card*",@extratest@ GOTO="alsa_restore_go"
GOTO="alsa_restore_end"
+ENV{ALSA_CARD_NUMBER}="$attr{device/number}"
+
+# mark HDA analog card; HDMI/DP card does not have capture devices
+DRIVERS=="snd_hda_intel", TEST=="device/pcmC$env{ALSA_CARD_NUMBER}D0p", RUN+="/bin/sh -c 'echo ALSA_CARD_HDA_ANALOG=$env{ALSA_CARD_NUMBER} >> /run/udev/alsa-hda-analog-card'"
+
+# check for ACP hardware
+TEST=="device/device/acp3x-dmic-capture", GOTO="alsa_hda_analog"
+TEST=="device/device/acp6x-dmic-capture", GOTO="alsa_hda_analog"
+TEST=="device/device/acp63-dmic-capture", GOTO="alsa_hda_analog"
+TEST=="device/device/acp-pdm-dmic", GOTO="alsa_hda_analog"
+GOTO="alsa_restore_std"
+
+LABEL="alsa_hda_analog"
+# restore configuration for profile with combined cards (HDA + digital mic)
+TEST!="/run/udev/alsa-hda-analog-card", GOTO="alsa_restore_std"
+IMPORT{program}="/usr/bin/cat /run/udev/alsa-hda-analog-card"
+ENV{ALSA_CARD_HDA_ANALOG}!="", ENV{ALSA_CARD_NUMBER}="$env{ALSA_CARD_HDA_ANALOG}"
+
LABEL="alsa_restore_go"
-TEST!="@daemonswitch@", RUN+="@sbindir@/alsactl restore $devnode"
-TEST=="@daemonswitch@", RUN+="@sbindir@/alsactl nrestore $devnode"
+TEST!="@daemonswitch@", RUN+="@sbindir@/alsactl@args@ restore $env{ALSA_CARD_NUMBER}"
+TEST=="@daemonswitch@", RUN+="@sbindir@/alsactl@args@ nrestore $env{ALSA_CARD_NUMBER}"
LABEL="alsa_restore_end"
endif
edit = \
+ extratest=$$(echo ' $(ALSACTL_UDEV_EXTRATEST)' | sed -e 's/__/ /g' -e 's/^ $$//'); \
+ args=$$(echo ' $(ALSACTL_UDEV_ARGS)' | sed -e 's/__/ /g' -e 's/^ $$//'); \
$(SED) -r -e 's,@sbindir\@,$(sbindir),g' \
-e 's,@mydatadir\@,$(mydatadir),g' \
-e 's,@daemonswitch\@,$(ALSACTL_DAEMONSWITCH),g' \
-e 's,@asoundrcfile\@,$(ASOUND_STATE_DIR)/asound.state,g' \
+ -e "s;@extratest\@;$${extratest};g" \
+ -e "s;@args\@;$${args};g" \
< $< > $@ || rm $@
alsa-state.service: alsa-state.service.in
[ALSACTL_DAEMONSWITCH="/etc/alsa/state-daemon.conf"])
AC_SUBST(ALSACTL_DAEMONSWITCH)
+AC_ARG_WITH([alsactl-udev-extra-test],
+ AS_HELP_STRING([--with-alsactl-udev-extra-test=TEST], [Extra udev tests]),
+ [ALSACTL_UDEV_EXTRATEST="$withval"],
+ [ALSACTL_UDEV_EXTRATEST="default"])
+if test "$ALSACTL_UDEV_EXTRATEST" = "default"; then
+ ALSACTL_UDEV_EXTRATEST="TEST==\"${sbindir}\", TEST==\"${mydatadir}\","
+fi
+AC_SUBST(ALSACTL_UDEV_EXTRATEST)
+
+AC_ARG_WITH([alsactl-udev-args],
+ AS_HELP_STRING([--with-alsactl-udev-args=ARGS], [Extra alsactl arguments (udev rules)]),
+ [ALSACTL_UDEV_ARGS="$withval"],
+ [ALSACTL_UDEV_ARGS=""])
+AC_SUBST(ALSACTL_UDEV_ARGS)
+
dnl pre-process plugin directory
AC_ARG_WITH(plugindir,
AS_HELP_STRING([--with-plugindir=dir],