Submit
Path:
~
/
/
usr
/
lib
/
udev
/
rules.d
/
File Content:
78-sound-card.rules
# do not edit this file, it will be overwritten on update SUBSYSTEM!="sound", GOTO="sound_end" ACTION=="add|change", KERNEL=="controlC*", ATTR{../uevent}="change" ACTION!="change", GOTO="sound_end" # Ok, we probably need a little explanation here for what the two lines above # are good for. # # The story goes like this: when ALSA registers a new sound card it emits a # series of 'add' events to userspace, for the main card device and for all the # child device nodes that belong to it. udev relays those to applications, # however only maintains the order between father and child, but not between # the siblings. The control device node creation can be used as synchronization # point. All other devices that belong to a card are created in the kernel # before it. However unfortunately due to the fact that siblings are forwarded # out of order by udev this fact is lost to applications. # # OTOH before an application can open a device it needs to make sure that all # its device nodes are completely created and set up. # # As a workaround for this issue we have added the udev rule above which will # generate a 'change' event on the main card device from the 'add' event of the # card's control device. Due to the ordering semantics of udev this event will # only be relayed after all child devices have finished processing properly. # When an application needs to listen for appearing devices it can hence look # for 'change' events only, and ignore the actual 'add' events. # # When the application is initialized at the same time as a device is plugged # in it may need to figure out if the 'change' event has already been triggered # or not for a card. To find that out we store the flag environment variable # SOUND_INITIALIZED on the device which simply tells us if the card 'change' # event has already been processed. KERNEL!="card*", GOTO="sound_end" ENV{SOUND_INITIALIZED}="1" IMPORT{builtin}="hwdb" SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" SUBSYSTEMS=="usb", GOTO="skip_pci" SUBSYSTEMS=="firewire", ATTRS{guid}=="?*", \ ENV{ID_BUS}="firewire", ENV{ID_SERIAL}="$attr{guid}", ENV{ID_SERIAL_SHORT}="$attr{guid}", \ ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{model}", \ ENV{ID_VENDOR}="$attr{vendor_name}", ENV{ID_MODEL}="$attr{model_name}" 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 # USB and firewire. ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="?*", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_USB_INTERFACE_NUM}" ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}" IMPORT{builtin}="path_id" # The values used here for $SOUND_FORM_FACTOR and $SOUND_CLASS should be kept # in sync with those defined for PulseAudio's src/pulse/proplist.h # PA_PROP_DEVICE_FORM_FACTOR, PA_PROP_DEVICE_CLASS properties. # 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_CLASS}="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" # 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" # 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" ENV{ID_MODEL}=="*[Hh]eadphone*", ENV{SOUND_FORM_FACTOR}="headphone", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]eadphone*", ENV{SOUND_FORM_FACTOR}="headphone", GOTO="sound_end" ENV{ID_MODEL}=="*[Hh]eadset*", ENV{SOUND_FORM_FACTOR}="headset", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]eadset*", ENV{SOUND_FORM_FACTOR}="headset", GOTO="sound_end" ENV{ID_MODEL}=="*[Hh]andset*", ENV{SOUND_FORM_FACTOR}="handset", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]andset*", ENV{SOUND_FORM_FACTOR}="handset", GOTO="sound_end" ENV{ID_MODEL}=="*[Mm]icrophone*", ENV{SOUND_FORM_FACTOR}="microphone", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Mm]icrophone*", ENV{SOUND_FORM_FACTOR}="microphone", GOTO="sound_end" LABEL="sound_end"
Submit
FILE
FOLDER
INFO
Name
Size
Permission
Action
01-md-raid-creating.rules
321 bytes
0644
40-usb_modeswitch.rules
42861 bytes
0644
40-vm-hotadd.rules
655 bytes
0644
50-apport.rules
165 bytes
0644
50-firmware.rules
210 bytes
0644
50-udev-default.rules
4846 bytes
0644
55-dm.rules
7274 bytes
0644
55-scsi-sg3_id.rules
6664 bytes
0644
56-dm-mpath.rules
4560 bytes
0644
56-dm-parts.rules
1442 bytes
0644
56-lvm.rules
2420 bytes
0644
58-scsi-sg3_symlink.rules
2863 bytes
0644
60-autosuspend.rules
419 bytes
0644
60-block.rules
703 bytes
0644
60-cdrom_id.rules
1071 bytes
0644
60-drm.rules
413 bytes
0644
60-evdev.rules
990 bytes
0644
60-fido-id.rules
491 bytes
0644
60-input-id.rules
282 bytes
0644
60-multipath.rules
3863 bytes
0644
60-open-vm-tools.rules
250 bytes
0644
60-persistent-alsa.rules
616 bytes
0644
60-persistent-input.rules
2719 bytes
0644
60-persistent-storage-dm.rules
1794 bytes
0644
60-persistent-storage-tape.rules
2135 bytes
0644
60-persistent-storage.rules
9145 bytes
0644
60-persistent-v4l.rules
769 bytes
0644
60-sensor.rules
736 bytes
0644
60-serial.rules
1190 bytes
0644
60-tpm-udev.rules
243 bytes
0644
61-persistent-storage-android.rules
455 bytes
0644
63-md-raid-arrays.rules
2452 bytes
0644
64-btrfs-dm.rules
387 bytes
0644
64-btrfs-zoned.rules
346 bytes
0644
64-btrfs.rules
612 bytes
0644
64-md-raid-assembly.rules
1462 bytes
0644
66-azure-ephemeral.rules
1951 bytes
0644
68-del-part-nodes.rules
1141 bytes
0644
69-bcache.rules
1044 bytes
0644
69-lvm-metad.rules
5813 bytes
0644
69-md-clustered-confirm-device.rules
846 bytes
0644
70-iscsi-network-interface.rules
226 bytes
0644
70-joystick.rules
432 bytes
0644
70-memory.rules
184 bytes
0644
70-mouse.rules
734 bytes
0644
70-open-iscsi.rules
253 bytes
0644
70-power-switch.rules
576 bytes
0644
70-touchpad.rules
473 bytes
0644
70-uaccess.rules
2676 bytes
0644
71-power-switch-proliant.rules
461 bytes
0644
71-seat.rules
3810 bytes
0644
73-seat-late.rules
643 bytes
0644
73-special-net-names.rules
969 bytes
0644
75-net-description.rules
452 bytes
0644
75-probe_mtd.rules
174 bytes
0644
78-graphics-card.rules
965 bytes
0644
78-sound-card.rules
4816 bytes
0644
80-debian-compat.rules
594 bytes
0644
80-drivers.rules
617 bytes
0644
80-net-setup-link.rules
295 bytes
0644
81-net-dhcp.rules
528 bytes
0644
85-hdparm.rules
82 bytes
0644
90-bolt.rules
359 bytes
0644
90-console-setup.rules
265 bytes
0644
95-dm-notify.rules
479 bytes
0644
95-kpartx.rules
1401 bytes
0644
96-e2scrub.rules
171 bytes
0644
99-lxd-agent.rules
141 bytes
0644
99-systemd.rules
4600 bytes
0644
99-vmware-scsi-udev.rules
433 bytes
0644
N4ST4R_ID | Naxtarrr