@@ -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 */
@@ -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;
+}
+
@@ -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",
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(-)