.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * cs4265.c -- CS4265 ALSA SoC audio driver |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright 2014 Cirrus Logic, Inc. |
---|
5 | 6 | * |
---|
6 | 7 | * Author: Paul Handrigan <paul.handrigan@cirrus.com> |
---|
7 | | - * |
---|
8 | | - * This program is free software; you can redistribute it and/or modify |
---|
9 | | - * it under the terms of the GNU General Public License version 2 as |
---|
10 | | - * published by the Free Software Foundation. |
---|
11 | | - * |
---|
12 | 8 | */ |
---|
13 | 9 | |
---|
14 | 10 | #include <linux/module.h> |
---|
.. | .. |
---|
157 | 153 | SOC_SINGLE("Validity Bit Control Switch", CS4265_SPDIF_CTL2, |
---|
158 | 154 | 3, 1, 0), |
---|
159 | 155 | SOC_ENUM("SPDIF Mono/Stereo", spdif_mono_stereo_enum), |
---|
160 | | - SOC_SINGLE("MMTLR Data Switch", CS4265_SPDIF_CTL2, |
---|
161 | | - 0, 1, 0), |
---|
| 156 | + SOC_SINGLE("MMTLR Data Switch", CS4265_SPDIF_CTL2, 0, 1, 0), |
---|
162 | 157 | SOC_ENUM("Mono Channel Select", spdif_mono_select_enum), |
---|
163 | 158 | SND_SOC_BYTES("C Data Buffer", CS4265_C_DATA_BUFF, 24), |
---|
164 | 159 | }; |
---|
.. | .. |
---|
190 | 185 | |
---|
191 | 186 | SND_SOC_DAPM_SWITCH("Loopback", SND_SOC_NOPM, 0, 0, |
---|
192 | 187 | &loopback_ctl), |
---|
193 | | - SND_SOC_DAPM_SWITCH("SPDIF", SND_SOC_NOPM, 0, 0, |
---|
| 188 | + SND_SOC_DAPM_SWITCH("SPDIF", CS4265_SPDIF_CTL2, 5, 1, |
---|
194 | 189 | &spdif_switch), |
---|
195 | 190 | SND_SOC_DAPM_SWITCH("DAC", CS4265_PWRCTL, 1, 1, |
---|
196 | 191 | &dac_switch), |
---|
.. | .. |
---|
221 | 216 | {"LINEOUTR", NULL, "DAC"}, |
---|
222 | 217 | {"SPDIFOUT", NULL, "SPDIF"}, |
---|
223 | 218 | |
---|
| 219 | + {"Pre-amp MIC", NULL, "MICL"}, |
---|
| 220 | + {"Pre-amp MIC", NULL, "MICR"}, |
---|
| 221 | + {"ADC Mux", "MIC", "Pre-amp MIC"}, |
---|
224 | 222 | {"ADC Mux", "LINEIN", "LINEINL"}, |
---|
225 | 223 | {"ADC Mux", "LINEIN", "LINEINR"}, |
---|
226 | | - {"ADC Mux", "MIC", "MICL"}, |
---|
227 | | - {"ADC Mux", "MIC", "MICR"}, |
---|
228 | 224 | {"ADC", NULL, "ADC Mux"}, |
---|
229 | 225 | {"DOUT", NULL, "ADC"}, |
---|
230 | 226 | {"DAI1 Capture", NULL, "DOUT"}, |
---|
.. | .. |
---|
381 | 377 | return 0; |
---|
382 | 378 | } |
---|
383 | 379 | |
---|
384 | | -static int cs4265_digital_mute(struct snd_soc_dai *dai, int mute) |
---|
| 380 | +static int cs4265_mute(struct snd_soc_dai *dai, int mute, int direction) |
---|
385 | 381 | { |
---|
386 | 382 | struct snd_soc_component *component = dai->component; |
---|
387 | 383 | |
---|
.. | .. |
---|
496 | 492 | SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000) |
---|
497 | 493 | |
---|
498 | 494 | #define CS4265_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_U16_LE | \ |
---|
499 | | - SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_U24_LE) |
---|
| 495 | + SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_U24_LE | \ |
---|
| 496 | + SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_U32_LE) |
---|
500 | 497 | |
---|
501 | 498 | static const struct snd_soc_dai_ops cs4265_ops = { |
---|
502 | 499 | .hw_params = cs4265_pcm_hw_params, |
---|
503 | | - .digital_mute = cs4265_digital_mute, |
---|
| 500 | + .mute_stream = cs4265_mute, |
---|
504 | 501 | .set_fmt = cs4265_set_fmt, |
---|
505 | 502 | .set_sysclk = cs4265_set_sysclk, |
---|
| 503 | + .no_capture_mute = 1, |
---|
506 | 504 | }; |
---|
507 | 505 | |
---|
508 | 506 | static struct snd_soc_dai_driver cs4265_dai[] = { |
---|