
On Mon, 14 May 2018 08:01:45 +1000 Simon Glass sjg@chromium.org wrote:
Hi Lukasz,
On 7 May 2018 at 06:26, Lukasz Majewski lukma@denx.de wrote:
This patch adds support for MC34708 PMIC, to be used with driver model (DM).
Signed-off-by: Lukasz Majewski lukma@denx.de
Changes in v2:
- Support for uclass private data with trasfer length
drivers/power/pmic/Kconfig | 7 +++ drivers/power/pmic/Makefile | 1 + drivers/power/pmic/mc34708.c | 101 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 drivers/power/pmic/mc34708.c
diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig index 40ab9f7fa5..d504c28b77 100644 --- a/drivers/power/pmic/Kconfig +++ b/drivers/power/pmic/Kconfig @@ -69,6 +69,13 @@ config DM_PMIC_MAX8998 This config enables implementation of driver-model pmic uclass features for PMIC MAX8998. The driver implements read/write operations.
+config DM_PMIC_MC34708
bool "Enable Driver Model for PMIC MC34708"
depends on DM_PMIC
help
This config enables implementation of driver-model pmic
uclass features
for PMIC MC34708. The driver implements read/write
operations. + config PMIC_MAX8997 bool "Enable Driver Model for PMIC MAX8997" depends on DM_PMIC diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile index ad32068b3a..418b5e7aee 100644 --- a/drivers/power/pmic/Makefile +++ b/drivers/power/pmic/Makefile @@ -8,6 +8,7 @@ obj-$(CONFIG_DM_PMIC) += pmic-uclass.o obj-$(CONFIG_DM_PMIC_MAX77686) += max77686.o obj-$(CONFIG_DM_PMIC_MAX8998) += max8998.o +obj-$(CONFIG_DM_PMIC_MC34708) += mc34708.o obj-$(CONFIG_$(SPL_)DM_PMIC_PFUZE100) += pfuze100.o obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o diff --git a/drivers/power/pmic/mc34708.c b/drivers/power/pmic/mc34708.c new file mode 100644 index 0000000000..d9d1a41802 --- /dev/null +++ b/drivers/power/pmic/mc34708.c @@ -0,0 +1,101 @@ +/*
- Copyright (C) 2018
- Lukasz Majewski, DENX Software Engineering, lukma@denx.de
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <dm.h> +#include <errno.h> +#include <i2c.h> +#include <power/pmic.h>
should be at end
+#include <fsl_pmic.h>
should be above i2c.h
+DECLARE_GLOBAL_DATA_PTR;
+static int mc34708_reg_count(struct udevice *dev) +{
return PMIC_NUM_OF_REGS;
+}
+static int mc34708_write(struct udevice *dev, uint reg, const u8 *buff,
int len)
+{
u8 buf[3] = { 0 };
int ret;
if (len != MC34708_TRANSFER_SIZE)
return -EINVAL;
buf[0] = buff[2];
buf[1] = buff[1];
buf[2] = buff[0];
What is going on here? It deserves a comment at least.
This is the data endianess conversion for this chip (as described in earlier reply). The upper layer (pmic-uclass) will receive data formatted in little endian.
This unification can be leveraged with pmic_read/write generic functions (as it is done latter).
ret = dm_i2c_write(dev, reg, buf, len);
if (ret)
printf("write error to device: %p register: %#x!",
dev, reg); +
return ret;
+}
Regards, Simon
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de