From: Takashi Iwai <tiwai@suse.de>
To: Sriram Periyasamy <sriramx.periyasamy@intel.com>
Cc: ALSA ML <alsa-devel@alsa-project.org>,
Patches Audio <patches.audio@intel.com>,
Guneshwor Singh <guneshwor.o.singh@intel.com>,
Liam Girdwood <liam.r.girdwood@linux.intel.com>,
Mark Brown <broonie@kernel.org>, Jeeja KP <jeeja.kp@intel.com>,
Sanyog Kale <sanyog.r.kale@intel.com>
Subject: Re: [RESEND][PATCH] ASoC: hdac_hdmi: Program pin-port-mux during jack report event
Date: Wed, 20 Jun 2018 15:01:13 +0200 [thread overview]
Message-ID: <s5ho9g5mx2e.wl-tiwai@suse.de> (raw)
In-Reply-To: <1529492902-6600-1-git-send-email-sriramx.periyasamy@intel.com>
On Wed, 20 Jun 2018 13:08:21 +0200,
Sriram Periyasamy wrote:
>
> During d3/d0 cycle, the connection selection index of all pins points
> to the default value. This needs to be restored to ensure audio is
> restored after d3/d0 cycle.
>
> So store the connection selection index and program it during jack
> report event which gets invoked in cases like d3/d0 cycle, hot plug
> detection when multiple displays are connected.
Hm, I thought *_CONNECT_SEL being cached and restored at resume
already by regmap?
*_DEVICE_SEL is declared as volatile, so you'd need to restore it
manually, yes.
thanks,
Takashi
>
> Signed-off-by: Sriram Periyasamy <sriramx.periyasamy@intel.com>
> Signed-off-by: Sanyog Kale <sanyog.r.kale@intel.com>
> Signed-off-by: Jeeja KP <jeeja.kp@intel.com>
> Signed-off-by: Guneshwor Singh <guneshwor.o.singh@intel.com>
> Acked-by: Vinod Koul <vkoul@kernel.org>
> ---
> sound/soc/codecs/hdac_hdmi.c | 32 ++++++++++++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
>
> diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c
> index 84f7a7a36e4b..7eb5a7138483 100644
> --- a/sound/soc/codecs/hdac_hdmi.c
> +++ b/sound/soc/codecs/hdac_hdmi.c
> @@ -32,6 +32,7 @@
> #include <sound/hda_chmap.h>
> #include "../../hda/local.h"
> #include "hdac_hdmi.h"
> +#include <sound/hda_regmap.h>
>
> #define NAME_SIZE 32
>
> @@ -83,6 +84,7 @@ struct hdac_hdmi_pin {
> struct list_head head;
> hda_nid_t nid;
> bool mst_capable;
> + int conn_index;
> struct hdac_hdmi_port *ports;
> int num_ports;
> struct hdac_ext_device *edev;
> @@ -141,6 +143,9 @@ struct hdac_hdmi_priv {
>
> #define hdev_to_hdmi_priv(_hdev) ((to_ehdac_device(_hdev))->private_data)
>
> +static int hdac_hdmi_port_select_set(struct hdac_ext_device *edev,
> + struct hdac_hdmi_port *port);
> +
> static struct hdac_hdmi_pcm *
> hdac_hdmi_get_pcm_from_cvt(struct hdac_hdmi_priv *hdmi,
> struct hdac_hdmi_cvt *cvt)
> @@ -159,6 +164,7 @@ static void hdac_hdmi_jack_report(struct hdac_hdmi_pcm *pcm,
> struct hdac_hdmi_port *port, bool is_connect)
> {
> struct hdac_ext_device *edev = port->pin->edev;
> + int cmd, err;
>
> if (is_connect)
> snd_soc_dapm_enable_pin(port->dapm, port->jack_pin);
> @@ -166,6 +172,29 @@ static void hdac_hdmi_jack_report(struct hdac_hdmi_pcm *pcm,
> snd_soc_dapm_disable_pin(port->dapm, port->jack_pin);
>
> if (is_connect) {
> + /* set the device if pin is mst_capable */
> + if (hdac_hdmi_port_select_set(edev, port) < 0) {
> + dev_err(&edev->hdev.dev,
> + "port %d device select fail\n", port->id);
> + return;
> + }
> + /*
> + * Restore the connection selection index of the
> + * respective pin.
> + */
> + if (port->pin->conn_index > 0) {
> + cmd = snd_hdac_regmap_encode_verb(port->pin->nid,
> + AC_VERB_SET_CONNECT_SEL);
> + err = snd_hdac_regmap_write_raw(&edev->hdev, cmd,
> + port->pin->conn_index - 1);
> + if (err < 0) {
> + dev_err(&edev->hdev.dev,
> + "pin %d conn select index fail %d\n",
> + port->pin->nid, err);
> + return;
> + }
> + }
> +
> /*
> * Report Jack connect event when a device is connected
> * for the first time where same PCM is attached to multiple
> @@ -903,6 +932,9 @@ static int hdac_hdmi_set_pin_port_mux(struct snd_kcontrol *kcontrol,
> }
> }
>
> + if (ucontrol->value.enumerated.item[0] > 0)
> + port->pin->conn_index = ucontrol->value.enumerated.item[0];
> +
> /*
> * Jack status is not reported during device probe as the
> * PCMs are not registered by then. So report it here.
> --
> 2.7.4
>
next prev parent reply other threads:[~2018-06-20 13:01 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-20 11:08 [RESEND][PATCH] ASoC: hdac_hdmi: Program pin-port-mux during jack report event Sriram Periyasamy
2018-06-20 13:01 ` Takashi Iwai [this message]
2018-06-21 7:54 ` Sriram Periyasamy
2018-06-21 8:28 ` Takashi Iwai
2018-06-21 10:45 ` Sriram Periyasamy
2018-06-21 11:14 ` Takashi Iwai
2018-06-22 5:57 ` Sriram Periyasamy
2018-07-09 12:32 ` Sriram Periyasamy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=s5ho9g5mx2e.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=guneshwor.o.singh@intel.com \
--cc=jeeja.kp@intel.com \
--cc=liam.r.girdwood@linux.intel.com \
--cc=patches.audio@intel.com \
--cc=sanyog.r.kale@intel.com \
--cc=sriramx.periyasamy@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.