Browse Source

mfd: arizona: Add DT options for max_channels_clocked and PDM speaker config

This patch adds DT settings for the max_channels_clocked, spk_fmt and
spk_mute pdata.

Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Richard Fitzgerald 9 years ago
parent
commit
f4c0526225
2 changed files with 48 additions and 0 deletions
  1. 18 0
      Documentation/devicetree/bindings/mfd/arizona.txt
  2. 30 0
      drivers/mfd/arizona-core.c

+ 18 - 0
Documentation/devicetree/bindings/mfd/arizona.txt

@@ -85,6 +85,24 @@ Optional properties:
     present, the number of values should be less than or equal to the
     present, the number of values should be less than or equal to the
     number of inputs, unspecified inputs will use the chip default.
     number of inputs, unspecified inputs will use the chip default.
 
 
+  - wlf,max-channels-clocked : The maximum number of channels to be clocked on
+    each AIF, useful for I2S systems with multiple data lines being mastered.
+    Specify one cell for each AIF to be configured, specify zero for AIFs that
+    should be handled normally.
+    If present, number of cells must be less than or equal to the number of
+    AIFs. If less than the number of AIFs, for cells that have not been
+    specified the corresponding AIFs will be treated as default setting.
+
+  - wlf,spk-fmt : PDM speaker data format, must contain 2 cells (OUT5 and OUT6).
+    See the datasheet for values.
+    The second cell is ignored for codecs that do not have OUT6 (wm5102, wm8997,
+      wm8998, wm1814)
+
+  - wlf,spk-mute : PDM speaker mute setting, must contain 2 cells (OUT5 and OUT6).
+    See the datasheet for values.
+    The second cell is ignored for codecs that do not have OUT6 (wm5102, wm8997,
+    wm8998, wm1814)
+
   - DCVDD-supply, MICVDD-supply : Power supplies, only need to be specified if
   - DCVDD-supply, MICVDD-supply : Power supplies, only need to be specified if
     they are being externally supplied. As covered in
     they are being externally supplied. As covered in
     Documentation/devicetree/bindings/regulator/regulator.txt
     Documentation/devicetree/bindings/regulator/regulator.txt

+ 30 - 0
drivers/mfd/arizona-core.c

@@ -828,6 +828,7 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
 	struct property *prop;
 	struct property *prop;
 	const __be32 *cur;
 	const __be32 *cur;
 	u32 val;
 	u32 val;
+	u32 pdm_val[ARIZONA_MAX_PDM_SPK];
 	int ret, i;
 	int ret, i;
 	int count = 0;
 	int count = 0;
 
 
@@ -884,6 +885,35 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
 		count++;
 		count++;
 	}
 	}
 
 
+	count = 0;
+	of_property_for_each_u32(arizona->dev->of_node,
+				 "wlf,max-channels-clocked",
+				 prop, cur, val) {
+		if (count == ARRAY_SIZE(pdata->max_channels_clocked))
+			break;
+
+		pdata->max_channels_clocked[count] = val;
+		count++;
+	}
+
+	ret = of_property_read_u32_array(arizona->dev->of_node,
+					 "wlf,spk-fmt",
+					 pdm_val,
+					 ARRAY_SIZE(pdm_val));
+
+	if (ret >= 0)
+		for (count = 0; count < ARRAY_SIZE(pdata->spk_fmt); ++count)
+			pdata->spk_fmt[count] = pdm_val[count];
+
+	ret = of_property_read_u32_array(arizona->dev->of_node,
+					 "wlf,spk-mute",
+					 pdm_val,
+					 ARRAY_SIZE(pdm_val));
+
+	if (ret >= 0)
+		for (count = 0; count < ARRAY_SIZE(pdata->spk_mute); ++count)
+			pdata->spk_mute[count] = pdm_val[count];
+
 	return 0;
 	return 0;
 }
 }