Loading asoc/codecs/audio-ext-clk-up.c +44 −2 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. /* * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #include <linux/kernel.h> Loading @@ -9,6 +10,8 @@ #include <linux/of.h> #include <linux/clk.h> #include <linux/clk-provider.h> #include <linux/gpio.h> #include <linux/of_gpio.h> #include "../../../drivers/clk/qcom/common.h" #include <linux/pinctrl/consumer.h> #include <linux/platform_device.h> Loading @@ -29,6 +32,7 @@ enum { AUDIO_EXT_CLK_LPASS_CORE_HW_VOTE, AUDIO_EXT_CLK_LPASS8, AUDIO_EXT_CLK_LPASS_AUDIO_HW_VOTE, AUDIO_EXT_CLK_PM660_PMI, AUDIO_EXT_CLK_LPASS_MAX, AUDIO_EXT_CLK_EXTERNAL_PLL = AUDIO_EXT_CLK_LPASS_MAX, AUDIO_EXT_CLK_MAX, Loading @@ -44,6 +48,7 @@ struct pinctrl_info { struct audio_ext_clk { struct pinctrl_info pnctrl_info; struct clk_fixed_factor fact; int gpio; }; struct audio_ext_clk_priv { Loading Loading @@ -387,6 +392,19 @@ static struct audio_ext_clk audio_clk_array[] = { }, }, }, { .gpio = -EINVAL, .fact = { .mult = 1, .div = 1, .hw.init = &(struct clk_init_data){ .name = "audio_ext_pm660_pmi_clk", .parent_names = (const char *[]){ "div_clk1" }, .num_parents = 1, .ops = &audio_ext_clk_dummy_ops, }, }, }, }; static int audio_get_pinctrl(struct platform_device *pdev) Loading Loading @@ -510,6 +528,7 @@ static int audio_ref_clk_probe(struct platform_device *pdev) int ret; struct audio_ext_clk_priv *clk_priv; u32 clk_freq = 0, clk_id = 0, clk_src = 0, use_pinctrl = 0; int clk_gpio; clk_priv = devm_kzalloc(&pdev->dev, sizeof(*clk_priv), GFP_KERNEL); if (!clk_priv) Loading Loading @@ -581,11 +600,30 @@ static int audio_ref_clk_probe(struct platform_device *pdev) } } clk_gpio = of_get_named_gpio(pdev->dev.of_node, "qcom,audio-ref-clk-gpio", 0); if (clk_gpio > 0) { ret = gpio_request(clk_gpio, "EXT_CLK"); if (ret) { dev_err(&pdev->dev, "Request ext clk gpio failed %d, err:%d\n", clk_gpio, ret); return ret; } if (of_property_read_bool(pdev->dev.of_node, "qcom,node_has_rpm_clock")) { clk_priv->audio_clk.gpio = clk_gpio; } } ret = audio_get_clk_data(pdev); if (ret) { dev_err(&pdev->dev, "%s: clk_init is failed\n", __func__); if (use_pinctrl) audio_put_pinctrl(pdev); if (clk_priv->audio_clk.gpio > 0) gpio_free(clk_priv->audio_clk.gpio); return ret; } return 0; Loading @@ -593,7 +631,11 @@ static int audio_ref_clk_probe(struct platform_device *pdev) static int audio_ref_clk_remove(struct platform_device *pdev) { struct audio_ext_clk_priv *clk_priv = platform_get_drvdata(pdev); audio_put_pinctrl(pdev); if (clk_priv->audio_clk.gpio > 0) gpio_free(clk_priv->audio_clk.gpio); return 0; } Loading Loading
asoc/codecs/audio-ext-clk-up.c +44 −2 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. /* * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #include <linux/kernel.h> Loading @@ -9,6 +10,8 @@ #include <linux/of.h> #include <linux/clk.h> #include <linux/clk-provider.h> #include <linux/gpio.h> #include <linux/of_gpio.h> #include "../../../drivers/clk/qcom/common.h" #include <linux/pinctrl/consumer.h> #include <linux/platform_device.h> Loading @@ -29,6 +32,7 @@ enum { AUDIO_EXT_CLK_LPASS_CORE_HW_VOTE, AUDIO_EXT_CLK_LPASS8, AUDIO_EXT_CLK_LPASS_AUDIO_HW_VOTE, AUDIO_EXT_CLK_PM660_PMI, AUDIO_EXT_CLK_LPASS_MAX, AUDIO_EXT_CLK_EXTERNAL_PLL = AUDIO_EXT_CLK_LPASS_MAX, AUDIO_EXT_CLK_MAX, Loading @@ -44,6 +48,7 @@ struct pinctrl_info { struct audio_ext_clk { struct pinctrl_info pnctrl_info; struct clk_fixed_factor fact; int gpio; }; struct audio_ext_clk_priv { Loading Loading @@ -387,6 +392,19 @@ static struct audio_ext_clk audio_clk_array[] = { }, }, }, { .gpio = -EINVAL, .fact = { .mult = 1, .div = 1, .hw.init = &(struct clk_init_data){ .name = "audio_ext_pm660_pmi_clk", .parent_names = (const char *[]){ "div_clk1" }, .num_parents = 1, .ops = &audio_ext_clk_dummy_ops, }, }, }, }; static int audio_get_pinctrl(struct platform_device *pdev) Loading Loading @@ -510,6 +528,7 @@ static int audio_ref_clk_probe(struct platform_device *pdev) int ret; struct audio_ext_clk_priv *clk_priv; u32 clk_freq = 0, clk_id = 0, clk_src = 0, use_pinctrl = 0; int clk_gpio; clk_priv = devm_kzalloc(&pdev->dev, sizeof(*clk_priv), GFP_KERNEL); if (!clk_priv) Loading Loading @@ -581,11 +600,30 @@ static int audio_ref_clk_probe(struct platform_device *pdev) } } clk_gpio = of_get_named_gpio(pdev->dev.of_node, "qcom,audio-ref-clk-gpio", 0); if (clk_gpio > 0) { ret = gpio_request(clk_gpio, "EXT_CLK"); if (ret) { dev_err(&pdev->dev, "Request ext clk gpio failed %d, err:%d\n", clk_gpio, ret); return ret; } if (of_property_read_bool(pdev->dev.of_node, "qcom,node_has_rpm_clock")) { clk_priv->audio_clk.gpio = clk_gpio; } } ret = audio_get_clk_data(pdev); if (ret) { dev_err(&pdev->dev, "%s: clk_init is failed\n", __func__); if (use_pinctrl) audio_put_pinctrl(pdev); if (clk_priv->audio_clk.gpio > 0) gpio_free(clk_priv->audio_clk.gpio); return ret; } return 0; Loading @@ -593,7 +631,11 @@ static int audio_ref_clk_probe(struct platform_device *pdev) static int audio_ref_clk_remove(struct platform_device *pdev) { struct audio_ext_clk_priv *clk_priv = platform_get_drvdata(pdev); audio_put_pinctrl(pdev); if (clk_priv->audio_clk.gpio > 0) gpio_free(clk_priv->audio_clk.gpio); return 0; } Loading