Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38cfbc12 authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branches 'asoc/topic/atmel-classd', 'asoc/topic/const'...

Merge remote-tracking branches 'asoc/topic/atmel-classd', 'asoc/topic/const' and 'asoc/topic/da7218' into asoc-next
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
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 = <&reg_audio>;
		VDDMIC-supply = <&reg_audio>;
		VDDIO-supply = <&reg_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;
		};
	};

include/sound/da7218.h

0 → 100644
+109 −0
Original line number Diff line number Diff line
/*
 * 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 */
+8 −4
Original line number Diff line number Diff line
@@ -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,
+4 −0
Original line number Diff line number Diff line
@@ -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

Loading