* [PATCH v1 3/3] pinctrl: th1520: Factor out casts
@ 2024-10-11 14:48 ` Emil Renner Berthing
0 siblings, 0 replies; 8+ messages in thread
From: Emil Renner Berthing @ 2024-10-11 14:48 UTC (permalink / raw)
To: linux-kernel, linux-gpio, devicetree, linux-riscv
Cc: Linus Walleij, Jisheng Zhang, Guo Ren, Fu Wei, Paul Walmsley,
Palmer Dabbelt, Thomas Bonnefille
Limit the casts to get the mux data and flags from the driver data
pointer with each pin to two inline functions as requested by Andy
during review.
Signed-off-by: Emil Renner Berthing <emil.renner.berthing@canonical.com>
---
drivers/pinctrl/pinctrl-th1520.c | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-th1520.c b/drivers/pinctrl/pinctrl-th1520.c
index 8bd40cb2f013..7474d8da32f9 100644
--- a/drivers/pinctrl/pinctrl-th1520.c
+++ b/drivers/pinctrl/pinctrl-th1520.c
@@ -152,6 +152,16 @@ static enum th1520_muxtype th1520_muxtype_get(const char *str)
(TH1520_MUX_##m0 << 0) | (TH1520_MUX_##m1 << 5) | (TH1520_MUX_##m2 << 10) | \
(TH1520_MUX_##m3 << 15) | (TH1520_MUX_##m4 << 20) | (TH1520_MUX_##m5 << 25)) }
+static unsigned long th1520_pad_muxdata(void *drv_data)
+{
+ return (uintptr_t)drv_data & TH1520_PAD_MUXDATA;
+}
+
+static bool th1520_pad_no_padcfg(void *drv_data)
+{
+ return (uintptr_t)drv_data & TH1520_PAD_NO_PADCFG;
+}
+
static const struct pinctrl_pin_desc th1520_group1_pins[] = {
TH1520_PAD(0, OSC_CLK_IN, ____, ____, ____, ____, ____, ____, TH1520_PAD_NO_PADCFG),
TH1520_PAD(1, OSC_CLK_OUT, ____, ____, ____, ____, ____, ____, TH1520_PAD_NO_PADCFG),
@@ -590,7 +600,7 @@ static int th1520_pinconf_get(struct pinctrl_dev *pctldev,
u32 value;
u32 arg;
- if ((uintptr_t)desc->drv_data & TH1520_PAD_NO_PADCFG)
+ if (th1520_pad_no_padcfg(desc->drv_data))
return -ENOTSUPP;
value = readl_relaxed(th1520_padcfg(thp, pin));
@@ -660,7 +670,7 @@ static int th1520_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
unsigned int i;
u16 mask, value;
- if ((uintptr_t)desc->drv_data & TH1520_PAD_NO_PADCFG)
+ if (th1520_pad_no_padcfg(desc->drv_data))
return -ENOTSUPP;
mask = 0;
@@ -793,12 +803,14 @@ static int th1520_pinmux_set_mux(struct pinctrl_dev *pctldev,
{
struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev);
const struct function_desc *func = pinmux_generic_get_function(pctldev, fsel);
+ enum th1520_muxtype muxtype = (uintptr_t)func->data;
if (!func)
return -EINVAL;
+
return th1520_pinmux_set(thp, thp->desc.pins[gsel].number,
- (uintptr_t)thp->desc.pins[gsel].drv_data & TH1520_PAD_MUXDATA,
- (uintptr_t)func->data);
+ th1520_pad_muxdata(thp->desc.pins[gsel].drv_data),
+ muxtype);
}
static int th1520_gpio_request_enable(struct pinctrl_dev *pctldev,
@@ -809,7 +821,7 @@ static int th1520_gpio_request_enable(struct pinctrl_dev *pctldev,
const struct pin_desc *desc = pin_desc_get(pctldev, offset);
return th1520_pinmux_set(thp, offset,
- (uintptr_t)desc->drv_data & TH1520_PAD_MUXDATA,
+ th1520_pad_muxdata(desc->drv_data),
TH1520_MUX_GPIO);
}
--
2.43.0
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v1 3/3] pinctrl: th1520: Factor out casts
2024-10-11 14:48 ` Emil Renner Berthing
@ 2024-10-11 16:35 ` Drew Fustini
-1 siblings, 0 replies; 8+ messages in thread
From: Drew Fustini @ 2024-10-11 16:35 UTC (permalink / raw)
To: Emil Renner Berthing
Cc: linux-kernel, linux-gpio, devicetree, linux-riscv, Linus Walleij,
Jisheng Zhang, Guo Ren, Fu Wei, Paul Walmsley, Palmer Dabbelt,
Thomas Bonnefille
On Fri, Oct 11, 2024 at 04:48:25PM +0200, Emil Renner Berthing wrote:
> Limit the casts to get the mux data and flags from the driver data
> pointer with each pin to two inline functions as requested by Andy
> during review.
>
> Signed-off-by: Emil Renner Berthing <emil.renner.berthing@canonical.com>
> ---
> drivers/pinctrl/pinctrl-th1520.c | 22 +++++++++++++++++-----
> 1 file changed, 17 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/pinctrl/pinctrl-th1520.c b/drivers/pinctrl/pinctrl-th1520.c
> index 8bd40cb2f013..7474d8da32f9 100644
> --- a/drivers/pinctrl/pinctrl-th1520.c
> +++ b/drivers/pinctrl/pinctrl-th1520.c
> @@ -152,6 +152,16 @@ static enum th1520_muxtype th1520_muxtype_get(const char *str)
> (TH1520_MUX_##m0 << 0) | (TH1520_MUX_##m1 << 5) | (TH1520_MUX_##m2 << 10) | \
> (TH1520_MUX_##m3 << 15) | (TH1520_MUX_##m4 << 20) | (TH1520_MUX_##m5 << 25)) }
>
> +static unsigned long th1520_pad_muxdata(void *drv_data)
> +{
> + return (uintptr_t)drv_data & TH1520_PAD_MUXDATA;
> +}
> +
> +static bool th1520_pad_no_padcfg(void *drv_data)
> +{
> + return (uintptr_t)drv_data & TH1520_PAD_NO_PADCFG;
> +}
> +
> static const struct pinctrl_pin_desc th1520_group1_pins[] = {
> TH1520_PAD(0, OSC_CLK_IN, ____, ____, ____, ____, ____, ____, TH1520_PAD_NO_PADCFG),
> TH1520_PAD(1, OSC_CLK_OUT, ____, ____, ____, ____, ____, ____, TH1520_PAD_NO_PADCFG),
> @@ -590,7 +600,7 @@ static int th1520_pinconf_get(struct pinctrl_dev *pctldev,
> u32 value;
> u32 arg;
>
> - if ((uintptr_t)desc->drv_data & TH1520_PAD_NO_PADCFG)
> + if (th1520_pad_no_padcfg(desc->drv_data))
> return -ENOTSUPP;
>
> value = readl_relaxed(th1520_padcfg(thp, pin));
> @@ -660,7 +670,7 @@ static int th1520_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
> unsigned int i;
> u16 mask, value;
>
> - if ((uintptr_t)desc->drv_data & TH1520_PAD_NO_PADCFG)
> + if (th1520_pad_no_padcfg(desc->drv_data))
> return -ENOTSUPP;
>
> mask = 0;
> @@ -793,12 +803,14 @@ static int th1520_pinmux_set_mux(struct pinctrl_dev *pctldev,
> {
> struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev);
> const struct function_desc *func = pinmux_generic_get_function(pctldev, fsel);
> + enum th1520_muxtype muxtype = (uintptr_t)func->data;
>
> if (!func)
> return -EINVAL;
> +
> return th1520_pinmux_set(thp, thp->desc.pins[gsel].number,
> - (uintptr_t)thp->desc.pins[gsel].drv_data & TH1520_PAD_MUXDATA,
> - (uintptr_t)func->data);
> + th1520_pad_muxdata(thp->desc.pins[gsel].drv_data),
> + muxtype);
> }
>
> static int th1520_gpio_request_enable(struct pinctrl_dev *pctldev,
> @@ -809,7 +821,7 @@ static int th1520_gpio_request_enable(struct pinctrl_dev *pctldev,
> const struct pin_desc *desc = pin_desc_get(pctldev, offset);
>
> return th1520_pinmux_set(thp, offset,
> - (uintptr_t)desc->drv_data & TH1520_PAD_MUXDATA,
> + th1520_pad_muxdata(desc->drv_data),
> TH1520_MUX_GPIO);
> }
>
> --
> 2.43.0
>
Reviewed-by: Drew Fustini <dfustini@tenstorrent.com>
Thanks for improving this. I see the feedback from Andy [1] on your v2
now that you mention it.
-Drew
[1] https://lore.kernel.org/linux-gpio/Zj8K_0zpI_IAY66R@surfacebook.localdomain/
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v1 3/3] pinctrl: th1520: Factor out casts
@ 2024-10-11 16:35 ` Drew Fustini
0 siblings, 0 replies; 8+ messages in thread
From: Drew Fustini @ 2024-10-11 16:35 UTC (permalink / raw)
To: Emil Renner Berthing
Cc: linux-kernel, linux-gpio, devicetree, linux-riscv, Linus Walleij,
Jisheng Zhang, Guo Ren, Fu Wei, Paul Walmsley, Palmer Dabbelt,
Thomas Bonnefille
On Fri, Oct 11, 2024 at 04:48:25PM +0200, Emil Renner Berthing wrote:
> Limit the casts to get the mux data and flags from the driver data
> pointer with each pin to two inline functions as requested by Andy
> during review.
>
> Signed-off-by: Emil Renner Berthing <emil.renner.berthing@canonical.com>
> ---
> drivers/pinctrl/pinctrl-th1520.c | 22 +++++++++++++++++-----
> 1 file changed, 17 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/pinctrl/pinctrl-th1520.c b/drivers/pinctrl/pinctrl-th1520.c
> index 8bd40cb2f013..7474d8da32f9 100644
> --- a/drivers/pinctrl/pinctrl-th1520.c
> +++ b/drivers/pinctrl/pinctrl-th1520.c
> @@ -152,6 +152,16 @@ static enum th1520_muxtype th1520_muxtype_get(const char *str)
> (TH1520_MUX_##m0 << 0) | (TH1520_MUX_##m1 << 5) | (TH1520_MUX_##m2 << 10) | \
> (TH1520_MUX_##m3 << 15) | (TH1520_MUX_##m4 << 20) | (TH1520_MUX_##m5 << 25)) }
>
> +static unsigned long th1520_pad_muxdata(void *drv_data)
> +{
> + return (uintptr_t)drv_data & TH1520_PAD_MUXDATA;
> +}
> +
> +static bool th1520_pad_no_padcfg(void *drv_data)
> +{
> + return (uintptr_t)drv_data & TH1520_PAD_NO_PADCFG;
> +}
> +
> static const struct pinctrl_pin_desc th1520_group1_pins[] = {
> TH1520_PAD(0, OSC_CLK_IN, ____, ____, ____, ____, ____, ____, TH1520_PAD_NO_PADCFG),
> TH1520_PAD(1, OSC_CLK_OUT, ____, ____, ____, ____, ____, ____, TH1520_PAD_NO_PADCFG),
> @@ -590,7 +600,7 @@ static int th1520_pinconf_get(struct pinctrl_dev *pctldev,
> u32 value;
> u32 arg;
>
> - if ((uintptr_t)desc->drv_data & TH1520_PAD_NO_PADCFG)
> + if (th1520_pad_no_padcfg(desc->drv_data))
> return -ENOTSUPP;
>
> value = readl_relaxed(th1520_padcfg(thp, pin));
> @@ -660,7 +670,7 @@ static int th1520_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
> unsigned int i;
> u16 mask, value;
>
> - if ((uintptr_t)desc->drv_data & TH1520_PAD_NO_PADCFG)
> + if (th1520_pad_no_padcfg(desc->drv_data))
> return -ENOTSUPP;
>
> mask = 0;
> @@ -793,12 +803,14 @@ static int th1520_pinmux_set_mux(struct pinctrl_dev *pctldev,
> {
> struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev);
> const struct function_desc *func = pinmux_generic_get_function(pctldev, fsel);
> + enum th1520_muxtype muxtype = (uintptr_t)func->data;
>
> if (!func)
> return -EINVAL;
> +
> return th1520_pinmux_set(thp, thp->desc.pins[gsel].number,
> - (uintptr_t)thp->desc.pins[gsel].drv_data & TH1520_PAD_MUXDATA,
> - (uintptr_t)func->data);
> + th1520_pad_muxdata(thp->desc.pins[gsel].drv_data),
> + muxtype);
> }
>
> static int th1520_gpio_request_enable(struct pinctrl_dev *pctldev,
> @@ -809,7 +821,7 @@ static int th1520_gpio_request_enable(struct pinctrl_dev *pctldev,
> const struct pin_desc *desc = pin_desc_get(pctldev, offset);
>
> return th1520_pinmux_set(thp, offset,
> - (uintptr_t)desc->drv_data & TH1520_PAD_MUXDATA,
> + th1520_pad_muxdata(desc->drv_data),
> TH1520_MUX_GPIO);
> }
>
> --
> 2.43.0
>
Reviewed-by: Drew Fustini <dfustini@tenstorrent.com>
Thanks for improving this. I see the feedback from Andy [1] on your v2
now that you mention it.
-Drew
[1] https://lore.kernel.org/linux-gpio/Zj8K_0zpI_IAY66R@surfacebook.localdomain/
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 3/3] pinctrl: th1520: Factor out casts
2024-10-11 14:48 ` Emil Renner Berthing
(?)
(?)
@ 2024-10-15 9:57 ` Dan Carpenter
-1 siblings, 0 replies; 8+ messages in thread
From: Dan Carpenter @ 2024-10-15 9:57 UTC (permalink / raw)
To: oe-kbuild, Emil Renner Berthing; +Cc: lkp, oe-kbuild-all
Hi Emil,
kernel test robot noticed the following build warnings:
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Emil-Renner-Berthing/pinctrl-th1520-Fix-pinconf-return-values/20241011-224939
base: https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git devel
patch link: https://lore.kernel.org/r/20241011144826.381104-4-emil.renner.berthing%40canonical.com
patch subject: [PATCH v1 3/3] pinctrl: th1520: Factor out casts
config: csky-randconfig-r073-20241015 (https://download.01.org/0day-ci/archive/20241015/202410151731.MnWrd9PX-lkp@intel.com/config)
compiler: csky-linux-gcc (GCC) 14.1.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
| Closes: https://lore.kernel.org/r/202410151731.MnWrd9PX-lkp@intel.com/
smatch warnings:
drivers/pinctrl/pinctrl-th1520.c:808 th1520_pinmux_set_mux() warn: variable dereferenced before check 'func' (see line 806)
vim +/func +808 drivers/pinctrl/pinctrl-th1520.c
bed5cd6f8a9883 Emil Renner Berthing 2024-09-30 801 static int th1520_pinmux_set_mux(struct pinctrl_dev *pctldev,
bed5cd6f8a9883 Emil Renner Berthing 2024-09-30 802 unsigned int fsel, unsigned int gsel)
bed5cd6f8a9883 Emil Renner Berthing 2024-09-30 803 {
bed5cd6f8a9883 Emil Renner Berthing 2024-09-30 804 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev);
bed5cd6f8a9883 Emil Renner Berthing 2024-09-30 805 const struct function_desc *func = pinmux_generic_get_function(pctldev, fsel);
3d7cbbc97d4a47 Emil Renner Berthing 2024-10-11 @806 enum th1520_muxtype muxtype = (uintptr_t)func->data;
^^^^^^^^^^
Dereference
bed5cd6f8a9883 Emil Renner Berthing 2024-09-30 807
d01240b22abf28 clingfei 2024-10-03 @808 if (!func)
^^^^
Checked too late
d01240b22abf28 clingfei 2024-10-03 809 return -EINVAL;
3d7cbbc97d4a47 Emil Renner Berthing 2024-10-11 810
bed5cd6f8a9883 Emil Renner Berthing 2024-09-30 811 return th1520_pinmux_set(thp, thp->desc.pins[gsel].number,
3d7cbbc97d4a47 Emil Renner Berthing 2024-10-11 812 th1520_pad_muxdata(thp->desc.pins[gsel].drv_data),
3d7cbbc97d4a47 Emil Renner Berthing 2024-10-11 813 muxtype);
bed5cd6f8a9883 Emil Renner Berthing 2024-09-30 814 }
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v1 3/3] pinctrl: th1520: Factor out casts
2024-10-11 14:48 ` Emil Renner Berthing
@ 2024-10-16 18:45 ` Kees Bakker
-1 siblings, 0 replies; 8+ messages in thread
From: Kees Bakker @ 2024-10-16 18:45 UTC (permalink / raw)
To: Emil Renner Berthing, linux-kernel, linux-gpio, devicetree,
linux-riscv
Cc: Linus Walleij, Jisheng Zhang, Guo Ren, Fu Wei, Paul Walmsley,
Palmer Dabbelt, Thomas Bonnefille
Op 11-10-2024 om 16:48 schreef Emil Renner Berthing:
> Limit the casts to get the mux data and flags from the driver data
> pointer with each pin to two inline functions as requested by Andy
> during review.
>
> Signed-off-by: Emil Renner Berthing <emil.renner.berthing@canonical.com>
> ---
> drivers/pinctrl/pinctrl-th1520.c | 22 +++++++++++++++++-----
> 1 file changed, 17 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/pinctrl/pinctrl-th1520.c b/drivers/pinctrl/pinctrl-th1520.c
> index 8bd40cb2f013..7474d8da32f9 100644
> --- a/drivers/pinctrl/pinctrl-th1520.c
> +++ b/drivers/pinctrl/pinctrl-th1520.c
> @@ -152,6 +152,16 @@ static enum th1520_muxtype th1520_muxtype_get(const char *str)
> (TH1520_MUX_##m0 << 0) | (TH1520_MUX_##m1 << 5) | (TH1520_MUX_##m2 << 10) | \
> (TH1520_MUX_##m3 << 15) | (TH1520_MUX_##m4 << 20) | (TH1520_MUX_##m5 << 25)) }
>
> +static unsigned long th1520_pad_muxdata(void *drv_data)
> +{
> + return (uintptr_t)drv_data & TH1520_PAD_MUXDATA;
> +}
> +
> +static bool th1520_pad_no_padcfg(void *drv_data)
> +{
> + return (uintptr_t)drv_data & TH1520_PAD_NO_PADCFG;
> +}
> +
> static const struct pinctrl_pin_desc th1520_group1_pins[] = {
> TH1520_PAD(0, OSC_CLK_IN, ____, ____, ____, ____, ____, ____, TH1520_PAD_NO_PADCFG),
> TH1520_PAD(1, OSC_CLK_OUT, ____, ____, ____, ____, ____, ____, TH1520_PAD_NO_PADCFG),
> @@ -590,7 +600,7 @@ static int th1520_pinconf_get(struct pinctrl_dev *pctldev,
> u32 value;
> u32 arg;
>
> - if ((uintptr_t)desc->drv_data & TH1520_PAD_NO_PADCFG)
> + if (th1520_pad_no_padcfg(desc->drv_data))
> return -ENOTSUPP;
>
> value = readl_relaxed(th1520_padcfg(thp, pin));
> @@ -660,7 +670,7 @@ static int th1520_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
> unsigned int i;
> u16 mask, value;
>
> - if ((uintptr_t)desc->drv_data & TH1520_PAD_NO_PADCFG)
> + if (th1520_pad_no_padcfg(desc->drv_data))
> return -ENOTSUPP;
>
> mask = 0;
> @@ -793,12 +803,14 @@ static int th1520_pinmux_set_mux(struct pinctrl_dev *pctldev,
> {
> struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev);
> const struct function_desc *func = pinmux_generic_get_function(pctldev, fsel);
> + enum th1520_muxtype muxtype = (uintptr_t)func->data;
You cannot use func before checking for NULL (see if statement below)
>
> if (!func)
> return -EINVAL;
> +
> return th1520_pinmux_set(thp, thp->desc.pins[gsel].number,
> - (uintptr_t)thp->desc.pins[gsel].drv_data & TH1520_PAD_MUXDATA,
> - (uintptr_t)func->data);
> + th1520_pad_muxdata(thp->desc.pins[gsel].drv_data),
> + muxtype);
> }
>
> static int th1520_gpio_request_enable(struct pinctrl_dev *pctldev,
> @@ -809,7 +821,7 @@ static int th1520_gpio_request_enable(struct pinctrl_dev *pctldev,
> const struct pin_desc *desc = pin_desc_get(pctldev, offset);
>
> return th1520_pinmux_set(thp, offset,
> - (uintptr_t)desc->drv_data & TH1520_PAD_MUXDATA,
> + th1520_pad_muxdata(desc->drv_data),
> TH1520_MUX_GPIO);
> }
>
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v1 3/3] pinctrl: th1520: Factor out casts
@ 2024-10-16 18:45 ` Kees Bakker
0 siblings, 0 replies; 8+ messages in thread
From: Kees Bakker @ 2024-10-16 18:45 UTC (permalink / raw)
To: Emil Renner Berthing, linux-kernel, linux-gpio, devicetree,
linux-riscv
Cc: Linus Walleij, Jisheng Zhang, Guo Ren, Fu Wei, Paul Walmsley,
Palmer Dabbelt, Thomas Bonnefille
Op 11-10-2024 om 16:48 schreef Emil Renner Berthing:
> Limit the casts to get the mux data and flags from the driver data
> pointer with each pin to two inline functions as requested by Andy
> during review.
>
> Signed-off-by: Emil Renner Berthing <emil.renner.berthing@canonical.com>
> ---
> drivers/pinctrl/pinctrl-th1520.c | 22 +++++++++++++++++-----
> 1 file changed, 17 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/pinctrl/pinctrl-th1520.c b/drivers/pinctrl/pinctrl-th1520.c
> index 8bd40cb2f013..7474d8da32f9 100644
> --- a/drivers/pinctrl/pinctrl-th1520.c
> +++ b/drivers/pinctrl/pinctrl-th1520.c
> @@ -152,6 +152,16 @@ static enum th1520_muxtype th1520_muxtype_get(const char *str)
> (TH1520_MUX_##m0 << 0) | (TH1520_MUX_##m1 << 5) | (TH1520_MUX_##m2 << 10) | \
> (TH1520_MUX_##m3 << 15) | (TH1520_MUX_##m4 << 20) | (TH1520_MUX_##m5 << 25)) }
>
> +static unsigned long th1520_pad_muxdata(void *drv_data)
> +{
> + return (uintptr_t)drv_data & TH1520_PAD_MUXDATA;
> +}
> +
> +static bool th1520_pad_no_padcfg(void *drv_data)
> +{
> + return (uintptr_t)drv_data & TH1520_PAD_NO_PADCFG;
> +}
> +
> static const struct pinctrl_pin_desc th1520_group1_pins[] = {
> TH1520_PAD(0, OSC_CLK_IN, ____, ____, ____, ____, ____, ____, TH1520_PAD_NO_PADCFG),
> TH1520_PAD(1, OSC_CLK_OUT, ____, ____, ____, ____, ____, ____, TH1520_PAD_NO_PADCFG),
> @@ -590,7 +600,7 @@ static int th1520_pinconf_get(struct pinctrl_dev *pctldev,
> u32 value;
> u32 arg;
>
> - if ((uintptr_t)desc->drv_data & TH1520_PAD_NO_PADCFG)
> + if (th1520_pad_no_padcfg(desc->drv_data))
> return -ENOTSUPP;
>
> value = readl_relaxed(th1520_padcfg(thp, pin));
> @@ -660,7 +670,7 @@ static int th1520_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
> unsigned int i;
> u16 mask, value;
>
> - if ((uintptr_t)desc->drv_data & TH1520_PAD_NO_PADCFG)
> + if (th1520_pad_no_padcfg(desc->drv_data))
> return -ENOTSUPP;
>
> mask = 0;
> @@ -793,12 +803,14 @@ static int th1520_pinmux_set_mux(struct pinctrl_dev *pctldev,
> {
> struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev);
> const struct function_desc *func = pinmux_generic_get_function(pctldev, fsel);
> + enum th1520_muxtype muxtype = (uintptr_t)func->data;
You cannot use func before checking for NULL (see if statement below)
>
> if (!func)
> return -EINVAL;
> +
> return th1520_pinmux_set(thp, thp->desc.pins[gsel].number,
> - (uintptr_t)thp->desc.pins[gsel].drv_data & TH1520_PAD_MUXDATA,
> - (uintptr_t)func->data);
> + th1520_pad_muxdata(thp->desc.pins[gsel].drv_data),
> + muxtype);
> }
>
> static int th1520_gpio_request_enable(struct pinctrl_dev *pctldev,
> @@ -809,7 +821,7 @@ static int th1520_gpio_request_enable(struct pinctrl_dev *pctldev,
> const struct pin_desc *desc = pin_desc_get(pctldev, offset);
>
> return th1520_pinmux_set(thp, offset,
> - (uintptr_t)desc->drv_data & TH1520_PAD_MUXDATA,
> + th1520_pad_muxdata(desc->drv_data),
> TH1520_MUX_GPIO);
> }
>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 8+ messages in thread