Commit 757fc30a authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/topic/nau8824', 'asoc/topic/omap',...

Merge remote-tracking branches 'asoc/topic/nau8824', 'asoc/topic/omap', 'asoc/topic/pxa' and 'asoc/topic/qcom' into asoc-next
Nuvoton NAU8824 audio codec
This device supports I2C only.
Required properties:
- compatible : Must be "nuvoton,nau8824"
- reg : the I2C address of the device. This is either 0x1a (CSB=0) or 0x1b (CSB=1).
Optional properties:
- nuvoton,jkdet-polarity: JKDET pin polarity. 0 - active high, 1 - active low.
- nuvoton,vref-impedance: VREF Impedance selection
0 - Open
1 - 25 kOhm
2 - 125 kOhm
3 - 2.5 kOhm
- nuvoton,micbias-voltage: Micbias voltage level.
0 - VDDA
1 - VDDA
2 - VDDA * 1.1
3 - VDDA * 1.2
4 - VDDA * 1.3
5 - VDDA * 1.4
6 - VDDA * 1.53
7 - VDDA * 1.53
- nuvoton,sar-threshold-num: Number of buttons supported
- nuvoton,sar-threshold: Impedance threshold for each button. Array that contains up to 8 buttons configuration. SAR value is calculated as
SAR = 255 * MICBIAS / SAR_VOLTAGE * R / (2000 + R)
where MICBIAS is configured by 'nuvoton,micbias-voltage', SAR_VOLTAGE is configured by 'nuvoton,sar-voltage', R - button impedance.
Refer datasheet section 10.2 for more information about threshold calculation.
- nuvoton,sar-hysteresis: Button impedance measurement hysteresis.
- nuvoton,sar-voltage: Reference voltage for button impedance measurement.
0 - VDDA
1 - VDDA
2 - VDDA * 1.1
3 - VDDA * 1.2
4 - VDDA * 1.3
5 - VDDA * 1.4
6 - VDDA * 1.53
7 - VDDA * 1.53
- nuvoton,sar-compare-time: SAR compare time
0 - 500 ns
1 - 1 us
2 - 2 us
3 - 4 us
- nuvoton,sar-sampling-time: SAR sampling time
0 - 2 us
1 - 4 us
2 - 8 us
3 - 16 us
- nuvoton,short-key-debounce: Button short key press debounce time.
0 - 30 ms
1 - 50 ms
2 - 100 ms
- nuvoton,jack-eject-debounce: Jack ejection debounce time.
0 - 0 ms
1 - 1 ms
2 - 10 ms
Example:
headset: nau8824@1a {
compatible = "nuvoton,nau8824";
reg = <0x1a>;
interrupt-parent = <&gpio>;
interrupts = <TEGRA_GPIO(E, 6) IRQ_TYPE_LEVEL_LOW>;
nuvoton,vref-impedance = <2>;
nuvoton,micbias-voltage = <6>;
// Setup 4 buttons impedance according to Android specification
nuvoton,sar-threshold-num = <4>;
nuvoton,sar-threshold = <0xc 0x1e 0x38 0x60>;
nuvoton,sar-hysteresis = <0>;
nuvoton,sar-voltage = <6>;
nuvoton,sar-compare-time = <1>;
nuvoton,sar-sampling-time = <1>;
nuvoton,short-key-debounce = <0>;
nuvoton,jack-eject-debounce = <1>;
};
...@@ -101,6 +101,7 @@ config SND_SOC_ALL_CODECS ...@@ -101,6 +101,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_ML26124 if I2C select SND_SOC_ML26124 if I2C
select SND_SOC_NAU8540 if I2C select SND_SOC_NAU8540 if I2C
select SND_SOC_NAU8810 if I2C select SND_SOC_NAU8810 if I2C
select SND_SOC_NAU8824 if I2C
select SND_SOC_NAU8825 if I2C select SND_SOC_NAU8825 if I2C
select SND_SOC_HDMI_CODEC select SND_SOC_HDMI_CODEC
select SND_SOC_PCM1681 if I2C select SND_SOC_PCM1681 if I2C
...@@ -1137,6 +1138,10 @@ config SND_SOC_NAU8810 ...@@ -1137,6 +1138,10 @@ config SND_SOC_NAU8810
tristate "Nuvoton Technology Corporation NAU88C10 CODEC" tristate "Nuvoton Technology Corporation NAU88C10 CODEC"
depends on I2C depends on I2C
config SND_SOC_NAU8824
tristate "Nuvoton Technology Corporation NAU88L24 CODEC"
depends on I2C
config SND_SOC_NAU8825 config SND_SOC_NAU8825
tristate tristate
......
...@@ -95,6 +95,7 @@ snd-soc-msm8916-analog-objs := msm8916-wcd-analog.o ...@@ -95,6 +95,7 @@ snd-soc-msm8916-analog-objs := msm8916-wcd-analog.o
snd-soc-msm8916-digital-objs := msm8916-wcd-digital.o snd-soc-msm8916-digital-objs := msm8916-wcd-digital.o
snd-soc-nau8540-objs := nau8540.o snd-soc-nau8540-objs := nau8540.o
snd-soc-nau8810-objs := nau8810.o snd-soc-nau8810-objs := nau8810.o
snd-soc-nau8824-objs := nau8824.o
snd-soc-nau8825-objs := nau8825.o snd-soc-nau8825-objs := nau8825.o
snd-soc-hdmi-codec-objs := hdmi-codec.o snd-soc-hdmi-codec-objs := hdmi-codec.o
snd-soc-pcm1681-objs := pcm1681.o snd-soc-pcm1681-objs := pcm1681.o
...@@ -328,6 +329,7 @@ obj-$(CONFIG_SND_SOC_MSM8916_WCD_ANALOG) +=snd-soc-msm8916-analog.o ...@@ -328,6 +329,7 @@ obj-$(CONFIG_SND_SOC_MSM8916_WCD_ANALOG) +=snd-soc-msm8916-analog.o
obj-$(CONFIG_SND_SOC_MSM8916_WCD_DIGITAL) +=snd-soc-msm8916-digital.o obj-$(CONFIG_SND_SOC_MSM8916_WCD_DIGITAL) +=snd-soc-msm8916-digital.o
obj-$(CONFIG_SND_SOC_NAU8540) += snd-soc-nau8540.o obj-$(CONFIG_SND_SOC_NAU8540) += snd-soc-nau8540.o
obj-$(CONFIG_SND_SOC_NAU8810) += snd-soc-nau8810.o obj-$(CONFIG_SND_SOC_NAU8810) += snd-soc-nau8810.o
obj-$(CONFIG_SND_SOC_NAU8824) += snd-soc-nau8824.o
obj-$(CONFIG_SND_SOC_NAU8825) += snd-soc-nau8825.o obj-$(CONFIG_SND_SOC_NAU8825) += snd-soc-nau8825.o
obj-$(CONFIG_SND_SOC_HDMI_CODEC) += snd-soc-hdmi-codec.o obj-$(CONFIG_SND_SOC_HDMI_CODEC) += snd-soc-hdmi-codec.o
obj-$(CONFIG_SND_SOC_PCM1681) += snd-soc-pcm1681.o obj-$(CONFIG_SND_SOC_PCM1681) += snd-soc-pcm1681.o
......
This diff is collapsed.
This diff is collapsed.
...@@ -49,7 +49,7 @@ static int am3517evm_hw_params(struct snd_pcm_substream *substream, ...@@ -49,7 +49,7 @@ static int am3517evm_hw_params(struct snd_pcm_substream *substream,
return ret; return ret;
} }
static struct snd_soc_ops am3517evm_ops = { static const struct snd_soc_ops am3517evm_ops = {
.hw_params = am3517evm_hw_params, .hw_params = am3517evm_hw_params,
}; };
......
...@@ -124,7 +124,7 @@ static int n810_hw_params(struct snd_pcm_substream *substream, ...@@ -124,7 +124,7 @@ static int n810_hw_params(struct snd_pcm_substream *substream,
return err; return err;
} }
static struct snd_soc_ops n810_ops = { static const struct snd_soc_ops n810_ops = {
.startup = n810_startup, .startup = n810_startup,
.hw_params = n810_hw_params, .hw_params = n810_hw_params,
.shutdown = n810_shutdown, .shutdown = n810_shutdown,
......
...@@ -70,7 +70,7 @@ static int omap_abe_hw_params(struct snd_pcm_substream *substream, ...@@ -70,7 +70,7 @@ static int omap_abe_hw_params(struct snd_pcm_substream *substream,
return ret; return ret;
} }
static struct snd_soc_ops omap_abe_ops = { static const struct snd_soc_ops omap_abe_ops = {
.hw_params = omap_abe_hw_params, .hw_params = omap_abe_hw_params,
}; };
......
...@@ -73,7 +73,7 @@ static int omap_twl4030_hw_params(struct snd_pcm_substream *substream, ...@@ -73,7 +73,7 @@ static int omap_twl4030_hw_params(struct snd_pcm_substream *substream,
return snd_soc_runtime_set_dai_fmt(rtd, fmt); return snd_soc_runtime_set_dai_fmt(rtd, fmt);
} }
static struct snd_soc_ops omap_twl4030_ops = { static const struct snd_soc_ops omap_twl4030_ops = {
.hw_params = omap_twl4030_hw_params, .hw_params = omap_twl4030_hw_params,
}; };
......
...@@ -184,7 +184,7 @@ static int omap3pandora_in_init(struct snd_soc_pcm_runtime *rtd) ...@@ -184,7 +184,7 @@ static int omap3pandora_in_init(struct snd_soc_pcm_runtime *rtd)
return 0; return 0;
} }
static struct snd_soc_ops omap3pandora_ops = { static const struct snd_soc_ops omap3pandora_ops = {
.hw_params = omap3pandora_hw_params, .hw_params = omap3pandora_hw_params,
}; };
......
...@@ -68,7 +68,7 @@ static int osk_hw_params(struct snd_pcm_substream *substream, ...@@ -68,7 +68,7 @@ static int osk_hw_params(struct snd_pcm_substream *substream,
return err; return err;
} }
static struct snd_soc_ops osk_ops = { static const struct snd_soc_ops osk_ops = {
.startup = osk_startup, .startup = osk_startup,
.hw_params = osk_hw_params, .hw_params = osk_hw_params,
.shutdown = osk_shutdown, .shutdown = osk_shutdown,
......
...@@ -123,7 +123,7 @@ static int rx51_hw_params(struct snd_pcm_substream *substream, ...@@ -123,7 +123,7 @@ static int rx51_hw_params(struct snd_pcm_substream *substream,
SND_SOC_CLOCK_IN); SND_SOC_CLOCK_IN);
} }
static struct snd_soc_ops rx51_ops = { static const struct snd_soc_ops rx51_ops = {
.startup = rx51_startup, .startup = rx51_startup,
.hw_params = rx51_hw_params, .hw_params = rx51_hw_params,
}; };
...@@ -433,10 +433,9 @@ static int rx51_soc_probe(struct platform_device *pdev) ...@@ -433,10 +433,9 @@ static int rx51_soc_probe(struct platform_device *pdev)
} }
pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
if (pdata == NULL) { if (pdata == NULL)
dev_err(card->dev, "failed to create private data\n");
return -ENOMEM; return -ENOMEM;
}
snd_soc_card_set_drvdata(card, pdata); snd_soc_card_set_drvdata(card, pdata);
pdata->tvout_selection_gpio = devm_gpiod_get(card->dev, pdata->tvout_selection_gpio = devm_gpiod_get(card->dev,
......
...@@ -74,7 +74,7 @@ static int brownstone_wm8994_hw_params(struct snd_pcm_substream *substream, ...@@ -74,7 +74,7 @@ static int brownstone_wm8994_hw_params(struct snd_pcm_substream *substream,
} }
/* machine stream operations */ /* machine stream operations */
static struct snd_soc_ops brownstone_ops = { static const struct snd_soc_ops brownstone_ops = {
.hw_params = brownstone_wm8994_hw_params, .hw_params = brownstone_wm8994_hw_params,
}; };
......
...@@ -154,7 +154,7 @@ static int corgi_hw_params(struct snd_pcm_substream *substream, ...@@ -154,7 +154,7 @@ static int corgi_hw_params(struct snd_pcm_substream *substream,
return 0; return 0;
} }
static struct snd_soc_ops corgi_ops = { static const struct snd_soc_ops corgi_ops = {
.startup = corgi_startup, .startup = corgi_startup,
.hw_params = corgi_hw_params, .hw_params = corgi_hw_params,
.shutdown = corgi_shutdown, .shutdown = corgi_shutdown,
......
...@@ -81,7 +81,7 @@ static struct snd_soc_dai_link e750_dai[] = { ...@@ -81,7 +81,7 @@ static struct snd_soc_dai_link e750_dai[] = {
.name = "AC97 Aux", .name = "AC97 Aux",
.stream_name = "AC97 Aux", .stream_name = "AC97 Aux",
.cpu_dai_name = "pxa2xx-ac97-aux", .cpu_dai_name = "pxa2xx-ac97-aux",
.codec_dai_name ="wm9705-aux", .codec_dai_name = "wm9705-aux",
.platform_name = "pxa-pcm-audio", .platform_name = "pxa-pcm-audio",
.codec_name = "wm9705-codec", .codec_name = "wm9705-codec",
}, },
......
...@@ -81,7 +81,7 @@ static struct snd_soc_dai_link e800_dai[] = { ...@@ -81,7 +81,7 @@ static struct snd_soc_dai_link e800_dai[] = {
.name = "AC97 Aux", .name = "AC97 Aux",
.stream_name = "AC97 Aux", .stream_name = "AC97 Aux",
.cpu_dai_name = "pxa2xx-ac97-aux", .cpu_dai_name = "pxa2xx-ac97-aux",
.codec_dai_name ="wm9712-aux", .codec_dai_name = "wm9712-aux",
.platform_name = "pxa-pcm-audio", .platform_name = "pxa-pcm-audio",
.codec_name = "wm9712-codec", .codec_name = "wm9712-codec",
}, },
......
...@@ -43,7 +43,7 @@ static struct snd_soc_dai_link em_x270_dai[] = { ...@@ -43,7 +43,7 @@ static struct snd_soc_dai_link em_x270_dai[] = {
.name = "AC97 Aux", .name = "AC97 Aux",
.stream_name = "AC97 Aux", .stream_name = "AC97 Aux",
.cpu_dai_name = "pxa2xx-ac97-aux", .cpu_dai_name = "pxa2xx-ac97-aux",
.codec_dai_name ="wm9712-aux", .codec_dai_name = "wm9712-aux",
.platform_name = "pxa-pcm-audio", .platform_name = "pxa-pcm-audio",
.codec_name = "wm9712-codec", .codec_name = "wm9712-codec",
}, },
......
...@@ -79,7 +79,7 @@ static int hx4700_hw_params(struct snd_pcm_substream *substream, ...@@ -79,7 +79,7 @@ static int hx4700_hw_params(struct snd_pcm_substream *substream,
return 0; return 0;
} }
static struct snd_soc_ops hx4700_ops = { static const struct snd_soc_ops hx4700_ops = {
.hw_params = hx4700_hw_params, .hw_params = hx4700_hw_params,
}; };
......
...@@ -42,7 +42,7 @@ static int imote2_asoc_hw_params(struct snd_pcm_substream *substream, ...@@ -42,7 +42,7 @@ static int imote2_asoc_hw_params(struct snd_pcm_substream *substream,
return ret; return ret;
} }
static struct snd_soc_ops imote2_asoc_ops = { static const struct snd_soc_ops imote2_asoc_ops = {
.hw_params = imote2_asoc_hw_params, .hw_params = imote2_asoc_hw_params,
}; };
......
...@@ -255,12 +255,12 @@ static int magician_capture_hw_params(struct snd_pcm_substream *substream, ...@@ -255,12 +255,12 @@ static int magician_capture_hw_params(struct snd_pcm_substream *substream,
return 0; return 0;
} }
static struct snd_soc_ops magician_capture_ops = { static const struct snd_soc_ops magician_capture_ops = {
.startup = magician_startup, .startup = magician_startup,
.hw_params = magician_capture_hw_params, .hw_params = magician_capture_hw_params,
}; };
static struct snd_soc_ops magician_playback_ops = { static const struct snd_soc_ops magician_playback_ops = {
.startup = magician_startup, .startup = magician_startup,
.hw_params = magician_playback_hw_params, .hw_params = magician_playback_hw_params,
}; };
......
...@@ -157,7 +157,7 @@ static struct snd_soc_dai_link mioa701_dai[] = { ...@@ -157,7 +157,7 @@ static struct snd_soc_dai_link mioa701_dai[] = {
.name = "AC97 Aux", .name = "AC97 Aux",
.stream_name = "AC97 Aux", .stream_name = "AC97 Aux",
.cpu_dai_name = "pxa2xx-ac97-aux", .cpu_dai_name = "pxa2xx-ac97-aux",
.codec_dai_name ="wm9713-aux", .codec_dai_name = "wm9713-aux",
.codec_name = "wm9713-codec", .codec_name = "wm9713-codec",
.platform_name = "pxa-pcm-audio", .platform_name = "pxa-pcm-audio",
.ops = &mioa701_ops, .ops = &mioa701_ops,
......
...@@ -166,7 +166,6 @@ static void mmp_pcm_free_dma_buffers(struct snd_pcm *pcm) ...@@ -166,7 +166,6 @@ static void mmp_pcm_free_dma_buffers(struct snd_pcm *pcm)
buf->area = NULL; buf->area = NULL;
} }
return;
} }
static int mmp_pcm_preallocate_dma_buffer(struct snd_pcm_substream *substream, static int mmp_pcm_preallocate_dma_buffer(struct snd_pcm_substream *substream,
......
...@@ -119,7 +119,6 @@ static void mmp_sspa_shutdown(struct snd_pcm_substream *substream, ...@@ -119,7 +119,6 @@ static void mmp_sspa_shutdown(struct snd_pcm_substream *substream,
clk_disable(priv->sspa->clk); clk_disable(priv->sspa->clk);
clk_disable(priv->sysclk); clk_disable(priv->sysclk);
return;
} }
/* /*
......
...@@ -129,7 +129,7 @@ static int poodle_hw_params(struct snd_pcm_substream *substream, ...@@ -129,7 +129,7 @@ static int poodle_hw_params(struct snd_pcm_substream *substream,
return 0; return 0;
} }
static struct snd_soc_ops poodle_ops = { static const struct snd_soc_ops poodle_ops = {
.startup = poodle_startup, .startup = poodle_startup,
.hw_params = poodle_hw_params, .hw_params = poodle_hw_params,
.shutdown = poodle_shutdown, .shutdown = poodle_shutdown,
......
...@@ -354,6 +354,7 @@ static int pxa_ssp_set_dai_pll(struct snd_soc_dai *cpu_dai, int pll_id, ...@@ -354,6 +354,7 @@ static int pxa_ssp_set_dai_pll(struct snd_soc_dai *cpu_dai, int pll_id,
if (ssp->type == PXA3xx_SSP) { if (ssp->type == PXA3xx_SSP) {
u32 val; u32 val;
u64 tmp = 19968; u64 tmp = 19968;
tmp *= 1000000; tmp *= 1000000;
do_div(tmp, freq_out); do_div(tmp, freq_out);
val = tmp; val = tmp;
...@@ -590,13 +591,13 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream, ...@@ -590,13 +591,13 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
if ((pxa_ssp_get_scr(ssp) == 4) && (width == 16)) { if ((pxa_ssp_get_scr(ssp) == 4) && (width == 16)) {
/* This is a special case where the bitclk is 64fs /* This is a special case where the bitclk is 64fs
* and we're not dealing with 2*32 bits of audio * and we're not dealing with 2*32 bits of audio
* samples. * samples.
* *
* The SSP values used for that are all found out by * The SSP values used for that are all found out by
* trying and failing a lot; some of the registers * trying and failing a lot; some of the registers
* needed for that mode are only available on PXA3xx. * needed for that mode are only available on PXA3xx.
*/ */
if (ssp->type != PXA3xx_SSP) if (ssp->type != PXA3xx_SSP)
return -EINVAL; return -EINVAL;
......
...@@ -140,9 +140,8 @@ static int pxa2xx_ac97_mic_startup(struct snd_pcm_substream *substream, ...@@ -140,9 +140,8 @@ static int pxa2xx_ac97_mic_startup(struct snd_pcm_substream *substream,
{ {
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
return -ENODEV; return -ENODEV;
else snd_soc_dai_set_dma_data(cpu_dai, substream,
snd_soc_dai_set_dma_data(cpu_dai, substream, &pxa2xx_ac97_pcm_mic_mono_in);
&pxa2xx_ac97_pcm_mic_mono_in);
return 0; return 0;
} }
......
...@@ -46,10 +46,10 @@ ...@@ -46,10 +46,10 @@
#define SACR0_STRF (1 << 5) /* FIFO Select for EFWR Special Function */ #define SACR0_STRF (1 << 5) /* FIFO Select for EFWR Special Function */
#define SACR0_EFWR (1 << 4) /* Enable EFWR Function */ #define SACR0_EFWR (1 << 4) /* Enable EFWR Function */
#define SACR0_RST (1 << 3) /* FIFO, i2s Register Reset */ #define SACR0_RST (1 << 3) /* FIFO, i2s Register Reset */
#define SACR0_BCKD (1 << 2) /* Bit Clock Direction */ #define SACR0_BCKD (1 << 2) /* Bit Clock Direction */
#define SACR0_ENB (1 << 0) /* Enable I2S Link */ #define SACR0_ENB (1 << 0) /* Enable I2S Link */
#define SACR1_ENLBF (1 << 5) /* Enable Loopback */ #define SACR1_ENLBF (1 << 5) /* Enable Loopback */
#define SACR1_DRPL (1 << 4) /* Disable Replaying Function */ #define SACR1_DRPL (1 << 4) /* Disable Replaying Function */
#define SACR1_DREC (1 << 3) /* Disable Recording Function */ #define SACR1_DREC (1 << 3) /* Disable Recording Function */
#define SACR1_AMSL (1 << 0) /* Specify Alternate Mode */ #define SACR1_AMSL (1 << 0) /* Specify Alternate Mode */
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
#define SASR0_TFS (1 << 3) /* Tx FIFO Service Request */ #define SASR0_TFS (1 << 3) /* Tx FIFO Service Request */
#define SASR0_BSY (1 << 2) /* I2S Busy */ #define SASR0_BSY (1 << 2) /* I2S Busy */
#define SASR0_RNE (1 << 1) /* Rx FIFO Not Empty */ #define SASR0_RNE (1 << 1) /* Rx FIFO Not Empty */
#define SASR0_TNF (1 << 0) /* Tx FIFO Not Empty */ #define SASR0_TNF (1 << 0) /* Tx FIFO Not Empty */
#define SAICR_ROR (1 << 6) /* Clear Rx FIFO Overrun Interrupt */ #define SAICR_ROR (1 << 6) /* Clear Rx FIFO Overrun Interrupt */
#define SAICR_TUR (1 << 5) /* Clear Tx FIFO Underrun Interrupt */ #define SAICR_TUR (1 << 5) /* Clear Tx FIFO Underrun Interrupt */
...@@ -119,7 +119,7 @@ static int pxa_i2s_wait(void) ...@@ -119,7 +119,7 @@ static int pxa_i2s_wait(void)
int i; int i;
/* flush the Rx FIFO */ /* flush the Rx FIFO */
for(i = 0; i < 16; i++) for (i = 0; i < 16; i++)
SADR; SADR;
return 0; return 0;
} }
......
...@@ -85,7 +85,7 @@ static int pxa2xx_soc_pcm_new(struct snd_soc_pcm_runtime *rtd) ...@@ -85,7 +85,7 @@ static int pxa2xx_soc_pcm_new(struct snd_soc_pcm_runtime *rtd)
} }
static struct snd_soc_platform_driver pxa2xx_soc_platform = { static struct snd_soc_platform_driver pxa2xx_soc_platform = {
.ops = &pxa2xx_pcm_ops, .ops = &pxa2xx_pcm_ops,
.pcm_new = pxa2xx_soc_pcm_new, .pcm_new = pxa2xx_soc_pcm_new,
.pcm_free = pxa2xx_pcm_free_dma_buffers, .pcm_free = pxa2xx_pcm_free_dma_buffers,
}; };
......
...@@ -132,7 +132,7 @@ static int raumfeld_cs4270_hw_params(struct snd_pcm_substream *substream, ...@@ -132,7 +132,7 @@ static int raumfeld_cs4270_hw_params(struct snd_pcm_substream *substream,
return 0; return 0;
} }
static struct snd_soc_ops raumfeld_cs4270_ops = { static const struct snd_soc_ops raumfeld_cs4270_ops = {
.startup = raumfeld_cs4270_startup, .startup = raumfeld_cs4270_startup,
.shutdown = raumfeld_cs4270_shutdown, .shutdown = raumfeld_cs4270_shutdown,
.hw_params = raumfeld_cs4270_hw_params, .hw_params = raumfeld_cs4270_hw_params,
...@@ -228,14 +228,12 @@ static struct snd_soc_ops raumfeld_ak4104_ops = { ...@@ -228,14 +228,12 @@ static struct snd_soc_ops raumfeld_ak4104_ops = {
.codec_name = "spi0.0", \ .codec_name = "spi0.0", \
} }
static struct snd_soc_dai_link snd_soc_raumfeld_connector_dai[] = static struct snd_soc_dai_link snd_soc_raumfeld_connector_dai[] = {
{
DAI_LINK_CS4270, DAI_LINK_CS4270,
DAI_LINK_AK4104, DAI_LINK_AK4104,
}; };
static struct snd_soc_dai_link snd_soc_raumfeld_speaker_dai[] = static struct snd_soc_dai_link snd_soc_raumfeld_speaker_dai[] = {
{
DAI_LINK_CS4270, DAI_LINK_CS4270,
}; };
......
...@@ -156,7 +156,7 @@ static int spitz_hw_params(struct snd_pcm_substream *substream, ...@@ -156,7 +156,7 @@ static int spitz_hw_params(struct snd_pcm_substream *substream,
return 0; return 0;
} }
static struct snd_soc_ops spitz_ops = { static const struct snd_soc_ops spitz_ops = {
.startup = spitz_startup, .startup = spitz_startup,
.hw_params = spitz_hw_params, .hw_params = spitz_hw_params,
}; };
...@@ -230,8 +230,8 @@ static const struct snd_soc_dapm_route spitz_audio_map[] = { ...@@ -230,8 +230,8 @@ static const struct snd_soc_dapm_route spitz_audio_map[] = {
{"Headset Jack", NULL, "ROUT1"}, {"Headset Jack", NULL, "ROUT1"},
/* ext speaker connected to LOUT2, ROUT2 */ /* ext speaker connected to LOUT2, ROUT2 */
{"Ext Spk", NULL , "ROUT2"}, {"Ext Spk", NULL, "ROUT2"},
{"Ext Spk", NULL , "LOUT2"}, {"Ext Spk", NULL, "LOUT2"},
/* mic is connected to input 1 - with bias */ /* mic is connected to input 1 - with bias */
{"LINPUT1", NULL, "Mic Bias"}, {"LINPUT1", NULL, "Mic Bias"},
......
...@@ -85,7 +85,7 @@ static int tosa_startup(struct snd_pcm_substream *substream) ...@@ -85,7 +85,7 @@ static int tosa_startup(struct snd_pcm_substream *substream)
return 0; return 0;
} }
static struct snd_soc_ops tosa_ops = { static const struct snd_soc_ops tosa_ops = {
.startup = tosa_startup, .startup = tosa_startup,
}; };
...@@ -133,7 +133,7 @@ static int tosa_set_spk(struct snd_kcontrol *kcontrol, ...@@ -133,7 +133,7 @@ static int tosa_set_spk(struct snd_kcontrol *kcontrol,
static int tosa_hp_event(struct snd_soc_dapm_widget *w, static int tosa_hp_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *k, int event) struct snd_kcontrol *k, int event)
{ {
gpio_set_value(TOSA_GPIO_L_MUTE, SND_SOC_DAPM_EVENT_ON(event) ? 1 :0); gpio_set_value(TOSA_GPIO_L_MUTE, SND_SOC_DAPM_EVENT_ON(event) ? 1 : 0);
return 0; return 0;
} }
......
...@@ -119,8 +119,8 @@ static const struct snd_soc_dapm_route z2_audio_map[] = { ...@@ -119,8 +119,8 @@ static const struct snd_soc_dapm_route z2_audio_map[] = {
{"Headphone Jack", NULL, "ROUT1"}, {"Headphone Jack", NULL, "ROUT1"},
/* ext speaker connected to LOUT2, ROUT2 */ /* ext speaker connected to LOUT2, ROUT2 */
{"Ext Spk", NULL , "ROUT2"}, {"Ext Spk", NULL, "ROUT2"},
{"Ext Spk", NULL , "LOUT2"}, {"Ext Spk", NULL, "LOUT2"},
/* mic is connected to R input 2 - with bias */ /* mic is connected to R input 2 - with bias */
{"RINPUT2", NULL, "Mic Bias"}, {"RINPUT2", NULL, "Mic Bias"},
...@@ -152,7 +152,7 @@ static int z2_wm8750_init(struct snd_soc_pcm_runtime *rtd) ...@@ -152,7 +152,7 @@ static int z2_wm8750_init(struct snd_soc_pcm_runtime *rtd)
return ret; return ret;
} }
static struct snd_soc_ops z2_ops = { static const struct snd_soc_ops z2_ops = {
.hw_params = z2_hw_params, .hw_params = z2_hw_params,
}; };
......
...@@ -132,7 +132,7 @@ static int zylonite_voice_hw_params(struct snd_pcm_substream *substream, ...@@ -132,7 +132,7 @@ static int zylonite_voice_hw_params(struct snd_pcm_substream *substream,
return 0; return 0;
} }
static struct snd_soc_ops zylonite_voice_ops = { static const struct snd_soc_ops zylonite_voice_ops = {
.hw_params = zylonite_voice_hw_params, .hw_params = zylonite_voice_hw_params,
}; };
......
...@@ -231,6 +231,18 @@ static struct lpass_variant apq8016_data = { ...@@ -231,6 +231,18 @@ static struct lpass_variant apq8016_data = {
.wrdma_channels = 2, .wrdma_channels = 2,
.dai_driver = apq8016_lpass_cpu_dai_driver, .dai_driver = apq8016_lpass_cpu_dai_driver,
.num_dai = ARRAY_SIZE(apq8016_lpass_cpu_dai_driver), .num_dai = ARRAY_SIZE(apq8016_lpass_cpu_dai_driver),
.dai_osr_clk_names = (const char *[]) {
"mi2s-osr-clk0",
"mi2s-osr-clk1",
"mi2s-osr-clk2",
"mi2s-osr-clk3",
},
.dai_bit_clk_names = (const char *[]) {
"mi2s-bit-clk0",
"mi2s-bit-clk1",
"mi2s-bit-clk2",
"mi2s-bit-clk3",
},
.init = apq8016_lpass_init, .init = apq8016_lpass_init,
.exit = apq8016_lpass_exit, .exit = apq8016_lpass_exit,
.alloc_dma_channel = apq8016_lpass_alloc_dma_channel, .alloc_dma_channel = apq8016_lpass_alloc_dma_channel,
......
...@@ -429,7 +429,6 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev) ...@@ -429,7 +429,6 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev)
struct lpass_variant *variant; struct lpass_variant *variant;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
const struct of_device_id *match; const struct of_device_id *match;
char clk_name[16];
int ret, i, dai_id; int ret, i, dai_id;
dsp_of_node = of_parse_phandle(pdev->dev.of_node, "qcom,adsp", 0); dsp_of_node = of_parse_phandle(pdev->dev.of_node, "qcom,adsp", 0);
...@@ -477,31 +476,24 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev) ...@@ -477,31 +476,24 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev)
for (i = 0; i < variant->num_dai; i++) { for (i = 0; i < variant->num_dai; i++) {
dai_id = variant->dai_driver[i].id; dai_id = variant->dai_driver[i].id;
if (variant->num_dai > 1)
sprintf(clk_name, "mi2s-osr-clk%d", i);
else
sprintf(clk_name, "mi2s-osr-clk");
drvdata->mi2s_osr_clk[dai_id] = devm_clk_get(&pdev->dev, drvdata->mi2s_osr_clk[dai_id] = devm_clk_get(&pdev->dev,
clk_name); variant->dai_osr_clk_names[i]);
if (IS_ERR(drvdata->mi2s_osr_clk[dai_id])) { if (IS_ERR(drvdata->mi2s_osr_clk[dai_id])) {
dev_warn(&pdev->dev, dev_warn(&pdev->dev,
"error getting optional mi2s-osr-clk: %ld\n", "%s() error getting optional %s: %ld\n",
__func__,
variant->dai_osr_clk_names[i],
PTR_ERR(drvdata->mi2s_osr_clk[dai_id])); PTR_ERR(drvdata->mi2s_osr_clk[dai_id]));
drvdata->mi2s_osr_clk[dai_id] = NULL; drvdata->mi2s_osr_clk[dai_id] = NULL;
} }
if (variant->num_dai > 1)
sprintf(clk_name, "mi2s-bit-clk%d", i);
else
sprintf(clk_name, "mi2s-bit-clk");
drvdata->mi2s_bit_clk[dai_id] = devm_clk_get(&pdev->dev, drvdata->mi2s_bit_clk[dai_id] = devm_clk_get(&pdev->dev,
clk_name); variant->dai_bit_clk_names[i]);
if (IS_ERR(drvdata->mi2s_bit_clk[dai_id])) { if (IS_ERR(drvdata->mi2s_bit_clk[dai_id])) {
dev_err(&pdev->dev, dev_err(&pdev->dev,
"error getting mi2s-bit-clk: %ld\n", "error getting %s: %ld\n",
variant->dai_bit_clk_names[i],
PTR_ERR(drvdata->mi2s_bit_clk[dai_id])); PTR_ERR(drvdata->mi2s_bit_clk[dai_id]));
return PTR_ERR(drvdata->mi2s_bit_clk[dai_id]); return PTR_ERR(drvdata->mi2s_bit_clk[dai_id]);
} }
......
...@@ -92,6 +92,12 @@ static struct lpass_variant ipq806x_data = { ...@@ -92,6 +92,12 @@ static struct lpass_variant ipq806x_data = {
.wrdma_channels = 4, .wrdma_channels = 4,
.dai_driver = &ipq806x_lpass_cpu_dai_driver, .dai_driver = &ipq806x_lpass_cpu_dai_driver,
.num_dai = 1, .num_dai = 1,
.dai_osr_clk_names = (const char *[]) {
"mi2s-osr-clk",
},
.dai_bit_clk_names = (const char *[]) {
"mi2s-bit-clk",
},
.alloc_dma_channel = ipq806x_lpass_alloc_dma_channel, .alloc_dma_channel = ipq806x_lpass_alloc_dma_channel,
.free_dma_channel = ipq806x_lpass_free_dma_channel, .free_dma_channel = ipq806x_lpass_free_dma_channel,
}; };
......
...@@ -91,6 +91,8 @@ struct lpass_variant { ...@@ -91,6 +91,8 @@ struct lpass_variant {
/* SOC specific dais */ /* SOC specific dais */
struct snd_soc_dai_driver *dai_driver; struct snd_soc_dai_driver *dai_driver;
int num_dai; int num_dai;
const char * const *dai_osr_clk_names;
const char * const *dai_bit_clk_names;
}; };
/* register the platform driver from the CPU DAI driver */ /* register the platform driver from the CPU DAI driver */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment