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

Commit 051bf6d8 authored by Naveen Yadav's avatar Naveen Yadav
Browse files

clk: qcom: Update GCC driver for SDXPRAIRIE V2



Add the fixup function to reflect clock frequency
changes in SDXPRAIRIE V2.

Change-Id: Ib0256dcb2255a6b1da3ef43ed67f2df08fe9a3e9
Signed-off-by: default avatarNaveen Yadav <naveenky@codeaurora.org>
parent e2cce70f
Loading
Loading
Loading
Loading
+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");