Re: [U-Boot] [PATCH v3 10/17] dm: pmic: add max77686 pmic driver

2015-03-29 Thread Simon Glass
Hi Przemyslaw,

On 24 March 2015 at 14:30, Przemyslaw Marczak p.marc...@samsung.com wrote:
 This is the implementation of driver model uclass pmic driver.
 The max77686 pmic driver implements read/write operations and driver
 bind method - to bind other pmic uclass devices as a parent pmic device.
 This driver provides pmic_platdata for also for child regulator.

 This driver will try to bind the regulator device with regulator driver.
 This should succeed if regulator driver is compiled.

 If no regulator driver found, then the pmic can still provide read/write
 operations, and can be used with pmic framework function calls.

 Signed-off-by: Przemyslaw Marczak p.marc...@samsung.com

Acked-by: Simon Glass s...@chromium.org

One nit below.

 ---
 Changes V2:
 - add implementation of pmic read/write
 - max77686: add new operations
 - max77686: header: change PMIC_NUM_OF_REGS to MAX77686_NUM_OF_REGS

 Changes V3:
 - pmic/max77686.c: call pmic_child_node_scan() to bind regulator device
 - remove use of pmic platdata
 - remove unused endian conversions
 - Kconfig: add max77686 pmic entry
 ---
  drivers/power/Kconfig  |  7 
  drivers/power/pmic/Makefile|  1 +
  drivers/power/pmic/max77686.c  | 76 
 ++
  drivers/power/pmic/pmic_max77686.c |  2 +-
  include/power/max77686_pmic.h  |  2 +-
  5 files changed, 86 insertions(+), 2 deletions(-)
  create mode 100644 drivers/power/pmic/max77686.c

 diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
 index 1e73c7a..c4d4c72 100644
 --- a/drivers/power/Kconfig
 +++ b/drivers/power/Kconfig
 @@ -66,6 +66,13 @@ config DM_PMIC
 So the call will looks like below:
 'pmic_write(regulator-parent, addr, value, len);'

 +config DM_PMIC_MAX77686
 +   bool Enable Driver Model for PMIC MAX77686
 +   depends on DM_PMIC
 +   ---help---
 +   This config enables implementation of driver-model pmic uclass 
 features
 +   for PMIC MAX77686. The driver implements read/write operations/

nit: '.' at end?

Regards,
Simon
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH v3 10/17] dm: pmic: add max77686 pmic driver

2015-03-24 Thread Przemyslaw Marczak
This is the implementation of driver model uclass pmic driver.
The max77686 pmic driver implements read/write operations and driver
bind method - to bind other pmic uclass devices as a parent pmic device.
This driver provides pmic_platdata for also for child regulator.

This driver will try to bind the regulator device with regulator driver.
This should succeed if regulator driver is compiled.

If no regulator driver found, then the pmic can still provide read/write
operations, and can be used with pmic framework function calls.

Signed-off-by: Przemyslaw Marczak p.marc...@samsung.com
---
Changes V2:
- add implementation of pmic read/write
- max77686: add new operations
- max77686: header: change PMIC_NUM_OF_REGS to MAX77686_NUM_OF_REGS

Changes V3:
- pmic/max77686.c: call pmic_child_node_scan() to bind regulator device
- remove use of pmic platdata
- remove unused endian conversions
- Kconfig: add max77686 pmic entry
---
 drivers/power/Kconfig  |  7 
 drivers/power/pmic/Makefile|  1 +
 drivers/power/pmic/max77686.c  | 76 ++
 drivers/power/pmic/pmic_max77686.c |  2 +-
 include/power/max77686_pmic.h  |  2 +-
 5 files changed, 86 insertions(+), 2 deletions(-)
 create mode 100644 drivers/power/pmic/max77686.c

diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
index 1e73c7a..c4d4c72 100644
--- a/drivers/power/Kconfig
+++ b/drivers/power/Kconfig
@@ -66,6 +66,13 @@ config DM_PMIC
So the call will looks like below:
'pmic_write(regulator-parent, addr, value, len);'
 
+config DM_PMIC_MAX77686
+   bool Enable Driver Model for PMIC MAX77686
+   depends on DM_PMIC
+   ---help---
+   This config enables implementation of driver-model pmic uclass features
+   for PMIC MAX77686. The driver implements read/write operations/
+
 config DM_REGULATOR
bool Enable Driver Model for REGULATOR drivers (UCLASS_REGULATOR)
depends on DM
diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile
index 985cfdb..242c767 100644
--- a/drivers/power/pmic/Makefile
+++ b/drivers/power/pmic/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_POWER_MAX8998) += pmic_max8998.o
 obj-$(CONFIG_POWER_MAX8997) += pmic_max8997.o
 obj-$(CONFIG_POWER_MUIC_MAX8997) += muic_max8997.o
 obj-$(CONFIG_POWER_MAX77686) += pmic_max77686.o
+obj-$(CONFIG_DM_PMIC_MAX77686) += max77686.o
 obj-$(CONFIG_POWER_PFUZE100) += pmic_pfuze100.o
 obj-$(CONFIG_POWER_TPS65090_I2C) += pmic_tps65090.o
 obj-$(CONFIG_POWER_TPS65090_EC) += pmic_tps65090_ec.o
diff --git a/drivers/power/pmic/max77686.c b/drivers/power/pmic/max77686.c
new file mode 100644
index 000..3193c73
--- /dev/null
+++ b/drivers/power/pmic/max77686.c
@@ -0,0 +1,76 @@
+/*
+ *  Copyright (C) 2014-2015 Samsung Electronics
+ *  Przemyslaw Marczak  p.marc...@samsung.com
+ *
+ * SPDX-License-Identifier:GPL-2.0+
+ */
+
+#include common.h
+#include fdtdec.h
+#include i2c.h
+#include dm.h
+#include power/pmic.h
+#include dm/device-internal.h
+#include dm/uclass-internal.h
+#include dm/root.h
+#include dm/lists.h
+#include power/max77686_pmic.h
+#include errno.h
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static int max77686_write(struct udevice *dev, uint reg, 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 max77686_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 max77686_bind(struct udevice *pmic)
+{
+   int ret;
+
+   ret = pmic_child_node_scan(pmic, voltage-regulators,
+regulator-compatible);
+   if (ret  0)
+   debug(%s: %s subnode scan error: %d.\n, __func__, pmic-name,
+ ret);
+   else
+   debug(%s: %s subnode found %d childs.\n, __func__, pmic-name,
+  ret);
+
+   /* Always return success for this device */
+   return 0;
+}
+
+static struct dm_pmic_ops max77686_ops = {
+   .reg_count = MAX77686_NUM_OF_REGS,
+   .read = max77686_read,
+   .write = max77686_write,
+};
+
+static const struct udevice_id max77686_ids[] = {
+   { .compatible = maxim,max77686},
+   { }
+};
+
+U_BOOT_DRIVER(pmic_max77686) = {
+   .name = max77686 pmic,
+   .id = UCLASS_PMIC,
+   .of_match = max77686_ids,
+   .bind = max77686_bind,
+   .ops = max77686_ops,
+};
diff --git a/drivers/power/pmic/pmic_max77686.c 
b/drivers/power/pmic/pmic_max77686.c
index 95b1a57..1ad810a 100644
--- a/drivers/power/pmic/pmic_max77686.c
+++ b/drivers/power/pmic/pmic_max77686.c
@@ -295,7 +295,7 @@ int