stateful reconnect with snd-usb-audio

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi everybody,

I'd like to solicit the ALSA brain trust for tips and opinions on how
one might go about implementing a new feature.  With some (most?) of
the ALSA driver code base, it is possible, or at least someone
intended for it to be possible to leave an MP3 player or such running
across a suspend-to-RAM or suspend-to-disk operation, and have it pick
up exactly where it left off on resume.  To see this in action is just
cool, there's no getting around it.  A notable exception to this  is
the snd-usb-audio driver, under which devices seem to be disconnected
and re-enumerated as entirely new cards, rather than having their
state explicitly backed up and restored with the assumption that the
hardware will be present on resume.

I searched hard and couldn't find any prior efforts to address this
problem, so it seemed worthwhile to ask about.

There are two possibilities that seem promising:

1. Rework snd-usb-audio to support a timely reconnect operation.  If a
card is unplugged and reconnected within some period of time, its
prior state will be restored and it will be reassociated with open
file handles.  Active playback/capture operations may continue without
reopening the device, with only the reconnection/reconfiguration
delay.

2. Support reconnection at the alsa-lib layer.  I couldn't find
anything that does this already.  Somehow all playback/capture file
descriptors would need to be closed on command and
reopened/reconfigured when a replacement device is identified.
Anybody know of an easy way to do this with dmix?  Otherwise it seems
like alsa-lib would be stuck funneling playback through an
aserver/jackd process and that would be undesirable.

Opinions?  Does one seem like it would be more robust, more reusable,
or more work than the other?

As another individual pointed out a few months ago, there are some
other problems with snd-usb-audio similar to those described above.
If a certain usb audio device has open file handles and is
disconnected or the system is suspended,
snd_usb_audio_disconnect()->snd_card_free() will block in the khubd
context while ALSA waits for the file handles to be closed, preventing
khubd from doing anything else useful like processing probe requests.
Using snd_card_free_in_thread() can be just as bad as it uses
schedule_work() and blocks one of the "events" threads.  A hang in
either context can cause problems for a resume-from-RAM operation.

Thanks.
-Sam Revitch


_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux