Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d3ab5ec authored by Linus Walleij's avatar Linus Walleij
Browse files

ARM: u300: set up board power from device tree



This adds support for setting up the board power from the
device tree on the U300. We use a board-specific node in the
device tree for the S365 board and bind a regulator for the
board power to this node.

Cc: Mark Brown <broonie@kernel.org>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent ae87bb8e
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -7,3 +7,16 @@ or board power regulator supplies.
Required root node property:

compatible="stericsson,u300";

Boards with the U300 SoC include:

S365 "Small Board U365":

Required node: s365

Example:

s365 {
	compatible = "stericsson,s365";
	vana15-supply = <&ab3100_ldo_d_reg>;
};
+39 −3
Original line number Diff line number Diff line
@@ -10,9 +10,14 @@
#include <linux/device.h>
#include <linux/signal.h>
#include <linux/err.h>
#include <linux/of.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/consumer.h>
/* Those are just for writing in syscon */
#include <linux/io.h>
#include <asm/mach-types.h>
#include <mach/hardware.h>
#include <mach/syscon.h>

@@ -47,13 +52,17 @@ void u300_pm_poweroff(void)
/*
 * Hog the regulators needed to power up the board.
 */
static int __init u300_init_boardpower(void)
static int __init __u300_init_boardpower(struct platform_device *pdev)
{
	int err;
	u32 val;

	pr_info("U300: setting up board power\n");
	if (pdev)
		main_power_15 = regulator_get(&pdev->dev, "vana15");
	else
		main_power_15 = regulator_get(NULL, "vana15");

	if (IS_ERR(main_power_15)) {
		pr_err("could not get vana15");
		return PTR_ERR(main_power_15);
@@ -82,7 +91,34 @@ static int __init u300_init_boardpower(void)
	return 0;
}

static int __init s365_board_probe(struct platform_device *pdev)
{
	return __u300_init_boardpower(pdev);
}

static const struct of_device_id s365_board_match[] = {
	{ .compatible = "stericsson,s365" },
	{},
};

static struct platform_driver s365_board_driver = {
	.driver		= {
		.name   = "s365-board",
		.owner  = THIS_MODULE,
		.of_match_table = s365_board_match,
	},
};

/*
 * So at module init time we hog the regulator!
 */
module_init(u300_init_boardpower);
static int __init u300_init_boardpower(void)
{
	if (of_have_populated_dt())
		return platform_driver_probe(&s365_board_driver,
					     s365_board_probe);
	/* Only call this on non-DT boots */
	return __u300_init_boardpower(NULL);
}

device_initcall(u300_init_boardpower);