mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-27 06:34:11 +08:00
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 = {
|
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_bits = 32,
|
||||||
.reg_stride = 4,
|
.reg_stride = 4,
|
||||||
.val_bits = 32,
|
.val_bits = 32,
|
||||||
.max_register = SUN7I_CODEC_AC_MIC_PHONE_CAL,
|
.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[] = {
|
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);
|
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 snd_soc_card *card;
|
||||||
struct sun4i_codec *scodec;
|
struct sun4i_codec *scodec;
|
||||||
|
const struct sun4i_codec_quirks *quirks;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
int ret;
|
int ret;
|
||||||
@ -775,8 +801,14 @@ static int sun4i_codec_probe(struct platform_device *pdev)
|
|||||||
return PTR_ERR(base);
|
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,
|
scodec->regmap = devm_regmap_init_mmio(&pdev->dev, base,
|
||||||
&sun4i_codec_regmap_config);
|
quirks->regmap_config);
|
||||||
if (IS_ERR(scodec->regmap)) {
|
if (IS_ERR(scodec->regmap)) {
|
||||||
dev_err(&pdev->dev, "Failed to create our regmap\n");
|
dev_err(&pdev->dev, "Failed to create our regmap\n");
|
||||||
return PTR_ERR(scodec->regmap);
|
return PTR_ERR(scodec->regmap);
|
||||||
|
Loading…
Reference in New Issue
Block a user