diff options
author | Daniel Drake <drake@endlessm.com> | 2016-12-15 23:11:11 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2016-12-15 23:11:11 +0100 |
commit | d84071d569700547f6283061d5f66b585ec952b3 (patch) | |
tree | 6627690215b332bab497f0c9287399684a65c529 /rules/78-sound-card.rules | |
parent | calendarspec: free memory when parsing fails (#4890) (diff) | |
download | systemd-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.rules | 7 |
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 |