]> git.itanic.dy.fi Git - linux-stable/commitdiff
ASoC: mediatek: mt8183: Allow setting shared clocks from machine driver
authorNícolas F. R. A. Prado <nfraprado@collabora.com>
Thu, 8 Sep 2022 16:11:48 +0000 (12:11 -0400)
committerMark Brown <broonie@kernel.org>
Fri, 9 Sep 2022 17:48:55 +0000 (18:48 +0100)
Add a new function to configure the shared clock between two i2s ports,
and export it. This will allow the clock sharing to be set from the
machine driver instead of the devicetree.

Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20220908161154.648557-5-nfraprado@collabora.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/mediatek/mt8183/mt8183-afe-common.h
sound/soc/mediatek/mt8183/mt8183-dai-i2s.c

index b220e7a7db7e09be6ee11208f27d08dfea26de28..40ab48c1566c8cac33af206f9caae784855fab27 100644 (file)
@@ -99,6 +99,9 @@ unsigned int mt8183_general_rate_transform(struct device *dev,
 unsigned int mt8183_rate_transform(struct device *dev,
                                   unsigned int rate, int aud_blk);
 
+int mt8183_dai_i2s_set_share(struct mtk_base_afe *afe, const char *main_i2s_name,
+                            const char *secondary_i2s_name);
+
 /* dai register */
 int mt8183_dai_adda_register(struct mtk_base_afe *afe);
 int mt8183_dai_pcm_register(struct mtk_base_afe *afe);
index 138591d71ebda11ddbcfc9d09fcc31beaccbadd0..8902ff608d26a07ed9e51775adf50b8e26d57f49 100644 (file)
@@ -1026,6 +1026,32 @@ static int mt8183_dai_i2s_get_share(struct mtk_base_afe *afe)
        return 0;
 }
 
+/**
+ * mt8183_dai_i2s_set_share() - Set up I2S ports to share a single clock.
+ * @afe: Pointer to &struct mtk_base_afe
+ * @main_i2s_name: The name of the I2S port that will provide the clock
+ * @secondary_i2s_name: The name of the I2S port that will use this clock
+ */
+int mt8183_dai_i2s_set_share(struct mtk_base_afe *afe, const char *main_i2s_name,
+                            const char *secondary_i2s_name)
+{
+       struct mtk_afe_i2s_priv *secondary_i2s_priv;
+       int main_i2s_id;
+
+       secondary_i2s_priv = get_i2s_priv_by_name(afe, secondary_i2s_name);
+       if (!secondary_i2s_priv)
+               return -EINVAL;
+
+       main_i2s_id = get_i2s_id_by_name(afe, main_i2s_name);
+       if (main_i2s_id < 0)
+               return main_i2s_id;
+
+       secondary_i2s_priv->share_i2s_id = main_i2s_id;
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(mt8183_dai_i2s_set_share);
+
 static int mt8183_dai_i2s_set_priv(struct mtk_base_afe *afe)
 {
        struct mt8183_afe_private *afe_priv = afe->platform_priv;