ASoC: Intel: use local values for ssp configuration
authorVinod Koul <vinod.koul@intel.com>
Wed, 6 May 2015 16:36:41 +0000 (22:06 +0530)
committerMark Brown <broonie@kernel.org>
Wed, 6 May 2015 18:50:22 +0000 (19:50 +0100)
So right now SSP configuration is statically coded in the driver. While we
would like to keep this configuration intact for the users who are using
these defaults, we need to provide a way for users to program it.
So create a local value in driver structure which is populate with default
value for now

Signed-off-by: Praveen Diwakar <praveen.diwakar@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/atom/sst-atom-controls.c
sound/soc/intel/atom/sst-mfld-platform.h

index 59517b3..93c6c8b 100644 (file)
@@ -793,45 +793,52 @@ static const struct sst_ssp_config sst_ssp_configs = {
        .data_polarity = 1,
 };
 
+void sst_fill_ssp_defaults(struct snd_soc_dai *dai)
+{
+       const struct sst_ssp_config *config;
+       struct sst_data *ctx = snd_soc_dai_get_drvdata(dai);
+
+       config = &sst_ssp_configs;
+
+       ctx->ssp_cmd.selection = config->ssp_id;
+       ctx->ssp_cmd.nb_bits_per_slots = config->bits_per_slot;
+       ctx->ssp_cmd.nb_slots = config->slots;
+       ctx->ssp_cmd.mode = config->ssp_mode | (config->pcm_mode << 1);
+       ctx->ssp_cmd.duplex = config->duplex;
+       ctx->ssp_cmd.active_tx_slot_map = config->active_slot_map;
+       ctx->ssp_cmd.active_rx_slot_map = config->active_slot_map;
+       ctx->ssp_cmd.frame_sync_frequency = config->fs_frequency;
+       ctx->ssp_cmd.frame_sync_polarity = config->frame_sync_polarity;
+       ctx->ssp_cmd.data_polarity = config->data_polarity;
+       ctx->ssp_cmd.frame_sync_width = config->fs_width;
+       ctx->ssp_cmd.ssp_protocol = config->ssp_protocol;
+       ctx->ssp_cmd.start_delay = config->start_delay;
+       ctx->ssp_cmd.reserved1 = ctx->ssp_cmd.reserved2 = 0xFF;
+}
+
 int send_ssp_cmd(struct snd_soc_dai *dai, const char *id, bool enable)
 {
-       struct sst_cmd_sba_hw_set_ssp cmd;
        struct sst_data *drv = snd_soc_dai_get_drvdata(dai);
        const struct sst_ssp_config *config;
 
        dev_info(dai->dev, "Enter: enable=%d port_name=%s\n", enable, id);
 
-       SST_FILL_DEFAULT_DESTINATION(cmd.header.dst);
-       cmd.header.command_id = SBA_HW_SET_SSP;
-       cmd.header.length = sizeof(struct sst_cmd_sba_hw_set_ssp)
+       SST_FILL_DEFAULT_DESTINATION(drv->ssp_cmd.header.dst);
+       drv->ssp_cmd.header.command_id = SBA_HW_SET_SSP;
+       drv->ssp_cmd.header.length = sizeof(struct sst_cmd_sba_hw_set_ssp)
                                - sizeof(struct sst_dsp_header);
 
        config = &sst_ssp_configs;
        dev_dbg(dai->dev, "ssp_id: %u\n", config->ssp_id);
 
        if (enable)
-               cmd.switch_state = SST_SWITCH_ON;
+               drv->ssp_cmd.switch_state = SST_SWITCH_ON;
        else
-               cmd.switch_state = SST_SWITCH_OFF;
-
-       cmd.selection = config->ssp_id;
-       cmd.nb_bits_per_slots = config->bits_per_slot;
-       cmd.nb_slots = config->slots;
-       cmd.mode = config->ssp_mode | (config->pcm_mode << 1);
-       cmd.duplex = config->duplex;
-       cmd.active_tx_slot_map = config->active_slot_map;
-       cmd.active_rx_slot_map = config->active_slot_map;
-       cmd.frame_sync_frequency = config->fs_frequency;
-       cmd.frame_sync_polarity = SSP_FS_ACTIVE_HIGH;
-       cmd.data_polarity = 1;
-       cmd.frame_sync_width = config->fs_width;
-       cmd.ssp_protocol = config->ssp_protocol;
-       cmd.start_delay = config->start_delay;
-       cmd.reserved1 = cmd.reserved2 = 0xFF;
+               drv->ssp_cmd.switch_state = SST_SWITCH_OFF;
 
        return sst_fill_and_send_cmd(drv, SST_IPC_IA_CMD, SST_FLAG_BLOCKED,
-                               SST_TASK_SBA, 0, &cmd,
-                               sizeof(cmd.header) + cmd.header.length);
+                               SST_TASK_SBA, 0, &drv->ssp_cmd,
+                               sizeof(drv->ssp_cmd.header) + drv->ssp_cmd.header.length);
 }
 
 static int sst_set_be_modules(struct snd_soc_dapm_widget *w,
index 9094314..2409b23 100644 (file)
@@ -22,6 +22,7 @@
 #define __SST_PLATFORMDRV_H__
 
 #include "sst-mfld-dsp.h"
+#include "sst-atom-controls.h"
 
 extern struct sst_device *sst;
 
@@ -175,6 +176,7 @@ struct sst_data {
        struct snd_sst_bytes_v2 *byte_stream;
        struct mutex lock;
        struct snd_soc_card *soc_card;
+       struct sst_cmd_sba_hw_set_ssp ssp_cmd;
 };
 int sst_register_dsp(struct sst_device *sst);
 int sst_unregister_dsp(struct sst_device *sst);