diff options
author | Jarkko Nikula <jarkko.nikula@linux.intel.com> | 2014-05-08 09:07:22 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-05-12 17:02:17 -0400 |
commit | 65ee9e8fb654838aa83346728d20b6d7889a7f57 (patch) | |
tree | 78de8455814b0cb38b068558d779c6d17bc2c080 | |
parent | c83649e3cdb6e78cfbc3abda7207ff44ba7bea75 (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.c | 34 |
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: | |||
653 | static int sst_byt_stream_operations(struct sst_byt *byt, int type, | 653 | static 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 */ |
680 | int sst_byt_stream_start(struct sst_byt *byt, struct sst_byt_stream *stream) | 666 | int 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); |