Move platform specific code to make the reading of upcoming commit easier. Signed-off-by: Jan Dakinevich <jan.dakinevich@xxxxxxxxxxxxxxxxx> --- sound/soc/meson/t9015.c | 71 ++++++++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 23 deletions(-) diff --git a/sound/soc/meson/t9015.c b/sound/soc/meson/t9015.c index 571f65788c59..48f6767bd858 100644 --- a/sound/soc/meson/t9015.c +++ b/sound/soc/meson/t9015.c @@ -51,6 +51,12 @@ struct t9015 { struct regulator *avdd; }; +struct t9015_match_data { + const struct snd_soc_component_driver *component_drv; + struct snd_soc_dai_driver *dai_drv; + unsigned int max_register; +}; + static int t9015_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) { struct snd_soc_component *component = dai->component; @@ -112,6 +118,11 @@ static SOC_ENUM_SINGLE_DECL(dacl_in_enum, BLOCK_EN, DACL_SRC, dacl_in_txt); static const char * const mono_txt[] = { "Stereo", "Mono"}; static SOC_ENUM_SINGLE_DECL(mono_enum, VOL_CTRL1, DAC_MONO, mono_txt); +static const struct snd_kcontrol_new t9015_right_dac_mux = + SOC_DAPM_ENUM("Right DAC Source", dacr_in_enum); +static const struct snd_kcontrol_new t9015_left_dac_mux = + SOC_DAPM_ENUM("Left DAC Source", dacl_in_enum); + static const struct snd_kcontrol_new t9015_snd_controls[] = { /* Volume Controls */ SOC_ENUM("Playback Channel Mode", mono_enum), @@ -126,11 +137,6 @@ static const struct snd_kcontrol_new t9015_snd_controls[] = { SOC_SINGLE("Unmute Ramp Switch", VOL_CTRL1, UNMUTE_MODE, 1, 0), }; -static const struct snd_kcontrol_new t9015_right_dac_mux = - SOC_DAPM_ENUM("Right DAC Source", dacr_in_enum); -static const struct snd_kcontrol_new t9015_left_dac_mux = - SOC_DAPM_ENUM("Left DAC Source", dacl_in_enum); - static const struct snd_soc_dapm_widget t9015_dapm_widgets[] = { SND_SOC_DAPM_AIF_IN("Right IN", NULL, 0, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_AIF_IN("Left IN", NULL, 0, SND_SOC_NOPM, 0, 0), @@ -223,7 +229,20 @@ static int t9015_set_bias_level(struct snd_soc_component *component, return 0; } +static int t9015_component_probe(struct snd_soc_component *component) +{ + /* + * Initialize output polarity: + * ATM the output polarity is fixed but in the future it might useful + * to add DT property to set this depending on the platform needs + */ + snd_soc_component_write(component, LINEOUT_CFG, 0x1111); + + return 0; +} + static const struct snd_soc_component_driver t9015_codec_driver = { + .probe = t9015_component_probe, .set_bias_level = t9015_set_bias_level, .controls = t9015_snd_controls, .num_controls = ARRAY_SIZE(t9015_snd_controls), @@ -235,22 +254,25 @@ static const struct snd_soc_component_driver t9015_codec_driver = { .endianness = 1, }; -static const struct regmap_config t9015_regmap_config = { - .reg_bits = 32, - .reg_stride = 4, - .val_bits = 32, - .max_register = POWER_CFG, -}; - static int t9015_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; + const struct t9015_match_data *data; struct t9015 *priv; void __iomem *regs; + struct regmap_config config = { + .reg_bits = 32, + .reg_stride = 4, + .val_bits = 32, + }; struct regmap *regmap; struct clk *pclk; int ret; + data = device_get_match_data(dev); + if (!data) + dev_err_probe(dev, -ENODEV, "failed to match device\n"); + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; @@ -276,25 +298,28 @@ static int t9015_probe(struct platform_device *pdev) return PTR_ERR(regs); } - regmap = devm_regmap_init_mmio(dev, regs, &t9015_regmap_config); + config.max_register = data->max_register; + regmap = devm_regmap_init_mmio(dev, regs, &config); if (IS_ERR(regmap)) { dev_err(dev, "regmap init failed\n"); return PTR_ERR(regmap); } - /* - * Initialize output polarity: - * ATM the output polarity is fixed but in the future it might useful - * to add DT property to set this depending on the platform needs - */ - regmap_write(regmap, LINEOUT_CFG, 0x1111); - - return devm_snd_soc_register_component(dev, &t9015_codec_driver, - &t9015_dai, 1); + return devm_snd_soc_register_component(dev, data->component_drv, + data->dai_drv, 1); } +static const struct t9015_match_data t9015_match_data = { + .component_drv = &t9015_codec_driver, + .dai_drv = &t9015_dai, + .max_register = POWER_CFG, +}; + static const struct of_device_id t9015_ids[] __maybe_unused = { - { .compatible = "amlogic,t9015", }, + { + .compatible = "amlogic,t9015", + .data = &t9015_match_data, + }, { } }; MODULE_DEVICE_TABLE(of, t9015_ids); -- 2.34.1