[PATCH next 2/3] rockchip: io-domain: add support for PX30
Kever Yang
kever.yang at rock-chips.com
Tue Jul 16 03:57:16 CEST 2024
On 2024/6/15 00:54, Quentin Schulz wrote:
> From: Quentin Schulz <quentin.schulz at cherry.de>
>
> Port the PX30 part of the Rockchip IO Domain driver from Linux.
>
> This differs from linux version in that the io iodomain bit is enabled
> in the write ops instead of in an init ops as in linux, this way we can
> avoid keeping a full state of all supplies that have been configured.
>
> Signed-off-by: Quentin Schulz <quentin.schulz at cherry.de>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>
Thanks,
- Kever
> ---
> drivers/misc/rockchip-io-domain.c | 66 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 66 insertions(+)
>
> diff --git a/drivers/misc/rockchip-io-domain.c b/drivers/misc/rockchip-io-domain.c
> index 04d4d07c412..cf4f7c3984c 100644
> --- a/drivers/misc/rockchip-io-domain.c
> +++ b/drivers/misc/rockchip-io-domain.c
> @@ -27,6 +27,10 @@
> #define MAX_VOLTAGE_1_8 1980000
> #define MAX_VOLTAGE_3_3 3600000
>
> +#define PX30_IO_VSEL 0x180
> +#define PX30_IO_VSEL_VCCIO6_SRC BIT(0)
> +#define PX30_IO_VSEL_VCCIO6_SUPPLY_NUM 1
> +
> #define RK3328_SOC_CON4 0x410
> #define RK3328_SOC_CON4_VCCIO2 BIT(7)
> #define RK3328_SOC_VCCIO2_SUPPLY_NUM 1
> @@ -99,6 +103,22 @@ static int rockchip_iodomain_write(struct regmap *grf, uint offset, int idx, int
> return regmap_write(grf, offset, val);
> }
>
> +static int px30_iodomain_write(struct regmap *grf, uint offset, int idx, int uV)
> +{
> + int ret = rockchip_iodomain_write(grf, offset, idx, uV);
> +
> + if (!ret && idx == PX30_IO_VSEL_VCCIO6_SUPPLY_NUM) {
> + /*
> + * set vccio6 iodomain to also use this framework
> + * instead of a special gpio.
> + */
> + u32 val = PX30_IO_VSEL_VCCIO6_SRC | (PX30_IO_VSEL_VCCIO6_SRC << 16);
> + ret = regmap_write(grf, PX30_IO_VSEL, val);
> + }
> +
> + return ret;
> +}
> +
> static int rk3328_iodomain_write(struct regmap *grf, uint offset, int idx, int uV)
> {
> int ret = rockchip_iodomain_write(grf, offset, idx, uV);
> @@ -131,6 +151,44 @@ static int rk3399_pmu_iodomain_write(struct regmap *grf, uint offset, int idx, i
> return ret;
> }
>
> +static const struct rockchip_iodomain_soc_data soc_data_px30 = {
> + .grf_offset = 0x180,
> + .supply_names = {
> + NULL,
> + "vccio6-supply",
> + "vccio1-supply",
> + "vccio2-supply",
> + "vccio3-supply",
> + "vccio4-supply",
> + "vccio5-supply",
> + "vccio-oscgpi-supply",
> + },
> + .write = px30_iodomain_write,
> +};
> +
> +static const struct rockchip_iodomain_soc_data soc_data_px30_pmu = {
> + .grf_offset = 0x100,
> + .supply_names = {
> + NULL,
> + NULL,
> + NULL,
> + NULL,
> + NULL,
> + NULL,
> + NULL,
> + NULL,
> + NULL,
> + NULL,
> + NULL,
> + NULL,
> + NULL,
> + NULL,
> + "pmuio1-supply",
> + "pmuio2-supply",
> + },
> + .write = rockchip_iodomain_write,
> +};
> +
> static const struct rockchip_iodomain_soc_data soc_data_rk3328 = {
> .grf_offset = 0x410,
> .supply_names = {
> @@ -190,6 +248,14 @@ static const struct rockchip_iodomain_soc_data soc_data_rk3568_pmu = {
> };
>
> static const struct udevice_id rockchip_iodomain_ids[] = {
> + {
> + .compatible = "rockchip,px30-io-voltage-domain",
> + .data = (ulong)&soc_data_px30,
> + },
> + {
> + .compatible = "rockchip,px30-pmu-io-voltage-domain",
> + .data = (ulong)&soc_data_px30_pmu,
> + },
> {
> .compatible = "rockchip,rk3328-io-voltage-domain",
> .data = (ulong)&soc_data_rk3328,
>
More information about the U-Boot
mailing list