summaryrefslogtreecommitdiffstats
path: root/rules/78-sound-card.rules
diff options
context:
space:
mode:
authorDaniel Drake <drake@endlessm.com>2016-12-15 23:11:11 +0100
committerLennart Poettering <lennart@poettering.net>2016-12-15 23:11:11 +0100
commitd84071d569700547f6283061d5f66b585ec952b3 (patch)
tree6627690215b332bab497f0c9287399684a65c529 /rules/78-sound-card.rules
parentcalendarspec: free memory when parsing fails (#4890) (diff)
downloadsystemd-d84071d569700547f6283061d5f66b585ec952b3.tar.xz
systemd-d84071d569700547f6283061d5f66b585ec952b3.zip
rules: identify internal sound cards on platform bus (#4893)
We have a system which has the HDMI audio capability internally, but pulseaudio is not giving it a very high priority compared to e.g. USB sound cards. The sound device appears on the platform bus and it is not currently tagged with any form factor information. It seems safe to assume that any sound card that is directly on the platform bus is of internal form factor, but we must be careful because udev rules will match all parent devices, not just the immediate parent, and you will frequently encounter setups such as: Platform bus -> USB host controller -> USB sound card In that case, SUBSYSTEMS==platform would match even though we're clearly working with an external USB sound card. In order to detect true platform devices here, we rely on the observation that if any parent devices of the sound card are PCI, USB or firewire devices, then this sound card cannot directly connected to the platform bus. Otherwise, if we find a parent device on the platform bus, we assume this is an internal sound card connected directly to the platform bus.
Diffstat (limited to '')
-rw-r--r--rules/78-sound-card.rules7
1 files changed, 7 insertions, 0 deletions
diff --git a/rules/78-sound-card.rules b/rules/78-sound-card.rules
index 04740e8b97..f2fc277396 100644
--- a/rules/78-sound-card.rules
+++ b/rules/78-sound-card.rules
@@ -48,6 +48,13 @@ SUBSYSTEMS=="firewire", ATTRS{guid}=="?*", \
SUBSYSTEMS=="firewire", GOTO="skip_pci"
SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}"
+SUBSYSTEMS=="pci", GOTO="skip_pci"
+
+# If we reach here, the device nor any of its parents are USB/PCI/firewire bus devices.
+# If we now find a parent that is a platform device, assume that we're working with
+# an internal sound card.
+SUBSYSTEMS=="platform", ENV{SOUND_FORM_FACTOR}="internal", GOTO="sound_end"
+
LABEL="skip_pci"
# Define ID_ID if ID_BUS and ID_SERIAL are set. This will work for both