mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.4 KiB
59 lines
1.4 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
/* |
|
* Copyright (c) 2019 BayLibre, SAS. |
|
* Author: Jerome Brunet <[email protected]> |
|
*/ |
|
|
|
#include <linux/clk-provider.h> |
|
#include <linux/of_device.h> |
|
#include <linux/platform_device.h> |
|
#include <linux/mfd/syscon.h> |
|
#include <linux/regmap.h> |
|
#include <linux/module.h> |
|
|
|
#include "clk-regmap.h" |
|
#include "meson-eeclk.h" |
|
|
|
int meson_eeclkc_probe(struct platform_device *pdev) |
|
{ |
|
const struct meson_eeclkc_data *data; |
|
struct device *dev = &pdev->dev; |
|
struct regmap *map; |
|
int ret, i; |
|
|
|
data = of_device_get_match_data(dev); |
|
if (!data) |
|
return -EINVAL; |
|
|
|
/* Get the hhi system controller node */ |
|
map = syscon_node_to_regmap(of_get_parent(dev->of_node)); |
|
if (IS_ERR(map)) { |
|
dev_err(dev, |
|
"failed to get HHI regmap\n"); |
|
return PTR_ERR(map); |
|
} |
|
|
|
if (data->init_count) |
|
regmap_multi_reg_write(map, data->init_regs, data->init_count); |
|
|
|
/* Populate regmap for the regmap backed clocks */ |
|
for (i = 0; i < data->regmap_clk_num; i++) |
|
data->regmap_clks[i]->map = map; |
|
|
|
for (i = 0; i < data->hw_onecell_data->num; i++) { |
|
/* array might be sparse */ |
|
if (!data->hw_onecell_data->hws[i]) |
|
continue; |
|
|
|
ret = devm_clk_hw_register(dev, data->hw_onecell_data->hws[i]); |
|
if (ret) { |
|
dev_err(dev, "Clock registration failed\n"); |
|
return ret; |
|
} |
|
} |
|
|
|
return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, |
|
data->hw_onecell_data); |
|
} |
|
EXPORT_SYMBOL_GPL(meson_eeclkc_probe); |
|
MODULE_LICENSE("GPL v2");
|
|
|