[U-Boot] [PATCH] power: fan53555: add support for Silergy SYR82X and SYR83X
Anand Moon
linux.amoon at gmail.com
Wed Nov 20 01:51:01 UTC 2019
Hi Vasily,
I have got a development board Odroid N1
it has SYR837PKC and SYR838PKC regulator IC on the board.
On testing this patch, it failed with below message.
Model: Hardkernel ODROID-N1
DRAM: 3.9 GiB
SW: fan53555_voltages_setup: die id 7 rev 7 not supported!
MMC: dwmmc at fe320000: 1, sdhci at fe330000: 0
Loading Environment from MMC... Card did not respond to voltage select!
*** Warning - No block device, using default environment
could you add this *die id* and *rev id* and update in the next patch.
Could we enable this feature on all rk3399 development boards
-Anand
On Sun, 17 Nov 2019 at 01:02, Vasily Khoruzhick <anarsoul at gmail.com> wrote:
>
> SYR82X and SYR83X are almost identical to FAN53555, the only difference
> is different die ID and revision, voltage ranges and steps.
>
> Signed-off-by: Vasily Khoruzhick <anarsoul at gmail.com>
> ---
> drivers/power/pmic/fan53555.c | 7 +++--
> drivers/power/regulator/fan53555.c | 45 ++++++++++++++++++++++--------
> include/power/fan53555.h | 14 ++++++++++
> 3 files changed, 52 insertions(+), 14 deletions(-)
> create mode 100644 include/power/fan53555.h
>
> diff --git a/drivers/power/pmic/fan53555.c b/drivers/power/pmic/fan53555.c
> index 1ca59c5f0c..11304d2146 100644
> --- a/drivers/power/pmic/fan53555.c
> +++ b/drivers/power/pmic/fan53555.c
> @@ -8,6 +8,7 @@
> #include <dm/device-internal.h>
> #include <dm/lists.h>
> #include <i2c.h>
> +#include <power/fan53555.h>
> #include <power/pmic.h>
> #include <power/regulator.h>
>
> @@ -58,7 +59,7 @@ static int pmic_fan53555_bind(struct udevice *dev)
> return -ENOENT;
> }
>
> - return device_bind_with_driver_data(dev, drv, "SW", 0,
> + return device_bind_with_driver_data(dev, drv, "SW", dev->driver_data,
> dev_ofnode(dev), &child);
> };
>
> @@ -69,7 +70,9 @@ static struct dm_pmic_ops pmic_fan53555_ops = {
> };
>
> static const struct udevice_id pmic_fan53555_match[] = {
> - { .compatible = "fcs,fan53555" },
> + { .compatible = "fcs,fan53555", .data = FAN53555_VENDOR_FAIRCHILD, },
> + { .compatible = "silergy,syr827", .data = FAN53555_VENDOR_SILERGY, },
> + { .compatible = "silergy,syr828", .data = FAN53555_VENDOR_SILERGY, },
> { },
> };
>
> diff --git a/drivers/power/regulator/fan53555.c b/drivers/power/regulator/fan53555.c
> index dbd5502377..9c48b26216 100644
> --- a/drivers/power/regulator/fan53555.c
> +++ b/drivers/power/regulator/fan53555.c
> @@ -10,6 +10,7 @@
> #include <fdtdec.h>
> #include <i2c.h>
> #include <asm/gpio.h>
> +#include <power/fan53555.h>
> #include <power/pmic.h>
> #include <power/regulator.h>
>
> @@ -27,21 +28,37 @@
> * See http://www.onsemi.com/pub/Collateral/FAN53555-D.pdf for details.
> */
> static const struct {
> + unsigned int vendor;
> u8 die_id;
> u8 die_rev;
> + bool check_rev;
> u32 vsel_min;
> u32 vsel_step;
> } ic_types[] = {
> - { 0x0, 0x3, 600000, 10000 }, /* Option 00 */
> - { 0x0, 0xf, 800000, 10000 }, /* Option 13 */
> - { 0x0, 0xc, 600000, 12500 }, /* Option 23 */
> - { 0x1, 0x3, 600000, 10000 }, /* Option 01 */
> - { 0x3, 0x3, 600000, 10000 }, /* Option 03 */
> - { 0x4, 0xf, 603000, 12826 }, /* Option 04 */
> - { 0x5, 0x3, 600000, 10000 }, /* Option 05 */
> - { 0x8, 0x1, 600000, 10000 }, /* Option 08 */
> - { 0x8, 0xf, 600000, 10000 }, /* Option 08 */
> - { 0xc, 0xf, 603000, 12826 }, /* Option 09 */
> + /* Option 00 */
> + { FAN53555_VENDOR_FAIRCHILD, 0x0, 0x3, true, 600000, 10000 },
> + /* Option 13 */
> + { FAN53555_VENDOR_FAIRCHILD, 0x0, 0xf, true, 800000, 10000 },
> + /* Option 23 */
> + { FAN53555_VENDOR_FAIRCHILD, 0x0, 0xc, true, 600000, 12500 },
> + /* Option 01 */
> + { FAN53555_VENDOR_FAIRCHILD, 0x1, 0x3, true, 600000, 10000 },
> + /* Option 03 */
> + { FAN53555_VENDOR_FAIRCHILD, 0x3, 0x3, true, 600000, 10000 },
> + /* Option 04 */
> + { FAN53555_VENDOR_FAIRCHILD, 0x4, 0xf, true, 603000, 12826 },
> + /* Option 05 */
> + { FAN53555_VENDOR_FAIRCHILD, 0x5, 0x3, true, 600000, 10000 },
> + /* Option 08 */
> + { FAN53555_VENDOR_FAIRCHILD, 0x8, 0x1, true, 600000, 10000 },
> + /* Option 08 */
> + { FAN53555_VENDOR_FAIRCHILD, 0x8, 0xf, true, 600000, 10000 },
> + /* Option 09 */
> + { FAN53555_VENDOR_FAIRCHILD, 0xc, 0xf, true, 603000, 12826 },
> + /* SYL82X */
> + { FAN53555_VENDOR_SILERGY, 0x8, 0x0, false, 712500, 12500 },
> + /* SYL83X */
> + { FAN53555_VENDOR_SILERGY, 0x9, 0x0, false, 712500, 12500 },
> };
>
> /* I2C-accessible byte-sized registers */
> @@ -152,10 +169,14 @@ static int fan53555_voltages_setup(struct udevice *dev)
>
> /* Init voltage range and step */
> for (i = 0; i < ARRAY_SIZE(ic_types); ++i) {
> + if (ic_types[i].vendor != priv->vendor)
> + continue;
> +
> if (ic_types[i].die_id != priv->die_id)
> continue;
>
> - if (ic_types[i].die_rev != priv->die_rev)
> + if (ic_types[i].check_rev &&
> + ic_types[i].die_rev != priv->die_rev)
> continue;
>
> priv->vsel_min = ic_types[i].vsel_min;
> @@ -193,7 +214,7 @@ static int fan53555_probe(struct udevice *dev)
> return ID2;
>
> /* extract vendor, die_id and die_rev */
> - priv->vendor = bitfield_extract(ID1, 5, 3);
> + priv->vendor = dev->driver_data;
> priv->die_id = ID1 & GENMASK(3, 0);
> priv->die_rev = ID2 & GENMASK(3, 0);
>
> diff --git a/include/power/fan53555.h b/include/power/fan53555.h
> new file mode 100644
> index 0000000000..c039f06071
> --- /dev/null
> +++ b/include/power/fan53555.h
> @@ -0,0 +1,14 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2019 Vasily Khoruzhick <anarsoul at gmail.com>
> + */
> +
> +#ifndef _FAN53555_H_
> +#define _FAN53555_H_
> +
> +enum fan53555_vendor {
> + FAN53555_VENDOR_FAIRCHILD,
> + FAN53555_VENDOR_SILERGY,
> +};
> +
> +#endif
> --
> 2.24.0
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot
More information about the U-Boot
mailing list