mirror of
https://github.com/torvalds/linux.git
synced 2024-12-11 21:52:04 +00:00
soc: samsung: exynos-pmu: instantiate clkout driver as MFD
The Exynos clock output (clkout) driver uses same register address space (Power Management Unit address space) as Exynos PMU driver and same set of compatibles. It was modeled as clock provider instantiated with CLK_OF_DECLARE_DRIVER(). This however brings ordering problems and lack of probe deferral, therefore clkout driver should be converted to a regular module and instantiated as a child of PMU driver to be able to use existing compatibles and address space. Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org> Tested-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Reviewed-by: Stephen Boyd <sboyd@kernel.org> Link: https://lore.kernel.org/r/20201001165646.32279-2-krzk@kernel.org
This commit is contained in:
parent
f1118a28be
commit
93618e344a
@ -8,6 +8,7 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/mfd/core.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
@ -97,6 +98,10 @@ static const struct of_device_id exynos_pmu_of_device_ids[] = {
|
||||
{ /*sentinel*/ },
|
||||
};
|
||||
|
||||
static const struct mfd_cell exynos_pmu_devs[] = {
|
||||
{ .name = "exynos-clkout", },
|
||||
};
|
||||
|
||||
struct regmap *exynos_get_pmu_regmap(void)
|
||||
{
|
||||
struct device_node *np = of_find_matching_node(NULL,
|
||||
@ -110,6 +115,7 @@ EXPORT_SYMBOL_GPL(exynos_get_pmu_regmap);
|
||||
static int exynos_pmu_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
int ret;
|
||||
|
||||
pmu_base_addr = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(pmu_base_addr))
|
||||
@ -128,6 +134,11 @@ static int exynos_pmu_probe(struct platform_device *pdev)
|
||||
|
||||
platform_set_drvdata(pdev, pmu_context);
|
||||
|
||||
ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE, exynos_pmu_devs,
|
||||
ARRAY_SIZE(exynos_pmu_devs), NULL, 0, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (devm_of_platform_populate(dev))
|
||||
dev_err(dev, "Error populating children, reboot and poweroff might not work properly\n");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user