ASoC: sun4i-codec: Add custom regmap configs
The A20 has a few extra registers that the A10 doesn't have. Therefore, use different regmaps for A10 as compared to A20. Signed-off-by: Danny Milosavljevic <dannym@scratchpost.org> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
4f0c4e9931
commit
c1d5065a0b
@ -677,15 +677,40 @@ static struct snd_soc_dai_driver dummy_cpu_dai = {
|
||||
};
|
||||
|
||||
static const struct regmap_config sun4i_codec_regmap_config = {
|
||||
.reg_bits = 32,
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = SUN4I_CODEC_ADC_RXCNT,
|
||||
};
|
||||
|
||||
static const struct regmap_config sun7i_codec_regmap_config = {
|
||||
.reg_bits = 32,
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = SUN7I_CODEC_AC_MIC_PHONE_CAL,
|
||||
};
|
||||
|
||||
struct sun4i_codec_quirks {
|
||||
const struct regmap_config *regmap_config;
|
||||
};
|
||||
|
||||
static const struct sun4i_codec_quirks sun4i_codec_quirks = {
|
||||
.regmap_config = &sun4i_codec_regmap_config,
|
||||
};
|
||||
|
||||
static const struct sun4i_codec_quirks sun7i_codec_quirks = {
|
||||
.regmap_config = &sun7i_codec_regmap_config,
|
||||
};
|
||||
|
||||
static const struct of_device_id sun4i_codec_of_match[] = {
|
||||
{ .compatible = "allwinner,sun4i-a10-codec" },
|
||||
{ .compatible = "allwinner,sun7i-a20-codec" },
|
||||
{
|
||||
.compatible = "allwinner,sun4i-a10-codec",
|
||||
.data = &sun4i_codec_quirks,
|
||||
},
|
||||
{
|
||||
.compatible = "allwinner,sun7i-a20-codec",
|
||||
.data = &sun7i_codec_quirks,
|
||||
},
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, sun4i_codec_of_match);
|
||||
@ -758,6 +783,7 @@ static int sun4i_codec_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct snd_soc_card *card;
|
||||
struct sun4i_codec *scodec;
|
||||
const struct sun4i_codec_quirks *quirks;
|
||||
struct resource *res;
|
||||
void __iomem *base;
|
||||
int ret;
|
||||
@ -775,8 +801,14 @@ static int sun4i_codec_probe(struct platform_device *pdev)
|
||||
return PTR_ERR(base);
|
||||
}
|
||||
|
||||
quirks = of_device_get_match_data(&pdev->dev);
|
||||
if (quirks == NULL) {
|
||||
dev_err(&pdev->dev, "Failed to determine the quirks to use\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
scodec->regmap = devm_regmap_init_mmio(&pdev->dev, base,
|
||||
&sun4i_codec_regmap_config);
|
||||
quirks->regmap_config);
|
||||
if (IS_ERR(scodec->regmap)) {
|
||||
dev_err(&pdev->dev, "Failed to create our regmap\n");
|
||||
return PTR_ERR(scodec->regmap);
|
||||
|
Loading…
Reference in New Issue
Block a user