51 lines
1.6 KiB
Diff
51 lines
1.6 KiB
Diff
Add refclock and tcxoclock as clock providers in WiLink. These clocks
|
|
are not accesible outside the WiLink module, but they are registered
|
|
in the clock framework anyway. Only the WiLink chip consumes these
|
|
clocks.
|
|
|
|
In theory, the WiLink chip could be connected to external clocks
|
|
instead of using these internal clocks, so make the clock consumer
|
|
code generic enough. If external clocks are used, then the internal
|
|
clock device tree nodes are not necessary, but the external ones must
|
|
be specified.
|
|
|
|
Signed-off-by: Luciano Coelho <coelho@ti.com>
|
|
Reviewed-by: Felipe Balbi <balbi@ti.com>
|
|
|
|
--- a/drivers/net/wireless/ti/wlcore/sdio.c
|
|
+++ b/drivers/net/wireless/ti/wlcore/sdio.c
|
|
@@ -34,6 +34,7 @@
|
|
#include <linux/wl12xx.h>
|
|
#include <linux/pm_runtime.h>
|
|
#include <linux/printk.h>
|
|
+#include <linux/clk-provider.h>
|
|
|
|
#include "wlcore.h"
|
|
#include "wl12xx_80211.h"
|
|
@@ -214,10 +215,15 @@ static struct wl1271_if_operations sdio_
|
|
.set_block_size = wl1271_sdio_set_block_size,
|
|
};
|
|
|
|
+static const struct of_device_id wlcore_sdio_of_clk_match_table[] = {
|
|
+ { .compatible = "ti,wilink-clock" },
|
|
+};
|
|
+
|
|
static struct wl12xx_platform_data *wlcore_get_pdata_from_of(struct device *dev)
|
|
{
|
|
struct wl12xx_platform_data *pdata;
|
|
struct device_node *np = dev->of_node;
|
|
+ struct device_node *clock_node;
|
|
|
|
if (!np) {
|
|
np = of_find_matching_node(NULL, dev->driver->of_match_table);
|
|
@@ -241,6 +247,9 @@ static struct wl12xx_platform_data *wlco
|
|
goto out_free;
|
|
}
|
|
|
|
+ for_each_matching_node(clock_node, wlcore_sdio_of_clk_match_table)
|
|
+ of_fixed_clk_setup(clock_node);
|
|
+
|
|
goto out;
|
|
|
|
out_free:
|