[PATCH 5/6] alsa: create ucm profiles

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

 



Hi David,

On Wed, Apr 6, 2011 at 1:41 AM, David Henningsson
<david.henningsson at canonical.com> wrote:
> On 2011-04-05 22:34, Margarita Olaya wrote:
>>
>> +static pa_hook_result_t jack_insert_new_hook_callback(pa_core *c,
>> struct userdata *u) {
>> + ? ?struct pa_alsa_ucm_config *ucm =&u->ucm;
>> + ? ?struct profile_data *d;
>> + ? ?char *device_name;
>> +
>> + ? ?pa_assert(u);
>> +
>> + ? ?d = PA_CARD_PROFILE_DATA(u->card->active_profile);
>> +
>> + ? ?pa_log_debug("Jack insert new hook callback");
>> +
>> + ? ?device_name = strchr(d->profile->name, ':') + 2;
>> + ? ?if (!device_name) {
>> + ? ? ? ?pa_log("no device found for %s", d->profile->name);
>> + ? ? ? ?return PA_HOOK_CANCEL;
>> + ? ?}
>> +
>> + ? ?if (strcmp(device_name, "Headset.0") == 0)
>> + ? ? ? ?return PA_HOOK_OK;
>> +
>> + ? ?/* Set headset.0 device per default */
>> + ? ?if (snd_use_case_set(ucm->ucm_mgr, "_enadev", "Headset.0")< ?0) {
>> + ? ? ? ?pa_log("failed to set device Headset.0");
>> + ? ? ? ?return PA_HOOK_CANCEL;
>> + ? ?}
>> +
>> + ? ?return PA_HOOK_OK;
>> +}
>
> About this function:
>
> 1) pa_hook_cb_t defines three pointers as input, but this one only takes
> two. Is that really working on all platforms?
>
This is a mistake in this version, It is fixed now.

> 2) There is no matching against what card sent the event, is that irrelevant
> for UCM?
>
The UCM data is store per sound, I'm looking into a way of passing the
card name to the hook and compare it with the one passed in the
userdata.

> 3) Is "Headset.0" a reserved identifier in UCM, or is this unfinished test
> code? What if there isn't a headset, just a separate external mic, or
> external speakers connected to line out?
>
It depends on the driver to report here what was inserted or removed.

>> +
>> +static pa_hook_result_t jack_remove_new_hook_callback(pa_core *c,
>> struct userdata *u) {
>> + ? ?struct profile_data *d;
>> + ? ?struct pa_alsa_ucm_config *ucm =&u->ucm;
>> + ? ?char *device_name;
>> +
>> + ? ?pa_assert(u);
>> +
>> + ? ?d = PA_CARD_PROFILE_DATA(u->card->active_profile);
>> +
>> + ? ?pa_log_debug("Jack removed new hook callback");
>> +
>> + ? ?device_name = strchr(d->profile->name, ':') + 2;
>> + ? ?if(!device_name) {
>> + ? ? ? ?pa_log("no device found for %s", d->profile->name);
>> + ? ? ? ?return PA_HOOK_CANCEL;
>> + ? ?}
>> +
>> + ? ?/* Set current profile device */
>> + ? ?if (snd_use_case_set(ucm->ucm_mgr, "_enadev", "Headset.0")< ?0) {
>> + ? ? ? ?pa_log("failed to set device Headset.0");
>> + ? ? ? ?return PA_HOOK_CANCEL;
>> + ? ?}
>> +
>> + ? ?return PA_HOOK_OK;
>> +}
>
> Ehm, seems like you set it to the Headset device both on plug and unplug...?
>
hmm, here we will switch to "device_name" gotten from the current
profile, in case of failure the device will be disabled.

I will post the changes soon.

Regards,
Margarita

> --
> David Henningsson, Canonical Ltd.
> http://launchpad.net/~diwic
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at mail.0pointer.de
> https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
>



[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux