lkml.org 
[lkml]   [2023]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v8 31/34] ASoC: qcom: qdsp6: Add headphone jack for offload connection status
    Date
    The headphone jack framework has a well defined infrastructure for
    notifying userspace entities through input devices. Expose a jack device
    that carries information about if an offload capable device is connected.
    Applications can further identify specific offloading information through
    other SND kcontrols.

    Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
    ---
    sound/soc/qcom/qdsp6/q6usb.c | 14 ++++++++++++++
    1 file changed, 14 insertions(+)

    diff --git a/sound/soc/qcom/qdsp6/q6usb.c b/sound/soc/qcom/qdsp6/q6usb.c
    index d2f60ce66cf3..9fa6c4016222 100644
    --- a/sound/soc/qcom/qdsp6/q6usb.c
    +++ b/sound/soc/qcom/qdsp6/q6usb.c
    @@ -20,6 +20,7 @@
    #include <sound/pcm_params.h>
    #include <sound/asound.h>
    #include <sound/q6usboffload.h>
    +#include <sound/jack.h>

    #include "q6dsp-lpass-ports.h"
    #include "q6afe.h"
    @@ -37,6 +38,7 @@ struct q6usb_status {
    struct q6usb_port_data {
    struct q6afe_usb_cfg usb_cfg;
    struct snd_soc_usb *usb;
    + struct snd_soc_jack hs_jack;
    struct q6usb_offload priv;
    struct mutex mutex;
    unsigned long available_card_slot;
    @@ -279,6 +281,7 @@ static const struct snd_kcontrol_new q6usb_offload_control = {
    /* Build a mixer control for a UAC connector control (jack-detect) */
    static void q6usb_connector_control_init(struct snd_soc_component *component)
    {
    + struct q6usb_port_data *data = dev_get_drvdata(component->dev);
    int ret;

    ret = snd_ctl_add(component->card->snd_card,
    @@ -290,6 +293,11 @@ static void q6usb_connector_control_init(struct snd_soc_component *component)
    snd_ctl_new1(&q6usb_offload_dev_ctrl, component));
    if (ret < 0)
    return;
    +
    + ret = snd_soc_card_jack_new(component->card, "USB offload",
    + SND_JACK_HEADSET, &data->hs_jack);
    + if (ret)
    + return;
    }

    static int q6usb_audio_ports_of_xlate_dai_name(struct snd_soc_component *component,
    @@ -323,6 +331,9 @@ static int q6usb_alsa_connection_cb(struct snd_soc_usb *usb,

    mutex_lock(&data->mutex);
    if (connected) {
    + if (!data->available_card_slot)
    + snd_jack_report(data->hs_jack.jack, 1);
    +
    /*
    * Update the latest USB headset plugged in, if session is
    * idle.
    @@ -338,6 +349,9 @@ static int q6usb_alsa_connection_cb(struct snd_soc_usb *usb,
    clear_bit(sdev->card_idx, &data->available_card_slot);
    data->status[sdev->card_idx].num_pcm = 0;
    data->status[sdev->card_idx].chip_index = 0;
    +
    + if (!data->available_card_slot)
    + snd_jack_report(data->hs_jack.jack, 0);
    }
    mutex_unlock(&data->mutex);

    \
     
     \ /
      Last update: 2023-10-11 02:25    [W:4.182 / U:0.556 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site