From: Przemyslaw Marczak <p.marczak@samsung.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V3 4/6] power: pmic: pfuze100 support driver model
Date: Wed, 12 Aug 2015 12:09:59 +0200 [thread overview]
Message-ID: <55CB1B77.7070907@samsung.com> (raw)
In-Reply-To: <1438937026-8731-5-git-send-email-Peng.Fan@freescale.com>
Hello,
On 08/07/2015 10:43 AM, Peng Fan wrote:
> 1. Support driver model for pfuze100.
> 2. Introduce a new Kconfig entry DM_PMIC_PFUZE100 for pfuze100
> 3. This driver intends to support PF100, PF200 and PF3000, so add
> the device id into the udevice_id array.
> 4. Rename PMIC_NUM_OF_REGS macro to PFUZE100_NUM_OF_REGS.
>
> Signed-off-by: Peng Fan <Peng.Fan@freescale.com>
> Cc: Przemyslaw Marczak <p.marczak@samsung.com>
> Cc: Simon Glass <sjg@chromium.org>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> ---
>
> Changes v3:
> Addressed Przemyslaw's comments:
> Keep the original driver.
> Use CONFIG_DM_PMIC_PFUZE100 in Makefile to cover the new driver.
> Discard the type cast for driver data.
>
> Changes v2:
> Addressed Przemyslaw's comments:
> Rename PMIC_NUM_OF_REGS to PFUZE100_NUM_OF_REGS
> Sort variables' order
> Define PFUZE100_REGULATOR_DRIVER for "pfuze100_regulator" in header file.
>
> drivers/power/pmic/Kconfig | 7 ++++
> drivers/power/pmic/Makefile | 1 +
> drivers/power/pmic/pfuze100.c | 96 +++++++++++++++++++++++++++++++++++++++++++
> include/power/pfuze100_pmic.h | 7 +++-
> 4 files changed, 110 insertions(+), 1 deletion(-)
> create mode 100644 drivers/power/pmic/pfuze100.c
>
> diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig
> index 164f421..0df91be 100644
> --- a/drivers/power/pmic/Kconfig
> +++ b/drivers/power/pmic/Kconfig
> @@ -10,6 +10,13 @@ config DM_PMIC
> - 'drivers/power/pmic/pmic-uclass.c'
> - 'include/power/pmic.h'
>
> +config DM_PMIC_PFUZE100
> + bool "Enable Driver Model for PMIC PFUZE100"
> + depends on DM_PMIC
> + ---help---
> + This config enables implementation of driver-model pmic uclass features
> + for PMIC PFUZE100. The driver implements read/write operations.
> +
> config DM_PMIC_MAX77686
> bool "Enable Driver Model for PMIC MAX77686"
> depends on DM_PMIC
> diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile
> index 8c1ce3d..f49b236 100644
> --- a/drivers/power/pmic/Makefile
> +++ b/drivers/power/pmic/Makefile
> @@ -7,6 +7,7 @@
>
> obj-$(CONFIG_DM_PMIC) += pmic-uclass.o
> obj-$(CONFIG_DM_PMIC_MAX77686) += max77686.o
> +obj-$(CONFIG_DM_PMIC_PFUZE100) += pfuze100.o
> obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o
> obj-$(CONFIG_POWER_LTC3676) += pmic_ltc3676.o
> obj-$(CONFIG_POWER_MAX8998) += pmic_max8998.o
> diff --git a/drivers/power/pmic/pfuze100.c b/drivers/power/pmic/pfuze100.c
> new file mode 100644
> index 0000000..3beb48e
> --- /dev/null
> +++ b/drivers/power/pmic/pfuze100.c
> @@ -0,0 +1,96 @@
> +/*
> + * Copyright (C) 2015 Freescale Semiconductor, Inc
> + * Peng Fan <Peng.Fan@freescale.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/pfuze100_pmic.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +static const struct pmic_child_info pmic_children_info[] = {
> + /* sw[x], swbst */
> + { .prefix = "s", .driver = PFUZE100_REGULATOR_DRIVER },
> + /* vgen[x], vsnvs, vcc, v33, vcc_sd */
> + { .prefix = "v", .driver = PFUZE100_REGULATOR_DRIVER },
> + { },
> +};
> +
> +static int pfuze100_reg_count(struct udevice *dev)
> +{
> + return PFUZE100_NUM_OF_REGS;
> +}
> +
> +static int pfuze100_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 pfuze100_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 pfuze100_bind(struct udevice *dev)
> +{
> + int children;
> + int regulators_node;
> + const void *blob = gd->fdt_blob;
> +
> + regulators_node = fdt_subnode_offset(blob, dev->of_offset,
> + "regulators");
> + if (regulators_node <= 0) {
> + debug("%s: %s regulators subnode not found!", __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)
> + debug("%s: %s - no child found\n", __func__, dev->name);
> +
> + /* Always return success for this device */
> + return 0;
> +}
> +
> +static struct dm_pmic_ops pfuze100_ops = {
> + .reg_count = pfuze100_reg_count,
> + .read = pfuze100_read,
> + .write = pfuze100_write,
> +};
> +
> +static const struct udevice_id pfuze100_ids[] = {
> + { .compatible = "fsl,pfuze100", .data = PFUZE100, },
> + { .compatible = "fsl,pfuze200", .data = PFUZE200, },
> + { .compatible = "fsl,pfuze3000", .data = PFUZE3000, },
> + { }
> +};
> +
> +U_BOOT_DRIVER(pmic_pfuze100) = {
> + .name = "pfuze100 pmic",
> + .id = UCLASS_PMIC,
> + .of_match = pfuze100_ids,
> + .bind = pfuze100_bind,
> + .ops = &pfuze100_ops,
> +};
> diff --git a/include/power/pfuze100_pmic.h b/include/power/pfuze100_pmic.h
> index cb10605..c40a976 100644
> --- a/include/power/pfuze100_pmic.h
> +++ b/include/power/pfuze100_pmic.h
> @@ -8,6 +8,11 @@
> #ifndef __PFUZE100_PMIC_H_
> #define __PFUZE100_PMIC_H_
>
> +/* Device ID */
> +enum {PFUZE100 = 0x10, PFUZE200 = 0x11, PFUZE3000 = 0x30};
> +
> +#define PFUZE100_REGULATOR_DRIVER "pfuze100_regulator"
> +
> /* PFUZE100 registers */
> enum {
> PFUZE100_DEVICEID = 0x00,
> @@ -54,7 +59,7 @@ enum {
> PFUZE100_VGEN5VOL = 0x70,
> PFUZE100_VGEN6VOL = 0x71,
>
> - PMIC_NUM_OF_REGS = 0x7f,
> + PFUZE100_NUM_OF_REGS = 0x7f,
> };
>
> /*
>
Applied to: u-boot-pmic.
Best regards,
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com
next prev parent reply other threads:[~2015-08-12 10:09 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-07 8:43 [U-Boot] [PATCH V3 0/5] power: pfuze100: support driver model and regulator Peng Fan
2015-08-07 8:43 ` [U-Boot] [PATCH V3 1/6] power: pfuze100 correct SWBST macro definition Peng Fan
2015-08-12 10:09 ` Przemyslaw Marczak
2015-08-07 8:43 ` [U-Boot] [PATCH V3 2/6] power: regulator use node name when no regulator-name Peng Fan
2015-08-07 15:39 ` Simon Glass
2015-08-12 10:09 ` Przemyslaw Marczak
2015-08-07 8:43 ` [U-Boot] [PATCH V3 3/6] power: regulator: update comments for regulator-name Peng Fan
2015-08-12 10:09 ` Przemyslaw Marczak
2015-08-07 8:43 ` [U-Boot] [PATCH V3 4/6] power: pmic: pfuze100 support driver model Peng Fan
2015-08-12 10:09 ` Przemyslaw Marczak [this message]
2015-08-07 8:43 ` [U-Boot] [PATCH V3 5/6] power: regulator: add pfuze100 support Peng Fan
2015-08-07 19:09 ` Simon Glass
2015-08-12 10:10 ` Przemyslaw Marczak
2015-08-07 8:43 ` [U-Boot] [PATCH V3 6/6] fsl: common: pfuze: no use original pfuze code if DM_PMIC Peng Fan
2015-08-12 10:10 ` Przemyslaw Marczak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55CB1B77.7070907@samsung.com \
--to=p.marczak@samsung.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.