[RFCv2] ASoC: Add Rockchip rk817 audio CODEC support
Mark Brown
broonie at kernel.org
Thu Mar 11 13:49:05 CET 2021
On Wed, Mar 10, 2021 at 05:44:16PM -0600, Chris Morgan wrote:
At a very high level this doesn't really look like it integrates with
the framework as much as it should - the way this driver is written
doesn't really have much resemblance to how other ASoC drivers are
written beyond a very superficial level. Please take a look at what
other drivers are doing and try to ensure that this is working with the
framework in an idiomatic way.
> index 000000000000..6d4e05440dae
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/sound/rockchip,rk817-codec.txt
> @@ -0,0 +1,39 @@
> +* Rockchip rk817 codec
New DT bindings should be in YAML format.
> diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c
> index ad923dd4e007..adb8a7da29db 100644
> --- a/drivers/mfd/rk808.c
> +++ b/drivers/mfd/rk808.c
> @@ -163,6 +163,12 @@ static const struct mfd_cell rk817s[] = {
> .num_resources = ARRAY_SIZE(rk817_rtc_resources),
> .resources = &rk817_rtc_resources[0],
> },
> +#ifdef CONFIG_SND_SOC_RK817
> + {
> + .name = "rk817-codec",
> + .of_compatible = "rockchip,rk817-codec",
> + },
> +#endif
> };
>
This should be a separate patch and should be sent via the MFD
maintainers. You shouldn't add an of_compatible here, obviously ever
RK817 has the CODEC functionality so this is just describing how Linux
chooses to split the device up rather than any property of the hardware.
> +static int rk817_reset(struct snd_soc_component *component)
> +{
> + snd_soc_component_write(component, RK817_CODEC_DTOP_LPT_SRST, 0x40);
> + snd_soc_component_write(component, RK817_CODEC_DDAC_POPD_DACST, 0x02);
> + snd_soc_component_write(component, RK817_CODEC_DTOP_DIGEN_CLKE, 0x0f);
> + snd_soc_component_write(component, RK817_CODEC_APLL_CFG0, 0x04);
> + snd_soc_component_write(component, RK817_CODEC_APLL_CFG1, 0x58);
> + snd_soc_component_write(component, RK817_CODEC_APLL_CFG2, 0x2d);
> + snd_soc_component_write(component, RK817_CODEC_APLL_CFG3, 0x0c);
> + snd_soc_component_write(component, RK817_CODEC_APLL_CFG4, 0xa5);
> + snd_soc_component_write(component, RK817_CODEC_APLL_CFG5, 0x00);
> + snd_soc_component_write(component, RK817_CODEC_DTOP_DIGEN_CLKE, 0x00);
> +
This appears to be configuring the CODEC in ways that I'd expect to be
configured via internal APIs and/or controls, especially the PLL setup
there looks like it's probably platform specific.
> +static struct rk817_reg_val_typ playback_power_up_list[] = {
> + {RK817_CODEC_AREF_RTCFG1, 0x40},
> + {RK817_CODEC_DDAC_POPD_DACST, 0x02},
> + {RK817_CODEC_DDAC_SR_LMT0, 0x02},
Similarly this looks like it's a hard coded register write sequence for
a specific platform.
> +/* For tiny alsa playback/capture path*/
> +static const char * const rk817_playback_path_mode[] = {
> + "OFF", "SPK", "HP", "SPK_HP"};
> +
> +static const char * const rk817_capture_path_mode[] = {
> + "MIC OFF", "MIC"};
The routing within the device should be mapped using DAPM rather than
with some custom control with hard coded paths and sequences.
> +static const struct regmap_config rk817_codec_regmap_config = {
> + .name = "rk817-codec",
> + .reg_bits = 8,
> + .val_bits = 8,
> + .reg_stride = 1,
> + .max_register = 0x4f,
> + .cache_type = REGCACHE_NONE,
> + .volatile_reg = rk817_volatile_register,
> + .writeable_reg = rk817_codec_register,
> + .readable_reg = rk817_codec_register,
> + .reg_defaults = rk817_reg_defaults,
> + .num_reg_defaults = ARRAY_SIZE(rk817_reg_defaults),
> +};
It's weird that there's a regmap configuration here rather than the
regmap being shared with the rest of the MFD.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://mailman.alsa-project.org/pipermail/alsa-devel/attachments/20210311/7cb9b72a/attachment-0001.sig>
More information about the Alsa-devel
mailing list