sa8775p was being handled by the generic clock stub, which just no-ops every request. Give it a real driver that provides support for get/set rate.
Signed-off-by: Balaji Selvanathan <[email protected]> --- drivers/clk/clk-stub.c | 1 - drivers/clk/qcom/clock-sa8775p.c | 46 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/drivers/clk/clk-stub.c b/drivers/clk/clk-stub.c index 4a6c71016da..f7d42892423 100644 --- a/drivers/clk/clk-stub.c +++ b/drivers/clk/clk-stub.c @@ -51,7 +51,6 @@ static struct clk_ops stub_clk_ops = { static const struct udevice_id stub_clk_ids[] = { { .compatible = "qcom,qcs615-rpmh-clk" }, { .compatible = "qcom,rpmcc" }, - { .compatible = "qcom,sa8775p-rpmh-clk" }, { .compatible = "qcom,sc7180-rpmh-clk" }, { .compatible = "qcom,sc7280-rpmh-clk" }, { .compatible = "qcom,sdm670-rpmh-clk" }, diff --git a/drivers/clk/qcom/clock-sa8775p.c b/drivers/clk/qcom/clock-sa8775p.c index 7eec4aeae48..49b94078a41 100644 --- a/drivers/clk/qcom/clock-sa8775p.c +++ b/drivers/clk/qcom/clock-sa8775p.c @@ -13,8 +13,14 @@ #include <linux/bug.h> #include <linux/bitops.h> #include <dt-bindings/clock/qcom,sa8775p-gcc.h> +#include <dt-bindings/clock/qcom,rpmh.h> #include "clock-qcom.h" +#define TCXO_RATE 38400000 + +/* RPMH_CXO_CLK = bi_tcxo_div2 on sa8775p */ +#define TCXO_DIV2_RATE (TCXO_RATE / 2) + #define USB30_PRIM_MOCK_UTMI_CLK_CMD_RCGR 0x1b040 #define USB30_PRIM_MASTER_CLK_CMD_RCGR 0x1b028 #define USB3_PRIM_PHY_AUX_CMD_RCGR 0x1b06c @@ -275,3 +281,43 @@ U_BOOT_DRIVER(gcc_sa8775p) = { .bind = qcom_cc_bind, .flags = DM_FLAG_PRE_RELOC | DM_FLAG_DEFAULT_PD_CTRL_OFF, }; + +static ulong sa8775p_rpmh_clk_set_rate(struct clk *clk, ulong rate) +{ + return (clk->rate = rate); +} + +static ulong sa8775p_rpmh_clk_get_rate(struct clk *clk) +{ + switch (clk->id) { + case RPMH_CXO_CLK: + return TCXO_DIV2_RATE; + default: + return clk->rate; + } +} + +static int sa8775p_rpmh_clk_nop(struct clk *clk) +{ + return 0; +} + +static struct clk_ops sa8775p_rpmh_clk_ops = { + .set_rate = sa8775p_rpmh_clk_set_rate, + .get_rate = sa8775p_rpmh_clk_get_rate, + .enable = sa8775p_rpmh_clk_nop, + .disable = sa8775p_rpmh_clk_nop, +}; + +static const struct udevice_id sa8775p_rpmh_clk_ids[] = { + { .compatible = "qcom,sa8775p-rpmh-clk" }, + { } +}; + +U_BOOT_DRIVER(sa8775p_rpmh_clk) = { + .name = "sa8775p_rpmh_clk", + .id = UCLASS_CLK, + .of_match = sa8775p_rpmh_clk_ids, + .ops = &sa8775p_rpmh_clk_ops, + .flags = DM_FLAG_DEFAULT_PD_CTRL_OFF, +}; -- 2.34.1
