Commit 721c3e36 authored by Dharageswari.R's avatar Dharageswari.R Committed by Mark Brown

ASoC: Intel: Skylake: Use CGCTL.MISCBDCGE for Phrase detection notification

Per HW recommendation, SW shall clear the CGCTL.MISCBDCGE and set
it back once data is transferred. So clear this when we get the
IPC and track using a driver flag, and set back on closure
Signed-off-by: default avatarDharageswari.R <dharageswari.r@intel.com>
Signed-off-by: default avatarJayachandran B <jayachandran.b@intel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 0c8ba9d2
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
#include <sound/soc.h> #include <sound/soc.h>
#include "skl.h" #include "skl.h"
#include "skl-topology.h" #include "skl-topology.h"
#include "skl-sst-dsp.h"
#include "skl-sst-ipc.h"
#define HDA_MONO 1 #define HDA_MONO 1
#define HDA_STEREO 2 #define HDA_STEREO 2
...@@ -272,6 +274,7 @@ static void skl_pcm_close(struct snd_pcm_substream *substream, ...@@ -272,6 +274,7 @@ static void skl_pcm_close(struct snd_pcm_substream *substream,
struct hdac_ext_stream *stream = get_hdac_ext_stream(substream); struct hdac_ext_stream *stream = get_hdac_ext_stream(substream);
struct hdac_ext_bus *ebus = dev_get_drvdata(dai->dev); struct hdac_ext_bus *ebus = dev_get_drvdata(dai->dev);
struct skl_dma_params *dma_params = NULL; struct skl_dma_params *dma_params = NULL;
struct skl *skl = ebus_to_skl(ebus);
dev_dbg(dai->dev, "%s: %s\n", __func__, dai->name); dev_dbg(dai->dev, "%s: %s\n", __func__, dai->name);
...@@ -285,6 +288,16 @@ static void skl_pcm_close(struct snd_pcm_substream *substream, ...@@ -285,6 +288,16 @@ static void skl_pcm_close(struct snd_pcm_substream *substream,
snd_soc_dai_set_dma_data(dai, substream, NULL); snd_soc_dai_set_dma_data(dai, substream, NULL);
skl_set_suspend_active(substream, dai, false); skl_set_suspend_active(substream, dai, false);
/*
* check if close is for "Reference Pin" and set back the
* CGCTL.MISCBDCGE if disabled by driver
*/
if (!strncmp(dai->name, "Reference Pin", 13) &&
skl->skl_sst->miscbdcg_disabled) {
skl->skl_sst->enable_miscbdcge(dai->dev, true);
skl->skl_sst->miscbdcg_disabled = false;
}
kfree(dma_params); kfree(dma_params);
} }
......
...@@ -16,8 +16,10 @@ ...@@ -16,8 +16,10 @@
#include "../common/sst-dsp.h" #include "../common/sst-dsp.h"
#include "../common/sst-dsp-priv.h" #include "../common/sst-dsp-priv.h"
#include "skl.h"
#include "skl-sst-dsp.h" #include "skl-sst-dsp.h"
#include "skl-sst-ipc.h" #include "skl-sst-ipc.h"
#include "sound/hdaudio_ext.h"
#define IPC_IXC_STATUS_BITS 24 #define IPC_IXC_STATUS_BITS 24
...@@ -322,6 +324,19 @@ static int skl_ipc_process_notification(struct sst_generic_ipc *ipc, ...@@ -322,6 +324,19 @@ static int skl_ipc_process_notification(struct sst_generic_ipc *ipc,
wake_up(&skl->boot_wait); wake_up(&skl->boot_wait);
break; break;
case IPC_GLB_NOTIFY_PHRASE_DETECTED:
dev_dbg(ipc->dev, "***** Phrase Detected **********\n");
/*
* Per HW recomendation, After phrase detection,
* clear the CGCTL.MISCBDCGE.
*
* This will be set back on stream closure
*/
skl->enable_miscbdcge(ipc->dev, false);
skl->miscbdcg_disabled = true;
break;
default: default:
dev_err(ipc->dev, "ipc: Unhandled error msg=%x", dev_err(ipc->dev, "ipc: Unhandled error msg=%x",
header.primary); header.primary);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment