Re: [U-Boot] [PATCH V2 05/11] dm: pmic: add s2mps11 PMIC I/O driver

2015-10-13 Thread Przemyslaw Marczak

Hi Simon,

On 10/03/2015 04:28 PM, Simon Glass wrote:

Hi Przemyslaw,

On 21 September 2015 at 13:26, Przemyslaw Marczak  wrote:

This driver allows I/O operations on the Samsung S2MPS11 PMIC,
which provides lots of LDO/BUCK outputs.

To enable it, update defconfig with:
- CONFIG_PMIC_S2MPS11
and additional, if were not defined:
- CONFIG_CMD_PMIC
- CONFIG_ERRNO_STR

The binding info: doc/device-tree-bindings/pmic/s2mps11.txt

Signed-off-by: Przemyslaw Marczak 
---
Changes V2:
- remove "DM" prefix from config name
- fix word mistake in binding description
---
  doc/device-tree-bindings/pmic/s2mps11.txt |  17 +
  drivers/power/pmic/Kconfig|  14 
  drivers/power/pmic/Makefile   |   1 +
  drivers/power/pmic/s2mps11.c  |  60 
  include/power/s2mps11.h   | 109 ++
  5 files changed, 201 insertions(+)
  create mode 100644 doc/device-tree-bindings/pmic/s2mps11.txt
  create mode 100644 drivers/power/pmic/s2mps11.c
  create mode 100644 include/power/s2mps11.h


Reviewed-by: Simon Glass 

But please see nit below.



diff --git a/doc/device-tree-bindings/pmic/s2mps11.txt 
b/doc/device-tree-bindings/pmic/s2mps11.txt
new file mode 100644
index 000..422f14f
--- /dev/null
+++ b/doc/device-tree-bindings/pmic/s2mps11.txt
@@ -0,0 +1,17 @@
+SAMSUNG, S2MPS11 PMIC
+
+This file describes the binding info for the PMIC driver:
+- drivers/power/pmic/s2mps11.c
+
+Required properties:
+- compatible: "samsung,s2mps11-pmic"
+- reg = 0x66
+
+With those two properties, the pmic device can be used for read/write only.
+
+Example:
+
+s2mps11@66 {
+   compatible = "samsung,s2mps11-pmic";
+   reg = <0x66>;
+};
diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig
index 547fd1a..fb29843 100644
--- a/drivers/power/pmic/Kconfig
+++ b/drivers/power/pmic/Kconfig
@@ -33,6 +33,20 @@ config DM_PMIC_MAX77686
 This config enables implementation of driver-model pmic uclass features
 for PMIC MAX77686. The driver implements read/write operations.

+config PMIC_S2MPS11
+   bool "Enable Driver Model for PMIC Samsung S2MPS11"
+   depends on DM_PMIC
+   ---help---
+   The Samsung S2MPS11 PMIC provides:
+- 38 adjustable LDO regulators
+- 9 High-Efficiency Buck Converters
+- 1 BuckBoost Converter
+- RTC with two alarms
+- Backup battery charger
+- I2C Configuration Interface
+   This driver provides access to I/O interface only.
+   Binding info: doc/device-tree-bindings/pmic/s2mps11.txt
+
  config DM_PMIC_SANDBOX
 bool "Enable Driver Model for emulated Sandbox PMIC "
 depends on DM_PMIC
diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile
index 00fde71..91e78f8 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_PFUZE100) += pfuze100.o
+obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o
  obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o
  obj-$(CONFIG_PMIC_ACT8846) += act8846.o
  obj-$(CONFIG_PMIC_TPS65090) += tps65090.o
diff --git a/drivers/power/pmic/s2mps11.c b/drivers/power/pmic/s2mps11.c
new file mode 100644
index 000..7e28402
--- /dev/null
+++ b/drivers/power/pmic/s2mps11.c
@@ -0,0 +1,60 @@
+/*
+ *  Copyright (C) 2015 Samsung Electronics
+ *  Przemyslaw Marczak  
+ *
+ * SPDX-License-Identifier:GPL-2.0+
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static int s2mps11_reg_count(struct udevice *dev)
+{
+   return S2MPS11_REG_COUNT;
+}
+
+static int s2mps11_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;


Should return the value of dm_i2c_write(). Also below.



Right, will fix.


+   }
+
+   return 0;
+}
+
+static int s2mps11_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 struct dm_pmic_ops s2mps11_ops = {
+   .reg_count = s2mps11_reg_count,
+   .read = s2mps11_read,
+   .write = s2mps11_write,
+};
+
+static const struct udevice_id s2mps11_ids[] = {
+   { .compatible = "samsung,s2mps11-pmic" },
+   { }
+};
+
+U_BOOT_DRIVER(pmic_s2mps11) = {
+   .name = "s2mps11_pmic",
+   .id = UCLASS_PMIC,
+   .of_match = s2mps11_ids,
+   .ops = _ops,
+};
diff --git a/include/power/s2mps11.h b/include/power/s2mps11.h
new file mode 100644
index 

Re: [U-Boot] [PATCH V2 05/11] dm: pmic: add s2mps11 PMIC I/O driver

2015-10-03 Thread Simon Glass
Hi Przemyslaw,

On 21 September 2015 at 13:26, Przemyslaw Marczak  wrote:
> This driver allows I/O operations on the Samsung S2MPS11 PMIC,
> which provides lots of LDO/BUCK outputs.
>
> To enable it, update defconfig with:
> - CONFIG_PMIC_S2MPS11
> and additional, if were not defined:
> - CONFIG_CMD_PMIC
> - CONFIG_ERRNO_STR
>
> The binding info: doc/device-tree-bindings/pmic/s2mps11.txt
>
> Signed-off-by: Przemyslaw Marczak 
> ---
> Changes V2:
> - remove "DM" prefix from config name
> - fix word mistake in binding description
> ---
>  doc/device-tree-bindings/pmic/s2mps11.txt |  17 +
>  drivers/power/pmic/Kconfig|  14 
>  drivers/power/pmic/Makefile   |   1 +
>  drivers/power/pmic/s2mps11.c  |  60 
>  include/power/s2mps11.h   | 109 
> ++
>  5 files changed, 201 insertions(+)
>  create mode 100644 doc/device-tree-bindings/pmic/s2mps11.txt
>  create mode 100644 drivers/power/pmic/s2mps11.c
>  create mode 100644 include/power/s2mps11.h

Reviewed-by: Simon Glass 

But please see nit below.

>
> diff --git a/doc/device-tree-bindings/pmic/s2mps11.txt 
> b/doc/device-tree-bindings/pmic/s2mps11.txt
> new file mode 100644
> index 000..422f14f
> --- /dev/null
> +++ b/doc/device-tree-bindings/pmic/s2mps11.txt
> @@ -0,0 +1,17 @@
> +SAMSUNG, S2MPS11 PMIC
> +
> +This file describes the binding info for the PMIC driver:
> +- drivers/power/pmic/s2mps11.c
> +
> +Required properties:
> +- compatible: "samsung,s2mps11-pmic"
> +- reg = 0x66
> +
> +With those two properties, the pmic device can be used for read/write only.
> +
> +Example:
> +
> +s2mps11@66 {
> +   compatible = "samsung,s2mps11-pmic";
> +   reg = <0x66>;
> +};
> diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig
> index 547fd1a..fb29843 100644
> --- a/drivers/power/pmic/Kconfig
> +++ b/drivers/power/pmic/Kconfig
> @@ -33,6 +33,20 @@ config DM_PMIC_MAX77686
> This config enables implementation of driver-model pmic uclass 
> features
> for PMIC MAX77686. The driver implements read/write operations.
>
> +config PMIC_S2MPS11
> +   bool "Enable Driver Model for PMIC Samsung S2MPS11"
> +   depends on DM_PMIC
> +   ---help---
> +   The Samsung S2MPS11 PMIC provides:
> +- 38 adjustable LDO regulators
> +- 9 High-Efficiency Buck Converters
> +- 1 BuckBoost Converter
> +- RTC with two alarms
> +- Backup battery charger
> +- I2C Configuration Interface
> +   This driver provides access to I/O interface only.
> +   Binding info: doc/device-tree-bindings/pmic/s2mps11.txt
> +
>  config DM_PMIC_SANDBOX
> bool "Enable Driver Model for emulated Sandbox PMIC "
> depends on DM_PMIC
> diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile
> index 00fde71..91e78f8 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_PFUZE100) += pfuze100.o
> +obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o
>  obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o
>  obj-$(CONFIG_PMIC_ACT8846) += act8846.o
>  obj-$(CONFIG_PMIC_TPS65090) += tps65090.o
> diff --git a/drivers/power/pmic/s2mps11.c b/drivers/power/pmic/s2mps11.c
> new file mode 100644
> index 000..7e28402
> --- /dev/null
> +++ b/drivers/power/pmic/s2mps11.c
> @@ -0,0 +1,60 @@
> +/*
> + *  Copyright (C) 2015 Samsung Electronics
> + *  Przemyslaw Marczak  
> + *
> + * SPDX-License-Identifier:GPL-2.0+
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +static int s2mps11_reg_count(struct udevice *dev)
> +{
> +   return S2MPS11_REG_COUNT;
> +}
> +
> +static int s2mps11_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;

Should return the value of dm_i2c_write(). Also below.

> +   }
> +
> +   return 0;
> +}
> +
> +static int s2mps11_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 struct dm_pmic_ops s2mps11_ops = {
> +   .reg_count = s2mps11_reg_count,
> +   .read = s2mps11_read,
> +   .write = s2mps11_write,
> +};
> +
> +static const struct udevice_id s2mps11_ids[] = {
> +   { .compatible = "samsung,s2mps11-pmic" },
> +   { }
> +};
> +
> +U_BOOT_DRIVER(pmic_s2mps11) = {
> +   

[U-Boot] [PATCH V2 05/11] dm: pmic: add s2mps11 PMIC I/O driver

2015-09-21 Thread Przemyslaw Marczak
This driver allows I/O operations on the Samsung S2MPS11 PMIC,
which provides lots of LDO/BUCK outputs.

To enable it, update defconfig with:
- CONFIG_PMIC_S2MPS11
and additional, if were not defined:
- CONFIG_CMD_PMIC
- CONFIG_ERRNO_STR

The binding info: doc/device-tree-bindings/pmic/s2mps11.txt

Signed-off-by: Przemyslaw Marczak 
---
Changes V2:
- remove "DM" prefix from config name
- fix word mistake in binding description
---
 doc/device-tree-bindings/pmic/s2mps11.txt |  17 +
 drivers/power/pmic/Kconfig|  14 
 drivers/power/pmic/Makefile   |   1 +
 drivers/power/pmic/s2mps11.c  |  60 
 include/power/s2mps11.h   | 109 ++
 5 files changed, 201 insertions(+)
 create mode 100644 doc/device-tree-bindings/pmic/s2mps11.txt
 create mode 100644 drivers/power/pmic/s2mps11.c
 create mode 100644 include/power/s2mps11.h

diff --git a/doc/device-tree-bindings/pmic/s2mps11.txt 
b/doc/device-tree-bindings/pmic/s2mps11.txt
new file mode 100644
index 000..422f14f
--- /dev/null
+++ b/doc/device-tree-bindings/pmic/s2mps11.txt
@@ -0,0 +1,17 @@
+SAMSUNG, S2MPS11 PMIC
+
+This file describes the binding info for the PMIC driver:
+- drivers/power/pmic/s2mps11.c
+
+Required properties:
+- compatible: "samsung,s2mps11-pmic"
+- reg = 0x66
+
+With those two properties, the pmic device can be used for read/write only.
+
+Example:
+
+s2mps11@66 {
+   compatible = "samsung,s2mps11-pmic";
+   reg = <0x66>;
+};
diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig
index 547fd1a..fb29843 100644
--- a/drivers/power/pmic/Kconfig
+++ b/drivers/power/pmic/Kconfig
@@ -33,6 +33,20 @@ config DM_PMIC_MAX77686
This config enables implementation of driver-model pmic uclass features
for PMIC MAX77686. The driver implements read/write operations.
 
+config PMIC_S2MPS11
+   bool "Enable Driver Model for PMIC Samsung S2MPS11"
+   depends on DM_PMIC
+   ---help---
+   The Samsung S2MPS11 PMIC provides:
+- 38 adjustable LDO regulators
+- 9 High-Efficiency Buck Converters
+- 1 BuckBoost Converter
+- RTC with two alarms
+- Backup battery charger
+- I2C Configuration Interface
+   This driver provides access to I/O interface only.
+   Binding info: doc/device-tree-bindings/pmic/s2mps11.txt
+
 config DM_PMIC_SANDBOX
bool "Enable Driver Model for emulated Sandbox PMIC "
depends on DM_PMIC
diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile
index 00fde71..91e78f8 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_PFUZE100) += pfuze100.o
+obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o
 obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o
 obj-$(CONFIG_PMIC_ACT8846) += act8846.o
 obj-$(CONFIG_PMIC_TPS65090) += tps65090.o
diff --git a/drivers/power/pmic/s2mps11.c b/drivers/power/pmic/s2mps11.c
new file mode 100644
index 000..7e28402
--- /dev/null
+++ b/drivers/power/pmic/s2mps11.c
@@ -0,0 +1,60 @@
+/*
+ *  Copyright (C) 2015 Samsung Electronics
+ *  Przemyslaw Marczak  
+ *
+ * SPDX-License-Identifier:GPL-2.0+
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static int s2mps11_reg_count(struct udevice *dev)
+{
+   return S2MPS11_REG_COUNT;
+}
+
+static int s2mps11_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 s2mps11_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 struct dm_pmic_ops s2mps11_ops = {
+   .reg_count = s2mps11_reg_count,
+   .read = s2mps11_read,
+   .write = s2mps11_write,
+};
+
+static const struct udevice_id s2mps11_ids[] = {
+   { .compatible = "samsung,s2mps11-pmic" },
+   { }
+};
+
+U_BOOT_DRIVER(pmic_s2mps11) = {
+   .name = "s2mps11_pmic",
+   .id = UCLASS_PMIC,
+   .of_match = s2mps11_ids,
+   .ops = _ops,
+};
diff --git a/include/power/s2mps11.h b/include/power/s2mps11.h
new file mode 100644
index 000..5da4719
--- /dev/null
+++ b/include/power/s2mps11.h
@@ -0,0 +1,109 @@
+#ifndef __S2MPS11__H__
+#define __S2MPS11__H__
+
+enum s2mps11_reg {
+   S2MPS11_REG_ID = 0,
+   S2MPS11_REG_INT1,
+   S2MPS11_REG_INT2,
+   S2MPS11_REG_INT3,
+   S2MPS11_REG_INT1M,
+   S2MPS11_REG_INT2M,
+   S2MPS11_REG_INT3M,