* [PATCH v2 1/5] ASoC: adau17x1: Fix incorrect BCLK ratio definitions
2016-02-16 12:56 [PATCH v2 0/5] Minor fixes and DT support Andreas Irestål
@ 2016-02-16 12:56 ` Andreas Irestål
2016-02-16 12:56 ` [PATCH v2 2/5] ASoC: adau17x1: Correct typos in file headers Andreas Irestål
` (3 subsequent siblings)
4 siblings, 0 replies; 11+ messages in thread
From: Andreas Irestål @ 2016-02-16 12:56 UTC (permalink / raw)
To: Lars-Peter Clausen, Liam Girdwood, Mark Brown, Rob Herring,
Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala
Cc: devicetree, alsa-devel, linux-kernel, Andreas Irestål
Signed-off-by: Andreas Irestål <andire@axis.com>
---
sound/soc/codecs/adau17x1.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/sound/soc/codecs/adau17x1.h b/sound/soc/codecs/adau17x1.h
index e13583e..5ae87a0 100644
--- a/sound/soc/codecs/adau17x1.h
+++ b/sound/soc/codecs/adau17x1.h
@@ -103,9 +103,9 @@ bool adau17x1_has_dsp(struct adau *adau);
#define ADAU17X1_CLOCK_CONTROL_CORECLK_SRC_PLL BIT(3)
#define ADAU17X1_CLOCK_CONTROL_SYSCLK_EN BIT(0)
-#define ADAU17X1_SERIAL_PORT1_BCLK32 (0x0 << 5)
-#define ADAU17X1_SERIAL_PORT1_BCLK48 (0x1 << 5)
-#define ADAU17X1_SERIAL_PORT1_BCLK64 (0x2 << 5)
+#define ADAU17X1_SERIAL_PORT1_BCLK64 (0x0 << 5)
+#define ADAU17X1_SERIAL_PORT1_BCLK32 (0x1 << 5)
+#define ADAU17X1_SERIAL_PORT1_BCLK48 (0x2 << 5)
#define ADAU17X1_SERIAL_PORT1_BCLK128 (0x3 << 5)
#define ADAU17X1_SERIAL_PORT1_BCLK256 (0x4 << 5)
#define ADAU17X1_SERIAL_PORT1_BCLK_MASK (0x7 << 5)
--
2.1.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 2/5] ASoC: adau17x1: Correct typos in file headers
2016-02-16 12:56 [PATCH v2 0/5] Minor fixes and DT support Andreas Irestål
2016-02-16 12:56 ` [PATCH v2 1/5] ASoC: adau17x1: Fix incorrect BCLK ratio definitions Andreas Irestål
@ 2016-02-16 12:56 ` Andreas Irestål
2016-02-16 12:56 ` [PATCH v2 3/5] ASoC: adau17x1: Add adau17x1 bindings document Andreas Irestål
` (2 subsequent siblings)
4 siblings, 0 replies; 11+ messages in thread
From: Andreas Irestål @ 2016-02-16 12:56 UTC (permalink / raw)
To: Lars-Peter Clausen, Liam Girdwood, Mark Brown, Rob Herring,
Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala
Cc: devicetree, alsa-devel, linux-kernel, Andreas Irestål
Signed-off-by: Andreas Irestål <andire@axis.com>
---
include/linux/platform_data/adau17x1.h | 2 +-
sound/soc/codecs/adau1761-i2c.c | 2 +-
sound/soc/codecs/adau1761-spi.c | 2 +-
sound/soc/codecs/adau1761.c | 2 +-
sound/soc/codecs/adau1781.c | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/include/linux/platform_data/adau17x1.h b/include/linux/platform_data/adau17x1.h
index a81766c..9db1b90 100644
--- a/include/linux/platform_data/adau17x1.h
+++ b/include/linux/platform_data/adau17x1.h
@@ -1,5 +1,5 @@
/*
- * Driver for ADAU1761/ADAU1461/ADAU1761/ADAU1961/ADAU1781/ADAU1781 codecs
+ * Driver for ADAU1361/ADAU1461/ADAU1761/ADAU1961/ADAU1381/ADAU1781 codecs
*
* Copyright 2011-2014 Analog Devices Inc.
* Author: Lars-Peter Clausen <lars@metafoo.de>
diff --git a/sound/soc/codecs/adau1761-i2c.c b/sound/soc/codecs/adau1761-i2c.c
index 348ccb1..a1b1267 100644
--- a/sound/soc/codecs/adau1761-i2c.c
+++ b/sound/soc/codecs/adau1761-i2c.c
@@ -1,5 +1,5 @@
/*
- * Driver for ADAU1761/ADAU1461/ADAU1761/ADAU1961 codec
+ * Driver for ADAU1361/ADAU1461/ADAU1761/ADAU1961 codec
*
* Copyright 2014 Analog Devices Inc.
* Author: Lars-Peter Clausen <lars@metafoo.de>
diff --git a/sound/soc/codecs/adau1761-spi.c b/sound/soc/codecs/adau1761-spi.c
index 8bc1fbd..1883349 100644
--- a/sound/soc/codecs/adau1761-spi.c
+++ b/sound/soc/codecs/adau1761-spi.c
@@ -1,5 +1,5 @@
/*
- * Driver for ADAU1761/ADAU1461/ADAU1761/ADAU1961 codec
+ * Driver for ADAU1361/ADAU1461/ADAU1761/ADAU1961 codec
*
* Copyright 2014 Analog Devices Inc.
* Author: Lars-Peter Clausen <lars@metafoo.de>
diff --git a/sound/soc/codecs/adau1761.c b/sound/soc/codecs/adau1761.c
index 2f12477..16fed36 100644
--- a/sound/soc/codecs/adau1761.c
+++ b/sound/soc/codecs/adau1761.c
@@ -1,5 +1,5 @@
/*
- * Driver for ADAU1761/ADAU1461/ADAU1761/ADAU1961 codec
+ * Driver for ADAU1361/ADAU1461/ADAU1761/ADAU1961 codec
*
* Copyright 2011-2013 Analog Devices Inc.
* Author: Lars-Peter Clausen <lars@metafoo.de>
diff --git a/sound/soc/codecs/adau1781.c b/sound/soc/codecs/adau1781.c
index fde9068..bc1bb56 100644
--- a/sound/soc/codecs/adau1781.c
+++ b/sound/soc/codecs/adau1781.c
@@ -1,5 +1,5 @@
/*
- * Driver for ADAU1781/ADAU1781 codec
+ * Driver for ADAU1381/ADAU1781 codec
*
* Copyright 2011-2013 Analog Devices Inc.
* Author: Lars-Peter Clausen <lars@metafoo.de>
--
2.1.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 3/5] ASoC: adau17x1: Add adau17x1 bindings document
2016-02-16 12:56 [PATCH v2 0/5] Minor fixes and DT support Andreas Irestål
2016-02-16 12:56 ` [PATCH v2 1/5] ASoC: adau17x1: Fix incorrect BCLK ratio definitions Andreas Irestål
2016-02-16 12:56 ` [PATCH v2 2/5] ASoC: adau17x1: Correct typos in file headers Andreas Irestål
@ 2016-02-16 12:56 ` Andreas Irestål
2016-02-18 14:37 ` Rob Herring
2016-02-16 12:56 ` [PATCH v2 4/5] ASoC: adau17x1: Add basic DT support for adau17x1 Andreas Irestål
2016-02-16 12:56 ` [PATCH v2 5/5] ASoC: adau17x1: Support platform data via DT Andreas Irestål
4 siblings, 1 reply; 11+ messages in thread
From: Andreas Irestål @ 2016-02-16 12:56 UTC (permalink / raw)
To: Lars-Peter Clausen, Liam Girdwood, Mark Brown, Rob Herring,
Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala
Cc: devicetree, alsa-devel, linux-kernel, Andreas Irestål
Signed-off-by: Andreas Irestål <andire@axis.com>
---
.../devicetree/bindings/sound/adi,adau17x1.txt | 24 ++++++++++++++++++++++
1 file changed, 24 insertions(+)
create mode 100644 Documentation/devicetree/bindings/sound/adi,adau17x1.txt
diff --git a/Documentation/devicetree/bindings/sound/adi,adau17x1.txt b/Documentation/devicetree/bindings/sound/adi,adau17x1.txt
new file mode 100644
index 0000000..8dbce0e
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/adi,adau17x1.txt
@@ -0,0 +1,24 @@
+Analog Devices ADAU1361/ADAU1461/ADAU1761/ADAU1961/ADAU1381/ADAU1781
+
+Required properties:
+
+ - compatible: Should contain one of the following:
+ "adi,adau1361"
+ "adi,adau1461"
+ "adi,adau1761"
+ "adi,adau1961"
+ "adi,adau1381"
+ "adi,adau1781"
+
+ - reg: The i2c address. Value depends on the state of ADDR0
+ and ADDR1, as wired in hardware.
+
+Examples:
+#include <dt-bindings/sound/adau17x1.h>
+
+ i2c_bus {
+ adau1361@38 {
+ compatible = "adi,adau1761";
+ reg = <0x38>;
+ };
+ };
--
2.1.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v2 3/5] ASoC: adau17x1: Add adau17x1 bindings document
2016-02-16 12:56 ` [PATCH v2 3/5] ASoC: adau17x1: Add adau17x1 bindings document Andreas Irestål
@ 2016-02-18 14:37 ` Rob Herring
0 siblings, 0 replies; 11+ messages in thread
From: Rob Herring @ 2016-02-18 14:37 UTC (permalink / raw)
To: Andreas Irestål
Cc: Lars-Peter Clausen, Liam Girdwood, Mark Brown, Pawel Moll,
Mark Rutland, Ian Campbell, Kumar Gala, devicetree, alsa-devel,
linux-kernel, Andreas Irestål
On Tue, Feb 16, 2016 at 01:56:43PM +0100, Andreas Irestål wrote:
> Signed-off-by: Andreas Irestål <andire@axis.com>
> ---
> .../devicetree/bindings/sound/adi,adau17x1.txt | 24 ++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/sound/adi,adau17x1.txt
>
> diff --git a/Documentation/devicetree/bindings/sound/adi,adau17x1.txt b/Documentation/devicetree/bindings/sound/adi,adau17x1.txt
> new file mode 100644
> index 0000000..8dbce0e
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/sound/adi,adau17x1.txt
> @@ -0,0 +1,24 @@
> +Analog Devices ADAU1361/ADAU1461/ADAU1761/ADAU1961/ADAU1381/ADAU1781
> +
> +Required properties:
> +
> + - compatible: Should contain one of the following:
> + "adi,adau1361"
> + "adi,adau1461"
> + "adi,adau1761"
> + "adi,adau1961"
> + "adi,adau1381"
> + "adi,adau1781"
> +
> + - reg: The i2c address. Value depends on the state of ADDR0
> + and ADDR1, as wired in hardware.
> +
> +Examples:
> +#include <dt-bindings/sound/adau17x1.h>
> +
> + i2c_bus {
> + adau1361@38 {
codec@38
Otherwise:
Acked-by: Rob Herring <robh@kernel.org>
> + compatible = "adi,adau1761";
> + reg = <0x38>;
> + };
> + };
> --
> 2.1.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 4/5] ASoC: adau17x1: Add basic DT support for adau17x1
2016-02-16 12:56 [PATCH v2 0/5] Minor fixes and DT support Andreas Irestål
` (2 preceding siblings ...)
2016-02-16 12:56 ` [PATCH v2 3/5] ASoC: adau17x1: Add adau17x1 bindings document Andreas Irestål
@ 2016-02-16 12:56 ` Andreas Irestål
2016-02-16 12:56 ` [PATCH v2 5/5] ASoC: adau17x1: Support platform data via DT Andreas Irestål
4 siblings, 0 replies; 11+ messages in thread
From: Andreas Irestål @ 2016-02-16 12:56 UTC (permalink / raw)
To: Lars-Peter Clausen, Liam Girdwood, Mark Brown, Rob Herring,
Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala
Cc: devicetree, alsa-devel, linux-kernel, Andreas Irestål
Signed-off-by: Andreas Irestål <andire@axis.com>
---
sound/soc/codecs/adau1761-i2c.c | 12 ++++++++++++
sound/soc/codecs/adau1761-spi.c | 12 ++++++++++++
sound/soc/codecs/adau1781-i2c.c | 10 ++++++++++
sound/soc/codecs/adau1781-spi.c | 10 ++++++++++
4 files changed, 44 insertions(+)
diff --git a/sound/soc/codecs/adau1761-i2c.c b/sound/soc/codecs/adau1761-i2c.c
index a1b1267..8de010f 100644
--- a/sound/soc/codecs/adau1761-i2c.c
+++ b/sound/soc/codecs/adau1761-i2c.c
@@ -44,9 +44,21 @@ static const struct i2c_device_id adau1761_i2c_ids[] = {
};
MODULE_DEVICE_TABLE(i2c, adau1761_i2c_ids);
+#if defined(CONFIG_OF)
+static const struct of_device_id adau1761_i2c_dt_ids[] = {
+ { .compatible = "adi,adau1361", },
+ { .compatible = "adi,adau1461", },
+ { .compatible = "adi,adau1761", },
+ { .compatible = "adi,adau1961", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, adau1761_i2c_dt_ids);
+#endif
+
static struct i2c_driver adau1761_i2c_driver = {
.driver = {
.name = "adau1761",
+ .of_match_table = of_match_ptr(adau1761_i2c_dt_ids),
},
.probe = adau1761_i2c_probe,
.remove = adau1761_i2c_remove,
diff --git a/sound/soc/codecs/adau1761-spi.c b/sound/soc/codecs/adau1761-spi.c
index 1883349..d917124 100644
--- a/sound/soc/codecs/adau1761-spi.c
+++ b/sound/soc/codecs/adau1761-spi.c
@@ -61,9 +61,21 @@ static const struct spi_device_id adau1761_spi_id[] = {
};
MODULE_DEVICE_TABLE(spi, adau1761_spi_id);
+#if defined(CONFIG_OF)
+static const struct of_device_id adau1761_spi_dt_ids[] = {
+ { .compatible = "adi,adau1361", },
+ { .compatible = "adi,adau1461", },
+ { .compatible = "adi,adau1761", },
+ { .compatible = "adi,adau1961", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, adau1761_spi_dt_ids);
+#endif
+
static struct spi_driver adau1761_spi_driver = {
.driver = {
.name = "adau1761",
+ .of_match_table = of_match_ptr(adau1761_spi_dt_ids),
},
.probe = adau1761_spi_probe,
.remove = adau1761_spi_remove,
diff --git a/sound/soc/codecs/adau1781-i2c.c b/sound/soc/codecs/adau1781-i2c.c
index 0e32bba..06cbca8 100644
--- a/sound/soc/codecs/adau1781-i2c.c
+++ b/sound/soc/codecs/adau1781-i2c.c
@@ -42,9 +42,19 @@ static const struct i2c_device_id adau1781_i2c_ids[] = {
};
MODULE_DEVICE_TABLE(i2c, adau1781_i2c_ids);
+#if defined(CONFIG_OF)
+static const struct of_device_id adau1781_i2c_dt_ids[] = {
+ { .compatible = "adi,adau1381", },
+ { .compatible = "adi,adau1781", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, adau1781_i2c_dt_ids);
+#endif
+
static struct i2c_driver adau1781_i2c_driver = {
.driver = {
.name = "adau1781",
+ .of_match_table = of_match_ptr(adau1781_i2c_dt_ids),
},
.probe = adau1781_i2c_probe,
.remove = adau1781_i2c_remove,
diff --git a/sound/soc/codecs/adau1781-spi.c b/sound/soc/codecs/adau1781-spi.c
index 33a73ff..3d965a0 100644
--- a/sound/soc/codecs/adau1781-spi.c
+++ b/sound/soc/codecs/adau1781-spi.c
@@ -59,9 +59,19 @@ static const struct spi_device_id adau1781_spi_id[] = {
};
MODULE_DEVICE_TABLE(spi, adau1781_spi_id);
+#if defined(CONFIG_OF)
+static const struct of_device_id adau1781_spi_dt_ids[] = {
+ { .compatible = "adi,adau1381", },
+ { .compatible = "adi,adau1781", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, adau1781_spi_dt_ids);
+#endif
+
static struct spi_driver adau1781_spi_driver = {
.driver = {
.name = "adau1781",
+ .of_match_table = of_match_ptr(adau1781_spi_dt_ids),
},
.probe = adau1781_spi_probe,
.remove = adau1781_spi_remove,
--
2.1.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 5/5] ASoC: adau17x1: Support platform data via DT
2016-02-16 12:56 [PATCH v2 0/5] Minor fixes and DT support Andreas Irestål
` (3 preceding siblings ...)
2016-02-16 12:56 ` [PATCH v2 4/5] ASoC: adau17x1: Add basic DT support for adau17x1 Andreas Irestål
@ 2016-02-16 12:56 ` Andreas Irestål
[not found] ` <1455627405-18155-6-git-send-email-andire-VrBV9hrLPhE@public.gmane.org>
4 siblings, 1 reply; 11+ messages in thread
From: Andreas Irestål @ 2016-02-16 12:56 UTC (permalink / raw)
To: Lars-Peter Clausen, Liam Girdwood, Mark Brown, Rob Herring,
Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala
Cc: devicetree, alsa-devel, linux-kernel, Andreas Irestål
Currently, it is only possible to configure HW-specific options to the
adau17x1 codecs by providing a platform data struct. With this patch,
it is possible to provide the same data via DT instead.
Signed-off-by: Andreas Irestål <andire@axis.com>
---
.../devicetree/bindings/sound/adi,adau17x1.txt | 31 +++++
include/dt-bindings/sound/adau17x1.h | 14 +++
sound/soc/codecs/adau1761.c | 127 +++++++++++++++++++++
sound/soc/codecs/adau1781.c | 48 ++++++++
4 files changed, 220 insertions(+)
create mode 100644 include/dt-bindings/sound/adau17x1.h
diff --git a/Documentation/devicetree/bindings/sound/adi,adau17x1.txt b/Documentation/devicetree/bindings/sound/adi,adau17x1.txt
index 8dbce0e..6050602 100644
--- a/Documentation/devicetree/bindings/sound/adi,adau17x1.txt
+++ b/Documentation/devicetree/bindings/sound/adi,adau17x1.txt
@@ -13,6 +13,32 @@ Required properties:
- reg: The i2c address. Value depends on the state of ADDR0
and ADDR1, as wired in hardware.
+Optional properties:
+
+ - adi,input-differential bool to set if the input is differential
+ - adi,digital-microphone bool to set if there is a digital microphone
+ connected to digmic/jackdet pin.
+ - adi,micbias-vg Microphone bias voltage
+ MICBIAS_0_90_AVDD - 0.9 * AVDD
+ MICBIAS_0_65_AVDD - 0.65 * AVDD
+
+Optional properties (ADAU1361/ADAU1461/ADAU1761/ADAU1961 only)
+
+ - adi,jack-detection If present, configures codec to use the digmic/jackdet
+ pin for jack detection. must provide one of
+ JACKDETECT_ACTIVE_LO or JACKDETECT_ACTIVE_HI followed
+ by debounce time in ms, which must be 5, 10, 20, or 40.
+
+ - adi,lineout-mode Set output mode of the lineout pins.
+ - adi,headphone-mode Set output mode of the headphone pins.
+
+The output mode must be one of:
+ OUTPUT_MODE_HEADPHONE - Headphone output
+ OUTPUT_MODE_HEADPHONE_CAPLESS - Capless headphone output
+ OUTPUT_MODE_LINE - Line output
+
+
+
Examples:
#include <dt-bindings/sound/adau17x1.h>
@@ -20,5 +46,10 @@ Examples:
adau1361@38 {
compatible = "adi,adau1761";
reg = <0x38>;
+ input-differential;
+ jack-detection = <JACKDETECT_ACTIVE_LO 40>;
+ lineout-mode = <OUTPUT_MODE_LINE>;
+ headphone-mode = <OUTPUT_MODE_HEADPHONE>;
+ micbias-vg = <MICBIAS_0_90_AVDD>;
};
};
diff --git a/include/dt-bindings/sound/adau17x1.h b/include/dt-bindings/sound/adau17x1.h
new file mode 100644
index 0000000..3152019
--- /dev/null
+++ b/include/dt-bindings/sound/adau17x1.h
@@ -0,0 +1,14 @@
+#ifndef __DT_ADAU17X1_H
+#define __DT_ADAU17X1_H
+
+#define MICBIAS_0_90_AVDD 0
+#define MICBIAS_0_65_AVDD 1
+
+#define OUTPUT_MODE_HEADPHONE 0
+#define OUTPUT_MODE_HEADPHONE_CAPLESS 1
+#define OUTPUT_MODE_LINE 2
+
+#define JACKDETECT_ACTIVE_HI 0
+#define JACKDETECT_ACTIVE_LO 1
+
+#endif
diff --git a/sound/soc/codecs/adau1761.c b/sound/soc/codecs/adau1761.c
index 16fed36..caba102 100644
--- a/sound/soc/codecs/adau1761.c
+++ b/sound/soc/codecs/adau1761.c
@@ -18,6 +18,7 @@
#include <sound/soc.h>
#include <sound/tlv.h>
#include <linux/platform_data/adau17x1.h>
+#include <dt-bindings/sound/adau17x1.h>
#include "adau17x1.h"
#include "adau1761.h"
@@ -709,6 +710,122 @@ static int adau1761_codec_probe(struct snd_soc_codec *codec)
return 0;
}
+#ifdef CONFIG_OF
+static inline void adau1761_parse_of_outmode(struct device *dev,
+ uint32_t of_val,
+ enum adau1761_output_mode *mode)
+{
+ switch (of_val) {
+ case OUTPUT_MODE_HEADPHONE:
+ *mode = ADAU1761_OUTPUT_MODE_HEADPHONE;
+ break;
+ case OUTPUT_MODE_HEADPHONE_CAPLESS:
+ *mode = ADAU1761_OUTPUT_MODE_HEADPHONE_CAPLESS;
+ break;
+ case OUTPUT_MODE_LINE:
+ *mode = ADAU1761_OUTPUT_MODE_LINE;
+ break;
+ default:
+ dev_warn(dev, "Invalid output mode %d\n", of_val);
+ *mode = ADAU1761_OUTPUT_MODE_LINE;
+ break;
+ }
+}
+
+static void adau1761_pdata_from_of(struct device *dev,
+ struct adau1761_platform_data *pdata)
+{
+ struct device_node *np = dev->of_node;
+ uint32_t val;
+ uint32_t debounce_pars[2];
+
+ pdata->input_differential =
+ of_property_read_bool(np, "adi,input-differential");
+
+ if (of_get_property(np, "adi,jack-detection", NULL)) {
+ pdata->digmic_jackdetect_pin_mode =
+ ADAU1761_DIGMIC_JACKDET_PIN_MODE_JACKDETECT;
+ if (!of_property_read_u32_array(np, "adi,jack-detection",
+ debounce_pars, 2)) {
+ pdata->jackdetect_active_low =
+ debounce_pars[0] == JACKDETECT_ACTIVE_LO;
+ switch (debounce_pars[1]) {
+ case 5:
+ pdata->jackdetect_debounce_time =
+ ADAU1761_JACKDETECT_DEBOUNCE_5MS;
+ break;
+ case 10:
+ pdata->jackdetect_debounce_time =
+ ADAU1761_JACKDETECT_DEBOUNCE_10MS;
+ break;
+ case 20:
+ pdata->jackdetect_debounce_time =
+ ADAU1761_JACKDETECT_DEBOUNCE_20MS;
+ break;
+ case 40:
+ pdata->jackdetect_debounce_time =
+ ADAU1761_JACKDETECT_DEBOUNCE_40MS;
+ break;
+ default:
+ dev_warn(dev, "Invalid debounce_time %d\n",
+ debounce_pars[1]);
+ pdata->jackdetect_debounce_time =
+ ADAU1761_JACKDETECT_DEBOUNCE_40MS;
+ break;
+ }
+ } else if (!of_property_read_u32_array(np, "adi,jack-detection",
+ debounce_pars, 1)) {
+ dev_warn(dev, "Debounce time not provided\n");
+ pdata->jackdetect_active_low =
+ debounce_pars[0] == JACKDETECT_ACTIVE_LO;
+ } else {
+ dev_warn(dev, "No jack detection settings found\n");
+ pdata->jackdetect_active_low = 0;
+ pdata->jackdetect_debounce_time =
+ ADAU1761_JACKDETECT_DEBOUNCE_40MS;
+ }
+ } else if (of_property_read_bool(np, "adi,digital-microphone")) {
+ pdata->digmic_jackdetect_pin_mode =
+ ADAU1761_DIGMIC_JACKDET_PIN_MODE_DIGMIC;
+ } else {
+ pdata->digmic_jackdetect_pin_mode =
+ ADAU1761_DIGMIC_JACKDET_PIN_MODE_NONE;
+ }
+
+ if (!of_property_read_u32(np, "adi,headphone-mode", &val))
+ adau1761_parse_of_outmode(dev, val, &pdata->headphone_mode);
+ else
+ pdata->headphone_mode = ADAU1761_OUTPUT_MODE_LINE;
+
+ if (!of_property_read_u32(np, "adi,lineout-mode", &val))
+ adau1761_parse_of_outmode(dev, val, &pdata->lineout_mode);
+ else
+ pdata->lineout_mode = ADAU1761_OUTPUT_MODE_LINE;
+
+ if (!of_property_read_u32(np, "adi,micbias-vg", &val)) {
+ switch (val) {
+ case MICBIAS_0_65_AVDD:
+ pdata->micbias_voltage = ADAU17X1_MICBIAS_0_65_AVDD;
+ break;
+ case MICBIAS_0_90_AVDD:
+ pdata->micbias_voltage = ADAU17X1_MICBIAS_0_90_AVDD;
+ break;
+ default:
+ dev_warn(dev, "Invalid micbias voltage setting\n");
+ pdata->micbias_voltage = ADAU17X1_MICBIAS_0_90_AVDD;
+ break;
+ }
+ } else {
+ pdata->micbias_voltage = ADAU17X1_MICBIAS_0_90_AVDD;
+ }
+}
+#else
+static void adau1761_pdata_from_of(struct device *dev,
+ struct adau1761_platform_data *pdata)
+{
+}
+#endif
+
static const struct snd_soc_codec_driver adau1761_codec_driver = {
.probe = adau1761_codec_probe,
.resume = adau17x1_resume,
@@ -768,6 +885,8 @@ int adau1761_probe(struct device *dev, struct regmap *regmap,
enum adau17x1_type type, void (*switch_mode)(struct device *dev))
{
struct snd_soc_dai_driver *dai_drv;
+ struct adau1761_platform_data *of_pdata;
+ struct device_node *np = dev->of_node;
const char *firmware_name;
int ret;
@@ -779,6 +898,14 @@ int adau1761_probe(struct device *dev, struct regmap *regmap,
firmware_name = ADAU1761_FIRMWARE;
}
+ if (!dev->platform_data && np) {
+ of_pdata = devm_kzalloc(dev, sizeof(*of_pdata), GFP_KERNEL);
+ if (!of_pdata)
+ return -ENOMEM;
+ adau1761_pdata_from_of(dev, of_pdata);
+ dev->platform_data = of_pdata;
+ }
+
ret = adau17x1_probe(dev, regmap, type, switch_mode, firmware_name);
if (ret)
return ret;
diff --git a/sound/soc/codecs/adau1781.c b/sound/soc/codecs/adau1781.c
index bc1bb56..401220e 100644
--- a/sound/soc/codecs/adau1781.c
+++ b/sound/soc/codecs/adau1781.c
@@ -18,6 +18,7 @@
#include <sound/soc.h>
#include <sound/tlv.h>
#include <linux/platform_data/adau17x1.h>
+#include <dt-bindings/sound/adau17x1.h>
#include "adau17x1.h"
#include "adau1781.h"
@@ -426,6 +427,43 @@ static int adau1781_codec_probe(struct snd_soc_codec *codec)
return 0;
}
+#ifdef CONFIG_OF
+static void adau1781_pdata_from_of(struct device *dev,
+ struct adau1781_platform_data *pdata)
+{
+ struct device_node *np = dev->of_node;
+ uint32_t val;
+
+ val = of_property_read_bool(np, "adi,input-differential");
+ pdata->left_input_differential = val;
+ pdata->right_input_differential = val;
+
+ of_property_read_bool(np, "adi,digital-microphone");
+
+ if (!of_property_read_u32(np, "adi,micbias-vg", &val)) {
+ switch (val) {
+ case MICBIAS_0_65_AVDD:
+ pdata->micbias_voltage = ADAU17X1_MICBIAS_0_65_AVDD;
+ break;
+ case MICBIAS_0_90_AVDD:
+ pdata->micbias_voltage = ADAU17X1_MICBIAS_0_90_AVDD;
+ break;
+ default:
+ dev_warn(dev, "Invalid micbias voltage setting\n");
+ pdata->micbias_voltage = ADAU17X1_MICBIAS_0_90_AVDD;
+ break;
+ }
+ } else {
+ pdata->micbias_voltage = ADAU17X1_MICBIAS_0_90_AVDD;
+ }
+}
+#else
+static void adau1781_pdata_from_of(struct device *dev,
+ struct adau1781_platform_data *pdata)
+{
+}
+#endif
+
static const struct snd_soc_codec_driver adau1781_codec_driver = {
.probe = adau1781_codec_probe,
.resume = adau17x1_resume,
@@ -479,6 +517,8 @@ int adau1781_probe(struct device *dev, struct regmap *regmap,
enum adau17x1_type type, void (*switch_mode)(struct device *dev))
{
const char *firmware_name;
+ struct adau1781_platform_data *of_pdata;
+ struct device_node *np = dev->of_node;
int ret;
switch (type) {
@@ -492,6 +532,14 @@ int adau1781_probe(struct device *dev, struct regmap *regmap,
return -EINVAL;
}
+ if (!dev->platform_data && np) {
+ of_pdata = devm_kzalloc(dev, sizeof(*of_pdata), GFP_KERNEL);
+ if (!of_pdata)
+ return -ENOMEM;
+ adau1781_pdata_from_of(dev, of_pdata);
+ dev->platform_data = of_pdata;
+ }
+
ret = adau17x1_probe(dev, regmap, type, switch_mode, firmware_name);
if (ret)
return ret;
--
2.1.4
^ permalink raw reply related [flat|nested] 11+ messages in thread