Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 593897be authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge " hal: Fix device disable/enable sequence"

parents 356df1fe 7610e635
Loading
Loading
Loading
Loading
+10 −12
Original line number Diff line number Diff line
@@ -439,23 +439,22 @@ static void check_usecases_codec_backend(struct audio_device *adev,
        /* Make sure all the streams are de-routed before disabling the device */
        audio_route_update_mixer(adev->audio_route);

        /* Make sure the previous devices to be disabled first and then enable the
           selected devices */
        list_for_each(node, &adev->usecase_list) {
            usecase = node_to_item(node, struct audio_usecase, list);
            if (switch_device[usecase->id]) {
                disable_snd_device(adev, usecase->out_snd_device, false);
                disable_snd_device(adev, usecase->out_snd_device, true);
            }
        }

        list_for_each(node, &adev->usecase_list) {
            usecase = node_to_item(node, struct audio_usecase, list);
            if (switch_device[usecase->id]) {
                enable_snd_device(adev, snd_device, false);
                enable_snd_device(adev, snd_device, true);
            }
        }

        /* Make sure new snd device is enabled before re-routing the streams */
        audio_route_update_mixer(adev->audio_route);

        /* Re-route all the usecases on the shared backend other than the
           specified usecase to new snd devices */
        list_for_each(node, &adev->usecase_list) {
@@ -509,23 +508,22 @@ static void check_and_route_capture_usecases(struct audio_device *adev,
        /* Make sure all the streams are de-routed before disabling the device */
        audio_route_update_mixer(adev->audio_route);

        /* Make sure the previous devices to be disabled first and then enable the
           selected devices */
        list_for_each(node, &adev->usecase_list) {
            usecase = node_to_item(node, struct audio_usecase, list);
            if (switch_device[usecase->id]) {
                disable_snd_device(adev, usecase->in_snd_device, false);
                disable_snd_device(adev, usecase->in_snd_device, true);
            }
        }

        list_for_each(node, &adev->usecase_list) {
            usecase = node_to_item(node, struct audio_usecase, list);
            if (switch_device[usecase->id]) {
                enable_snd_device(adev, snd_device, false);
                enable_snd_device(adev, snd_device, true);
            }
        }

        /* Make sure new snd device is enabled before re-routing the streams */
        audio_route_update_mixer(adev->audio_route);

        /* Re-route all the usecases on the shared backend other than the
           specified usecase to new snd devices */
        list_for_each(node, &adev->usecase_list) {
@@ -700,12 +698,12 @@ int select_devices(struct audio_device *adev, audio_usecase_t uc_id)
    /* Disable current sound devices */
    if (usecase->out_snd_device != SND_DEVICE_NONE) {
        disable_audio_route(adev, usecase, true);
        disable_snd_device(adev, usecase->out_snd_device, false);
        disable_snd_device(adev, usecase->out_snd_device, true);
    }

    if (usecase->in_snd_device != SND_DEVICE_NONE) {
        disable_audio_route(adev, usecase, true);
        disable_snd_device(adev, usecase->in_snd_device, false);
        disable_snd_device(adev, usecase->in_snd_device, true);
    }

    /* Applicable only on the targets that has external modem.