f07e572f64
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>
61 lines
2.0 KiB
Diff
61 lines
2.0 KiB
Diff
From faeea753ba262e2a781570f9db23c5773c5d20e7 Mon Sep 17 00:00:00 2001
|
|
From: Maxime Ripard <maxime@cerno.tech>
|
|
Date: Mon, 23 Dec 2019 19:58:08 +0100
|
|
Subject: [PATCH] clk: bcm: rpi: Allow the driver to be probed by DT
|
|
|
|
The current firmware clock driver for the RaspberryPi can only be probed by
|
|
manually registering an associated platform_device.
|
|
|
|
While this works fine for cpufreq where the device gets attached a clkdev
|
|
lookup, it would be tedious to maintain a table of all the devices using
|
|
one of the clocks exposed by the firmware.
|
|
|
|
Since the DT on the other hand is the perfect place to store those
|
|
associations, make the firmware clocks driver probe-able through the device
|
|
tree so that we can represent it as a node.
|
|
|
|
Cc: Michael Turquette <mturquette@baylibre.com>
|
|
Cc: Stephen Boyd <sboyd@kernel.org>
|
|
Cc: linux-clk@vger.kernel.org
|
|
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|
---
|
|
drivers/clk/bcm/clk-raspberrypi.c | 11 ++++++++---
|
|
1 file changed, 8 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/clk/bcm/clk-raspberrypi.c
|
|
+++ b/drivers/clk/bcm/clk-raspberrypi.c
|
|
@@ -255,15 +255,13 @@ static int raspberrypi_clk_probe(struct
|
|
struct raspberrypi_clk *rpi;
|
|
int ret;
|
|
|
|
- firmware_node = of_find_compatible_node(NULL, NULL,
|
|
- "raspberrypi,bcm2835-firmware");
|
|
+ firmware_node = of_parse_phandle(dev->of_node, "raspberrypi,firmware", 0);
|
|
if (!firmware_node) {
|
|
dev_err(dev, "Missing firmware node\n");
|
|
return -ENOENT;
|
|
}
|
|
|
|
firmware = rpi_firmware_get(firmware_node);
|
|
- of_node_put(firmware_node);
|
|
if (!firmware)
|
|
return -EPROBE_DEFER;
|
|
|
|
@@ -300,9 +298,16 @@ static int raspberrypi_clk_remove(struct
|
|
return 0;
|
|
}
|
|
|
|
+static const struct of_device_id raspberrypi_clk_match[] = {
|
|
+ { .compatible = "raspberrypi,firmware-clocks" },
|
|
+ { },
|
|
+};
|
|
+MODULE_DEVICE_TABLE(of, raspberrypi_clk_match);
|
|
+
|
|
static struct platform_driver raspberrypi_clk_driver = {
|
|
.driver = {
|
|
.name = "raspberrypi-clk",
|
|
+ .of_match_table = raspberrypi_clk_match,
|
|
},
|
|
.probe = raspberrypi_clk_probe,
|
|
.remove = raspberrypi_clk_remove,
|