mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
62b7f5931c
bcm2708: boot tested on RPi B+ v1.2
bcm2709: boot tested on RPi 3B v1.2 and RPi 4B v1.1 4G
bcm2710: boot tested on RPi 3B v1.2
bcm2711: boot tested on RPi 4B v1.1 4G
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry-picked from commit f07e572f64
)
145 lines
4.2 KiB
Diff
145 lines
4.2 KiB
Diff
From 5272bad5ff927362e5d12da82eb819a8d1444da6 Mon Sep 17 00:00:00 2001
|
|
From: Maxime Ripard <maxime@cerno.tech>
|
|
Date: Fri, 7 Feb 2020 16:30:01 +0100
|
|
Subject: [PATCH] clk: bcm: rpi: Make the PLLB registration function
|
|
return a clk_hw
|
|
|
|
The raspberrypi_register_pllb has been returning an integer so far to
|
|
notify whether the functions has exited successfully or not.
|
|
|
|
However, the OF provider functions in the clock framework require access to
|
|
the clk_hw structure so that we can expose those clocks to device tree
|
|
consumers.
|
|
|
|
Since we'll want that for the future clocks, let's return a clk_hw pointer
|
|
instead of the return code.
|
|
|
|
Cc: Michael Turquette <mturquette@baylibre.com>
|
|
Cc: linux-clk@vger.kernel.org
|
|
Reviewed-by: Stephen Boyd <sboyd@kernel.org>
|
|
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|
---
|
|
drivers/clk/bcm/clk-raspberrypi.c | 40 +++++++++++++++++--------------
|
|
1 file changed, 22 insertions(+), 18 deletions(-)
|
|
|
|
--- a/drivers/clk/bcm/clk-raspberrypi.c
|
|
+++ b/drivers/clk/bcm/clk-raspberrypi.c
|
|
@@ -190,7 +190,7 @@ static const struct clk_ops raspberrypi_
|
|
.determine_rate = raspberrypi_pll_determine_rate,
|
|
};
|
|
|
|
-static int raspberrypi_register_pllb(struct raspberrypi_clk *rpi)
|
|
+static struct clk_hw *raspberrypi_register_pllb(struct raspberrypi_clk *rpi)
|
|
{
|
|
struct raspberrypi_clk_data *data;
|
|
struct clk_init_data init = {};
|
|
@@ -199,7 +199,7 @@ static int raspberrypi_register_pllb(str
|
|
|
|
data = devm_kzalloc(rpi->dev, sizeof(*data), GFP_KERNEL);
|
|
if (!data)
|
|
- return -ENOMEM;
|
|
+ return ERR_PTR(-ENOMEM);
|
|
data->rpi = rpi;
|
|
data->id = RPI_FIRMWARE_ARM_CLK_ID;
|
|
|
|
@@ -217,7 +217,7 @@ static int raspberrypi_register_pllb(str
|
|
if (ret) {
|
|
dev_err(rpi->dev, "Failed to get %s min freq: %d\n",
|
|
init.name, ret);
|
|
- return ret;
|
|
+ return ERR_PTR(ret);
|
|
}
|
|
|
|
ret = raspberrypi_clock_property(rpi->firmware, data,
|
|
@@ -226,13 +226,13 @@ static int raspberrypi_register_pllb(str
|
|
if (ret) {
|
|
dev_err(rpi->dev, "Failed to get %s max freq: %d\n",
|
|
init.name, ret);
|
|
- return ret;
|
|
+ return ERR_PTR(ret);
|
|
}
|
|
|
|
if (!min_rate || !max_rate) {
|
|
dev_err(rpi->dev, "Unexpected frequency range: min %u, max %u\n",
|
|
min_rate, max_rate);
|
|
- return -EINVAL;
|
|
+ return ERR_PTR(-EINVAL);
|
|
}
|
|
|
|
dev_info(rpi->dev, "CPU frequency range: min %u, max %u\n",
|
|
@@ -243,7 +243,11 @@ static int raspberrypi_register_pllb(str
|
|
|
|
data->hw.init = &init;
|
|
|
|
- return devm_clk_hw_register(rpi->dev, &data->hw);
|
|
+ ret = devm_clk_hw_register(rpi->dev, &data->hw);
|
|
+ if (ret)
|
|
+ return ERR_PTR(ret);
|
|
+
|
|
+ return &data->hw;
|
|
}
|
|
|
|
static struct clk_fixed_factor raspberrypi_clk_pllb_arm = {
|
|
@@ -258,14 +262,14 @@ static struct clk_fixed_factor raspberry
|
|
},
|
|
};
|
|
|
|
-static int raspberrypi_register_pllb_arm(struct raspberrypi_clk *rpi)
|
|
+static struct clk_hw *raspberrypi_register_pllb_arm(struct raspberrypi_clk *rpi)
|
|
{
|
|
int ret;
|
|
|
|
ret = devm_clk_hw_register(rpi->dev, &raspberrypi_clk_pllb_arm.hw);
|
|
if (ret) {
|
|
dev_err(rpi->dev, "Failed to initialize pllb_arm\n");
|
|
- return ret;
|
|
+ return ERR_PTR(ret);
|
|
}
|
|
|
|
ret = devm_clk_hw_register_clkdev(rpi->dev,
|
|
@@ -273,10 +277,10 @@ static int raspberrypi_register_pllb_arm
|
|
NULL, "cpu0");
|
|
if (ret) {
|
|
dev_err(rpi->dev, "Failed to initialize clkdev\n");
|
|
- return ret;
|
|
+ return ERR_PTR(ret);
|
|
}
|
|
|
|
- return 0;
|
|
+ return &raspberrypi_clk_pllb_arm.hw;
|
|
}
|
|
|
|
static int raspberrypi_clk_probe(struct platform_device *pdev)
|
|
@@ -285,7 +289,7 @@ static int raspberrypi_clk_probe(struct
|
|
struct device *dev = &pdev->dev;
|
|
struct rpi_firmware *firmware;
|
|
struct raspberrypi_clk *rpi;
|
|
- int ret;
|
|
+ struct clk_hw *hw;
|
|
|
|
firmware_node = of_parse_phandle(dev->of_node, "raspberrypi,firmware", 0);
|
|
if (!firmware_node) {
|
|
@@ -305,15 +309,15 @@ static int raspberrypi_clk_probe(struct
|
|
rpi->firmware = firmware;
|
|
platform_set_drvdata(pdev, rpi);
|
|
|
|
- ret = raspberrypi_register_pllb(rpi);
|
|
- if (ret) {
|
|
- dev_err(dev, "Failed to initialize pllb, %d\n", ret);
|
|
- return ret;
|
|
+ hw = raspberrypi_register_pllb(rpi);
|
|
+ if (IS_ERR(hw)) {
|
|
+ dev_err(dev, "Failed to initialize pllb, %ld\n", PTR_ERR(hw));
|
|
+ return PTR_ERR(hw);
|
|
}
|
|
|
|
- ret = raspberrypi_register_pllb_arm(rpi);
|
|
- if (ret)
|
|
- return ret;
|
|
+ hw = raspberrypi_register_pllb_arm(rpi);
|
|
+ if (IS_ERR(hw))
|
|
+ return PTR_ERR(hw);
|
|
|
|
rpi->cpufreq = platform_device_register_data(dev, "raspberrypi-cpufreq",
|
|
-1, NULL, 0);
|