public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 03/14] sunxi: axp221: Add axp223 support
Date: Thu, 18 Dec 2014 11:44:38 +0100	[thread overview]
Message-ID: <5492B016.9010902@redhat.com> (raw)
In-Reply-To: <CAGb2v66GUosDVdgr1Gtg6B-Scm=+9WZys2kVw_NwakOM2_vGbw@mail.gmail.com>

Hi,

On 17-12-14 03:34, Chen-Yu Tsai wrote:
> On Wed, Dec 17, 2014 at 4:31 AM, Hans de Goede <hdegoede@redhat.com> wrote:
>> The axp223 appears to be the same as the axp221, except that it uses the
>> rsb to communicate rather then the p2wi. At least all the registers we use
>> are 100% the same.
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>>   arch/arm/cpu/armv7/sunxi/cpu_info.c |  2 +-
>>   drivers/power/Kconfig               |  8 ++--
>>   drivers/power/axp221.c              | 88 ++++++++++++++++++++++++++++---------
>>   include/axp221.h                    |  4 ++
>>   4 files changed, 76 insertions(+), 26 deletions(-)
>>
>> diff --git a/arch/arm/cpu/armv7/sunxi/cpu_info.c b/arch/arm/cpu/armv7/sunxi/cpu_info.c
>> index 7a3a4ca..b6cb9de 100644
>> --- a/arch/arm/cpu/armv7/sunxi/cpu_info.c
>> +++ b/arch/arm/cpu/armv7/sunxi/cpu_info.c
>> @@ -76,7 +76,7 @@ int print_cpuinfo(void)
>>
>>   int sunxi_get_sid(unsigned int *sid)
>>   {
>> -#ifdef CONFIG_MACH_SUN6I
>> +#if defined CONFIG_MACH_SUN6I || defined CONFIG_MACH_SUN8I
>>   #ifdef CONFIG_AXP221_POWER
>>          return axp221_get_sid(sid);
>>   #else
>> diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
>> index 1ec7c0e..7373a79 100644
>> --- a/drivers/power/Kconfig
>> +++ b/drivers/power/Kconfig
>> @@ -1,10 +1,10 @@
>>   config AXP221_POWER
>> -       boolean "axp221 pmic support"
>> -       depends on MACH_SUN6I
>> +       boolean "axp221 / axp223 pmic support"
>> +       depends on MACH_SUN6I || MACH_SUN8I
>>          default y
>>          ---help---
>> -       Say y here to enable support for the axp221 pmic found on most sun6i
>> -       (A31) boards.
>> +       Say y here to enable support for the axp221 / axp223 pmic found on most
>> +       sun6i (A31) / sun8i (A23) boards.
>>
>>   config AXP221_DLDO1_VOLT
>>          int "axp221 dldo1 voltage"
>> diff --git a/drivers/power/axp221.c b/drivers/power/axp221.c
>> index 826567a..717adad 100644
>> --- a/drivers/power/axp221.c
>> +++ b/drivers/power/axp221.c
>> @@ -1,4 +1,10 @@
>>   /*
>> + * AXP221 and AXP223 driver
>> + *
>> + * IMPORTANT when making changes to this file check that the registers
>> + * used are the same for the axp221 and axp223.
>> + *
>> + * (C) Copyright 2014 Hans de Goede <hdegoede@redhat.com>
>>    * (C) Copyright 2013 Oliver Schinagl <oliver@schinagl.nl>
>>    *
>>    * SPDX-License-Identifier:    GPL-2.0+
>> @@ -7,8 +13,50 @@
>>   #include <common.h>
>>   #include <errno.h>
>>   #include <asm/arch/p2wi.h>
>> +#include <asm/arch/rsb.h>
>>   #include <axp221.h>
>>
>> +/*
>> + * The axp221 uses the p2wi bus, the axp223 is identical (for all registers
>> + * used sofar) but uses the rsb bus. These functions abstract this.
>> + */
>> +static int pmic_bus_init(void)
>> +{
>> +#ifdef CONFIG_MACH_SUN6I
>> +       p2wi_init();
>> +       return p2wi_change_to_p2wi_mode(AXP221_CHIP_ADDR, AXP221_CTRL_ADDR,
>> +                                       AXP221_INIT_DATA);
>> +#else
>> +       int ret;
>> +
>> +       rsb_init();
>> +
>> +       ret = rsb_set_device_mode(AXP223_DEVICE_MODE_DATA);
>> +       if (ret)
>> +               return ret;
>> +
>> +       return rsb_set_device_address(AXP223_DEVICE_ADDR, AXP223_RUNTIME_ADDR);
>> +#endif
>> +}
>> +
>> +static int pmic_bus_read(const u8 addr, u8 *data)
>> +{
>> +#ifdef CONFIG_MACH_SUN6I
>> +       return p2wi_read(addr, data);
>> +#else
>> +       return rsb_read(AXP223_RUNTIME_ADDR, addr, data);
>> +#endif
>> +}
>> +
>> +static int pmic_bus_write(const u8 addr, u8 data)
>> +{
>> +#ifdef CONFIG_MACH_SUN6I
>> +       return p2wi_write(addr, data);
>> +#else
>> +       return rsb_write(AXP223_RUNTIME_ADDR, addr, data);
>> +#endif
>> +}
>> +
>>   static u8 axp221_mvolt_to_cfg(int mvolt, int min, int max, int div)
>>   {
>>          if (mvolt < min)
>> @@ -24,12 +72,12 @@ static int axp221_setbits(u8 reg, u8 bits)
>>          int ret;
>>          u8 val;
>>
>> -       ret = p2wi_read(reg, &val);
>> +       ret = pmic_bus_read(reg, &val);
>>          if (ret)
>>                  return ret;
>>
>>          val |= bits;
>> -       return p2wi_write(reg, val);
>> +       return pmic_bus_write(reg, val);
>>   }
>>
>>   int axp221_set_dcdc1(unsigned int mvolt)
>> @@ -37,7 +85,7 @@ int axp221_set_dcdc1(unsigned int mvolt)
>>          int ret;
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 1600, 3400, 100);
>>
>> -       ret = p2wi_write(AXP221_DCDC1_CTRL, cfg);
>> +       ret = pmic_bus_write(AXP221_DCDC1_CTRL, cfg);
>>          if (ret)
>>                  return ret;
>>
>> @@ -49,28 +97,28 @@ int axp221_set_dcdc2(unsigned int mvolt)
>>   {
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 600, 1540, 20);
>>
>> -       return p2wi_write(AXP221_DCDC2_CTRL, cfg);
>> +       return pmic_bus_write(AXP221_DCDC2_CTRL, cfg);
>>   }
>>
>>   int axp221_set_dcdc3(unsigned int mvolt)
>>   {
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 600, 1860, 20);
>>
>> -       return p2wi_write(AXP221_DCDC3_CTRL, cfg);
>> +       return pmic_bus_write(AXP221_DCDC3_CTRL, cfg);
>>   }
>>
>>   int axp221_set_dcdc4(unsigned int mvolt)
>>   {
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 600, 1540, 20);
>>
>> -       return p2wi_write(AXP221_DCDC4_CTRL, cfg);
>> +       return pmic_bus_write(AXP221_DCDC4_CTRL, cfg);
>>   }
>>
>>   int axp221_set_dcdc5(unsigned int mvolt)
>>   {
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 1000, 2550, 50);
>>
>> -       return p2wi_write(AXP221_DCDC5_CTRL, cfg);
>> +       return pmic_bus_write(AXP221_DCDC5_CTRL, cfg);
>>   }
>>
>>   int axp221_set_dldo1(unsigned int mvolt)
>> @@ -78,7 +126,7 @@ int axp221_set_dldo1(unsigned int mvolt)
>>          int ret;
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
>>
>> -       ret = p2wi_write(AXP221_DLDO1_CTRL, cfg);
>> +       ret = pmic_bus_write(AXP221_DLDO1_CTRL, cfg);
>>          if (ret)
>>                  return ret;
>>
>> @@ -91,7 +139,7 @@ int axp221_set_dldo2(unsigned int mvolt)
>>          int ret;
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
>>
>> -       ret = p2wi_write(AXP221_DLDO2_CTRL, cfg);
>> +       ret = pmic_bus_write(AXP221_DLDO2_CTRL, cfg);
>>          if (ret)
>>                  return ret;
>>
>> @@ -104,7 +152,7 @@ int axp221_set_dldo3(unsigned int mvolt)
>>          int ret;
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
>>
>> -       ret = p2wi_write(AXP221_DLDO3_CTRL, cfg);
>> +       ret = pmic_bus_write(AXP221_DLDO3_CTRL, cfg);
>>          if (ret)
>>                  return ret;
>>
>> @@ -117,7 +165,7 @@ int axp221_set_dldo4(unsigned int mvolt)
>>          int ret;
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
>>
>> -       ret = p2wi_write(AXP221_DLDO4_CTRL, cfg);
>> +       ret = pmic_bus_write(AXP221_DLDO4_CTRL, cfg);
>>          if (ret)
>>                  return ret;
>>
>> @@ -130,7 +178,7 @@ int axp221_set_aldo1(unsigned int mvolt)
>>          int ret;
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
>>
>> -       ret = p2wi_write(AXP221_ALDO1_CTRL, cfg);
>> +       ret = pmic_bus_write(AXP221_ALDO1_CTRL, cfg);
>>          if (ret)
>>                  return ret;
>>
>> @@ -143,7 +191,7 @@ int axp221_set_aldo2(unsigned int mvolt)
>>          int ret;
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
>>
>> -       ret = p2wi_write(AXP221_ALDO2_CTRL, cfg);
>> +       ret = pmic_bus_write(AXP221_ALDO2_CTRL, cfg);
>>          if (ret)
>>                  return ret;
>>
>> @@ -156,7 +204,7 @@ int axp221_set_aldo3(unsigned int mvolt)
>>          int ret;
>>          u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
>>
>> -       ret = p2wi_write(AXP221_ALDO3_CTRL, cfg);
>> +       ret = pmic_bus_write(AXP221_ALDO3_CTRL, cfg);
>>          if (ret)
>>                  return ret;
>>
>> @@ -169,13 +217,11 @@ int axp221_init(void)
>>          u8 axp_chip_id;
>>          int ret;
>>
>> -       p2wi_init();
>> -       ret = p2wi_change_to_p2wi_mode(AXP221_CHIP_ADDR, AXP221_CTRL_ADDR,
>> -                                      AXP221_INIT_DATA);
>> +       ret = pmic_bus_init();
>>          if (ret)
>>                  return ret;
>>
>> -       ret = p2wi_read(AXP221_CHIP_ID, &axp_chip_id);
>> +       ret = pmic_bus_read(AXP221_CHIP_ID, &axp_chip_id);
>>          if (ret)
>>                  return ret;
>>
>> @@ -194,17 +240,17 @@ int axp221_get_sid(unsigned int *sid)
>>          if (ret)
>>                  return ret;
>>
>> -       ret = p2wi_write(AXP221_PAGE, 1);
>> +       ret = pmic_bus_write(AXP221_PAGE, 1);
>>          if (ret)
>>                  return ret;
>>
>>          for (i = 0; i < 16; i++) {
>> -               ret = p2wi_read(AXP221_SID + i, &dest[i]);
>> +               ret = pmic_bus_read(AXP221_SID + i, &dest[i]);
>>                  if (ret)
>>                          return ret;
>>          }
>>
>> -       p2wi_write(AXP221_PAGE, 0);
>> +       pmic_bus_write(AXP221_PAGE, 0);
>>
>>          for (i = 0; i < 4; i++)
>>                  sid[i] = be32_to_cpu(sid[i]);
>> diff --git a/include/axp221.h b/include/axp221.h
>> index db219c6..10d35e1 100644
>> --- a/include/axp221.h
>> +++ b/include/axp221.h
>> @@ -10,6 +10,10 @@
>>   #define AXP221_CTRL_ADDR 0x3e
>>   #define AXP221_INIT_DATA 0x3e
>>
>> +#define AXP223_DEVICE_ADDR 0x3a3
>> +#define AXP223_RUNTIME_ADDR 0x2d
>> +#define AXP223_DEVICE_MODE_DATA 0x7c3e00
>> +
>>   /* Page 0 addresses */
>>   #define AXP221_CHIP_ID         0x03
>>   #define AXP221_OUTPUT_CTRL1    0x10
>> --
>> 2.1.0
>>
>
> git am reports:
>
> Applying patch #422068 using 'git am'
> Description: [U-Boot,03/14] sunxi: axp221: Add axp223 support
> Applying: sunxi: axp221: Add axp223 support
> /home/wens/sunxi/u-boot/.git/rebase-apply/patch:50: trailing whitespace.
>   *
> /home/wens/sunxi/u-boot/.git/rebase-apply/patch:76: trailing whitespace.
>
> warning: 2 lines add whitespace errors.

Fixed in my personal tree.

Regards,

Hans

  reply	other threads:[~2014-12-18 10:44 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-16 20:31 [U-Boot] [PATCH 01/14] sun6i: s/SUNXI_GPL0_R_P2WI/SUN6I_GPL0_R_P2WI/ Hans de Goede
2014-12-16 20:31 ` [U-Boot] [PATCH 02/14] sunxi: Add support for the rsb (Reduced Serial Bus) Hans de Goede
2014-12-17  2:22   ` Chen-Yu Tsai
2014-12-17 12:56     ` Hans de Goede
2014-12-18 18:57       ` Ian Campbell
2014-12-18 18:59       ` Ian Campbell
2014-12-19 15:26         ` Hans de Goede
2014-12-16 20:31 ` [U-Boot] [PATCH 03/14] sunxi: axp221: Add axp223 support Hans de Goede
2014-12-17  2:34   ` Chen-Yu Tsai
2014-12-18 10:44     ` Hans de Goede [this message]
2014-12-18 19:00   ` Ian Campbell
2014-12-16 20:31 ` [U-Boot] [PATCH 04/14] sunxi: axp221: Add Kconfig help and sane defaults for typical ldo usage Hans de Goede
2014-12-18 19:02   ` Ian Campbell
2014-12-16 20:31 ` [U-Boot] [PATCH 05/14] sunxi: axp221: Make dcdc1 voltage configurable Hans de Goede
2014-12-18 19:03   ` Ian Campbell
2014-12-16 20:31 ` [U-Boot] [PATCH 06/14] sunxi: axp221: Explicitly turn off unused voltages Hans de Goede
2014-12-18 19:04   ` Ian Campbell
2014-12-16 20:31 ` [U-Boot] [PATCH 07/14] sunxi: axp221: Disable dcdc4 on sun8i (A23) Hans de Goede
2014-12-18 19:05   ` Ian Campbell
2014-12-16 20:31 ` [U-Boot] [PATCH 08/14] sun6i: Add a sigma_delta_enable paramter to clock_set_pll5() Hans de Goede
2014-12-18 19:07   ` Ian Campbell
2014-12-19 10:02   ` Siarhei Siamashka
2014-12-16 20:31 ` [U-Boot] [PATCH 09/14] sun6i: Add k and m parameters " Hans de Goede
2014-12-18 19:07   ` Ian Campbell
2014-12-19 10:03   ` Siarhei Siamashka
2014-12-19 16:40     ` Hans de Goede
2014-12-22  7:25       ` Siarhei Siamashka
2014-12-16 20:31 ` [U-Boot] [PATCH 10/14] sunxi: Move await_completion dram helper to dram.h Hans de Goede
2014-12-18 19:08   ` Ian Campbell
2014-12-19 10:06   ` Siarhei Siamashka
2014-12-19 16:42     ` Hans de Goede
2014-12-22  7:28       ` Siarhei Siamashka
2014-12-16 20:31 ` [U-Boot] [PATCH 11/14] sunxi: Fill memory before comparing it when doing dram init on sun6i Hans de Goede
2014-12-18 19:12   ` Ian Campbell
2014-12-19 10:08     ` Siarhei Siamashka
2014-12-19 16:56       ` Hans de Goede
2014-12-22  7:39         ` Siarhei Siamashka
2014-12-19 16:55     ` Hans de Goede
2014-12-22 14:19       ` Ian Campbell
2014-12-22 14:32         ` Siarhei Siamashka
2014-12-22 14:34           ` Ian Campbell
2014-12-22 15:47         ` Hans de Goede
2014-12-16 20:31 ` [U-Boot] [PATCH 12/14] sunxi: Use memcmp for mctl_mem_matches Hans de Goede
2014-12-18 19:13   ` Ian Campbell
2014-12-16 20:31 ` [U-Boot] [PATCH 13/14] sun8i: Add dram initialization support Hans de Goede
2014-12-18 11:12   ` Chen-Yu Tsai
2014-12-18 19:17   ` Ian Campbell
2014-12-19 16:51     ` Hans de Goede
2014-12-19 10:20   ` Siarhei Siamashka
2014-12-19 17:05     ` Hans de Goede
2014-12-22  7:43       ` Siarhei Siamashka
2014-12-16 20:31 ` [U-Boot] [PATCH 14/14] sun8i: Add defconfig for Ippo_q8h v1.2 Hans de Goede
2014-12-18 19:19   ` Ian Campbell
2014-12-18 18:56 ` [U-Boot] [PATCH 01/14] sun6i: s/SUNXI_GPL0_R_P2WI/SUN6I_GPL0_R_P2WI/ Ian Campbell

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=5492B016.9010902@redhat.com \
    --to=hdegoede@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox