* [PATCH v4 0/3] ASoC: sun4i-codec: Distinguish sun4i from sun7i @ 2016-09-15 16:36 Danny Milosavljevic 2016-09-15 16:36 ` [PATCH v4 1/3] ASoC: sun4i-codec: rename sun4i_codec_widgets for consistency Danny Milosavljevic ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Danny Milosavljevic @ 2016-09-15 16:36 UTC (permalink / raw) To: linux-arm-kernel ASoC: sun4i-codec: Introduce mechanism to detect sun7i and provide a different regmap different compared to sun4i Allwinner A10. The controls will be extended in a forthcoming patch - it is necessary to distinguish between sun4i and sun7i controls because they have different registers. Renamed SUN4I_CODEC_AC_SYS_VERI to SUN7I_CODEC_AC_DAC_CAL and renamed SUN4I_CODEC_AC_MIC_PHONE_CAL to SUN7I_CODEC_AC_MIC_PHONE_CAL because these are actually not present on Allwinner A10. Handle quirks by regmap config and codec and select the correct quirks automatically. Danny Milosavljevic (3): ASoC: sun4i-codec: rename "sun4i_codec_widgets" to "sun4i_codec_controls" for consistency with the struct field name. ASoC: rename "SUN4I_CODEC_SYS_VERI" to "SUN7I_CODEC_AC_DAC_CAL"; rename "SUN4I_CODEC_AC_MIC_PHONE_CAL" to "SUN7I_CODEC_AC_MIC_PHONE_CAL". ASoC: sun4i-codec: Add custom regmap configs for the A10 and A20 variants. sound/soc/sunxi/sun4i-codec.c | 45 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 1/3] ASoC: sun4i-codec: rename sun4i_codec_widgets for consistency 2016-09-15 16:36 [PATCH v4 0/3] ASoC: sun4i-codec: Distinguish sun4i from sun7i Danny Milosavljevic @ 2016-09-15 16:36 ` Danny Milosavljevic 2016-09-18 20:04 ` Maxime Ripard 2016-09-15 16:36 ` [PATCH v4 2/3] ASoC: rename some sun7i-only registers Danny Milosavljevic 2016-09-15 16:36 ` [PATCH v4 3/3] ASoC: sun4i-codec: Add custom regmap configs Danny Milosavljevic 2 siblings, 1 reply; 7+ messages in thread From: Danny Milosavljevic @ 2016-09-15 16:36 UTC (permalink / raw) To: linux-arm-kernel ASoC: sun4i-codec: Rename "sun4i_codec_widgets" to "sun4i_codec_controls" for consistency with the struct field name. Signed-off-by: Danny Milosavljevic <dannym@scratchpost.org> --- sound/soc/sunxi/sun4i-codec.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c index 0e19c50..c2c0583 100644 --- a/sound/soc/sunxi/sun4i-codec.c +++ b/sound/soc/sunxi/sun4i-codec.c @@ -509,7 +509,7 @@ static const struct snd_kcontrol_new sun4i_codec_pa_mute = static DECLARE_TLV_DB_SCALE(sun4i_codec_pa_volume_scale, -6300, 100, 1); -static const struct snd_kcontrol_new sun4i_codec_widgets[] = { +static const struct snd_kcontrol_new sun4i_codec_controls[] = { SOC_SINGLE_TLV("Power Amplifier Volume", SUN4I_CODEC_DAC_ACTL, SUN4I_CODEC_DAC_ACTL_PA_VOL, 0x3F, 0, sun4i_codec_pa_volume_scale), @@ -629,8 +629,8 @@ static const struct snd_soc_dapm_route sun4i_codec_codec_dapm_routes[] = { static struct snd_soc_codec_driver sun4i_codec_codec = { .component_driver = { - .controls = sun4i_codec_widgets, - .num_controls = ARRAY_SIZE(sun4i_codec_widgets), + .controls = sun4i_codec_controls, + .num_controls = ARRAY_SIZE(sun4i_codec_controls), .dapm_widgets = sun4i_codec_codec_dapm_widgets, .num_dapm_widgets = ARRAY_SIZE(sun4i_codec_codec_dapm_widgets), .dapm_routes = sun4i_codec_codec_dapm_routes, ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 1/3] ASoC: sun4i-codec: rename sun4i_codec_widgets for consistency 2016-09-15 16:36 ` [PATCH v4 1/3] ASoC: sun4i-codec: rename sun4i_codec_widgets for consistency Danny Milosavljevic @ 2016-09-18 20:04 ` Maxime Ripard 0 siblings, 0 replies; 7+ messages in thread From: Maxime Ripard @ 2016-09-18 20:04 UTC (permalink / raw) To: linux-arm-kernel On Thu, Sep 15, 2016 at 06:36:28PM +0200, Danny Milosavljevic wrote: > ASoC: sun4i-codec: Rename "sun4i_codec_widgets" to "sun4i_codec_controls" for > consistency with the struct field name. > > Signed-off-by: Danny Milosavljevic <dannym@scratchpost.org> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Thanks! -- Maxime Ripard, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160918/6f2ad63b/attachment.sig> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 2/3] ASoC: rename some sun7i-only registers 2016-09-15 16:36 [PATCH v4 0/3] ASoC: sun4i-codec: Distinguish sun4i from sun7i Danny Milosavljevic 2016-09-15 16:36 ` [PATCH v4 1/3] ASoC: sun4i-codec: rename sun4i_codec_widgets for consistency Danny Milosavljevic @ 2016-09-15 16:36 ` Danny Milosavljevic 2016-09-18 20:17 ` Maxime Ripard 2016-09-15 16:36 ` [PATCH v4 3/3] ASoC: sun4i-codec: Add custom regmap configs Danny Milosavljevic 2 siblings, 1 reply; 7+ messages in thread From: Danny Milosavljevic @ 2016-09-15 16:36 UTC (permalink / raw) To: linux-arm-kernel ASoC: sun4i-codec: Some of the registers are sun7i-only. Therefore rename "SUN4I_CODEC_SYS_VERI" to "SUN7I_CODEC_AC_DAC_CAL" and rename "SUN4I_CODEC_AC_MIC_PHONE_CAL" to "SUN7I_CODEC_AC_MIC_PHONE_CAL". Signed-off-by: Danny Milosavljevic <dannym@scratchpost.org> --- sound/soc/sunxi/sun4i-codec.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c index c2c0583..3b53b78 100644 --- a/sound/soc/sunxi/sun4i-codec.c +++ b/sound/soc/sunxi/sun4i-codec.c @@ -96,8 +96,8 @@ /* Other various ADC registers */ #define SUN4I_CODEC_DAC_TXCNT (0x30) #define SUN4I_CODEC_ADC_RXCNT (0x34) -#define SUN4I_CODEC_AC_SYS_VERI (0x38) -#define SUN4I_CODEC_AC_MIC_PHONE_CAL (0x3c) +#define SUN7I_CODEC_AC_DAC_CAL (0x38) +#define SUN7I_CODEC_AC_MIC_PHONE_CAL (0x3c) struct sun4i_codec { struct device *dev; @@ -682,7 +682,7 @@ static const struct regmap_config sun4i_codec_regmap_config = { .reg_bits = 32, .reg_stride = 4, .val_bits = 32, - .max_register = SUN4I_CODEC_AC_MIC_PHONE_CAL, + .max_register = SUN7I_CODEC_AC_MIC_PHONE_CAL, }; static const struct of_device_id sun4i_codec_of_match[] = { ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 2/3] ASoC: rename some sun7i-only registers 2016-09-15 16:36 ` [PATCH v4 2/3] ASoC: rename some sun7i-only registers Danny Milosavljevic @ 2016-09-18 20:17 ` Maxime Ripard 0 siblings, 0 replies; 7+ messages in thread From: Maxime Ripard @ 2016-09-18 20:17 UTC (permalink / raw) To: linux-arm-kernel On Thu, Sep 15, 2016 at 06:36:29PM +0200, Danny Milosavljevic wrote: > ASoC: sun4i-codec: Some of the registers are sun7i-only. That line is useless, you already have the commit title. > > Therefore rename "SUN4I_CODEC_SYS_VERI" to "SUN7I_CODEC_AC_DAC_CAL" and > rename "SUN4I_CODEC_AC_MIC_PHONE_CAL" to "SUN7I_CODEC_AC_MIC_PHONE_CAL". And removing it, you could make a real sentence, like: Some of the registers defined in the driver are only usable on the A20. Rename these registers. Maxime -- Maxime Ripard, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160918/e98af958/attachment.sig> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 3/3] ASoC: sun4i-codec: Add custom regmap configs 2016-09-15 16:36 [PATCH v4 0/3] ASoC: sun4i-codec: Distinguish sun4i from sun7i Danny Milosavljevic 2016-09-15 16:36 ` [PATCH v4 1/3] ASoC: sun4i-codec: rename sun4i_codec_widgets for consistency Danny Milosavljevic 2016-09-15 16:36 ` [PATCH v4 2/3] ASoC: rename some sun7i-only registers Danny Milosavljevic @ 2016-09-15 16:36 ` Danny Milosavljevic 2016-09-18 20:27 ` Maxime Ripard 2 siblings, 1 reply; 7+ messages in thread From: Danny Milosavljevic @ 2016-09-15 16:36 UTC (permalink / raw) To: linux-arm-kernel ASoC: sun4i-codec: 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> --- sound/soc/sunxi/sun4i-codec.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c index 3b53b78..c5d6d84c 100644 --- a/sound/soc/sunxi/sun4i-codec.c +++ b/sound/soc/sunxi/sun4i-codec.c @@ -682,12 +682,37 @@ 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); @@ -760,6 +785,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; @@ -777,8 +803,9 @@ static int sun4i_codec_probe(struct platform_device *pdev) return PTR_ERR(base); } + quirks = of_device_get_match_data(&pdev->dev); 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); ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 3/3] ASoC: sun4i-codec: Add custom regmap configs 2016-09-15 16:36 ` [PATCH v4 3/3] ASoC: sun4i-codec: Add custom regmap configs Danny Milosavljevic @ 2016-09-18 20:27 ` Maxime Ripard 0 siblings, 0 replies; 7+ messages in thread From: Maxime Ripard @ 2016-09-18 20:27 UTC (permalink / raw) To: linux-arm-kernel On Thu, Sep 15, 2016 at 06:36:30PM +0200, Danny Milosavljevic wrote: > ASoC: sun4i-codec: The A20 has a few extra registers that the A10 > doesn't have. > Therefore, use different regmaps for A10 as compared to A20. Same comment with the commit log. > > Signed-off-by: Danny Milosavljevic <dannym@scratchpost.org> > --- > sound/soc/sunxi/sun4i-codec.c | 33 ++++++++++++++++++++++++++++++--- > 1 file changed, 30 insertions(+), 3 deletions(-) > > diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c > index 3b53b78..c5d6d84c 100644 > --- a/sound/soc/sunxi/sun4i-codec.c > +++ b/sound/soc/sunxi/sun4i-codec.c > @@ -682,12 +682,37 @@ 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); > @@ -760,6 +785,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; > @@ -777,8 +803,9 @@ static int sun4i_codec_probe(struct platform_device *pdev) > return PTR_ERR(base); > } > > + quirks = of_device_get_match_data(&pdev->dev); And you probably want to check that quirks isn't null there. Maxime -- Maxime Ripard, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160918/8e3456bf/attachment.sig> ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-09-18 20:27 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-09-15 16:36 [PATCH v4 0/3] ASoC: sun4i-codec: Distinguish sun4i from sun7i Danny Milosavljevic 2016-09-15 16:36 ` [PATCH v4 1/3] ASoC: sun4i-codec: rename sun4i_codec_widgets for consistency Danny Milosavljevic 2016-09-18 20:04 ` Maxime Ripard 2016-09-15 16:36 ` [PATCH v4 2/3] ASoC: rename some sun7i-only registers Danny Milosavljevic 2016-09-18 20:17 ` Maxime Ripard 2016-09-15 16:36 ` [PATCH v4 3/3] ASoC: sun4i-codec: Add custom regmap configs Danny Milosavljevic 2016-09-18 20:27 ` Maxime Ripard
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).