Skip to contentSkip to conversation

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

PATCH Superseded Richard Fitzgerald 3 participants 6 messages Aug 31, 2016 – Sep 5, 2016

Subsystems (3)

v2 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 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.

---
 Documentation/devicetree/bindings/mfd/arizona.txt | 11 ++++++++
 drivers/mfd/arizona-core.c                        | 31 +++++++++++++++++++++++
 2 files changed, 42 insertions(+)
Documentation/devicetree/bindings/mfd/arizona.txt +11 -0
index a6e2ea41..6eaf006 100644
@@ -85,6 +85,17 @@ Optional properties:
     present, the number of values should be less than or equal to the
     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, specify zero for AIFs that should be handled
+    normally.
+
+  - wlf,spk-fmt : PDM speaker data format, must contain 2 cells (OUT5 and OUT6).
+    See the datasheet for values.
+
+  - wlf,spk-mute : PDM speaker mute setting, must contain 2 cells (OUT5 and OUT6).
+    See the datasheet for values.
+
   - DCVDD-supply, MICVDD-supply : Power supplies, only need to be specified if
     they are being externally supplied. As covered in
     Documentation/devicetree/bindings/regulator/regulator.txt
drivers/mfd/arizona-core.c +31 -0
index b95ff2d..36a9633 100644
@@ -816,6 +816,37 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
 		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++;
+	}
+
+	count = 0;
+	of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-fmt", prop,
+				 cur, val) {
+		if (count == ARRAY_SIZE(pdata->spk_fmt))
+			break;
+
+		pdata->spk_fmt[count] = val;
+		count++;
+	}
+
+	count = 0;
+	of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-mute", prop,
+				 cur, val) {
+		if (count == ARRAY_SIZE(pdata->spk_mute))
+			break;
+
+		pdata->spk_mute[count] = val;
+		count++;
+	}
+
 	return 0;
 }
 
Signature · 6 lines
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#1 lore raw

Requires a DT Ack.

Quoted 73 lines · Richard Fitzgerald

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

---
 Documentation/devicetree/bindings/mfd/arizona.txt | 11 ++++++++
 drivers/mfd/arizona-core.c                        | 31 +++++++++++++++++++++++
 2 files changed, 42 insertions(+)
Documentation/devicetree/bindings/mfd/arizona.txt +11 -0
index a6e2ea41..6eaf006 100644
@@ -85,6 +85,17 @@ Optional properties:
     present, the number of values should be less than or equal to the
     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, specify zero for AIFs that should be handled
+    normally.
+
+  - wlf,spk-fmt : PDM speaker data format, must contain 2 cells (OUT5 and OUT6).
+    See the datasheet for values.
+
+  - wlf,spk-mute : PDM speaker mute setting, must contain 2 cells (OUT5 and OUT6).
+    See the datasheet for values.
+
   - DCVDD-supply, MICVDD-supply : Power supplies, only need to be specified if
     they are being externally supplied. As covered in
     Documentation/devicetree/bindings/regulator/regulator.txt
drivers/mfd/arizona-core.c +31 -0
index b95ff2d..36a9633 100644
@@ -816,6 +816,37 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
 		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++;
+	}
+
+	count = 0;
+	of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-fmt", prop,
+				 cur, val) {
+		if (count == ARRAY_SIZE(pdata->spk_fmt))
+			break;
+
+		pdata->spk_fmt[count] = val;
+		count++;
+	}
+
+	count = 0;
+	of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-mute", prop,
+				 cur, val) {
+		if (count == ARRAY_SIZE(pdata->spk_mute))
+			break;
+
+		pdata->spk_mute[count] = val;
+		count++;
+	}
+
 	return 0;
 }
 
Signature · 4 lines
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
maintainer
#2 lore raw
In reply to Richard Fitzgerald
Quoted 6 lines · Richard Fitzgerald

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

---
 Documentation/devicetree/bindings/mfd/arizona.txt | 11 ++++++++

Binding looks fine, but...

Quoted 11 lines
 drivers/mfd/arizona-core.c                        | 31 +++++++++++++++++++++++
 2 files changed, 42 insertions(+)
drivers/mfd/arizona-core.c +0 -0
index b95ff2d..36a9633 100644
@@ -816,6 +816,37 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
 		count++;
 	}
 

drivers/mfd/arizona-core.c static int arizona_of_get_core_pdata(struct arizona *arizona) · line 828

Quoted 10 lines
drivers/mfd/arizona-core.c +10 -0
+	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++;
+	}

of_property_read_u32_array doesn't work for you?

Quoted 31 lines
drivers/mfd/arizona-core.c +21 -0
+
+	count = 0;
+	of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-fmt", prop,
+				 cur, val) {
+		if (count == ARRAY_SIZE(pdata->spk_fmt))
+			break;
+
+		pdata->spk_fmt[count] = val;
+		count++;
+	}
+
+	count = 0;
+	of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-mute", prop,
+				 cur, val) {
+		if (count == ARRAY_SIZE(pdata->spk_mute))
+			break;
+
+		pdata->spk_mute[count] = val;
+		count++;
+	}
+
 	return 0;
 }
 
Signature · 6 lines
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#3 lore raw
Quoted 21 lines · Rob Herring
Quoted 6 lines · Richard Fitzgerald

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

---
 Documentation/devicetree/bindings/mfd/arizona.txt | 11 ++++++++

Binding looks fine, but...

Quoted 11 lines
 drivers/mfd/arizona-core.c                        | 31 +++++++++++++++++++++++
 2 files changed, 42 insertions(+)
drivers/mfd/arizona-core.c +0 -0
index b95ff2d..36a9633 100644
@@ -816,6 +816,37 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
 		count++;
 	}
 
Quoted 12 lines

drivers/mfd/arizona-core.c static int arizona_of_get_core_pdata(struct arizona *arizona) · line 828

Quoted 10 lines
drivers/mfd/arizona-core.c +10 -0
+	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++;
+	}

of_property_read_u32_array doesn't work for you?

No, it doesn't, because it doesn't read a variable-sized array.

Quoted 32 lines
Quoted 32 lines
drivers/mfd/arizona-core.c +21 -0
+
+	count = 0;
+	of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-fmt", prop,
+				 cur, val) {
+		if (count == ARRAY_SIZE(pdata->spk_fmt))
+			break;
+
+		pdata->spk_fmt[count] = val;
+		count++;
+	}
+
+	count = 0;
+	of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-mute", prop,
+				 cur, val) {
+		if (count == ARRAY_SIZE(pdata->spk_mute))
+			break;
+
+		pdata->spk_mute[count] = val;
+		count++;
+	}
+
 	return 0;
 }
 
Signature · 6 lines
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
maintainer
#4 lore raw
Quoted 35 lines · Richard Fitzgerald
Quoted 21 lines · Rob Herring
Quoted 6 lines · Richard Fitzgerald

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

---
 Documentation/devicetree/bindings/mfd/arizona.txt | 11 ++++++++

Binding looks fine, but...

Quoted 11 lines
 drivers/mfd/arizona-core.c                        | 31 +++++++++++++++++++++++
 2 files changed, 42 insertions(+)
drivers/mfd/arizona-core.c +0 -0
index b95ff2d..36a9633 100644
@@ -816,6 +816,37 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
            count++;
    }
 
Quoted 12 lines

drivers/mfd/arizona-core.c static int arizona_of_get_core_pdata(struct arizona *arizona) · line 828

Quoted 10 lines
drivers/mfd/arizona-core.c +10 -0
+   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++;
+   }

of_property_read_u32_array doesn't work for you?

Quoted 1 line

No, it doesn't, because it doesn't read a variable-sized array.

But the next 2 loops are fixed with 2 elements, right? They should be converted. If not fixed size, you have the same pattern repeated 3 times.

Maybe we should fix of_property_read_u32_array to be more flexible and return an array less than a max size. Not sure if anyone relies on that case failing though, so leaving the 1st loop is fine.

Rob

Quoted 23 lines
Quoted 23 lines
Quoted 23 lines
drivers/mfd/arizona-core.c +20 -0
+   count = 0;
+   of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-fmt", prop,
+                            cur, val) {
+           if (count == ARRAY_SIZE(pdata->spk_fmt))
+                   break;
+
+           pdata->spk_fmt[count] = val;
+           count++;
+   }
+
+   count = 0;
+   of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-mute", prop,
+                            cur, val) {
+           if (count == ARRAY_SIZE(pdata->spk_mute))
+                   break;
+
+           pdata->spk_mute[count] = val;
+           count++;
+   }
+
    return 0;
 }
 
Quoted 9 lines
Quoted 7 lines
Quoted 7 lines

--
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#5 lore raw
Quoted 37 lines · Rob Herring
Quoted 35 lines · Richard Fitzgerald
Quoted 33 lines · Rob Herring
Quoted 6 lines · Richard Fitzgerald

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

---
 Documentation/devicetree/bindings/mfd/arizona.txt | 11 ++++++++

Binding looks fine, but...

Quoted 11 lines
 drivers/mfd/arizona-core.c                        | 31 +++++++++++++++++++++++
 2 files changed, 42 insertions(+)
drivers/mfd/arizona-core.c +0 -0
index b95ff2d..36a9633 100644
@@ -816,6 +816,37 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
            count++;
    }
 

drivers/mfd/arizona-core.c static int arizona_of_get_core_pdata(struct arizona *arizona) · line 828

Quoted 10 lines
drivers/mfd/arizona-core.c +10 -0
+   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++;
+   }

of_property_read_u32_array doesn't work for you?

Quoted 3 lines
Quoted 1 line

No, it doesn't, because it doesn't read a variable-sized array.

But the next 2 loops are fixed with 2 elements, right? They should be

Ok, that's true the code is flexible size (because the number of AIFs and the number of outputs varies between codecs, and the number actually in use also varies) but the binding documentation I pulled in hasn't been updated to match the code.

Quoted 2 lines

converted. If not fixed size, you have the same pattern repeated 3 times.

We originally had duplicated DT code in our driver factored out into functions but this was rejected by mfd maintainer in favour of only using the standard functions and duplicating code if necessary. I didn't upstream that original patch so I don't know now what the justification was.

Quoted 39 lines

Maybe we should fix of_property_read_u32_array to be more flexible and return an array less than a max size. Not sure if anyone relies on that case failing though, so leaving the 1st loop is fine.

Rob

Quoted 32 lines
Quoted 30 lines
Quoted 30 lines
drivers/mfd/arizona-core.c +20 -1
+   count = 0;
+   of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-fmt", prop,
+                            cur, val) {
+           if (count == ARRAY_SIZE(pdata->spk_fmt))
+                   break;
+
+           pdata->spk_fmt[count] = val;
+           count++;
+   }
+
+   count = 0;
+   of_property_for_each_u32(arizona->dev->of_node, "wlf,spk-mute", prop,
+                            cur, val) {
+           if (count == ARRAY_SIZE(pdata->spk_mute))
+                   break;
+
+           pdata->spk_mute[count] = val;
+           count++;
+   }
+
    return 0;
 }
 
--

1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html