|
@@ -308,12 +308,15 @@ static int s3c2412_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
|
|
|
|
|
|
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
|
|
case SND_SOC_DAIFMT_RIGHT_J:
|
|
|
+ iismod |= S3C2412_IISMOD_LR_RLOW;
|
|
|
iismod |= S3C2412_IISMOD_SDF_MSB;
|
|
|
break;
|
|
|
case SND_SOC_DAIFMT_LEFT_J:
|
|
|
+ iismod |= S3C2412_IISMOD_LR_RLOW;
|
|
|
iismod |= S3C2412_IISMOD_SDF_LSB;
|
|
|
break;
|
|
|
case SND_SOC_DAIFMT_I2S:
|
|
|
+ iismod &= ~S3C2412_IISMOD_LR_RLOW;
|
|
|
iismod |= S3C2412_IISMOD_SDF_IIS;
|
|
|
break;
|
|
|
default:
|
|
@@ -463,6 +466,31 @@ static int s3c2412_i2s_set_clkdiv(struct snd_soc_dai *cpu_dai,
|
|
|
|
|
|
switch (div_id) {
|
|
|
case S3C_I2SV2_DIV_BCLK:
|
|
|
+ if (div > 3) {
|
|
|
+ /* convert value to bit field */
|
|
|
+
|
|
|
+ switch (div) {
|
|
|
+ case 16:
|
|
|
+ div = S3C2412_IISMOD_BCLK_16FS;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 32:
|
|
|
+ div = S3C2412_IISMOD_BCLK_32FS;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 24:
|
|
|
+ div = S3C2412_IISMOD_BCLK_24FS;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 48:
|
|
|
+ div = S3C2412_IISMOD_BCLK_48FS;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
reg = readl(i2s->regs + S3C2412_IISMOD);
|
|
|
reg &= ~S3C2412_IISMOD_BCLK_MASK;
|
|
|
writel(reg | div, i2s->regs + S3C2412_IISMOD);
|
|
@@ -622,7 +650,7 @@ int s3c_i2sv2_probe(struct platform_device *pdev,
|
|
|
}
|
|
|
|
|
|
i2s->iis_pclk = clk_get(dev, "iis");
|
|
|
- if (i2s->iis_pclk == NULL) {
|
|
|
+ if (IS_ERR(i2s->iis_pclk)) {
|
|
|
dev_err(dev, "failed to get iis_clock\n");
|
|
|
iounmap(i2s->regs);
|
|
|
return -ENOENT;
|