From 572d1d75487e3b8e8a40fec14e71b5fd685907c4 Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Thu, 28 Jul 2022 14:05:35 +0800 Subject: [PATCH] spi: rockchip-sfc: Support ACPI Change-Id: I84178e0945737945398d16ee59e4808a42cf1a99 Signed-off-by: Jon Lin --- drivers/spi/spi-rockchip-sfc.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/spi/spi-rockchip-sfc.c b/drivers/spi/spi-rockchip-sfc.c index a2a8f1abfaeb..595c9240deeb 100644 --- a/drivers/spi/spi-rockchip-sfc.c +++ b/drivers/spi/spi-rockchip-sfc.c @@ -8,6 +8,7 @@ * Jon Lin */ +#include #include #include #include @@ -626,7 +627,7 @@ static int rockchip_sfc_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op return ret; } - if (unlikely(mem->spi->max_speed_hz != sfc->frequency)) { + if (unlikely(mem->spi->max_speed_hz != sfc->frequency) && !has_acpi_companion(sfc->dev)) { ret = clk_set_rate(sfc->clk, mem->spi->max_speed_hz); if (ret) goto out; @@ -729,18 +730,28 @@ static int rockchip_sfc_probe(struct platform_device *pdev) if (IS_ERR(sfc->regbase)) return PTR_ERR(sfc->regbase); - sfc->clk = devm_clk_get(&pdev->dev, "clk_sfc"); + if (!has_acpi_companion(&pdev->dev)) + sfc->clk = devm_clk_get(&pdev->dev, "clk_sfc"); if (IS_ERR(sfc->clk)) { dev_err(&pdev->dev, "Failed to get sfc interface clk\n"); return PTR_ERR(sfc->clk); } - sfc->hclk = devm_clk_get(&pdev->dev, "hclk_sfc"); + if (!has_acpi_companion(&pdev->dev)) + sfc->hclk = devm_clk_get(&pdev->dev, "hclk_sfc"); if (IS_ERR(sfc->hclk)) { dev_err(&pdev->dev, "Failed to get sfc ahb clk\n"); return PTR_ERR(sfc->hclk); } + if (has_acpi_companion(&pdev->dev)) { + ret = device_property_read_u32(&pdev->dev, "clock-frequency", &sfc->frequency); + if (ret) { + dev_err(&pdev->dev, "Failed to find clock-frequency in ACPI\n"); + return ret; + } + } + sfc->use_dma = !of_property_read_bool(sfc->dev->of_node, "rockchip,sfc-no-dma");