mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-01-25 11:25:17 +00:00
1e94b46f73
This old patch was marked as deferred. Bring it back to life, to continue towards the removal of common.h Move this out of the common header and include it only where needed. Signed-off-by: Simon Glass <sjg@chromium.org>
87 lines
2.1 KiB
C
87 lines
2.1 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* (C) Copyright 2019 Texas Instruments Incorporated, <www.ti.com>
|
|
* Keerthy <j-keerthy@ti.com>
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <fdtdec.h>
|
|
#include <errno.h>
|
|
#include <dm.h>
|
|
#include <i2c.h>
|
|
#include <log.h>
|
|
#include <linux/printk.h>
|
|
#include <power/pmic.h>
|
|
#include <power/regulator.h>
|
|
#include <power/tps65941.h>
|
|
#include <dm/device.h>
|
|
|
|
static const struct pmic_child_info pmic_children_info[] = {
|
|
{ .prefix = "ldo", .driver = TPS65941_LDO_DRIVER },
|
|
{ .prefix = "buck", .driver = TPS65941_BUCK_DRIVER },
|
|
{ },
|
|
};
|
|
|
|
static int tps65941_write(struct udevice *dev, uint reg, const uint8_t *buff,
|
|
int len)
|
|
{
|
|
if (dm_i2c_write(dev, reg, buff, len)) {
|
|
pr_err("write error to device: %p register: %#x!\n", dev, reg);
|
|
return -EIO;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int tps65941_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
|
|
{
|
|
if (dm_i2c_read(dev, reg, buff, len)) {
|
|
pr_err("read error from device: %p register: %#x!\n", dev, reg);
|
|
return -EIO;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int tps65941_bind(struct udevice *dev)
|
|
{
|
|
ofnode regulators_node;
|
|
int children;
|
|
|
|
regulators_node = dev_read_subnode(dev, "regulators");
|
|
if (!ofnode_valid(regulators_node)) {
|
|
debug("%s: %s regulators subnode not found!\n", __func__,
|
|
dev->name);
|
|
return -ENXIO;
|
|
}
|
|
|
|
debug("%s: '%s' - found regulators subnode\n", __func__, dev->name);
|
|
|
|
children = pmic_bind_children(dev, regulators_node, pmic_children_info);
|
|
if (!children)
|
|
printf("%s: %s - no child found\n", __func__, dev->name);
|
|
|
|
/* Probe all the child devices */
|
|
return dm_scan_fdt_dev(dev);
|
|
}
|
|
|
|
static struct dm_pmic_ops tps65941_ops = {
|
|
.read = tps65941_read,
|
|
.write = tps65941_write,
|
|
};
|
|
|
|
static const struct udevice_id tps65941_ids[] = {
|
|
{ .compatible = "ti,tps659411", .data = TPS659411 },
|
|
{ .compatible = "ti,tps659412", .data = TPS659411 },
|
|
{ .compatible = "ti,tps659413", .data = TPS659413 },
|
|
{ .compatible = "ti,lp876441", .data = LP876441 },
|
|
{ }
|
|
};
|
|
|
|
U_BOOT_DRIVER(pmic_tps65941) = {
|
|
.name = "tps65941_pmic",
|
|
.id = UCLASS_PMIC,
|
|
.of_match = tps65941_ids,
|
|
.bind = tps65941_bind,
|
|
.ops = &tps65941_ops,
|
|
};
|