On Tuesday 16 February 2016 13:56:45 Andreas Irestål wrote:
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
It would be nicer to avoid the need for the extra header file, those tend to cause more problems than they solve.
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
This could be an integer property, or possibly two (mutually exclusive) boolean properties.
+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.
I would use one integer property for debounce and one bool property for polarity.
+The output mode must be one of:
- OUTPUT_MODE_HEADPHONE - Headphone output
- OUTPUT_MODE_HEADPHONE_CAPLESS - Capless headphone output
- OUTPUT_MODE_LINE - Line output
And something along the same lines here. Or just document the three modes as numbers in the binding file.
+#ifdef CONFIG_OF +static void adau1781_pdata_from_of(struct device *dev,
struct adau1781_platform_data *pdata)
You can remove the #ifdef here...
- if (!dev->platform_data && np) {
if you change this to
if (IS_ENABLED(CONFIG_OF) && 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;
and here I'd try to avoid the dynamic allocation and just add the fields to the driver private structure. You can copy the information from the platform data in the 'else' path.
Arnd