From: Luka Perkov <luka@openwrt.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 05/22] power: Add AXP209 Power Management controller (I2C)
Date: Sun, 25 Nov 2012 15:44:47 +0100 [thread overview]
Message-ID: <20121125144447-9180@mutt-kz> (raw)
In-Reply-To: <1353843579.17518.16.camel@home.hno.se>
Hi Henrik,
On Sun, Nov 25, 2012 at 12:39:39PM +0100, Henrik Nordstr?m wrote:
> This adds support for AXP209 Power Management controller,
> used by most sunxi (Allwinner A10/A13) based boards.
>
> From: Henrik Nordstrom <henrik@henriknordstrom.net>
> Signed-off-by: Henrik Nordstrom <henrik@henriknordstrom.net>
> Signed-off-by: Stefan Roese <sr@denx.de>
> ---
> drivers/power/Makefile | 1 +
> drivers/power/axp209.c | 183 ++++++++++++++++++++++++++++++++++++++++++++++++
> include/axp209.h | 29 ++++++++
> 3 files changed, 213 insertions(+), 0 deletions(-)
> create mode 100644 drivers/power/axp209.c
> create mode 100644 include/axp209.h
>
> diff --git a/drivers/power/Makefile b/drivers/power/Makefile
> index 8c71901..ad768ff 100644
> --- a/drivers/power/Makefile
> +++ b/drivers/power/Makefile
> @@ -25,6 +25,7 @@ include $(TOPDIR)/config.mk
>
> LIB := $(obj)libpower.o
>
> +COBJS-$(CONFIG_AXP209_POWER) += axp209.o
> COBJS-$(CONFIG_FTPMU010_POWER) += ftpmu010.o
> COBJS-$(CONFIG_TPS6586X_POWER) += tps6586x.o
> COBJS-$(CONFIG_TWL4030_POWER) += twl4030.o
> diff --git a/drivers/power/axp209.c b/drivers/power/axp209.c
> new file mode 100644
> index 0000000..be98d80
> --- /dev/null
> +++ b/drivers/power/axp209.c
> @@ -0,0 +1,183 @@
> +/*
> + * (C) Copyright 2012
> + * Henrik Nordstrom <henrik@henriknordstrom.net>
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#include <common.h>
> +#include <i2c.h>
> +#include <axp209.h>
> +
> +enum axp209_reg {
> + AXP209_CHIP_VERSION = 0x3,
> + AXP209_DCDC2_VOLTAGE = 0x23,
> + AXP209_DCDC3_VOLTAGE = 0x27,
> + AXP209_LDO24_VOLTAGE = 0x28,
> + AXP209_LDO3_VOLTAGE = 0x29,
> + AXP209_SHUTDOWN = 0x32,
> +};
> +
> +int axp209_write(enum axp209_reg reg, u8 val)
> +{
> + return i2c_write(0x34, reg, 1, &val, 1);
> +}
> +
> +int axp209_read(enum axp209_reg reg, u8 *val)
> +{
> + return i2c_read(0x34, reg, 1, val, 1);
> +}
> +
> +int axp209_set_dcdc2(int mvolt)
> +{
> + int cfg = (mvolt - 700) / 25;
> + int rc;
> + u8 current;
> +
> + if (cfg < 0)
> + cfg = 0;
> + if (cfg > (1 << 6) - 1)
> + cfg = (1 << 6) - 1;
> +
> + /* Do we really need to be this gentle? It has built-in voltage slope */
> + while ((rc = axp209_read(AXP209_DCDC2_VOLTAGE, ¤t)) == 0
> + && current != cfg) {
> + if (current < cfg)
> + current++;
> + else
> + current--;
> +
> + rc = axp209_write(AXP209_DCDC2_VOLTAGE, current);
> + if (rc)
> + break;
> + }
> +
> + return rc;
> +}
> +
> +int axp209_set_dcdc3(int mvolt)
> +{
> + int cfg = (mvolt - 700) / 25;
> + u8 reg;
> + int rc;
> +
> + if (cfg < 0)
> + cfg = 0;
> + if (cfg > (1 << 7) - 1)
> + cfg = (1 << 7) - 1;
> +
> + rc = axp209_write(AXP209_DCDC3_VOLTAGE, cfg);
> + rc |= axp209_read(AXP209_DCDC3_VOLTAGE, ®);
> +
> + return rc;
> +}
> +
> +int axp209_set_ldo2(int mvolt)
> +{
> + int cfg = (mvolt - 1800) / 100;
> + int rc;
> + u8 reg;
> +
> + if (cfg < 0)
> + cfg = 0;
> + if (cfg > 15)
> + cfg = 15;
> +
> + rc = axp209_read(AXP209_LDO24_VOLTAGE, ®);
> + if (rc)
> + return rc;
> +
> + reg = (reg & 0x0f) | (cfg << 4);
> + rc = axp209_write(AXP209_LDO24_VOLTAGE, reg);
> + if (rc)
> + return rc;
> +
> + return 0;
> +}
> +
> +int axp209_set_ldo3(int mvolt)
> +{
> + int cfg = (mvolt - 700) / 25;
> +
> + if (cfg < 0)
> + cfg = 0;
> + if (cfg > 127)
> + cfg = 127;
> + if (mvolt == -1)
> + cfg = 0x80; /* detemined by LDO3IN pin */
> +
> + return axp209_write(AXP209_LDO3_VOLTAGE, cfg);
> +}
> +
> +int axp209_set_ldo4(int mvolt)
> +{
> + int cfg = (mvolt - 1800) / 100;
> + int rc;
> + static const int vindex[] = {
> + 1250, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2500,
> + 2700, 2800, 3000, 3100, 3200, 3300
> + };
> + u8 reg;
> +
> + /* Translate mvolt to register cfg value, requested <= selected */
> + for (cfg = 0; mvolt < vindex[cfg] && cfg < 15; cfg++)
> + ;
> +
> + rc = axp209_read(AXP209_LDO24_VOLTAGE, ®);
> + if (rc)
> + return rc;
> +
> + /* LDO4 configuration is in lower 4 bits */
> + reg = (reg & 0xf0) | (cfg << 0);
> + rc = axp209_write(AXP209_LDO24_VOLTAGE, reg);
> + if (rc)
> + return rc;
> +
> + return 0;
> +}
> +
> +void axp209_poweroff(void)
> +{
> + u8 val;
> +
> + if (axp209_read(AXP209_SHUTDOWN, &val) != 0)
> + return;
> +
> + val |= 1 << 7;
> +
> + if (axp209_write(AXP209_SHUTDOWN, val) != 0)
> + return;
> +
> + udelay(10000); /* wait for power to drain */
> +}
> +
> +int axp209_init(void)
> +{
> + u8 ver;
> + int rc;
> +
> + rc = axp209_read(AXP209_CHIP_VERSION, &ver);
> + if (rc)
> + return rc;
> +
> + if (ver != 0x21)
> + return -1;
> +
> + return 0;
> +}
> diff --git a/include/axp209.h b/include/axp209.h
> new file mode 100644
> index 0000000..61338ac
> --- /dev/null
> +++ b/include/axp209.h
> @@ -0,0 +1,29 @@
> +/*
> + * (C) Copyright 2012 Henrik Nordstrom <henrik@henriknordstrom.net>
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
Please add:
#ifndef
#define
> +extern int axp209_set_dcdc2(int mvolt);
> +extern int axp209_set_dcdc3(int mvolt);
> +extern int axp209_set_ldo2(int mvolt);
> +extern int axp209_set_ldo3(int mvolt);
> +extern int axp209_set_ldo4(int mvolt);
> +extern void axp209_poweroff(void);
> +extern int axp209_init(void);
And end with:
#endif
> --
> 1.7.7.6
Luka
next prev parent reply other threads:[~2012-11-25 14:44 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1353842684.git.henrik@henriknordstrom.net>
2012-11-25 11:37 ` [U-Boot] [PATCH 01/22] ARM: sunxi: Basic Allwinner A10/A13 (sun4i/sun5i) support Henrik Nordström
2012-11-25 12:23 ` Luka Perkov
2012-11-25 13:08 ` Henrik Nordström
2012-11-25 19:55 ` Wolfgang Denk
2012-11-26 1:05 ` [U-Boot] [PATCH 01/22] Re: Copyright on board makefiles Henrik Nordström
2012-11-26 5:54 ` Wolfgang Denk
2012-11-25 19:52 ` [U-Boot] [PATCH 01/22] ARM: sunxi: Basic Allwinner A10/A13 (sun4i/sun5i) support Wolfgang Denk
2012-11-25 18:06 ` Marek Vasut
2012-11-26 0:21 ` Henrik Nordström
2012-11-26 0:33 ` Marek Vasut
2012-11-26 5:52 ` Wolfgang Denk
2012-11-25 19:33 ` Wolfgang Denk
2012-11-25 23:53 ` Henrik Nordström
2012-11-26 8:00 ` Stefan Roese
2012-11-25 19:40 ` Wolfgang Denk
2012-11-25 11:37 ` [U-Boot] [PATCH 02/22] ARM: sunxi: MMC driver Henrik Nordström
2012-11-25 14:33 ` Luka Perkov
2012-11-25 15:39 ` Henrik Nordström
2012-11-25 17:07 ` Luka Perkov
2012-11-25 19:58 ` Wolfgang Denk
2012-11-25 19:56 ` Wolfgang Denk
2012-11-25 18:09 ` Marek Vasut
2012-11-25 19:44 ` Wolfgang Denk
2012-11-25 11:38 ` [U-Boot] [PATCH 03/22] ARM sunxi: I2C driver Henrik Nordström
2012-11-25 14:41 ` Luka Perkov
2012-11-25 15:47 ` Henrik Nordström
2012-11-25 18:11 ` Marek Vasut
2012-11-25 19:47 ` Wolfgang Denk
2012-11-26 11:13 ` Heiko Schocher
2012-11-26 13:39 ` Henrik Nordström
2012-11-25 11:39 ` [U-Boot] [PATCH 05/22] power: Add AXP209 Power Management controller (I2C) Henrik Nordström
2012-11-25 14:44 ` Luka Perkov [this message]
2012-11-25 18:13 ` Marek Vasut
2012-11-25 19:48 ` Wolfgang Denk
2012-11-25 11:40 ` [U-Boot] [PATCH 06/22] ARM sunxi: Basic GPIO driver Henrik Nordström
2012-11-25 14:52 ` Luka Perkov
2012-11-25 18:14 ` Marek Vasut
2012-11-25 19:50 ` Wolfgang Denk
2012-11-25 21:47 ` Marek Vasut
2012-11-25 23:41 ` Henrik Nordström
2012-11-25 11:40 ` [U-Boot] [PATCH 07/22] tools: mksunixboot adding a Allwinner boot header Henrik Nordström
2012-11-25 15:01 ` Luka Perkov
2012-11-25 17:47 ` Wolfgang Denk
2012-11-25 11:41 ` [U-Boot] [PATCH 08/22] net: Add sunxi (Allwinner) wemac driver Henrik Nordström
2013-07-08 15:43 ` Joe Hershberger
2013-07-08 16:16 ` Tom Rini
2013-07-08 16:29 ` Joe Hershberger
2013-07-08 19:03 ` Tom Rini
2012-11-25 11:42 ` [U-Boot] [PATCH 09/22] ARM: sun4i: Enable ethernet support (wemac) on A10 boards Henrik Nordström
2012-11-25 15:05 ` Luka Perkov
2012-11-25 11:43 ` [U-Boot] [PATCH 10/22] sunxi: Add more network commands and netconsole support Henrik Nordström
2012-11-25 15:07 ` Luka Perkov
2012-11-25 11:44 ` [U-Boot] [PATCH 11/22] ARM: sunxi: U-Boot SPL capable of booting directly from MMC Henrik Nordström
2012-11-25 15:11 ` Luka Perkov
2012-11-25 11:44 ` [U-Boot] [PATCH 12/22] ARM sunxi: SPL support for Olimex A13-OLinuXino board Henrik Nordström
2012-11-25 15:17 ` Luka Perkov
2012-11-25 11:44 ` [U-Boot] [PATCH 13/22] ARM sunxi: SPL support for Mele A1000 board Henrik Nordström
2012-11-25 11:45 ` [U-Boot] [PATCH 14/22] ARM sunxi: SPL support for Cubieboard board Henrik Nordström
2012-11-25 11:45 ` [U-Boot] [PATCH 15/22] ARM sunxi: SPL support for Hackberry 1GB board Henrik Nordström
2012-11-25 11:45 ` [U-Boot] [PATCH 16/22] ARM sunxi: SPL support for a13_mid board Henrik Nordström
2012-11-25 11:45 ` [U-Boot] [PATCH 17/22] ARM sunxi: SPL support for Mini-X board Henrik Nordström
2012-11-25 11:46 ` [U-Boot] [PATCH 18/22] ARM sunxi: SPL support for hyundai A7HD board Henrik Nordström
2012-11-25 11:46 ` [U-Boot] [PATCH 19/22] ARM sunxi: SPL support for MK802 board Henrik Nordström
2012-11-25 11:46 ` [U-Boot] [PATCH 20/22] ARM sunxi: SPL support for Rikomagic MK802II board Henrik Nordström
2012-11-25 11:46 ` [U-Boot] [PATCH 21/22] ARM sunxi: SPL support for Mele A3700 board Henrik Nordström
2012-11-25 11:46 ` [U-Boot] [PATCH 22/22] ARM sunxi: SPL support for Olinuxino A13 Micro Henrik Nordström
2012-11-25 11:47 ` [U-Boot] [PATCH 04/22] ARM: sunxi: watchdog support Henrik Nordström
2013-02-02 23:55 ` Albert ARIBAUD
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=20121125144447-9180@mutt-kz \
--to=luka@openwrt.org \
--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.