All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/12] Add support for the audio codec on Allwinner V3s
@ 2017-03-05 13:36 ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:36 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

Allwinner V3s features a audio codec with dedicated digital and analog parts,
like the ones on A23/H3, but much simpler (lack of MIC2, LINE IN and MBIAS).

Add support for it.

In order to make the codec usable, DMA support is also added in this series;
the support of Lichee Pi Zero's dock board is also added here, as it's the
only board hackable that come with ports connected to the codec.

Patch 1~3 split out parts that is not available on V3s in the analog codec.

Patch 4/5 adds support for V3s in analog/digital codec.

Patch 6 add the gate bit as a common quirk of sun6i-dma driver, as V3s also
needs it.

Patch 7 really adds support for V3s in DMA engine.

Patch 8 restores the inclusion of CCU headers in the DTSI file of V3s, as
it's removed when merging.

Patch 9/10/11 adds three parts of V3s: DMA engine, codec support and pinmux
of mmc1 (used on Lichee Pi Zero dock).

Patch 12 adds support for Lichee Pi Zero dock, with support of mmc1 and
codec.

Icenowy Zheng (12):
  ASoC: sun8i-codec-analog: split out mic2
  ASoC: sun8i-codec-analog: split out line in
  ASoC: sun8i-codec-analog: split out mbias
  ASoC: sun8i-codec-analog: add support for V3s SoC
  ASoC: sun4i-codec: Add support for V3s codec
  dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
  dmaengine: sun6i: support V3s SoC variant
  ARM: dts: sun8i: restore the inclusion of ccu headers in V3s DTSI
  ARM: dts: sun8i: add DMA engine in V3s DTSI
  ARM: dts: sun8i: add audio codec support into V3s DTSI
  ARM: dts: sun8i: add pinmux for V3s mmc1
  ARM: dts: sun8i: add device tree for Lichee Pi Zero with Dock

 .../devicetree/bindings/dma/sun6i-dma.txt          |   1 +
 .../devicetree/bindings/sound/sun4i-codec.txt      |  11 +-
 .../bindings/sound/sun8i-codec-analog.txt          |   1 +
 arch/arm/boot/dts/Makefile                         |   3 +-
 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts |  67 +++++++
 arch/arm/boot/dts/sun8i-v3s.dtsi                   | 103 ++++++----
 drivers/dma/sun6i-dma.c                            |  22 ++-
 sound/soc/sunxi/sun4i-codec.c                      |  59 ++++++
 sound/soc/sunxi/sun8i-codec-analog.c               | 211 +++++++++++++++++----
 9 files changed, 405 insertions(+), 73 deletions(-)
 create mode 100644 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts

-- 
2.11.1

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [PATCH v2 00/12] Add support for the audio codec on Allwinner V3s
@ 2017-03-05 13:36 ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:36 UTC (permalink / raw)
  To: linux-arm-kernel

Allwinner V3s features a audio codec with dedicated digital and analog parts,
like the ones on A23/H3, but much simpler (lack of MIC2, LINE IN and MBIAS).

Add support for it.

In order to make the codec usable, DMA support is also added in this series;
the support of Lichee Pi Zero's dock board is also added here, as it's the
only board hackable that come with ports connected to the codec.

Patch 1~3 split out parts that is not available on V3s in the analog codec.

Patch 4/5 adds support for V3s in analog/digital codec.

Patch 6 add the gate bit as a common quirk of sun6i-dma driver, as V3s also
needs it.

Patch 7 really adds support for V3s in DMA engine.

Patch 8 restores the inclusion of CCU headers in the DTSI file of V3s, as
it's removed when merging.

Patch 9/10/11 adds three parts of V3s: DMA engine, codec support and pinmux
of mmc1 (used on Lichee Pi Zero dock).

Patch 12 adds support for Lichee Pi Zero dock, with support of mmc1 and
codec.

Icenowy Zheng (12):
  ASoC: sun8i-codec-analog: split out mic2
  ASoC: sun8i-codec-analog: split out line in
  ASoC: sun8i-codec-analog: split out mbias
  ASoC: sun8i-codec-analog: add support for V3s SoC
  ASoC: sun4i-codec: Add support for V3s codec
  dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
  dmaengine: sun6i: support V3s SoC variant
  ARM: dts: sun8i: restore the inclusion of ccu headers in V3s DTSI
  ARM: dts: sun8i: add DMA engine in V3s DTSI
  ARM: dts: sun8i: add audio codec support into V3s DTSI
  ARM: dts: sun8i: add pinmux for V3s mmc1
  ARM: dts: sun8i: add device tree for Lichee Pi Zero with Dock

 .../devicetree/bindings/dma/sun6i-dma.txt          |   1 +
 .../devicetree/bindings/sound/sun4i-codec.txt      |  11 +-
 .../bindings/sound/sun8i-codec-analog.txt          |   1 +
 arch/arm/boot/dts/Makefile                         |   3 +-
 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts |  67 +++++++
 arch/arm/boot/dts/sun8i-v3s.dtsi                   | 103 ++++++----
 drivers/dma/sun6i-dma.c                            |  22 ++-
 sound/soc/sunxi/sun4i-codec.c                      |  59 ++++++
 sound/soc/sunxi/sun8i-codec-analog.c               | 211 +++++++++++++++++----
 9 files changed, 405 insertions(+), 73 deletions(-)
 create mode 100644 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts

-- 
2.11.1

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [PATCH v2 01/12] ASoC: sun8i-codec-analog: split out mic2
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:36     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:36 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

Allwinner V3s features an analog codec without MIC2.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 92 +++++++++++++++++++++++++++++-------
 1 file changed, 76 insertions(+), 16 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index 72331332b72e..b95ff045cd7f 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -259,17 +259,11 @@ static const struct snd_kcontrol_new sun8i_codec_common_controls[] = {
 	SOC_SINGLE_TLV("Mic1 Playback Volume", SUN8I_ADDA_MICIN_GCTRL,
 		       SUN8I_ADDA_MICIN_GCTRL_MIC1G,
 		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
-	SOC_SINGLE_TLV("Mic2 Playback Volume",
-		       SUN8I_ADDA_MICIN_GCTRL, SUN8I_ADDA_MICIN_GCTRL_MIC2G,
-		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
 
-	/* Microphone Amp boost gains */
+	/* Microphone Amp boost gain */
 	SOC_SINGLE_TLV("Mic1 Boost Volume", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 		       SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1BOOST, 0x7, 0,
 		       sun8i_codec_mic_gain_scale),
-	SOC_SINGLE_TLV("Mic2 Boost Volume", SUN8I_ADDA_MIC2G_CTRL,
-		       SUN8I_ADDA_MIC2G_CTRL_MIC2BOOST, 0x7, 0,
-		       sun8i_codec_mic_gain_scale),
 
 	/* ADC */
 	SOC_SINGLE_TLV("ADC Gain Capture Volume", SUN8I_ADDA_ADC_AP_EN,
@@ -298,9 +292,8 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Line In */
 	SND_SOC_DAPM_INPUT("LINEIN"),
 
-	/* Microphone inputs */
+	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
-	SND_SOC_DAPM_INPUT("MIC2"),
 
 	/* Microphone Bias */
 	SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
@@ -310,8 +303,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Mic input path */
 	SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 			 SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
-	SND_SOC_DAPM_PGA("Mic2 Amplifier", SUN8I_ADDA_MIC2G_CTRL,
-			 SUN8I_ADDA_MIC2G_CTRL_MIC2AMPEN, 0, NULL, 0),
 
 	/* Mixers */
 	SND_SOC_DAPM_MIXER("Left Mixer", SUN8I_ADDA_DAC_PA_SRC,
@@ -335,35 +326,30 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = {
 	/* Microphone Routes */
 	{ "Mic1 Amplifier", NULL, "MIC1"},
-	{ "Mic2 Amplifier", NULL, "MIC2"},
 
 	/* Left Mixer Routes */
 	{ "Left Mixer", "DAC Playback Switch", "Left DAC" },
 	{ "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" },
 	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Left Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
-	{ "Left Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
 
 	/* Right Mixer Routes */
 	{ "Right Mixer", "DAC Playback Switch", "Right DAC" },
 	{ "Right Mixer", "DAC Reversed Playback Switch", "Left DAC" },
 	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Right Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
-	{ "Right Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
 
 	/* Left ADC Mixer Routes */
 	{ "Left ADC Mixer", "Mixer Capture Switch", "Left Mixer" },
 	{ "Left ADC Mixer", "Mixer Reversed Capture Switch", "Right Mixer" },
 	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Left ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
-	{ "Left ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
 
 	/* Right ADC Mixer Routes */
 	{ "Right ADC Mixer", "Mixer Capture Switch", "Right Mixer" },
 	{ "Right ADC Mixer", "Mixer Reversed Capture Switch", "Left Mixer" },
 	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Right ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
-	{ "Right ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
 
 	/* ADC Routes */
 	{ "Left ADC", NULL, "Left ADC Mixer" },
@@ -578,19 +564,87 @@ static int sun8i_codec_add_lineout(struct snd_soc_component *cmpnt)
 	return 0;
 }
 
+/* mic2 specific controls, widgets and routes */
+static const struct snd_kcontrol_new sun8i_codec_mic2_controls[] = {
+	/* Mixer pre-gain */
+	SOC_SINGLE_TLV("Mic2 Playback Volume",
+		       SUN8I_ADDA_MICIN_GCTRL, SUN8I_ADDA_MICIN_GCTRL_MIC2G,
+		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+
+	/* Microphone Amp boost gain */
+	SOC_SINGLE_TLV("Mic2 Boost Volume", SUN8I_ADDA_MIC2G_CTRL,
+		       SUN8I_ADDA_MIC2G_CTRL_MIC2BOOST, 0x7, 0,
+		       sun8i_codec_mic_gain_scale),
+};
+
+static const struct snd_soc_dapm_widget sun8i_codec_mic2_widgets[] = {
+	/* Microphone input */
+	SND_SOC_DAPM_INPUT("MIC2"),
+
+	/* Mic input path */
+	SND_SOC_DAPM_PGA("Mic2 Amplifier", SUN8I_ADDA_MIC2G_CTRL,
+			 SUN8I_ADDA_MIC2G_CTRL_MIC2AMPEN, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_route sun8i_codec_mic2_routes[] = {
+	{ "Mic2 Amplifier", NULL, "MIC2"},
+
+	{ "Left Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
+
+	{ "Right Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
+
+	{ "Left ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
+
+	{ "Right ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
+};
+
+static int sun8i_codec_add_mic2(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_add_component_controls(cmpnt,
+					     sun8i_codec_mic2_controls,
+					     ARRAY_SIZE(sun8i_codec_mic2_controls));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 controls: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mic2_widgets,
+					ARRAY_SIZE(sun8i_codec_mic2_widgets));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 DAPM widgets: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_add_routes(dapm, sun8i_codec_mic2_routes,
+				      ARRAY_SIZE(sun8i_codec_mic2_routes));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 DAPM routes: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
 struct sun8i_codec_analog_quirks {
 	bool has_headphone;
 	bool has_hmic;
 	bool has_lineout;
+	bool has_mic2;
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
+	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
 	.has_lineout	= true,
+	.has_mic2	= true,
 };
 
 static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
@@ -626,6 +680,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_mic2) {
+		ret = sun8i_codec_add_mic2(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	return 0;
 }
 
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 01/12] ASoC: sun8i-codec-analog: split out mic2
@ 2017-03-05 13:36     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:36 UTC (permalink / raw)
  To: linux-arm-kernel

Allwinner V3s features an analog codec without MIC2.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 92 +++++++++++++++++++++++++++++-------
 1 file changed, 76 insertions(+), 16 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index 72331332b72e..b95ff045cd7f 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -259,17 +259,11 @@ static const struct snd_kcontrol_new sun8i_codec_common_controls[] = {
 	SOC_SINGLE_TLV("Mic1 Playback Volume", SUN8I_ADDA_MICIN_GCTRL,
 		       SUN8I_ADDA_MICIN_GCTRL_MIC1G,
 		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
-	SOC_SINGLE_TLV("Mic2 Playback Volume",
-		       SUN8I_ADDA_MICIN_GCTRL, SUN8I_ADDA_MICIN_GCTRL_MIC2G,
-		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
 
-	/* Microphone Amp boost gains */
+	/* Microphone Amp boost gain */
 	SOC_SINGLE_TLV("Mic1 Boost Volume", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 		       SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1BOOST, 0x7, 0,
 		       sun8i_codec_mic_gain_scale),
-	SOC_SINGLE_TLV("Mic2 Boost Volume", SUN8I_ADDA_MIC2G_CTRL,
-		       SUN8I_ADDA_MIC2G_CTRL_MIC2BOOST, 0x7, 0,
-		       sun8i_codec_mic_gain_scale),
 
 	/* ADC */
 	SOC_SINGLE_TLV("ADC Gain Capture Volume", SUN8I_ADDA_ADC_AP_EN,
@@ -298,9 +292,8 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Line In */
 	SND_SOC_DAPM_INPUT("LINEIN"),
 
-	/* Microphone inputs */
+	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
-	SND_SOC_DAPM_INPUT("MIC2"),
 
 	/* Microphone Bias */
 	SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
@@ -310,8 +303,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Mic input path */
 	SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 			 SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
-	SND_SOC_DAPM_PGA("Mic2 Amplifier", SUN8I_ADDA_MIC2G_CTRL,
-			 SUN8I_ADDA_MIC2G_CTRL_MIC2AMPEN, 0, NULL, 0),
 
 	/* Mixers */
 	SND_SOC_DAPM_MIXER("Left Mixer", SUN8I_ADDA_DAC_PA_SRC,
@@ -335,35 +326,30 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = {
 	/* Microphone Routes */
 	{ "Mic1 Amplifier", NULL, "MIC1"},
-	{ "Mic2 Amplifier", NULL, "MIC2"},
 
 	/* Left Mixer Routes */
 	{ "Left Mixer", "DAC Playback Switch", "Left DAC" },
 	{ "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" },
 	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Left Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
-	{ "Left Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
 
 	/* Right Mixer Routes */
 	{ "Right Mixer", "DAC Playback Switch", "Right DAC" },
 	{ "Right Mixer", "DAC Reversed Playback Switch", "Left DAC" },
 	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Right Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
-	{ "Right Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
 
 	/* Left ADC Mixer Routes */
 	{ "Left ADC Mixer", "Mixer Capture Switch", "Left Mixer" },
 	{ "Left ADC Mixer", "Mixer Reversed Capture Switch", "Right Mixer" },
 	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Left ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
-	{ "Left ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
 
 	/* Right ADC Mixer Routes */
 	{ "Right ADC Mixer", "Mixer Capture Switch", "Right Mixer" },
 	{ "Right ADC Mixer", "Mixer Reversed Capture Switch", "Left Mixer" },
 	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Right ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
-	{ "Right ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
 
 	/* ADC Routes */
 	{ "Left ADC", NULL, "Left ADC Mixer" },
@@ -578,19 +564,87 @@ static int sun8i_codec_add_lineout(struct snd_soc_component *cmpnt)
 	return 0;
 }
 
+/* mic2 specific controls, widgets and routes */
+static const struct snd_kcontrol_new sun8i_codec_mic2_controls[] = {
+	/* Mixer pre-gain */
+	SOC_SINGLE_TLV("Mic2 Playback Volume",
+		       SUN8I_ADDA_MICIN_GCTRL, SUN8I_ADDA_MICIN_GCTRL_MIC2G,
+		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+
+	/* Microphone Amp boost gain */
+	SOC_SINGLE_TLV("Mic2 Boost Volume", SUN8I_ADDA_MIC2G_CTRL,
+		       SUN8I_ADDA_MIC2G_CTRL_MIC2BOOST, 0x7, 0,
+		       sun8i_codec_mic_gain_scale),
+};
+
+static const struct snd_soc_dapm_widget sun8i_codec_mic2_widgets[] = {
+	/* Microphone input */
+	SND_SOC_DAPM_INPUT("MIC2"),
+
+	/* Mic input path */
+	SND_SOC_DAPM_PGA("Mic2 Amplifier", SUN8I_ADDA_MIC2G_CTRL,
+			 SUN8I_ADDA_MIC2G_CTRL_MIC2AMPEN, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_route sun8i_codec_mic2_routes[] = {
+	{ "Mic2 Amplifier", NULL, "MIC2"},
+
+	{ "Left Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
+
+	{ "Right Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
+
+	{ "Left ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
+
+	{ "Right ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
+};
+
+static int sun8i_codec_add_mic2(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_add_component_controls(cmpnt,
+					     sun8i_codec_mic2_controls,
+					     ARRAY_SIZE(sun8i_codec_mic2_controls));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 controls: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mic2_widgets,
+					ARRAY_SIZE(sun8i_codec_mic2_widgets));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 DAPM widgets: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_add_routes(dapm, sun8i_codec_mic2_routes,
+				      ARRAY_SIZE(sun8i_codec_mic2_routes));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 DAPM routes: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
 struct sun8i_codec_analog_quirks {
 	bool has_headphone;
 	bool has_hmic;
 	bool has_lineout;
+	bool has_mic2;
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
+	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
 	.has_lineout	= true,
+	.has_mic2	= true,
 };
 
 static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
@@ -626,6 +680,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_mic2) {
+		ret = sun8i_codec_add_mic2(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	return 0;
 }
 
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 02/12] ASoC: sun8i-codec-analog: split out line in
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:36     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:36 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

Allwinner V3s features an analog codec without LINEIN.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 76 ++++++++++++++++++++++++++++++------
 1 file changed, 65 insertions(+), 11 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index b95ff045cd7f..6c17c99c2c8d 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -252,10 +252,7 @@ static const DECLARE_TLV_DB_RANGE(sun8i_codec_mic_gain_scale,
 );
 
 static const struct snd_kcontrol_new sun8i_codec_common_controls[] = {
-	/* Mixer pre-gains */
-	SOC_SINGLE_TLV("Line In Playback Volume", SUN8I_ADDA_LINEIN_GCTRL,
-		       SUN8I_ADDA_LINEIN_GCTRL_LINEING,
-		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+	/* Mixer pre-gain */
 	SOC_SINGLE_TLV("Mic1 Playback Volume", SUN8I_ADDA_MICIN_GCTRL,
 		       SUN8I_ADDA_MICIN_GCTRL_MIC1G,
 		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
@@ -289,9 +286,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	 * stream widgets at the card level.
 	 */
 
-	/* Line In */
-	SND_SOC_DAPM_INPUT("LINEIN"),
-
 	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
 
@@ -330,25 +324,21 @@ static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = {
 	/* Left Mixer Routes */
 	{ "Left Mixer", "DAC Playback Switch", "Left DAC" },
 	{ "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" },
-	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Left Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
 
 	/* Right Mixer Routes */
 	{ "Right Mixer", "DAC Playback Switch", "Right DAC" },
 	{ "Right Mixer", "DAC Reversed Playback Switch", "Left DAC" },
-	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Right Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
 
 	/* Left ADC Mixer Routes */
 	{ "Left ADC Mixer", "Mixer Capture Switch", "Left Mixer" },
 	{ "Left ADC Mixer", "Mixer Reversed Capture Switch", "Right Mixer" },
-	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Left ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
 
 	/* Right ADC Mixer Routes */
 	{ "Right ADC Mixer", "Mixer Capture Switch", "Right Mixer" },
 	{ "Right ADC Mixer", "Mixer Reversed Capture Switch", "Left Mixer" },
-	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Right ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
 
 	/* ADC Routes */
@@ -484,6 +474,61 @@ static int sun8i_codec_add_hmic(struct snd_soc_component *cmpnt)
 	return ret;
 }
 
+/* line in specific controls, widgets and rines */
+static const struct snd_kcontrol_new sun8i_codec_linein_controls[] = {
+	/* Mixer pre-gain */
+	SOC_SINGLE_TLV("Line In Playback Volume", SUN8I_ADDA_LINEIN_GCTRL,
+		       SUN8I_ADDA_LINEIN_GCTRL_LINEING,
+		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+};
+
+static const struct snd_soc_dapm_widget sun8i_codec_linein_widgets[] = {
+	/* Line input */
+	SND_SOC_DAPM_INPUT("LINEIN"),
+};
+
+static const struct snd_soc_dapm_route sun8i_codec_linein_routes[] = {
+	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
+
+	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
+
+	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
+
+	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
+};
+
+static int sun8i_codec_add_linein(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_add_component_controls(cmpnt,
+					     sun8i_codec_linein_controls,
+					     ARRAY_SIZE(sun8i_codec_linein_controls));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In controls: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_linein_widgets,
+					ARRAY_SIZE(sun8i_codec_linein_widgets));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In DAPM widgets: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_add_routes(dapm, sun8i_codec_linein_routes,
+				      ARRAY_SIZE(sun8i_codec_linein_routes));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In DAPM routes: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+
 /* line out specific controls, widgets and routes */
 static const DECLARE_TLV_DB_RANGE(sun8i_codec_lineout_vol_scale,
 	0, 1, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
@@ -632,6 +677,7 @@ static int sun8i_codec_add_mic2(struct snd_soc_component *cmpnt)
 struct sun8i_codec_analog_quirks {
 	bool has_headphone;
 	bool has_hmic;
+	bool has_linein;
 	bool has_lineout;
 	bool has_mic2;
 };
@@ -639,10 +685,12 @@ struct sun8i_codec_analog_quirks {
 static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
+	.has_linein	= true,
 	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
+	.has_linein	= true,
 	.has_lineout	= true,
 	.has_mic2	= true,
 };
@@ -674,6 +722,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_linein) {
+		ret = sun8i_codec_add_linein(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	if (quirks->has_lineout) {
 		ret = sun8i_codec_add_lineout(cmpnt);
 		if (ret)
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 02/12] ASoC: sun8i-codec-analog: split out line in
@ 2017-03-05 13:36     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:36 UTC (permalink / raw)
  To: linux-arm-kernel

Allwinner V3s features an analog codec without LINEIN.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 76 ++++++++++++++++++++++++++++++------
 1 file changed, 65 insertions(+), 11 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index b95ff045cd7f..6c17c99c2c8d 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -252,10 +252,7 @@ static const DECLARE_TLV_DB_RANGE(sun8i_codec_mic_gain_scale,
 );
 
 static const struct snd_kcontrol_new sun8i_codec_common_controls[] = {
-	/* Mixer pre-gains */
-	SOC_SINGLE_TLV("Line In Playback Volume", SUN8I_ADDA_LINEIN_GCTRL,
-		       SUN8I_ADDA_LINEIN_GCTRL_LINEING,
-		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+	/* Mixer pre-gain */
 	SOC_SINGLE_TLV("Mic1 Playback Volume", SUN8I_ADDA_MICIN_GCTRL,
 		       SUN8I_ADDA_MICIN_GCTRL_MIC1G,
 		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
@@ -289,9 +286,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	 * stream widgets at the card level.
 	 */
 
-	/* Line In */
-	SND_SOC_DAPM_INPUT("LINEIN"),
-
 	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
 
@@ -330,25 +324,21 @@ static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = {
 	/* Left Mixer Routes */
 	{ "Left Mixer", "DAC Playback Switch", "Left DAC" },
 	{ "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" },
-	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Left Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
 
 	/* Right Mixer Routes */
 	{ "Right Mixer", "DAC Playback Switch", "Right DAC" },
 	{ "Right Mixer", "DAC Reversed Playback Switch", "Left DAC" },
-	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Right Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
 
 	/* Left ADC Mixer Routes */
 	{ "Left ADC Mixer", "Mixer Capture Switch", "Left Mixer" },
 	{ "Left ADC Mixer", "Mixer Reversed Capture Switch", "Right Mixer" },
-	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Left ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
 
 	/* Right ADC Mixer Routes */
 	{ "Right ADC Mixer", "Mixer Capture Switch", "Right Mixer" },
 	{ "Right ADC Mixer", "Mixer Reversed Capture Switch", "Left Mixer" },
-	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Right ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
 
 	/* ADC Routes */
@@ -484,6 +474,61 @@ static int sun8i_codec_add_hmic(struct snd_soc_component *cmpnt)
 	return ret;
 }
 
+/* line in specific controls, widgets and rines */
+static const struct snd_kcontrol_new sun8i_codec_linein_controls[] = {
+	/* Mixer pre-gain */
+	SOC_SINGLE_TLV("Line In Playback Volume", SUN8I_ADDA_LINEIN_GCTRL,
+		       SUN8I_ADDA_LINEIN_GCTRL_LINEING,
+		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+};
+
+static const struct snd_soc_dapm_widget sun8i_codec_linein_widgets[] = {
+	/* Line input */
+	SND_SOC_DAPM_INPUT("LINEIN"),
+};
+
+static const struct snd_soc_dapm_route sun8i_codec_linein_routes[] = {
+	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
+
+	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
+
+	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
+
+	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
+};
+
+static int sun8i_codec_add_linein(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_add_component_controls(cmpnt,
+					     sun8i_codec_linein_controls,
+					     ARRAY_SIZE(sun8i_codec_linein_controls));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In controls: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_linein_widgets,
+					ARRAY_SIZE(sun8i_codec_linein_widgets));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In DAPM widgets: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_add_routes(dapm, sun8i_codec_linein_routes,
+				      ARRAY_SIZE(sun8i_codec_linein_routes));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In DAPM routes: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+
 /* line out specific controls, widgets and routes */
 static const DECLARE_TLV_DB_RANGE(sun8i_codec_lineout_vol_scale,
 	0, 1, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
@@ -632,6 +677,7 @@ static int sun8i_codec_add_mic2(struct snd_soc_component *cmpnt)
 struct sun8i_codec_analog_quirks {
 	bool has_headphone;
 	bool has_hmic;
+	bool has_linein;
 	bool has_lineout;
 	bool has_mic2;
 };
@@ -639,10 +685,12 @@ struct sun8i_codec_analog_quirks {
 static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
+	.has_linein	= true,
 	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
+	.has_linein	= true,
 	.has_lineout	= true,
 	.has_mic2	= true,
 };
@@ -674,6 +722,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_linein) {
+		ret = sun8i_codec_add_linein(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	if (quirks->has_lineout) {
 		ret = sun8i_codec_add_lineout(cmpnt);
 		if (ret)
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 03/12] ASoC: sun8i-codec-analog: split out mbias
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:37     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

Allwinner V3s features an analog codec without MBIAS pin.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 34 +++++++++++++++++++++++++++++-----
 1 file changed, 29 insertions(+), 5 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index 6c17c99c2c8d..af56afe5c403 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -289,11 +289,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
 
-	/* Microphone Bias */
-	SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
-			    SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
-			    0, NULL, 0),
-
 	/* Mic input path */
 	SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 			 SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
@@ -453,6 +448,27 @@ static int sun8i_codec_add_headphone(struct snd_soc_component *cmpnt)
 	return 0;
 }
 
+/* mbias specific widget */
+static const struct snd_soc_dapm_widget sun8i_codec_mbias_widgets[] = {
+	SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
+			    SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
+			    0, NULL, 0),
+};
+
+static int sun8i_codec_add_mbias(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mbias_widgets,
+					ARRAY_SIZE(sun8i_codec_mbias_widgets));
+	if (ret)
+		dev_err(dev, "Failed to add MBIAS DAPM widgets: %d\n", ret);
+
+	return ret;
+}
+
 /* hmic specific widget */
 static const struct snd_soc_dapm_widget sun8i_codec_hmic_widgets[] = {
 	SND_SOC_DAPM_SUPPLY("HBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
@@ -686,12 +702,14 @@ static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
 	.has_linein	= true,
+	.has_mbias	= true,
 	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
 	.has_linein	= true,
 	.has_lineout	= true,
+	.has_mbias	= true,
 	.has_mic2	= true,
 };
 
@@ -734,6 +752,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_mbias) {
+		ret = sun8i_codec_add_mbias(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	if (quirks->has_mic2) {
 		ret = sun8i_codec_add_mic2(cmpnt);
 		if (ret)
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 03/12] ASoC: sun8i-codec-analog: split out mbias
@ 2017-03-05 13:37     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: linux-arm-kernel

Allwinner V3s features an analog codec without MBIAS pin.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 34 +++++++++++++++++++++++++++++-----
 1 file changed, 29 insertions(+), 5 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index 6c17c99c2c8d..af56afe5c403 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -289,11 +289,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
 
-	/* Microphone Bias */
-	SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
-			    SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
-			    0, NULL, 0),
-
 	/* Mic input path */
 	SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 			 SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
@@ -453,6 +448,27 @@ static int sun8i_codec_add_headphone(struct snd_soc_component *cmpnt)
 	return 0;
 }
 
+/* mbias specific widget */
+static const struct snd_soc_dapm_widget sun8i_codec_mbias_widgets[] = {
+	SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
+			    SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
+			    0, NULL, 0),
+};
+
+static int sun8i_codec_add_mbias(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mbias_widgets,
+					ARRAY_SIZE(sun8i_codec_mbias_widgets));
+	if (ret)
+		dev_err(dev, "Failed to add MBIAS DAPM widgets: %d\n", ret);
+
+	return ret;
+}
+
 /* hmic specific widget */
 static const struct snd_soc_dapm_widget sun8i_codec_hmic_widgets[] = {
 	SND_SOC_DAPM_SUPPLY("HBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
@@ -686,12 +702,14 @@ static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
 	.has_linein	= true,
+	.has_mbias	= true,
 	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
 	.has_linein	= true,
 	.has_lineout	= true,
+	.has_mbias	= true,
 	.has_mic2	= true,
 };
 
@@ -734,6 +752,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_mbias) {
+		ret = sun8i_codec_add_mbias(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	if (quirks->has_mic2) {
 		ret = sun8i_codec_add_mic2(cmpnt);
 		if (ret)
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 04/12] ASoC: sun8i-codec-analog: add support for V3s SoC
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:37     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

The V3s SoC features an analog codec with headphone support but without
mic2 and linein.

Add support for it.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt | 1 +
 sound/soc/sunxi/sun8i-codec-analog.c                           | 9 +++++++++
 2 files changed, 10 insertions(+)

diff --git a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
index 779b735781ba..1b6e7c4e50ab 100644
--- a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
+++ b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
@@ -4,6 +4,7 @@ Required properties:
 - compatible: must be one of the following compatibles:
 		- "allwinner,sun8i-a23-codec-analog"
 		- "allwinner,sun8i-h3-codec-analog"
+		- "allwinner,sun8i-v3s-codec-analog"
 
 Required properties if not a sub-node of the PRCM node:
 - reg: must contain the registers location and length
diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index af56afe5c403..d87c75c6ad8e 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -713,6 +713,11 @@ static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
 	.has_mic2	= true,
 };
 
+static const struct sun8i_codec_analog_quirks sun8i_v3s_quirks = {
+	.has_headphone	= true,
+	.has_hmic	= true,
+};
+
 static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 {
 	struct device *dev = cmpnt->dev;
@@ -786,6 +791,10 @@ static const struct of_device_id sun8i_codec_analog_of_match[] = {
 		.compatible = "allwinner,sun8i-h3-codec-analog",
 		.data = &sun8i_h3_quirks,
 	},
+	{
+		.compatible = "allwinner,sun8i-v3s-codec-analog",
+		.data = &sun8i_v3s_quirks,
+	},
 	{}
 };
 MODULE_DEVICE_TABLE(of, sun8i_codec_analog_of_match);
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 04/12] ASoC: sun8i-codec-analog: add support for V3s SoC
@ 2017-03-05 13:37     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: linux-arm-kernel

The V3s SoC features an analog codec with headphone support but without
mic2 and linein.

Add support for it.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt | 1 +
 sound/soc/sunxi/sun8i-codec-analog.c                           | 9 +++++++++
 2 files changed, 10 insertions(+)

diff --git a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
index 779b735781ba..1b6e7c4e50ab 100644
--- a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
+++ b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
@@ -4,6 +4,7 @@ Required properties:
 - compatible: must be one of the following compatibles:
 		- "allwinner,sun8i-a23-codec-analog"
 		- "allwinner,sun8i-h3-codec-analog"
+		- "allwinner,sun8i-v3s-codec-analog"
 
 Required properties if not a sub-node of the PRCM node:
 - reg: must contain the registers location and length
diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index af56afe5c403..d87c75c6ad8e 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -713,6 +713,11 @@ static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
 	.has_mic2	= true,
 };
 
+static const struct sun8i_codec_analog_quirks sun8i_v3s_quirks = {
+	.has_headphone	= true,
+	.has_hmic	= true,
+};
+
 static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 {
 	struct device *dev = cmpnt->dev;
@@ -786,6 +791,10 @@ static const struct of_device_id sun8i_codec_analog_of_match[] = {
 		.compatible = "allwinner,sun8i-h3-codec-analog",
 		.data = &sun8i_h3_quirks,
 	},
+	{
+		.compatible = "allwinner,sun8i-v3s-codec-analog",
+		.data = &sun8i_v3s_quirks,
+	},
 	{}
 };
 MODULE_DEVICE_TABLE(of, sun8i_codec_analog_of_match);
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 05/12] ASoC: sun4i-codec: Add support for V3s codec
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:37     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

The codec in the V3s is similar to the one found on the A31. One key
difference is the analog path controls are routed through the PRCM
block. This is supported by the sun8i-codec-analog driver, and tied
into this codec driver with the audio card's aux_dev.

In addition, the V3s does not have LINEIN, LINEOUT, MBIAS and MIC2,
MIC3, and the FIFO related registers are like H3.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 .../devicetree/bindings/sound/sun4i-codec.txt      | 11 ++--
 sound/soc/sunxi/sun4i-codec.c                      | 59 ++++++++++++++++++++++
 2 files changed, 66 insertions(+), 4 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
index 3863531d1e6d..2d4e10deb6f4 100644
--- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt
+++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
@@ -7,6 +7,7 @@ Required properties:
 		- "allwinner,sun7i-a20-codec"
 		- "allwinner,sun8i-a23-codec"
 		- "allwinner,sun8i-h3-codec"
+		- "allwinner,sun8i-v3s-codec"
 - reg: must contain the registers location and length
 - interrupts: must contain the codec interrupt
 - dmas: DMA channels for tx and rx dma. See the DMA client binding,
@@ -25,6 +26,7 @@ Required properties for the following compatibles:
 		- "allwinner,sun6i-a31-codec"
 		- "allwinner,sun8i-a23-codec"
 		- "allwinner,sun8i-h3-codec"
+		- "allwinner,sun8i-v3s-codec"
 - resets: phandle to the reset control for this device
 - allwinner,audio-routing: A list of the connections between audio components.
 			   Each entry is a pair of strings, the first being the
@@ -34,15 +36,15 @@ Required properties for the following compatibles:
 			   Audio pins on the SoC:
 			   "HP"
 			   "HPCOM"
-			   "LINEIN"
-			   "LINEOUT"	(not on sun8i-a23)
+			   "LINEIN"	(not on sun8i-v3s)
+			   "LINEOUT"	(not on sun8i-a23 or sun8i-v3s)
 			   "MIC1"
-			   "MIC2"
+			   "MIC2"	(not on sun8i-v3s)
 			   "MIC3"	(sun6i-a31 only)
 
 			   Microphone biases from the SoC:
 			   "HBIAS"
-			   "MBIAS"
+			   "MBIAS"	(not on sun8i-v3s)
 
 			   Board connectors:
 			   "Headphone"
@@ -55,6 +57,7 @@ Required properties for the following compatibles:
 Required properties for the following compatibles:
 		- "allwinner,sun8i-a23-codec"
 		- "allwinner,sun8i-h3-codec"
+		- "allwinner,sun8i-v3s-codec"
 - allwinner,codec-analog-controls: A phandle to the codec analog controls
 				   block in the PRCM.
 
diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
index c3aab10fa085..7f1b1aa95e0b 100644
--- a/sound/soc/sunxi/sun4i-codec.c
+++ b/sound/soc/sunxi/sun4i-codec.c
@@ -1339,6 +1339,44 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)
 	return card;
 };
 
+static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)
+{
+	struct snd_soc_card *card;
+	int ret;
+
+	card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
+	if (!card)
+		return ERR_PTR(-ENOMEM);
+
+	aux_dev.codec_of_node = of_parse_phandle(dev->of_node,
+						 "allwinner,codec-analog-controls",
+						 0);
+	if (!aux_dev.codec_of_node) {
+		dev_err(dev, "Can't find analog controls for codec.\n");
+		return ERR_PTR(-EINVAL);
+	};
+
+	card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
+	if (!card->dai_link)
+		return ERR_PTR(-ENOMEM);
+
+	card->dev		= dev;
+	card->name		= "V3s Audio Codec";
+	card->dapm_widgets	= sun6i_codec_card_dapm_widgets;
+	card->num_dapm_widgets	= ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
+	card->dapm_routes	= sun8i_codec_card_routes;
+	card->num_dapm_routes	= ARRAY_SIZE(sun8i_codec_card_routes);
+	card->aux_dev		= &aux_dev;
+	card->num_aux_devs	= 1;
+	card->fully_routed	= true;
+
+	ret = snd_soc_of_parse_audio_routing(card, "allwinner,audio-routing");
+	if (ret)
+		dev_warn(dev, "failed to parse audio-routing: %d\n", ret);
+
+	return card;
+};
+
 static const struct regmap_config sun4i_codec_regmap_config = {
 	.reg_bits	= 32,
 	.reg_stride	= 4,
@@ -1374,6 +1412,13 @@ static const struct regmap_config sun8i_h3_codec_regmap_config = {
 	.max_register	= SUN8I_H3_CODEC_ADC_DBG,
 };
 
+static const struct regmap_config sun8i_v3s_codec_regmap_config = {
+	.reg_bits	= 32,
+	.reg_stride	= 4,
+	.val_bits	= 32,
+	.max_register	= SUN6I_CODEC_HMIC_DATA,
+};
+
 struct sun4i_codec_quirks {
 	const struct regmap_config *regmap_config;
 	const struct snd_soc_codec_driver *codec;
@@ -1422,6 +1467,16 @@ static const struct sun4i_codec_quirks sun8i_a23_codec_quirks = {
 	.has_reset	= true,
 };
 
+static const struct sun4i_codec_quirks sun8i_v3s_codec_quirks = {
+	.regmap_config	= &sun8i_v3s_codec_regmap_config,
+	.codec		= &sun8i_a23_codec_codec,
+	.create_card	= sun8i_v3s_codec_create_card,
+	.reg_adc_fifoc	= REG_FIELD(SUN6I_CODEC_ADC_FIFOC, 0, 31),
+	.reg_dac_txdata	= SUN8I_H3_CODEC_DAC_TXDATA,
+	.reg_adc_rxdata	= SUN6I_CODEC_ADC_RXDATA,
+	.has_reset	= true,
+};
+
 static const struct sun4i_codec_quirks sun8i_h3_codec_quirks = {
 	.regmap_config	= &sun8i_h3_codec_regmap_config,
 	/*
@@ -1458,6 +1513,10 @@ static const struct of_device_id sun4i_codec_of_match[] = {
 		.compatible = "allwinner,sun8i-h3-codec",
 		.data = &sun8i_h3_codec_quirks,
 	},
+	{
+		.compatible = "allwinner,sun8i-v3s-codec",
+		.data = &sun8i_v3s_codec_quirks,
+	},
 	{}
 };
 MODULE_DEVICE_TABLE(of, sun4i_codec_of_match);
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 05/12] ASoC: sun4i-codec: Add support for V3s codec
@ 2017-03-05 13:37     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: linux-arm-kernel

The codec in the V3s is similar to the one found on the A31. One key
difference is the analog path controls are routed through the PRCM
block. This is supported by the sun8i-codec-analog driver, and tied
into this codec driver with the audio card's aux_dev.

In addition, the V3s does not have LINEIN, LINEOUT, MBIAS and MIC2,
MIC3, and the FIFO related registers are like H3.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 .../devicetree/bindings/sound/sun4i-codec.txt      | 11 ++--
 sound/soc/sunxi/sun4i-codec.c                      | 59 ++++++++++++++++++++++
 2 files changed, 66 insertions(+), 4 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
index 3863531d1e6d..2d4e10deb6f4 100644
--- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt
+++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
@@ -7,6 +7,7 @@ Required properties:
 		- "allwinner,sun7i-a20-codec"
 		- "allwinner,sun8i-a23-codec"
 		- "allwinner,sun8i-h3-codec"
+		- "allwinner,sun8i-v3s-codec"
 - reg: must contain the registers location and length
 - interrupts: must contain the codec interrupt
 - dmas: DMA channels for tx and rx dma. See the DMA client binding,
@@ -25,6 +26,7 @@ Required properties for the following compatibles:
 		- "allwinner,sun6i-a31-codec"
 		- "allwinner,sun8i-a23-codec"
 		- "allwinner,sun8i-h3-codec"
+		- "allwinner,sun8i-v3s-codec"
 - resets: phandle to the reset control for this device
 - allwinner,audio-routing: A list of the connections between audio components.
 			   Each entry is a pair of strings, the first being the
@@ -34,15 +36,15 @@ Required properties for the following compatibles:
 			   Audio pins on the SoC:
 			   "HP"
 			   "HPCOM"
-			   "LINEIN"
-			   "LINEOUT"	(not on sun8i-a23)
+			   "LINEIN"	(not on sun8i-v3s)
+			   "LINEOUT"	(not on sun8i-a23 or sun8i-v3s)
 			   "MIC1"
-			   "MIC2"
+			   "MIC2"	(not on sun8i-v3s)
 			   "MIC3"	(sun6i-a31 only)
 
 			   Microphone biases from the SoC:
 			   "HBIAS"
-			   "MBIAS"
+			   "MBIAS"	(not on sun8i-v3s)
 
 			   Board connectors:
 			   "Headphone"
@@ -55,6 +57,7 @@ Required properties for the following compatibles:
 Required properties for the following compatibles:
 		- "allwinner,sun8i-a23-codec"
 		- "allwinner,sun8i-h3-codec"
+		- "allwinner,sun8i-v3s-codec"
 - allwinner,codec-analog-controls: A phandle to the codec analog controls
 				   block in the PRCM.
 
diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
index c3aab10fa085..7f1b1aa95e0b 100644
--- a/sound/soc/sunxi/sun4i-codec.c
+++ b/sound/soc/sunxi/sun4i-codec.c
@@ -1339,6 +1339,44 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)
 	return card;
 };
 
+static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)
+{
+	struct snd_soc_card *card;
+	int ret;
+
+	card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
+	if (!card)
+		return ERR_PTR(-ENOMEM);
+
+	aux_dev.codec_of_node = of_parse_phandle(dev->of_node,
+						 "allwinner,codec-analog-controls",
+						 0);
+	if (!aux_dev.codec_of_node) {
+		dev_err(dev, "Can't find analog controls for codec.\n");
+		return ERR_PTR(-EINVAL);
+	};
+
+	card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
+	if (!card->dai_link)
+		return ERR_PTR(-ENOMEM);
+
+	card->dev		= dev;
+	card->name		= "V3s Audio Codec";
+	card->dapm_widgets	= sun6i_codec_card_dapm_widgets;
+	card->num_dapm_widgets	= ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
+	card->dapm_routes	= sun8i_codec_card_routes;
+	card->num_dapm_routes	= ARRAY_SIZE(sun8i_codec_card_routes);
+	card->aux_dev		= &aux_dev;
+	card->num_aux_devs	= 1;
+	card->fully_routed	= true;
+
+	ret = snd_soc_of_parse_audio_routing(card, "allwinner,audio-routing");
+	if (ret)
+		dev_warn(dev, "failed to parse audio-routing: %d\n", ret);
+
+	return card;
+};
+
 static const struct regmap_config sun4i_codec_regmap_config = {
 	.reg_bits	= 32,
 	.reg_stride	= 4,
@@ -1374,6 +1412,13 @@ static const struct regmap_config sun8i_h3_codec_regmap_config = {
 	.max_register	= SUN8I_H3_CODEC_ADC_DBG,
 };
 
+static const struct regmap_config sun8i_v3s_codec_regmap_config = {
+	.reg_bits	= 32,
+	.reg_stride	= 4,
+	.val_bits	= 32,
+	.max_register	= SUN6I_CODEC_HMIC_DATA,
+};
+
 struct sun4i_codec_quirks {
 	const struct regmap_config *regmap_config;
 	const struct snd_soc_codec_driver *codec;
@@ -1422,6 +1467,16 @@ static const struct sun4i_codec_quirks sun8i_a23_codec_quirks = {
 	.has_reset	= true,
 };
 
+static const struct sun4i_codec_quirks sun8i_v3s_codec_quirks = {
+	.regmap_config	= &sun8i_v3s_codec_regmap_config,
+	.codec		= &sun8i_a23_codec_codec,
+	.create_card	= sun8i_v3s_codec_create_card,
+	.reg_adc_fifoc	= REG_FIELD(SUN6I_CODEC_ADC_FIFOC, 0, 31),
+	.reg_dac_txdata	= SUN8I_H3_CODEC_DAC_TXDATA,
+	.reg_adc_rxdata	= SUN6I_CODEC_ADC_RXDATA,
+	.has_reset	= true,
+};
+
 static const struct sun4i_codec_quirks sun8i_h3_codec_quirks = {
 	.regmap_config	= &sun8i_h3_codec_regmap_config,
 	/*
@@ -1458,6 +1513,10 @@ static const struct of_device_id sun4i_codec_of_match[] = {
 		.compatible = "allwinner,sun8i-h3-codec",
 		.data = &sun8i_h3_codec_quirks,
 	},
+	{
+		.compatible = "allwinner,sun8i-v3s-codec",
+		.data = &sun8i_v3s_codec_quirks,
+	},
 	{}
 };
 MODULE_DEVICE_TABLE(of, sun4i_codec_of_match);
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 06/12] dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:37     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

Originally we enable a special gate bit when the compatible indicates
A23/33.

But according to BSP sources and user manuals, more SoCs will need this
gate bit.

So make it a common quirk configured in the config struct.

The BSP source also indicates that A83T will need this gate bit (there's
"SUN8IW6" in the #ifdef's), so also enable this gate bit for it.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 drivers/dma/sun6i-dma.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
index a2358780ab2c..889fb24023cd 100644
--- a/drivers/dma/sun6i-dma.c
+++ b/drivers/dma/sun6i-dma.c
@@ -101,6 +101,7 @@ struct sun6i_dma_config {
 	u32 nr_max_channels;
 	u32 nr_max_requests;
 	u32 nr_max_vchans;
+	bool gate_needed;
 };
 
 /*
@@ -1009,12 +1010,14 @@ static struct sun6i_dma_config sun8i_a23_dma_cfg = {
 	.nr_max_channels = 8,
 	.nr_max_requests = 24,
 	.nr_max_vchans   = 37,
+	.gate_needed	 = true,
 };
 
 static struct sun6i_dma_config sun8i_a83t_dma_cfg = {
 	.nr_max_channels = 8,
 	.nr_max_requests = 28,
 	.nr_max_vchans   = 39,
+	.gate_needed	 = true,
 };
 
 /*
@@ -1177,10 +1180,10 @@ static int sun6i_dma_probe(struct platform_device *pdev)
 	/*
 	 * sun8i variant requires us to toggle a dma gating register,
 	 * as seen in Allwinner's SDK. This register is not documented
-	 * in the A23 user manual.
+	 * in the A23 user manual, but documented at least in V3s user
+	 * manual.
 	 */
-	if (of_device_is_compatible(pdev->dev.of_node,
-				    "allwinner,sun8i-a23-dma"))
+	if (sdc->cfg->gate_needed)
 		writel(SUN8I_DMA_GATE_ENABLE, sdc->base + SUN8I_DMA_GATE);
 
 	return 0;
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 06/12] dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
@ 2017-03-05 13:37     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: linux-arm-kernel

Originally we enable a special gate bit when the compatible indicates
A23/33.

But according to BSP sources and user manuals, more SoCs will need this
gate bit.

So make it a common quirk configured in the config struct.

The BSP source also indicates that A83T will need this gate bit (there's
"SUN8IW6" in the #ifdef's), so also enable this gate bit for it.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 drivers/dma/sun6i-dma.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
index a2358780ab2c..889fb24023cd 100644
--- a/drivers/dma/sun6i-dma.c
+++ b/drivers/dma/sun6i-dma.c
@@ -101,6 +101,7 @@ struct sun6i_dma_config {
 	u32 nr_max_channels;
 	u32 nr_max_requests;
 	u32 nr_max_vchans;
+	bool gate_needed;
 };
 
 /*
@@ -1009,12 +1010,14 @@ static struct sun6i_dma_config sun8i_a23_dma_cfg = {
 	.nr_max_channels = 8,
 	.nr_max_requests = 24,
 	.nr_max_vchans   = 37,
+	.gate_needed	 = true,
 };
 
 static struct sun6i_dma_config sun8i_a83t_dma_cfg = {
 	.nr_max_channels = 8,
 	.nr_max_requests = 28,
 	.nr_max_vchans   = 39,
+	.gate_needed	 = true,
 };
 
 /*
@@ -1177,10 +1180,10 @@ static int sun6i_dma_probe(struct platform_device *pdev)
 	/*
 	 * sun8i variant requires us to toggle a dma gating register,
 	 * as seen in Allwinner's SDK. This register is not documented
-	 * in the A23 user manual.
+	 * in the A23 user manual, but documented at least in V3s user
+	 * manual.
 	 */
-	if (of_device_is_compatible(pdev->dev.of_node,
-				    "allwinner,sun8i-a23-dma"))
+	if (sdc->cfg->gate_needed)
 		writel(SUN8I_DMA_GATE_ENABLE, sdc->base + SUN8I_DMA_GATE);
 
 	return 0;
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 07/12] dmaengine: sun6i: support V3s SoC variant
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:37     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

Allwinner V3s has a DMA engine similar to the ones from A31, but with
fewer channels and DRQs.

Add support for it.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 Documentation/devicetree/bindings/dma/sun6i-dma.txt |  1 +
 drivers/dma/sun6i-dma.c                             | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/Documentation/devicetree/bindings/dma/sun6i-dma.txt b/Documentation/devicetree/bindings/dma/sun6i-dma.txt
index 6b267045f522..98fbe1a5c6dd 100644
--- a/Documentation/devicetree/bindings/dma/sun6i-dma.txt
+++ b/Documentation/devicetree/bindings/dma/sun6i-dma.txt
@@ -9,6 +9,7 @@ Required properties:
 		  "allwinner,sun8i-a23-dma"
 		  "allwinner,sun8i-a83t-dma"
 		  "allwinner,sun8i-h3-dma"
+		  "allwinner,sun8i-v3s-dma"
 - reg:		Should contain the registers base address and length
 - interrupts:	Should contain a reference to the interrupt used by this device
 - clocks:	Should contain a reference to the parent AHB clock
diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
index 889fb24023cd..9565dcaa7651 100644
--- a/drivers/dma/sun6i-dma.c
+++ b/drivers/dma/sun6i-dma.c
@@ -1031,11 +1031,24 @@ static struct sun6i_dma_config sun8i_h3_dma_cfg = {
 	.nr_max_vchans   = 34,
 };
 
+/*
+ * The V3s have only 8 physical channels, a maximum DRQ port id of 23,
+ * and a total of 24 usable source and destination endpoints.
+ */
+
+static struct sun6i_dma_config sun8i_v3s_dma_cfg = {
+	.nr_max_channels = 8,
+	.nr_max_requests = 23,
+	.nr_max_vchans   = 24,
+	.gate_needed	 = true,
+};
+
 static const struct of_device_id sun6i_dma_match[] = {
 	{ .compatible = "allwinner,sun6i-a31-dma", .data = &sun6i_a31_dma_cfg },
 	{ .compatible = "allwinner,sun8i-a23-dma", .data = &sun8i_a23_dma_cfg },
 	{ .compatible = "allwinner,sun8i-a83t-dma", .data = &sun8i_a83t_dma_cfg },
 	{ .compatible = "allwinner,sun8i-h3-dma", .data = &sun8i_h3_dma_cfg },
+	{ .compatible = "allwinner,sun8i-v3s-dma", .data = &sun8i_v3s_dma_cfg },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, sun6i_dma_match);
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 07/12] dmaengine: sun6i: support V3s SoC variant
@ 2017-03-05 13:37     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: linux-arm-kernel

Allwinner V3s has a DMA engine similar to the ones from A31, but with
fewer channels and DRQs.

Add support for it.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 Documentation/devicetree/bindings/dma/sun6i-dma.txt |  1 +
 drivers/dma/sun6i-dma.c                             | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/Documentation/devicetree/bindings/dma/sun6i-dma.txt b/Documentation/devicetree/bindings/dma/sun6i-dma.txt
index 6b267045f522..98fbe1a5c6dd 100644
--- a/Documentation/devicetree/bindings/dma/sun6i-dma.txt
+++ b/Documentation/devicetree/bindings/dma/sun6i-dma.txt
@@ -9,6 +9,7 @@ Required properties:
 		  "allwinner,sun8i-a23-dma"
 		  "allwinner,sun8i-a83t-dma"
 		  "allwinner,sun8i-h3-dma"
+		  "allwinner,sun8i-v3s-dma"
 - reg:		Should contain the registers base address and length
 - interrupts:	Should contain a reference to the interrupt used by this device
 - clocks:	Should contain a reference to the parent AHB clock
diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
index 889fb24023cd..9565dcaa7651 100644
--- a/drivers/dma/sun6i-dma.c
+++ b/drivers/dma/sun6i-dma.c
@@ -1031,11 +1031,24 @@ static struct sun6i_dma_config sun8i_h3_dma_cfg = {
 	.nr_max_vchans   = 34,
 };
 
+/*
+ * The V3s have only 8 physical channels, a maximum DRQ port id of 23,
+ * and a total of 24 usable source and destination endpoints.
+ */
+
+static struct sun6i_dma_config sun8i_v3s_dma_cfg = {
+	.nr_max_channels = 8,
+	.nr_max_requests = 23,
+	.nr_max_vchans   = 24,
+	.gate_needed	 = true,
+};
+
 static const struct of_device_id sun6i_dma_match[] = {
 	{ .compatible = "allwinner,sun6i-a31-dma", .data = &sun6i_a31_dma_cfg },
 	{ .compatible = "allwinner,sun8i-a23-dma", .data = &sun8i_a23_dma_cfg },
 	{ .compatible = "allwinner,sun8i-a83t-dma", .data = &sun8i_a83t_dma_cfg },
 	{ .compatible = "allwinner,sun8i-h3-dma", .data = &sun8i_h3_dma_cfg },
+	{ .compatible = "allwinner,sun8i-v3s-dma", .data = &sun8i_v3s_dma_cfg },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, sun6i_dma_match);
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 08/12] ARM: dts: sun8i: restore the inclusion of ccu headers in V3s DTSI
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:37     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

When the V3s support patchset is applied, CCU headers and V3s DTSI went
into different trees, so the CCU inclusion is removed in the DTSI.

Add back them.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 arch/arm/boot/dts/sun8i-v3s.dtsi | 67 ++++++++++++++++++++--------------------
 1 file changed, 34 insertions(+), 33 deletions(-)

diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
index 71075969e5e6..b3f8b7f9c0bb 100644
--- a/arch/arm/boot/dts/sun8i-v3s.dtsi
+++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
@@ -40,6 +40,8 @@
  *     OTHER DEALINGS IN THE SOFTWARE.
  */
 
+#include <dt-bindings/clock/sun8i-v3s-ccu.h>
+#include <dt-bindings/reset/sun8i-v3s-ccu.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 
 / {
@@ -55,7 +57,7 @@
 			compatible = "arm,cortex-a7";
 			device_type = "cpu";
 			reg = <0>;
-			clocks = <&ccu 14>;
+			clocks = <&ccu CLK_CPU>;
 		};
 	};
 
@@ -96,15 +98,15 @@
 		mmc0: mmc@01c0f000 {
 			compatible = "allwinner,sun7i-a20-mmc";
 			reg = <0x01c0f000 0x1000>;
-			clocks = <&ccu 22>,
-				 <&ccu 45>,
-				 <&ccu 47>,
-				 <&ccu 46>;
+			clocks = <&ccu CLK_BUS_MMC0>,
+				 <&ccu CLK_MMC0>,
+				 <&ccu CLK_MMC0_OUTPUT>,
+				 <&ccu CLK_MMC0_SAMPLE>;
 			clock-names = "ahb",
 				      "mmc",
 				      "output",
 				      "sample";
-			resets = <&ccu 7>;
+			resets = <&ccu RST_BUS_MMC0>;
 			reset-names = "ahb";
 			interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
 			status = "disabled";
@@ -115,15 +117,15 @@
 		mmc1: mmc@01c10000 {
 			compatible = "allwinner,sun7i-a20-mmc";
 			reg = <0x01c10000 0x1000>;
-			clocks = <&ccu 23>,
-				 <&ccu 48>,
-				 <&ccu 50>,
-				 <&ccu 49>;
+			clocks = <&ccu CLK_BUS_MMC1>,
+				 <&ccu CLK_MMC1>,
+				 <&ccu CLK_MMC1_OUTPUT>,
+				 <&ccu CLK_MMC1_SAMPLE>;
 			clock-names = "ahb",
 				      "mmc",
 				      "output",
 				      "sample";
-			resets = <&ccu 8>;
+			resets = <&ccu RST_BUS_MMC1>;
 			reset-names = "ahb";
 			interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
 			status = "disabled";
@@ -134,15 +136,15 @@
 		mmc2: mmc@01c11000 {
 			compatible = "allwinner,sun7i-a20-mmc";
 			reg = <0x01c11000 0x1000>;
-			clocks = <&ccu 24>,
-				 <&ccu 51>,
-				 <&ccu 53>,
-				 <&ccu 52>;
+			clocks = <&ccu CLK_BUS_MMC2>,
+				 <&ccu CLK_MMC2>,
+				 <&ccu CLK_MMC2_OUTPUT>,
+				 <&ccu CLK_MMC2_SAMPLE>;
 			clock-names = "ahb",
 				      "mmc",
 				      "output",
 				      "sample";
-			resets = <&ccu 9>;
+			resets = <&ccu RST_BUS_MMC2>;
 			reset-names = "ahb";
 			interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
 			status = "disabled";
@@ -153,8 +155,8 @@
 		usb_otg: usb@01c19000 {
 			compatible = "allwinner,sun8i-h3-musb";
 			reg = <0x01c19000 0x0400>;
-			clocks = <&ccu 29>;
-			resets = <&ccu 17>;
+			clocks = <&ccu CLK_BUS_OTG>;
+			resets = <&ccu RST_BUS_OTG>;
 			interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
 			interrupt-names = "mc";
 			phys = <&usbphy 0>;
@@ -169,9 +171,9 @@
 			      <0x01c1a800 0x4>;
 			reg-names = "phy_ctrl",
 				    "pmu0";
-			clocks = <&ccu 56>;
+			clocks = <&ccu CLK_USB_PHY0>;
 			clock-names = "usb0_phy";
-			resets = <&ccu 0>;
+			resets = <&ccu RST_USB_PHY0>;
 			reset-names = "usb0_reset";
 			status = "disabled";
 			#phy-cells = <1>;
@@ -198,7 +200,7 @@
 			reg = <0x01c20800 0x400>;
 			interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
 				     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
-			clocks = <&ccu 37>, <&osc24M>, <&osc32k>;
+			clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
 			clock-names = "apb", "hosc", "losc";
 			gpio-controller;
 			#gpio-cells = <3>;
@@ -213,6 +215,7 @@
 			uart0_pins_a: uart0@0 {
 				pins = "PB8", "PB9";
 				function = "uart0";
+				bias-pull-up;
 			};
 
 			mmc0_pins_a: mmc0@0 {
@@ -244,8 +247,8 @@
 			interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
 			reg-shift = <2>;
 			reg-io-width = <4>;
-			clocks = <&ccu 40>;
-			resets = <&ccu 49>;
+			clocks = <&ccu CLK_BUS_UART0>;
+			resets = <&ccu RST_BUS_UART0>;
 			status = "disabled";
 		};
 
@@ -255,8 +258,8 @@
 			interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
 			reg-shift = <2>;
 			reg-io-width = <4>;
-			clocks = <&ccu 41>;
-			resets = <&ccu 50>;
+			clocks = <&ccu CLK_BUS_UART1>;
+			resets = <&ccu RST_BUS_UART1>;
 			status = "disabled";
 		};
 
@@ -266,8 +269,8 @@
 			interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
 			reg-shift = <2>;
 			reg-io-width = <4>;
-			clocks = <&ccu 42>;
-			resets = <&ccu 51>;
+			clocks = <&ccu CLK_BUS_UART2>;
+			resets = <&ccu RST_BUS_UART2>;
 			status = "disabled";
 		};
 
@@ -275,10 +278,8 @@
 			compatible = "allwinner,sun6i-a31-i2c";
 			reg = <0x01c2ac00 0x400>;
 			interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
-			clocks = <&ccu 38>;
-			resets = <&ccu 46>;
-			pinctrl-names = "default";
-			pinctrl-0 = <&i2c0_pins>;
+			clocks = <&ccu CLK_BUS_I2C0>;
+			resets = <&ccu RST_BUS_I2C0>;
 			status = "disabled";
 			#address-cells = <1>;
 			#size-cells = <0>;
@@ -288,8 +289,8 @@
 			compatible = "allwinner,sun6i-a31-i2c";
 			reg = <0x01c2b000 0x400>;
 			interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
-			clocks = <&ccu 39>;
-			resets = <&ccu 47>;
+			clocks = <&ccu CLK_BUS_I2C1>;
+			resets = <&ccu RST_BUS_I2C1>;
 			status = "disabled";
 			#address-cells = <1>;
 			#size-cells = <0>;
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 08/12] ARM: dts: sun8i: restore the inclusion of ccu headers in V3s DTSI
@ 2017-03-05 13:37     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: linux-arm-kernel

When the V3s support patchset is applied, CCU headers and V3s DTSI went
into different trees, so the CCU inclusion is removed in the DTSI.

Add back them.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 arch/arm/boot/dts/sun8i-v3s.dtsi | 67 ++++++++++++++++++++--------------------
 1 file changed, 34 insertions(+), 33 deletions(-)

diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
index 71075969e5e6..b3f8b7f9c0bb 100644
--- a/arch/arm/boot/dts/sun8i-v3s.dtsi
+++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
@@ -40,6 +40,8 @@
  *     OTHER DEALINGS IN THE SOFTWARE.
  */
 
+#include <dt-bindings/clock/sun8i-v3s-ccu.h>
+#include <dt-bindings/reset/sun8i-v3s-ccu.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 
 / {
@@ -55,7 +57,7 @@
 			compatible = "arm,cortex-a7";
 			device_type = "cpu";
 			reg = <0>;
-			clocks = <&ccu 14>;
+			clocks = <&ccu CLK_CPU>;
 		};
 	};
 
@@ -96,15 +98,15 @@
 		mmc0: mmc at 01c0f000 {
 			compatible = "allwinner,sun7i-a20-mmc";
 			reg = <0x01c0f000 0x1000>;
-			clocks = <&ccu 22>,
-				 <&ccu 45>,
-				 <&ccu 47>,
-				 <&ccu 46>;
+			clocks = <&ccu CLK_BUS_MMC0>,
+				 <&ccu CLK_MMC0>,
+				 <&ccu CLK_MMC0_OUTPUT>,
+				 <&ccu CLK_MMC0_SAMPLE>;
 			clock-names = "ahb",
 				      "mmc",
 				      "output",
 				      "sample";
-			resets = <&ccu 7>;
+			resets = <&ccu RST_BUS_MMC0>;
 			reset-names = "ahb";
 			interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
 			status = "disabled";
@@ -115,15 +117,15 @@
 		mmc1: mmc at 01c10000 {
 			compatible = "allwinner,sun7i-a20-mmc";
 			reg = <0x01c10000 0x1000>;
-			clocks = <&ccu 23>,
-				 <&ccu 48>,
-				 <&ccu 50>,
-				 <&ccu 49>;
+			clocks = <&ccu CLK_BUS_MMC1>,
+				 <&ccu CLK_MMC1>,
+				 <&ccu CLK_MMC1_OUTPUT>,
+				 <&ccu CLK_MMC1_SAMPLE>;
 			clock-names = "ahb",
 				      "mmc",
 				      "output",
 				      "sample";
-			resets = <&ccu 8>;
+			resets = <&ccu RST_BUS_MMC1>;
 			reset-names = "ahb";
 			interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
 			status = "disabled";
@@ -134,15 +136,15 @@
 		mmc2: mmc at 01c11000 {
 			compatible = "allwinner,sun7i-a20-mmc";
 			reg = <0x01c11000 0x1000>;
-			clocks = <&ccu 24>,
-				 <&ccu 51>,
-				 <&ccu 53>,
-				 <&ccu 52>;
+			clocks = <&ccu CLK_BUS_MMC2>,
+				 <&ccu CLK_MMC2>,
+				 <&ccu CLK_MMC2_OUTPUT>,
+				 <&ccu CLK_MMC2_SAMPLE>;
 			clock-names = "ahb",
 				      "mmc",
 				      "output",
 				      "sample";
-			resets = <&ccu 9>;
+			resets = <&ccu RST_BUS_MMC2>;
 			reset-names = "ahb";
 			interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
 			status = "disabled";
@@ -153,8 +155,8 @@
 		usb_otg: usb at 01c19000 {
 			compatible = "allwinner,sun8i-h3-musb";
 			reg = <0x01c19000 0x0400>;
-			clocks = <&ccu 29>;
-			resets = <&ccu 17>;
+			clocks = <&ccu CLK_BUS_OTG>;
+			resets = <&ccu RST_BUS_OTG>;
 			interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
 			interrupt-names = "mc";
 			phys = <&usbphy 0>;
@@ -169,9 +171,9 @@
 			      <0x01c1a800 0x4>;
 			reg-names = "phy_ctrl",
 				    "pmu0";
-			clocks = <&ccu 56>;
+			clocks = <&ccu CLK_USB_PHY0>;
 			clock-names = "usb0_phy";
-			resets = <&ccu 0>;
+			resets = <&ccu RST_USB_PHY0>;
 			reset-names = "usb0_reset";
 			status = "disabled";
 			#phy-cells = <1>;
@@ -198,7 +200,7 @@
 			reg = <0x01c20800 0x400>;
 			interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
 				     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
-			clocks = <&ccu 37>, <&osc24M>, <&osc32k>;
+			clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
 			clock-names = "apb", "hosc", "losc";
 			gpio-controller;
 			#gpio-cells = <3>;
@@ -213,6 +215,7 @@
 			uart0_pins_a: uart0 at 0 {
 				pins = "PB8", "PB9";
 				function = "uart0";
+				bias-pull-up;
 			};
 
 			mmc0_pins_a: mmc0 at 0 {
@@ -244,8 +247,8 @@
 			interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
 			reg-shift = <2>;
 			reg-io-width = <4>;
-			clocks = <&ccu 40>;
-			resets = <&ccu 49>;
+			clocks = <&ccu CLK_BUS_UART0>;
+			resets = <&ccu RST_BUS_UART0>;
 			status = "disabled";
 		};
 
@@ -255,8 +258,8 @@
 			interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
 			reg-shift = <2>;
 			reg-io-width = <4>;
-			clocks = <&ccu 41>;
-			resets = <&ccu 50>;
+			clocks = <&ccu CLK_BUS_UART1>;
+			resets = <&ccu RST_BUS_UART1>;
 			status = "disabled";
 		};
 
@@ -266,8 +269,8 @@
 			interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
 			reg-shift = <2>;
 			reg-io-width = <4>;
-			clocks = <&ccu 42>;
-			resets = <&ccu 51>;
+			clocks = <&ccu CLK_BUS_UART2>;
+			resets = <&ccu RST_BUS_UART2>;
 			status = "disabled";
 		};
 
@@ -275,10 +278,8 @@
 			compatible = "allwinner,sun6i-a31-i2c";
 			reg = <0x01c2ac00 0x400>;
 			interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
-			clocks = <&ccu 38>;
-			resets = <&ccu 46>;
-			pinctrl-names = "default";
-			pinctrl-0 = <&i2c0_pins>;
+			clocks = <&ccu CLK_BUS_I2C0>;
+			resets = <&ccu RST_BUS_I2C0>;
 			status = "disabled";
 			#address-cells = <1>;
 			#size-cells = <0>;
@@ -288,8 +289,8 @@
 			compatible = "allwinner,sun6i-a31-i2c";
 			reg = <0x01c2b000 0x400>;
 			interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
-			clocks = <&ccu 39>;
-			resets = <&ccu 47>;
+			clocks = <&ccu CLK_BUS_I2C1>;
+			resets = <&ccu RST_BUS_I2C1>;
 			status = "disabled";
 			#address-cells = <1>;
 			#size-cells = <0>;
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 09/12] ARM: dts: sun8i: add DMA engine in V3s DTSI
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:37     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

Allwinner V3s SoC features a DMA engine.

Add it in the DTSI file.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 arch/arm/boot/dts/sun8i-v3s.dtsi | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
index b3f8b7f9c0bb..7e0342976ba8 100644
--- a/arch/arm/boot/dts/sun8i-v3s.dtsi
+++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
@@ -95,6 +95,15 @@
 		#size-cells = <1>;
 		ranges;
 
+		dma: dma-controller@01c02000 {
+			compatible = "allwinner,sun8i-v3s-dma";
+			reg = <0x01c02000 0x1000>;
+			interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_DMA>;
+			resets = <&ccu RST_BUS_DMA>;
+			#dma-cells = <1>;
+		};
+
 		mmc0: mmc@01c0f000 {
 			compatible = "allwinner,sun7i-a20-mmc";
 			reg = <0x01c0f000 0x1000>;
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 09/12] ARM: dts: sun8i: add DMA engine in V3s DTSI
@ 2017-03-05 13:37     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: linux-arm-kernel

Allwinner V3s SoC features a DMA engine.

Add it in the DTSI file.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 arch/arm/boot/dts/sun8i-v3s.dtsi | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
index b3f8b7f9c0bb..7e0342976ba8 100644
--- a/arch/arm/boot/dts/sun8i-v3s.dtsi
+++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
@@ -95,6 +95,15 @@
 		#size-cells = <1>;
 		ranges;
 
+		dma: dma-controller at 01c02000 {
+			compatible = "allwinner,sun8i-v3s-dma";
+			reg = <0x01c02000 0x1000>;
+			interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_DMA>;
+			resets = <&ccu RST_BUS_DMA>;
+			#dma-cells = <1>;
+		};
+
 		mmc0: mmc at 01c0f000 {
 			compatible = "allwinner,sun7i-a20-mmc";
 			reg = <0x01c0f000 0x1000>;
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 10/12] ARM: dts: sun8i: add audio codec support into V3s DTSI
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:37     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

Allwinner V3s SoC features an internal audio codec like the one in H3,
and a analog codec like the one in H3/A23 (but much simpler).

Add them in the DTSI file.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 arch/arm/boot/dts/sun8i-v3s.dtsi | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
index 7e0342976ba8..5fb6cb69f7bc 100644
--- a/arch/arm/boot/dts/sun8i-v3s.dtsi
+++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
@@ -250,6 +250,25 @@
 			interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
 		};
 
+		codec: codec@01c22c00 {
+			#sound-dai-cells = <0>;
+			compatible = "allwinner,sun8i-v3s-codec";
+			reg = <0x01c22c00 0x400>;
+			interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_CODEC>, <&ccu CLK_AC_DIG>;
+			clock-names = "apb", "codec";
+			resets = <&ccu RST_BUS_CODEC>;
+			dmas = <&dma 15>, <&dma 15>;
+			dma-names = "rx", "tx";
+			allwinner,codec-analog-controls = <&codec_analog>;
+			status = "disabled";
+		};
+
+		codec_analog: codec-analog@01c23000 {
+			compatible = "allwinner,sun8i-v3s-codec-analog";
+			reg = <0x01c23000 0x4>;
+		};
+
 		uart0: serial@01c28000 {
 			compatible = "snps,dw-apb-uart";
 			reg = <0x01c28000 0x400>;
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 10/12] ARM: dts: sun8i: add audio codec support into V3s DTSI
@ 2017-03-05 13:37     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: linux-arm-kernel

Allwinner V3s SoC features an internal audio codec like the one in H3,
and a analog codec like the one in H3/A23 (but much simpler).

Add them in the DTSI file.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 arch/arm/boot/dts/sun8i-v3s.dtsi | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
index 7e0342976ba8..5fb6cb69f7bc 100644
--- a/arch/arm/boot/dts/sun8i-v3s.dtsi
+++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
@@ -250,6 +250,25 @@
 			interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
 		};
 
+		codec: codec at 01c22c00 {
+			#sound-dai-cells = <0>;
+			compatible = "allwinner,sun8i-v3s-codec";
+			reg = <0x01c22c00 0x400>;
+			interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_CODEC>, <&ccu CLK_AC_DIG>;
+			clock-names = "apb", "codec";
+			resets = <&ccu RST_BUS_CODEC>;
+			dmas = <&dma 15>, <&dma 15>;
+			dma-names = "rx", "tx";
+			allwinner,codec-analog-controls = <&codec_analog>;
+			status = "disabled";
+		};
+
+		codec_analog: codec-analog at 01c23000 {
+			compatible = "allwinner,sun8i-v3s-codec-analog";
+			reg = <0x01c23000 0x4>;
+		};
+
 		uart0: serial at 01c28000 {
 			compatible = "snps,dw-apb-uart";
 			reg = <0x01c28000 0x400>;
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 11/12] ARM: dts: sun8i: add pinmux for V3s mmc1
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:37     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

Allwinner V3s SoC features 3 MMC controllers, mmc0 is used as the
MicroSD slot on Lichee Pi Zero, and on Lichee Pi Zero's dock mmc1 is
also soldered as a MicroSD slot.

Add the pinmux for mmc1, thus we can enable the MicroSD slot on the
Lichee Pi Zero dock.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 arch/arm/boot/dts/sun8i-v3s.dtsi | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
index 5fb6cb69f7bc..a39c26bceedc 100644
--- a/arch/arm/boot/dts/sun8i-v3s.dtsi
+++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
@@ -234,6 +234,14 @@
 				drive-strength = <30>;
 				bias-pull-up;
 			};
+
+			mmc1_pins: mmc1@0 {
+				pins = "PG0", "PG1", "PG2", "PG3",
+				       "PG4", "PG5";
+				function = "mmc1";
+				drive-strength = <30>;
+				bias-pull-up;
+			};
 		};
 
 		timer@01c20c00 {
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 11/12] ARM: dts: sun8i: add pinmux for V3s mmc1
@ 2017-03-05 13:37     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: linux-arm-kernel

Allwinner V3s SoC features 3 MMC controllers, mmc0 is used as the
MicroSD slot on Lichee Pi Zero, and on Lichee Pi Zero's dock mmc1 is
also soldered as a MicroSD slot.

Add the pinmux for mmc1, thus we can enable the MicroSD slot on the
Lichee Pi Zero dock.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 arch/arm/boot/dts/sun8i-v3s.dtsi | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
index 5fb6cb69f7bc..a39c26bceedc 100644
--- a/arch/arm/boot/dts/sun8i-v3s.dtsi
+++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
@@ -234,6 +234,14 @@
 				drive-strength = <30>;
 				bias-pull-up;
 			};
+
+			mmc1_pins: mmc1 at 0 {
+				pins = "PG0", "PG1", "PG2", "PG3",
+				       "PG4", "PG5";
+				function = "mmc1";
+				drive-strength = <30>;
+				bias-pull-up;
+			};
 		};
 
 		timer at 01c20c00 {
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 12/12] ARM: dts: sun8i: add device tree for Lichee Pi Zero with Dock
  2017-03-05 13:36 ` Icenowy Zheng
@ 2017-03-05 13:37     ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng

Lichee Pi Zero features a dock, which adds some functions, and should be
soldered with the core board of Lichee Pi Zero.

Add support for the dock as a new dts, as soldering is needed to make
the dock usable and there's functions enabled on the dock that is
unavailable at the 2.54mm pins of the core board.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
---
 arch/arm/boot/dts/Makefile                         |  3 +-
 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts | 67 ++++++++++++++++++++++
 2 files changed, 69 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 011808490fed..1aa365306479 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -876,7 +876,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
 	sun8i-h3-orangepi-plus.dtb \
 	sun8i-h3-orangepi-plus2e.dtb \
 	sun8i-r16-parrot.dtb \
-	sun8i-v3s-licheepi-zero.dtb
+	sun8i-v3s-licheepi-zero.dtb \
+	sun8i-v3s-licheepi-zero-dock.dtb
 dtb-$(CONFIG_MACH_SUN9I) += \
 	sun9i-a80-optimus.dtb \
 	sun9i-a80-cubieboard4.dtb
diff --git a/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts b/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
new file mode 100644
index 000000000000..0ce92dadc07b
--- /dev/null
+++ b/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2016 Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This file 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.
+ *
+ *     This file is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "sun8i-v3s-licheepi-zero.dts"
+
+/ {
+	model = "Lichee Pi Zero with Dock";
+	compatible = "licheepi,licheepi-zero-dock", "licheepi,licheepi-zero",
+		     "allwinner,sun8i-v3s";
+};
+
+&codec {
+	allwinner,audio-routing =
+		"Headphone", "HP",
+		"Headphone", "HPCOM",
+		"MIC1", "Mic",
+		"Mic",  "HBIAS";
+	status = "okay";
+};
+
+&mmc1 {
+	pinctrl-0 = <&mmc1_pins>;
+	pinctrl-names = "default";
+	broken-cd;
+	bus-width = <4>;
+	vmmc-supply = <&reg_vcc3v3>;
+	status = "okay";
+};
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 12/12] ARM: dts: sun8i: add device tree for Lichee Pi Zero with Dock
@ 2017-03-05 13:37     ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:37 UTC (permalink / raw)
  To: linux-arm-kernel

Lichee Pi Zero features a dock, which adds some functions, and should be
soldered with the core board of Lichee Pi Zero.

Add support for the dock as a new dts, as soldering is needed to make
the dock usable and there's functions enabled on the dock that is
unavailable at the 2.54mm pins of the core board.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
---
 arch/arm/boot/dts/Makefile                         |  3 +-
 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts | 67 ++++++++++++++++++++++
 2 files changed, 69 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 011808490fed..1aa365306479 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -876,7 +876,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
 	sun8i-h3-orangepi-plus.dtb \
 	sun8i-h3-orangepi-plus2e.dtb \
 	sun8i-r16-parrot.dtb \
-	sun8i-v3s-licheepi-zero.dtb
+	sun8i-v3s-licheepi-zero.dtb \
+	sun8i-v3s-licheepi-zero-dock.dtb
 dtb-$(CONFIG_MACH_SUN9I) += \
 	sun9i-a80-optimus.dtb \
 	sun9i-a80-cubieboard4.dtb
diff --git a/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts b/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
new file mode 100644
index 000000000000..0ce92dadc07b
--- /dev/null
+++ b/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2016 Icenowy Zheng <icenowy@aosc.xyz>
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This file 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.
+ *
+ *     This file is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "sun8i-v3s-licheepi-zero.dts"
+
+/ {
+	model = "Lichee Pi Zero with Dock";
+	compatible = "licheepi,licheepi-zero-dock", "licheepi,licheepi-zero",
+		     "allwinner,sun8i-v3s";
+};
+
+&codec {
+	allwinner,audio-routing =
+		"Headphone", "HP",
+		"Headphone", "HPCOM",
+		"MIC1", "Mic",
+		"Mic",  "HBIAS";
+	status = "okay";
+};
+
+&mmc1 {
+	pinctrl-0 = <&mmc1_pins>;
+	pinctrl-names = "default";
+	broken-cd;
+	bus-width = <4>;
+	vmmc-supply = <&reg_vcc3v3>;
+	status = "okay";
+};
-- 
2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 03/12] ASoC: sun8i-codec-analog: split out mbias
  2017-03-05 13:37     ` Icenowy Zheng
@ 2017-03-05 13:49         ` Icenowy Zheng
  -1 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:49 UTC (permalink / raw)
  To: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown
  Cc: dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw



05.03.2017, 21:38, "Icenowy Zheng" <icenowy-ymACFijhrKM@public.gmane.org>:
> Allwinner V3s features an analog codec without MBIAS pin.
>
> Split out this part, in order to prepare for the V3s analog codec.
>
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
> ---
>  sound/soc/sunxi/sun8i-codec-analog.c | 34 +++++++++++++++++++++++++++++-----
>  1 file changed, 29 insertions(+), 5 deletions(-)
>

Sorry a definiation of has_mbias is mising in the patch...

It's

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index af56afe5c403..edcc3eb7cd9a 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -695,6 +695,7 @@ struct sun8i_codec_analog_quirks {
  	bool has_hmic;
 	bool has_linein;
 	bool has_lineout;
+	bool has_mbias;
 	bool has_mic2;
 };
 

> diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
> index 6c17c99c2c8d..af56afe5c403 100644
> --- a/sound/soc/sunxi/sun8i-codec-analog.c
> +++ b/sound/soc/sunxi/sun8i-codec-analog.c
> @@ -289,11 +289,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
>          /* Microphone input */
>          SND_SOC_DAPM_INPUT("MIC1"),
>
> - /* Microphone Bias */
> - SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
> - SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
> - 0, NULL, 0),
> -
>          /* Mic input path */
>          SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>                           SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
> @@ -453,6 +448,27 @@ static int sun8i_codec_add_headphone(struct snd_soc_component *cmpnt)
>          return 0;
>  }
>
> +/* mbias specific widget */
> +static const struct snd_soc_dapm_widget sun8i_codec_mbias_widgets[] = {
> + SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
> + SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
> + 0, NULL, 0),
> +};
> +
> +static int sun8i_codec_add_mbias(struct snd_soc_component *cmpnt)
> +{
> + struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
> + struct device *dev = cmpnt->dev;
> + int ret;
> +
> + ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mbias_widgets,
> + ARRAY_SIZE(sun8i_codec_mbias_widgets));
> + if (ret)
> + dev_err(dev, "Failed to add MBIAS DAPM widgets: %d\n", ret);
> +
> + return ret;
> +}
> +
>  /* hmic specific widget */
>  static const struct snd_soc_dapm_widget sun8i_codec_hmic_widgets[] = {
>          SND_SOC_DAPM_SUPPLY("HBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
> @@ -686,12 +702,14 @@ static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
>          .has_headphone = true,
>          .has_hmic = true,
>          .has_linein = true,
> + .has_mbias = true,
>          .has_mic2 = true,
>  };
>
>  static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
>          .has_linein = true,
>          .has_lineout = true,
> + .has_mbias = true,
>          .has_mic2 = true,
>  };
>
> @@ -734,6 +752,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
>                          return ret;
>          }
>
> + if (quirks->has_mbias) {
> + ret = sun8i_codec_add_mbias(cmpnt);
> + if (ret)
> + return ret;
> + }
> +
>          if (quirks->has_mic2) {
>                  ret = sun8i_codec_add_mic2(cmpnt);
>                  if (ret)
> --
> 2.11.1

-- 
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* [PATCH v2 03/12] ASoC: sun8i-codec-analog: split out mbias
@ 2017-03-05 13:49         ` Icenowy Zheng
  0 siblings, 0 replies; 82+ messages in thread
From: Icenowy Zheng @ 2017-03-05 13:49 UTC (permalink / raw)
  To: linux-arm-kernel



05.03.2017, 21:38, "Icenowy Zheng" <icenowy@aosc.xyz>:
> Allwinner V3s features an analog codec without MBIAS pin.
>
> Split out this part, in order to prepare for the V3s analog codec.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
> ?sound/soc/sunxi/sun8i-codec-analog.c | 34 +++++++++++++++++++++++++++++-----
> ?1 file changed, 29 insertions(+), 5 deletions(-)
>

Sorry a definiation of has_mbias is mising in the patch...

It's

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index af56afe5c403..edcc3eb7cd9a 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -695,6 +695,7 @@ struct sun8i_codec_analog_quirks {
  	bool has_hmic;
 	bool has_linein;
 	bool has_lineout;
+	bool has_mbias;
 	bool has_mic2;
 };
 

> diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
> index 6c17c99c2c8d..af56afe5c403 100644
> --- a/sound/soc/sunxi/sun8i-codec-analog.c
> +++ b/sound/soc/sunxi/sun8i-codec-analog.c
> @@ -289,11 +289,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
> ?????????/* Microphone input */
> ?????????SND_SOC_DAPM_INPUT("MIC1"),
>
> - /* Microphone Bias */
> - SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
> - SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
> - 0, NULL, 0),
> -
> ?????????/* Mic input path */
> ?????????SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
> ??????????????????????????SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
> @@ -453,6 +448,27 @@ static int sun8i_codec_add_headphone(struct snd_soc_component *cmpnt)
> ?????????return 0;
> ?}
>
> +/* mbias specific widget */
> +static const struct snd_soc_dapm_widget sun8i_codec_mbias_widgets[] = {
> + SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
> + SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
> + 0, NULL, 0),
> +};
> +
> +static int sun8i_codec_add_mbias(struct snd_soc_component *cmpnt)
> +{
> + struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
> + struct device *dev = cmpnt->dev;
> + int ret;
> +
> + ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mbias_widgets,
> + ARRAY_SIZE(sun8i_codec_mbias_widgets));
> + if (ret)
> + dev_err(dev, "Failed to add MBIAS DAPM widgets: %d\n", ret);
> +
> + return ret;
> +}
> +
> ?/* hmic specific widget */
> ?static const struct snd_soc_dapm_widget sun8i_codec_hmic_widgets[] = {
> ?????????SND_SOC_DAPM_SUPPLY("HBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
> @@ -686,12 +702,14 @@ static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
> ?????????.has_headphone = true,
> ?????????.has_hmic = true,
> ?????????.has_linein = true,
> + .has_mbias = true,
> ?????????.has_mic2 = true,
> ?};
>
> ?static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
> ?????????.has_linein = true,
> ?????????.has_lineout = true,
> + .has_mbias = true,
> ?????????.has_mic2 = true,
> ?};
>
> @@ -734,6 +752,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
> ?????????????????????????return ret;
> ?????????}
>
> + if (quirks->has_mbias) {
> + ret = sun8i_codec_add_mbias(cmpnt);
> + if (ret)
> + return ret;
> + }
> +
> ?????????if (quirks->has_mic2) {
> ?????????????????ret = sun8i_codec_add_mic2(cmpnt);
> ?????????????????if (ret)
> --
> 2.11.1

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] [PATCH v2 01/12] ASoC: sun8i-codec-analog: split out mic2
@ 2017-03-06  3:43       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:43 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:36 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s features an analog codec without MIC2.
>
> Split out this part, in order to prepare for the V3s analog codec.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>

Acked-by: Chen-Yu Tsai <wens@csie.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 01/12] ASoC: sun8i-codec-analog: split out mic2
@ 2017-03-06  3:43       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:43 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, devicetree, linux-arm-kernel,
	linux-kernel, Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:36 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
> Allwinner V3s features an analog codec without MIC2.
>
> Split out this part, in order to prepare for the V3s analog codec.
>
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>

Acked-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [linux-sunxi] [PATCH v2 01/12] ASoC: sun8i-codec-analog: split out mic2
@ 2017-03-06  3:43       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:43 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 5, 2017 at 9:36 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s features an analog codec without MIC2.
>
> Split out this part, in order to prepare for the V3s analog codec.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>

Acked-by: Chen-Yu Tsai <wens@csie.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] [PATCH v2 02/12] ASoC: sun8i-codec-analog: split out line in
@ 2017-03-06  3:45       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:45 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:36 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s features an analog codec without LINEIN.
>
> Split out this part, in order to prepare for the V3s analog codec.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>

Acked-by: Chen-Yu Tsai <wens@csie.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 02/12] ASoC: sun8i-codec-analog: split out line in
@ 2017-03-06  3:45       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:45 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, devicetree, linux-arm-kernel,
	linux-kernel, Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:36 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
> Allwinner V3s features an analog codec without LINEIN.
>
> Split out this part, in order to prepare for the V3s analog codec.
>
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>

Acked-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [linux-sunxi] [PATCH v2 02/12] ASoC: sun8i-codec-analog: split out line in
@ 2017-03-06  3:45       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:45 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 5, 2017 at 9:36 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s features an analog codec without LINEIN.
>
> Split out this part, in order to prepare for the V3s analog codec.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>

Acked-by: Chen-Yu Tsai <wens@csie.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] Re: [PATCH v2 03/12] ASoC: sun8i-codec-analog: split out mbias
@ 2017-03-06  3:46           ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:46 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	alsa-devel, linux-sunxi

On Sun, Mar 5, 2017 at 9:49 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
>
>
> 05.03.2017, 21:38, "Icenowy Zheng" <icenowy@aosc.xyz>:
>> Allwinner V3s features an analog codec without MBIAS pin.
>>
>> Split out this part, in order to prepare for the V3s analog codec.
>>
>> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
>> ---
>>  sound/soc/sunxi/sun8i-codec-analog.c | 34 +++++++++++++++++++++++++++++-----
>>  1 file changed, 29 insertions(+), 5 deletions(-)
>>
>
> Sorry a definiation of has_mbias is mising in the patch...
>
> It's
>
> diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
> index af56afe5c403..edcc3eb7cd9a 100644
> --- a/sound/soc/sunxi/sun8i-codec-analog.c
> +++ b/sound/soc/sunxi/sun8i-codec-analog.c
> @@ -695,6 +695,7 @@ struct sun8i_codec_analog_quirks {
>         bool has_hmic;
>         bool has_linein;
>         bool has_lineout;
> +       bool has_mbias;
>         bool has_mic2;
>  };

Please incorporate this into the patch in the next version, with

Acked-by: Chen-Yu Tsai <wens@csie.org>

>
>
>> diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
>> index 6c17c99c2c8d..af56afe5c403 100644
>> --- a/sound/soc/sunxi/sun8i-codec-analog.c
>> +++ b/sound/soc/sunxi/sun8i-codec-analog.c
>> @@ -289,11 +289,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
>>          /* Microphone input */
>>          SND_SOC_DAPM_INPUT("MIC1"),
>>
>> - /* Microphone Bias */
>> - SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>> - SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
>> - 0, NULL, 0),
>> -
>>          /* Mic input path */
>>          SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>>                           SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
>> @@ -453,6 +448,27 @@ static int sun8i_codec_add_headphone(struct snd_soc_component *cmpnt)
>>          return 0;
>>  }
>>
>> +/* mbias specific widget */
>> +static const struct snd_soc_dapm_widget sun8i_codec_mbias_widgets[] = {
>> + SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>> + SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
>> + 0, NULL, 0),
>> +};
>> +
>> +static int sun8i_codec_add_mbias(struct snd_soc_component *cmpnt)
>> +{
>> + struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
>> + struct device *dev = cmpnt->dev;
>> + int ret;
>> +
>> + ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mbias_widgets,
>> + ARRAY_SIZE(sun8i_codec_mbias_widgets));
>> + if (ret)
>> + dev_err(dev, "Failed to add MBIAS DAPM widgets: %d\n", ret);
>> +
>> + return ret;
>> +}
>> +
>>  /* hmic specific widget */
>>  static const struct snd_soc_dapm_widget sun8i_codec_hmic_widgets[] = {
>>          SND_SOC_DAPM_SUPPLY("HBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>> @@ -686,12 +702,14 @@ static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
>>          .has_headphone = true,
>>          .has_hmic = true,
>>          .has_linein = true,
>> + .has_mbias = true,
>>          .has_mic2 = true,
>>  };
>>
>>  static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
>>          .has_linein = true,
>>          .has_lineout = true,
>> + .has_mbias = true,
>>          .has_mic2 = true,
>>  };
>>
>> @@ -734,6 +752,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
>>                          return ret;
>>          }
>>
>> + if (quirks->has_mbias) {
>> + ret = sun8i_codec_add_mbias(cmpnt);
>> + if (ret)
>> + return ret;
>> + }
>> +
>>          if (quirks->has_mic2) {
>>                  ret = sun8i_codec_add_mic2(cmpnt);
>>                  if (ret)
>> --
>> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: Re: [PATCH v2 03/12] ASoC: sun8i-codec-analog: split out mbias
@ 2017-03-06  3:46           ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:46 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw

On Sun, Mar 5, 2017 at 9:49 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
>
>
> 05.03.2017, 21:38, "Icenowy Zheng" <icenowy-ymACFijhrKM@public.gmane.org>:
>> Allwinner V3s features an analog codec without MBIAS pin.
>>
>> Split out this part, in order to prepare for the V3s analog codec.
>>
>> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
>> ---
>>  sound/soc/sunxi/sun8i-codec-analog.c | 34 +++++++++++++++++++++++++++++-----
>>  1 file changed, 29 insertions(+), 5 deletions(-)
>>
>
> Sorry a definiation of has_mbias is mising in the patch...
>
> It's
>
> diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
> index af56afe5c403..edcc3eb7cd9a 100644
> --- a/sound/soc/sunxi/sun8i-codec-analog.c
> +++ b/sound/soc/sunxi/sun8i-codec-analog.c
> @@ -695,6 +695,7 @@ struct sun8i_codec_analog_quirks {
>         bool has_hmic;
>         bool has_linein;
>         bool has_lineout;
> +       bool has_mbias;
>         bool has_mic2;
>  };

Please incorporate this into the patch in the next version, with

Acked-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>

>
>
>> diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
>> index 6c17c99c2c8d..af56afe5c403 100644
>> --- a/sound/soc/sunxi/sun8i-codec-analog.c
>> +++ b/sound/soc/sunxi/sun8i-codec-analog.c
>> @@ -289,11 +289,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
>>          /* Microphone input */
>>          SND_SOC_DAPM_INPUT("MIC1"),
>>
>> - /* Microphone Bias */
>> - SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>> - SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
>> - 0, NULL, 0),
>> -
>>          /* Mic input path */
>>          SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>>                           SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
>> @@ -453,6 +448,27 @@ static int sun8i_codec_add_headphone(struct snd_soc_component *cmpnt)
>>          return 0;
>>  }
>>
>> +/* mbias specific widget */
>> +static const struct snd_soc_dapm_widget sun8i_codec_mbias_widgets[] = {
>> + SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>> + SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
>> + 0, NULL, 0),
>> +};
>> +
>> +static int sun8i_codec_add_mbias(struct snd_soc_component *cmpnt)
>> +{
>> + struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
>> + struct device *dev = cmpnt->dev;
>> + int ret;
>> +
>> + ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mbias_widgets,
>> + ARRAY_SIZE(sun8i_codec_mbias_widgets));
>> + if (ret)
>> + dev_err(dev, "Failed to add MBIAS DAPM widgets: %d\n", ret);
>> +
>> + return ret;
>> +}
>> +
>>  /* hmic specific widget */
>>  static const struct snd_soc_dapm_widget sun8i_codec_hmic_widgets[] = {
>>          SND_SOC_DAPM_SUPPLY("HBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>> @@ -686,12 +702,14 @@ static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
>>          .has_headphone = true,
>>          .has_hmic = true,
>>          .has_linein = true,
>> + .has_mbias = true,
>>          .has_mic2 = true,
>>  };
>>
>>  static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
>>          .has_linein = true,
>>          .has_lineout = true,
>> + .has_mbias = true,
>>          .has_mic2 = true,
>>  };
>>
>> @@ -734,6 +752,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
>>                          return ret;
>>          }
>>
>> + if (quirks->has_mbias) {
>> + ret = sun8i_codec_add_mbias(cmpnt);
>> + if (ret)
>> + return ret;
>> + }
>> +
>>          if (quirks->has_mic2) {
>>                  ret = sun8i_codec_add_mic2(cmpnt);
>>                  if (ret)
>> --
>> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [linux-sunxi] Re: [PATCH v2 03/12] ASoC: sun8i-codec-analog: split out mbias
@ 2017-03-06  3:46           ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:46 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 5, 2017 at 9:49 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
>
>
> 05.03.2017, 21:38, "Icenowy Zheng" <icenowy@aosc.xyz>:
>> Allwinner V3s features an analog codec without MBIAS pin.
>>
>> Split out this part, in order to prepare for the V3s analog codec.
>>
>> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
>> ---
>>  sound/soc/sunxi/sun8i-codec-analog.c | 34 +++++++++++++++++++++++++++++-----
>>  1 file changed, 29 insertions(+), 5 deletions(-)
>>
>
> Sorry a definiation of has_mbias is mising in the patch...
>
> It's
>
> diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
> index af56afe5c403..edcc3eb7cd9a 100644
> --- a/sound/soc/sunxi/sun8i-codec-analog.c
> +++ b/sound/soc/sunxi/sun8i-codec-analog.c
> @@ -695,6 +695,7 @@ struct sun8i_codec_analog_quirks {
>         bool has_hmic;
>         bool has_linein;
>         bool has_lineout;
> +       bool has_mbias;
>         bool has_mic2;
>  };

Please incorporate this into the patch in the next version, with

Acked-by: Chen-Yu Tsai <wens@csie.org>

>
>
>> diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
>> index 6c17c99c2c8d..af56afe5c403 100644
>> --- a/sound/soc/sunxi/sun8i-codec-analog.c
>> +++ b/sound/soc/sunxi/sun8i-codec-analog.c
>> @@ -289,11 +289,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
>>          /* Microphone input */
>>          SND_SOC_DAPM_INPUT("MIC1"),
>>
>> - /* Microphone Bias */
>> - SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>> - SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
>> - 0, NULL, 0),
>> -
>>          /* Mic input path */
>>          SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>>                           SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
>> @@ -453,6 +448,27 @@ static int sun8i_codec_add_headphone(struct snd_soc_component *cmpnt)
>>          return 0;
>>  }
>>
>> +/* mbias specific widget */
>> +static const struct snd_soc_dapm_widget sun8i_codec_mbias_widgets[] = {
>> + SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>> + SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MMICBIASEN,
>> + 0, NULL, 0),
>> +};
>> +
>> +static int sun8i_codec_add_mbias(struct snd_soc_component *cmpnt)
>> +{
>> + struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
>> + struct device *dev = cmpnt->dev;
>> + int ret;
>> +
>> + ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mbias_widgets,
>> + ARRAY_SIZE(sun8i_codec_mbias_widgets));
>> + if (ret)
>> + dev_err(dev, "Failed to add MBIAS DAPM widgets: %d\n", ret);
>> +
>> + return ret;
>> +}
>> +
>>  /* hmic specific widget */
>>  static const struct snd_soc_dapm_widget sun8i_codec_hmic_widgets[] = {
>>          SND_SOC_DAPM_SUPPLY("HBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
>> @@ -686,12 +702,14 @@ static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
>>          .has_headphone = true,
>>          .has_hmic = true,
>>          .has_linein = true,
>> + .has_mbias = true,
>>          .has_mic2 = true,
>>  };
>>
>>  static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
>>          .has_linein = true,
>>          .has_lineout = true,
>> + .has_mbias = true,
>>          .has_mic2 = true,
>>  };
>>
>> @@ -734,6 +752,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
>>                          return ret;
>>          }
>>
>> + if (quirks->has_mbias) {
>> + ret = sun8i_codec_add_mbias(cmpnt);
>> + if (ret)
>> + return ret;
>> + }
>> +
>>          if (quirks->has_mic2) {
>>                  ret = sun8i_codec_add_mic2(cmpnt);
>>                  if (ret)
>> --
>> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe at googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 06/12] dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
@ 2017-03-06  3:50       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:50 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Originally we enable a special gate bit when the compatible indicates
> A23/33.
>
> But according to BSP sources and user manuals, more SoCs will need this
> gate bit.
>
> So make it a common quirk configured in the config struct.
>
> The BSP source also indicates that A83T will need this gate bit (there's
> "SUN8IW6" in the #ifdef's), so also enable this gate bit for it.

This should be 2 patches, 1 making the option generic, and 1 setting it
for A83T. The DMA engine on A83T is unused in past releases, so no need
to CC stable.

Normally when you mention "also xxxx" in your commit message, it is a
good indicator you should split your patch, unless it is something really
trivial like an extra whitespace cleanup, or splitting the patch would
break the build.

Once split, please add

Acked-by: Chen-Yu Tsai <wens@csie.org>

to both patches.

Regards
ChenYu

> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  drivers/dma/sun6i-dma.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
> index a2358780ab2c..889fb24023cd 100644
> --- a/drivers/dma/sun6i-dma.c
> +++ b/drivers/dma/sun6i-dma.c
> @@ -101,6 +101,7 @@ struct sun6i_dma_config {
>         u32 nr_max_channels;
>         u32 nr_max_requests;
>         u32 nr_max_vchans;
> +       bool gate_needed;
>  };
>
>  /*
> @@ -1009,12 +1010,14 @@ static struct sun6i_dma_config sun8i_a23_dma_cfg = {
>         .nr_max_channels = 8,
>         .nr_max_requests = 24,
>         .nr_max_vchans   = 37,
> +       .gate_needed     = true,
>  };
>
>  static struct sun6i_dma_config sun8i_a83t_dma_cfg = {
>         .nr_max_channels = 8,
>         .nr_max_requests = 28,
>         .nr_max_vchans   = 39,
> +       .gate_needed     = true,
>  };
>
>  /*
> @@ -1177,10 +1180,10 @@ static int sun6i_dma_probe(struct platform_device *pdev)
>         /*
>          * sun8i variant requires us to toggle a dma gating register,
>          * as seen in Allwinner's SDK. This register is not documented
> -        * in the A23 user manual.
> +        * in the A23 user manual, but documented at least in V3s user
> +        * manual.
>          */
> -       if (of_device_is_compatible(pdev->dev.of_node,
> -                                   "allwinner,sun8i-a23-dma"))
> +       if (sdc->cfg->gate_needed)
>                 writel(SUN8I_DMA_GATE_ENABLE, sdc->base + SUN8I_DMA_GATE);
>
>         return 0;
> --
> 2.11.1
>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 06/12] dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
@ 2017-03-06  3:50       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:50 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, devicetree, linux-arm-kernel,
	linux-kernel, Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
> Originally we enable a special gate bit when the compatible indicates
> A23/33.
>
> But according to BSP sources and user manuals, more SoCs will need this
> gate bit.
>
> So make it a common quirk configured in the config struct.
>
> The BSP source also indicates that A83T will need this gate bit (there's
> "SUN8IW6" in the #ifdef's), so also enable this gate bit for it.

This should be 2 patches, 1 making the option generic, and 1 setting it
for A83T. The DMA engine on A83T is unused in past releases, so no need
to CC stable.

Normally when you mention "also xxxx" in your commit message, it is a
good indicator you should split your patch, unless it is something really
trivial like an extra whitespace cleanup, or splitting the patch would
break the build.

Once split, please add

Acked-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>

to both patches.

Regards
ChenYu

> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
> ---
>  drivers/dma/sun6i-dma.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
> index a2358780ab2c..889fb24023cd 100644
> --- a/drivers/dma/sun6i-dma.c
> +++ b/drivers/dma/sun6i-dma.c
> @@ -101,6 +101,7 @@ struct sun6i_dma_config {
>         u32 nr_max_channels;
>         u32 nr_max_requests;
>         u32 nr_max_vchans;
> +       bool gate_needed;
>  };
>
>  /*
> @@ -1009,12 +1010,14 @@ static struct sun6i_dma_config sun8i_a23_dma_cfg = {
>         .nr_max_channels = 8,
>         .nr_max_requests = 24,
>         .nr_max_vchans   = 37,
> +       .gate_needed     = true,
>  };
>
>  static struct sun6i_dma_config sun8i_a83t_dma_cfg = {
>         .nr_max_channels = 8,
>         .nr_max_requests = 28,
>         .nr_max_vchans   = 39,
> +       .gate_needed     = true,
>  };
>
>  /*
> @@ -1177,10 +1180,10 @@ static int sun6i_dma_probe(struct platform_device *pdev)
>         /*
>          * sun8i variant requires us to toggle a dma gating register,
>          * as seen in Allwinner's SDK. This register is not documented
> -        * in the A23 user manual.
> +        * in the A23 user manual, but documented at least in V3s user
> +        * manual.
>          */
> -       if (of_device_is_compatible(pdev->dev.of_node,
> -                                   "allwinner,sun8i-a23-dma"))
> +       if (sdc->cfg->gate_needed)
>                 writel(SUN8I_DMA_GATE_ENABLE, sdc->base + SUN8I_DMA_GATE);
>
>         return 0;
> --
> 2.11.1
>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [PATCH v2 06/12] dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
@ 2017-03-06  3:50       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:50 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Originally we enable a special gate bit when the compatible indicates
> A23/33.
>
> But according to BSP sources and user manuals, more SoCs will need this
> gate bit.
>
> So make it a common quirk configured in the config struct.
>
> The BSP source also indicates that A83T will need this gate bit (there's
> "SUN8IW6" in the #ifdef's), so also enable this gate bit for it.

This should be 2 patches, 1 making the option generic, and 1 setting it
for A83T. The DMA engine on A83T is unused in past releases, so no need
to CC stable.

Normally when you mention "also xxxx" in your commit message, it is a
good indicator you should split your patch, unless it is something really
trivial like an extra whitespace cleanup, or splitting the patch would
break the build.

Once split, please add

Acked-by: Chen-Yu Tsai <wens@csie.org>

to both patches.

Regards
ChenYu

> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  drivers/dma/sun6i-dma.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
> index a2358780ab2c..889fb24023cd 100644
> --- a/drivers/dma/sun6i-dma.c
> +++ b/drivers/dma/sun6i-dma.c
> @@ -101,6 +101,7 @@ struct sun6i_dma_config {
>         u32 nr_max_channels;
>         u32 nr_max_requests;
>         u32 nr_max_vchans;
> +       bool gate_needed;
>  };
>
>  /*
> @@ -1009,12 +1010,14 @@ static struct sun6i_dma_config sun8i_a23_dma_cfg = {
>         .nr_max_channels = 8,
>         .nr_max_requests = 24,
>         .nr_max_vchans   = 37,
> +       .gate_needed     = true,
>  };
>
>  static struct sun6i_dma_config sun8i_a83t_dma_cfg = {
>         .nr_max_channels = 8,
>         .nr_max_requests = 28,
>         .nr_max_vchans   = 39,
> +       .gate_needed     = true,
>  };
>
>  /*
> @@ -1177,10 +1180,10 @@ static int sun6i_dma_probe(struct platform_device *pdev)
>         /*
>          * sun8i variant requires us to toggle a dma gating register,
>          * as seen in Allwinner's SDK. This register is not documented
> -        * in the A23 user manual.
> +        * in the A23 user manual, but documented at least in V3s user
> +        * manual.
>          */
> -       if (of_device_is_compatible(pdev->dev.of_node,
> -                                   "allwinner,sun8i-a23-dma"))
> +       if (sdc->cfg->gate_needed)
>                 writel(SUN8I_DMA_GATE_ENABLE, sdc->base + SUN8I_DMA_GATE);
>
>         return 0;
> --
> 2.11.1
>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] [PATCH v2 04/12] ASoC: sun8i-codec-analog: add support for V3s SoC
@ 2017-03-06  3:53       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:53 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> The V3s SoC features an analog codec with headphone support but without
> mic2 and linein.

You should also make new mixer control sets, with out linein and mic2,
and split out the mixer widget for V3s. Otherwise ALSA is going to
export MIC2 and LineIn playback/capture switches to userspace, which
is going to be confusing to the user. We've never needed this in the
past because all SoCs shared the same set of mixer controls.

ChenYu

>
> Add support for it.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt | 1 +
>  sound/soc/sunxi/sun8i-codec-analog.c                           | 9 +++++++++
>  2 files changed, 10 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
> index 779b735781ba..1b6e7c4e50ab 100644
> --- a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
> +++ b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
> @@ -4,6 +4,7 @@ Required properties:
>  - compatible: must be one of the following compatibles:
>                 - "allwinner,sun8i-a23-codec-analog"
>                 - "allwinner,sun8i-h3-codec-analog"
> +               - "allwinner,sun8i-v3s-codec-analog"
>
>  Required properties if not a sub-node of the PRCM node:
>  - reg: must contain the registers location and length
> diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
> index af56afe5c403..d87c75c6ad8e 100644
> --- a/sound/soc/sunxi/sun8i-codec-analog.c
> +++ b/sound/soc/sunxi/sun8i-codec-analog.c
> @@ -713,6 +713,11 @@ static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
>         .has_mic2       = true,
>  };
>
> +static const struct sun8i_codec_analog_quirks sun8i_v3s_quirks = {
> +       .has_headphone  = true,
> +       .has_hmic       = true,
> +};
> +
>  static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
>  {
>         struct device *dev = cmpnt->dev;
> @@ -786,6 +791,10 @@ static const struct of_device_id sun8i_codec_analog_of_match[] = {
>                 .compatible = "allwinner,sun8i-h3-codec-analog",
>                 .data = &sun8i_h3_quirks,
>         },
> +       {
> +               .compatible = "allwinner,sun8i-v3s-codec-analog",
> +               .data = &sun8i_v3s_quirks,
> +       },
>         {}
>  };
>  MODULE_DEVICE_TABLE(of, sun8i_codec_analog_of_match);
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 04/12] ASoC: sun8i-codec-analog: add support for V3s SoC
@ 2017-03-06  3:53       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:53 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, devicetree, linux-arm-kernel,
	linux-kernel, Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
> The V3s SoC features an analog codec with headphone support but without
> mic2 and linein.

You should also make new mixer control sets, with out linein and mic2,
and split out the mixer widget for V3s. Otherwise ALSA is going to
export MIC2 and LineIn playback/capture switches to userspace, which
is going to be confusing to the user. We've never needed this in the
past because all SoCs shared the same set of mixer controls.

ChenYu

>
> Add support for it.
>
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
> ---
>  Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt | 1 +
>  sound/soc/sunxi/sun8i-codec-analog.c                           | 9 +++++++++
>  2 files changed, 10 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
> index 779b735781ba..1b6e7c4e50ab 100644
> --- a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
> +++ b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
> @@ -4,6 +4,7 @@ Required properties:
>  - compatible: must be one of the following compatibles:
>                 - "allwinner,sun8i-a23-codec-analog"
>                 - "allwinner,sun8i-h3-codec-analog"
> +               - "allwinner,sun8i-v3s-codec-analog"
>
>  Required properties if not a sub-node of the PRCM node:
>  - reg: must contain the registers location and length
> diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
> index af56afe5c403..d87c75c6ad8e 100644
> --- a/sound/soc/sunxi/sun8i-codec-analog.c
> +++ b/sound/soc/sunxi/sun8i-codec-analog.c
> @@ -713,6 +713,11 @@ static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
>         .has_mic2       = true,
>  };
>
> +static const struct sun8i_codec_analog_quirks sun8i_v3s_quirks = {
> +       .has_headphone  = true,
> +       .has_hmic       = true,
> +};
> +
>  static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
>  {
>         struct device *dev = cmpnt->dev;
> @@ -786,6 +791,10 @@ static const struct of_device_id sun8i_codec_analog_of_match[] = {
>                 .compatible = "allwinner,sun8i-h3-codec-analog",
>                 .data = &sun8i_h3_quirks,
>         },
> +       {
> +               .compatible = "allwinner,sun8i-v3s-codec-analog",
> +               .data = &sun8i_v3s_quirks,
> +       },
>         {}
>  };
>  MODULE_DEVICE_TABLE(of, sun8i_codec_analog_of_match);
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [linux-sunxi] [PATCH v2 04/12] ASoC: sun8i-codec-analog: add support for V3s SoC
@ 2017-03-06  3:53       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:53 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> The V3s SoC features an analog codec with headphone support but without
> mic2 and linein.

You should also make new mixer control sets, with out linein and mic2,
and split out the mixer widget for V3s. Otherwise ALSA is going to
export MIC2 and LineIn playback/capture switches to userspace, which
is going to be confusing to the user. We've never needed this in the
past because all SoCs shared the same set of mixer controls.

ChenYu

>
> Add support for it.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt | 1 +
>  sound/soc/sunxi/sun8i-codec-analog.c                           | 9 +++++++++
>  2 files changed, 10 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
> index 779b735781ba..1b6e7c4e50ab 100644
> --- a/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
> +++ b/Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
> @@ -4,6 +4,7 @@ Required properties:
>  - compatible: must be one of the following compatibles:
>                 - "allwinner,sun8i-a23-codec-analog"
>                 - "allwinner,sun8i-h3-codec-analog"
> +               - "allwinner,sun8i-v3s-codec-analog"
>
>  Required properties if not a sub-node of the PRCM node:
>  - reg: must contain the registers location and length
> diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
> index af56afe5c403..d87c75c6ad8e 100644
> --- a/sound/soc/sunxi/sun8i-codec-analog.c
> +++ b/sound/soc/sunxi/sun8i-codec-analog.c
> @@ -713,6 +713,11 @@ static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
>         .has_mic2       = true,
>  };
>
> +static const struct sun8i_codec_analog_quirks sun8i_v3s_quirks = {
> +       .has_headphone  = true,
> +       .has_hmic       = true,
> +};
> +
>  static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
>  {
>         struct device *dev = cmpnt->dev;
> @@ -786,6 +791,10 @@ static const struct of_device_id sun8i_codec_analog_of_match[] = {
>                 .compatible = "allwinner,sun8i-h3-codec-analog",
>                 .data = &sun8i_h3_quirks,
>         },
> +       {
> +               .compatible = "allwinner,sun8i-v3s-codec-analog",
> +               .data = &sun8i_v3s_quirks,
> +       },
>         {}
>  };
>  MODULE_DEVICE_TABLE(of, sun8i_codec_analog_of_match);
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe at googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] [PATCH v2 07/12] dmaengine: sun6i: support V3s SoC variant
  2017-03-05 13:37     ` Icenowy Zheng
  (?)
@ 2017-03-06  3:58       ` Chen-Yu Tsai
  -1 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:58 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s has a DMA engine similar to the ones from A31, but with
> fewer channels and DRQs.
>
> Add support for it.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>

Acked-by: Chen-Yu Tsai <wens@csie.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] [PATCH v2 07/12] dmaengine: sun6i: support V3s SoC variant
@ 2017-03-06  3:58       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:58 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: devicetree, Linux-ALSA, Vinod Koul, Mark Brown, linux-sunxi,
	linux-kernel, Chen-Yu Tsai, Rob Herring, dmaengine,
	Maxime Ripard, linux-arm-kernel

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s has a DMA engine similar to the ones from A31, but with
> fewer channels and DRQs.
>
> Add support for it.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>

Acked-by: Chen-Yu Tsai <wens@csie.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [linux-sunxi] [PATCH v2 07/12] dmaengine: sun6i: support V3s SoC variant
@ 2017-03-06  3:58       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  3:58 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s has a DMA engine similar to the ones from A31, but with
> fewer channels and DRQs.
>
> Add support for it.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>

Acked-by: Chen-Yu Tsai <wens@csie.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] [PATCH v2 05/12] ASoC: sun4i-codec: Add support for V3s codec
@ 2017-03-06  4:05       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:05 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> The codec in the V3s is similar to the one found on the A31. One key
> difference is the analog path controls are routed through the PRCM
> block. This is supported by the sun8i-codec-analog driver, and tied
> into this codec driver with the audio card's aux_dev.
>
> In addition, the V3s does not have LINEIN, LINEOUT, MBIAS and MIC2,
> MIC3, and the FIFO related registers are like H3.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  .../devicetree/bindings/sound/sun4i-codec.txt      | 11 ++--
>  sound/soc/sunxi/sun4i-codec.c                      | 59 ++++++++++++++++++++++
>  2 files changed, 66 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> index 3863531d1e6d..2d4e10deb6f4 100644
> --- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> +++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> @@ -7,6 +7,7 @@ Required properties:
>                 - "allwinner,sun7i-a20-codec"
>                 - "allwinner,sun8i-a23-codec"
>                 - "allwinner,sun8i-h3-codec"
> +               - "allwinner,sun8i-v3s-codec"
>  - reg: must contain the registers location and length
>  - interrupts: must contain the codec interrupt
>  - dmas: DMA channels for tx and rx dma. See the DMA client binding,
> @@ -25,6 +26,7 @@ Required properties for the following compatibles:
>                 - "allwinner,sun6i-a31-codec"
>                 - "allwinner,sun8i-a23-codec"
>                 - "allwinner,sun8i-h3-codec"
> +               - "allwinner,sun8i-v3s-codec"
>  - resets: phandle to the reset control for this device
>  - allwinner,audio-routing: A list of the connections between audio components.
>                            Each entry is a pair of strings, the first being the
> @@ -34,15 +36,15 @@ Required properties for the following compatibles:
>                            Audio pins on the SoC:
>                            "HP"
>                            "HPCOM"
> -                          "LINEIN"
> -                          "LINEOUT"    (not on sun8i-a23)
> +                          "LINEIN"     (not on sun8i-v3s)
> +                          "LINEOUT"    (not on sun8i-a23 or sun8i-v3s)
>                            "MIC1"
> -                          "MIC2"
> +                          "MIC2"       (not on sun8i-v3s)
>                            "MIC3"       (sun6i-a31 only)
>
>                            Microphone biases from the SoC:
>                            "HBIAS"
> -                          "MBIAS"
> +                          "MBIAS"      (not on sun8i-v3s)
>
>                            Board connectors:
>                            "Headphone"
> @@ -55,6 +57,7 @@ Required properties for the following compatibles:
>  Required properties for the following compatibles:
>                 - "allwinner,sun8i-a23-codec"
>                 - "allwinner,sun8i-h3-codec"
> +               - "allwinner,sun8i-v3s-codec"
>  - allwinner,codec-analog-controls: A phandle to the codec analog controls
>                                    block in the PRCM.
>
> diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
> index c3aab10fa085..7f1b1aa95e0b 100644
> --- a/sound/soc/sunxi/sun4i-codec.c
> +++ b/sound/soc/sunxi/sun4i-codec.c
> @@ -1339,6 +1339,44 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)
>         return card;
>  };
>
> +static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)
> +{
> +       struct snd_soc_card *card;
> +       int ret;
> +
> +       card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
> +       if (!card)
> +               return ERR_PTR(-ENOMEM);
> +
> +       aux_dev.codec_of_node = of_parse_phandle(dev->of_node,
> +                                                "allwinner,codec-analog-controls",
> +                                                0);
> +       if (!aux_dev.codec_of_node) {
> +               dev_err(dev, "Can't find analog controls for codec.\n");
> +               return ERR_PTR(-EINVAL);
> +       };
> +
> +       card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
> +       if (!card->dai_link)
> +               return ERR_PTR(-ENOMEM);
> +
> +       card->dev               = dev;
> +       card->name              = "V3s Audio Codec";
> +       card->dapm_widgets      = sun6i_codec_card_dapm_widgets;
> +       card->num_dapm_widgets  = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
> +       card->dapm_routes       = sun8i_codec_card_routes;
> +       card->num_dapm_routes   = ARRAY_SIZE(sun8i_codec_card_routes);
> +       card->aux_dev           = &aux_dev;
> +       card->num_aux_devs      = 1;
> +       card->fully_routed      = true;
> +
> +       ret = snd_soc_of_parse_audio_routing(card, "allwinner,audio-routing");
> +       if (ret)
> +               dev_warn(dev, "failed to parse audio-routing: %d\n", ret);
> +
> +       return card;
> +};
> +
>  static const struct regmap_config sun4i_codec_regmap_config = {
>         .reg_bits       = 32,
>         .reg_stride     = 4,
> @@ -1374,6 +1412,13 @@ static const struct regmap_config sun8i_h3_codec_regmap_config = {
>         .max_register   = SUN8I_H3_CODEC_ADC_DBG,
>  };
>
> +static const struct regmap_config sun8i_v3s_codec_regmap_config = {
> +       .reg_bits       = 32,
> +       .reg_stride     = 4,
> +       .val_bits       = 32,
> +       .max_register   = SUN6I_CODEC_HMIC_DATA,

The last defined register for the non digital audio processing parts is
SUN8I_H3_CODEC_ADC_DBG.

Or if you want you could include everything, which goes up to 0x400.

> +};
> +
>  struct sun4i_codec_quirks {
>         const struct regmap_config *regmap_config;
>         const struct snd_soc_codec_driver *codec;
> @@ -1422,6 +1467,16 @@ static const struct sun4i_codec_quirks sun8i_a23_codec_quirks = {
>         .has_reset      = true,
>  };
>
> +static const struct sun4i_codec_quirks sun8i_v3s_codec_quirks = {
> +       .regmap_config  = &sun8i_v3s_codec_regmap_config,
> +       .codec          = &sun8i_a23_codec_codec,

Please leave a note, like the H3, that this should be changed if digital audio
processing is added.

Regards
ChenYu

> +       .create_card    = sun8i_v3s_codec_create_card,
> +       .reg_adc_fifoc  = REG_FIELD(SUN6I_CODEC_ADC_FIFOC, 0, 31),
> +       .reg_dac_txdata = SUN8I_H3_CODEC_DAC_TXDATA,
> +       .reg_adc_rxdata = SUN6I_CODEC_ADC_RXDATA,
> +       .has_reset      = true,
> +};
> +
>  static const struct sun4i_codec_quirks sun8i_h3_codec_quirks = {
>         .regmap_config  = &sun8i_h3_codec_regmap_config,
>         /*
> @@ -1458,6 +1513,10 @@ static const struct of_device_id sun4i_codec_of_match[] = {
>                 .compatible = "allwinner,sun8i-h3-codec",
>                 .data = &sun8i_h3_codec_quirks,
>         },
> +       {
> +               .compatible = "allwinner,sun8i-v3s-codec",
> +               .data = &sun8i_v3s_codec_quirks,
> +       },
>         {}
>  };
>  MODULE_DEVICE_TABLE(of, sun4i_codec_of_match);
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 05/12] ASoC: sun4i-codec: Add support for V3s codec
@ 2017-03-06  4:05       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:05 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, devicetree, linux-arm-kernel,
	linux-kernel, Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
> The codec in the V3s is similar to the one found on the A31. One key
> difference is the analog path controls are routed through the PRCM
> block. This is supported by the sun8i-codec-analog driver, and tied
> into this codec driver with the audio card's aux_dev.
>
> In addition, the V3s does not have LINEIN, LINEOUT, MBIAS and MIC2,
> MIC3, and the FIFO related registers are like H3.
>
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
> ---
>  .../devicetree/bindings/sound/sun4i-codec.txt      | 11 ++--
>  sound/soc/sunxi/sun4i-codec.c                      | 59 ++++++++++++++++++++++
>  2 files changed, 66 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> index 3863531d1e6d..2d4e10deb6f4 100644
> --- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> +++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> @@ -7,6 +7,7 @@ Required properties:
>                 - "allwinner,sun7i-a20-codec"
>                 - "allwinner,sun8i-a23-codec"
>                 - "allwinner,sun8i-h3-codec"
> +               - "allwinner,sun8i-v3s-codec"
>  - reg: must contain the registers location and length
>  - interrupts: must contain the codec interrupt
>  - dmas: DMA channels for tx and rx dma. See the DMA client binding,
> @@ -25,6 +26,7 @@ Required properties for the following compatibles:
>                 - "allwinner,sun6i-a31-codec"
>                 - "allwinner,sun8i-a23-codec"
>                 - "allwinner,sun8i-h3-codec"
> +               - "allwinner,sun8i-v3s-codec"
>  - resets: phandle to the reset control for this device
>  - allwinner,audio-routing: A list of the connections between audio components.
>                            Each entry is a pair of strings, the first being the
> @@ -34,15 +36,15 @@ Required properties for the following compatibles:
>                            Audio pins on the SoC:
>                            "HP"
>                            "HPCOM"
> -                          "LINEIN"
> -                          "LINEOUT"    (not on sun8i-a23)
> +                          "LINEIN"     (not on sun8i-v3s)
> +                          "LINEOUT"    (not on sun8i-a23 or sun8i-v3s)
>                            "MIC1"
> -                          "MIC2"
> +                          "MIC2"       (not on sun8i-v3s)
>                            "MIC3"       (sun6i-a31 only)
>
>                            Microphone biases from the SoC:
>                            "HBIAS"
> -                          "MBIAS"
> +                          "MBIAS"      (not on sun8i-v3s)
>
>                            Board connectors:
>                            "Headphone"
> @@ -55,6 +57,7 @@ Required properties for the following compatibles:
>  Required properties for the following compatibles:
>                 - "allwinner,sun8i-a23-codec"
>                 - "allwinner,sun8i-h3-codec"
> +               - "allwinner,sun8i-v3s-codec"
>  - allwinner,codec-analog-controls: A phandle to the codec analog controls
>                                    block in the PRCM.
>
> diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
> index c3aab10fa085..7f1b1aa95e0b 100644
> --- a/sound/soc/sunxi/sun4i-codec.c
> +++ b/sound/soc/sunxi/sun4i-codec.c
> @@ -1339,6 +1339,44 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)
>         return card;
>  };
>
> +static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)
> +{
> +       struct snd_soc_card *card;
> +       int ret;
> +
> +       card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
> +       if (!card)
> +               return ERR_PTR(-ENOMEM);
> +
> +       aux_dev.codec_of_node = of_parse_phandle(dev->of_node,
> +                                                "allwinner,codec-analog-controls",
> +                                                0);
> +       if (!aux_dev.codec_of_node) {
> +               dev_err(dev, "Can't find analog controls for codec.\n");
> +               return ERR_PTR(-EINVAL);
> +       };
> +
> +       card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
> +       if (!card->dai_link)
> +               return ERR_PTR(-ENOMEM);
> +
> +       card->dev               = dev;
> +       card->name              = "V3s Audio Codec";
> +       card->dapm_widgets      = sun6i_codec_card_dapm_widgets;
> +       card->num_dapm_widgets  = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
> +       card->dapm_routes       = sun8i_codec_card_routes;
> +       card->num_dapm_routes   = ARRAY_SIZE(sun8i_codec_card_routes);
> +       card->aux_dev           = &aux_dev;
> +       card->num_aux_devs      = 1;
> +       card->fully_routed      = true;
> +
> +       ret = snd_soc_of_parse_audio_routing(card, "allwinner,audio-routing");
> +       if (ret)
> +               dev_warn(dev, "failed to parse audio-routing: %d\n", ret);
> +
> +       return card;
> +};
> +
>  static const struct regmap_config sun4i_codec_regmap_config = {
>         .reg_bits       = 32,
>         .reg_stride     = 4,
> @@ -1374,6 +1412,13 @@ static const struct regmap_config sun8i_h3_codec_regmap_config = {
>         .max_register   = SUN8I_H3_CODEC_ADC_DBG,
>  };
>
> +static const struct regmap_config sun8i_v3s_codec_regmap_config = {
> +       .reg_bits       = 32,
> +       .reg_stride     = 4,
> +       .val_bits       = 32,
> +       .max_register   = SUN6I_CODEC_HMIC_DATA,

The last defined register for the non digital audio processing parts is
SUN8I_H3_CODEC_ADC_DBG.

Or if you want you could include everything, which goes up to 0x400.

> +};
> +
>  struct sun4i_codec_quirks {
>         const struct regmap_config *regmap_config;
>         const struct snd_soc_codec_driver *codec;
> @@ -1422,6 +1467,16 @@ static const struct sun4i_codec_quirks sun8i_a23_codec_quirks = {
>         .has_reset      = true,
>  };
>
> +static const struct sun4i_codec_quirks sun8i_v3s_codec_quirks = {
> +       .regmap_config  = &sun8i_v3s_codec_regmap_config,
> +       .codec          = &sun8i_a23_codec_codec,

Please leave a note, like the H3, that this should be changed if digital audio
processing is added.

Regards
ChenYu

> +       .create_card    = sun8i_v3s_codec_create_card,
> +       .reg_adc_fifoc  = REG_FIELD(SUN6I_CODEC_ADC_FIFOC, 0, 31),
> +       .reg_dac_txdata = SUN8I_H3_CODEC_DAC_TXDATA,
> +       .reg_adc_rxdata = SUN6I_CODEC_ADC_RXDATA,
> +       .has_reset      = true,
> +};
> +
>  static const struct sun4i_codec_quirks sun8i_h3_codec_quirks = {
>         .regmap_config  = &sun8i_h3_codec_regmap_config,
>         /*
> @@ -1458,6 +1513,10 @@ static const struct of_device_id sun4i_codec_of_match[] = {
>                 .compatible = "allwinner,sun8i-h3-codec",
>                 .data = &sun8i_h3_codec_quirks,
>         },
> +       {
> +               .compatible = "allwinner,sun8i-v3s-codec",
> +               .data = &sun8i_v3s_codec_quirks,
> +       },
>         {}
>  };
>  MODULE_DEVICE_TABLE(of, sun4i_codec_of_match);
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [linux-sunxi] [PATCH v2 05/12] ASoC: sun4i-codec: Add support for V3s codec
@ 2017-03-06  4:05       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:05 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> The codec in the V3s is similar to the one found on the A31. One key
> difference is the analog path controls are routed through the PRCM
> block. This is supported by the sun8i-codec-analog driver, and tied
> into this codec driver with the audio card's aux_dev.
>
> In addition, the V3s does not have LINEIN, LINEOUT, MBIAS and MIC2,
> MIC3, and the FIFO related registers are like H3.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  .../devicetree/bindings/sound/sun4i-codec.txt      | 11 ++--
>  sound/soc/sunxi/sun4i-codec.c                      | 59 ++++++++++++++++++++++
>  2 files changed, 66 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> index 3863531d1e6d..2d4e10deb6f4 100644
> --- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> +++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> @@ -7,6 +7,7 @@ Required properties:
>                 - "allwinner,sun7i-a20-codec"
>                 - "allwinner,sun8i-a23-codec"
>                 - "allwinner,sun8i-h3-codec"
> +               - "allwinner,sun8i-v3s-codec"
>  - reg: must contain the registers location and length
>  - interrupts: must contain the codec interrupt
>  - dmas: DMA channels for tx and rx dma. See the DMA client binding,
> @@ -25,6 +26,7 @@ Required properties for the following compatibles:
>                 - "allwinner,sun6i-a31-codec"
>                 - "allwinner,sun8i-a23-codec"
>                 - "allwinner,sun8i-h3-codec"
> +               - "allwinner,sun8i-v3s-codec"
>  - resets: phandle to the reset control for this device
>  - allwinner,audio-routing: A list of the connections between audio components.
>                            Each entry is a pair of strings, the first being the
> @@ -34,15 +36,15 @@ Required properties for the following compatibles:
>                            Audio pins on the SoC:
>                            "HP"
>                            "HPCOM"
> -                          "LINEIN"
> -                          "LINEOUT"    (not on sun8i-a23)
> +                          "LINEIN"     (not on sun8i-v3s)
> +                          "LINEOUT"    (not on sun8i-a23 or sun8i-v3s)
>                            "MIC1"
> -                          "MIC2"
> +                          "MIC2"       (not on sun8i-v3s)
>                            "MIC3"       (sun6i-a31 only)
>
>                            Microphone biases from the SoC:
>                            "HBIAS"
> -                          "MBIAS"
> +                          "MBIAS"      (not on sun8i-v3s)
>
>                            Board connectors:
>                            "Headphone"
> @@ -55,6 +57,7 @@ Required properties for the following compatibles:
>  Required properties for the following compatibles:
>                 - "allwinner,sun8i-a23-codec"
>                 - "allwinner,sun8i-h3-codec"
> +               - "allwinner,sun8i-v3s-codec"
>  - allwinner,codec-analog-controls: A phandle to the codec analog controls
>                                    block in the PRCM.
>
> diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
> index c3aab10fa085..7f1b1aa95e0b 100644
> --- a/sound/soc/sunxi/sun4i-codec.c
> +++ b/sound/soc/sunxi/sun4i-codec.c
> @@ -1339,6 +1339,44 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)
>         return card;
>  };
>
> +static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)
> +{
> +       struct snd_soc_card *card;
> +       int ret;
> +
> +       card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
> +       if (!card)
> +               return ERR_PTR(-ENOMEM);
> +
> +       aux_dev.codec_of_node = of_parse_phandle(dev->of_node,
> +                                                "allwinner,codec-analog-controls",
> +                                                0);
> +       if (!aux_dev.codec_of_node) {
> +               dev_err(dev, "Can't find analog controls for codec.\n");
> +               return ERR_PTR(-EINVAL);
> +       };
> +
> +       card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
> +       if (!card->dai_link)
> +               return ERR_PTR(-ENOMEM);
> +
> +       card->dev               = dev;
> +       card->name              = "V3s Audio Codec";
> +       card->dapm_widgets      = sun6i_codec_card_dapm_widgets;
> +       card->num_dapm_widgets  = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
> +       card->dapm_routes       = sun8i_codec_card_routes;
> +       card->num_dapm_routes   = ARRAY_SIZE(sun8i_codec_card_routes);
> +       card->aux_dev           = &aux_dev;
> +       card->num_aux_devs      = 1;
> +       card->fully_routed      = true;
> +
> +       ret = snd_soc_of_parse_audio_routing(card, "allwinner,audio-routing");
> +       if (ret)
> +               dev_warn(dev, "failed to parse audio-routing: %d\n", ret);
> +
> +       return card;
> +};
> +
>  static const struct regmap_config sun4i_codec_regmap_config = {
>         .reg_bits       = 32,
>         .reg_stride     = 4,
> @@ -1374,6 +1412,13 @@ static const struct regmap_config sun8i_h3_codec_regmap_config = {
>         .max_register   = SUN8I_H3_CODEC_ADC_DBG,
>  };
>
> +static const struct regmap_config sun8i_v3s_codec_regmap_config = {
> +       .reg_bits       = 32,
> +       .reg_stride     = 4,
> +       .val_bits       = 32,
> +       .max_register   = SUN6I_CODEC_HMIC_DATA,

The last defined register for the non digital audio processing parts is
SUN8I_H3_CODEC_ADC_DBG.

Or if you want you could include everything, which goes up to 0x400.

> +};
> +
>  struct sun4i_codec_quirks {
>         const struct regmap_config *regmap_config;
>         const struct snd_soc_codec_driver *codec;
> @@ -1422,6 +1467,16 @@ static const struct sun4i_codec_quirks sun8i_a23_codec_quirks = {
>         .has_reset      = true,
>  };
>
> +static const struct sun4i_codec_quirks sun8i_v3s_codec_quirks = {
> +       .regmap_config  = &sun8i_v3s_codec_regmap_config,
> +       .codec          = &sun8i_a23_codec_codec,

Please leave a note, like the H3, that this should be changed if digital audio
processing is added.

Regards
ChenYu

> +       .create_card    = sun8i_v3s_codec_create_card,
> +       .reg_adc_fifoc  = REG_FIELD(SUN6I_CODEC_ADC_FIFOC, 0, 31),
> +       .reg_dac_txdata = SUN8I_H3_CODEC_DAC_TXDATA,
> +       .reg_adc_rxdata = SUN6I_CODEC_ADC_RXDATA,
> +       .has_reset      = true,
> +};
> +
>  static const struct sun4i_codec_quirks sun8i_h3_codec_quirks = {
>         .regmap_config  = &sun8i_h3_codec_regmap_config,
>         /*
> @@ -1458,6 +1513,10 @@ static const struct of_device_id sun4i_codec_of_match[] = {
>                 .compatible = "allwinner,sun8i-h3-codec",
>                 .data = &sun8i_h3_codec_quirks,
>         },
> +       {
> +               .compatible = "allwinner,sun8i-v3s-codec",
> +               .data = &sun8i_v3s_codec_quirks,
> +       },
>         {}
>  };
>  MODULE_DEVICE_TABLE(of, sun4i_codec_of_match);
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe at googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] [PATCH v2 08/12] ARM: dts: sun8i: restore the inclusion of ccu headers in V3s DTSI
@ 2017-03-06  4:12       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:12 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	Linux-ALSA, linux-sunxi

Hi,

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> When the V3s support patchset is applied, CCU headers and V3s DTSI went
> into different trees, so the CCU inclusion is removed in the DTSI.
>
> Add back them.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  arch/arm/boot/dts/sun8i-v3s.dtsi | 67 ++++++++++++++++++++--------------------
>  1 file changed, 34 insertions(+), 33 deletions(-)
>
> diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
> index 71075969e5e6..b3f8b7f9c0bb 100644
> --- a/arch/arm/boot/dts/sun8i-v3s.dtsi
> +++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
> @@ -40,6 +40,8 @@
>   *     OTHER DEALINGS IN THE SOFTWARE.
>   */
>
> +#include <dt-bindings/clock/sun8i-v3s-ccu.h>
> +#include <dt-bindings/reset/sun8i-v3s-ccu.h>
>  #include <dt-bindings/interrupt-controller/arm-gic.h>

Please sort alphabetically. Or if you want, put the sunxi specific headers
in a separate group, separated by an empty line from the arm-gic one.

>
>  / {
> @@ -55,7 +57,7 @@
>                         compatible = "arm,cortex-a7";
>                         device_type = "cpu";
>                         reg = <0>;
> -                       clocks = <&ccu 14>;
> +                       clocks = <&ccu CLK_CPU>;
>                 };
>         };
>
> @@ -96,15 +98,15 @@
>                 mmc0: mmc@01c0f000 {
>                         compatible = "allwinner,sun7i-a20-mmc";
>                         reg = <0x01c0f000 0x1000>;
> -                       clocks = <&ccu 22>,
> -                                <&ccu 45>,
> -                                <&ccu 47>,
> -                                <&ccu 46>;
> +                       clocks = <&ccu CLK_BUS_MMC0>,
> +                                <&ccu CLK_MMC0>,
> +                                <&ccu CLK_MMC0_OUTPUT>,
> +                                <&ccu CLK_MMC0_SAMPLE>;
>                         clock-names = "ahb",
>                                       "mmc",
>                                       "output",
>                                       "sample";
> -                       resets = <&ccu 7>;
> +                       resets = <&ccu RST_BUS_MMC0>;
>                         reset-names = "ahb";
>                         interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
>                         status = "disabled";
> @@ -115,15 +117,15 @@
>                 mmc1: mmc@01c10000 {
>                         compatible = "allwinner,sun7i-a20-mmc";
>                         reg = <0x01c10000 0x1000>;
> -                       clocks = <&ccu 23>,
> -                                <&ccu 48>,
> -                                <&ccu 50>,
> -                                <&ccu 49>;
> +                       clocks = <&ccu CLK_BUS_MMC1>,
> +                                <&ccu CLK_MMC1>,
> +                                <&ccu CLK_MMC1_OUTPUT>,
> +                                <&ccu CLK_MMC1_SAMPLE>;
>                         clock-names = "ahb",
>                                       "mmc",
>                                       "output",
>                                       "sample";
> -                       resets = <&ccu 8>;
> +                       resets = <&ccu RST_BUS_MMC1>;
>                         reset-names = "ahb";
>                         interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
>                         status = "disabled";
> @@ -134,15 +136,15 @@
>                 mmc2: mmc@01c11000 {
>                         compatible = "allwinner,sun7i-a20-mmc";
>                         reg = <0x01c11000 0x1000>;
> -                       clocks = <&ccu 24>,
> -                                <&ccu 51>,
> -                                <&ccu 53>,
> -                                <&ccu 52>;
> +                       clocks = <&ccu CLK_BUS_MMC2>,
> +                                <&ccu CLK_MMC2>,
> +                                <&ccu CLK_MMC2_OUTPUT>,
> +                                <&ccu CLK_MMC2_SAMPLE>;
>                         clock-names = "ahb",
>                                       "mmc",
>                                       "output",
>                                       "sample";
> -                       resets = <&ccu 9>;
> +                       resets = <&ccu RST_BUS_MMC2>;
>                         reset-names = "ahb";
>                         interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
>                         status = "disabled";
> @@ -153,8 +155,8 @@
>                 usb_otg: usb@01c19000 {
>                         compatible = "allwinner,sun8i-h3-musb";
>                         reg = <0x01c19000 0x0400>;
> -                       clocks = <&ccu 29>;
> -                       resets = <&ccu 17>;
> +                       clocks = <&ccu CLK_BUS_OTG>;
> +                       resets = <&ccu RST_BUS_OTG>;
>                         interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
>                         interrupt-names = "mc";
>                         phys = <&usbphy 0>;
> @@ -169,9 +171,9 @@
>                               <0x01c1a800 0x4>;
>                         reg-names = "phy_ctrl",
>                                     "pmu0";
> -                       clocks = <&ccu 56>;
> +                       clocks = <&ccu CLK_USB_PHY0>;
>                         clock-names = "usb0_phy";
> -                       resets = <&ccu 0>;
> +                       resets = <&ccu RST_USB_PHY0>;
>                         reset-names = "usb0_reset";
>                         status = "disabled";
>                         #phy-cells = <1>;
> @@ -198,7 +200,7 @@
>                         reg = <0x01c20800 0x400>;
>                         interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
>                                      <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
> -                       clocks = <&ccu 37>, <&osc24M>, <&osc32k>;
> +                       clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
>                         clock-names = "apb", "hosc", "losc";
>                         gpio-controller;
>                         #gpio-cells = <3>;
> @@ -213,6 +215,7 @@
>                         uart0_pins_a: uart0@0 {
>                                 pins = "PB8", "PB9";
>                                 function = "uart0";
> +                               bias-pull-up;

This is an unrelated change. Please split it out. On the other hand,
if the board has proper external pull-ups, you might not need this.

Otherwise,

Acked-by: Chen-Yu Tsai <wens@csie.org>

>                         };
>
>                         mmc0_pins_a: mmc0@0 {
> @@ -244,8 +247,8 @@
>                         interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
>                         reg-shift = <2>;
>                         reg-io-width = <4>;
> -                       clocks = <&ccu 40>;
> -                       resets = <&ccu 49>;
> +                       clocks = <&ccu CLK_BUS_UART0>;
> +                       resets = <&ccu RST_BUS_UART0>;
>                         status = "disabled";
>                 };
>
> @@ -255,8 +258,8 @@
>                         interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
>                         reg-shift = <2>;
>                         reg-io-width = <4>;
> -                       clocks = <&ccu 41>;
> -                       resets = <&ccu 50>;
> +                       clocks = <&ccu CLK_BUS_UART1>;
> +                       resets = <&ccu RST_BUS_UART1>;
>                         status = "disabled";
>                 };
>
> @@ -266,8 +269,8 @@
>                         interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
>                         reg-shift = <2>;
>                         reg-io-width = <4>;
> -                       clocks = <&ccu 42>;
> -                       resets = <&ccu 51>;
> +                       clocks = <&ccu CLK_BUS_UART2>;
> +                       resets = <&ccu RST_BUS_UART2>;
>                         status = "disabled";
>                 };
>
> @@ -275,10 +278,8 @@
>                         compatible = "allwinner,sun6i-a31-i2c";
>                         reg = <0x01c2ac00 0x400>;
>                         interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
> -                       clocks = <&ccu 38>;
> -                       resets = <&ccu 46>;
> -                       pinctrl-names = "default";
> -                       pinctrl-0 = <&i2c0_pins>;
> +                       clocks = <&ccu CLK_BUS_I2C0>;
> +                       resets = <&ccu RST_BUS_I2C0>;
>                         status = "disabled";
>                         #address-cells = <1>;
>                         #size-cells = <0>;
> @@ -288,8 +289,8 @@
>                         compatible = "allwinner,sun6i-a31-i2c";
>                         reg = <0x01c2b000 0x400>;
>                         interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
> -                       clocks = <&ccu 39>;
> -                       resets = <&ccu 47>;
> +                       clocks = <&ccu CLK_BUS_I2C1>;
> +                       resets = <&ccu RST_BUS_I2C1>;
>                         status = "disabled";
>                         #address-cells = <1>;
>                         #size-cells = <0>;
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 08/12] ARM: dts: sun8i: restore the inclusion of ccu headers in V3s DTSI
@ 2017-03-06  4:12       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:12 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, devicetree, linux-arm-kernel,
	linux-kernel, Linux-ALSA, linux-sunxi

Hi,

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
> When the V3s support patchset is applied, CCU headers and V3s DTSI went
> into different trees, so the CCU inclusion is removed in the DTSI.
>
> Add back them.
>
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
> ---
>  arch/arm/boot/dts/sun8i-v3s.dtsi | 67 ++++++++++++++++++++--------------------
>  1 file changed, 34 insertions(+), 33 deletions(-)
>
> diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
> index 71075969e5e6..b3f8b7f9c0bb 100644
> --- a/arch/arm/boot/dts/sun8i-v3s.dtsi
> +++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
> @@ -40,6 +40,8 @@
>   *     OTHER DEALINGS IN THE SOFTWARE.
>   */
>
> +#include <dt-bindings/clock/sun8i-v3s-ccu.h>
> +#include <dt-bindings/reset/sun8i-v3s-ccu.h>
>  #include <dt-bindings/interrupt-controller/arm-gic.h>

Please sort alphabetically. Or if you want, put the sunxi specific headers
in a separate group, separated by an empty line from the arm-gic one.

>
>  / {
> @@ -55,7 +57,7 @@
>                         compatible = "arm,cortex-a7";
>                         device_type = "cpu";
>                         reg = <0>;
> -                       clocks = <&ccu 14>;
> +                       clocks = <&ccu CLK_CPU>;
>                 };
>         };
>
> @@ -96,15 +98,15 @@
>                 mmc0: mmc@01c0f000 {
>                         compatible = "allwinner,sun7i-a20-mmc";
>                         reg = <0x01c0f000 0x1000>;
> -                       clocks = <&ccu 22>,
> -                                <&ccu 45>,
> -                                <&ccu 47>,
> -                                <&ccu 46>;
> +                       clocks = <&ccu CLK_BUS_MMC0>,
> +                                <&ccu CLK_MMC0>,
> +                                <&ccu CLK_MMC0_OUTPUT>,
> +                                <&ccu CLK_MMC0_SAMPLE>;
>                         clock-names = "ahb",
>                                       "mmc",
>                                       "output",
>                                       "sample";
> -                       resets = <&ccu 7>;
> +                       resets = <&ccu RST_BUS_MMC0>;
>                         reset-names = "ahb";
>                         interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
>                         status = "disabled";
> @@ -115,15 +117,15 @@
>                 mmc1: mmc@01c10000 {
>                         compatible = "allwinner,sun7i-a20-mmc";
>                         reg = <0x01c10000 0x1000>;
> -                       clocks = <&ccu 23>,
> -                                <&ccu 48>,
> -                                <&ccu 50>,
> -                                <&ccu 49>;
> +                       clocks = <&ccu CLK_BUS_MMC1>,
> +                                <&ccu CLK_MMC1>,
> +                                <&ccu CLK_MMC1_OUTPUT>,
> +                                <&ccu CLK_MMC1_SAMPLE>;
>                         clock-names = "ahb",
>                                       "mmc",
>                                       "output",
>                                       "sample";
> -                       resets = <&ccu 8>;
> +                       resets = <&ccu RST_BUS_MMC1>;
>                         reset-names = "ahb";
>                         interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
>                         status = "disabled";
> @@ -134,15 +136,15 @@
>                 mmc2: mmc@01c11000 {
>                         compatible = "allwinner,sun7i-a20-mmc";
>                         reg = <0x01c11000 0x1000>;
> -                       clocks = <&ccu 24>,
> -                                <&ccu 51>,
> -                                <&ccu 53>,
> -                                <&ccu 52>;
> +                       clocks = <&ccu CLK_BUS_MMC2>,
> +                                <&ccu CLK_MMC2>,
> +                                <&ccu CLK_MMC2_OUTPUT>,
> +                                <&ccu CLK_MMC2_SAMPLE>;
>                         clock-names = "ahb",
>                                       "mmc",
>                                       "output",
>                                       "sample";
> -                       resets = <&ccu 9>;
> +                       resets = <&ccu RST_BUS_MMC2>;
>                         reset-names = "ahb";
>                         interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
>                         status = "disabled";
> @@ -153,8 +155,8 @@
>                 usb_otg: usb@01c19000 {
>                         compatible = "allwinner,sun8i-h3-musb";
>                         reg = <0x01c19000 0x0400>;
> -                       clocks = <&ccu 29>;
> -                       resets = <&ccu 17>;
> +                       clocks = <&ccu CLK_BUS_OTG>;
> +                       resets = <&ccu RST_BUS_OTG>;
>                         interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
>                         interrupt-names = "mc";
>                         phys = <&usbphy 0>;
> @@ -169,9 +171,9 @@
>                               <0x01c1a800 0x4>;
>                         reg-names = "phy_ctrl",
>                                     "pmu0";
> -                       clocks = <&ccu 56>;
> +                       clocks = <&ccu CLK_USB_PHY0>;
>                         clock-names = "usb0_phy";
> -                       resets = <&ccu 0>;
> +                       resets = <&ccu RST_USB_PHY0>;
>                         reset-names = "usb0_reset";
>                         status = "disabled";
>                         #phy-cells = <1>;
> @@ -198,7 +200,7 @@
>                         reg = <0x01c20800 0x400>;
>                         interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
>                                      <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
> -                       clocks = <&ccu 37>, <&osc24M>, <&osc32k>;
> +                       clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
>                         clock-names = "apb", "hosc", "losc";
>                         gpio-controller;
>                         #gpio-cells = <3>;
> @@ -213,6 +215,7 @@
>                         uart0_pins_a: uart0@0 {
>                                 pins = "PB8", "PB9";
>                                 function = "uart0";
> +                               bias-pull-up;

This is an unrelated change. Please split it out. On the other hand,
if the board has proper external pull-ups, you might not need this.

Otherwise,

Acked-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>

>                         };
>
>                         mmc0_pins_a: mmc0@0 {
> @@ -244,8 +247,8 @@
>                         interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
>                         reg-shift = <2>;
>                         reg-io-width = <4>;
> -                       clocks = <&ccu 40>;
> -                       resets = <&ccu 49>;
> +                       clocks = <&ccu CLK_BUS_UART0>;
> +                       resets = <&ccu RST_BUS_UART0>;
>                         status = "disabled";
>                 };
>
> @@ -255,8 +258,8 @@
>                         interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
>                         reg-shift = <2>;
>                         reg-io-width = <4>;
> -                       clocks = <&ccu 41>;
> -                       resets = <&ccu 50>;
> +                       clocks = <&ccu CLK_BUS_UART1>;
> +                       resets = <&ccu RST_BUS_UART1>;
>                         status = "disabled";
>                 };
>
> @@ -266,8 +269,8 @@
>                         interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
>                         reg-shift = <2>;
>                         reg-io-width = <4>;
> -                       clocks = <&ccu 42>;
> -                       resets = <&ccu 51>;
> +                       clocks = <&ccu CLK_BUS_UART2>;
> +                       resets = <&ccu RST_BUS_UART2>;
>                         status = "disabled";
>                 };
>
> @@ -275,10 +278,8 @@
>                         compatible = "allwinner,sun6i-a31-i2c";
>                         reg = <0x01c2ac00 0x400>;
>                         interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
> -                       clocks = <&ccu 38>;
> -                       resets = <&ccu 46>;
> -                       pinctrl-names = "default";
> -                       pinctrl-0 = <&i2c0_pins>;
> +                       clocks = <&ccu CLK_BUS_I2C0>;
> +                       resets = <&ccu RST_BUS_I2C0>;
>                         status = "disabled";
>                         #address-cells = <1>;
>                         #size-cells = <0>;
> @@ -288,8 +289,8 @@
>                         compatible = "allwinner,sun6i-a31-i2c";
>                         reg = <0x01c2b000 0x400>;
>                         interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
> -                       clocks = <&ccu 39>;
> -                       resets = <&ccu 47>;
> +                       clocks = <&ccu CLK_BUS_I2C1>;
> +                       resets = <&ccu RST_BUS_I2C1>;
>                         status = "disabled";
>                         #address-cells = <1>;
>                         #size-cells = <0>;
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [linux-sunxi] [PATCH v2 08/12] ARM: dts: sun8i: restore the inclusion of ccu headers in V3s DTSI
@ 2017-03-06  4:12       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:12 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> When the V3s support patchset is applied, CCU headers and V3s DTSI went
> into different trees, so the CCU inclusion is removed in the DTSI.
>
> Add back them.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  arch/arm/boot/dts/sun8i-v3s.dtsi | 67 ++++++++++++++++++++--------------------
>  1 file changed, 34 insertions(+), 33 deletions(-)
>
> diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
> index 71075969e5e6..b3f8b7f9c0bb 100644
> --- a/arch/arm/boot/dts/sun8i-v3s.dtsi
> +++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
> @@ -40,6 +40,8 @@
>   *     OTHER DEALINGS IN THE SOFTWARE.
>   */
>
> +#include <dt-bindings/clock/sun8i-v3s-ccu.h>
> +#include <dt-bindings/reset/sun8i-v3s-ccu.h>
>  #include <dt-bindings/interrupt-controller/arm-gic.h>

Please sort alphabetically. Or if you want, put the sunxi specific headers
in a separate group, separated by an empty line from the arm-gic one.

>
>  / {
> @@ -55,7 +57,7 @@
>                         compatible = "arm,cortex-a7";
>                         device_type = "cpu";
>                         reg = <0>;
> -                       clocks = <&ccu 14>;
> +                       clocks = <&ccu CLK_CPU>;
>                 };
>         };
>
> @@ -96,15 +98,15 @@
>                 mmc0: mmc at 01c0f000 {
>                         compatible = "allwinner,sun7i-a20-mmc";
>                         reg = <0x01c0f000 0x1000>;
> -                       clocks = <&ccu 22>,
> -                                <&ccu 45>,
> -                                <&ccu 47>,
> -                                <&ccu 46>;
> +                       clocks = <&ccu CLK_BUS_MMC0>,
> +                                <&ccu CLK_MMC0>,
> +                                <&ccu CLK_MMC0_OUTPUT>,
> +                                <&ccu CLK_MMC0_SAMPLE>;
>                         clock-names = "ahb",
>                                       "mmc",
>                                       "output",
>                                       "sample";
> -                       resets = <&ccu 7>;
> +                       resets = <&ccu RST_BUS_MMC0>;
>                         reset-names = "ahb";
>                         interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
>                         status = "disabled";
> @@ -115,15 +117,15 @@
>                 mmc1: mmc at 01c10000 {
>                         compatible = "allwinner,sun7i-a20-mmc";
>                         reg = <0x01c10000 0x1000>;
> -                       clocks = <&ccu 23>,
> -                                <&ccu 48>,
> -                                <&ccu 50>,
> -                                <&ccu 49>;
> +                       clocks = <&ccu CLK_BUS_MMC1>,
> +                                <&ccu CLK_MMC1>,
> +                                <&ccu CLK_MMC1_OUTPUT>,
> +                                <&ccu CLK_MMC1_SAMPLE>;
>                         clock-names = "ahb",
>                                       "mmc",
>                                       "output",
>                                       "sample";
> -                       resets = <&ccu 8>;
> +                       resets = <&ccu RST_BUS_MMC1>;
>                         reset-names = "ahb";
>                         interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
>                         status = "disabled";
> @@ -134,15 +136,15 @@
>                 mmc2: mmc at 01c11000 {
>                         compatible = "allwinner,sun7i-a20-mmc";
>                         reg = <0x01c11000 0x1000>;
> -                       clocks = <&ccu 24>,
> -                                <&ccu 51>,
> -                                <&ccu 53>,
> -                                <&ccu 52>;
> +                       clocks = <&ccu CLK_BUS_MMC2>,
> +                                <&ccu CLK_MMC2>,
> +                                <&ccu CLK_MMC2_OUTPUT>,
> +                                <&ccu CLK_MMC2_SAMPLE>;
>                         clock-names = "ahb",
>                                       "mmc",
>                                       "output",
>                                       "sample";
> -                       resets = <&ccu 9>;
> +                       resets = <&ccu RST_BUS_MMC2>;
>                         reset-names = "ahb";
>                         interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
>                         status = "disabled";
> @@ -153,8 +155,8 @@
>                 usb_otg: usb at 01c19000 {
>                         compatible = "allwinner,sun8i-h3-musb";
>                         reg = <0x01c19000 0x0400>;
> -                       clocks = <&ccu 29>;
> -                       resets = <&ccu 17>;
> +                       clocks = <&ccu CLK_BUS_OTG>;
> +                       resets = <&ccu RST_BUS_OTG>;
>                         interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
>                         interrupt-names = "mc";
>                         phys = <&usbphy 0>;
> @@ -169,9 +171,9 @@
>                               <0x01c1a800 0x4>;
>                         reg-names = "phy_ctrl",
>                                     "pmu0";
> -                       clocks = <&ccu 56>;
> +                       clocks = <&ccu CLK_USB_PHY0>;
>                         clock-names = "usb0_phy";
> -                       resets = <&ccu 0>;
> +                       resets = <&ccu RST_USB_PHY0>;
>                         reset-names = "usb0_reset";
>                         status = "disabled";
>                         #phy-cells = <1>;
> @@ -198,7 +200,7 @@
>                         reg = <0x01c20800 0x400>;
>                         interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
>                                      <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
> -                       clocks = <&ccu 37>, <&osc24M>, <&osc32k>;
> +                       clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
>                         clock-names = "apb", "hosc", "losc";
>                         gpio-controller;
>                         #gpio-cells = <3>;
> @@ -213,6 +215,7 @@
>                         uart0_pins_a: uart0 at 0 {
>                                 pins = "PB8", "PB9";
>                                 function = "uart0";
> +                               bias-pull-up;

This is an unrelated change. Please split it out. On the other hand,
if the board has proper external pull-ups, you might not need this.

Otherwise,

Acked-by: Chen-Yu Tsai <wens@csie.org>

>                         };
>
>                         mmc0_pins_a: mmc0 at 0 {
> @@ -244,8 +247,8 @@
>                         interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
>                         reg-shift = <2>;
>                         reg-io-width = <4>;
> -                       clocks = <&ccu 40>;
> -                       resets = <&ccu 49>;
> +                       clocks = <&ccu CLK_BUS_UART0>;
> +                       resets = <&ccu RST_BUS_UART0>;
>                         status = "disabled";
>                 };
>
> @@ -255,8 +258,8 @@
>                         interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
>                         reg-shift = <2>;
>                         reg-io-width = <4>;
> -                       clocks = <&ccu 41>;
> -                       resets = <&ccu 50>;
> +                       clocks = <&ccu CLK_BUS_UART1>;
> +                       resets = <&ccu RST_BUS_UART1>;
>                         status = "disabled";
>                 };
>
> @@ -266,8 +269,8 @@
>                         interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
>                         reg-shift = <2>;
>                         reg-io-width = <4>;
> -                       clocks = <&ccu 42>;
> -                       resets = <&ccu 51>;
> +                       clocks = <&ccu CLK_BUS_UART2>;
> +                       resets = <&ccu RST_BUS_UART2>;
>                         status = "disabled";
>                 };
>
> @@ -275,10 +278,8 @@
>                         compatible = "allwinner,sun6i-a31-i2c";
>                         reg = <0x01c2ac00 0x400>;
>                         interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
> -                       clocks = <&ccu 38>;
> -                       resets = <&ccu 46>;
> -                       pinctrl-names = "default";
> -                       pinctrl-0 = <&i2c0_pins>;
> +                       clocks = <&ccu CLK_BUS_I2C0>;
> +                       resets = <&ccu RST_BUS_I2C0>;
>                         status = "disabled";
>                         #address-cells = <1>;
>                         #size-cells = <0>;
> @@ -288,8 +289,8 @@
>                         compatible = "allwinner,sun6i-a31-i2c";
>                         reg = <0x01c2b000 0x400>;
>                         interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
> -                       clocks = <&ccu 39>;
> -                       resets = <&ccu 47>;
> +                       clocks = <&ccu CLK_BUS_I2C1>;
> +                       resets = <&ccu RST_BUS_I2C1>;
>                         status = "disabled";
>                         #address-cells = <1>;
>                         #size-cells = <0>;
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe at googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] [PATCH v2 09/12] ARM: dts: sun8i: add DMA engine in V3s DTSI
@ 2017-03-06  4:13       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:13 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s SoC features a DMA engine.
>
> Add it in the DTSI file.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>

Acked-by: Chen-Yu Tsai <wens@csie.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 09/12] ARM: dts: sun8i: add DMA engine in V3s DTSI
@ 2017-03-06  4:13       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:13 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, devicetree, linux-arm-kernel,
	linux-kernel, Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
> Allwinner V3s SoC features a DMA engine.
>
> Add it in the DTSI file.
>
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>

Acked-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [linux-sunxi] [PATCH v2 09/12] ARM: dts: sun8i: add DMA engine in V3s DTSI
@ 2017-03-06  4:13       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:13 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s SoC features a DMA engine.
>
> Add it in the DTSI file.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>

Acked-by: Chen-Yu Tsai <wens@csie.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] [PATCH v2 05/12] ASoC: sun4i-codec: Add support for V3s codec
@ 2017-03-06  4:15         ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:15 UTC (permalink / raw)
  To: Chen-Yu Tsai
  Cc: Icenowy Zheng, Vinod Koul, Rob Herring, Maxime Ripard,
	Mark Brown, dmaengine, devicetree, linux-arm-kernel,
	linux-kernel, Linux-ALSA, linux-sunxi

On Mon, Mar 6, 2017 at 12:05 PM, Chen-Yu Tsai <wens@csie.org> wrote:
> On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
>> The codec in the V3s is similar to the one found on the A31. One key
>> difference is the analog path controls are routed through the PRCM
>> block. This is supported by the sun8i-codec-analog driver, and tied
>> into this codec driver with the audio card's aux_dev.
>>
>> In addition, the V3s does not have LINEIN, LINEOUT, MBIAS and MIC2,
>> MIC3, and the FIFO related registers are like H3.
>>
>> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
>> ---
>>  .../devicetree/bindings/sound/sun4i-codec.txt      | 11 ++--
>>  sound/soc/sunxi/sun4i-codec.c                      | 59 ++++++++++++++++++++++
>>  2 files changed, 66 insertions(+), 4 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
>> index 3863531d1e6d..2d4e10deb6f4 100644
>> --- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt
>> +++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
>> @@ -7,6 +7,7 @@ Required properties:
>>                 - "allwinner,sun7i-a20-codec"
>>                 - "allwinner,sun8i-a23-codec"
>>                 - "allwinner,sun8i-h3-codec"
>> +               - "allwinner,sun8i-v3s-codec"
>>  - reg: must contain the registers location and length
>>  - interrupts: must contain the codec interrupt
>>  - dmas: DMA channels for tx and rx dma. See the DMA client binding,
>> @@ -25,6 +26,7 @@ Required properties for the following compatibles:
>>                 - "allwinner,sun6i-a31-codec"
>>                 - "allwinner,sun8i-a23-codec"
>>                 - "allwinner,sun8i-h3-codec"
>> +               - "allwinner,sun8i-v3s-codec"
>>  - resets: phandle to the reset control for this device
>>  - allwinner,audio-routing: A list of the connections between audio components.
>>                            Each entry is a pair of strings, the first being the
>> @@ -34,15 +36,15 @@ Required properties for the following compatibles:
>>                            Audio pins on the SoC:
>>                            "HP"
>>                            "HPCOM"
>> -                          "LINEIN"
>> -                          "LINEOUT"    (not on sun8i-a23)
>> +                          "LINEIN"     (not on sun8i-v3s)
>> +                          "LINEOUT"    (not on sun8i-a23 or sun8i-v3s)
>>                            "MIC1"
>> -                          "MIC2"
>> +                          "MIC2"       (not on sun8i-v3s)
>>                            "MIC3"       (sun6i-a31 only)
>>
>>                            Microphone biases from the SoC:
>>                            "HBIAS"
>> -                          "MBIAS"
>> +                          "MBIAS"      (not on sun8i-v3s)
>>
>>                            Board connectors:
>>                            "Headphone"
>> @@ -55,6 +57,7 @@ Required properties for the following compatibles:
>>  Required properties for the following compatibles:
>>                 - "allwinner,sun8i-a23-codec"
>>                 - "allwinner,sun8i-h3-codec"
>> +               - "allwinner,sun8i-v3s-codec"
>>  - allwinner,codec-analog-controls: A phandle to the codec analog controls
>>                                    block in the PRCM.
>>
>> diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
>> index c3aab10fa085..7f1b1aa95e0b 100644
>> --- a/sound/soc/sunxi/sun4i-codec.c
>> +++ b/sound/soc/sunxi/sun4i-codec.c
>> @@ -1339,6 +1339,44 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)
>>         return card;
>>  };
>>
>> +static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)
>> +{
>> +       struct snd_soc_card *card;
>> +       int ret;
>> +
>> +       card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
>> +       if (!card)
>> +               return ERR_PTR(-ENOMEM);
>> +
>> +       aux_dev.codec_of_node = of_parse_phandle(dev->of_node,
>> +                                                "allwinner,codec-analog-controls",
>> +                                                0);
>> +       if (!aux_dev.codec_of_node) {
>> +               dev_err(dev, "Can't find analog controls for codec.\n");
>> +               return ERR_PTR(-EINVAL);
>> +       };
>> +
>> +       card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
>> +       if (!card->dai_link)
>> +               return ERR_PTR(-ENOMEM);
>> +
>> +       card->dev               = dev;
>> +       card->name              = "V3s Audio Codec";
>> +       card->dapm_widgets      = sun6i_codec_card_dapm_widgets;
>> +       card->num_dapm_widgets  = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
>> +       card->dapm_routes       = sun8i_codec_card_routes;
>> +       card->num_dapm_routes   = ARRAY_SIZE(sun8i_codec_card_routes);
>> +       card->aux_dev           = &aux_dev;
>> +       card->num_aux_devs      = 1;
>> +       card->fully_routed      = true;
>> +
>> +       ret = snd_soc_of_parse_audio_routing(card, "allwinner,audio-routing");
>> +       if (ret)
>> +               dev_warn(dev, "failed to parse audio-routing: %d\n", ret);
>> +
>> +       return card;
>> +};
>> +
>>  static const struct regmap_config sun4i_codec_regmap_config = {
>>         .reg_bits       = 32,
>>         .reg_stride     = 4,
>> @@ -1374,6 +1412,13 @@ static const struct regmap_config sun8i_h3_codec_regmap_config = {
>>         .max_register   = SUN8I_H3_CODEC_ADC_DBG,
>>  };
>>
>> +static const struct regmap_config sun8i_v3s_codec_regmap_config = {
>> +       .reg_bits       = 32,
>> +       .reg_stride     = 4,
>> +       .val_bits       = 32,
>> +       .max_register   = SUN6I_CODEC_HMIC_DATA,
>
> The last defined register for the non digital audio processing parts is
> SUN8I_H3_CODEC_ADC_DBG.
>
> Or if you want you could include everything, which goes up to 0x400.

Correction, it goes up to 0x2bc. 0x400 is the register for controlling
the analog bits.

ChenYu

>> +};
>> +
>>  struct sun4i_codec_quirks {
>>         const struct regmap_config *regmap_config;
>>         const struct snd_soc_codec_driver *codec;
>> @@ -1422,6 +1467,16 @@ static const struct sun4i_codec_quirks sun8i_a23_codec_quirks = {
>>         .has_reset      = true,
>>  };
>>
>> +static const struct sun4i_codec_quirks sun8i_v3s_codec_quirks = {
>> +       .regmap_config  = &sun8i_v3s_codec_regmap_config,
>> +       .codec          = &sun8i_a23_codec_codec,
>
> Please leave a note, like the H3, that this should be changed if digital audio
> processing is added.
>
> Regards
> ChenYu
>
>> +       .create_card    = sun8i_v3s_codec_create_card,
>> +       .reg_adc_fifoc  = REG_FIELD(SUN6I_CODEC_ADC_FIFOC, 0, 31),
>> +       .reg_dac_txdata = SUN8I_H3_CODEC_DAC_TXDATA,
>> +       .reg_adc_rxdata = SUN6I_CODEC_ADC_RXDATA,
>> +       .has_reset      = true,
>> +};
>> +
>>  static const struct sun4i_codec_quirks sun8i_h3_codec_quirks = {
>>         .regmap_config  = &sun8i_h3_codec_regmap_config,
>>         /*
>> @@ -1458,6 +1513,10 @@ static const struct of_device_id sun4i_codec_of_match[] = {
>>                 .compatible = "allwinner,sun8i-h3-codec",
>>                 .data = &sun8i_h3_codec_quirks,
>>         },
>> +       {
>> +               .compatible = "allwinner,sun8i-v3s-codec",
>> +               .data = &sun8i_v3s_codec_quirks,
>> +       },
>>         {}
>>  };
>>  MODULE_DEVICE_TABLE(of, sun4i_codec_of_match);
>> --
>> 2.11.1
>>
>> --
>> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 05/12] ASoC: sun4i-codec: Add support for V3s codec
@ 2017-03-06  4:15         ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:15 UTC (permalink / raw)
  To: Chen-Yu Tsai
  Cc: Icenowy Zheng, Vinod Koul, Rob Herring, Maxime Ripard,
	Mark Brown, dmaengine-u79uwXL29TY76Z2rM5mHXA, devicetree,
	linux-arm-kernel, linux-kernel, Linux-ALSA, linux-sunxi

On Mon, Mar 6, 2017 at 12:05 PM, Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org> wrote:
> On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
>> The codec in the V3s is similar to the one found on the A31. One key
>> difference is the analog path controls are routed through the PRCM
>> block. This is supported by the sun8i-codec-analog driver, and tied
>> into this codec driver with the audio card's aux_dev.
>>
>> In addition, the V3s does not have LINEIN, LINEOUT, MBIAS and MIC2,
>> MIC3, and the FIFO related registers are like H3.
>>
>> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
>> ---
>>  .../devicetree/bindings/sound/sun4i-codec.txt      | 11 ++--
>>  sound/soc/sunxi/sun4i-codec.c                      | 59 ++++++++++++++++++++++
>>  2 files changed, 66 insertions(+), 4 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
>> index 3863531d1e6d..2d4e10deb6f4 100644
>> --- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt
>> +++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
>> @@ -7,6 +7,7 @@ Required properties:
>>                 - "allwinner,sun7i-a20-codec"
>>                 - "allwinner,sun8i-a23-codec"
>>                 - "allwinner,sun8i-h3-codec"
>> +               - "allwinner,sun8i-v3s-codec"
>>  - reg: must contain the registers location and length
>>  - interrupts: must contain the codec interrupt
>>  - dmas: DMA channels for tx and rx dma. See the DMA client binding,
>> @@ -25,6 +26,7 @@ Required properties for the following compatibles:
>>                 - "allwinner,sun6i-a31-codec"
>>                 - "allwinner,sun8i-a23-codec"
>>                 - "allwinner,sun8i-h3-codec"
>> +               - "allwinner,sun8i-v3s-codec"
>>  - resets: phandle to the reset control for this device
>>  - allwinner,audio-routing: A list of the connections between audio components.
>>                            Each entry is a pair of strings, the first being the
>> @@ -34,15 +36,15 @@ Required properties for the following compatibles:
>>                            Audio pins on the SoC:
>>                            "HP"
>>                            "HPCOM"
>> -                          "LINEIN"
>> -                          "LINEOUT"    (not on sun8i-a23)
>> +                          "LINEIN"     (not on sun8i-v3s)
>> +                          "LINEOUT"    (not on sun8i-a23 or sun8i-v3s)
>>                            "MIC1"
>> -                          "MIC2"
>> +                          "MIC2"       (not on sun8i-v3s)
>>                            "MIC3"       (sun6i-a31 only)
>>
>>                            Microphone biases from the SoC:
>>                            "HBIAS"
>> -                          "MBIAS"
>> +                          "MBIAS"      (not on sun8i-v3s)
>>
>>                            Board connectors:
>>                            "Headphone"
>> @@ -55,6 +57,7 @@ Required properties for the following compatibles:
>>  Required properties for the following compatibles:
>>                 - "allwinner,sun8i-a23-codec"
>>                 - "allwinner,sun8i-h3-codec"
>> +               - "allwinner,sun8i-v3s-codec"
>>  - allwinner,codec-analog-controls: A phandle to the codec analog controls
>>                                    block in the PRCM.
>>
>> diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
>> index c3aab10fa085..7f1b1aa95e0b 100644
>> --- a/sound/soc/sunxi/sun4i-codec.c
>> +++ b/sound/soc/sunxi/sun4i-codec.c
>> @@ -1339,6 +1339,44 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)
>>         return card;
>>  };
>>
>> +static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)
>> +{
>> +       struct snd_soc_card *card;
>> +       int ret;
>> +
>> +       card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
>> +       if (!card)
>> +               return ERR_PTR(-ENOMEM);
>> +
>> +       aux_dev.codec_of_node = of_parse_phandle(dev->of_node,
>> +                                                "allwinner,codec-analog-controls",
>> +                                                0);
>> +       if (!aux_dev.codec_of_node) {
>> +               dev_err(dev, "Can't find analog controls for codec.\n");
>> +               return ERR_PTR(-EINVAL);
>> +       };
>> +
>> +       card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
>> +       if (!card->dai_link)
>> +               return ERR_PTR(-ENOMEM);
>> +
>> +       card->dev               = dev;
>> +       card->name              = "V3s Audio Codec";
>> +       card->dapm_widgets      = sun6i_codec_card_dapm_widgets;
>> +       card->num_dapm_widgets  = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
>> +       card->dapm_routes       = sun8i_codec_card_routes;
>> +       card->num_dapm_routes   = ARRAY_SIZE(sun8i_codec_card_routes);
>> +       card->aux_dev           = &aux_dev;
>> +       card->num_aux_devs      = 1;
>> +       card->fully_routed      = true;
>> +
>> +       ret = snd_soc_of_parse_audio_routing(card, "allwinner,audio-routing");
>> +       if (ret)
>> +               dev_warn(dev, "failed to parse audio-routing: %d\n", ret);
>> +
>> +       return card;
>> +};
>> +
>>  static const struct regmap_config sun4i_codec_regmap_config = {
>>         .reg_bits       = 32,
>>         .reg_stride     = 4,
>> @@ -1374,6 +1412,13 @@ static const struct regmap_config sun8i_h3_codec_regmap_config = {
>>         .max_register   = SUN8I_H3_CODEC_ADC_DBG,
>>  };
>>
>> +static const struct regmap_config sun8i_v3s_codec_regmap_config = {
>> +       .reg_bits       = 32,
>> +       .reg_stride     = 4,
>> +       .val_bits       = 32,
>> +       .max_register   = SUN6I_CODEC_HMIC_DATA,
>
> The last defined register for the non digital audio processing parts is
> SUN8I_H3_CODEC_ADC_DBG.
>
> Or if you want you could include everything, which goes up to 0x400.

Correction, it goes up to 0x2bc. 0x400 is the register for controlling
the analog bits.

ChenYu

>> +};
>> +
>>  struct sun4i_codec_quirks {
>>         const struct regmap_config *regmap_config;
>>         const struct snd_soc_codec_driver *codec;
>> @@ -1422,6 +1467,16 @@ static const struct sun4i_codec_quirks sun8i_a23_codec_quirks = {
>>         .has_reset      = true,
>>  };
>>
>> +static const struct sun4i_codec_quirks sun8i_v3s_codec_quirks = {
>> +       .regmap_config  = &sun8i_v3s_codec_regmap_config,
>> +       .codec          = &sun8i_a23_codec_codec,
>
> Please leave a note, like the H3, that this should be changed if digital audio
> processing is added.
>
> Regards
> ChenYu
>
>> +       .create_card    = sun8i_v3s_codec_create_card,
>> +       .reg_adc_fifoc  = REG_FIELD(SUN6I_CODEC_ADC_FIFOC, 0, 31),
>> +       .reg_dac_txdata = SUN8I_H3_CODEC_DAC_TXDATA,
>> +       .reg_adc_rxdata = SUN6I_CODEC_ADC_RXDATA,
>> +       .has_reset      = true,
>> +};
>> +
>>  static const struct sun4i_codec_quirks sun8i_h3_codec_quirks = {
>>         .regmap_config  = &sun8i_h3_codec_regmap_config,
>>         /*
>> @@ -1458,6 +1513,10 @@ static const struct of_device_id sun4i_codec_of_match[] = {
>>                 .compatible = "allwinner,sun8i-h3-codec",
>>                 .data = &sun8i_h3_codec_quirks,
>>         },
>> +       {
>> +               .compatible = "allwinner,sun8i-v3s-codec",
>> +               .data = &sun8i_v3s_codec_quirks,
>> +       },
>>         {}
>>  };
>>  MODULE_DEVICE_TABLE(of, sun4i_codec_of_match);
>> --
>> 2.11.1
>>
>> --
>> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
>> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [linux-sunxi] [PATCH v2 05/12] ASoC: sun4i-codec: Add support for V3s codec
@ 2017-03-06  4:15         ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:15 UTC (permalink / raw)
  To: linux-arm-kernel

On Mon, Mar 6, 2017 at 12:05 PM, Chen-Yu Tsai <wens@csie.org> wrote:
> On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
>> The codec in the V3s is similar to the one found on the A31. One key
>> difference is the analog path controls are routed through the PRCM
>> block. This is supported by the sun8i-codec-analog driver, and tied
>> into this codec driver with the audio card's aux_dev.
>>
>> In addition, the V3s does not have LINEIN, LINEOUT, MBIAS and MIC2,
>> MIC3, and the FIFO related registers are like H3.
>>
>> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
>> ---
>>  .../devicetree/bindings/sound/sun4i-codec.txt      | 11 ++--
>>  sound/soc/sunxi/sun4i-codec.c                      | 59 ++++++++++++++++++++++
>>  2 files changed, 66 insertions(+), 4 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
>> index 3863531d1e6d..2d4e10deb6f4 100644
>> --- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt
>> +++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
>> @@ -7,6 +7,7 @@ Required properties:
>>                 - "allwinner,sun7i-a20-codec"
>>                 - "allwinner,sun8i-a23-codec"
>>                 - "allwinner,sun8i-h3-codec"
>> +               - "allwinner,sun8i-v3s-codec"
>>  - reg: must contain the registers location and length
>>  - interrupts: must contain the codec interrupt
>>  - dmas: DMA channels for tx and rx dma. See the DMA client binding,
>> @@ -25,6 +26,7 @@ Required properties for the following compatibles:
>>                 - "allwinner,sun6i-a31-codec"
>>                 - "allwinner,sun8i-a23-codec"
>>                 - "allwinner,sun8i-h3-codec"
>> +               - "allwinner,sun8i-v3s-codec"
>>  - resets: phandle to the reset control for this device
>>  - allwinner,audio-routing: A list of the connections between audio components.
>>                            Each entry is a pair of strings, the first being the
>> @@ -34,15 +36,15 @@ Required properties for the following compatibles:
>>                            Audio pins on the SoC:
>>                            "HP"
>>                            "HPCOM"
>> -                          "LINEIN"
>> -                          "LINEOUT"    (not on sun8i-a23)
>> +                          "LINEIN"     (not on sun8i-v3s)
>> +                          "LINEOUT"    (not on sun8i-a23 or sun8i-v3s)
>>                            "MIC1"
>> -                          "MIC2"
>> +                          "MIC2"       (not on sun8i-v3s)
>>                            "MIC3"       (sun6i-a31 only)
>>
>>                            Microphone biases from the SoC:
>>                            "HBIAS"
>> -                          "MBIAS"
>> +                          "MBIAS"      (not on sun8i-v3s)
>>
>>                            Board connectors:
>>                            "Headphone"
>> @@ -55,6 +57,7 @@ Required properties for the following compatibles:
>>  Required properties for the following compatibles:
>>                 - "allwinner,sun8i-a23-codec"
>>                 - "allwinner,sun8i-h3-codec"
>> +               - "allwinner,sun8i-v3s-codec"
>>  - allwinner,codec-analog-controls: A phandle to the codec analog controls
>>                                    block in the PRCM.
>>
>> diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
>> index c3aab10fa085..7f1b1aa95e0b 100644
>> --- a/sound/soc/sunxi/sun4i-codec.c
>> +++ b/sound/soc/sunxi/sun4i-codec.c
>> @@ -1339,6 +1339,44 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)
>>         return card;
>>  };
>>
>> +static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)
>> +{
>> +       struct snd_soc_card *card;
>> +       int ret;
>> +
>> +       card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
>> +       if (!card)
>> +               return ERR_PTR(-ENOMEM);
>> +
>> +       aux_dev.codec_of_node = of_parse_phandle(dev->of_node,
>> +                                                "allwinner,codec-analog-controls",
>> +                                                0);
>> +       if (!aux_dev.codec_of_node) {
>> +               dev_err(dev, "Can't find analog controls for codec.\n");
>> +               return ERR_PTR(-EINVAL);
>> +       };
>> +
>> +       card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
>> +       if (!card->dai_link)
>> +               return ERR_PTR(-ENOMEM);
>> +
>> +       card->dev               = dev;
>> +       card->name              = "V3s Audio Codec";
>> +       card->dapm_widgets      = sun6i_codec_card_dapm_widgets;
>> +       card->num_dapm_widgets  = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
>> +       card->dapm_routes       = sun8i_codec_card_routes;
>> +       card->num_dapm_routes   = ARRAY_SIZE(sun8i_codec_card_routes);
>> +       card->aux_dev           = &aux_dev;
>> +       card->num_aux_devs      = 1;
>> +       card->fully_routed      = true;
>> +
>> +       ret = snd_soc_of_parse_audio_routing(card, "allwinner,audio-routing");
>> +       if (ret)
>> +               dev_warn(dev, "failed to parse audio-routing: %d\n", ret);
>> +
>> +       return card;
>> +};
>> +
>>  static const struct regmap_config sun4i_codec_regmap_config = {
>>         .reg_bits       = 32,
>>         .reg_stride     = 4,
>> @@ -1374,6 +1412,13 @@ static const struct regmap_config sun8i_h3_codec_regmap_config = {
>>         .max_register   = SUN8I_H3_CODEC_ADC_DBG,
>>  };
>>
>> +static const struct regmap_config sun8i_v3s_codec_regmap_config = {
>> +       .reg_bits       = 32,
>> +       .reg_stride     = 4,
>> +       .val_bits       = 32,
>> +       .max_register   = SUN6I_CODEC_HMIC_DATA,
>
> The last defined register for the non digital audio processing parts is
> SUN8I_H3_CODEC_ADC_DBG.
>
> Or if you want you could include everything, which goes up to 0x400.

Correction, it goes up to 0x2bc. 0x400 is the register for controlling
the analog bits.

ChenYu

>> +};
>> +
>>  struct sun4i_codec_quirks {
>>         const struct regmap_config *regmap_config;
>>         const struct snd_soc_codec_driver *codec;
>> @@ -1422,6 +1467,16 @@ static const struct sun4i_codec_quirks sun8i_a23_codec_quirks = {
>>         .has_reset      = true,
>>  };
>>
>> +static const struct sun4i_codec_quirks sun8i_v3s_codec_quirks = {
>> +       .regmap_config  = &sun8i_v3s_codec_regmap_config,
>> +       .codec          = &sun8i_a23_codec_codec,
>
> Please leave a note, like the H3, that this should be changed if digital audio
> processing is added.
>
> Regards
> ChenYu
>
>> +       .create_card    = sun8i_v3s_codec_create_card,
>> +       .reg_adc_fifoc  = REG_FIELD(SUN6I_CODEC_ADC_FIFOC, 0, 31),
>> +       .reg_dac_txdata = SUN8I_H3_CODEC_DAC_TXDATA,
>> +       .reg_adc_rxdata = SUN6I_CODEC_ADC_RXDATA,
>> +       .has_reset      = true,
>> +};
>> +
>>  static const struct sun4i_codec_quirks sun8i_h3_codec_quirks = {
>>         .regmap_config  = &sun8i_h3_codec_regmap_config,
>>         /*
>> @@ -1458,6 +1513,10 @@ static const struct of_device_id sun4i_codec_of_match[] = {
>>                 .compatible = "allwinner,sun8i-h3-codec",
>>                 .data = &sun8i_h3_codec_quirks,
>>         },
>> +       {
>> +               .compatible = "allwinner,sun8i-v3s-codec",
>> +               .data = &sun8i_v3s_codec_quirks,
>> +       },
>>         {}
>>  };
>>  MODULE_DEVICE_TABLE(of, sun4i_codec_of_match);
>> --
>> 2.11.1
>>
>> --
>> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe at googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 10/12] ARM: dts: sun8i: add audio codec support into V3s DTSI
@ 2017-03-06  4:17       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:17 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s SoC features an internal audio codec like the one in H3,
> and a analog codec like the one in H3/A23 (but much simpler).
>
> Add them in the DTSI file.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>

Acked-by: Chen-Yu Tsai <wens@csie.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 10/12] ARM: dts: sun8i: add audio codec support into V3s DTSI
@ 2017-03-06  4:17       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:17 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, devicetree, linux-arm-kernel,
	linux-kernel, Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
> Allwinner V3s SoC features an internal audio codec like the one in H3,
> and a analog codec like the one in H3/A23 (but much simpler).
>
> Add them in the DTSI file.
>
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>

Acked-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [PATCH v2 10/12] ARM: dts: sun8i: add audio codec support into V3s DTSI
@ 2017-03-06  4:17       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:17 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s SoC features an internal audio codec like the one in H3,
> and a analog codec like the one in H3/A23 (but much simpler).
>
> Add them in the DTSI file.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>

Acked-by: Chen-Yu Tsai <wens@csie.org>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] [PATCH v2 11/12] ARM: dts: sun8i: add pinmux for V3s mmc1
@ 2017-03-06  4:22       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:22 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s SoC features 3 MMC controllers, mmc0 is used as the
> MicroSD slot on Lichee Pi Zero, and on Lichee Pi Zero's dock mmc1 is
> also soldered as a MicroSD slot.
>
> Add the pinmux for mmc1, thus we can enable the MicroSD slot on the
> Lichee Pi Zero dock.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  arch/arm/boot/dts/sun8i-v3s.dtsi | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
> index 5fb6cb69f7bc..a39c26bceedc 100644
> --- a/arch/arm/boot/dts/sun8i-v3s.dtsi
> +++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
> @@ -234,6 +234,14 @@
>                                 drive-strength = <30>;
>                                 bias-pull-up;
>                         };
> +
> +                       mmc1_pins: mmc1@0 {

This seems to be the only possible configuration. In that case, please drop
the @0 from the node name. We shouldn't be adding them anyway, since it causes
warnings from the device tree compiler.

Otherwise,

Acked-by: Chen-Yu Tsai <wens@csie.org>

> +                               pins = "PG0", "PG1", "PG2", "PG3",
> +                                      "PG4", "PG5";
> +                               function = "mmc1";
> +                               drive-strength = <30>;
> +                               bias-pull-up;
> +                       };
>                 };
>
>                 timer@01c20c00 {
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 11/12] ARM: dts: sun8i: add pinmux for V3s mmc1
@ 2017-03-06  4:22       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:22 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, devicetree, linux-arm-kernel,
	linux-kernel, Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
> Allwinner V3s SoC features 3 MMC controllers, mmc0 is used as the
> MicroSD slot on Lichee Pi Zero, and on Lichee Pi Zero's dock mmc1 is
> also soldered as a MicroSD slot.
>
> Add the pinmux for mmc1, thus we can enable the MicroSD slot on the
> Lichee Pi Zero dock.
>
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
> ---
>  arch/arm/boot/dts/sun8i-v3s.dtsi | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
> index 5fb6cb69f7bc..a39c26bceedc 100644
> --- a/arch/arm/boot/dts/sun8i-v3s.dtsi
> +++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
> @@ -234,6 +234,14 @@
>                                 drive-strength = <30>;
>                                 bias-pull-up;
>                         };
> +
> +                       mmc1_pins: mmc1@0 {

This seems to be the only possible configuration. In that case, please drop
the @0 from the node name. We shouldn't be adding them anyway, since it causes
warnings from the device tree compiler.

Otherwise,

Acked-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>

> +                               pins = "PG0", "PG1", "PG2", "PG3",
> +                                      "PG4", "PG5";
> +                               function = "mmc1";
> +                               drive-strength = <30>;
> +                               bias-pull-up;
> +                       };
>                 };
>
>                 timer@01c20c00 {
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [linux-sunxi] [PATCH v2 11/12] ARM: dts: sun8i: add pinmux for V3s mmc1
@ 2017-03-06  4:22       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:22 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Allwinner V3s SoC features 3 MMC controllers, mmc0 is used as the
> MicroSD slot on Lichee Pi Zero, and on Lichee Pi Zero's dock mmc1 is
> also soldered as a MicroSD slot.
>
> Add the pinmux for mmc1, thus we can enable the MicroSD slot on the
> Lichee Pi Zero dock.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  arch/arm/boot/dts/sun8i-v3s.dtsi | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/arch/arm/boot/dts/sun8i-v3s.dtsi b/arch/arm/boot/dts/sun8i-v3s.dtsi
> index 5fb6cb69f7bc..a39c26bceedc 100644
> --- a/arch/arm/boot/dts/sun8i-v3s.dtsi
> +++ b/arch/arm/boot/dts/sun8i-v3s.dtsi
> @@ -234,6 +234,14 @@
>                                 drive-strength = <30>;
>                                 bias-pull-up;
>                         };
> +
> +                       mmc1_pins: mmc1 at 0 {

This seems to be the only possible configuration. In that case, please drop
the @0 from the node name. We shouldn't be adding them anyway, since it causes
warnings from the device tree compiler.

Otherwise,

Acked-by: Chen-Yu Tsai <wens@csie.org>

> +                               pins = "PG0", "PG1", "PG2", "PG3",
> +                                      "PG4", "PG5";
> +                               function = "mmc1";
> +                               drive-strength = <30>;
> +                               bias-pull-up;
> +                       };
>                 };
>
>                 timer at 01c20c00 {
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe at googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [linux-sunxi] [PATCH v2 12/12] ARM: dts: sun8i: add device tree for Lichee Pi Zero with Dock
@ 2017-03-06  4:28       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:28 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine, devicetree, linux-arm-kernel, linux-kernel,
	Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Lichee Pi Zero features a dock, which adds some functions, and should be
> soldered with the core board of Lichee Pi Zero.
>
> Add support for the dock as a new dts, as soldering is needed to make
> the dock usable and there's functions enabled on the dock that is
> unavailable at the 2.54mm pins of the core board.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  arch/arm/boot/dts/Makefile                         |  3 +-
>  arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts | 67 ++++++++++++++++++++++
>  2 files changed, 69 insertions(+), 1 deletion(-)
>  create mode 100644 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
>
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index 011808490fed..1aa365306479 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -876,7 +876,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
>         sun8i-h3-orangepi-plus.dtb \
>         sun8i-h3-orangepi-plus2e.dtb \
>         sun8i-r16-parrot.dtb \
> -       sun8i-v3s-licheepi-zero.dtb
> +       sun8i-v3s-licheepi-zero.dtb \
> +       sun8i-v3s-licheepi-zero-dock.dtb
>  dtb-$(CONFIG_MACH_SUN9I) += \
>         sun9i-a80-optimus.dtb \
>         sun9i-a80-cubieboard4.dtb
> diff --git a/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts b/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
> new file mode 100644
> index 000000000000..0ce92dadc07b
> --- /dev/null
> +++ b/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
> @@ -0,0 +1,67 @@
> +/*
> + * Copyright (C) 2016 Icenowy Zheng <icenowy@aosc.xyz>
> + *
> + * This file is dual-licensed: you can use it either under the terms
> + * of the GPL or the X11 license, at your option. Note that this dual
> + * licensing only applies to this file, and not this project as a
> + * whole.
> + *
> + *  a) This file 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.
> + *
> + *     This file is distributed in the hope that it will be useful,
> + *     but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *     GNU General Public License for more details.
> + *
> + * Or, alternatively,
> + *
> + *  b) Permission is hereby granted, free of charge, to any person
> + *     obtaining a copy of this software and associated documentation
> + *     files (the "Software"), to deal in the Software without
> + *     restriction, including without limitation the rights to use,
> + *     copy, modify, merge, publish, distribute, sublicense, and/or
> + *     sell copies of the Software, and to permit persons to whom the
> + *     Software is furnished to do so, subject to the following
> + *     conditions:
> + *
> + *     The above copyright notice and this permission notice shall be
> + *     included in all copies or substantial portions of the Software.
> + *
> + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
> + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
> + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + *     OTHER DEALINGS IN THE SOFTWARE.
> + */
> +
> +#include "sun8i-v3s-licheepi-zero.dts"
> +
> +/ {
> +       model = "Lichee Pi Zero with Dock";
> +       compatible = "licheepi,licheepi-zero-dock", "licheepi,licheepi-zero",
> +                    "allwinner,sun8i-v3s";
> +};
> +
> +&codec {
> +       allwinner,audio-routing =
> +               "Headphone", "HP",
> +               "Headphone", "HPCOM",

Can you confirm HPCOM is indeed connected or is needed? This models how
the audio output is coupled to the headphone, AC or DC.

Easy way to check is if you get no sound without this, then it is likely
DC coupled, in which the return path is through HPCOM, and not GND.

Regards
ChenYu

> +               "MIC1", "Mic",
> +               "Mic",  "HBIAS";
> +       status = "okay";
> +};
> +
> +&mmc1 {
> +       pinctrl-0 = <&mmc1_pins>;
> +       pinctrl-names = "default";
> +       broken-cd;
> +       bus-width = <4>;
> +       vmmc-supply = <&reg_vcc3v3>;
> +       status = "okay";
> +};
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 12/12] ARM: dts: sun8i: add device tree for Lichee Pi Zero with Dock
@ 2017-03-06  4:28       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:28 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA, devicetree, linux-arm-kernel,
	linux-kernel, Linux-ALSA, linux-sunxi

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org> wrote:
> Lichee Pi Zero features a dock, which adds some functions, and should be
> soldered with the core board of Lichee Pi Zero.
>
> Add support for the dock as a new dts, as soldering is needed to make
> the dock usable and there's functions enabled on the dock that is
> unavailable at the 2.54mm pins of the core board.
>
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
> ---
>  arch/arm/boot/dts/Makefile                         |  3 +-
>  arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts | 67 ++++++++++++++++++++++
>  2 files changed, 69 insertions(+), 1 deletion(-)
>  create mode 100644 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
>
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index 011808490fed..1aa365306479 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -876,7 +876,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
>         sun8i-h3-orangepi-plus.dtb \
>         sun8i-h3-orangepi-plus2e.dtb \
>         sun8i-r16-parrot.dtb \
> -       sun8i-v3s-licheepi-zero.dtb
> +       sun8i-v3s-licheepi-zero.dtb \
> +       sun8i-v3s-licheepi-zero-dock.dtb
>  dtb-$(CONFIG_MACH_SUN9I) += \
>         sun9i-a80-optimus.dtb \
>         sun9i-a80-cubieboard4.dtb
> diff --git a/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts b/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
> new file mode 100644
> index 000000000000..0ce92dadc07b
> --- /dev/null
> +++ b/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
> @@ -0,0 +1,67 @@
> +/*
> + * Copyright (C) 2016 Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
> + *
> + * This file is dual-licensed: you can use it either under the terms
> + * of the GPL or the X11 license, at your option. Note that this dual
> + * licensing only applies to this file, and not this project as a
> + * whole.
> + *
> + *  a) This file 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.
> + *
> + *     This file is distributed in the hope that it will be useful,
> + *     but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *     GNU General Public License for more details.
> + *
> + * Or, alternatively,
> + *
> + *  b) Permission is hereby granted, free of charge, to any person
> + *     obtaining a copy of this software and associated documentation
> + *     files (the "Software"), to deal in the Software without
> + *     restriction, including without limitation the rights to use,
> + *     copy, modify, merge, publish, distribute, sublicense, and/or
> + *     sell copies of the Software, and to permit persons to whom the
> + *     Software is furnished to do so, subject to the following
> + *     conditions:
> + *
> + *     The above copyright notice and this permission notice shall be
> + *     included in all copies or substantial portions of the Software.
> + *
> + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
> + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
> + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + *     OTHER DEALINGS IN THE SOFTWARE.
> + */
> +
> +#include "sun8i-v3s-licheepi-zero.dts"
> +
> +/ {
> +       model = "Lichee Pi Zero with Dock";
> +       compatible = "licheepi,licheepi-zero-dock", "licheepi,licheepi-zero",
> +                    "allwinner,sun8i-v3s";
> +};
> +
> +&codec {
> +       allwinner,audio-routing =
> +               "Headphone", "HP",
> +               "Headphone", "HPCOM",

Can you confirm HPCOM is indeed connected or is needed? This models how
the audio output is coupled to the headphone, AC or DC.

Easy way to check is if you get no sound without this, then it is likely
DC coupled, in which the return path is through HPCOM, and not GND.

Regards
ChenYu

> +               "MIC1", "Mic",
> +               "Mic",  "HBIAS";
> +       status = "okay";
> +};
> +
> +&mmc1 {
> +       pinctrl-0 = <&mmc1_pins>;
> +       pinctrl-names = "default";
> +       broken-cd;
> +       bus-width = <4>;
> +       vmmc-supply = <&reg_vcc3v3>;
> +       status = "okay";
> +};
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [linux-sunxi] [PATCH v2 12/12] ARM: dts: sun8i: add device tree for Lichee Pi Zero with Dock
@ 2017-03-06  4:28       ` Chen-Yu Tsai
  0 siblings, 0 replies; 82+ messages in thread
From: Chen-Yu Tsai @ 2017-03-06  4:28 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 5, 2017 at 9:37 PM, Icenowy Zheng <icenowy@aosc.xyz> wrote:
> Lichee Pi Zero features a dock, which adds some functions, and should be
> soldered with the core board of Lichee Pi Zero.
>
> Add support for the dock as a new dts, as soldering is needed to make
> the dock usable and there's functions enabled on the dock that is
> unavailable at the 2.54mm pins of the core board.
>
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  arch/arm/boot/dts/Makefile                         |  3 +-
>  arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts | 67 ++++++++++++++++++++++
>  2 files changed, 69 insertions(+), 1 deletion(-)
>  create mode 100644 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
>
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index 011808490fed..1aa365306479 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -876,7 +876,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
>         sun8i-h3-orangepi-plus.dtb \
>         sun8i-h3-orangepi-plus2e.dtb \
>         sun8i-r16-parrot.dtb \
> -       sun8i-v3s-licheepi-zero.dtb
> +       sun8i-v3s-licheepi-zero.dtb \
> +       sun8i-v3s-licheepi-zero-dock.dtb
>  dtb-$(CONFIG_MACH_SUN9I) += \
>         sun9i-a80-optimus.dtb \
>         sun9i-a80-cubieboard4.dtb
> diff --git a/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts b/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
> new file mode 100644
> index 000000000000..0ce92dadc07b
> --- /dev/null
> +++ b/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
> @@ -0,0 +1,67 @@
> +/*
> + * Copyright (C) 2016 Icenowy Zheng <icenowy@aosc.xyz>
> + *
> + * This file is dual-licensed: you can use it either under the terms
> + * of the GPL or the X11 license, at your option. Note that this dual
> + * licensing only applies to this file, and not this project as a
> + * whole.
> + *
> + *  a) This file 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.
> + *
> + *     This file is distributed in the hope that it will be useful,
> + *     but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *     GNU General Public License for more details.
> + *
> + * Or, alternatively,
> + *
> + *  b) Permission is hereby granted, free of charge, to any person
> + *     obtaining a copy of this software and associated documentation
> + *     files (the "Software"), to deal in the Software without
> + *     restriction, including without limitation the rights to use,
> + *     copy, modify, merge, publish, distribute, sublicense, and/or
> + *     sell copies of the Software, and to permit persons to whom the
> + *     Software is furnished to do so, subject to the following
> + *     conditions:
> + *
> + *     The above copyright notice and this permission notice shall be
> + *     included in all copies or substantial portions of the Software.
> + *
> + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
> + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
> + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + *     OTHER DEALINGS IN THE SOFTWARE.
> + */
> +
> +#include "sun8i-v3s-licheepi-zero.dts"
> +
> +/ {
> +       model = "Lichee Pi Zero with Dock";
> +       compatible = "licheepi,licheepi-zero-dock", "licheepi,licheepi-zero",
> +                    "allwinner,sun8i-v3s";
> +};
> +
> +&codec {
> +       allwinner,audio-routing =
> +               "Headphone", "HP",
> +               "Headphone", "HPCOM",

Can you confirm HPCOM is indeed connected or is needed? This models how
the audio output is coupled to the headphone, AC or DC.

Easy way to check is if you get no sound without this, then it is likely
DC coupled, in which the return path is through HPCOM, and not GND.

Regards
ChenYu

> +               "MIC1", "Mic",
> +               "Mic",  "HBIAS";
> +       status = "okay";
> +};
> +
> +&mmc1 {
> +       pinctrl-0 = <&mmc1_pins>;
> +       pinctrl-names = "default";
> +       broken-cd;
> +       bus-width = <4>;
> +       vmmc-supply = <&reg_vcc3v3>;
> +       status = "okay";
> +};
> --
> 2.11.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe at googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [alsa-devel] [PATCH v2 03/12] ASoC: sun8i-codec-analog: split out mbias
       [not found]     ` <20170305133709.6288-4-icenowy-ymACFijhrKM@public.gmane.org>
  2017-03-05 13:49         ` Icenowy Zheng
@ 2017-03-07  0:15       ` kbuild test robot
  0 siblings, 0 replies; 82+ messages in thread
From: kbuild test robot @ 2017-03-07  0:15 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: kbuild-all, Vinod Koul, Rob Herring, Maxime Ripard, Chen-Yu Tsai,
	Mark Brown, devicetree, alsa-devel, linux-kernel, linux-sunxi,
	Icenowy Zheng, dmaengine, linux-arm-kernel

[-- Attachment #1: Type: text/plain, Size: 3054 bytes --]

Hi Icenowy,

[auto build test ERROR on linus/master]
[also build test ERROR on v4.11-rc1 next-20170306]
[cannot apply to robh/for-next asoc/for-next]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Icenowy-Zheng/ASoC-sun8i-codec-analog-split-out-mic2/20170307-064313
config: i386-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

>> sound/soc/sunxi/sun8i-codec-analog.c:705:2: error: unknown field 'has_mbias' specified in initializer
     .has_mbias = true,
     ^
   sound/soc/sunxi/sun8i-codec-analog.c:712:2: error: unknown field 'has_mbias' specified in initializer
     .has_mbias = true,
     ^
   sound/soc/sunxi/sun8i-codec-analog.c: In function 'sun8i_codec_analog_cmpnt_probe':
>> sound/soc/sunxi/sun8i-codec-analog.c:755:12: error: 'const struct sun8i_codec_analog_quirks' has no member named 'has_mbias'; did you mean 'has_mic2'?
     if (quirks->has_mbias) {
               ^~

vim +/has_mbias +705 sound/soc/sunxi/sun8i-codec-analog.c

   699	};
   700	
   701	static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
   702		.has_headphone	= true,
   703		.has_hmic	= true,
   704		.has_linein	= true,
 > 705		.has_mbias	= true,
   706		.has_mic2	= true,
   707	};
   708	
   709	static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
   710		.has_linein	= true,
   711		.has_lineout	= true,
   712		.has_mbias	= true,
   713		.has_mic2	= true,
   714	};
   715	
   716	static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
   717	{
   718		struct device *dev = cmpnt->dev;
   719		const struct sun8i_codec_analog_quirks *quirks;
   720		int ret;
   721	
   722		/*
   723		 * This would never return NULL unless someone directly registers a
   724		 * platform device matching this driver's name, without specifying a
   725		 * device tree node.
   726		 */
   727		quirks = of_device_get_match_data(dev);
   728	
   729		/* Add controls, widgets, and routes for individual features */
   730	
   731		if (quirks->has_headphone) {
   732			ret = sun8i_codec_add_headphone(cmpnt);
   733			if (ret)
   734				return ret;
   735		}
   736	
   737		if (quirks->has_hmic) {
   738			ret = sun8i_codec_add_hmic(cmpnt);
   739			if (ret)
   740				return ret;
   741		}
   742	
   743		if (quirks->has_linein) {
   744			ret = sun8i_codec_add_linein(cmpnt);
   745			if (ret)
   746				return ret;
   747		}
   748	
   749		if (quirks->has_lineout) {
   750			ret = sun8i_codec_add_lineout(cmpnt);
   751			if (ret)
   752				return ret;
   753		}
   754	
 > 755		if (quirks->has_mbias) {
   756			ret = sun8i_codec_add_mbias(cmpnt);
   757			if (ret)
   758				return ret;

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 58978 bytes --]

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [alsa-devel] [PATCH v2 03/12] ASoC: sun8i-codec-analog: split out mbias
@ 2017-03-07  0:15       ` kbuild test robot
  0 siblings, 0 replies; 82+ messages in thread
From: kbuild test robot @ 2017-03-07  0:15 UTC (permalink / raw)
  Cc: kbuild-all-JC7UmRfGjtg, Vinod Koul, Rob Herring, Maxime Ripard,
	Chen-Yu Tsai, Mark Brown, devicetree-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Icenowy Zheng,
	dmaengine-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r

[-- Attachment #1: Type: text/plain, Size: 3371 bytes --]

Hi Icenowy,

[auto build test ERROR on linus/master]
[also build test ERROR on v4.11-rc1 next-20170306]
[cannot apply to robh/for-next asoc/for-next]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Icenowy-Zheng/ASoC-sun8i-codec-analog-split-out-mic2/20170307-064313
config: i386-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

>> sound/soc/sunxi/sun8i-codec-analog.c:705:2: error: unknown field 'has_mbias' specified in initializer
     .has_mbias = true,
     ^
   sound/soc/sunxi/sun8i-codec-analog.c:712:2: error: unknown field 'has_mbias' specified in initializer
     .has_mbias = true,
     ^
   sound/soc/sunxi/sun8i-codec-analog.c: In function 'sun8i_codec_analog_cmpnt_probe':
>> sound/soc/sunxi/sun8i-codec-analog.c:755:12: error: 'const struct sun8i_codec_analog_quirks' has no member named 'has_mbias'; did you mean 'has_mic2'?
     if (quirks->has_mbias) {
               ^~

vim +/has_mbias +705 sound/soc/sunxi/sun8i-codec-analog.c

   699	};
   700	
   701	static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
   702		.has_headphone	= true,
   703		.has_hmic	= true,
   704		.has_linein	= true,
 > 705		.has_mbias	= true,
   706		.has_mic2	= true,
   707	};
   708	
   709	static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
   710		.has_linein	= true,
   711		.has_lineout	= true,
   712		.has_mbias	= true,
   713		.has_mic2	= true,
   714	};
   715	
   716	static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
   717	{
   718		struct device *dev = cmpnt->dev;
   719		const struct sun8i_codec_analog_quirks *quirks;
   720		int ret;
   721	
   722		/*
   723		 * This would never return NULL unless someone directly registers a
   724		 * platform device matching this driver's name, without specifying a
   725		 * device tree node.
   726		 */
   727		quirks = of_device_get_match_data(dev);
   728	
   729		/* Add controls, widgets, and routes for individual features */
   730	
   731		if (quirks->has_headphone) {
   732			ret = sun8i_codec_add_headphone(cmpnt);
   733			if (ret)
   734				return ret;
   735		}
   736	
   737		if (quirks->has_hmic) {
   738			ret = sun8i_codec_add_hmic(cmpnt);
   739			if (ret)
   740				return ret;
   741		}
   742	
   743		if (quirks->has_linein) {
   744			ret = sun8i_codec_add_linein(cmpnt);
   745			if (ret)
   746				return ret;
   747		}
   748	
   749		if (quirks->has_lineout) {
   750			ret = sun8i_codec_add_lineout(cmpnt);
   751			if (ret)
   752				return ret;
   753		}
   754	
 > 755		if (quirks->has_mbias) {
   756			ret = sun8i_codec_add_mbias(cmpnt);
   757			if (ret)
   758				return ret;

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

-- 
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit https://groups.google.com/d/optout.

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 58978 bytes --]

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [alsa-devel] [PATCH v2 03/12] ASoC: sun8i-codec-analog: split out mbias
@ 2017-03-07  0:15       ` kbuild test robot
  0 siblings, 0 replies; 82+ messages in thread
From: kbuild test robot @ 2017-03-07  0:15 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Icenowy,

[auto build test ERROR on linus/master]
[also build test ERROR on v4.11-rc1 next-20170306]
[cannot apply to robh/for-next asoc/for-next]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Icenowy-Zheng/ASoC-sun8i-codec-analog-split-out-mic2/20170307-064313
config: i386-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

>> sound/soc/sunxi/sun8i-codec-analog.c:705:2: error: unknown field 'has_mbias' specified in initializer
     .has_mbias = true,
     ^
   sound/soc/sunxi/sun8i-codec-analog.c:712:2: error: unknown field 'has_mbias' specified in initializer
     .has_mbias = true,
     ^
   sound/soc/sunxi/sun8i-codec-analog.c: In function 'sun8i_codec_analog_cmpnt_probe':
>> sound/soc/sunxi/sun8i-codec-analog.c:755:12: error: 'const struct sun8i_codec_analog_quirks' has no member named 'has_mbias'; did you mean 'has_mic2'?
     if (quirks->has_mbias) {
               ^~

vim +/has_mbias +705 sound/soc/sunxi/sun8i-codec-analog.c

   699	};
   700	
   701	static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
   702		.has_headphone	= true,
   703		.has_hmic	= true,
   704		.has_linein	= true,
 > 705		.has_mbias	= true,
   706		.has_mic2	= true,
   707	};
   708	
   709	static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
   710		.has_linein	= true,
   711		.has_lineout	= true,
   712		.has_mbias	= true,
   713		.has_mic2	= true,
   714	};
   715	
   716	static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
   717	{
   718		struct device *dev = cmpnt->dev;
   719		const struct sun8i_codec_analog_quirks *quirks;
   720		int ret;
   721	
   722		/*
   723		 * This would never return NULL unless someone directly registers a
   724		 * platform device matching this driver's name, without specifying a
   725		 * device tree node.
   726		 */
   727		quirks = of_device_get_match_data(dev);
   728	
   729		/* Add controls, widgets, and routes for individual features */
   730	
   731		if (quirks->has_headphone) {
   732			ret = sun8i_codec_add_headphone(cmpnt);
   733			if (ret)
   734				return ret;
   735		}
   736	
   737		if (quirks->has_hmic) {
   738			ret = sun8i_codec_add_hmic(cmpnt);
   739			if (ret)
   740				return ret;
   741		}
   742	
   743		if (quirks->has_linein) {
   744			ret = sun8i_codec_add_linein(cmpnt);
   745			if (ret)
   746				return ret;
   747		}
   748	
   749		if (quirks->has_lineout) {
   750			ret = sun8i_codec_add_lineout(cmpnt);
   751			if (ret)
   752				return ret;
   753		}
   754	
 > 755		if (quirks->has_mbias) {
   756			ret = sun8i_codec_add_mbias(cmpnt);
   757			if (ret)
   758				return ret;

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 58978 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170307/f18e9bc0/attachment-0001.gz>

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 00/12] Add support for the audio codec on Allwinner V3s
       [not found] ` <20170305133709.6288-1-icenowy-ymACFijhrKM@public.gmane.org>
  2017-03-05 13:36     ` Icenowy Zheng
@ 2017-03-07  8:57   ` Vinod Koul
  2017-03-05 13:37     ` Icenowy Zheng
                     ` (9 subsequent siblings)
  11 siblings, 0 replies; 82+ messages in thread
From: Vinod Koul @ 2017-03-07  8:57 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown, dmaengine,
	devicetree, linux-arm-kernel, linux-kernel, alsa-devel,
	linux-sunxi

On Sun, Mar 05, 2017 at 09:36:57PM +0800, Icenowy Zheng wrote:
> Allwinner V3s features a audio codec with dedicated digital and analog parts,
> like the ones on A23/H3, but much simpler (lack of MIC2, LINE IN and MBIAS).
> 
> Add support for it.
> 
> In order to make the codec usable, DMA support is also added in this series;
> the support of Lichee Pi Zero's dock board is also added here, as it's the
> only board hackable that come with ports connected to the codec.
> 
> Patch 1~3 split out parts that is not available on V3s in the analog codec.
> 
> Patch 4/5 adds support for V3s in analog/digital codec.
> 
> Patch 6 add the gate bit as a common quirk of sun6i-dma driver, as V3s also
> needs it.
> 
> Patch 7 really adds support for V3s in DMA engine.
> 
> Patch 8 restores the inclusion of CCU headers in the DTSI file of V3s, as
> it's removed when merging.
> 
> Patch 9/10/11 adds three parts of V3s: DMA engine, codec support and pinmux
> of mmc1 (used on Lichee Pi Zero dock).

And are these dependent upon rest, if not can you please send them
separately!

> 
> Patch 12 adds support for Lichee Pi Zero dock, with support of mmc1 and
> codec.
> 
> Icenowy Zheng (12):
>   ASoC: sun8i-codec-analog: split out mic2
>   ASoC: sun8i-codec-analog: split out line in
>   ASoC: sun8i-codec-analog: split out mbias
>   ASoC: sun8i-codec-analog: add support for V3s SoC
>   ASoC: sun4i-codec: Add support for V3s codec
>   dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
>   dmaengine: sun6i: support V3s SoC variant
>   ARM: dts: sun8i: restore the inclusion of ccu headers in V3s DTSI
>   ARM: dts: sun8i: add DMA engine in V3s DTSI
>   ARM: dts: sun8i: add audio codec support into V3s DTSI
>   ARM: dts: sun8i: add pinmux for V3s mmc1
>   ARM: dts: sun8i: add device tree for Lichee Pi Zero with Dock
> 
>  .../devicetree/bindings/dma/sun6i-dma.txt          |   1 +
>  .../devicetree/bindings/sound/sun4i-codec.txt      |  11 +-
>  .../bindings/sound/sun8i-codec-analog.txt          |   1 +
>  arch/arm/boot/dts/Makefile                         |   3 +-
>  arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts |  67 +++++++
>  arch/arm/boot/dts/sun8i-v3s.dtsi                   | 103 ++++++----
>  drivers/dma/sun6i-dma.c                            |  22 ++-
>  sound/soc/sunxi/sun4i-codec.c                      |  59 ++++++
>  sound/soc/sunxi/sun8i-codec-analog.c               | 211 +++++++++++++++++----
>  9 files changed, 405 insertions(+), 73 deletions(-)
>  create mode 100644 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
> 
> -- 
> 2.11.1
> 

-- 
~Vinod

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 00/12] Add support for the audio codec on Allwinner V3s
@ 2017-03-07  8:57   ` Vinod Koul
  0 siblings, 0 replies; 82+ messages in thread
From: Vinod Koul @ 2017-03-07  8:57 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw

On Sun, Mar 05, 2017 at 09:36:57PM +0800, Icenowy Zheng wrote:
> Allwinner V3s features a audio codec with dedicated digital and analog parts,
> like the ones on A23/H3, but much simpler (lack of MIC2, LINE IN and MBIAS).
> 
> Add support for it.
> 
> In order to make the codec usable, DMA support is also added in this series;
> the support of Lichee Pi Zero's dock board is also added here, as it's the
> only board hackable that come with ports connected to the codec.
> 
> Patch 1~3 split out parts that is not available on V3s in the analog codec.
> 
> Patch 4/5 adds support for V3s in analog/digital codec.
> 
> Patch 6 add the gate bit as a common quirk of sun6i-dma driver, as V3s also
> needs it.
> 
> Patch 7 really adds support for V3s in DMA engine.
> 
> Patch 8 restores the inclusion of CCU headers in the DTSI file of V3s, as
> it's removed when merging.
> 
> Patch 9/10/11 adds three parts of V3s: DMA engine, codec support and pinmux
> of mmc1 (used on Lichee Pi Zero dock).

And are these dependent upon rest, if not can you please send them
separately!

> 
> Patch 12 adds support for Lichee Pi Zero dock, with support of mmc1 and
> codec.
> 
> Icenowy Zheng (12):
>   ASoC: sun8i-codec-analog: split out mic2
>   ASoC: sun8i-codec-analog: split out line in
>   ASoC: sun8i-codec-analog: split out mbias
>   ASoC: sun8i-codec-analog: add support for V3s SoC
>   ASoC: sun4i-codec: Add support for V3s codec
>   dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
>   dmaengine: sun6i: support V3s SoC variant
>   ARM: dts: sun8i: restore the inclusion of ccu headers in V3s DTSI
>   ARM: dts: sun8i: add DMA engine in V3s DTSI
>   ARM: dts: sun8i: add audio codec support into V3s DTSI
>   ARM: dts: sun8i: add pinmux for V3s mmc1
>   ARM: dts: sun8i: add device tree for Lichee Pi Zero with Dock
> 
>  .../devicetree/bindings/dma/sun6i-dma.txt          |   1 +
>  .../devicetree/bindings/sound/sun4i-codec.txt      |  11 +-
>  .../bindings/sound/sun8i-codec-analog.txt          |   1 +
>  arch/arm/boot/dts/Makefile                         |   3 +-
>  arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts |  67 +++++++
>  arch/arm/boot/dts/sun8i-v3s.dtsi                   | 103 ++++++----
>  drivers/dma/sun6i-dma.c                            |  22 ++-
>  sound/soc/sunxi/sun4i-codec.c                      |  59 ++++++
>  sound/soc/sunxi/sun8i-codec-analog.c               | 211 +++++++++++++++++----
>  9 files changed, 405 insertions(+), 73 deletions(-)
>  create mode 100644 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
> 
> -- 
> 2.11.1
> 

-- 
~Vinod

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [PATCH v2 00/12] Add support for the audio codec on Allwinner V3s
@ 2017-03-07  8:57   ` Vinod Koul
  0 siblings, 0 replies; 82+ messages in thread
From: Vinod Koul @ 2017-03-07  8:57 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 05, 2017 at 09:36:57PM +0800, Icenowy Zheng wrote:
> Allwinner V3s features a audio codec with dedicated digital and analog parts,
> like the ones on A23/H3, but much simpler (lack of MIC2, LINE IN and MBIAS).
> 
> Add support for it.
> 
> In order to make the codec usable, DMA support is also added in this series;
> the support of Lichee Pi Zero's dock board is also added here, as it's the
> only board hackable that come with ports connected to the codec.
> 
> Patch 1~3 split out parts that is not available on V3s in the analog codec.
> 
> Patch 4/5 adds support for V3s in analog/digital codec.
> 
> Patch 6 add the gate bit as a common quirk of sun6i-dma driver, as V3s also
> needs it.
> 
> Patch 7 really adds support for V3s in DMA engine.
> 
> Patch 8 restores the inclusion of CCU headers in the DTSI file of V3s, as
> it's removed when merging.
> 
> Patch 9/10/11 adds three parts of V3s: DMA engine, codec support and pinmux
> of mmc1 (used on Lichee Pi Zero dock).

And are these dependent upon rest, if not can you please send them
separately!

> 
> Patch 12 adds support for Lichee Pi Zero dock, with support of mmc1 and
> codec.
> 
> Icenowy Zheng (12):
>   ASoC: sun8i-codec-analog: split out mic2
>   ASoC: sun8i-codec-analog: split out line in
>   ASoC: sun8i-codec-analog: split out mbias
>   ASoC: sun8i-codec-analog: add support for V3s SoC
>   ASoC: sun4i-codec: Add support for V3s codec
>   dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
>   dmaengine: sun6i: support V3s SoC variant
>   ARM: dts: sun8i: restore the inclusion of ccu headers in V3s DTSI
>   ARM: dts: sun8i: add DMA engine in V3s DTSI
>   ARM: dts: sun8i: add audio codec support into V3s DTSI
>   ARM: dts: sun8i: add pinmux for V3s mmc1
>   ARM: dts: sun8i: add device tree for Lichee Pi Zero with Dock
> 
>  .../devicetree/bindings/dma/sun6i-dma.txt          |   1 +
>  .../devicetree/bindings/sound/sun4i-codec.txt      |  11 +-
>  .../bindings/sound/sun8i-codec-analog.txt          |   1 +
>  arch/arm/boot/dts/Makefile                         |   3 +-
>  arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts |  67 +++++++
>  arch/arm/boot/dts/sun8i-v3s.dtsi                   | 103 ++++++----
>  drivers/dma/sun6i-dma.c                            |  22 ++-
>  sound/soc/sunxi/sun4i-codec.c                      |  59 ++++++
>  sound/soc/sunxi/sun8i-codec-analog.c               | 211 +++++++++++++++++----
>  9 files changed, 405 insertions(+), 73 deletions(-)
>  create mode 100644 arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
> 
> -- 
> 2.11.1
> 

-- 
~Vinod

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 06/12] dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
@ 2017-03-14  4:10       ` Vinod Koul
  0 siblings, 0 replies; 82+ messages in thread
From: Vinod Koul @ 2017-03-14  4:10 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown, dmaengine,
	devicetree, linux-arm-kernel, linux-kernel, alsa-devel,
	linux-sunxi

On Sun, Mar 05, 2017 at 09:37:03PM +0800, Icenowy Zheng wrote:
> Originally we enable a special gate bit when the compatible indicates
> A23/33.
> 
> But according to BSP sources and user manuals, more SoCs will need this
> gate bit.
> 
> So make it a common quirk configured in the config struct.
> 
> The BSP source also indicates that A83T will need this gate bit (there's
> "SUN8IW6" in the #ifdef's), so also enable this gate bit for it.
> 
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  drivers/dma/sun6i-dma.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
> index a2358780ab2c..889fb24023cd 100644
> --- a/drivers/dma/sun6i-dma.c
> +++ b/drivers/dma/sun6i-dma.c
> @@ -101,6 +101,7 @@ struct sun6i_dma_config {
>  	u32 nr_max_channels;
>  	u32 nr_max_requests;
>  	u32 nr_max_vchans;
> +	bool gate_needed;

can you please explain what gate means here

-- 
~Vinod

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Re: [PATCH v2 06/12] dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
@ 2017-03-14  4:10       ` Vinod Koul
  0 siblings, 0 replies; 82+ messages in thread
From: Vinod Koul @ 2017-03-14  4:10 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Rob Herring, Maxime Ripard, Chen-Yu Tsai, Mark Brown,
	dmaengine-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw

On Sun, Mar 05, 2017 at 09:37:03PM +0800, Icenowy Zheng wrote:
> Originally we enable a special gate bit when the compatible indicates
> A23/33.
> 
> But according to BSP sources and user manuals, more SoCs will need this
> gate bit.
> 
> So make it a common quirk configured in the config struct.
> 
> The BSP source also indicates that A83T will need this gate bit (there's
> "SUN8IW6" in the #ifdef's), so also enable this gate bit for it.
> 
> Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
> ---
>  drivers/dma/sun6i-dma.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
> index a2358780ab2c..889fb24023cd 100644
> --- a/drivers/dma/sun6i-dma.c
> +++ b/drivers/dma/sun6i-dma.c
> @@ -101,6 +101,7 @@ struct sun6i_dma_config {
>  	u32 nr_max_channels;
>  	u32 nr_max_requests;
>  	u32 nr_max_vchans;
> +	bool gate_needed;

can you please explain what gate means here

-- 
~Vinod

^ permalink raw reply	[flat|nested] 82+ messages in thread

* [PATCH v2 06/12] dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk
@ 2017-03-14  4:10       ` Vinod Koul
  0 siblings, 0 replies; 82+ messages in thread
From: Vinod Koul @ 2017-03-14  4:10 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Mar 05, 2017 at 09:37:03PM +0800, Icenowy Zheng wrote:
> Originally we enable a special gate bit when the compatible indicates
> A23/33.
> 
> But according to BSP sources and user manuals, more SoCs will need this
> gate bit.
> 
> So make it a common quirk configured in the config struct.
> 
> The BSP source also indicates that A83T will need this gate bit (there's
> "SUN8IW6" in the #ifdef's), so also enable this gate bit for it.
> 
> Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
> ---
>  drivers/dma/sun6i-dma.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
> index a2358780ab2c..889fb24023cd 100644
> --- a/drivers/dma/sun6i-dma.c
> +++ b/drivers/dma/sun6i-dma.c
> @@ -101,6 +101,7 @@ struct sun6i_dma_config {
>  	u32 nr_max_channels;
>  	u32 nr_max_requests;
>  	u32 nr_max_vchans;
> +	bool gate_needed;

can you please explain what gate means here

-- 
~Vinod

^ permalink raw reply	[flat|nested] 82+ messages in thread

* Applied "ASoC: sun8i-codec-analog: split out line in" to the asoc tree
@ 2017-03-15 18:13       ` Mark Brown
  0 siblings, 0 replies; 82+ messages in thread
From: Mark Brown @ 2017-03-15 18:13 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Chen-Yu Tsai, Mark Brown, Vinod Koul, Rob Herring, Maxime Ripard,
	Chen-Yu Tsai, Mark Brown, devicetree, alsa-devel, linux-kernel,
	linux-sunxi, dmaengine, linux-arm-kernel, alsa-devel

The patch

   ASoC: sun8i-codec-analog: split out line in

has been applied to the asoc tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From 6ff4eb7e5d8aa4e5f4d6eb22be1deaae735de92c Mon Sep 17 00:00:00 2001
From: Icenowy Zheng <icenowy@aosc.xyz>
Date: Sun, 5 Mar 2017 21:36:59 +0800
Subject: [PATCH] ASoC: sun8i-codec-analog: split out line in

Allwinner V3s features an analog codec without LINEIN.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
Acked-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 76 ++++++++++++++++++++++++++++++------
 1 file changed, 65 insertions(+), 11 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index b95ff045cd7f..6c17c99c2c8d 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -252,10 +252,7 @@ static const DECLARE_TLV_DB_RANGE(sun8i_codec_mic_gain_scale,
 );
 
 static const struct snd_kcontrol_new sun8i_codec_common_controls[] = {
-	/* Mixer pre-gains */
-	SOC_SINGLE_TLV("Line In Playback Volume", SUN8I_ADDA_LINEIN_GCTRL,
-		       SUN8I_ADDA_LINEIN_GCTRL_LINEING,
-		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+	/* Mixer pre-gain */
 	SOC_SINGLE_TLV("Mic1 Playback Volume", SUN8I_ADDA_MICIN_GCTRL,
 		       SUN8I_ADDA_MICIN_GCTRL_MIC1G,
 		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
@@ -289,9 +286,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	 * stream widgets at the card level.
 	 */
 
-	/* Line In */
-	SND_SOC_DAPM_INPUT("LINEIN"),
-
 	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
 
@@ -330,25 +324,21 @@ static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = {
 	/* Left Mixer Routes */
 	{ "Left Mixer", "DAC Playback Switch", "Left DAC" },
 	{ "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" },
-	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Left Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
 
 	/* Right Mixer Routes */
 	{ "Right Mixer", "DAC Playback Switch", "Right DAC" },
 	{ "Right Mixer", "DAC Reversed Playback Switch", "Left DAC" },
-	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Right Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
 
 	/* Left ADC Mixer Routes */
 	{ "Left ADC Mixer", "Mixer Capture Switch", "Left Mixer" },
 	{ "Left ADC Mixer", "Mixer Reversed Capture Switch", "Right Mixer" },
-	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Left ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
 
 	/* Right ADC Mixer Routes */
 	{ "Right ADC Mixer", "Mixer Capture Switch", "Right Mixer" },
 	{ "Right ADC Mixer", "Mixer Reversed Capture Switch", "Left Mixer" },
-	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Right ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
 
 	/* ADC Routes */
@@ -484,6 +474,61 @@ static int sun8i_codec_add_hmic(struct snd_soc_component *cmpnt)
 	return ret;
 }
 
+/* line in specific controls, widgets and rines */
+static const struct snd_kcontrol_new sun8i_codec_linein_controls[] = {
+	/* Mixer pre-gain */
+	SOC_SINGLE_TLV("Line In Playback Volume", SUN8I_ADDA_LINEIN_GCTRL,
+		       SUN8I_ADDA_LINEIN_GCTRL_LINEING,
+		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+};
+
+static const struct snd_soc_dapm_widget sun8i_codec_linein_widgets[] = {
+	/* Line input */
+	SND_SOC_DAPM_INPUT("LINEIN"),
+};
+
+static const struct snd_soc_dapm_route sun8i_codec_linein_routes[] = {
+	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
+
+	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
+
+	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
+
+	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
+};
+
+static int sun8i_codec_add_linein(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_add_component_controls(cmpnt,
+					     sun8i_codec_linein_controls,
+					     ARRAY_SIZE(sun8i_codec_linein_controls));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In controls: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_linein_widgets,
+					ARRAY_SIZE(sun8i_codec_linein_widgets));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In DAPM widgets: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_add_routes(dapm, sun8i_codec_linein_routes,
+				      ARRAY_SIZE(sun8i_codec_linein_routes));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In DAPM routes: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+
 /* line out specific controls, widgets and routes */
 static const DECLARE_TLV_DB_RANGE(sun8i_codec_lineout_vol_scale,
 	0, 1, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
@@ -632,6 +677,7 @@ static int sun8i_codec_add_mic2(struct snd_soc_component *cmpnt)
 struct sun8i_codec_analog_quirks {
 	bool has_headphone;
 	bool has_hmic;
+	bool has_linein;
 	bool has_lineout;
 	bool has_mic2;
 };
@@ -639,10 +685,12 @@ struct sun8i_codec_analog_quirks {
 static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
+	.has_linein	= true,
 	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
+	.has_linein	= true,
 	.has_lineout	= true,
 	.has_mic2	= true,
 };
@@ -674,6 +722,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_linein) {
+		ret = sun8i_codec_add_linein(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	if (quirks->has_lineout) {
 		ret = sun8i_codec_add_lineout(cmpnt);
 		if (ret)
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* Applied "ASoC: sun8i-codec-analog: split out line in" to the asoc tree
@ 2017-03-15 18:13       ` Mark Brown
  0 siblings, 0 replies; 82+ messages in thread
From: Mark Brown @ 2017-03-15 18:13 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Chen-Yu Tsai, Mark Brown, Vinod Koul, Rob Herring, Maxime Ripard

The patch

   ASoC: sun8i-codec-analog: split out line in

has been applied to the asoc tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From 6ff4eb7e5d8aa4e5f4d6eb22be1deaae735de92c Mon Sep 17 00:00:00 2001
From: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
Date: Sun, 5 Mar 2017 21:36:59 +0800
Subject: [PATCH] ASoC: sun8i-codec-analog: split out line in

Allwinner V3s features an analog codec without LINEIN.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
Acked-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>
Signed-off-by: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 76 ++++++++++++++++++++++++++++++------
 1 file changed, 65 insertions(+), 11 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index b95ff045cd7f..6c17c99c2c8d 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -252,10 +252,7 @@ static const DECLARE_TLV_DB_RANGE(sun8i_codec_mic_gain_scale,
 );
 
 static const struct snd_kcontrol_new sun8i_codec_common_controls[] = {
-	/* Mixer pre-gains */
-	SOC_SINGLE_TLV("Line In Playback Volume", SUN8I_ADDA_LINEIN_GCTRL,
-		       SUN8I_ADDA_LINEIN_GCTRL_LINEING,
-		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+	/* Mixer pre-gain */
 	SOC_SINGLE_TLV("Mic1 Playback Volume", SUN8I_ADDA_MICIN_GCTRL,
 		       SUN8I_ADDA_MICIN_GCTRL_MIC1G,
 		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
@@ -289,9 +286,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	 * stream widgets at the card level.
 	 */
 
-	/* Line In */
-	SND_SOC_DAPM_INPUT("LINEIN"),
-
 	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
 
@@ -330,25 +324,21 @@ static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = {
 	/* Left Mixer Routes */
 	{ "Left Mixer", "DAC Playback Switch", "Left DAC" },
 	{ "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" },
-	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Left Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
 
 	/* Right Mixer Routes */
 	{ "Right Mixer", "DAC Playback Switch", "Right DAC" },
 	{ "Right Mixer", "DAC Reversed Playback Switch", "Left DAC" },
-	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Right Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
 
 	/* Left ADC Mixer Routes */
 	{ "Left ADC Mixer", "Mixer Capture Switch", "Left Mixer" },
 	{ "Left ADC Mixer", "Mixer Reversed Capture Switch", "Right Mixer" },
-	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Left ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
 
 	/* Right ADC Mixer Routes */
 	{ "Right ADC Mixer", "Mixer Capture Switch", "Right Mixer" },
 	{ "Right ADC Mixer", "Mixer Reversed Capture Switch", "Left Mixer" },
-	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Right ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
 
 	/* ADC Routes */
@@ -484,6 +474,61 @@ static int sun8i_codec_add_hmic(struct snd_soc_component *cmpnt)
 	return ret;
 }
 
+/* line in specific controls, widgets and rines */
+static const struct snd_kcontrol_new sun8i_codec_linein_controls[] = {
+	/* Mixer pre-gain */
+	SOC_SINGLE_TLV("Line In Playback Volume", SUN8I_ADDA_LINEIN_GCTRL,
+		       SUN8I_ADDA_LINEIN_GCTRL_LINEING,
+		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+};
+
+static const struct snd_soc_dapm_widget sun8i_codec_linein_widgets[] = {
+	/* Line input */
+	SND_SOC_DAPM_INPUT("LINEIN"),
+};
+
+static const struct snd_soc_dapm_route sun8i_codec_linein_routes[] = {
+	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
+
+	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
+
+	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
+
+	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
+};
+
+static int sun8i_codec_add_linein(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_add_component_controls(cmpnt,
+					     sun8i_codec_linein_controls,
+					     ARRAY_SIZE(sun8i_codec_linein_controls));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In controls: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_linein_widgets,
+					ARRAY_SIZE(sun8i_codec_linein_widgets));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In DAPM widgets: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_add_routes(dapm, sun8i_codec_linein_routes,
+				      ARRAY_SIZE(sun8i_codec_linein_routes));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In DAPM routes: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+
 /* line out specific controls, widgets and routes */
 static const DECLARE_TLV_DB_RANGE(sun8i_codec_lineout_vol_scale,
 	0, 1, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
@@ -632,6 +677,7 @@ static int sun8i_codec_add_mic2(struct snd_soc_component *cmpnt)
 struct sun8i_codec_analog_quirks {
 	bool has_headphone;
 	bool has_hmic;
+	bool has_linein;
 	bool has_lineout;
 	bool has_mic2;
 };
@@ -639,10 +685,12 @@ struct sun8i_codec_analog_quirks {
 static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
+	.has_linein	= true,
 	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
+	.has_linein	= true,
 	.has_lineout	= true,
 	.has_mic2	= true,
 };
@@ -674,6 +722,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_linein) {
+		ret = sun8i_codec_add_linein(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	if (quirks->has_lineout) {
 		ret = sun8i_codec_add_lineout(cmpnt);
 		if (ret)
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* Applied "ASoC: sun8i-codec-analog: split out line in" to the asoc tree
@ 2017-03-15 18:13       ` Mark Brown
  0 siblings, 0 replies; 82+ messages in thread
From: Mark Brown @ 2017-03-15 18:13 UTC (permalink / raw)
  To: linux-arm-kernel

The patch

   ASoC: sun8i-codec-analog: split out line in

has been applied to the asoc tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From 6ff4eb7e5d8aa4e5f4d6eb22be1deaae735de92c Mon Sep 17 00:00:00 2001
From: Icenowy Zheng <icenowy@aosc.xyz>
Date: Sun, 5 Mar 2017 21:36:59 +0800
Subject: [PATCH] ASoC: sun8i-codec-analog: split out line in

Allwinner V3s features an analog codec without LINEIN.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
Acked-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 76 ++++++++++++++++++++++++++++++------
 1 file changed, 65 insertions(+), 11 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index b95ff045cd7f..6c17c99c2c8d 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -252,10 +252,7 @@ static const DECLARE_TLV_DB_RANGE(sun8i_codec_mic_gain_scale,
 );
 
 static const struct snd_kcontrol_new sun8i_codec_common_controls[] = {
-	/* Mixer pre-gains */
-	SOC_SINGLE_TLV("Line In Playback Volume", SUN8I_ADDA_LINEIN_GCTRL,
-		       SUN8I_ADDA_LINEIN_GCTRL_LINEING,
-		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+	/* Mixer pre-gain */
 	SOC_SINGLE_TLV("Mic1 Playback Volume", SUN8I_ADDA_MICIN_GCTRL,
 		       SUN8I_ADDA_MICIN_GCTRL_MIC1G,
 		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
@@ -289,9 +286,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	 * stream widgets at the card level.
 	 */
 
-	/* Line In */
-	SND_SOC_DAPM_INPUT("LINEIN"),
-
 	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
 
@@ -330,25 +324,21 @@ static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = {
 	/* Left Mixer Routes */
 	{ "Left Mixer", "DAC Playback Switch", "Left DAC" },
 	{ "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" },
-	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Left Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
 
 	/* Right Mixer Routes */
 	{ "Right Mixer", "DAC Playback Switch", "Right DAC" },
 	{ "Right Mixer", "DAC Reversed Playback Switch", "Left DAC" },
-	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Right Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
 
 	/* Left ADC Mixer Routes */
 	{ "Left ADC Mixer", "Mixer Capture Switch", "Left Mixer" },
 	{ "Left ADC Mixer", "Mixer Reversed Capture Switch", "Right Mixer" },
-	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Left ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
 
 	/* Right ADC Mixer Routes */
 	{ "Right ADC Mixer", "Mixer Capture Switch", "Right Mixer" },
 	{ "Right ADC Mixer", "Mixer Reversed Capture Switch", "Left Mixer" },
-	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Right ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
 
 	/* ADC Routes */
@@ -484,6 +474,61 @@ static int sun8i_codec_add_hmic(struct snd_soc_component *cmpnt)
 	return ret;
 }
 
+/* line in specific controls, widgets and rines */
+static const struct snd_kcontrol_new sun8i_codec_linein_controls[] = {
+	/* Mixer pre-gain */
+	SOC_SINGLE_TLV("Line In Playback Volume", SUN8I_ADDA_LINEIN_GCTRL,
+		       SUN8I_ADDA_LINEIN_GCTRL_LINEING,
+		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+};
+
+static const struct snd_soc_dapm_widget sun8i_codec_linein_widgets[] = {
+	/* Line input */
+	SND_SOC_DAPM_INPUT("LINEIN"),
+};
+
+static const struct snd_soc_dapm_route sun8i_codec_linein_routes[] = {
+	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
+
+	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
+
+	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
+
+	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
+};
+
+static int sun8i_codec_add_linein(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_add_component_controls(cmpnt,
+					     sun8i_codec_linein_controls,
+					     ARRAY_SIZE(sun8i_codec_linein_controls));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In controls: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_linein_widgets,
+					ARRAY_SIZE(sun8i_codec_linein_widgets));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In DAPM widgets: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_add_routes(dapm, sun8i_codec_linein_routes,
+				      ARRAY_SIZE(sun8i_codec_linein_routes));
+	if (ret) {
+		dev_err(dev, "Failed to add Line In DAPM routes: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+
 /* line out specific controls, widgets and routes */
 static const DECLARE_TLV_DB_RANGE(sun8i_codec_lineout_vol_scale,
 	0, 1, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
@@ -632,6 +677,7 @@ static int sun8i_codec_add_mic2(struct snd_soc_component *cmpnt)
 struct sun8i_codec_analog_quirks {
 	bool has_headphone;
 	bool has_hmic;
+	bool has_linein;
 	bool has_lineout;
 	bool has_mic2;
 };
@@ -639,10 +685,12 @@ struct sun8i_codec_analog_quirks {
 static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
+	.has_linein	= true,
 	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
+	.has_linein	= true,
 	.has_lineout	= true,
 	.has_mic2	= true,
 };
@@ -674,6 +722,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_linein) {
+		ret = sun8i_codec_add_linein(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	if (quirks->has_lineout) {
 		ret = sun8i_codec_add_lineout(cmpnt);
 		if (ret)
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* Applied "ASoC: sun8i-codec-analog: split out mic2" to the asoc tree
@ 2017-03-15 18:13       ` Mark Brown
  0 siblings, 0 replies; 82+ messages in thread
From: Mark Brown @ 2017-03-15 18:13 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Chen-Yu Tsai, Mark Brown, Vinod Koul, Rob Herring, Maxime Ripard,
	Chen-Yu Tsai, Mark Brown, devicetree, alsa-devel, linux-kernel,
	linux-sunxi, dmaengine, linux-arm-kernel, alsa-devel

The patch

   ASoC: sun8i-codec-analog: split out mic2

has been applied to the asoc tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From 3f48947d56ff3e42e2e490714025e984af817f5d Mon Sep 17 00:00:00 2001
From: Icenowy Zheng <icenowy@aosc.xyz>
Date: Sun, 5 Mar 2017 21:36:58 +0800
Subject: [PATCH] ASoC: sun8i-codec-analog: split out mic2

Allwinner V3s features an analog codec without MIC2.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
Acked-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 92 +++++++++++++++++++++++++++++-------
 1 file changed, 76 insertions(+), 16 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index 72331332b72e..b95ff045cd7f 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -259,17 +259,11 @@ static const struct snd_kcontrol_new sun8i_codec_common_controls[] = {
 	SOC_SINGLE_TLV("Mic1 Playback Volume", SUN8I_ADDA_MICIN_GCTRL,
 		       SUN8I_ADDA_MICIN_GCTRL_MIC1G,
 		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
-	SOC_SINGLE_TLV("Mic2 Playback Volume",
-		       SUN8I_ADDA_MICIN_GCTRL, SUN8I_ADDA_MICIN_GCTRL_MIC2G,
-		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
 
-	/* Microphone Amp boost gains */
+	/* Microphone Amp boost gain */
 	SOC_SINGLE_TLV("Mic1 Boost Volume", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 		       SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1BOOST, 0x7, 0,
 		       sun8i_codec_mic_gain_scale),
-	SOC_SINGLE_TLV("Mic2 Boost Volume", SUN8I_ADDA_MIC2G_CTRL,
-		       SUN8I_ADDA_MIC2G_CTRL_MIC2BOOST, 0x7, 0,
-		       sun8i_codec_mic_gain_scale),
 
 	/* ADC */
 	SOC_SINGLE_TLV("ADC Gain Capture Volume", SUN8I_ADDA_ADC_AP_EN,
@@ -298,9 +292,8 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Line In */
 	SND_SOC_DAPM_INPUT("LINEIN"),
 
-	/* Microphone inputs */
+	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
-	SND_SOC_DAPM_INPUT("MIC2"),
 
 	/* Microphone Bias */
 	SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
@@ -310,8 +303,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Mic input path */
 	SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 			 SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
-	SND_SOC_DAPM_PGA("Mic2 Amplifier", SUN8I_ADDA_MIC2G_CTRL,
-			 SUN8I_ADDA_MIC2G_CTRL_MIC2AMPEN, 0, NULL, 0),
 
 	/* Mixers */
 	SND_SOC_DAPM_MIXER("Left Mixer", SUN8I_ADDA_DAC_PA_SRC,
@@ -335,35 +326,30 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = {
 	/* Microphone Routes */
 	{ "Mic1 Amplifier", NULL, "MIC1"},
-	{ "Mic2 Amplifier", NULL, "MIC2"},
 
 	/* Left Mixer Routes */
 	{ "Left Mixer", "DAC Playback Switch", "Left DAC" },
 	{ "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" },
 	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Left Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
-	{ "Left Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
 
 	/* Right Mixer Routes */
 	{ "Right Mixer", "DAC Playback Switch", "Right DAC" },
 	{ "Right Mixer", "DAC Reversed Playback Switch", "Left DAC" },
 	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Right Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
-	{ "Right Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
 
 	/* Left ADC Mixer Routes */
 	{ "Left ADC Mixer", "Mixer Capture Switch", "Left Mixer" },
 	{ "Left ADC Mixer", "Mixer Reversed Capture Switch", "Right Mixer" },
 	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Left ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
-	{ "Left ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
 
 	/* Right ADC Mixer Routes */
 	{ "Right ADC Mixer", "Mixer Capture Switch", "Right Mixer" },
 	{ "Right ADC Mixer", "Mixer Reversed Capture Switch", "Left Mixer" },
 	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Right ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
-	{ "Right ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
 
 	/* ADC Routes */
 	{ "Left ADC", NULL, "Left ADC Mixer" },
@@ -578,19 +564,87 @@ static int sun8i_codec_add_lineout(struct snd_soc_component *cmpnt)
 	return 0;
 }
 
+/* mic2 specific controls, widgets and routes */
+static const struct snd_kcontrol_new sun8i_codec_mic2_controls[] = {
+	/* Mixer pre-gain */
+	SOC_SINGLE_TLV("Mic2 Playback Volume",
+		       SUN8I_ADDA_MICIN_GCTRL, SUN8I_ADDA_MICIN_GCTRL_MIC2G,
+		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+
+	/* Microphone Amp boost gain */
+	SOC_SINGLE_TLV("Mic2 Boost Volume", SUN8I_ADDA_MIC2G_CTRL,
+		       SUN8I_ADDA_MIC2G_CTRL_MIC2BOOST, 0x7, 0,
+		       sun8i_codec_mic_gain_scale),
+};
+
+static const struct snd_soc_dapm_widget sun8i_codec_mic2_widgets[] = {
+	/* Microphone input */
+	SND_SOC_DAPM_INPUT("MIC2"),
+
+	/* Mic input path */
+	SND_SOC_DAPM_PGA("Mic2 Amplifier", SUN8I_ADDA_MIC2G_CTRL,
+			 SUN8I_ADDA_MIC2G_CTRL_MIC2AMPEN, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_route sun8i_codec_mic2_routes[] = {
+	{ "Mic2 Amplifier", NULL, "MIC2"},
+
+	{ "Left Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
+
+	{ "Right Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
+
+	{ "Left ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
+
+	{ "Right ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
+};
+
+static int sun8i_codec_add_mic2(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_add_component_controls(cmpnt,
+					     sun8i_codec_mic2_controls,
+					     ARRAY_SIZE(sun8i_codec_mic2_controls));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 controls: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mic2_widgets,
+					ARRAY_SIZE(sun8i_codec_mic2_widgets));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 DAPM widgets: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_add_routes(dapm, sun8i_codec_mic2_routes,
+				      ARRAY_SIZE(sun8i_codec_mic2_routes));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 DAPM routes: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
 struct sun8i_codec_analog_quirks {
 	bool has_headphone;
 	bool has_hmic;
 	bool has_lineout;
+	bool has_mic2;
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
+	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
 	.has_lineout	= true,
+	.has_mic2	= true,
 };
 
 static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
@@ -626,6 +680,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_mic2) {
+		ret = sun8i_codec_add_mic2(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	return 0;
 }
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* Applied "ASoC: sun8i-codec-analog: split out mic2" to the asoc tree
@ 2017-03-15 18:13       ` Mark Brown
  0 siblings, 0 replies; 82+ messages in thread
From: Mark Brown @ 2017-03-15 18:13 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Chen-Yu Tsai, Mark Brown, Vinod Koul, Rob Herring, Maxime Ripard

The patch

   ASoC: sun8i-codec-analog: split out mic2

has been applied to the asoc tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From 3f48947d56ff3e42e2e490714025e984af817f5d Mon Sep 17 00:00:00 2001
From: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
Date: Sun, 5 Mar 2017 21:36:58 +0800
Subject: [PATCH] ASoC: sun8i-codec-analog: split out mic2

Allwinner V3s features an analog codec without MIC2.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
Acked-by: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>
Signed-off-by: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 92 +++++++++++++++++++++++++++++-------
 1 file changed, 76 insertions(+), 16 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index 72331332b72e..b95ff045cd7f 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -259,17 +259,11 @@ static const struct snd_kcontrol_new sun8i_codec_common_controls[] = {
 	SOC_SINGLE_TLV("Mic1 Playback Volume", SUN8I_ADDA_MICIN_GCTRL,
 		       SUN8I_ADDA_MICIN_GCTRL_MIC1G,
 		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
-	SOC_SINGLE_TLV("Mic2 Playback Volume",
-		       SUN8I_ADDA_MICIN_GCTRL, SUN8I_ADDA_MICIN_GCTRL_MIC2G,
-		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
 
-	/* Microphone Amp boost gains */
+	/* Microphone Amp boost gain */
 	SOC_SINGLE_TLV("Mic1 Boost Volume", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 		       SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1BOOST, 0x7, 0,
 		       sun8i_codec_mic_gain_scale),
-	SOC_SINGLE_TLV("Mic2 Boost Volume", SUN8I_ADDA_MIC2G_CTRL,
-		       SUN8I_ADDA_MIC2G_CTRL_MIC2BOOST, 0x7, 0,
-		       sun8i_codec_mic_gain_scale),
 
 	/* ADC */
 	SOC_SINGLE_TLV("ADC Gain Capture Volume", SUN8I_ADDA_ADC_AP_EN,
@@ -298,9 +292,8 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Line In */
 	SND_SOC_DAPM_INPUT("LINEIN"),
 
-	/* Microphone inputs */
+	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
-	SND_SOC_DAPM_INPUT("MIC2"),
 
 	/* Microphone Bias */
 	SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
@@ -310,8 +303,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Mic input path */
 	SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 			 SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
-	SND_SOC_DAPM_PGA("Mic2 Amplifier", SUN8I_ADDA_MIC2G_CTRL,
-			 SUN8I_ADDA_MIC2G_CTRL_MIC2AMPEN, 0, NULL, 0),
 
 	/* Mixers */
 	SND_SOC_DAPM_MIXER("Left Mixer", SUN8I_ADDA_DAC_PA_SRC,
@@ -335,35 +326,30 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = {
 	/* Microphone Routes */
 	{ "Mic1 Amplifier", NULL, "MIC1"},
-	{ "Mic2 Amplifier", NULL, "MIC2"},
 
 	/* Left Mixer Routes */
 	{ "Left Mixer", "DAC Playback Switch", "Left DAC" },
 	{ "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" },
 	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Left Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
-	{ "Left Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
 
 	/* Right Mixer Routes */
 	{ "Right Mixer", "DAC Playback Switch", "Right DAC" },
 	{ "Right Mixer", "DAC Reversed Playback Switch", "Left DAC" },
 	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Right Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
-	{ "Right Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
 
 	/* Left ADC Mixer Routes */
 	{ "Left ADC Mixer", "Mixer Capture Switch", "Left Mixer" },
 	{ "Left ADC Mixer", "Mixer Reversed Capture Switch", "Right Mixer" },
 	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Left ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
-	{ "Left ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
 
 	/* Right ADC Mixer Routes */
 	{ "Right ADC Mixer", "Mixer Capture Switch", "Right Mixer" },
 	{ "Right ADC Mixer", "Mixer Reversed Capture Switch", "Left Mixer" },
 	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Right ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
-	{ "Right ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
 
 	/* ADC Routes */
 	{ "Left ADC", NULL, "Left ADC Mixer" },
@@ -578,19 +564,87 @@ static int sun8i_codec_add_lineout(struct snd_soc_component *cmpnt)
 	return 0;
 }
 
+/* mic2 specific controls, widgets and routes */
+static const struct snd_kcontrol_new sun8i_codec_mic2_controls[] = {
+	/* Mixer pre-gain */
+	SOC_SINGLE_TLV("Mic2 Playback Volume",
+		       SUN8I_ADDA_MICIN_GCTRL, SUN8I_ADDA_MICIN_GCTRL_MIC2G,
+		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+
+	/* Microphone Amp boost gain */
+	SOC_SINGLE_TLV("Mic2 Boost Volume", SUN8I_ADDA_MIC2G_CTRL,
+		       SUN8I_ADDA_MIC2G_CTRL_MIC2BOOST, 0x7, 0,
+		       sun8i_codec_mic_gain_scale),
+};
+
+static const struct snd_soc_dapm_widget sun8i_codec_mic2_widgets[] = {
+	/* Microphone input */
+	SND_SOC_DAPM_INPUT("MIC2"),
+
+	/* Mic input path */
+	SND_SOC_DAPM_PGA("Mic2 Amplifier", SUN8I_ADDA_MIC2G_CTRL,
+			 SUN8I_ADDA_MIC2G_CTRL_MIC2AMPEN, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_route sun8i_codec_mic2_routes[] = {
+	{ "Mic2 Amplifier", NULL, "MIC2"},
+
+	{ "Left Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
+
+	{ "Right Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
+
+	{ "Left ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
+
+	{ "Right ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
+};
+
+static int sun8i_codec_add_mic2(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_add_component_controls(cmpnt,
+					     sun8i_codec_mic2_controls,
+					     ARRAY_SIZE(sun8i_codec_mic2_controls));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 controls: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mic2_widgets,
+					ARRAY_SIZE(sun8i_codec_mic2_widgets));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 DAPM widgets: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_add_routes(dapm, sun8i_codec_mic2_routes,
+				      ARRAY_SIZE(sun8i_codec_mic2_routes));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 DAPM routes: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
 struct sun8i_codec_analog_quirks {
 	bool has_headphone;
 	bool has_hmic;
 	bool has_lineout;
+	bool has_mic2;
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
+	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
 	.has_lineout	= true,
+	.has_mic2	= true,
 };
 
 static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
@@ -626,6 +680,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_mic2) {
+		ret = sun8i_codec_add_mic2(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	return 0;
 }
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 82+ messages in thread

* Applied "ASoC: sun8i-codec-analog: split out mic2" to the asoc tree
@ 2017-03-15 18:13       ` Mark Brown
  0 siblings, 0 replies; 82+ messages in thread
From: Mark Brown @ 2017-03-15 18:13 UTC (permalink / raw)
  To: linux-arm-kernel

The patch

   ASoC: sun8i-codec-analog: split out mic2

has been applied to the asoc tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From 3f48947d56ff3e42e2e490714025e984af817f5d Mon Sep 17 00:00:00 2001
From: Icenowy Zheng <icenowy@aosc.xyz>
Date: Sun, 5 Mar 2017 21:36:58 +0800
Subject: [PATCH] ASoC: sun8i-codec-analog: split out mic2

Allwinner V3s features an analog codec without MIC2.

Split out this part, in order to prepare for the V3s analog codec.

Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
Acked-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
 sound/soc/sunxi/sun8i-codec-analog.c | 92 +++++++++++++++++++++++++++++-------
 1 file changed, 76 insertions(+), 16 deletions(-)

diff --git a/sound/soc/sunxi/sun8i-codec-analog.c b/sound/soc/sunxi/sun8i-codec-analog.c
index 72331332b72e..b95ff045cd7f 100644
--- a/sound/soc/sunxi/sun8i-codec-analog.c
+++ b/sound/soc/sunxi/sun8i-codec-analog.c
@@ -259,17 +259,11 @@ static const struct snd_kcontrol_new sun8i_codec_common_controls[] = {
 	SOC_SINGLE_TLV("Mic1 Playback Volume", SUN8I_ADDA_MICIN_GCTRL,
 		       SUN8I_ADDA_MICIN_GCTRL_MIC1G,
 		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
-	SOC_SINGLE_TLV("Mic2 Playback Volume",
-		       SUN8I_ADDA_MICIN_GCTRL, SUN8I_ADDA_MICIN_GCTRL_MIC2G,
-		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
 
-	/* Microphone Amp boost gains */
+	/* Microphone Amp boost gain */
 	SOC_SINGLE_TLV("Mic1 Boost Volume", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 		       SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1BOOST, 0x7, 0,
 		       sun8i_codec_mic_gain_scale),
-	SOC_SINGLE_TLV("Mic2 Boost Volume", SUN8I_ADDA_MIC2G_CTRL,
-		       SUN8I_ADDA_MIC2G_CTRL_MIC2BOOST, 0x7, 0,
-		       sun8i_codec_mic_gain_scale),
 
 	/* ADC */
 	SOC_SINGLE_TLV("ADC Gain Capture Volume", SUN8I_ADDA_ADC_AP_EN,
@@ -298,9 +292,8 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Line In */
 	SND_SOC_DAPM_INPUT("LINEIN"),
 
-	/* Microphone inputs */
+	/* Microphone input */
 	SND_SOC_DAPM_INPUT("MIC1"),
-	SND_SOC_DAPM_INPUT("MIC2"),
 
 	/* Microphone Bias */
 	SND_SOC_DAPM_SUPPLY("MBIAS", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
@@ -310,8 +303,6 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 	/* Mic input path */
 	SND_SOC_DAPM_PGA("Mic1 Amplifier", SUN8I_ADDA_MIC1G_MICBIAS_CTRL,
 			 SUN8I_ADDA_MIC1G_MICBIAS_CTRL_MIC1AMPEN, 0, NULL, 0),
-	SND_SOC_DAPM_PGA("Mic2 Amplifier", SUN8I_ADDA_MIC2G_CTRL,
-			 SUN8I_ADDA_MIC2G_CTRL_MIC2AMPEN, 0, NULL, 0),
 
 	/* Mixers */
 	SND_SOC_DAPM_MIXER("Left Mixer", SUN8I_ADDA_DAC_PA_SRC,
@@ -335,35 +326,30 @@ static const struct snd_soc_dapm_widget sun8i_codec_common_widgets[] = {
 static const struct snd_soc_dapm_route sun8i_codec_common_routes[] = {
 	/* Microphone Routes */
 	{ "Mic1 Amplifier", NULL, "MIC1"},
-	{ "Mic2 Amplifier", NULL, "MIC2"},
 
 	/* Left Mixer Routes */
 	{ "Left Mixer", "DAC Playback Switch", "Left DAC" },
 	{ "Left Mixer", "DAC Reversed Playback Switch", "Right DAC" },
 	{ "Left Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Left Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
-	{ "Left Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
 
 	/* Right Mixer Routes */
 	{ "Right Mixer", "DAC Playback Switch", "Right DAC" },
 	{ "Right Mixer", "DAC Reversed Playback Switch", "Left DAC" },
 	{ "Right Mixer", "Line In Playback Switch", "LINEIN" },
 	{ "Right Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
-	{ "Right Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
 
 	/* Left ADC Mixer Routes */
 	{ "Left ADC Mixer", "Mixer Capture Switch", "Left Mixer" },
 	{ "Left ADC Mixer", "Mixer Reversed Capture Switch", "Right Mixer" },
 	{ "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Left ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
-	{ "Left ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
 
 	/* Right ADC Mixer Routes */
 	{ "Right ADC Mixer", "Mixer Capture Switch", "Right Mixer" },
 	{ "Right ADC Mixer", "Mixer Reversed Capture Switch", "Left Mixer" },
 	{ "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
 	{ "Right ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
-	{ "Right ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
 
 	/* ADC Routes */
 	{ "Left ADC", NULL, "Left ADC Mixer" },
@@ -578,19 +564,87 @@ static int sun8i_codec_add_lineout(struct snd_soc_component *cmpnt)
 	return 0;
 }
 
+/* mic2 specific controls, widgets and routes */
+static const struct snd_kcontrol_new sun8i_codec_mic2_controls[] = {
+	/* Mixer pre-gain */
+	SOC_SINGLE_TLV("Mic2 Playback Volume",
+		       SUN8I_ADDA_MICIN_GCTRL, SUN8I_ADDA_MICIN_GCTRL_MIC2G,
+		       0x7, 0, sun8i_codec_out_mixer_pregain_scale),
+
+	/* Microphone Amp boost gain */
+	SOC_SINGLE_TLV("Mic2 Boost Volume", SUN8I_ADDA_MIC2G_CTRL,
+		       SUN8I_ADDA_MIC2G_CTRL_MIC2BOOST, 0x7, 0,
+		       sun8i_codec_mic_gain_scale),
+};
+
+static const struct snd_soc_dapm_widget sun8i_codec_mic2_widgets[] = {
+	/* Microphone input */
+	SND_SOC_DAPM_INPUT("MIC2"),
+
+	/* Mic input path */
+	SND_SOC_DAPM_PGA("Mic2 Amplifier", SUN8I_ADDA_MIC2G_CTRL,
+			 SUN8I_ADDA_MIC2G_CTRL_MIC2AMPEN, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_route sun8i_codec_mic2_routes[] = {
+	{ "Mic2 Amplifier", NULL, "MIC2"},
+
+	{ "Left Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
+
+	{ "Right Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
+
+	{ "Left ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
+
+	{ "Right ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
+};
+
+static int sun8i_codec_add_mic2(struct snd_soc_component *cmpnt)
+{
+	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cmpnt);
+	struct device *dev = cmpnt->dev;
+	int ret;
+
+	ret = snd_soc_add_component_controls(cmpnt,
+					     sun8i_codec_mic2_controls,
+					     ARRAY_SIZE(sun8i_codec_mic2_controls));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 controls: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_new_controls(dapm, sun8i_codec_mic2_widgets,
+					ARRAY_SIZE(sun8i_codec_mic2_widgets));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 DAPM widgets: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_add_routes(dapm, sun8i_codec_mic2_routes,
+				      ARRAY_SIZE(sun8i_codec_mic2_routes));
+	if (ret) {
+		dev_err(dev, "Failed to add MIC2 DAPM routes: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
 struct sun8i_codec_analog_quirks {
 	bool has_headphone;
 	bool has_hmic;
 	bool has_lineout;
+	bool has_mic2;
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_a23_quirks = {
 	.has_headphone	= true,
 	.has_hmic	= true,
+	.has_mic2	= true,
 };
 
 static const struct sun8i_codec_analog_quirks sun8i_h3_quirks = {
 	.has_lineout	= true,
+	.has_mic2	= true,
 };
 
 static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
@@ -626,6 +680,12 @@ static int sun8i_codec_analog_cmpnt_probe(struct snd_soc_component *cmpnt)
 			return ret;
 	}
 
+	if (quirks->has_mic2) {
+		ret = sun8i_codec_add_mic2(cmpnt);
+		if (ret)
+			return ret;
+	}
+
 	return 0;
 }
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 82+ messages in thread

end of thread, other threads:[~2017-03-15 18:13 UTC | newest]

Thread overview: 82+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-05 13:36 [PATCH v2 00/12] Add support for the audio codec on Allwinner V3s Icenowy Zheng
2017-03-05 13:36 ` Icenowy Zheng
     [not found] ` <20170305133709.6288-1-icenowy-ymACFijhrKM@public.gmane.org>
2017-03-05 13:36   ` [PATCH v2 01/12] ASoC: sun8i-codec-analog: split out mic2 Icenowy Zheng
2017-03-05 13:36     ` Icenowy Zheng
2017-03-06  3:43     ` [linux-sunxi] " Chen-Yu Tsai
2017-03-06  3:43       ` Chen-Yu Tsai
2017-03-06  3:43       ` Chen-Yu Tsai
2017-03-15 18:13     ` Applied "ASoC: sun8i-codec-analog: split out mic2" to the asoc tree Mark Brown
2017-03-15 18:13       ` Mark Brown
2017-03-15 18:13       ` Mark Brown
2017-03-05 13:36   ` [PATCH v2 02/12] ASoC: sun8i-codec-analog: split out line in Icenowy Zheng
2017-03-05 13:36     ` Icenowy Zheng
2017-03-06  3:45     ` [linux-sunxi] " Chen-Yu Tsai
2017-03-06  3:45       ` Chen-Yu Tsai
2017-03-06  3:45       ` Chen-Yu Tsai
2017-03-15 18:13     ` Applied "ASoC: sun8i-codec-analog: split out line in" to the asoc tree Mark Brown
2017-03-15 18:13       ` Mark Brown
2017-03-15 18:13       ` Mark Brown
2017-03-05 13:37   ` [PATCH v2 03/12] ASoC: sun8i-codec-analog: split out mbias Icenowy Zheng
2017-03-05 13:37     ` Icenowy Zheng
     [not found]     ` <20170305133709.6288-4-icenowy-ymACFijhrKM@public.gmane.org>
2017-03-05 13:49       ` Icenowy Zheng
2017-03-05 13:49         ` Icenowy Zheng
2017-03-06  3:46         ` [linux-sunxi] " Chen-Yu Tsai
2017-03-06  3:46           ` Chen-Yu Tsai
2017-03-06  3:46           ` Chen-Yu Tsai
2017-03-07  0:15     ` [alsa-devel] " kbuild test robot
2017-03-07  0:15       ` kbuild test robot
2017-03-07  0:15       ` kbuild test robot
2017-03-05 13:37   ` [PATCH v2 04/12] ASoC: sun8i-codec-analog: add support for V3s SoC Icenowy Zheng
2017-03-05 13:37     ` Icenowy Zheng
2017-03-06  3:53     ` [linux-sunxi] " Chen-Yu Tsai
2017-03-06  3:53       ` Chen-Yu Tsai
2017-03-06  3:53       ` Chen-Yu Tsai
2017-03-05 13:37   ` [PATCH v2 05/12] ASoC: sun4i-codec: Add support for V3s codec Icenowy Zheng
2017-03-05 13:37     ` Icenowy Zheng
2017-03-06  4:05     ` [linux-sunxi] " Chen-Yu Tsai
2017-03-06  4:05       ` Chen-Yu Tsai
2017-03-06  4:05       ` Chen-Yu Tsai
2017-03-06  4:15       ` [linux-sunxi] " Chen-Yu Tsai
2017-03-06  4:15         ` Chen-Yu Tsai
2017-03-06  4:15         ` Chen-Yu Tsai
2017-03-05 13:37   ` [PATCH v2 06/12] dmaengine: sun6i: make gate bit in sun8i's DMA engines a common quirk Icenowy Zheng
2017-03-05 13:37     ` Icenowy Zheng
2017-03-06  3:50     ` Chen-Yu Tsai
2017-03-06  3:50       ` Chen-Yu Tsai
2017-03-06  3:50       ` Chen-Yu Tsai
2017-03-14  4:10     ` Vinod Koul
2017-03-14  4:10       ` Vinod Koul
2017-03-14  4:10       ` Vinod Koul
2017-03-05 13:37   ` [PATCH v2 07/12] dmaengine: sun6i: support V3s SoC variant Icenowy Zheng
2017-03-05 13:37     ` Icenowy Zheng
2017-03-06  3:58     ` [linux-sunxi] " Chen-Yu Tsai
2017-03-06  3:58       ` Chen-Yu Tsai
2017-03-06  3:58       ` Chen-Yu Tsai
2017-03-05 13:37   ` [PATCH v2 08/12] ARM: dts: sun8i: restore the inclusion of ccu headers in V3s DTSI Icenowy Zheng
2017-03-05 13:37     ` Icenowy Zheng
2017-03-06  4:12     ` [linux-sunxi] " Chen-Yu Tsai
2017-03-06  4:12       ` Chen-Yu Tsai
2017-03-06  4:12       ` Chen-Yu Tsai
2017-03-05 13:37   ` [PATCH v2 09/12] ARM: dts: sun8i: add DMA engine " Icenowy Zheng
2017-03-05 13:37     ` Icenowy Zheng
2017-03-06  4:13     ` [linux-sunxi] " Chen-Yu Tsai
2017-03-06  4:13       ` Chen-Yu Tsai
2017-03-06  4:13       ` Chen-Yu Tsai
2017-03-05 13:37   ` [PATCH v2 10/12] ARM: dts: sun8i: add audio codec support into " Icenowy Zheng
2017-03-05 13:37     ` Icenowy Zheng
2017-03-06  4:17     ` Chen-Yu Tsai
2017-03-06  4:17       ` Chen-Yu Tsai
2017-03-06  4:17       ` Chen-Yu Tsai
2017-03-05 13:37   ` [PATCH v2 11/12] ARM: dts: sun8i: add pinmux for V3s mmc1 Icenowy Zheng
2017-03-05 13:37     ` Icenowy Zheng
2017-03-06  4:22     ` [linux-sunxi] " Chen-Yu Tsai
2017-03-06  4:22       ` Chen-Yu Tsai
2017-03-06  4:22       ` Chen-Yu Tsai
2017-03-05 13:37   ` [PATCH v2 12/12] ARM: dts: sun8i: add device tree for Lichee Pi Zero with Dock Icenowy Zheng
2017-03-05 13:37     ` Icenowy Zheng
2017-03-06  4:28     ` [linux-sunxi] " Chen-Yu Tsai
2017-03-06  4:28       ` Chen-Yu Tsai
2017-03-06  4:28       ` Chen-Yu Tsai
2017-03-07  8:57 ` [PATCH v2 00/12] Add support for the audio codec on Allwinner V3s Vinod Koul
2017-03-07  8:57   ` Vinod Koul
2017-03-07  8:57   ` Vinod Koul

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.