[alsa-devel] [PATCH 1/2] ASoC: cs4341: Add driver for CS4341 CODEC
Handrigan, Paul
Paul.Handrigan at cirrus.com
Wed Sep 21 04:38:49 CEST 2016
On 9/8/16, 11:29 AM, "Alexander Shiyan" <shc_work at mail.ru> wrote:
>diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
>index 1cd6ab3..9853e79 100644
>--- a/sound/soc/codecs/Kconfig
>+++ b/sound/soc/codecs/Kconfig
>@@ -458,6 +458,13 @@ config SND_SOC_CS42XX8_I2C
> select SND_SOC_CS42XX8
> select REGMAP_I2C
>
>+config SND_SOC_CS4341
>+ tristate "Cirrus Logic CS4341 CODEC"
>+ depends on SPI_MASTER
>+ select REGMAP_SPI
>+ help
>+ Enable support for Cirrus Logic (Crystal) CS4341 CODEC.
>+
This devices primary interface is I2C. That should be added as well since
i2c is read/write and spi is write only.
> # Cirrus Logic CS4349 HiFi DAC
> config SND_SOC_CS4349
> tristate "Cirrus Logic CS4349 CODEC"
>
>+#define CS4341_REG_MODE1 0x00
>+#define CS4341_REG_MODE2 0x01
>+#define CS4341_REG_MIX 0x02
>+#define CS4341_REG_VOLA 0x03
>+#define CS4341_REG_VOLB 0x04
>+
>+#define CS4341_MODE2_DIF (7 << 4)
>+#define CS4341_MODE2_DIF_I2S_24 (0 << 4)
>+#define CS4341_MODE2_DIF_I2S_16 (1 << 4)
>+#define CS4341_MODE2_DIF_LJ_24 (2 << 4)
>+#define CS4341_MODE2_DIF_RJ_24 (3 << 4)
>+#define CS4341_MODE2_DIF_RJ_16 (5 << 4)
>+
>+#define CS4341_VOLX_MUTE (1 << 7)
It would be a good idea to clean up the indentation here.
>+ switch (cs4341->fmt) {
>+ case SND_SOC_DAIFMT_I2S:
>+ snd_soc_update_bits(codec, CS4341_REG_MODE2, CS4341_MODE2_DIF,
>+ bits24 ? CS4341_MODE2_DIF_I2S_24 :
>+ CS4341_MODE2_DIF_I2S_16);
>+ break;
>+ case SND_SOC_DAIFMT_LEFT_J:
>+ snd_soc_update_bits(codec, CS4341_REG_MODE2, CS4341_MODE2_DIF,
>+ CS4341_MODE2_DIF_LJ_24);
>+ break;
>+ case SND_SOC_DAIFMT_RIGHT_J:
>+ snd_soc_update_bits(codec, CS4341_REG_MODE2, CS4341_MODE2_DIF,
>+ bits24 ? CS4341_MODE2_DIF_RJ_24 :
>+ CS4341_MODE2_DIF_RJ_16);
>+ break;
>+ default:
>+ dev_err(codec->dev, "Unsupported DAI format\n");
>+ return -EINVAL;
>+ }
Can we use regmap_update_bits where we can?
>+
>+ return 0;
>+}
>+
>+static int cs4341_digital_mute(struct snd_soc_dai *dai, int mute)
>+{
>+ struct snd_soc_codec *codec = dai->codec;
>+ int ret;
>+
>+ ret = snd_soc_update_bits(codec, CS4341_REG_VOLA, CS4341_VOLX_MUTE,
>+ mute ? CS4341_VOLX_MUTE : 0);
>+ if (ret < 0)
>+ return ret;
>+
>+ return snd_soc_update_bits(codec, CS4341_REG_VOLB, CS4341_VOLX_MUTE,
>+ mute ? CS4341_VOLX_MUTE : 0);
regmap_update_bits
>+}
>+
>
>
>
More information about the Alsa-devel
mailing list