Loading arch/arm64/boot/dts/qcom/sdxprairie-v2.dtsi +4 −0 Original line number Diff line number Diff line Loading @@ -25,3 +25,7 @@ &blsp1_uart2b_hs { status = "okay"; }; &clock_gcc { compatible = "qcom,gcc-sdxprairie-v2", "syscon"; }; drivers/clk/qcom/gcc-sdxprairie.c +27 −0 Original line number Diff line number Diff line Loading @@ -630,6 +630,13 @@ static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = { { } }; static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src_v2[] = { F(19200000, P_BI_TCXO, 1, 0, 0), F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), F(230400000, P_GPLL5_OUT_MAIN, 3.5, 0, 0), { } }; static struct clk_rcg2 gcc_emac_ptp_clk_src = { .cmd_rcgr = 0x47038, .mnd_width = 0, Loading Loading @@ -840,6 +847,11 @@ static const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk_src[] = { { } }; static const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk_src_v2[] = { F(19200000, P_BI_TCXO, 1, 0, 0), { } }; static struct clk_rcg2 gcc_usb30_mock_utmi_clk_src = { .cmd_rcgr = 0xb03c, .mnd_width = 0, Loading Loading @@ -1882,15 +1894,25 @@ static const struct qcom_cc_desc gcc_sdxprairie_desc = { static const struct of_device_id gcc_sdxprairie_match_table[] = { { .compatible = "qcom,gcc-sdxprairie" }, { .compatible = "qcom,gcc-sdxprairie-v2" }, { } }; MODULE_DEVICE_TABLE(of, gcc_sdxprairie_match_table); static void gcc_sdxprairie_fixup_v2(void) { gcc_usb30_mock_utmi_clk_src.freq_tbl = ftbl_gcc_usb30_mock_utmi_clk_src_v2; gcc_usb30_mock_utmi_clk_src.clkr.hw.init->rate_max[VDD_MIN] = 19200000; gcc_emac_ptp_clk_src.freq_tbl = ftbl_gcc_emac_ptp_clk_src_v2; } static int gcc_sdxprairie_probe(struct platform_device *pdev) { struct clk *clk; struct device *dev = &pdev->dev; int ret = 0; bool is_v2; clk = devm_clk_get(dev, "bi_tcxo"); if (IS_ERR(clk)) { Loading Loading @@ -1921,6 +1943,11 @@ static int gcc_sdxprairie_probe(struct platform_device *pdev) return PTR_ERR(vdd_mx.regulator[0]); } is_v2 = of_device_is_compatible(pdev->dev.of_node, "qcom,gcc-sdxprairie-v2"); if (is_v2) gcc_sdxprairie_fixup_v2(); ret = qcom_cc_probe(pdev, &gcc_sdxprairie_desc); if (ret) { dev_err(&pdev->dev, "Failed to register GCC clocks\n"); Loading Loading
arch/arm64/boot/dts/qcom/sdxprairie-v2.dtsi +4 −0 Original line number Diff line number Diff line Loading @@ -25,3 +25,7 @@ &blsp1_uart2b_hs { status = "okay"; }; &clock_gcc { compatible = "qcom,gcc-sdxprairie-v2", "syscon"; };
drivers/clk/qcom/gcc-sdxprairie.c +27 −0 Original line number Diff line number Diff line Loading @@ -630,6 +630,13 @@ static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = { { } }; static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src_v2[] = { F(19200000, P_BI_TCXO, 1, 0, 0), F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), F(230400000, P_GPLL5_OUT_MAIN, 3.5, 0, 0), { } }; static struct clk_rcg2 gcc_emac_ptp_clk_src = { .cmd_rcgr = 0x47038, .mnd_width = 0, Loading Loading @@ -840,6 +847,11 @@ static const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk_src[] = { { } }; static const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk_src_v2[] = { F(19200000, P_BI_TCXO, 1, 0, 0), { } }; static struct clk_rcg2 gcc_usb30_mock_utmi_clk_src = { .cmd_rcgr = 0xb03c, .mnd_width = 0, Loading Loading @@ -1882,15 +1894,25 @@ static const struct qcom_cc_desc gcc_sdxprairie_desc = { static const struct of_device_id gcc_sdxprairie_match_table[] = { { .compatible = "qcom,gcc-sdxprairie" }, { .compatible = "qcom,gcc-sdxprairie-v2" }, { } }; MODULE_DEVICE_TABLE(of, gcc_sdxprairie_match_table); static void gcc_sdxprairie_fixup_v2(void) { gcc_usb30_mock_utmi_clk_src.freq_tbl = ftbl_gcc_usb30_mock_utmi_clk_src_v2; gcc_usb30_mock_utmi_clk_src.clkr.hw.init->rate_max[VDD_MIN] = 19200000; gcc_emac_ptp_clk_src.freq_tbl = ftbl_gcc_emac_ptp_clk_src_v2; } static int gcc_sdxprairie_probe(struct platform_device *pdev) { struct clk *clk; struct device *dev = &pdev->dev; int ret = 0; bool is_v2; clk = devm_clk_get(dev, "bi_tcxo"); if (IS_ERR(clk)) { Loading Loading @@ -1921,6 +1943,11 @@ static int gcc_sdxprairie_probe(struct platform_device *pdev) return PTR_ERR(vdd_mx.regulator[0]); } is_v2 = of_device_is_compatible(pdev->dev.of_node, "qcom,gcc-sdxprairie-v2"); if (is_v2) gcc_sdxprairie_fixup_v2(); ret = qcom_cc_probe(pdev, &gcc_sdxprairie_desc); if (ret) { dev_err(&pdev->dev, "Failed to register GCC clocks\n"); Loading