Hi Mark,
On 9/27/2023 8:02 AM, Mark Brown wrote:
On Thu, Sep 21, 2023 at 02:48:39PM -0700, Wesley Cheng wrote:
Add a kcontrol to the platform sound card to fetch the current offload
status. This can allow for userspace to ensure/check which USB SND
resources are actually busy versus having to attempt opening the USB SND
devices, which will result in an error if offloading is active.
+static int q6usb_prepare(struct snd_pcm_substream *substream,
+ struct snd_soc_dai *dai)
+{
+ struct q6usb_port_data *data = dev_get_drvdata(dai->dev);
+
+ mutex_lock(&data->mutex);
+ data->status[data->sel_card_idx].running = true;
+ mutex_unlock(&data->mutex);
These updates of running should really have a snd_ctl_notify() so that
UIs can know to update when the value changes while they're open.
Sure, me review some of the APIs again and add the notify call where
necessary.
+static int q6usb_mixer_get_offload_status(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ running = q6usb_find_running(data);
+ if (running < 0) {
+ card_idx = -1;
+ pcm_idx = -1;
+ } else {
+ card_idx = running;
+ pcm_idx = data->status[running].pcm_index;
+ }
+
+ ucontrol->value.integer.value[0] = card_idx;
+ ucontrol->value.integer.value[1] = pcm_idx;
This feels a bit messy but I'm not sure what we'd do that's better so
unless someone else has better ideas let's go with this. Possibly we
should standardise this as a new control type for joining cards up so at
least if there's further needs for this we can use the same solution?
I'm all ears for any suggestions from other users :). I think its a bit
difficult to tell since this is the first iteration of adding this
feature. Pierre gave me some great feedback from the
userspace/application level, and tried my best to accommodate for those
requirements since it would be the main entity interacting with these
controls.
Thanks
Wesley Cheng