diff mbox series

[04/11] ASoC: cs35l41: Create function for init array of Supplies

Message ID 20211123163149.1530535-5-tanureal@opensource.cirrus.com (mailing list archive)
State Not Applicable, archived
Headers show
Series Add support for Legion 7 16ACHg6 laptop | expand

Commit Message

Lucas Tanure Nov. 23, 2021, 4:31 p.m. UTC
Both ASoC and HDA system have to initialize the arrays of supplies
in the same way, so create a function for that in shared code

Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
---
 include/sound/cs35l41.h        |  5 ++++-
 sound/soc/codecs/cs35l41-lib.c | 29 +++++++++++++++++++++++++++++
 sound/soc/codecs/cs35l41.c     | 23 +++--------------------
 3 files changed, 36 insertions(+), 21 deletions(-)

Comments

Mark Brown Nov. 23, 2021, 5:58 p.m. UTC | #1
On Tue, Nov 23, 2021 at 04:31:42PM +0000, Lucas Tanure wrote:

> +	ret = regulator_bulk_enable(CS35L41_NUM_SUPPLIES, supplies);
> +	if (ret != 0) {
> +		dev_err(dev, "Failed to enable core supplies: %d\n", ret);
> +		return ret;
> +	}

Where's the matching disable, I didn't see anything in the HDA code?  It
is there in cs35l41_remove() in the CODEC driver but there's nothing
sharing that bit of code here that I noticed.
Mark Brown Nov. 24, 2021, 1:31 p.m. UTC | #2
On Tue, Nov 23, 2021 at 05:58:59PM +0000, Mark Brown wrote:
> On Tue, Nov 23, 2021 at 04:31:42PM +0000, Lucas Tanure wrote:

> > +	ret = regulator_bulk_enable(CS35L41_NUM_SUPPLIES, supplies);
> > +	if (ret != 0) {
> > +		dev_err(dev, "Failed to enable core supplies: %d\n", ret);
> > +		return ret;
> > +	}

> Where's the matching disable, I didn't see anything in the HDA code?  It
> is there in cs35l41_remove() in the CODEC driver but there's nothing
> sharing that bit of code here that I noticed.

Relatedly, given that the HDA stuff will most likely only be used on
ACPI systems are you sure it needs to handle regulators at all?
diff mbox series

Patch

diff --git a/include/sound/cs35l41.h b/include/sound/cs35l41.h
index ced80ede1def..5039e876bad1 100644
--- a/include/sound/cs35l41.h
+++ b/include/sound/cs35l41.h
@@ -536,7 +536,6 @@ 
 #define CS35L41_NUM_OTP_MAPS		5
 
 #define CS35L41_VALID_PDATA		0x80000000
-#define CS35L41_NUM_SUPPLIES            2
 
 #define CS35L41_SCLK_MSTR_MASK		0x10
 #define CS35L41_SCLK_MSTR_SHIFT		4
@@ -724,6 +723,8 @@ 
 #define CS35L41_SPI_MAX_FREQ		4000000
 #define CS35L41_REGSTRIDE		4
 
+#define CS35L41_NUM_SUPPLIES		2
+
 enum cs35l41_clk_ids {
 	CS35L41_CLKID_SCLK = 0,
 	CS35L41_CLKID_LRCLK = 1,
@@ -762,4 +763,6 @@  struct cs35l41_otp_map_element_t {
 extern struct regmap_config cs35l41_regmap_i2c;
 extern struct regmap_config cs35l41_regmap_spi;
 
+int cs35l41_init_supplies(struct device *dev, struct regulator_bulk_data *supplies);
+
 #endif /* __CS35L41_H */
diff --git a/sound/soc/codecs/cs35l41-lib.c b/sound/soc/codecs/cs35l41-lib.c
index 04f59cda5126..4aba0f90b876 100644
--- a/sound/soc/codecs/cs35l41-lib.c
+++ b/sound/soc/codecs/cs35l41-lib.c
@@ -7,6 +7,7 @@ 
 // Author: David Rhodes <david.rhodes@cirrus.com>
 // Author: Lucas Tanure <lucas.tanure@cirrus.com>
 
+#include <linux/regulator/consumer.h>
 #include <sound/cs35l41.h>
 
 const struct reg_default cs35l41_reg[] = {
@@ -690,6 +691,11 @@  const struct cs35l41_otp_map_element_t cs35l41_otp_map_map[CS35L41_NUM_OTP_MAPS]
 	},
 };
 
+static const char * const cs35l41_supplies[CS35L41_NUM_SUPPLIES] = {
+	"VA",
+	"VP",
+};
+
 struct regmap_config cs35l41_regmap_i2c = {
 	.reg_bits = 32,
 	.val_bits = 32,
@@ -720,3 +726,26 @@  struct regmap_config cs35l41_regmap_spi = {
 	.precious_reg = cs35l41_precious_reg,
 	.cache_type = REGCACHE_RBTREE,
 };
+
+int cs35l41_init_supplies(struct device *dev, struct regulator_bulk_data *supplies)
+{
+	int i, ret;
+
+	for (i = 0; i < CS35L41_NUM_SUPPLIES; i++)
+		supplies[i].supply = cs35l41_supplies[i];
+
+	ret = devm_regulator_bulk_get(dev, CS35L41_NUM_SUPPLIES, supplies);
+	if (ret != 0) {
+		dev_err(dev, "Failed to request core supplies: %d\n", ret);
+		return ret;
+	}
+
+	ret = regulator_bulk_enable(CS35L41_NUM_SUPPLIES, supplies);
+	if (ret != 0) {
+		dev_err(dev, "Failed to enable core supplies: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c
index e8e997efaa8b..c8709de41aaf 100644
--- a/sound/soc/codecs/cs35l41.c
+++ b/sound/soc/codecs/cs35l41.c
@@ -24,11 +24,6 @@ 
 
 #include "cs35l41.h"
 
-static const char * const cs35l41_supplies[CS35L41_NUM_SUPPLIES] = {
-	"VA",
-	"VP",
-};
-
 struct cs35l41_pll_sysclk_config {
 	int freq;
 	int clk_cfg;
@@ -1526,7 +1521,7 @@  static int cs35l41_dsp_init(struct cs35l41_private *cs35l41)
 int cs35l41_probe(struct cs35l41_private *cs35l41,
 		  struct cs35l41_platform_data *pdata)
 {
-	u32 regid, reg_revid, i, mtl_revid, int_status, chipid_match;
+	u32 regid, reg_revid, mtl_revid, int_status, chipid_match;
 	int irq_pol = 0;
 	int ret;
 
@@ -1538,21 +1533,9 @@  int cs35l41_probe(struct cs35l41_private *cs35l41,
 			return ret;
 	}
 
-	for (i = 0; i < CS35L41_NUM_SUPPLIES; i++)
-		cs35l41->supplies[i].supply = cs35l41_supplies[i];
-
-	ret = devm_regulator_bulk_get(cs35l41->dev, CS35L41_NUM_SUPPLIES,
-				      cs35l41->supplies);
-	if (ret != 0) {
-		dev_err(cs35l41->dev, "Failed to request core supplies: %d\n", ret);
+	ret = cs35l41_init_supplies(cs35l41->dev, cs35l41->supplies);
+	if (ret)
 		return ret;
-	}
-
-	ret = regulator_bulk_enable(CS35L41_NUM_SUPPLIES, cs35l41->supplies);
-	if (ret != 0) {
-		dev_err(cs35l41->dev, "Failed to enable core supplies: %d\n", ret);
-		return ret;
-	}
 
 	/* returning NULL can be an option if in stereo mode */
 	cs35l41->reset_gpio = devm_gpiod_get_optional(cs35l41->dev, "reset",