Loading asoc/codecs/audio-ext-clk-up.c +35 −4 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ struct audio_ext_clk_priv { int clk_src; struct afe_clk_set clk_cfg; struct audio_ext_clk audio_clk; const char *clk_name; }; static inline struct audio_ext_clk_priv *to_audio_clk(struct clk_hw *hw) Loading Loading @@ -113,9 +114,34 @@ static void audio_ext_clk_unprepare(struct clk_hw *hw) iowrite32(0, pnctrl_info->base); } static u8 audio_ext_clk_get_parent(struct clk_hw *hw) { struct audio_ext_clk_priv *clk_priv = to_audio_clk(hw); int num_parents = clk_hw_get_num_parents(hw); const char * const *parent_names = hw->init->parent_names; u8 i = 0, ret = hw->init->num_parents + 1; if ((clk_priv->clk_src == AUDIO_EXT_CLK_PMI) && clk_priv->clk_name) { for (i = 0; i < num_parents; i++) { if (!strcmp(parent_names[i], clk_priv->clk_name)) ret = i; } pr_debug("%s: parent index = %u\n", __func__, ret); return ret; } else return 0; } static const struct clk_ops audio_ext_clk_ops = { .prepare = audio_ext_clk_prepare, .unprepare = audio_ext_clk_unprepare, .get_parent = audio_ext_clk_get_parent, }; static const char * const audio_ext_pmi_div_clk[] = { "qpnp_clkdiv_1", "pms405_div_clk1", "pm6150_div_clk1", }; static struct audio_ext_clk audio_clk_array[] = { Loading @@ -126,9 +152,9 @@ static struct audio_ext_clk audio_clk_array[] = { .div = 1, .hw.init = &(struct clk_init_data){ .name = "audio_ext_pmi_clk", .parent_names = (const char *[]) { "qpnp_clkdiv_1" }, .num_parents = 1, .parent_names = audio_ext_pmi_div_clk, .num_parents = ARRAY_SIZE(audio_ext_pmi_div_clk), .ops = &audio_ext_clk_ops, }, }, Loading Loading @@ -300,7 +326,7 @@ static int audio_ref_clk_probe(struct platform_device *pdev) __func__, clk_src); return -EINVAL; } clk_priv->clk_name = NULL; clk_priv->clk_src = clk_src; memcpy(&clk_priv->audio_clk, &audio_clk_array[clk_src], sizeof(struct audio_ext_clk)); Loading Loading @@ -329,6 +355,11 @@ static int audio_ref_clk_probe(struct platform_device *pdev) clk_priv->clk_cfg.clk_id, clk_priv->clk_src); platform_set_drvdata(pdev, clk_priv); ret = of_property_read_string(pdev->dev.of_node, "pmic-clock-names", &clk_priv->clk_name); if (ret) dev_dbg(&pdev->dev, "%s: could not find pmic clock names\n", __func__); /* * property qcom,use-pinctrl to be defined in DTSI to val 1 * for clock nodes using pinctrl Loading Loading
asoc/codecs/audio-ext-clk-up.c +35 −4 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ struct audio_ext_clk_priv { int clk_src; struct afe_clk_set clk_cfg; struct audio_ext_clk audio_clk; const char *clk_name; }; static inline struct audio_ext_clk_priv *to_audio_clk(struct clk_hw *hw) Loading Loading @@ -113,9 +114,34 @@ static void audio_ext_clk_unprepare(struct clk_hw *hw) iowrite32(0, pnctrl_info->base); } static u8 audio_ext_clk_get_parent(struct clk_hw *hw) { struct audio_ext_clk_priv *clk_priv = to_audio_clk(hw); int num_parents = clk_hw_get_num_parents(hw); const char * const *parent_names = hw->init->parent_names; u8 i = 0, ret = hw->init->num_parents + 1; if ((clk_priv->clk_src == AUDIO_EXT_CLK_PMI) && clk_priv->clk_name) { for (i = 0; i < num_parents; i++) { if (!strcmp(parent_names[i], clk_priv->clk_name)) ret = i; } pr_debug("%s: parent index = %u\n", __func__, ret); return ret; } else return 0; } static const struct clk_ops audio_ext_clk_ops = { .prepare = audio_ext_clk_prepare, .unprepare = audio_ext_clk_unprepare, .get_parent = audio_ext_clk_get_parent, }; static const char * const audio_ext_pmi_div_clk[] = { "qpnp_clkdiv_1", "pms405_div_clk1", "pm6150_div_clk1", }; static struct audio_ext_clk audio_clk_array[] = { Loading @@ -126,9 +152,9 @@ static struct audio_ext_clk audio_clk_array[] = { .div = 1, .hw.init = &(struct clk_init_data){ .name = "audio_ext_pmi_clk", .parent_names = (const char *[]) { "qpnp_clkdiv_1" }, .num_parents = 1, .parent_names = audio_ext_pmi_div_clk, .num_parents = ARRAY_SIZE(audio_ext_pmi_div_clk), .ops = &audio_ext_clk_ops, }, }, Loading Loading @@ -300,7 +326,7 @@ static int audio_ref_clk_probe(struct platform_device *pdev) __func__, clk_src); return -EINVAL; } clk_priv->clk_name = NULL; clk_priv->clk_src = clk_src; memcpy(&clk_priv->audio_clk, &audio_clk_array[clk_src], sizeof(struct audio_ext_clk)); Loading Loading @@ -329,6 +355,11 @@ static int audio_ref_clk_probe(struct platform_device *pdev) clk_priv->clk_cfg.clk_id, clk_priv->clk_src); platform_set_drvdata(pdev, clk_priv); ret = of_property_read_string(pdev->dev.of_node, "pmic-clock-names", &clk_priv->clk_name); if (ret) dev_dbg(&pdev->dev, "%s: could not find pmic clock names\n", __func__); /* * property qcom,use-pinctrl to be defined in DTSI to val 1 * for clock nodes using pinctrl Loading