summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2022-06-27 23:45:56 +0300
committerMark Brown <broonie@kernel.org>2022-06-27 23:45:56 +0300
commit7b0cd83c5ac6c7fa04636120430f651d0859ea06 (patch)
tree9aee5903859e2de2dbe9377b2b8a97a8c0308776
parentccb0bbe3e93efa1c794176200785737ba65b0131 (diff)
parent25ae1a04da0d32c22db0b018e5668129b91fa104 (diff)
downloadlinux-7b0cd83c5ac6c7fa04636120430f651d0859ea06.tar.xz
ASoC: sun50i-codec-analog: Internal bias support
Merge series from Samuel Holland <samuel@sholland.org>: This series adds support for enabling the codec's internal microphone bias, which is needed on at least some versions of the PinePhone. Changes in v2: - Move register update from component probe to device probe Arnaud Ferraris (2): ASoC: dt-bindings: sun50i-codec: Add binding for internal bias ASoC: sun50i-codec-analog: Add support for internal bias Samuel Holland (1): arm64: dts: allwinner: pinephone: Enable internal HMIC bias .../bindings/sound/allwinner,sun50i-a64-codec-analog.yaml | 5 +++++ .../arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.0.dts | 4 ++++ .../arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts | 4 ++++ sound/soc/sunxi/sun50i-codec-analog.c | 8 ++++++++ 4 files changed, 21 insertions(+) -- 2.35.1
-rw-r--r--Documentation/devicetree/bindings/sound/allwinner,sun50i-a64-codec-analog.yaml5
-rw-r--r--sound/soc/sunxi/sun50i-codec-analog.c8
2 files changed, 13 insertions, 0 deletions
diff --git a/Documentation/devicetree/bindings/sound/allwinner,sun50i-a64-codec-analog.yaml b/Documentation/devicetree/bindings/sound/allwinner,sun50i-a64-codec-analog.yaml
index 3b764415c9ab..66859eb8f79a 100644
--- a/Documentation/devicetree/bindings/sound/allwinner,sun50i-a64-codec-analog.yaml
+++ b/Documentation/devicetree/bindings/sound/allwinner,sun50i-a64-codec-analog.yaml
@@ -21,6 +21,11 @@ properties:
description:
Regulator for the headphone amplifier
+ allwinner,internal-bias-resistor:
+ description:
+ Enable the internal 2.2K bias resistor between HBIAS and MICDET pins
+ type: boolean
+
required:
- compatible
- reg
diff --git a/sound/soc/sunxi/sun50i-codec-analog.c b/sound/soc/sunxi/sun50i-codec-analog.c
index a41e25ad0aaf..e1e5e8de0130 100644
--- a/sound/soc/sunxi/sun50i-codec-analog.c
+++ b/sound/soc/sunxi/sun50i-codec-analog.c
@@ -117,6 +117,7 @@
#define SUN50I_ADDA_HS_MBIAS_CTRL_MMICBIASEN 7
#define SUN50I_ADDA_JACK_MIC_CTRL 0x1d
+#define SUN50I_ADDA_JACK_MIC_CTRL_INNERRESEN 6
#define SUN50I_ADDA_JACK_MIC_CTRL_HMICBIASEN 5
/* mixer controls */
@@ -507,6 +508,7 @@ static int sun50i_codec_analog_probe(struct platform_device *pdev)
{
struct regmap *regmap;
void __iomem *base;
+ bool enable;
base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(base)) {
@@ -520,6 +522,12 @@ static int sun50i_codec_analog_probe(struct platform_device *pdev)
return PTR_ERR(regmap);
}
+ enable = device_property_read_bool(&pdev->dev,
+ "allwinner,internal-bias-resistor");
+ regmap_update_bits(regmap, SUN50I_ADDA_JACK_MIC_CTRL,
+ BIT(SUN50I_ADDA_JACK_MIC_CTRL_INNERRESEN),
+ enable << SUN50I_ADDA_JACK_MIC_CTRL_INNERRESEN);
+
return devm_snd_soc_register_component(&pdev->dev,
&sun50i_codec_analog_cmpnt_drv,
NULL, 0);