aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarkko Nikula <jarkko.nikula@linux.intel.com>2014-05-08 09:07:22 -0400
committerMark Brown <broonie@linaro.org>2014-05-12 17:02:17 -0400
commit65ee9e8fb654838aa83346728d20b6d7889a7f57 (patch)
tree78de8455814b0cb38b068558d779c6d17bc2c080
parentc83649e3cdb6e78cfbc3abda7207ff44ba7bea75 (diff)
ASoC: Intel: Simplify Baytrail stream control IPC construction
Baytrail ADSP stream IPC simplifies a little by moving IPC_IA_START_STREAM construction and sending directly into sst_byt_stream_start() from sst_byt_stream_operations(). This is because IPC_IA_START_STREAM is only stream IPC with extra message data so this move saves a few code lines. Main motivation for this is to prepare for passing stream start position to sst_byt_stream_start() which will be needed in resume code. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--sound/soc/intel/sst-baytrail-ipc.c34
1 files changed, 15 insertions, 19 deletions
diff --git a/sound/soc/intel/sst-baytrail-ipc.c b/sound/soc/intel/sst-baytrail-ipc.c
index d0eaeee21be4..2e5095eeea3e 100644
--- a/sound/soc/intel/sst-baytrail-ipc.c
+++ b/sound/soc/intel/sst-baytrail-ipc.c
@@ -653,36 +653,32 @@ out:
653static int sst_byt_stream_operations(struct sst_byt *byt, int type, 653static int sst_byt_stream_operations(struct sst_byt *byt, int type,
654 int stream_id, int wait) 654 int stream_id, int wait)
655{ 655{
656 struct sst_byt_start_stream_params start_stream;
657 u64 header; 656 u64 header;
658 void *tx_msg = NULL;
659 size_t size = 0;
660
661 if (type != IPC_IA_START_STREAM) {
662 header = sst_byt_header(type, 0, false, stream_id);
663 } else {
664 start_stream.byte_offset = 0;
665 header = sst_byt_header(IPC_IA_START_STREAM,
666 sizeof(start_stream) + sizeof(u32),
667 true, stream_id);
668 tx_msg = &start_stream;
669 size = sizeof(start_stream);
670 }
671 657
658 header = sst_byt_header(type, 0, false, stream_id);
672 if (wait) 659 if (wait)
673 return sst_byt_ipc_tx_msg_wait(byt, header, 660 return sst_byt_ipc_tx_msg_wait(byt, header, NULL, 0, NULL, 0);
674 tx_msg, size, NULL, 0);
675 else 661 else
676 return sst_byt_ipc_tx_msg_nowait(byt, header, tx_msg, size); 662 return sst_byt_ipc_tx_msg_nowait(byt, header, NULL, 0);
677} 663}
678 664
679/* stream ALSA trigger operations */ 665/* stream ALSA trigger operations */
680int sst_byt_stream_start(struct sst_byt *byt, struct sst_byt_stream *stream) 666int sst_byt_stream_start(struct sst_byt *byt, struct sst_byt_stream *stream)
681{ 667{
668 struct sst_byt_start_stream_params start_stream;
669 void *tx_msg;
670 size_t size;
671 u64 header;
682 int ret; 672 int ret;
683 673
684 ret = sst_byt_stream_operations(byt, IPC_IA_START_STREAM, 674 start_stream.byte_offset = 0;
685 stream->str_id, 0); 675 header = sst_byt_header(IPC_IA_START_STREAM,
676 sizeof(start_stream) + sizeof(u32),
677 true, stream->str_id);
678 tx_msg = &start_stream;
679 size = sizeof(start_stream);
680
681 ret = sst_byt_ipc_tx_msg_nowait(byt, header, tx_msg, size);
686 if (ret < 0) 682 if (ret < 0)
687 dev_err(byt->dev, "ipc: error failed to start stream %d\n", 683 dev_err(byt->dev, "ipc: error failed to start stream %d\n",
688 stream->str_id); 684 stream->str_id);