On Fri, Jun 20, 2014 at 10:22:30AM +0200, Lars-Peter Clausen wrote:
On 06/13/2014 02:33 PM, Vinod Koul wrote:
+unsigned int sst_soc_read(struct snd_soc_platform *platform,
unsigned int reg)
+{
- struct sst_data *drv = snd_soc_platform_get_drvdata(platform);
- pr_debug("%s: reg[%d] = %#x\n", __func__, reg, drv->widget[reg]);
- BUG_ON(reg > (SST_NUM_WIDGETS - 1));
- return drv->widget[reg];
+}
+int sst_soc_write(struct snd_soc_platform *platform,
unsigned int reg, unsigned int val)
+{
- struct sst_data *drv = snd_soc_platform_get_drvdata(platform);
- pr_debug("%s: reg[%d] = %#x\n", __func__, reg, val);
- BUG_ON(reg > (SST_NUM_WIDGETS - 1));
- drv->widget[reg] = val;
- return 0;
+}
These seem to be purely virtual registers, what is this about? The DAPM core is able to handle widgets and controls without any register backing just fine. There is no need to emulate virtual registers.
But we need to store the mixer configuration for sending IPCs to DSP. So virtual register file is very much required
+unsigned int sst_reg_read(struct sst_data *drv, unsigned int reg,
unsigned int shift, unsigned int max)
+{
[...]
+}
+unsigned int sst_reg_write(struct sst_data *drv, unsigned int reg,
unsigned int shift, unsigned int max, unsigned int val)
+{
[..]
+}
How are these functions different from snd_soc_platform_{read,update_bits}()?
Should be possible, I will check!