On Fri, Jun 20, 2014 at 02:14:18PM +0800, Sean Cross wrote:
- if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
reg = ES8328_DACCONTROL2;
- else if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
reg = ES8328_ADCCONTROL5;
- else
return -EINVAL;
Idiomatically this is just a single if/else, if you weren't doing that then it ought to be a switch but really there's no need to do something non-idiomatic.
- /* Master serial port mode */
- snd_soc_write(codec, ES8328_MASTERMODE,
ES8328_MASTERMODE_MCLKDIV2 |
ES8328_MASTERMODE_MSC);
It seems a bit unfortunate that set_sysclk() doesn't manage MCLKDIV2 - if that isn't badly named the driver could easily support both the current fixed SYSCLK rate and twice that.
- case SND_SOC_BIAS_PREPARE:
/* VREF, VMID=2x50k, digital enabled */
snd_soc_write(codec, ES8328_CHIPPOWER, pwr_reg);
snd_soc_write(codec, ES8328_CONTROL1,
cc1_reg |
ES8328_CONTROL1_VMIDSEL_50k |
ES8328_CONTROL1_ENREF);
snd_soc_update_bits() as I'm fairly sure I said last time.
+static int es8328_suspend(struct snd_soc_codec *codec) +{
es8328_set_bias_level(codec, SND_SOC_BIAS_OFF);
return 0;
+}
Neither this nor set_bias_level() restores the register cache after suspend - this will mean suspend and resume is broken in systems where power is removed from the device over suspend.
- ret = devm_regulator_bulk_get(codec->dev, ARRAY_SIZE(es8328->supplies),
es8328->supplies);
- if (ret) {
dev_err(codec->dev, "!!! Unable to get regulators\n");
return ret;
- }
Print the error code and format the messages normally - none of this !!! stuff please.