Re: [U-Boot] [PATCH v3 03/10] pinctrl: rockchip: Split the common set_mux() into per Soc【请注意,邮件由u-boot-boun...@lists.denx.de代发】

2019-05-08 Thread Kever Yang


On 05/07/2019 11:43 AM, Kever Yang wrote:
>
> On 04/16/2019 09:50 PM, David Wu wrote:
>> Such as rk3288's pins of pmu_gpio0 are a special feature, which have no
>> higher 16 writing corresponding bits, use common set_mux() func would
>> introduce more code, so implement their set_mux() in each Soc's own
>> file to reduce the size of code.
>>
>> Signed-off-by: David Wu 
> Reviewed-by: Kever Yang 

Applied to u-boot-rockchip, thanks!

>
> Thanks,
> - Kever
>> ---
>>
>> Change in v3:
>> - None
>>
>>  drivers/pinctrl/rockchip/pinctrl-rk3036.c | 25 +++
>>  drivers/pinctrl/rockchip/pinctrl-rk3128.c | 37 +
>>  drivers/pinctrl/rockchip/pinctrl-rk3188.c | 25 +++
>>  drivers/pinctrl/rockchip/pinctrl-rk322x.c | 34 +++
>>  drivers/pinctrl/rockchip/pinctrl-rk3288.c | 35 +++-
>>  drivers/pinctrl/rockchip/pinctrl-rk3328.c | 37 +
>>  drivers/pinctrl/rockchip/pinctrl-rk3368.c | 25 +++
>>  drivers/pinctrl/rockchip/pinctrl-rk3399.c | 34 +++
>>  .../pinctrl/rockchip/pinctrl-rockchip-core.c  | 41 +--
>>  drivers/pinctrl/rockchip/pinctrl-rockchip.h   |  8 
>>  drivers/pinctrl/rockchip/pinctrl-rv1108.c | 28 +
>>  11 files changed, 297 insertions(+), 32 deletions(-)
>>
>> diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3036.c 
>> b/drivers/pinctrl/rockchip/pinctrl-rk3036.c
>> index 2a651cd9b8..8969aea2e3 100644
>> --- a/drivers/pinctrl/rockchip/pinctrl-rk3036.c
>> +++ b/drivers/pinctrl/rockchip/pinctrl-rk3036.c
>> @@ -11,6 +11,30 @@
>>  
>>  #include "pinctrl-rockchip.h"
>>  
>> +static int rk3036_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
>> +{
>> +struct rockchip_pinctrl_priv *priv = bank->priv;
>> +int iomux_num = (pin / 8);
>> +struct regmap *regmap;
>> +int reg, ret, mask, mux_type;
>> +u8 bit;
>> +u32 data;
>> +
>> +regmap = (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU)
>> +? priv->regmap_pmu : priv->regmap_base;
>> +
>> +/* get basic quadrupel of mux registers and the correct reg inside */
>> +mux_type = bank->iomux[iomux_num].type;
>> +reg = bank->iomux[iomux_num].offset;
>> +reg += rockchip_get_mux_data(mux_type, pin, , );
>> +
>> +data = (mask << (bit + 16));
>> +data |= (mux & mask) << bit;
>> +ret = regmap_write(regmap, reg, data);
>> +
>> +return ret;
>> +}
>> +
>>  #define RK3036_PULL_OFFSET  0x118
>>  #define RK3036_PULL_PINS_PER_REG16
>>  #define RK3036_PULL_BANK_STRIDE 8
>> @@ -41,6 +65,7 @@ static struct rockchip_pin_ctrl rk3036_pin_ctrl = {
>>  .label  = "RK3036-GPIO",
>>  .type   = RK3036,
>>  .grf_mux_offset = 0xa8,
>> +.set_mux= rk3036_set_mux,
>>  .pull_calc_reg  = rk3036_calc_pull_reg_and_bit,
>>  };
>>  
>> diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3128.c 
>> b/drivers/pinctrl/rockchip/pinctrl-rk3128.c
>> index 43a6c173a0..de203334c7 100644
>> --- a/drivers/pinctrl/rockchip/pinctrl-rk3128.c
>> +++ b/drivers/pinctrl/rockchip/pinctrl-rk3128.c
>> @@ -98,6 +98,42 @@ static struct rockchip_mux_route_data 
>> rk3128_mux_route_data[] = {
>>  },
>>  };
>>  
>> +static int rk3128_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
>> +{
>> +struct rockchip_pinctrl_priv *priv = bank->priv;
>> +int iomux_num = (pin / 8);
>> +struct regmap *regmap;
>> +int reg, ret, mask, mux_type;
>> +u8 bit;
>> +u32 data, route_reg, route_val;
>> +
>> +regmap = (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU)
>> +? priv->regmap_pmu : priv->regmap_base;
>> +
>> +/* get basic quadrupel of mux registers and the correct reg inside */
>> +mux_type = bank->iomux[iomux_num].type;
>> +reg = bank->iomux[iomux_num].offset;
>> +reg += rockchip_get_mux_data(mux_type, pin, , );
>> +
>> +if (bank->recalced_mask & BIT(pin))
>> +rockchip_get_recalced_mux(bank, pin, , , );
>> +
>> +if (bank->route_mask & BIT(pin)) {
>> +if (rockchip_get_mux_route(bank, pin, mux, _reg,
>> +   _val)) {
>> +ret = regmap_write(regmap, route_reg, route_val);
>> +if (ret)
>> +return ret;
>> +}
>> +}
>> +
>> +data = (mask << (bit + 16));
>> +data |= (mux & mask) << bit;
>> +ret = regmap_write(regmap, reg, data);
>> +
>> +return ret;
>> +}
>> +
>>  #define RK3128_PULL_OFFSET  0x118
>>  #define RK3128_PULL_PINS_PER_REG16
>>  #define RK3128_PULL_BANK_STRIDE 8
>> @@ -133,6 +169,7 @@ static struct rockchip_pin_ctrl rk3128_pin_ctrl = {
>>  .niomux_recalced= ARRAY_SIZE(rk3128_mux_recalced_data),
>>  .iomux_routes   = rk3128_mux_route_data,
>>  .niomux_routes  = ARRAY_SIZE(rk3128_mux_route_data),
>> 

Re: [U-Boot] [PATCH v3 03/10] pinctrl: rockchip: Split the common set_mux() into per Soc

2019-05-06 Thread Kever Yang


On 04/16/2019 09:50 PM, David Wu wrote:
> Such as rk3288's pins of pmu_gpio0 are a special feature, which have no
> higher 16 writing corresponding bits, use common set_mux() func would
> introduce more code, so implement their set_mux() in each Soc's own
> file to reduce the size of code.
>
> Signed-off-by: David Wu 

Reviewed-by: Kever Yang 

Thanks,
- Kever
> ---
>
> Change in v3:
> - None
>
>  drivers/pinctrl/rockchip/pinctrl-rk3036.c | 25 +++
>  drivers/pinctrl/rockchip/pinctrl-rk3128.c | 37 +
>  drivers/pinctrl/rockchip/pinctrl-rk3188.c | 25 +++
>  drivers/pinctrl/rockchip/pinctrl-rk322x.c | 34 +++
>  drivers/pinctrl/rockchip/pinctrl-rk3288.c | 35 +++-
>  drivers/pinctrl/rockchip/pinctrl-rk3328.c | 37 +
>  drivers/pinctrl/rockchip/pinctrl-rk3368.c | 25 +++
>  drivers/pinctrl/rockchip/pinctrl-rk3399.c | 34 +++
>  .../pinctrl/rockchip/pinctrl-rockchip-core.c  | 41 +--
>  drivers/pinctrl/rockchip/pinctrl-rockchip.h   |  8 
>  drivers/pinctrl/rockchip/pinctrl-rv1108.c | 28 +
>  11 files changed, 297 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3036.c 
> b/drivers/pinctrl/rockchip/pinctrl-rk3036.c
> index 2a651cd9b8..8969aea2e3 100644
> --- a/drivers/pinctrl/rockchip/pinctrl-rk3036.c
> +++ b/drivers/pinctrl/rockchip/pinctrl-rk3036.c
> @@ -11,6 +11,30 @@
>  
>  #include "pinctrl-rockchip.h"
>  
> +static int rk3036_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
> +{
> + struct rockchip_pinctrl_priv *priv = bank->priv;
> + int iomux_num = (pin / 8);
> + struct regmap *regmap;
> + int reg, ret, mask, mux_type;
> + u8 bit;
> + u32 data;
> +
> + regmap = (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU)
> + ? priv->regmap_pmu : priv->regmap_base;
> +
> + /* get basic quadrupel of mux registers and the correct reg inside */
> + mux_type = bank->iomux[iomux_num].type;
> + reg = bank->iomux[iomux_num].offset;
> + reg += rockchip_get_mux_data(mux_type, pin, , );
> +
> + data = (mask << (bit + 16));
> + data |= (mux & mask) << bit;
> + ret = regmap_write(regmap, reg, data);
> +
> + return ret;
> +}
> +
>  #define RK3036_PULL_OFFSET   0x118
>  #define RK3036_PULL_PINS_PER_REG 16
>  #define RK3036_PULL_BANK_STRIDE  8
> @@ -41,6 +65,7 @@ static struct rockchip_pin_ctrl rk3036_pin_ctrl = {
>   .label  = "RK3036-GPIO",
>   .type   = RK3036,
>   .grf_mux_offset = 0xa8,
> + .set_mux= rk3036_set_mux,
>   .pull_calc_reg  = rk3036_calc_pull_reg_and_bit,
>  };
>  
> diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3128.c 
> b/drivers/pinctrl/rockchip/pinctrl-rk3128.c
> index 43a6c173a0..de203334c7 100644
> --- a/drivers/pinctrl/rockchip/pinctrl-rk3128.c
> +++ b/drivers/pinctrl/rockchip/pinctrl-rk3128.c
> @@ -98,6 +98,42 @@ static struct rockchip_mux_route_data 
> rk3128_mux_route_data[] = {
>   },
>  };
>  
> +static int rk3128_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
> +{
> + struct rockchip_pinctrl_priv *priv = bank->priv;
> + int iomux_num = (pin / 8);
> + struct regmap *regmap;
> + int reg, ret, mask, mux_type;
> + u8 bit;
> + u32 data, route_reg, route_val;
> +
> + regmap = (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU)
> + ? priv->regmap_pmu : priv->regmap_base;
> +
> + /* get basic quadrupel of mux registers and the correct reg inside */
> + mux_type = bank->iomux[iomux_num].type;
> + reg = bank->iomux[iomux_num].offset;
> + reg += rockchip_get_mux_data(mux_type, pin, , );
> +
> + if (bank->recalced_mask & BIT(pin))
> + rockchip_get_recalced_mux(bank, pin, , , );
> +
> + if (bank->route_mask & BIT(pin)) {
> + if (rockchip_get_mux_route(bank, pin, mux, _reg,
> +_val)) {
> + ret = regmap_write(regmap, route_reg, route_val);
> + if (ret)
> + return ret;
> + }
> + }
> +
> + data = (mask << (bit + 16));
> + data |= (mux & mask) << bit;
> + ret = regmap_write(regmap, reg, data);
> +
> + return ret;
> +}
> +
>  #define RK3128_PULL_OFFSET   0x118
>  #define RK3128_PULL_PINS_PER_REG 16
>  #define RK3128_PULL_BANK_STRIDE  8
> @@ -133,6 +169,7 @@ static struct rockchip_pin_ctrl rk3128_pin_ctrl = {
>   .niomux_recalced= ARRAY_SIZE(rk3128_mux_recalced_data),
>   .iomux_routes   = rk3128_mux_route_data,
>   .niomux_routes  = ARRAY_SIZE(rk3128_mux_route_data),
> + .set_mux= rk3128_set_mux,
>   .pull_calc_reg  = rk3128_calc_pull_reg_and_bit,
>  };
>  
> diff --git 

[U-Boot] [PATCH v3 03/10] pinctrl: rockchip: Split the common set_mux() into per Soc

2019-04-16 Thread David Wu
Such as rk3288's pins of pmu_gpio0 are a special feature, which have no
higher 16 writing corresponding bits, use common set_mux() func would
introduce more code, so implement their set_mux() in each Soc's own
file to reduce the size of code.

Signed-off-by: David Wu 
---

Change in v3:
- None

 drivers/pinctrl/rockchip/pinctrl-rk3036.c | 25 +++
 drivers/pinctrl/rockchip/pinctrl-rk3128.c | 37 +
 drivers/pinctrl/rockchip/pinctrl-rk3188.c | 25 +++
 drivers/pinctrl/rockchip/pinctrl-rk322x.c | 34 +++
 drivers/pinctrl/rockchip/pinctrl-rk3288.c | 35 +++-
 drivers/pinctrl/rockchip/pinctrl-rk3328.c | 37 +
 drivers/pinctrl/rockchip/pinctrl-rk3368.c | 25 +++
 drivers/pinctrl/rockchip/pinctrl-rk3399.c | 34 +++
 .../pinctrl/rockchip/pinctrl-rockchip-core.c  | 41 +--
 drivers/pinctrl/rockchip/pinctrl-rockchip.h   |  8 
 drivers/pinctrl/rockchip/pinctrl-rv1108.c | 28 +
 11 files changed, 297 insertions(+), 32 deletions(-)

diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3036.c 
b/drivers/pinctrl/rockchip/pinctrl-rk3036.c
index 2a651cd9b8..8969aea2e3 100644
--- a/drivers/pinctrl/rockchip/pinctrl-rk3036.c
+++ b/drivers/pinctrl/rockchip/pinctrl-rk3036.c
@@ -11,6 +11,30 @@
 
 #include "pinctrl-rockchip.h"
 
+static int rk3036_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
+{
+   struct rockchip_pinctrl_priv *priv = bank->priv;
+   int iomux_num = (pin / 8);
+   struct regmap *regmap;
+   int reg, ret, mask, mux_type;
+   u8 bit;
+   u32 data;
+
+   regmap = (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU)
+   ? priv->regmap_pmu : priv->regmap_base;
+
+   /* get basic quadrupel of mux registers and the correct reg inside */
+   mux_type = bank->iomux[iomux_num].type;
+   reg = bank->iomux[iomux_num].offset;
+   reg += rockchip_get_mux_data(mux_type, pin, , );
+
+   data = (mask << (bit + 16));
+   data |= (mux & mask) << bit;
+   ret = regmap_write(regmap, reg, data);
+
+   return ret;
+}
+
 #define RK3036_PULL_OFFSET 0x118
 #define RK3036_PULL_PINS_PER_REG   16
 #define RK3036_PULL_BANK_STRIDE8
@@ -41,6 +65,7 @@ static struct rockchip_pin_ctrl rk3036_pin_ctrl = {
.label  = "RK3036-GPIO",
.type   = RK3036,
.grf_mux_offset = 0xa8,
+   .set_mux= rk3036_set_mux,
.pull_calc_reg  = rk3036_calc_pull_reg_and_bit,
 };
 
diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3128.c 
b/drivers/pinctrl/rockchip/pinctrl-rk3128.c
index 43a6c173a0..de203334c7 100644
--- a/drivers/pinctrl/rockchip/pinctrl-rk3128.c
+++ b/drivers/pinctrl/rockchip/pinctrl-rk3128.c
@@ -98,6 +98,42 @@ static struct rockchip_mux_route_data 
rk3128_mux_route_data[] = {
},
 };
 
+static int rk3128_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
+{
+   struct rockchip_pinctrl_priv *priv = bank->priv;
+   int iomux_num = (pin / 8);
+   struct regmap *regmap;
+   int reg, ret, mask, mux_type;
+   u8 bit;
+   u32 data, route_reg, route_val;
+
+   regmap = (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU)
+   ? priv->regmap_pmu : priv->regmap_base;
+
+   /* get basic quadrupel of mux registers and the correct reg inside */
+   mux_type = bank->iomux[iomux_num].type;
+   reg = bank->iomux[iomux_num].offset;
+   reg += rockchip_get_mux_data(mux_type, pin, , );
+
+   if (bank->recalced_mask & BIT(pin))
+   rockchip_get_recalced_mux(bank, pin, , , );
+
+   if (bank->route_mask & BIT(pin)) {
+   if (rockchip_get_mux_route(bank, pin, mux, _reg,
+  _val)) {
+   ret = regmap_write(regmap, route_reg, route_val);
+   if (ret)
+   return ret;
+   }
+   }
+
+   data = (mask << (bit + 16));
+   data |= (mux & mask) << bit;
+   ret = regmap_write(regmap, reg, data);
+
+   return ret;
+}
+
 #define RK3128_PULL_OFFSET 0x118
 #define RK3128_PULL_PINS_PER_REG   16
 #define RK3128_PULL_BANK_STRIDE8
@@ -133,6 +169,7 @@ static struct rockchip_pin_ctrl rk3128_pin_ctrl = {
.niomux_recalced= ARRAY_SIZE(rk3128_mux_recalced_data),
.iomux_routes   = rk3128_mux_route_data,
.niomux_routes  = ARRAY_SIZE(rk3128_mux_route_data),
+   .set_mux= rk3128_set_mux,
.pull_calc_reg  = rk3128_calc_pull_reg_and_bit,
 };
 
diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3188.c 
b/drivers/pinctrl/rockchip/pinctrl-rk3188.c
index 7cc52c0075..617ae28ac8 100644
--- a/drivers/pinctrl/rockchip/pinctrl-rk3188.c
+++ b/drivers/pinctrl/rockchip/pinctrl-rk3188.c
@@ -11,6