mirror of
https://github.com/torvalds/linux.git
synced 2024-12-20 01:52:13 +00:00
clk: qcom: Add support to LPASS AON_CC Glitch Free Mux clocks
LPASS Always ON Clock controller has one GFM mux to control VA and TX clocks to codec macro on LPASS. This patch adds support to this mux. Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Link: https://lore.kernel.org/r/20201026120221.18984-5-srinivas.kandagatla@linaro.org Signed-off-by: Stephen Boyd <sboyd@kernel.org>
This commit is contained in:
parent
a2d8f50780
commit
794aa56a78
@ -18,6 +18,7 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <dt-bindings/clock/qcom,sm8250-lpass-audiocc.h>
|
||||
#include <dt-bindings/clock/qcom,sm8250-lpass-aoncc.h>
|
||||
|
||||
struct lpass_gfm {
|
||||
struct device *dev;
|
||||
@ -65,6 +66,46 @@ static const struct clk_ops clk_gfm_ops = {
|
||||
.determine_rate = __clk_mux_determine_rate,
|
||||
};
|
||||
|
||||
static struct clk_gfm lpass_gfm_va_mclk = {
|
||||
.mux_reg = 0x20000,
|
||||
.mux_mask = BIT(0),
|
||||
.hw.init = &(struct clk_init_data) {
|
||||
.name = "VA_MCLK",
|
||||
.ops = &clk_gfm_ops,
|
||||
.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
|
||||
.num_parents = 2,
|
||||
.parent_data = (const struct clk_parent_data[]){
|
||||
{
|
||||
.index = 0,
|
||||
.fw_name = "LPASS_CLK_ID_TX_CORE_MCLK",
|
||||
}, {
|
||||
.index = 1,
|
||||
.fw_name = "LPASS_CLK_ID_VA_CORE_MCLK",
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_gfm lpass_gfm_tx_npl = {
|
||||
.mux_reg = 0x20000,
|
||||
.mux_mask = BIT(0),
|
||||
.hw.init = &(struct clk_init_data) {
|
||||
.name = "TX_NPL",
|
||||
.ops = &clk_gfm_ops,
|
||||
.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
|
||||
.parent_data = (const struct clk_parent_data[]){
|
||||
{
|
||||
.index = 0,
|
||||
.fw_name = "LPASS_CLK_ID_TX_CORE_NPL_MCLK",
|
||||
}, {
|
||||
.index = 1,
|
||||
.fw_name = "LPASS_CLK_ID_VA_CORE_2X_MCLK",
|
||||
},
|
||||
},
|
||||
.num_parents = 2,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_gfm lpass_gfm_wsa_mclk = {
|
||||
.mux_reg = 0x220d8,
|
||||
.mux_mask = BIT(0),
|
||||
@ -145,6 +186,19 @@ static struct clk_gfm lpass_gfm_rx_npl = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_gfm *aoncc_gfm_clks[] = {
|
||||
[LPASS_CDC_VA_MCLK] = &lpass_gfm_va_mclk,
|
||||
[LPASS_CDC_TX_NPL] = &lpass_gfm_tx_npl,
|
||||
};
|
||||
|
||||
static struct clk_hw_onecell_data aoncc_hw_onecell_data = {
|
||||
.hws = {
|
||||
[LPASS_CDC_VA_MCLK] = &lpass_gfm_va_mclk.hw,
|
||||
[LPASS_CDC_TX_NPL] = &lpass_gfm_tx_npl.hw,
|
||||
},
|
||||
.num = ARRAY_SIZE(aoncc_gfm_clks),
|
||||
};
|
||||
|
||||
static struct clk_gfm *audiocc_gfm_clks[] = {
|
||||
[LPASS_CDC_WSA_NPL] = &lpass_gfm_wsa_npl,
|
||||
[LPASS_CDC_WSA_MCLK] = &lpass_gfm_wsa_mclk,
|
||||
@ -172,6 +226,11 @@ static struct lpass_gfm_data audiocc_data = {
|
||||
.gfm_clks = audiocc_gfm_clks,
|
||||
};
|
||||
|
||||
static struct lpass_gfm_data aoncc_data = {
|
||||
.onecell_data = &aoncc_hw_onecell_data,
|
||||
.gfm_clks = aoncc_gfm_clks,
|
||||
};
|
||||
|
||||
static int lpass_gfm_clk_driver_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct lpass_gfm_data *data;
|
||||
@ -233,6 +292,10 @@ pm_clk_err:
|
||||
}
|
||||
|
||||
static const struct of_device_id lpass_gfm_clk_match_table[] = {
|
||||
{
|
||||
.compatible = "qcom,sm8250-lpass-aoncc",
|
||||
.data = &aoncc_data,
|
||||
},
|
||||
{
|
||||
.compatible = "qcom,sm8250-lpass-audiocc",
|
||||
.data = &audiocc_data,
|
||||
|
Loading…
Reference in New Issue
Block a user