-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
power: pmic: lp873x: Add the base pmic support
Add support to bind the regulators/child nodes with the pmic. Signed-off-by: Keerthy <j-keerthy@ti.com> Reviewed-by: Simon Glass <sjg@chromium.org>
- Loading branch information
Showing
4 changed files
with
113 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
/* | ||
* (C) Copyright 2016 Texas Instruments Incorporated, <www.ti.com> | ||
* Keerthy <j-keerthy@ti.com> | ||
* | ||
* SPDX-License-Identifier: GPL-2.0+ | ||
*/ | ||
|
||
#include <common.h> | ||
#include <fdtdec.h> | ||
#include <errno.h> | ||
#include <dm.h> | ||
#include <i2c.h> | ||
#include <power/pmic.h> | ||
#include <power/regulator.h> | ||
#include <power/lp873x.h> | ||
#include <dm/device.h> | ||
|
||
DECLARE_GLOBAL_DATA_PTR; | ||
|
||
static const struct pmic_child_info pmic_children_info[] = { | ||
{ .prefix = "ldo", .driver = LP873X_LDO_DRIVER }, | ||
{ .prefix = "buck", .driver = LP873X_BUCK_DRIVER }, | ||
{ }, | ||
}; | ||
|
||
static int lp873x_write(struct udevice *dev, uint reg, const uint8_t *buff, | ||
int len) | ||
{ | ||
if (dm_i2c_write(dev, reg, buff, len)) { | ||
error("write error to device: %p register: %#x!", dev, reg); | ||
return -EIO; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
static int lp873x_read(struct udevice *dev, uint reg, uint8_t *buff, int len) | ||
{ | ||
if (dm_i2c_read(dev, reg, buff, len)) { | ||
error("read error from device: %p register: %#x!", dev, reg); | ||
return -EIO; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
static int lp873x_bind(struct udevice *dev) | ||
{ | ||
int regulators_node; | ||
const void *blob = gd->fdt_blob; | ||
int children; | ||
int node = dev->of_offset; | ||
|
||
regulators_node = fdt_subnode_offset(blob, node, "regulators"); | ||
|
||
if (regulators_node <= 0) { | ||
printf("%s: %s reg subnode not found!", __func__, dev->name); | ||
return -ENXIO; | ||
} | ||
|
||
children = pmic_bind_children(dev, regulators_node, pmic_children_info); | ||
if (!children) | ||
printf("%s: %s - no child found\n", __func__, dev->name); | ||
|
||
/* Always return success for this device */ | ||
return 0; | ||
} | ||
|
||
static struct dm_pmic_ops lp873x_ops = { | ||
.read = lp873x_read, | ||
.write = lp873x_write, | ||
}; | ||
|
||
static const struct udevice_id lp873x_ids[] = { | ||
{ .compatible = "ti,lp8732", .data = LP8732 }, | ||
{ .compatible = "ti,lp8733" , .data = LP8733 }, | ||
{ } | ||
}; | ||
|
||
U_BOOT_DRIVER(pmic_lp873x) = { | ||
.name = "lp873x_pmic", | ||
.id = UCLASS_PMIC, | ||
.of_match = lp873x_ids, | ||
.bind = lp873x_bind, | ||
.ops = &lp873x_ops, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
#define LP8732 0x0 | ||
#define LP8733 0x1 | ||
|
||
#define LP873X_LDO_NUM 2 | ||
#define LP873X_BUCK_NUM 2 | ||
|
||
/* Drivers name */ | ||
#define LP873X_LDO_DRIVER "lp873x_ldo" | ||
#define LP873X_BUCK_DRIVER "lp873x_buck" | ||
|
||
#define LP873X_BUCK_VOLT_MASK 0xFF | ||
#define LP873X_BUCK_VOLT_MAX_HEX 0xFF | ||
#define LP873X_BUCK_VOLT_MAX 3360000 | ||
#define LP873X_BUCK_MODE_MASK 0x1 | ||
|
||
#define LP873X_LDO_VOLT_MASK 0x1F | ||
#define LP873X_LDO_VOLT_MAX_HEX 0x19 | ||
#define LP873X_LDO_VOLT_MAX 3300000 | ||
#define LP873X_LDO_MODE_MASK 0x1 |