ASoC: Intel: Add check_dsp_lp_on callback on IPC
Some controllers support power modes which can't communicate using IPC. So add a callback to check and wake DSP before sending IPC and then put to sleep if it is in these power modes. Signed-off-by: Jayachandran B <jayachandran.b@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
6a7f5e4112
Коммит
f999d1fd69
|
@ -190,8 +190,25 @@ static void ipc_tx_msgs(struct kthread_work *work)
|
|||
int sst_ipc_tx_message_wait(struct sst_generic_ipc *ipc, u64 header,
|
||||
void *tx_data, size_t tx_bytes, void *rx_data, size_t rx_bytes)
|
||||
{
|
||||
return ipc_tx_message(ipc, header, tx_data, tx_bytes,
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* DSP maybe in lower power active state, so
|
||||
* check if the DSP supports DSP lp On method
|
||||
* if so invoke that before sending IPC
|
||||
*/
|
||||
if (ipc->ops.check_dsp_lp_on)
|
||||
if (ipc->ops.check_dsp_lp_on(ipc->dsp, true))
|
||||
return -EIO;
|
||||
|
||||
ret = ipc_tx_message(ipc, header, tx_data, tx_bytes,
|
||||
rx_data, rx_bytes, 1);
|
||||
|
||||
if (ipc->ops.check_dsp_lp_on)
|
||||
if (ipc->ops.check_dsp_lp_on(ipc->dsp, false))
|
||||
return -EIO;
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sst_ipc_tx_message_wait);
|
||||
|
||||
|
|
|
@ -52,6 +52,7 @@ struct sst_plat_ipc_ops {
|
|||
void (*tx_data_copy)(struct ipc_message *, char *, size_t);
|
||||
u64 (*reply_msg_match)(u64 header, u64 *mask);
|
||||
bool (*is_dsp_busy)(struct sst_dsp *dsp);
|
||||
int (*check_dsp_lp_on)(struct sst_dsp *dsp, bool state);
|
||||
};
|
||||
|
||||
/* SST generic IPC data */
|
||||
|
|
Загрузка…
Ссылка в новой задаче