mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
Merge remote-tracking branches 'asoc/topic/atmel-classd', 'asoc/topic/const' and 'asoc/topic/da7218' into asoc-next
This commit is contained in:
commit
38cfbc12c8
@ -16,6 +16,10 @@ Required properties:
|
||||
Required elements: "pclk", "gclk" and "aclk".
|
||||
- clocks
|
||||
Please refer to clock-bindings.txt.
|
||||
- assigned-clocks
|
||||
Should be <&classd_gclk>.
|
||||
- assigned-clock-parents
|
||||
Should be <&audio_pll_pmc>.
|
||||
|
||||
Optional properties:
|
||||
- pinctrl-names, pinctrl-0
|
||||
@ -43,6 +47,8 @@ classd: classd@fc048000 {
|
||||
dma-names = "tx";
|
||||
clocks = <&classd_clk>, <&classd_gclk>, <&audio_pll_pmc>;
|
||||
clock-names = "pclk", "gclk", "aclk";
|
||||
assigned-clocks = <&classd_gclk>;
|
||||
assigned-clock-parents = <&audio_pll_pmc>;
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_classd_default>;
|
||||
|
104
Documentation/devicetree/bindings/sound/da7218.txt
Normal file
104
Documentation/devicetree/bindings/sound/da7218.txt
Normal file
@ -0,0 +1,104 @@
|
||||
Dialog Semiconductor DA7218 Audio Codec bindings
|
||||
|
||||
DA7218 is an audio codec with HP detect feature.
|
||||
|
||||
======
|
||||
|
||||
Required properties:
|
||||
- compatible : Should be "dlg,da7217" or "dlg,da7218"
|
||||
- reg: Specifies the I2C slave address
|
||||
|
||||
- VDD-supply: VDD power supply for the device
|
||||
- VDDMIC-supply: VDDMIC power supply for the device
|
||||
- VDDIO-supply: VDDIO power supply for the device
|
||||
(See Documentation/devicetree/bindings/regulator/regulator.txt for further
|
||||
information relating to regulators)
|
||||
|
||||
Optional properties:
|
||||
- interrupt-parent: Specifies the phandle of the interrupt controller to which
|
||||
the IRQs from DA7218 are delivered to.
|
||||
- interrupts: IRQ line info for DA7218 chip.
|
||||
(See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for
|
||||
further information relating to interrupt properties)
|
||||
- interrupt-names : Name associated with interrupt line. Should be "wakeup" if
|
||||
interrupt is to be used to wake system, otherwise "irq" should be used.
|
||||
- wakeup-source: Flag to indicate this device can wake system (suspend/resume).
|
||||
|
||||
- clocks : phandle and clock specifier for codec MCLK.
|
||||
- clock-names : Clock name string for 'clocks' attribute, should be "mclk".
|
||||
|
||||
- dlg,micbias1-lvl-millivolt : Voltage (mV) for Mic Bias 1
|
||||
[<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>, <3000>]
|
||||
- dlg,micbias2-lvl-millivolt : Voltage (mV) for Mic Bias 2
|
||||
[<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>, <3000>]
|
||||
- dlg,mic1-amp-in-sel : Mic1 input source type
|
||||
["diff", "se_p", "se_n"]
|
||||
- dlg,mic2-amp-in-sel : Mic2 input source type
|
||||
["diff", "se_p", "se_n"]
|
||||
- dlg,dmic1-data-sel : DMIC1 channel select based on clock edge.
|
||||
["lrise_rfall", "lfall_rrise"]
|
||||
- dlg,dmic1-samplephase : When to sample audio from DMIC1.
|
||||
["on_clkedge", "between_clkedge"]
|
||||
- dlg,dmic1-clkrate-hz : DMic1 clock frequency (Hz).
|
||||
[<1500000>, <3000000>]
|
||||
- dlg,dmic2-data-sel : DMic2 channel select based on clock edge.
|
||||
["lrise_rfall", "lfall_rrise"]
|
||||
- dlg,dmic2-samplephase : When to sample audio from DMic2.
|
||||
["on_clkedge", "between_clkedge"]
|
||||
- dlg,dmic2-clkrate-hz : DMic2 clock frequency (Hz).
|
||||
[<1500000>, <3000000>]
|
||||
- dlg,hp-diff-single-supply : Boolean flag, use single supply for HP
|
||||
(DA7217 only)
|
||||
|
||||
======
|
||||
|
||||
Optional Child node - 'da7218_hpldet' (DA7218 only):
|
||||
|
||||
Optional properties:
|
||||
- dlg,jack-rate-us : Time between jack detect measurements (us)
|
||||
[<5>, <10>, <20>, <40>, <80>, <160>, <320>, <640>]
|
||||
- dlg,jack-debounce : Number of debounce measurements taken for jack detect
|
||||
[<0>, <2>, <3>, <4>]
|
||||
- dlg,jack-threshold-pct : Threshold level for jack detection (% of VDD)
|
||||
[<84>, <88>, <92>, <96>]
|
||||
- dlg,comp-inv : Boolean flag, invert comparator output
|
||||
- dlg,hyst : Boolean flag, enable hysteresis
|
||||
- dlg,discharge : Boolean flag, auto discharge of Mic Bias on jack removal
|
||||
|
||||
======
|
||||
|
||||
Example:
|
||||
|
||||
codec: da7218@1a {
|
||||
compatible = "dlg,da7218";
|
||||
reg = <0x1a>;
|
||||
interrupt-parent = <&gpio6>;
|
||||
interrupts = <11 IRQ_TYPE_LEVEL_HIGH>;
|
||||
wakeup-source;
|
||||
|
||||
VDD-supply = <®_audio>;
|
||||
VDDMIC-supply = <®_audio>;
|
||||
VDDIO-supply = <®_audio>;
|
||||
|
||||
clocks = <&clks 201>;
|
||||
clock-names = "mclk";
|
||||
|
||||
dlg,micbias1-lvl-millivolt = <2600>;
|
||||
dlg,micbias2-lvl-millivolt = <2600>;
|
||||
dlg,mic1-amp-in-sel = "diff";
|
||||
dlg,mic2-amp-in-sel = "diff";
|
||||
|
||||
dlg,dmic1-data-sel = "lrise_rfall";
|
||||
dlg,dmic1-samplephase = "on_clkedge";
|
||||
dlg,dmic1-clkrate-hz = <3000000>;
|
||||
dlg,dmic2-data-sel = "lrise_rfall";
|
||||
dlg,dmic2-samplephase = "on_clkedge";
|
||||
dlg,dmic2-clkrate-hz = <3000000>;
|
||||
|
||||
da7218_hpldet {
|
||||
dlg,jack-rate-us = <40>;
|
||||
dlg,jack-debounce = <2>;
|
||||
dlg,jack-threshold-pct = <84>;
|
||||
dlg,hyst;
|
||||
};
|
||||
};
|
109
include/sound/da7218.h
Normal file
109
include/sound/da7218.h
Normal file
@ -0,0 +1,109 @@
|
||||
/*
|
||||
* da7218.h - DA7218 ASoC Codec Driver Platform Data
|
||||
*
|
||||
* Copyright (c) 2015 Dialog Semiconductor
|
||||
*
|
||||
* Author: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef _DA7218_PDATA_H
|
||||
#define _DA7218_PDATA_H
|
||||
|
||||
/* Mic Bias */
|
||||
enum da7218_micbias_voltage {
|
||||
DA7218_MICBIAS_1_2V = -1,
|
||||
DA7218_MICBIAS_1_6V,
|
||||
DA7218_MICBIAS_1_8V,
|
||||
DA7218_MICBIAS_2_0V,
|
||||
DA7218_MICBIAS_2_2V,
|
||||
DA7218_MICBIAS_2_4V,
|
||||
DA7218_MICBIAS_2_6V,
|
||||
DA7218_MICBIAS_2_8V,
|
||||
DA7218_MICBIAS_3_0V,
|
||||
};
|
||||
|
||||
enum da7218_mic_amp_in_sel {
|
||||
DA7218_MIC_AMP_IN_SEL_DIFF = 0,
|
||||
DA7218_MIC_AMP_IN_SEL_SE_P,
|
||||
DA7218_MIC_AMP_IN_SEL_SE_N,
|
||||
};
|
||||
|
||||
/* DMIC */
|
||||
enum da7218_dmic_data_sel {
|
||||
DA7218_DMIC_DATA_LRISE_RFALL = 0,
|
||||
DA7218_DMIC_DATA_LFALL_RRISE,
|
||||
};
|
||||
|
||||
enum da7218_dmic_samplephase {
|
||||
DA7218_DMIC_SAMPLE_ON_CLKEDGE = 0,
|
||||
DA7218_DMIC_SAMPLE_BETWEEN_CLKEDGE,
|
||||
};
|
||||
|
||||
enum da7218_dmic_clk_rate {
|
||||
DA7218_DMIC_CLK_3_0MHZ = 0,
|
||||
DA7218_DMIC_CLK_1_5MHZ,
|
||||
};
|
||||
|
||||
/* Headphone Detect */
|
||||
enum da7218_hpldet_jack_rate {
|
||||
DA7218_HPLDET_JACK_RATE_5US = 0,
|
||||
DA7218_HPLDET_JACK_RATE_10US,
|
||||
DA7218_HPLDET_JACK_RATE_20US,
|
||||
DA7218_HPLDET_JACK_RATE_40US,
|
||||
DA7218_HPLDET_JACK_RATE_80US,
|
||||
DA7218_HPLDET_JACK_RATE_160US,
|
||||
DA7218_HPLDET_JACK_RATE_320US,
|
||||
DA7218_HPLDET_JACK_RATE_640US,
|
||||
};
|
||||
|
||||
enum da7218_hpldet_jack_debounce {
|
||||
DA7218_HPLDET_JACK_DEBOUNCE_OFF = 0,
|
||||
DA7218_HPLDET_JACK_DEBOUNCE_2,
|
||||
DA7218_HPLDET_JACK_DEBOUNCE_3,
|
||||
DA7218_HPLDET_JACK_DEBOUNCE_4,
|
||||
};
|
||||
|
||||
enum da7218_hpldet_jack_thr {
|
||||
DA7218_HPLDET_JACK_THR_84PCT = 0,
|
||||
DA7218_HPLDET_JACK_THR_88PCT,
|
||||
DA7218_HPLDET_JACK_THR_92PCT,
|
||||
DA7218_HPLDET_JACK_THR_96PCT,
|
||||
};
|
||||
|
||||
struct da7218_hpldet_pdata {
|
||||
enum da7218_hpldet_jack_rate jack_rate;
|
||||
enum da7218_hpldet_jack_debounce jack_debounce;
|
||||
enum da7218_hpldet_jack_thr jack_thr;
|
||||
bool comp_inv;
|
||||
bool hyst;
|
||||
bool discharge;
|
||||
};
|
||||
|
||||
struct da7218_pdata {
|
||||
/* Mic */
|
||||
enum da7218_micbias_voltage micbias1_lvl;
|
||||
enum da7218_micbias_voltage micbias2_lvl;
|
||||
enum da7218_mic_amp_in_sel mic1_amp_in_sel;
|
||||
enum da7218_mic_amp_in_sel mic2_amp_in_sel;
|
||||
|
||||
/* DMIC */
|
||||
enum da7218_dmic_data_sel dmic1_data_sel;
|
||||
enum da7218_dmic_data_sel dmic2_data_sel;
|
||||
enum da7218_dmic_samplephase dmic1_samplephase;
|
||||
enum da7218_dmic_samplephase dmic2_samplephase;
|
||||
enum da7218_dmic_clk_rate dmic1_clk_rate;
|
||||
enum da7218_dmic_clk_rate dmic2_clk_rate;
|
||||
|
||||
/* HP Diff Supply - DA7217 only */
|
||||
bool hp_diff_single_supply;
|
||||
|
||||
/* HP Detect - DA7218 only */
|
||||
struct da7218_hpldet_pdata *hpldet_pdata;
|
||||
};
|
||||
|
||||
#endif /* _DA7218_PDATA_H */
|
@ -106,7 +106,7 @@ static const struct snd_pcm_hardware atmel_classd_hw = {
|
||||
.rates = ATMEL_CLASSD_RATES,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 96000,
|
||||
.channels_min = 2,
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.buffer_bytes_max = 64 * 1024,
|
||||
.period_bytes_min = 256,
|
||||
@ -145,7 +145,7 @@ static const struct snd_soc_dai_ops atmel_classd_cpu_dai_ops = {
|
||||
|
||||
static struct snd_soc_dai_driver atmel_classd_cpu_dai = {
|
||||
.playback = {
|
||||
.channels_min = 2,
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = ATMEL_CLASSD_RATES,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,},
|
||||
@ -171,9 +171,13 @@ atmel_classd_platform_configure_dma(struct snd_pcm_substream *substream,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (params_channels(params) == 1)
|
||||
slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
|
||||
else
|
||||
slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
|
||||
|
||||
slave_config->direction = DMA_MEM_TO_DEV;
|
||||
slave_config->dst_addr = dd->phy_base + CLASSD_THR;
|
||||
slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
|
||||
slave_config->dst_maxburst = 1;
|
||||
slave_config->src_maxburst = 1;
|
||||
slave_config->device_fc = false;
|
||||
@ -486,7 +490,7 @@ static struct snd_soc_dai_driver atmel_classd_codec_dai = {
|
||||
.name = ATMEL_CLASSD_CODEC_DAI_NAME,
|
||||
.playback = {
|
||||
.stream_name = "Playback",
|
||||
.channels_min = 2,
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = ATMEL_CLASSD_RATES,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
|
@ -59,6 +59,7 @@ config SND_SOC_ALL_CODECS
|
||||
select SND_SOC_CX20442 if TTY
|
||||
select SND_SOC_DA7210 if SND_SOC_I2C_AND_SPI
|
||||
select SND_SOC_DA7213 if I2C
|
||||
select SND_SOC_DA7218 if I2C
|
||||
select SND_SOC_DA7219 if I2C
|
||||
select SND_SOC_DA732X if I2C
|
||||
select SND_SOC_DA9055 if I2C
|
||||
@ -450,6 +451,9 @@ config SND_SOC_DA7210
|
||||
config SND_SOC_DA7213
|
||||
tristate
|
||||
|
||||
config SND_SOC_DA7218
|
||||
tristate
|
||||
|
||||
config SND_SOC_DA7219
|
||||
tristate
|
||||
|
||||
|
@ -51,6 +51,7 @@ snd-soc-cs47l24-objs := cs47l24.o
|
||||
snd-soc-cx20442-objs := cx20442.o
|
||||
snd-soc-da7210-objs := da7210.o
|
||||
snd-soc-da7213-objs := da7213.o
|
||||
snd-soc-da7218-objs := da7218.o
|
||||
snd-soc-da7219-objs := da7219.o da7219-aad.o
|
||||
snd-soc-da732x-objs := da732x.o
|
||||
snd-soc-da9055-objs := da9055.o
|
||||
@ -250,6 +251,7 @@ obj-$(CONFIG_SND_SOC_CS47L24) += snd-soc-cs47l24.o
|
||||
obj-$(CONFIG_SND_SOC_CX20442) += snd-soc-cx20442.o
|
||||
obj-$(CONFIG_SND_SOC_DA7210) += snd-soc-da7210.o
|
||||
obj-$(CONFIG_SND_SOC_DA7213) += snd-soc-da7213.o
|
||||
obj-$(CONFIG_SND_SOC_DA7218) += snd-soc-da7218.o
|
||||
obj-$(CONFIG_SND_SOC_DA7219) += snd-soc-da7219.o
|
||||
obj-$(CONFIG_SND_SOC_DA732X) += snd-soc-da732x.o
|
||||
obj-$(CONFIG_SND_SOC_DA9055) += snd-soc-da9055.o
|
||||
|
3314
sound/soc/codecs/da7218.c
Normal file
3314
sound/soc/codecs/da7218.c
Normal file
File diff suppressed because it is too large
Load Diff
1414
sound/soc/codecs/da7218.h
Normal file
1414
sound/soc/codecs/da7218.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -62,6 +62,8 @@ int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
|
||||
|
||||
config = devm_kzalloc(&pdev->dev,
|
||||
sizeof(struct snd_dmaengine_pcm_config), GFP_KERNEL);
|
||||
if (!config)
|
||||
return -ENOMEM;
|
||||
*config = imx_dmaengine_pcm_config;
|
||||
if (size)
|
||||
config->prealloc_buffer_size = size;
|
||||
|
@ -377,6 +377,8 @@ static int sst_byt_pcm_probe(struct snd_soc_platform *platform)
|
||||
|
||||
priv_data = devm_kzalloc(platform->dev, sizeof(*priv_data),
|
||||
GFP_KERNEL);
|
||||
if (!priv_data)
|
||||
return -ENOMEM;
|
||||
priv_data->byt = plat_data->dsp;
|
||||
snd_soc_platform_set_drvdata(platform, priv_data);
|
||||
|
||||
|
@ -368,6 +368,8 @@ static int omap_hdmi_audio_probe(struct platform_device *pdev)
|
||||
card->owner = THIS_MODULE;
|
||||
card->dai_link =
|
||||
devm_kzalloc(dev, sizeof(*(card->dai_link)), GFP_KERNEL);
|
||||
if (!card->dai_link)
|
||||
return -ENOMEM;
|
||||
card->dai_link->name = card->name;
|
||||
card->dai_link->stream_name = card->name;
|
||||
card->dai_link->cpu_dai_name = dev_name(ad->dssdev);
|
||||
|
Loading…
Reference in New Issue
Block a user