Re: [U-Boot] [PATCH v4] sun6i: Add basic axp221 driver

2015-01-05 Thread Hans de Goede

Hi,

On 02-01-15 06:17, Siarhei Siamashka wrote:

On Mon, 10 Nov 2014 14:11:51 +0100
Hans de Goede hdego...@redhat.com wrote:


From: Oliver Schinagl oli...@schinagl.nl

The A31 uses the AXP221 pmic for various voltages.

Signed-off-by: Oliver Schinagl oli...@schinagl.nl
Signed-off-by: Hans de Goede hdego...@redhat.com
--
Changes in v2:
-Rebase
Changes in v3:
-Add support for all dldo and aldo-s
-Add Kconfig option to select building AXP221 and to select voltage of
  dldo and aldo-s
Changes in v4:
-Add axp221_setbits helper function
-Use symbolic names for enabled bits in CTRL1 - CTRL3 registers
---


[...]


diff --git a/include/axp221.h b/include/axp221.h
new file mode 100644
index 000..e3b4409
--- /dev/null
+++ b/include/axp221.h
@@ -0,0 +1,50 @@
+/*
+ * (C) Copyright 2013 Oliver Schinagl oli...@schinagl.nl
+ *
+ * X-Powers AXP221 Power Management IC driver
+ *
+ * SPDX-License-Identifier:GPL-2.0+
+ */
+
+#define AXP221_CHIP_ADDR 0x68
+#define AXP221_CTRL_ADDR 0x3e
+#define AXP221_INIT_DATA 0x3e
+
+#define AXP221_CHIP_ID 0x03
+#define AXP221_OUTPUT_CTRL10x10
+#define AXP221_OUTPUT_CTRL1_ALDO1_EN   (1  6)
+#define AXP221_OUTPUT_CTRL1_ALDO2_EN   (1  7)
+#define AXP221_OUTPUT_CTRL20x12
+#define AXP221_OUTPUT_CTRL2_DLDO1_EN   (1  3)
+#define AXP221_OUTPUT_CTRL2_DLDO2_EN   (1  4)
+#define AXP221_OUTPUT_CTRL2_DLDO3_EN   (1  5)
+#define AXP221_OUTPUT_CTRL2_DLDO4_EN   (1  6)
+#define AXP221_OUTPUT_CTRL2_DCDC1_EN   (1  7)
+#define AXP221_OUTPUT_CTRL30x13
+#define AXP221_OUTPUT_CTRL3_ALDO3_EN   (1  7)
+#define AXP221_DLDO1_CTRL  0x15
+#define AXP221_DLDO2_CTRL  0x16
+#define AXP221_DLDO3_CTRL  0x17
+#define AXP221_DLDO4_CTRL  0x18
+#define AXP221_DCDC1_CTRL  0x21
+#define AXP221_DCDC2_CTRL  0x22
+#define AXP221_DCDC3_CTRL  0x23
+#define AXP221_DCDC4_CTRL  0x24
+#define AXP221_DCDC5_CTRL  0x25
+#define AXP221_ALDO1_CTRL  0x28
+#define AXP221_ALDO2_CTRL  0x28


The register offset of ALDO2 seems to be incorrect here (same as ALDO1):
 http://linux-sunxi.org/AXP221#Reg_29h:_ALDO2_output_voltage

In the current u-boot master, ALDO2 is only used by:
configs/Mele_M9_defconfig:+S:CONFIG_AXP221_ALDO1_VOLT=3300


Ouch, good catch, I'll send a fix out right away and I'll try
to get this included in v2015.01.

Regards,

Hans




$ cat Mele_M9_defconfig
CONFIG_SPL=y
CONFIG_SYS_EXTRA_OPTIONS=USB_EHCI,SUNXI_GMAC
CONFIG_FDTFILE=sun6i-a31-m9.dtb
+S:CONFIG_ARM=y
+S:CONFIG_ARCH_SUNXI=y
+S:CONFIG_MACH_SUN6I=y
+S:CONFIG_TARGET_MELE_M9=y
# Ethernet phy power
+S:CONFIG_AXP221_DLDO1_VOLT=3300
# USB hub power
+S:CONFIG_AXP221_DLDO4_VOLT=3300
# Wifi power
+S:CONFIG_AXP221_ALDO1_VOLT=3300
# HDMI power ?
+S:CONFIG_AXP221_ALDO2_VOLT=1800
+S:CONFIG_AXP221_ALDO3_VOLT=3000
# Vbus gpio for usb1
+S:CONFIG_USB1_VBUS_PIN=PC27
# No Vbus gpio for usb2
+S:CONFIG_USB2_VBUS_PIN=

It means that the code in boards/sunxi/board.c is likely to
set 1.8V for ALDO1 instead of 3.3V:

#if CONFIG_AXP221_ALDO1_VOLT != -1
power_failed |= axp221_set_aldo1(CONFIG_AXP221_ALDO1_VOLT);
#endif
#if CONFIG_AXP221_ALDO2_VOLT != -1
power_failed |= axp221_set_aldo2(CONFIG_AXP221_ALDO2_VOLT);
#endif

Does Wifi actually work on Mele M9? And if not, then is this
something that needs to be fixed in the v2015.01 release?

Also ALDO1/ALDO2 have much heavier use in the u-boot-sunxi
next branch.


+#define AXP221_ALDO3_CTRL  0x2a
+
+int axp221_set_dcdc1(unsigned int mvolt);
+int axp221_set_dcdc2(unsigned int mvolt);
+int axp221_set_dcdc3(unsigned int mvolt);
+int axp221_set_dcdc4(unsigned int mvolt);
+int axp221_set_dcdc5(unsigned int mvolt);
+int axp221_set_dldo1(unsigned int mvolt);
+int axp221_set_dldo2(unsigned int mvolt);
+int axp221_set_dldo3(unsigned int mvolt);
+int axp221_set_dldo4(unsigned int mvolt);
+int axp221_set_aldo1(unsigned int mvolt);
+int axp221_set_aldo2(unsigned int mvolt);
+int axp221_set_aldo3(unsigned int mvolt);
+int axp221_init(void);



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


Re: [U-Boot] [PATCH v4] sun6i: Add basic axp221 driver

2015-01-01 Thread Siarhei Siamashka
On Mon, 10 Nov 2014 14:11:51 +0100
Hans de Goede hdego...@redhat.com wrote:

 From: Oliver Schinagl oli...@schinagl.nl
 
 The A31 uses the AXP221 pmic for various voltages.
 
 Signed-off-by: Oliver Schinagl oli...@schinagl.nl
 Signed-off-by: Hans de Goede hdego...@redhat.com
 --
 Changes in v2:
 -Rebase
 Changes in v3:
 -Add support for all dldo and aldo-s
 -Add Kconfig option to select building AXP221 and to select voltage of
  dldo and aldo-s
 Changes in v4:
 -Add axp221_setbits helper function
 -Use symbolic names for enabled bits in CTRL1 - CTRL3 registers
 ---

[...]

 diff --git a/include/axp221.h b/include/axp221.h
 new file mode 100644
 index 000..e3b4409
 --- /dev/null
 +++ b/include/axp221.h
 @@ -0,0 +1,50 @@
 +/*
 + * (C) Copyright 2013 Oliver Schinagl oli...@schinagl.nl
 + *
 + * X-Powers AXP221 Power Management IC driver
 + *
 + * SPDX-License-Identifier:  GPL-2.0+
 + */
 +
 +#define AXP221_CHIP_ADDR 0x68
 +#define AXP221_CTRL_ADDR 0x3e
 +#define AXP221_INIT_DATA 0x3e
 +
 +#define AXP221_CHIP_ID   0x03
 +#define AXP221_OUTPUT_CTRL1  0x10
 +#define AXP221_OUTPUT_CTRL1_ALDO1_EN (1  6)
 +#define AXP221_OUTPUT_CTRL1_ALDO2_EN (1  7)
 +#define AXP221_OUTPUT_CTRL2  0x12
 +#define AXP221_OUTPUT_CTRL2_DLDO1_EN (1  3)
 +#define AXP221_OUTPUT_CTRL2_DLDO2_EN (1  4)
 +#define AXP221_OUTPUT_CTRL2_DLDO3_EN (1  5)
 +#define AXP221_OUTPUT_CTRL2_DLDO4_EN (1  6)
 +#define AXP221_OUTPUT_CTRL2_DCDC1_EN (1  7)
 +#define AXP221_OUTPUT_CTRL3  0x13
 +#define AXP221_OUTPUT_CTRL3_ALDO3_EN (1  7)
 +#define AXP221_DLDO1_CTRL0x15
 +#define AXP221_DLDO2_CTRL0x16
 +#define AXP221_DLDO3_CTRL0x17
 +#define AXP221_DLDO4_CTRL0x18
 +#define AXP221_DCDC1_CTRL0x21
 +#define AXP221_DCDC2_CTRL0x22
 +#define AXP221_DCDC3_CTRL0x23
 +#define AXP221_DCDC4_CTRL0x24
 +#define AXP221_DCDC5_CTRL0x25
 +#define AXP221_ALDO1_CTRL0x28
 +#define AXP221_ALDO2_CTRL0x28

The register offset of ALDO2 seems to be incorrect here (same as ALDO1):
http://linux-sunxi.org/AXP221#Reg_29h:_ALDO2_output_voltage

In the current u-boot master, ALDO2 is only used by:
configs/Mele_M9_defconfig:+S:CONFIG_AXP221_ALDO1_VOLT=3300

$ cat Mele_M9_defconfig 
CONFIG_SPL=y
CONFIG_SYS_EXTRA_OPTIONS=USB_EHCI,SUNXI_GMAC
CONFIG_FDTFILE=sun6i-a31-m9.dtb
+S:CONFIG_ARM=y
+S:CONFIG_ARCH_SUNXI=y
+S:CONFIG_MACH_SUN6I=y
+S:CONFIG_TARGET_MELE_M9=y
# Ethernet phy power
+S:CONFIG_AXP221_DLDO1_VOLT=3300
# USB hub power
+S:CONFIG_AXP221_DLDO4_VOLT=3300
# Wifi power
+S:CONFIG_AXP221_ALDO1_VOLT=3300
# HDMI power ?
+S:CONFIG_AXP221_ALDO2_VOLT=1800
+S:CONFIG_AXP221_ALDO3_VOLT=3000
# Vbus gpio for usb1
+S:CONFIG_USB1_VBUS_PIN=PC27
# No Vbus gpio for usb2
+S:CONFIG_USB2_VBUS_PIN=

It means that the code in boards/sunxi/board.c is likely to
set 1.8V for ALDO1 instead of 3.3V:

#if CONFIG_AXP221_ALDO1_VOLT != -1
power_failed |= axp221_set_aldo1(CONFIG_AXP221_ALDO1_VOLT);
#endif
#if CONFIG_AXP221_ALDO2_VOLT != -1
power_failed |= axp221_set_aldo2(CONFIG_AXP221_ALDO2_VOLT);
#endif

Does Wifi actually work on Mele M9? And if not, then is this
something that needs to be fixed in the v2015.01 release?

Also ALDO1/ALDO2 have much heavier use in the u-boot-sunxi
next branch.

 +#define AXP221_ALDO3_CTRL0x2a
 +
 +int axp221_set_dcdc1(unsigned int mvolt);
 +int axp221_set_dcdc2(unsigned int mvolt);
 +int axp221_set_dcdc3(unsigned int mvolt);
 +int axp221_set_dcdc4(unsigned int mvolt);
 +int axp221_set_dcdc5(unsigned int mvolt);
 +int axp221_set_dldo1(unsigned int mvolt);
 +int axp221_set_dldo2(unsigned int mvolt);
 +int axp221_set_dldo3(unsigned int mvolt);
 +int axp221_set_dldo4(unsigned int mvolt);
 +int axp221_set_aldo1(unsigned int mvolt);
 +int axp221_set_aldo2(unsigned int mvolt);
 +int axp221_set_aldo3(unsigned int mvolt);
 +int axp221_init(void);

-- 
Best regards,
Siarhei Siamashka
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH v4] sun6i: Add basic axp221 driver

2014-11-10 Thread Hans de Goede
From: Oliver Schinagl oli...@schinagl.nl

The A31 uses the AXP221 pmic for various voltages.

Signed-off-by: Oliver Schinagl oli...@schinagl.nl
Signed-off-by: Hans de Goede hdego...@redhat.com
--
Changes in v2:
-Rebase
Changes in v3:
-Add support for all dldo and aldo-s
-Add Kconfig option to select building AXP221 and to select voltage of
 dldo and aldo-s
Changes in v4:
-Add axp221_setbits helper function
-Use symbolic names for enabled bits in CTRL1 - CTRL3 registers
---
 board/sunxi/board.c|  26 +++
 drivers/power/Kconfig  |  47 +
 drivers/power/Makefile |   1 +
 drivers/power/axp221.c | 186 +
 include/axp221.h   |  50 +
 5 files changed, 310 insertions(+)
 create mode 100644 drivers/power/axp221.c
 create mode 100644 include/axp221.h

diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 03890c8..e6ec5b8 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -19,6 +19,9 @@
 #ifdef CONFIG_AXP209_POWER
 #include axp209.h
 #endif
+#ifdef CONFIG_AXP221_POWER
+#include axp221.h
+#endif
 #include asm/arch/clock.h
 #include asm/arch/cpu.h
 #include asm/arch/dram.h
@@ -169,6 +172,29 @@ void sunxi_board_init(void)
power_failed |= axp209_set_ldo3(2800);
power_failed |= axp209_set_ldo4(2800);
 #endif
+#ifdef CONFIG_AXP221_POWER
+   power_failed = axp221_init();
+   power_failed |= axp221_set_dcdc1(3000);
+   power_failed |= axp221_set_dcdc2(1200);
+   power_failed |= axp221_set_dcdc3(1200);
+   power_failed |= axp221_set_dcdc4(1200);
+   power_failed |= axp221_set_dcdc5(1500);
+#if CONFIG_AXP221_DLDO1_VOLT != -1
+   power_failed |= axp221_set_dldo1(CONFIG_AXP221_DLDO1_VOLT);
+#endif
+#if CONFIG_AXP221_DLDO4_VOLT != -1
+   power_failed |= axp221_set_dldo4(CONFIG_AXP221_DLDO4_VOLT);
+#endif
+#if CONFIG_AXP221_ALDO1_VOLT != -1
+   power_failed |= axp221_set_aldo1(CONFIG_AXP221_ALDO1_VOLT);
+#endif
+#if CONFIG_AXP221_ALDO2_VOLT != -1
+   power_failed |= axp221_set_aldo2(CONFIG_AXP221_ALDO2_VOLT);
+#endif
+#if CONFIG_AXP221_ALDO3_VOLT != -1
+   power_failed |= axp221_set_aldo3(CONFIG_AXP221_ALDO3_VOLT);
+#endif
+#endif
 
printf(DRAM:);
ramsize = sunxi_dram_init();
diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
index e69de29..1ec7c0e 100644
--- a/drivers/power/Kconfig
+++ b/drivers/power/Kconfig
@@ -0,0 +1,47 @@
+config AXP221_POWER
+   boolean axp221 pmic support
+   depends on MACH_SUN6I
+   default y
+   ---help---
+   Say y here to enable support for the axp221 pmic found on most sun6i
+   (A31) boards.
+
+config AXP221_DLDO1_VOLT
+   int axp221 dldo1 voltage
+   depends on AXP221_POWER
+   default -1
+   ---help---
+   Set the voltage (mV) to program the axp221 dldo1 at, set to -1 to
+   disable dldo1.
+
+config AXP221_DLDO4_VOLT
+   int axp221 dldo4 voltage
+   depends on AXP221_POWER
+   default -1
+   ---help---
+   Set the voltage (mV) to program the axp221 dldo4 at, set to -1 to
+   disable dldo4.
+
+config AXP221_ALDO1_VOLT
+   int axp221 aldo1 voltage
+   depends on AXP221_POWER
+   default -1
+   ---help---
+   Set the voltage (mV) to program the axp221 aldo1 at, set to -1 to
+   disable aldo1.
+
+config AXP221_ALDO2_VOLT
+   int axp221 aldo2 voltage
+   depends on AXP221_POWER
+   default -1
+   ---help---
+   Set the voltage (mV) to program the axp221 aldo2 at, set to -1 to
+   disable aldo2.
+
+config AXP221_ALDO3_VOLT
+   int axp221 aldo3 voltage
+   depends on AXP221_POWER
+   default -1
+   ---help---
+   Set the voltage (mV) to program the axp221 aldo3 at, set to -1 to
+   disable aldo3.
diff --git a/drivers/power/Makefile b/drivers/power/Makefile
index dc64e4d..04bd996 100644
--- a/drivers/power/Makefile
+++ b/drivers/power/Makefile
@@ -7,6 +7,7 @@
 
 obj-$(CONFIG_AXP152_POWER) += axp152.o
 obj-$(CONFIG_AXP209_POWER) += axp209.o
+obj-$(CONFIG_AXP221_POWER) += axp221.o
 obj-$(CONFIG_EXYNOS_TMU)   += exynos-tmu.o
 obj-$(CONFIG_FTPMU010_POWER)   += ftpmu010.o
 obj-$(CONFIG_TPS6586X_POWER)   += tps6586x.o
diff --git a/drivers/power/axp221.c b/drivers/power/axp221.c
new file mode 100644
index 000..941193a
--- /dev/null
+++ b/drivers/power/axp221.c
@@ -0,0 +1,186 @@
+/*
+ * (C) Copyright 2013 Oliver Schinagl oli...@schinagl.nl
+ *
+ * SPDX-License-Identifier:GPL-2.0+
+ */
+
+#include common.h
+#include errno.h
+#include asm/arch/p2wi.h
+#include axp221.h
+
+static u8 axp221_mvolt_to_cfg(int mvolt, int min, int max, int div)
+{
+   if (mvolt  min)
+   mvolt = min;
+   else if (mvolt  max)
+   mvolt = max;
+
+   return (mvolt - min) / div;
+}
+
+static int axp221_setbits(u8 reg, u8 bits)
+{
+   int ret;
+   u8 val;
+
+   ret = p2wi_read(reg, val);
+   if (ret)
+   return ret;
+
+   val |= 

Re: [U-Boot] [PATCH v4] sun6i: Add basic axp221 driver

2014-11-10 Thread Ian Campbell
On Mon, 2014-11-10 at 14:11 +0100, Hans de Goede wrote:
 From: Oliver Schinagl oli...@schinagl.nl
 
 The A31 uses the AXP221 pmic for various voltages.
 
 Signed-off-by: Oliver Schinagl oli...@schinagl.nl
 Signed-off-by: Hans de Goede hdego...@redhat.com

Acked-by: Ian Campbell ian.campb...@citrix.com


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


Re: [U-Boot] [PATCH v4] sun6i: Add basic axp221 driver

2014-11-10 Thread Hans de Goede
Hi,

On 11/10/2014 02:20 PM, Ian Campbell wrote:
 On Mon, 2014-11-10 at 14:11 +0100, Hans de Goede wrote:
 From: Oliver Schinagl oli...@schinagl.nl

 The A31 uses the AXP221 pmic for various voltages.

 Signed-off-by: Oliver Schinagl oli...@schinagl.nl
 Signed-off-by: Hans de Goede hdego...@redhat.com
 
 Acked-by: Ian Campbell ian.campb...@citrix.com

Thanks, I've taken the liberty to change this to:

Acked-by: Ian Campbell i...@hellion.org.uk

And pushed the entire series to u-boot-sunxi/next

I'm somewhat tempted to send a PR with this to Tom,
is there anything pending which we should get in first ?

Regards,

Hans


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


Re: [U-Boot] [PATCH v4] sun6i: Add basic axp221 driver

2014-11-10 Thread Ian Campbell
On Mon, 2014-11-10 at 14:33 +0100, Hans de Goede wrote:
 Hi,
 
 On 11/10/2014 02:20 PM, Ian Campbell wrote:
  On Mon, 2014-11-10 at 14:11 +0100, Hans de Goede wrote:
  From: Oliver Schinagl oli...@schinagl.nl
 
  The A31 uses the AXP221 pmic for various voltages.
 
  Signed-off-by: Oliver Schinagl oli...@schinagl.nl
  Signed-off-by: Hans de Goede hdego...@redhat.com
  
  Acked-by: Ian Campbell ian.campb...@citrix.com
 
 Thanks, I've taken the liberty to change this to:
 
 Acked-by: Ian Campbell i...@hellion.org.uk

Right, thanks. Wrong set of finger macros loaded...

 And pushed the entire series to u-boot-sunxi/next
 
 I'm somewhat tempted to send a PR with this to Tom,
 is there anything pending which we should get in first ?

I seem to have http://patchwork.ozlabs.org/patch/403231/ delegated to
me, but didn't you fix that already?

Ian.

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


Re: [U-Boot] [PATCH v4] sun6i: Add basic axp221 driver

2014-11-10 Thread Hans de Goede
Hi,

On 11/10/2014 03:13 PM, Ian Campbell wrote:
 On Mon, 2014-11-10 at 14:33 +0100, Hans de Goede wrote:
 Hi,

 On 11/10/2014 02:20 PM, Ian Campbell wrote:
 On Mon, 2014-11-10 at 14:11 +0100, Hans de Goede wrote:
 From: Oliver Schinagl oli...@schinagl.nl

 The A31 uses the AXP221 pmic for various voltages.

 Signed-off-by: Oliver Schinagl oli...@schinagl.nl
 Signed-off-by: Hans de Goede hdego...@redhat.com

 Acked-by: Ian Campbell ian.campb...@citrix.com

 Thanks, I've taken the liberty to change this to:

 Acked-by: Ian Campbell i...@hellion.org.uk
 
 Right, thanks. Wrong set of finger macros loaded...
 
 And pushed the entire series to u-boot-sunxi/next

 I'm somewhat tempted to send a PR with this to Tom,
 is there anything pending which we should get in first ?
 
 I seem to have http://patchwork.ozlabs.org/patch/403231/ delegated to
 me, but didn't you fix that already?

Yes that is already fixed in master, I've moved this to accepted.

Regards,

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