Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4c42d693 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "clk: qcom: Update GCC driver for SDXPRAIRIE V2"

parents 31db6382 051bf6d8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -25,3 +25,7 @@
&blsp1_uart2b_hs {
	status = "okay";
};

&clock_gcc {
	compatible = "qcom,gcc-sdxprairie-v2", "syscon";
};
+27 −0
Original line number Diff line number Diff line
@@ -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,
@@ -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,
@@ -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)) {
@@ -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");