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@xxxxxxxxxxxxxxxxxxxxx> --- 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(-) 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@xxxxxxxxxx> // Author: Lucas Tanure <lucas.tanure@xxxxxxxxxx> +#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", -- 2.34.0