summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2009-06-06 23:32:38 +0200
committerLennart Poettering <lennart@poettering.net>2009-06-06 23:32:38 +0200
commitc28a7f656bc38ac7dc30d508ac2396d9b2cc5a4c (patch)
tree352af384f271d4f8bedd03f476b2fc1eb8dac994
parent680a3cf81fe52bf300a21cb87f4fbf70a31143d7 (diff)
sound: generate ID_PATH and ID_ID propertiesHEADmaster
This is useful for applications such as PulseAudio to identify and recognize sound cards by their id (serial) or their path.
-rw-r--r--rules.d/78-sound-card.rules25
1 files changed, 16 insertions, 9 deletions
diff --git a/rules.d/78-sound-card.rules b/rules.d/78-sound-card.rules
index 52b6174..39169ae 100644
--- a/rules.d/78-sound-card.rules
+++ b/rules.d/78-sound-card.rules
@@ -40,32 +40,39 @@ ENV{SOUND_INITIALIZED}="1"
SUBSYSTEMS=="usb", ENV{ID_MODEL}=="", IMPORT{program}="usb_id --export %p"
SUBSYSTEMS=="usb", ENV{ID_VENDOR_FROM_DATABASE}=="", IMPORT{program}="usb-db %p"
SUBSYSTEMS=="usb", ATTRS{idVendor}!="", ATTRS{idProduct}!="", ENV{ID_VENDOR_ID}="$attr{idVendor}", ENV{ID_MODEL_ID}="$attr{idProduct}"
+SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}!="", ENV{ID_IFACE}="$attr{bInterfaceNumber}"
SUBSYSTEMS=="usb", GOTO="skip_pci"
SUBSYSTEMS=="pci", ENV{ID_VENDOR_FROM_DATABASE}=="", IMPORT{program}="pci-db %p"
SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}"
-# The values used here for $SOUND_FORM_FACTOR should be kept in sync
-# with those defined for PulseAudio's src/pulse/proplist.h
-# PA_PROP_DEVICE_FORM_FACTOR property.
+LABEL="skip_pci"
+
+ENV{ID_SERIAL}=="?*", ENV{ID_IFACE}=="?*", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_IFACE}"
+ENV{ID_SERIAL}=="?*", ENV{ID_IFACE}=="", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}"
+
+ENV{ID_PATH}=="", IMPORT{program}="/usr/bin/env -i /lib/udev/path_id %p/controlC%n"
+
+# The values used here for $SOUND_FORM_FACTOR should be kept in sync with those
+# defined for PulseAudio's src/pulse/proplist.h PA_PROP_DEVICE_FORM_FACTOR
+# property.
+
+# If the first PCM device of this card has the pcm class 'modem', then the card is a modem
+ATTR{pcmC%nD0p/pcm_class}=="modem", ENV{SOUND_FORM_FACTOR}="modem", GOTO="sound_end"
+# Identify cards on the internal PCI bus as internal
SUBSYSTEMS=="pci", DEVPATH=="*/0000:00:??.?/sound/*", ENV{SOUND_FORM_FACTOR}="internal", GOTO="sound_end"
# Recognize good old WinTV cards as TV cards
SUBSYSTEMS=="pci", DRIVERS=="Bt87x", ENV{SOUND_FORM_FACTOR}="tv", GOTO="sound_end"
-LABEL="skip_pci"
-
# Hmm, do we really want this database here?
-
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0471", ATTRS{idProduct}=="0311", ENV{SOUND_FORM_FACTOR}="webcam", GOTO="sound_end"
# Devices that also support Image/Video interfaces are most likely webcams
-
SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACES}=="*:0e????:*", ENV{SOUND_FORM_FACTOR}="webcam", GOTO="sound_end"
-# Yepp, this is ugly:
-
+# Matching on the model strings is a bit ugly, I admit
ENV{ID_MODEL}=="*[Ss]peaker*", ENV{SOUND_FORM_FACTOR}="speaker", GOTO="sound_end"
ENV{ID_MODEL_FROM_DATABASE}=="*[Ss]peaker*", ENV{SOUND_FORM_FACTOR}="speaker", GOTO="sound_end"