linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray()
@ 2021-11-05 12:42 Andy Shevchenko
  2021-11-05 12:42 ` [PATCH v1 02/19] lib/string_helpers: Introduce managed variant of kasprintf_strarray() Andy Shevchenko
                   ` (19 more replies)
  0 siblings, 20 replies; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

We have a few users already that basically want to have array of
sequential strings to be allocated and filled.

Provide a helper for them (basically adjusted version from gpio-mockup.c).

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 include/linux/string_helpers.h |  1 +
 lib/string_helpers.c           | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/include/linux/string_helpers.h b/include/linux/string_helpers.h
index 4ba39e1403b2..f67a94013c87 100644
--- a/include/linux/string_helpers.h
+++ b/include/linux/string_helpers.h
@@ -100,6 +100,7 @@ char *kstrdup_quotable(const char *src, gfp_t gfp);
 char *kstrdup_quotable_cmdline(struct task_struct *task, gfp_t gfp);
 char *kstrdup_quotable_file(struct file *file, gfp_t gfp);
 
+char **kasprintf_strarray(gfp_t gfp, const char *prefix, size_t n);
 void kfree_strarray(char **array, size_t n);
 
 #endif
diff --git a/lib/string_helpers.c b/lib/string_helpers.c
index d5d008f5b1d9..9758997c465e 100644
--- a/lib/string_helpers.c
+++ b/lib/string_helpers.c
@@ -674,6 +674,39 @@ char *kstrdup_quotable_file(struct file *file, gfp_t gfp)
 }
 EXPORT_SYMBOL_GPL(kstrdup_quotable_file);
 
+/**
+ * kasprintf_strarray - allocate and fill array of sequential strings
+ * @gfp: flags for the slab allocator
+ * @prefix: prefix to be used
+ * @n: amount of lines to be allocated and filled
+ *
+ * Allocates and fills @n strings using pattern "%s-%zu", where prefix
+ * is provided by caller. The caller is responsible to free them with
+ * kfree_strarray() after use.
+ *
+ * Returns array of strings or NULL when memory can't be allocated.
+ */
+char **kasprintf_strarray(gfp_t gfp, const char *prefix, size_t n)
+{
+	char **names;
+	size_t i;
+
+	names = kcalloc(n + 1, sizeof(char *), gfp);
+	if (!names)
+		return NULL;
+
+	for (i = 0; i < n; i++) {
+		names[i] = kasprintf(gfp, "%s-%zu", prefix, i);
+		if (!names[i]) {
+			kfree_strarray(names, i);
+			return NULL;
+		}
+	}
+
+	return names;
+}
+EXPORT_SYMBOL_GPL(kasprintf_strarray);
+
 /**
  * kfree_strarray - free a number of dynamically allocated strings contained
  *                  in an array and the array itself
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 02/19] lib/string_helpers: Introduce managed variant of kasprintf_strarray()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-05 12:42 ` [PATCH v1 03/19] pinctrl/rockchip: Drop wrong kernel doc annotation Andy Shevchenko
                   ` (18 subsequent siblings)
  19 siblings, 0 replies; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Some of the users want to have easy way to allocate array of strings
that will be automatically cleaned when associated device is gone.

Introduce managed variant of kasprintf_strarray() for such use cases.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 include/linux/string_helpers.h |  3 +++
 lib/string_helpers.c           | 31 +++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/include/linux/string_helpers.h b/include/linux/string_helpers.h
index f67a94013c87..7a22921c9db7 100644
--- a/include/linux/string_helpers.h
+++ b/include/linux/string_helpers.h
@@ -7,6 +7,7 @@
 #include <linux/string.h>
 #include <linux/types.h>
 
+struct device;
 struct file;
 struct task_struct;
 
@@ -103,4 +104,6 @@ char *kstrdup_quotable_file(struct file *file, gfp_t gfp);
 char **kasprintf_strarray(gfp_t gfp, const char *prefix, size_t n);
 void kfree_strarray(char **array, size_t n);
 
+char **devm_kasprintf_strarray(struct device *dev, const char *prefix, size_t n);
+
 #endif
diff --git a/lib/string_helpers.c b/lib/string_helpers.c
index 9758997c465e..90f9f1b7afec 100644
--- a/lib/string_helpers.c
+++ b/lib/string_helpers.c
@@ -10,6 +10,7 @@
 #include <linux/math64.h>
 #include <linux/export.h>
 #include <linux/ctype.h>
+#include <linux/device.h>
 #include <linux/errno.h>
 #include <linux/fs.h>
 #include <linux/limits.h>
@@ -730,6 +731,36 @@ void kfree_strarray(char **array, size_t n)
 }
 EXPORT_SYMBOL_GPL(kfree_strarray);
 
+struct strarray {
+	char **array;
+	size_t n;
+};
+
+static void devm_kfree_strarray(struct device *dev, void *res)
+{
+	struct strarray *array = res;
+
+	kfree_strarray(array->array, array->n);
+}
+
+char **devm_kasprintf_strarray(struct device *dev, const char *prefix, size_t n)
+{
+	struct strarray *ptr;
+
+	ptr = devres_alloc(devm_kfree_strarray, sizeof(*ptr), GFP_KERNEL);
+	if (!ptr)
+		return ERR_PTR(-ENOMEM);
+
+	ptr->array = kasprintf_strarray(GFP_KERNEL, prefix, n);
+	if (!ptr->array) {
+		devres_free(ptr);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	return ptr->array;
+}
+EXPORT_SYMBOL_GPL(devm_kasprintf_strarray);
+
 /**
  * strscpy_pad() - Copy a C-string into a sized buffer
  * @dest: Where to copy the string to
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 03/19] pinctrl/rockchip: Drop wrong kernel doc annotation
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
  2021-11-05 12:42 ` [PATCH v1 02/19] lib/string_helpers: Introduce managed variant of kasprintf_strarray() Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-06 16:32   ` Heiko Stübner
  2021-11-05 12:42 ` [PATCH v1 04/19] pinctrl/rockchip: Use temporary variable for struct device Andy Shevchenko
                   ` (17 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Kernel doc validator is not happy:

  .../pinctrl-rockchip.c:45: warning: This comment starts with '/**', but isn't a kernel-doc comment.

Drop it as it's indeed not a kernel doc comment.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/pinctrl-rockchip.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index 5ce260f152ce..6031d98d9849 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -39,7 +39,7 @@
 #include "pinconf.h"
 #include "pinctrl-rockchip.h"
 
-/**
+/*
  * Generate a bitmask for setting a value (v) with a write mask bit in hiword
  * register 31:16 area.
  */
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 04/19] pinctrl/rockchip: Use temporary variable for struct device
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
  2021-11-05 12:42 ` [PATCH v1 02/19] lib/string_helpers: Introduce managed variant of kasprintf_strarray() Andy Shevchenko
  2021-11-05 12:42 ` [PATCH v1 03/19] pinctrl/rockchip: Drop wrong kernel doc annotation Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-08 12:46   ` Heiko Stübner
  2021-11-05 12:42 ` [PATCH v1 05/19] pinctrl/rockchip: Make use of the devm_platform_get_and_ioremap_resource() Andy Shevchenko
                   ` (16 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Use temporary variable for struct device to make code neater.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/pinctrl-rockchip.c | 116 +++++++++++++----------------
 1 file changed, 53 insertions(+), 63 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index 6031d98d9849..ae80c95bae87 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -285,6 +285,7 @@ static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,
 {
 	struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
 	const struct rockchip_pin_group *grp;
+	struct device *dev = info->dev;
 	struct pinctrl_map *new_map;
 	struct device_node *parent;
 	int map_num = 1;
@@ -296,8 +297,7 @@ static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,
 	 */
 	grp = pinctrl_name_to_group(info, np->name);
 	if (!grp) {
-		dev_err(info->dev, "unable to find group for node %pOFn\n",
-			np);
+		dev_err(dev, "unable to find group for node %pOFn\n", np);
 		return -EINVAL;
 	}
 
@@ -331,7 +331,7 @@ static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,
 		new_map[i].data.configs.num_configs = grp->data[i].nconfigs;
 	}
 
-	dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n",
+	dev_dbg(dev, "maps: function %s group %s num %d\n",
 		(*map)->data.mux.function, (*map)->data.mux.group, map_num);
 
 	return 0;
@@ -872,20 +872,20 @@ static int rockchip_verify_mux(struct rockchip_pin_bank *bank,
 			       int pin, int mux)
 {
 	struct rockchip_pinctrl *info = bank->drvdata;
+	struct device *dev = info->dev;
 	int iomux_num = (pin / 8);
 
 	if (iomux_num > 3)
 		return -EINVAL;
 
 	if (bank->iomux[iomux_num].type & IOMUX_UNROUTED) {
-		dev_err(info->dev, "pin %d is unrouted\n", pin);
+		dev_err(dev, "pin %d is unrouted\n", pin);
 		return -EINVAL;
 	}
 
 	if (bank->iomux[iomux_num].type & IOMUX_GPIO_ONLY) {
 		if (mux != RK_FUNC_GPIO) {
-			dev_err(info->dev,
-				"pin %d only supports a gpio mux\n", pin);
+			dev_err(dev, "pin %d only supports a gpio mux\n", pin);
 			return -ENOTSUPP;
 		}
 	}
@@ -909,6 +909,7 @@ static int rockchip_verify_mux(struct rockchip_pin_bank *bank,
 static int rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
 {
 	struct rockchip_pinctrl *info = bank->drvdata;
+	struct device *dev = info->dev;
 	int iomux_num = (pin / 8);
 	struct regmap *regmap;
 	int reg, ret, mask, mux_type;
@@ -922,8 +923,7 @@ static int rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
 	if (bank->iomux[iomux_num].type & IOMUX_GPIO_ONLY)
 		return 0;
 
-	dev_dbg(info->dev, "setting mux of GPIO%d-%d to %d\n",
-						bank->bank_num, pin, mux);
+	dev_dbg(dev, "setting mux of GPIO%d-%d to %d\n", bank->bank_num, pin, mux);
 
 	regmap = (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU)
 				? info->regmap_pmu : info->regmap_base;
@@ -1575,6 +1575,7 @@ static int rockchip_get_drive_perpin(struct rockchip_pin_bank *bank,
 {
 	struct rockchip_pinctrl *info = bank->drvdata;
 	struct rockchip_pin_ctrl *ctrl = info->ctrl;
+	struct device *dev = info->dev;
 	struct regmap *regmap;
 	int reg, ret;
 	u32 data, temp, rmask_bits;
@@ -1620,7 +1621,7 @@ static int rockchip_get_drive_perpin(struct rockchip_pin_bank *bank,
 			bit -= 16;
 			break;
 		default:
-			dev_err(info->dev, "unsupported bit: %d for pinctrl drive type: %d\n",
+			dev_err(dev, "unsupported bit: %d for pinctrl drive type: %d\n",
 				bit, drv_type);
 			return -EINVAL;
 		}
@@ -1632,8 +1633,7 @@ static int rockchip_get_drive_perpin(struct rockchip_pin_bank *bank,
 		rmask_bits = RK3288_DRV_BITS_PER_PIN;
 		break;
 	default:
-		dev_err(info->dev, "unsupported pinctrl drive type: %d\n",
-			drv_type);
+		dev_err(dev, "unsupported pinctrl drive type: %d\n", drv_type);
 		return -EINVAL;
 	}
 
@@ -1652,13 +1652,14 @@ static int rockchip_set_drive_perpin(struct rockchip_pin_bank *bank,
 {
 	struct rockchip_pinctrl *info = bank->drvdata;
 	struct rockchip_pin_ctrl *ctrl = info->ctrl;
+	struct device *dev = info->dev;
 	struct regmap *regmap;
 	int reg, ret, i;
 	u32 data, rmask, rmask_bits, temp;
 	u8 bit;
 	int drv_type = bank->drv[pin_num / 8].drv_type;
 
-	dev_dbg(info->dev, "setting drive of GPIO%d-%d to %d\n",
+	dev_dbg(dev, "setting drive of GPIO%d-%d to %d\n",
 		bank->bank_num, pin_num, strength);
 
 	ctrl->drv_calc_reg(bank, pin_num, &regmap, &reg, &bit);
@@ -1680,8 +1681,7 @@ static int rockchip_set_drive_perpin(struct rockchip_pin_bank *bank,
 	}
 
 	if (ret < 0) {
-		dev_err(info->dev, "unsupported driver strength %d\n",
-			strength);
+		dev_err(dev, "unsupported driver strength %d\n", strength);
 		return ret;
 	}
 
@@ -1720,7 +1720,7 @@ static int rockchip_set_drive_perpin(struct rockchip_pin_bank *bank,
 			bit -= 16;
 			break;
 		default:
-			dev_err(info->dev, "unsupported bit: %d for pinctrl drive type: %d\n",
+			dev_err(dev, "unsupported bit: %d for pinctrl drive type: %d\n",
 				bit, drv_type);
 			return -EINVAL;
 		}
@@ -1731,8 +1731,7 @@ static int rockchip_set_drive_perpin(struct rockchip_pin_bank *bank,
 		rmask_bits = RK3288_DRV_BITS_PER_PIN;
 		break;
 	default:
-		dev_err(info->dev, "unsupported pinctrl drive type: %d\n",
-			drv_type);
+		dev_err(dev, "unsupported pinctrl drive type: %d\n", drv_type);
 		return -EINVAL;
 	}
 
@@ -1766,6 +1765,7 @@ static int rockchip_get_pull(struct rockchip_pin_bank *bank, int pin_num)
 {
 	struct rockchip_pinctrl *info = bank->drvdata;
 	struct rockchip_pin_ctrl *ctrl = info->ctrl;
+	struct device *dev = info->dev;
 	struct regmap *regmap;
 	int reg, ret, pull_type;
 	u8 bit;
@@ -1800,7 +1800,7 @@ static int rockchip_get_pull(struct rockchip_pin_bank *bank, int pin_num)
 
 		return rockchip_pull_list[pull_type][data];
 	default:
-		dev_err(info->dev, "unsupported pinctrl type\n");
+		dev_err(dev, "unsupported pinctrl type\n");
 		return -EINVAL;
 	};
 }
@@ -1810,13 +1810,13 @@ static int rockchip_set_pull(struct rockchip_pin_bank *bank,
 {
 	struct rockchip_pinctrl *info = bank->drvdata;
 	struct rockchip_pin_ctrl *ctrl = info->ctrl;
+	struct device *dev = info->dev;
 	struct regmap *regmap;
 	int reg, ret, i, pull_type;
 	u8 bit;
 	u32 data, rmask;
 
-	dev_dbg(info->dev, "setting pull of GPIO%d-%d to %d\n",
-		 bank->bank_num, pin_num, pull);
+	dev_dbg(dev, "setting pull of GPIO%d-%d to %d\n", bank->bank_num, pin_num, pull);
 
 	/* rk3066b does support any pulls */
 	if (ctrl->type == RK3066B)
@@ -1859,8 +1859,7 @@ static int rockchip_set_pull(struct rockchip_pin_bank *bank,
 		}
 
 		if (ret < 0) {
-			dev_err(info->dev, "unsupported pull setting %d\n",
-				pull);
+			dev_err(dev, "unsupported pull setting %d\n", pull);
 			return ret;
 		}
 
@@ -1872,7 +1871,7 @@ static int rockchip_set_pull(struct rockchip_pin_bank *bank,
 		ret = regmap_update_bits(regmap, reg, rmask, data);
 		break;
 	default:
-		dev_err(info->dev, "unsupported pinctrl type\n");
+		dev_err(dev, "unsupported pinctrl type\n");
 		return -EINVAL;
 	}
 
@@ -1963,12 +1962,13 @@ static int rockchip_set_schmitt(struct rockchip_pin_bank *bank,
 {
 	struct rockchip_pinctrl *info = bank->drvdata;
 	struct rockchip_pin_ctrl *ctrl = info->ctrl;
+	struct device *dev = info->dev;
 	struct regmap *regmap;
 	int reg, ret;
 	u8 bit;
 	u32 data, rmask;
 
-	dev_dbg(info->dev, "setting input schmitt of GPIO%d-%d to %d\n",
+	dev_dbg(dev, "setting input schmitt of GPIO%d-%d to %d\n",
 		bank->bank_num, pin_num, enable);
 
 	ret = ctrl->schmitt_calc_reg(bank, pin_num, &regmap, &reg, &bit);
@@ -2028,10 +2028,11 @@ static int rockchip_pmx_set(struct pinctrl_dev *pctldev, unsigned selector,
 	struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
 	const unsigned int *pins = info->groups[group].pins;
 	const struct rockchip_pin_config *data = info->groups[group].data;
+	struct device *dev = info->dev;
 	struct rockchip_pin_bank *bank;
 	int cnt, ret = 0;
 
-	dev_dbg(info->dev, "enable function %s group %s\n",
+	dev_dbg(dev, "enable function %s group %s\n",
 		info->functions[selector].name, info->groups[group].name);
 
 	/*
@@ -2310,6 +2311,7 @@ static int rockchip_pinctrl_parse_groups(struct device_node *np,
 					      struct rockchip_pinctrl *info,
 					      u32 index)
 {
+	struct device *dev = info->dev;
 	struct rockchip_pin_bank *bank;
 	int size;
 	const __be32 *list;
@@ -2317,7 +2319,7 @@ static int rockchip_pinctrl_parse_groups(struct device_node *np,
 	int i, j;
 	int ret;
 
-	dev_dbg(info->dev, "group(%d): %pOFn\n", index, np);
+	dev_dbg(dev, "group(%d): %pOFn\n", index, np);
 
 	/* Initialise group */
 	grp->name = np->name;
@@ -2330,18 +2332,14 @@ static int rockchip_pinctrl_parse_groups(struct device_node *np,
 	/* we do not check return since it's safe node passed down */
 	size /= sizeof(*list);
 	if (!size || size % 4) {
-		dev_err(info->dev, "wrong pins number or pins and configs should be by 4\n");
+		dev_err(dev, "wrong pins number or pins and configs should be by 4\n");
 		return -EINVAL;
 	}
 
 	grp->npins = size / 4;
 
-	grp->pins = devm_kcalloc(info->dev, grp->npins, sizeof(unsigned int),
-						GFP_KERNEL);
-	grp->data = devm_kcalloc(info->dev,
-					grp->npins,
-					sizeof(struct rockchip_pin_config),
-					GFP_KERNEL);
+	grp->pins = devm_kcalloc(dev, grp->npins, sizeof(*grp->pins), GFP_KERNEL);
+	grp->data = devm_kcalloc(dev, grp->npins, sizeof(*grp->data), GFP_KERNEL);
 	if (!grp->pins || !grp->data)
 		return -ENOMEM;
 
@@ -2375,6 +2373,7 @@ static int rockchip_pinctrl_parse_functions(struct device_node *np,
 						struct rockchip_pinctrl *info,
 						u32 index)
 {
+	struct device *dev = info->dev;
 	struct device_node *child;
 	struct rockchip_pmx_func *func;
 	struct rockchip_pin_group *grp;
@@ -2382,7 +2381,7 @@ static int rockchip_pinctrl_parse_functions(struct device_node *np,
 	static u32 grp_index;
 	u32 i = 0;
 
-	dev_dbg(info->dev, "parse function(%d): %pOFn\n", index, np);
+	dev_dbg(dev, "parse function(%d): %pOFn\n", index, np);
 
 	func = &info->functions[index];
 
@@ -2392,8 +2391,7 @@ static int rockchip_pinctrl_parse_functions(struct device_node *np,
 	if (func->ngroups <= 0)
 		return 0;
 
-	func->groups = devm_kcalloc(info->dev,
-			func->ngroups, sizeof(char *), GFP_KERNEL);
+	func->groups = devm_kcalloc(dev, func->ngroups, sizeof(*func->groups), GFP_KERNEL);
 	if (!func->groups)
 		return -ENOMEM;
 
@@ -2421,20 +2419,14 @@ static int rockchip_pinctrl_parse_dt(struct platform_device *pdev,
 
 	rockchip_pinctrl_child_count(info, np);
 
-	dev_dbg(&pdev->dev, "nfunctions = %d\n", info->nfunctions);
-	dev_dbg(&pdev->dev, "ngroups = %d\n", info->ngroups);
+	dev_dbg(dev, "nfunctions = %d\n", info->nfunctions);
+	dev_dbg(dev, "ngroups = %d\n", info->ngroups);
 
-	info->functions = devm_kcalloc(dev,
-					      info->nfunctions,
-					      sizeof(struct rockchip_pmx_func),
-					      GFP_KERNEL);
+	info->functions = devm_kcalloc(dev, info->nfunctions, sizeof(*info->functions), GFP_KERNEL);
 	if (!info->functions)
 		return -ENOMEM;
 
-	info->groups = devm_kcalloc(dev,
-					    info->ngroups,
-					    sizeof(struct rockchip_pin_group),
-					    GFP_KERNEL);
+	info->groups = devm_kcalloc(dev, info->ngroups, sizeof(*info->groups), GFP_KERNEL);
 	if (!info->groups)
 		return -ENOMEM;
 
@@ -2446,7 +2438,7 @@ static int rockchip_pinctrl_parse_dt(struct platform_device *pdev,
 
 		ret = rockchip_pinctrl_parse_functions(child, info, i++);
 		if (ret) {
-			dev_err(&pdev->dev, "failed to parse function\n");
+			dev_err(dev, "failed to parse function\n");
 			of_node_put(child);
 			return ret;
 		}
@@ -2461,6 +2453,7 @@ static int rockchip_pinctrl_register(struct platform_device *pdev,
 	struct pinctrl_desc *ctrldesc = &info->pctl;
 	struct pinctrl_pin_desc *pindesc, *pdesc;
 	struct rockchip_pin_bank *pin_bank;
+	struct device *dev = &pdev->dev;
 	int pin, bank, ret;
 	int k;
 
@@ -2470,9 +2463,7 @@ static int rockchip_pinctrl_register(struct platform_device *pdev,
 	ctrldesc->pmxops = &rockchip_pmx_ops;
 	ctrldesc->confops = &rockchip_pinconf_ops;
 
-	pindesc = devm_kcalloc(&pdev->dev,
-			       info->ctrl->nr_pins, sizeof(*pindesc),
-			       GFP_KERNEL);
+	pindesc = devm_kcalloc(dev, info->ctrl->nr_pins, sizeof(*pindesc), GFP_KERNEL);
 	if (!pindesc)
 		return -ENOMEM;
 
@@ -2497,9 +2488,9 @@ static int rockchip_pinctrl_register(struct platform_device *pdev,
 	if (ret)
 		return ret;
 
-	info->pctl_dev = devm_pinctrl_register(&pdev->dev, ctrldesc, info);
+	info->pctl_dev = devm_pinctrl_register(dev, ctrldesc, info);
 	if (IS_ERR(info->pctl_dev)) {
-		dev_err(&pdev->dev, "could not register pinctrl driver\n");
+		dev_err(dev, "could not register pinctrl driver\n");
 		return PTR_ERR(info->pctl_dev);
 	}
 
@@ -2513,8 +2504,9 @@ static struct rockchip_pin_ctrl *rockchip_pinctrl_get_soc_data(
 						struct rockchip_pinctrl *d,
 						struct platform_device *pdev)
 {
+	struct device *dev = &pdev->dev;
+	struct device_node *node = dev->of_node;
 	const struct of_device_id *match;
-	struct device_node *node = pdev->dev.of_node;
 	struct rockchip_pin_ctrl *ctrl;
 	struct rockchip_pin_bank *bank;
 	int grf_offs, pmu_offs, drv_grf_offs, drv_pmu_offs, i, j;
@@ -2566,7 +2558,7 @@ static struct rockchip_pin_ctrl *rockchip_pinctrl_get_soc_data(
 						drv_pmu_offs : drv_grf_offs;
 			}
 
-			dev_dbg(d->dev, "bank %d, iomux %d has iom_offset 0x%x drv_offset 0x%x\n",
+			dev_dbg(dev, "bank %d, iomux %d has iom_offset 0x%x drv_offset 0x%x\n",
 				i, j, iom->offset, drv->offset);
 
 			/*
@@ -2675,8 +2667,8 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev)
 {
 	struct rockchip_pinctrl *info;
 	struct device *dev = &pdev->dev;
+	struct device_node *np = dev->of_node, *node;
 	struct rockchip_pin_ctrl *ctrl;
-	struct device_node *np = pdev->dev.of_node, *node;
 	struct resource *res;
 	void __iomem *base;
 	int ret;
@@ -2712,8 +2704,8 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev)
 
 		rockchip_regmap_config.max_register = resource_size(res) - 4;
 		rockchip_regmap_config.name = "rockchip,pinctrl";
-		info->regmap_base = devm_regmap_init_mmio(&pdev->dev, base,
-						    &rockchip_regmap_config);
+		info->regmap_base =
+			devm_regmap_init_mmio(dev, base, &rockchip_regmap_config);
 
 		/* to check for the old dt-bindings */
 		info->reg_size = resource_size(res);
@@ -2725,12 +2717,10 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev)
 			if (IS_ERR(base))
 				return PTR_ERR(base);
 
-			rockchip_regmap_config.max_register =
-							resource_size(res) - 4;
+			rockchip_regmap_config.max_register = resource_size(res) - 4;
 			rockchip_regmap_config.name = "rockchip,pinctrl-pull";
-			info->regmap_pull = devm_regmap_init_mmio(&pdev->dev,
-						    base,
-						    &rockchip_regmap_config);
+			info->regmap_pull =
+				devm_regmap_init_mmio(dev, base, &rockchip_regmap_config);
 		}
 	}
 
@@ -2750,7 +2740,7 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev)
 
 	ret = of_platform_populate(np, rockchip_bank_match, NULL, NULL);
 	if (ret) {
-		dev_err(&pdev->dev, "failed to register gpio device\n");
+		dev_err(dev, "failed to register gpio device\n");
 		return ret;
 	}
 
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 05/19] pinctrl/rockchip: Make use of the devm_platform_get_and_ioremap_resource()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (2 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 04/19] pinctrl/rockchip: Use temporary variable for struct device Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-08 12:48   ` Heiko Stübner
  2021-11-05 12:42 ` [PATCH v1 06/19] pinctrl/rockchip: Convert to use dev_err_probe() Andy Shevchenko
                   ` (15 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Use the devm_platform_get_and_ioremap_resource() helper instead of
calling platform_get_resource() and devm_ioremap_resource()
separately.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/pinctrl-rockchip.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index ae80c95bae87..7206ee30a6b2 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -2697,8 +2697,7 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev)
 		if (IS_ERR(info->regmap_base))
 			return PTR_ERR(info->regmap_base);
 	} else {
-		res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-		base = devm_ioremap_resource(&pdev->dev, res);
+		base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
 		if (IS_ERR(base))
 			return PTR_ERR(base);
 
@@ -2712,8 +2711,7 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev)
 
 		/* Honor the old binding, with pull registers as 2nd resource */
 		if (ctrl->type == RK3188 && info->reg_size < 0x200) {
-			res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-			base = devm_ioremap_resource(&pdev->dev, res);
+			base = devm_platform_get_and_ioremap_resource(pdev, 1, &res);
 			if (IS_ERR(base))
 				return PTR_ERR(base);
 
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 06/19] pinctrl/rockchip: Convert to use dev_err_probe()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (3 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 05/19] pinctrl/rockchip: Make use of the devm_platform_get_and_ioremap_resource() Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-08 12:49   ` Heiko Stübner
  2021-11-05 12:42 ` [PATCH v1 07/19] pinctrl/rockchip: Switch to use devm_kasprintf_strarray() Andy Shevchenko
                   ` (14 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

It's fine to call dev_err_probe() in ->probe() when error code is known.
Convert the driver to use dev_err_probe().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/pinctrl-rockchip.c | 30 ++++++++++--------------------
 1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index 7206ee30a6b2..929c96ea621a 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -2331,10 +2331,8 @@ static int rockchip_pinctrl_parse_groups(struct device_node *np,
 	list = of_get_property(np, "rockchip,pins", &size);
 	/* we do not check return since it's safe node passed down */
 	size /= sizeof(*list);
-	if (!size || size % 4) {
-		dev_err(dev, "wrong pins number or pins and configs should be by 4\n");
-		return -EINVAL;
-	}
+	if (!size || size % 4)
+		return dev_err_probe(dev, -EINVAL, "wrong pins number or pins and configs should be by 4\n");
 
 	grp->npins = size / 4;
 
@@ -2489,10 +2487,8 @@ static int rockchip_pinctrl_register(struct platform_device *pdev,
 		return ret;
 
 	info->pctl_dev = devm_pinctrl_register(dev, ctrldesc, info);
-	if (IS_ERR(info->pctl_dev)) {
-		dev_err(dev, "could not register pinctrl driver\n");
-		return PTR_ERR(info->pctl_dev);
-	}
+	if (IS_ERR(info->pctl_dev))
+		return dev_err_probe(dev, PTR_ERR(info->pctl_dev), "could not register pinctrl driver\n");
 
 	return 0;
 }
@@ -2673,10 +2669,8 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev)
 	void __iomem *base;
 	int ret;
 
-	if (!dev->of_node) {
-		dev_err(dev, "device tree node not found\n");
-		return -ENODEV;
-	}
+	if (!dev->of_node)
+		return dev_err_probe(dev, -ENODEV, "device tree node not found\n");
 
 	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
 	if (!info)
@@ -2685,10 +2679,8 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev)
 	info->dev = dev;
 
 	ctrl = rockchip_pinctrl_get_soc_data(info, pdev);
-	if (!ctrl) {
-		dev_err(dev, "driver data not available\n");
-		return -EINVAL;
-	}
+	if (!ctrl)
+		return dev_err_probe(dev, -EINVAL, "driver data not available\n");
 	info->ctrl = ctrl;
 
 	node = of_parse_phandle(np, "rockchip,grf", 0);
@@ -2737,10 +2729,8 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev)
 	platform_set_drvdata(pdev, info);
 
 	ret = of_platform_populate(np, rockchip_bank_match, NULL, NULL);
-	if (ret) {
-		dev_err(dev, "failed to register gpio device\n");
-		return ret;
-	}
+	if (ret)
+		return dev_err_probe(dev, ret, "failed to register gpio device\n");
 
 	return 0;
 }
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 07/19] pinctrl/rockchip: Switch to use devm_kasprintf_strarray()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (4 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 06/19] pinctrl/rockchip: Convert to use dev_err_probe() Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-08 12:51   ` Heiko Stübner
  2021-11-05 12:42 ` [PATCH v1 08/19] pinctrl: armada-37xx: Fix function name in the kernel doc Andy Shevchenko
                   ` (13 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Since we have a generic helper, switch the module to use it.

As a side effect, add check for the memory allocation failures and
cleanup it either in error case or when driver is unloading.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/pinctrl-rockchip.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index 929c96ea621a..438808a867cf 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -33,6 +33,8 @@
 #include <linux/clk.h>
 #include <linux/regmap.h>
 #include <linux/mfd/syscon.h>
+#include <linux/string_helpers.h>
+
 #include <dt-bindings/pinctrl/rockchip.h>
 
 #include "core.h"
@@ -2452,6 +2454,7 @@ static int rockchip_pinctrl_register(struct platform_device *pdev,
 	struct pinctrl_pin_desc *pindesc, *pdesc;
 	struct rockchip_pin_bank *pin_bank;
 	struct device *dev = &pdev->dev;
+	char **pin_names;
 	int pin, bank, ret;
 	int k;
 
@@ -2471,10 +2474,14 @@ static int rockchip_pinctrl_register(struct platform_device *pdev,
 	pdesc = pindesc;
 	for (bank = 0, k = 0; bank < info->ctrl->nr_banks; bank++) {
 		pin_bank = &info->ctrl->pin_banks[bank];
+
+		pin_names = devm_kasprintf_strarray(dev, pin_bank->name, pin_bank->nr_pins);
+		if (IS_ERR(pin_names))
+			return PTR_ERR(pin_names);
+
 		for (pin = 0; pin < pin_bank->nr_pins; pin++, k++) {
 			pdesc->number = k;
-			pdesc->name = kasprintf(GFP_KERNEL, "%s-%d",
-						pin_bank->name, pin);
+			pdesc->name = pin_names[pin];
 			pdesc++;
 		}
 
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 08/19] pinctrl: armada-37xx: Fix function name in the kernel doc
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (5 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 07/19] pinctrl/rockchip: Switch to use devm_kasprintf_strarray() Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-08 10:37   ` Gregory CLEMENT
  2021-11-05 12:42 ` [PATCH v1 09/19] pinctrl: armada-37xx: Use temporary variable for struct device Andy Shevchenko
                   ` (12 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Kernel doc validator is not happy:

  .../pinctrl-armada-37xx.c:926: warning: expecting prototype for armada_37xx_fill_funcs(). Prototype was for armada_37xx_fill_func() instead

Fix this by updating function name in the kernel doc.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index 5cb018f98800..5615cb7a1209 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -913,7 +913,7 @@ static int armada_37xx_fill_group(struct armada_37xx_pinctrl *info)
 }
 
 /**
- * armada_37xx_fill_funcs() - complete the funcs array
+ * armada_37xx_fill_func() - complete the funcs array
  * @info: info driver instance
  *
  * Based on the data available from the armada_37xx_pin_group array
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 09/19] pinctrl: armada-37xx: Use temporary variable for struct device
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (6 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 08/19] pinctrl: armada-37xx: Fix function name in the kernel doc Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-08 10:49   ` Gregory CLEMENT
  2021-11-05 12:42 ` [PATCH v1 10/19] pinctrl: armada-37xx: Make use of the devm_platform_ioremap_resource() Andy Shevchenko
                   ` (11 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Use temporary variable for struct device to make code neater.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 56 +++++++++------------
 1 file changed, 23 insertions(+), 33 deletions(-)

diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index 5615cb7a1209..37f92dc54d7a 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -341,12 +341,12 @@ static int armada_37xx_pmx_set_by_name(struct pinctrl_dev *pctldev,
 				       struct armada_37xx_pin_group *grp)
 {
 	struct armada_37xx_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
+	struct device *dev = info->dev;
 	unsigned int reg = SELECTION;
 	unsigned int mask = grp->reg_mask;
 	int func, val;
 
-	dev_dbg(info->dev, "enable function %s group %s\n",
-		name, grp->name);
+	dev_dbg(dev, "enable function %s group %s\n", name, grp->name);
 
 	func = match_string(grp->funcs, NB_FUNCS, name);
 	if (func < 0)
@@ -722,16 +722,16 @@ static unsigned int armada_37xx_irq_startup(struct irq_data *d)
 static int armada_37xx_irqchip_register(struct platform_device *pdev,
 					struct armada_37xx_pinctrl *info)
 {
-	struct device_node *np = info->dev->of_node;
 	struct gpio_chip *gc = &info->gpio_chip;
 	struct irq_chip *irqchip = &info->irq_chip;
 	struct gpio_irq_chip *girq = &gc->irq;
 	struct device *dev = &pdev->dev;
+	struct device_node *np;
 	struct resource res;
 	int ret = -ENODEV, i, nr_irq_parent;
 
 	/* Check if we have at least one gpio-controller child node */
-	for_each_child_of_node(info->dev->of_node, np) {
+	for_each_child_of_node(dev->of_node, np) {
 		if (of_property_read_bool(np, "gpio-controller")) {
 			ret = 0;
 			break;
@@ -750,12 +750,12 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
 		return 0;
 	}
 
-	if (of_address_to_resource(info->dev->of_node, 1, &res)) {
+	if (of_address_to_resource(dev->of_node, 1, &res)) {
 		dev_err(dev, "cannot find IO resource\n");
 		return -ENOENT;
 	}
 
-	info->base = devm_ioremap_resource(info->dev, &res);
+	info->base = devm_ioremap_resource(dev, &res);
 	if (IS_ERR(info->base))
 		return PTR_ERR(info->base);
 
@@ -774,8 +774,7 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
 	 * the chained irq with all of them.
 	 */
 	girq->num_parents = nr_irq_parent;
-	girq->parents = devm_kcalloc(&pdev->dev, nr_irq_parent,
-				     sizeof(*girq->parents), GFP_KERNEL);
+	girq->parents = devm_kcalloc(dev, nr_irq_parent, sizeof(*girq->parents), GFP_KERNEL);
 	if (!girq->parents)
 		return -ENOMEM;
 	for (i = 0; i < nr_irq_parent; i++) {
@@ -794,11 +793,12 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
 static int armada_37xx_gpiochip_register(struct platform_device *pdev,
 					struct armada_37xx_pinctrl *info)
 {
+	struct device *dev = &pdev->dev;
 	struct device_node *np;
 	struct gpio_chip *gc;
 	int ret = -ENODEV;
 
-	for_each_child_of_node(info->dev->of_node, np) {
+	for_each_child_of_node(dev->of_node, np) {
 		if (of_find_property(np, "gpio-controller", NULL)) {
 			ret = 0;
 			break;
@@ -811,19 +811,16 @@ static int armada_37xx_gpiochip_register(struct platform_device *pdev,
 
 	gc = &info->gpio_chip;
 	gc->ngpio = info->data->nr_pins;
-	gc->parent = &pdev->dev;
+	gc->parent = dev;
 	gc->base = -1;
 	gc->of_node = np;
 	gc->label = info->data->name;
 
 	ret = armada_37xx_irqchip_register(pdev, info);
-	if (ret)
-		return ret;
-	ret = devm_gpiochip_add_data(&pdev->dev, gc, info);
 	if (ret)
 		return ret;
 
-	return 0;
+	return devm_gpiochip_add_data(dev, gc, info);
 }
 
 /**
@@ -874,13 +871,13 @@ static int armada_37xx_add_function(struct armada_37xx_pmx_func *funcs,
 static int armada_37xx_fill_group(struct armada_37xx_pinctrl *info)
 {
 	int n, num = 0, funcsize = info->data->nr_pins;
+	struct device *dev = info->dev;
 
 	for (n = 0; n < info->ngroups; n++) {
 		struct armada_37xx_pin_group *grp = &info->groups[n];
 		int i, j, f;
 
-		grp->pins = devm_kcalloc(info->dev,
-					 grp->npins + grp->extra_npins,
+		grp->pins = devm_kcalloc(dev, grp->npins + grp->extra_npins,
 					 sizeof(*grp->pins),
 					 GFP_KERNEL);
 		if (!grp->pins)
@@ -898,8 +895,7 @@ static int armada_37xx_fill_group(struct armada_37xx_pinctrl *info)
 			ret = armada_37xx_add_function(info->funcs, &funcsize,
 					    grp->funcs[f]);
 			if (ret == -EOVERFLOW)
-				dev_err(info->dev,
-					"More functions than pins(%d)\n",
+				dev_err(dev, "More functions than pins(%d)\n",
 					info->data->nr_pins);
 			if (ret < 0)
 				continue;
@@ -925,6 +921,7 @@ static int armada_37xx_fill_group(struct armada_37xx_pinctrl *info)
 static int armada_37xx_fill_func(struct armada_37xx_pinctrl *info)
 {
 	struct armada_37xx_pmx_func *funcs = info->funcs;
+	struct device *dev = info->dev;
 	int n;
 
 	for (n = 0; n < info->nfuncs; n++) {
@@ -932,8 +929,7 @@ static int armada_37xx_fill_func(struct armada_37xx_pinctrl *info)
 		const char **groups;
 		int g;
 
-		funcs[n].groups = devm_kcalloc(info->dev,
-					       funcs[n].ngroups,
+		funcs[n].groups = devm_kcalloc(dev, funcs[n].ngroups,
 					       sizeof(*(funcs[n].groups)),
 					       GFP_KERNEL);
 		if (!funcs[n].groups)
@@ -962,6 +958,7 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
 	const struct armada_37xx_pin_data *pin_data = info->data;
 	struct pinctrl_desc *ctrldesc = &info->pctl;
 	struct pinctrl_pin_desc *pindesc, *pdesc;
+	struct device *dev = &pdev->dev;
 	int pin, ret;
 
 	info->groups = pin_data->groups;
@@ -973,9 +970,7 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
 	ctrldesc->pmxops = &armada_37xx_pmx_ops;
 	ctrldesc->confops = &armada_37xx_pinconf_ops;
 
-	pindesc = devm_kcalloc(&pdev->dev,
-			       pin_data->nr_pins, sizeof(*pindesc),
-			       GFP_KERNEL);
+	pindesc = devm_kcalloc(dev, pin_data->nr_pins, sizeof(*pindesc), GFP_KERNEL);
 	if (!pindesc)
 		return -ENOMEM;
 
@@ -994,14 +989,10 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
 	 * we allocate functions for number of pins and hope there are
 	 * fewer unique functions than pins available
 	 */
-	info->funcs = devm_kcalloc(&pdev->dev,
-				   pin_data->nr_pins,
-				   sizeof(struct armada_37xx_pmx_func),
-				   GFP_KERNEL);
+	info->funcs = devm_kcalloc(dev, pin_data->nr_pins, sizeof(*info->funcs), GFP_KERNEL);
 	if (!info->funcs)
 		return -ENOMEM;
 
-
 	ret = armada_37xx_fill_group(info);
 	if (ret)
 		return ret;
@@ -1010,9 +1001,9 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
 	if (ret)
 		return ret;
 
-	info->pctl_dev = devm_pinctrl_register(&pdev->dev, ctrldesc, info);
+	info->pctl_dev = devm_pinctrl_register(dev, ctrldesc, info);
 	if (IS_ERR(info->pctl_dev)) {
-		dev_err(&pdev->dev, "could not register pinctrl driver\n");
+		dev_err(dev, "could not register pinctrl driver\n");
 		return PTR_ERR(info->pctl_dev);
 	}
 
@@ -1143,8 +1134,7 @@ static int __init armada_37xx_pinctrl_probe(struct platform_device *pdev)
 	struct regmap *regmap;
 	int ret;
 
-	info = devm_kzalloc(dev, sizeof(struct armada_37xx_pinctrl),
-			    GFP_KERNEL);
+	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 
@@ -1152,7 +1142,7 @@ static int __init armada_37xx_pinctrl_probe(struct platform_device *pdev)
 
 	regmap = syscon_node_to_regmap(np);
 	if (IS_ERR(regmap)) {
-		dev_err(&pdev->dev, "cannot get regmap\n");
+		dev_err(dev, "cannot get regmap\n");
 		return PTR_ERR(regmap);
 	}
 	info->regmap = regmap;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 10/19] pinctrl: armada-37xx: Make use of the devm_platform_ioremap_resource()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (7 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 09/19] pinctrl: armada-37xx: Use temporary variable for struct device Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-08 10:56   ` Gregory CLEMENT
  2021-11-05 12:42 ` [PATCH v1 11/19] pinctrl: armada-37xx: Convert to use dev_err_probe() Andy Shevchenko
                   ` (10 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Use the devm_platform_ioremap_resource() helper instead of
calling of_address_to_resource() and devm_ioremap_resource()
separately.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index 37f92dc54d7a..282b3fac3bec 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -727,7 +727,6 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
 	struct gpio_irq_chip *girq = &gc->irq;
 	struct device *dev = &pdev->dev;
 	struct device_node *np;
-	struct resource res;
 	int ret = -ENODEV, i, nr_irq_parent;
 
 	/* Check if we have at least one gpio-controller child node */
@@ -750,12 +749,7 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
 		return 0;
 	}
 
-	if (of_address_to_resource(dev->of_node, 1, &res)) {
-		dev_err(dev, "cannot find IO resource\n");
-		return -ENOENT;
-	}
-
-	info->base = devm_ioremap_resource(dev, &res);
+	info->base = devm_platform_ioremap_resource(pdev, 1);
 	if (IS_ERR(info->base))
 		return PTR_ERR(info->base);
 
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 11/19] pinctrl: armada-37xx: Convert to use dev_err_probe()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (8 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 10/19] pinctrl: armada-37xx: Make use of the devm_platform_ioremap_resource() Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-08 10:59   ` Gregory CLEMENT
  2021-11-05 12:42 ` [PATCH v1 12/19] pinctrl: armada-37xx: Switch to use devm_kasprintf_strarray() Andy Shevchenko
                   ` (9 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

It's fine to call dev_err_probe() in ->probe() when error code is known.
Convert the driver to use dev_err_probe().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index 282b3fac3bec..f48745c43419 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -736,10 +736,8 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
 			break;
 		}
 	}
-	if (ret) {
-		dev_err(dev, "no gpio-controller child node\n");
-		return ret;
-	}
+	if (ret)
+		return dev_err_probe(dev, ret, "no gpio-controller child node\n");
 
 	nr_irq_parent = of_irq_count(np);
 	spin_lock_init(&info->irq_lock);
@@ -996,10 +994,8 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
 		return ret;
 
 	info->pctl_dev = devm_pinctrl_register(dev, ctrldesc, info);
-	if (IS_ERR(info->pctl_dev)) {
-		dev_err(dev, "could not register pinctrl driver\n");
-		return PTR_ERR(info->pctl_dev);
-	}
+	if (IS_ERR(info->pctl_dev))
+		return dev_err_probe(dev, PTR_ERR(info->pctl_dev), "could not register pinctrl driver\n");
 
 	return 0;
 }
@@ -1135,10 +1131,8 @@ static int __init armada_37xx_pinctrl_probe(struct platform_device *pdev)
 	info->dev = dev;
 
 	regmap = syscon_node_to_regmap(np);
-	if (IS_ERR(regmap)) {
-		dev_err(dev, "cannot get regmap\n");
-		return PTR_ERR(regmap);
-	}
+	if (IS_ERR(regmap))
+		return dev_err_probe(dev, PTR_ERR(regmap), "cannot get regmap\n");
 	info->regmap = regmap;
 
 	info->data = of_device_get_match_data(dev);
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 12/19] pinctrl: armada-37xx: Switch to use devm_kasprintf_strarray()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (9 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 11/19] pinctrl: armada-37xx: Convert to use dev_err_probe() Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-08 11:09   ` Gregory CLEMENT
  2021-11-05 12:42 ` [PATCH v1 13/19] pinctrl: st: Drop wrong kernel doc annotations Andy Shevchenko
                   ` (8 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Since we have a generic helper, switch the module to use it.

As a side effect, add check for the memory allocation failures and
cleanup it either in error case or when driver is unloading.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index f48745c43419..08cad14042e2 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -23,6 +23,7 @@
 #include <linux/platform_device.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
+#include <linux/string_helpers.h>
 
 #include "../pinctrl-utils.h"
 
@@ -951,6 +952,7 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
 	struct pinctrl_desc *ctrldesc = &info->pctl;
 	struct pinctrl_pin_desc *pindesc, *pdesc;
 	struct device *dev = &pdev->dev;
+	char **pin_names;
 	int pin, ret;
 
 	info->groups = pin_data->groups;
@@ -969,11 +971,14 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
 	ctrldesc->pins = pindesc;
 	ctrldesc->npins = pin_data->nr_pins;
 
+	pin_names = devm_kasprintf_strarray(dev, pin_data->name, pin_data->nr_pins);
+	if (IS_ERR(pin_names))
+		return PTR_ERR(pin_names);
+
 	pdesc = pindesc;
 	for (pin = 0; pin < pin_data->nr_pins; pin++) {
 		pdesc->number = pin;
-		pdesc->name = kasprintf(GFP_KERNEL, "%s-%d",
-					pin_data->name, pin);
+		pdesc->name = pin_names[pin];
 		pdesc++;
 	}
 
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 13/19] pinctrl: st: Drop wrong kernel doc annotations
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (10 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 12/19] pinctrl: armada-37xx: Switch to use devm_kasprintf_strarray() Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-09 11:32   ` Linus Walleij
  2021-11-05 12:42 ` [PATCH v1 14/19] pinctrl: st: Use temporary variable for struct device Andy Shevchenko
                   ` (7 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Kernel doc validator is not happy:

  .../pinctrl-st.c:59: warning: This comment starts with '/**', but isn't a kernel-doc comment.
  .../pinctrl-st.c:73: warning: This comment starts with '/**', but isn't a kernel-doc comment.

Drop them as they are indeed not a kernel doc comments.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/pinctrl-st.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
index 1482a01dfec7..ae8783b34ed2 100644
--- a/drivers/pinctrl/pinctrl-st.c
+++ b/drivers/pinctrl/pinctrl-st.c
@@ -55,7 +55,7 @@
 #define ST_GPIO_DIRECTION_OUT	0x2
 #define ST_GPIO_DIRECTION_IN	0x4
 
-/**
+/*
  *  Packed style retime configuration.
  *  There are two registers cfg0 and cfg1 in this style for each bank.
  *  Each field in this register is 8 bit corresponding to 8 pins in the bank.
@@ -69,7 +69,7 @@
 #define RT_P_CFG1_CLKNOTDATA_FIELD(reg)		REG_FIELD(reg, 16, 23)
 #define RT_P_CFG1_DOUBLE_EDGE_FIELD(reg)	REG_FIELD(reg, 24, 31)
 
-/**
+/*
  * Dedicated style retime Configuration register
  * each register is dedicated per pin.
  */
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 14/19] pinctrl: st: Use temporary variable for struct device
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (11 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 13/19] pinctrl: st: Drop wrong kernel doc annotations Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-06  7:50   ` Joe Perches
  2021-11-05 12:42 ` [PATCH v1 15/19] pinctrl: st: Make use of the devm_platform_ioremap_resource_byname() Andy Shevchenko
                   ` (6 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Use temporary variable for struct device to make code neater.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/pinctrl-st.c | 73 +++++++++++++++++-------------------
 1 file changed, 34 insertions(+), 39 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
index ae8783b34ed2..f592e9ad93fc 100644
--- a/drivers/pinctrl/pinctrl-st.c
+++ b/drivers/pinctrl/pinctrl-st.c
@@ -814,26 +814,25 @@ static int st_pctl_dt_node_to_map(struct pinctrl_dev *pctldev,
 {
 	struct st_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
 	const struct st_pctl_group *grp;
+	struct device *dev = info->dev;
 	struct pinctrl_map *new_map;
 	struct device_node *parent;
 	int map_num, i;
 
 	grp = st_pctl_find_group_by_name(info, np->name);
 	if (!grp) {
-		dev_err(info->dev, "unable to find group for node %pOFn\n",
-			np);
+		dev_err(dev, "unable to find group for node %pOFn\n", np);
 		return -EINVAL;
 	}
 
 	map_num = grp->npins + 1;
-	new_map = devm_kcalloc(pctldev->dev,
-				map_num, sizeof(*new_map), GFP_KERNEL);
+	new_map = devm_kcalloc(dev, map_num, sizeof(*new_map), GFP_KERNEL);
 	if (!new_map)
 		return -ENOMEM;
 
 	parent = of_get_parent(np);
 	if (!parent) {
-		devm_kfree(pctldev->dev, new_map);
+		devm_kfree(dev, new_map);
 		return -EINVAL;
 	}
 
@@ -853,7 +852,7 @@ static int st_pctl_dt_node_to_map(struct pinctrl_dev *pctldev,
 		new_map[i].data.configs.configs = &grp->pin_conf[i].config;
 		new_map[i].data.configs.num_configs = 1;
 	}
-	dev_info(pctldev->dev, "maps: function %s group %s num %d\n",
+	dev_info(dev, "maps: function %s group %s num %d\n",
 		(*map)->data.mux.function, grp->name, map_num);
 
 	return 0;
@@ -1173,6 +1172,7 @@ static int st_pctl_dt_parse_groups(struct device_node *np,
 	/* bank pad direction val altfunction */
 	const __be32 *list;
 	struct property *pp;
+	struct device *dev = info->dev;
 	struct st_pinconf *conf;
 	struct device_node *pins;
 	int i = 0, npins = 0, nr_props, ret = 0;
@@ -1197,9 +1197,8 @@ static int st_pctl_dt_parse_groups(struct device_node *np,
 
 	grp->npins = npins;
 	grp->name = np->name;
-	grp->pins = devm_kcalloc(info->dev, npins, sizeof(u32), GFP_KERNEL);
-	grp->pin_conf = devm_kcalloc(info->dev,
-					npins, sizeof(*conf), GFP_KERNEL);
+	grp->pins = devm_kcalloc(dev, npins, sizeof(*grp->pins), GFP_KERNEL);
+	grp->pin_conf = devm_kcalloc(dev, npins, sizeof(*grp->pin_conf), GFP_KERNEL);
 
 	if (!grp->pins || !grp->pin_conf) {
 		ret = -ENOMEM;
@@ -1247,6 +1246,7 @@ static int st_pctl_dt_parse_groups(struct device_node *np,
 static int st_pctl_parse_functions(struct device_node *np,
 			struct st_pinctrl *info, u32 index, int *grp_index)
 {
+	struct device *dev = info->dev;
 	struct device_node *child;
 	struct st_pmx_func *func;
 	struct st_pctl_group *grp;
@@ -1256,11 +1256,10 @@ static int st_pctl_parse_functions(struct device_node *np,
 	func->name = np->name;
 	func->ngroups = of_get_child_count(np);
 	if (func->ngroups == 0) {
-		dev_err(info->dev, "No groups defined\n");
+		dev_err(dev, "No groups defined\n");
 		return -EINVAL;
 	}
-	func->groups = devm_kcalloc(info->dev,
-			func->ngroups, sizeof(char *), GFP_KERNEL);
+	func->groups = devm_kcalloc(dev, func->ngroups, sizeof(*func->groups), GFP_KERNEL);
 	if (!func->groups)
 		return -ENOMEM;
 
@@ -1275,8 +1274,7 @@ static int st_pctl_parse_functions(struct device_node *np,
 			return ret;
 		}
 	}
-	dev_info(info->dev, "Function[%d\t name:%s,\tgroups:%d]\n",
-				index, func->name, func->ngroups);
+	dev_info(dev, "Function[%d\t name:%s,\tgroups:%d]\n", index, func->name, func->ngroups);
 
 	return 0;
 }
@@ -1577,10 +1575,11 @@ static const struct of_device_id st_pctl_of_match[] = {
 static int st_pctl_probe_dt(struct platform_device *pdev,
 	struct pinctrl_desc *pctl_desc, struct st_pinctrl *info)
 {
+	struct device *dev = &pdev->dev;
 	int ret = 0;
 	int i = 0, j = 0, k = 0, bank;
 	struct pinctrl_pin_desc *pdesc;
-	struct device_node *np = pdev->dev.of_node;
+	struct device_node *np = dev->of_node;
 	struct device_node *child;
 	int grp_index = 0;
 	int irq = 0;
@@ -1588,30 +1587,26 @@ static int st_pctl_probe_dt(struct platform_device *pdev,
 
 	st_pctl_dt_child_count(info, np);
 	if (!info->nbanks) {
-		dev_err(&pdev->dev, "you need at least one gpio bank\n");
+		dev_err(dev, "you need at least one gpio bank\n");
 		return -EINVAL;
 	}
 
-	dev_info(&pdev->dev, "nbanks = %d\n", info->nbanks);
-	dev_info(&pdev->dev, "nfunctions = %d\n", info->nfunctions);
-	dev_info(&pdev->dev, "ngroups = %d\n", info->ngroups);
+	dev_info(dev, "nbanks = %d\n", info->nbanks);
+	dev_info(dev, "nfunctions = %d\n", info->nfunctions);
+	dev_info(dev, "ngroups = %d\n", info->ngroups);
 
-	info->functions = devm_kcalloc(&pdev->dev,
-		info->nfunctions, sizeof(*info->functions), GFP_KERNEL);
+	info->functions = devm_kcalloc(dev, info->nfunctions, sizeof(*info->functions), GFP_KERNEL);
 
-	info->groups = devm_kcalloc(&pdev->dev,
-			info->ngroups, sizeof(*info->groups),
-			GFP_KERNEL);
+	info->groups = devm_kcalloc(dev, info->ngroups, sizeof(*info->groups), GFP_KERNEL);
 
-	info->banks = devm_kcalloc(&pdev->dev,
-			info->nbanks, sizeof(*info->banks), GFP_KERNEL);
+	info->banks = devm_kcalloc(dev, info->nbanks, sizeof(*info->banks), GFP_KERNEL);
 
 	if (!info->functions || !info->groups || !info->banks)
 		return -ENOMEM;
 
 	info->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg");
 	if (IS_ERR(info->regmap)) {
-		dev_err(info->dev, "No syscfg phandle specified\n");
+		dev_err(dev, "No syscfg phandle specified\n");
 		return PTR_ERR(info->regmap);
 	}
 	info->data = of_match_node(st_pctl_of_match, np)->data;
@@ -1621,7 +1616,7 @@ static int st_pctl_probe_dt(struct platform_device *pdev,
 	if (irq > 0) {
 		res = platform_get_resource_byname(pdev,
 					IORESOURCE_MEM, "irqmux");
-		info->irqmux_base = devm_ioremap_resource(&pdev->dev, res);
+		info->irqmux_base = devm_ioremap_resource(dev, res);
 
 		if (IS_ERR(info->irqmux_base))
 			return PTR_ERR(info->irqmux_base);
@@ -1632,8 +1627,7 @@ static int st_pctl_probe_dt(struct platform_device *pdev,
 	}
 
 	pctl_desc->npins = info->nbanks * ST_GPIO_PINS_PER_BANK;
-	pdesc =	devm_kcalloc(&pdev->dev,
-			pctl_desc->npins, sizeof(*pdesc), GFP_KERNEL);
+	pdesc =	devm_kcalloc(dev, pctl_desc->npins, sizeof(*pdesc), GFP_KERNEL);
 	if (!pdesc)
 		return -ENOMEM;
 
@@ -1663,7 +1657,7 @@ static int st_pctl_probe_dt(struct platform_device *pdev,
 			ret = st_pctl_parse_functions(child, info,
 							i++, &grp_index);
 			if (ret) {
-				dev_err(&pdev->dev, "No functions found.\n");
+				dev_err(dev, "No functions found.\n");
 				of_node_put(child);
 				return ret;
 			}
@@ -1675,24 +1669,25 @@ static int st_pctl_probe_dt(struct platform_device *pdev,
 
 static int st_pctl_probe(struct platform_device *pdev)
 {
+	struct device *dev = &pdev->dev;
 	struct st_pinctrl *info;
 	struct pinctrl_desc *pctl_desc;
 	int ret, i;
 
-	if (!pdev->dev.of_node) {
-		dev_err(&pdev->dev, "device node not found.\n");
+	if (!dev->of_node) {
+		dev_err(dev, "device node not found.\n");
 		return -EINVAL;
 	}
 
-	pctl_desc = devm_kzalloc(&pdev->dev, sizeof(*pctl_desc), GFP_KERNEL);
+	pctl_desc = devm_kzalloc(dev, sizeof(*pctl_desc), GFP_KERNEL);
 	if (!pctl_desc)
 		return -ENOMEM;
 
-	info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
+	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 
-	info->dev = &pdev->dev;
+	info->dev = dev;
 	platform_set_drvdata(pdev, info);
 	ret = st_pctl_probe_dt(pdev, pctl_desc, info);
 	if (ret)
@@ -1702,11 +1697,11 @@ static int st_pctl_probe(struct platform_device *pdev)
 	pctl_desc->pctlops	= &st_pctlops;
 	pctl_desc->pmxops	= &st_pmxops;
 	pctl_desc->confops	= &st_confops;
-	pctl_desc->name		= dev_name(&pdev->dev);
+	pctl_desc->name		= dev_name(dev);
 
-	info->pctl = devm_pinctrl_register(&pdev->dev, pctl_desc, info);
+	info->pctl = devm_pinctrl_register(dev, pctl_desc, info);
 	if (IS_ERR(info->pctl)) {
-		dev_err(&pdev->dev, "Failed pinctrl registration\n");
+		dev_err(dev, "Failed pinctrl registration\n");
 		return PTR_ERR(info->pctl);
 	}
 
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 15/19] pinctrl: st: Make use of the devm_platform_ioremap_resource_byname()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (12 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 14/19] pinctrl: st: Use temporary variable for struct device Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-09 11:33   ` Linus Walleij
  2021-11-05 12:42 ` [PATCH v1 16/19] pinctrl: st: Convert to use dev_err_probe() Andy Shevchenko
                   ` (5 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Use the devm_platform_ioremap_resource_byname() helper instead of
calling platform_get_resource_byname() and devm_ioremap_resource()
separately.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/pinctrl-st.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
index f592e9ad93fc..bccde0b8f012 100644
--- a/drivers/pinctrl/pinctrl-st.c
+++ b/drivers/pinctrl/pinctrl-st.c
@@ -1583,7 +1583,6 @@ static int st_pctl_probe_dt(struct platform_device *pdev,
 	struct device_node *child;
 	int grp_index = 0;
 	int irq = 0;
-	struct resource *res;
 
 	st_pctl_dt_child_count(info, np);
 	if (!info->nbanks) {
@@ -1614,16 +1613,12 @@ static int st_pctl_probe_dt(struct platform_device *pdev,
 	irq = platform_get_irq(pdev, 0);
 
 	if (irq > 0) {
-		res = platform_get_resource_byname(pdev,
-					IORESOURCE_MEM, "irqmux");
-		info->irqmux_base = devm_ioremap_resource(dev, res);
-
+		info->irqmux_base = devm_platform_ioremap_resource_byname(pdev, "irqmux");
 		if (IS_ERR(info->irqmux_base))
 			return PTR_ERR(info->irqmux_base);
 
 		irq_set_chained_handler_and_data(irq, st_gpio_irqmux_handler,
 						 info);
-
 	}
 
 	pctl_desc->npins = info->nbanks * ST_GPIO_PINS_PER_BANK;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 16/19] pinctrl: st: Convert to use dev_err_probe()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (13 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 15/19] pinctrl: st: Make use of the devm_platform_ioremap_resource_byname() Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-09 11:34   ` Linus Walleij
  2021-11-05 12:42 ` [PATCH v1 17/19] pinctrl: st: Switch to use devm_kasprintf_strarray() Andy Shevchenko
                   ` (4 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

It's fine to call dev_err_probe() in ->probe() when error code is known.
Convert the driver to use dev_err_probe().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/pinctrl-st.c | 30 ++++++++++--------------------
 1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
index bccde0b8f012..9cb0da88b098 100644
--- a/drivers/pinctrl/pinctrl-st.c
+++ b/drivers/pinctrl/pinctrl-st.c
@@ -1255,10 +1255,8 @@ static int st_pctl_parse_functions(struct device_node *np,
 	func = &info->functions[index];
 	func->name = np->name;
 	func->ngroups = of_get_child_count(np);
-	if (func->ngroups == 0) {
-		dev_err(dev, "No groups defined\n");
-		return -EINVAL;
-	}
+	if (func->ngroups == 0)
+		return dev_err_probe(dev, -EINVAL, "No groups defined\n");
 	func->groups = devm_kcalloc(dev, func->ngroups, sizeof(*func->groups), GFP_KERNEL);
 	if (!func->groups)
 		return -ENOMEM;
@@ -1555,10 +1553,8 @@ static int st_gpiolib_register_bank(struct st_pinctrl *info,
 
 skip_irq:
 	err  = gpiochip_add_data(&bank->gpio_chip, bank);
-	if (err) {
-		dev_err(dev, "Failed to add gpiochip(%d)!\n", bank_num);
-		return err;
-	}
+	if (err)
+		return dev_err_probe(dev, err, "Failed to add gpiochip(%d)!\n", bank_num);
 	dev_info(dev, "%s bank added.\n", range->name);
 
 	return 0;
@@ -1585,10 +1581,8 @@ static int st_pctl_probe_dt(struct platform_device *pdev,
 	int irq = 0;
 
 	st_pctl_dt_child_count(info, np);
-	if (!info->nbanks) {
-		dev_err(dev, "you need at least one gpio bank\n");
-		return -EINVAL;
-	}
+	if (!info->nbanks)
+		return dev_err_probe(dev, -EINVAL, "you need at least one gpio bank\n");
 
 	dev_info(dev, "nbanks = %d\n", info->nbanks);
 	dev_info(dev, "nfunctions = %d\n", info->nfunctions);
@@ -1604,10 +1598,8 @@ static int st_pctl_probe_dt(struct platform_device *pdev,
 		return -ENOMEM;
 
 	info->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg");
-	if (IS_ERR(info->regmap)) {
-		dev_err(dev, "No syscfg phandle specified\n");
-		return PTR_ERR(info->regmap);
-	}
+	if (IS_ERR(info->regmap))
+		return dev_err_probe(dev, PTR_ERR(info->regmap), "No syscfg phandle specified\n");
 	info->data = of_match_node(st_pctl_of_match, np)->data;
 
 	irq = platform_get_irq(pdev, 0);
@@ -1695,10 +1687,8 @@ static int st_pctl_probe(struct platform_device *pdev)
 	pctl_desc->name		= dev_name(dev);
 
 	info->pctl = devm_pinctrl_register(dev, pctl_desc, info);
-	if (IS_ERR(info->pctl)) {
-		dev_err(dev, "Failed pinctrl registration\n");
-		return PTR_ERR(info->pctl);
-	}
+	if (IS_ERR(info->pctl))
+		return dev_err_probe(dev, PTR_ERR(info->pctl), "Failed pinctrl registration\n");
 
 	for (i = 0; i < info->nbanks; i++)
 		pinctrl_add_gpio_range(info->pctl, &info->banks[i].range);
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 17/19] pinctrl: st: Switch to use devm_kasprintf_strarray()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (14 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 16/19] pinctrl: st: Convert to use dev_err_probe() Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-09 11:34   ` Linus Walleij
  2021-11-05 12:42 ` [PATCH v1 18/19] pinctrl: zynqmp: Unify pin naming Andy Shevchenko
                   ` (3 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Since we have a generic helper, switch the module to use it.

As a side effect, add check for the memory allocation failures and
cleanup it either in error case or when driver is unloading.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/pinctrl-st.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
index 9cb0da88b098..0fea71fd9a00 100644
--- a/drivers/pinctrl/pinctrl-st.c
+++ b/drivers/pinctrl/pinctrl-st.c
@@ -1624,6 +1624,8 @@ static int st_pctl_probe_dt(struct platform_device *pdev,
 	for_each_child_of_node(np, child) {
 		if (of_property_read_bool(child, "gpio-controller")) {
 			const char *bank_name = NULL;
+			char **pin_names;
+
 			ret = st_gpiolib_register_bank(info, bank, child);
 			if (ret) {
 				of_node_put(child);
@@ -1632,10 +1634,16 @@ static int st_pctl_probe_dt(struct platform_device *pdev,
 
 			k = info->banks[bank].range.pin_base;
 			bank_name = info->banks[bank].range.name;
+
+			pin_names = devm_kasprintf_strarray(dev, bank_name, ST_GPIO_PINS_PER_BANK);
+			if (IS_ERR(pin_names)) {
+				of_node_put(child);
+				return PTR_ERR(pin_names);
+			}
+
 			for (j = 0; j < ST_GPIO_PINS_PER_BANK; j++, k++) {
 				pdesc->number = k;
-				pdesc->name = kasprintf(GFP_KERNEL, "%s[%d]",
-							bank_name, j);
+				pdesc->name = pin_names[j];
 				pdesc++;
 			}
 			st_parse_syscfgs(info, bank, child);
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 18/19] pinctrl: zynqmp: Unify pin naming
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (15 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 17/19] pinctrl: st: Switch to use devm_kasprintf_strarray() Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-09 11:34   ` Linus Walleij
  2021-11-05 12:42 ` [PATCH v1 19/19] gpio: mockup: Switch to use kasprintf_strarray() Andy Shevchenko
                   ` (2 subsequent siblings)
  19 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Since we have devm_kasprintf_strarray() helper, which is used in
the rest of pin control drivers, it makes sense to switch this
driver to it. The pin names are not part of any ABI and hence
there will be no regression based on that. Otherwise all generated
pin names will follow the same schema in the pin control subsystem.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/pinctrl/pinctrl-zynqmp.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-zynqmp.c b/drivers/pinctrl/pinctrl-zynqmp.c
index e14012209992..6cc307595783 100644
--- a/drivers/pinctrl/pinctrl-zynqmp.c
+++ b/drivers/pinctrl/pinctrl-zynqmp.c
@@ -809,6 +809,7 @@ static int zynqmp_pinctrl_prepare_pin_desc(struct device *dev,
 					   unsigned int *npins)
 {
 	struct pinctrl_pin_desc *pins, *pin;
+	char **pin_names;
 	int ret;
 	int i;
 
@@ -820,13 +821,14 @@ static int zynqmp_pinctrl_prepare_pin_desc(struct device *dev,
 	if (!pins)
 		return -ENOMEM;
 
+	pin_names = devm_kasprintf_strarray(dev, ZYNQMP_PIN_PREFIX, *npins);
+	if (IS_ERR(pin->name))
+		return PTR_ERR(pin_names);
+
 	for (i = 0; i < *npins; i++) {
 		pin = &pins[i];
 		pin->number = i;
-		pin->name = devm_kasprintf(dev, GFP_KERNEL, "%s%d",
-					   ZYNQMP_PIN_PREFIX, i);
-		if (!pin->name)
-			return -ENOMEM;
+		pin->name = pin_names[i];
 	}
 
 	*zynqmp_pins = pins;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* [PATCH v1 19/19] gpio: mockup: Switch to use kasprintf_strarray()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (16 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 18/19] pinctrl: zynqmp: Unify pin naming Andy Shevchenko
@ 2021-11-05 12:42 ` Andy Shevchenko
  2021-11-09 11:35   ` Linus Walleij
  2021-11-16  9:12   ` Bartosz Golaszewski
  2021-11-06  7:34 ` [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Joe Perches
  2021-11-09 11:42 ` Linus Walleij
  19 siblings, 2 replies; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-05 12:42 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

Since we have a generic helper, switch the module to use it.
No functional change intended.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/gpio/gpio-mockup.c | 23 +----------------------
 1 file changed, 1 insertion(+), 22 deletions(-)

diff --git a/drivers/gpio/gpio-mockup.c b/drivers/gpio/gpio-mockup.c
index d26bff29157b..8943cea92764 100644
--- a/drivers/gpio/gpio-mockup.c
+++ b/drivers/gpio/gpio-mockup.c
@@ -491,27 +491,6 @@ static void gpio_mockup_unregister_pdevs(void)
 	}
 }
 
-static __init char **gpio_mockup_make_line_names(const char *label,
-						 unsigned int num_lines)
-{
-	unsigned int i;
-	char **names;
-
-	names = kcalloc(num_lines + 1, sizeof(char *), GFP_KERNEL);
-	if (!names)
-		return NULL;
-
-	for (i = 0; i < num_lines; i++) {
-		names[i] = kasprintf(GFP_KERNEL, "%s-%u", label, i);
-		if (!names[i]) {
-			kfree_strarray(names, i);
-			return NULL;
-		}
-	}
-
-	return names;
-}
-
 static int __init gpio_mockup_register_chip(int idx)
 {
 	struct property_entry properties[GPIO_MOCKUP_MAX_PROP];
@@ -538,7 +517,7 @@ static int __init gpio_mockup_register_chip(int idx)
 	properties[prop++] = PROPERTY_ENTRY_U16("nr-gpios", ngpio);
 
 	if (gpio_mockup_named_lines) {
-		line_names = gpio_mockup_make_line_names(chip_label, ngpio);
+		line_names = kasprintf_strarray(GFP_KERNEL, chip_label, ngpio);
 		if (!line_names)
 			return -ENOMEM;
 
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (17 preceding siblings ...)
  2021-11-05 12:42 ` [PATCH v1 19/19] gpio: mockup: Switch to use kasprintf_strarray() Andy Shevchenko
@ 2021-11-06  7:34 ` Joe Perches
  2021-11-09 11:42 ` Linus Walleij
  19 siblings, 0 replies; 48+ messages in thread
From: Joe Perches @ 2021-11-06  7:34 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Fri, 2021-11-05 at 14:42 +0200, Andy Shevchenko wrote:
> We have a few users already that basically want to have array of
> sequential strings to be allocated and filled.
> 
> Provide a helper for them (basically adjusted version from gpio-mockup.c).

I think this is overkill and unnecessary bloat for the number of
actual or possible in-tree uses.  The devm_ variant too.

And it'd be useful to have an 0/n patch cover letter describing
why the patchset is useful so I could reply to that instead of the
1/n.

> diff --git a/include/linux/string_helpers.h b/include/linux/string_helpers.h
[]
> @@ -100,6 +100,7 @@ char *kstrdup_quotable(const char *src, gfp_t gfp);
>  char *kstrdup_quotable_cmdline(struct task_struct *task, gfp_t gfp);
>  char *kstrdup_quotable_file(struct file *file, gfp_t gfp);
>  
> +char **kasprintf_strarray(gfp_t gfp, const char *prefix, size_t n);
>  void kfree_strarray(char **array, size_t n);
>  
>  #endif
> diff --git a/lib/string_helpers.c b/lib/string_helpers.c
[]
> @@ -674,6 +674,39 @@ char *kstrdup_quotable_file(struct file *file, gfp_t gfp)
>  }
>  EXPORT_SYMBOL_GPL(kstrdup_quotable_file);
>  
> +/**
> + * kasprintf_strarray - allocate and fill array of sequential strings
> + * @gfp: flags for the slab allocator
> + * @prefix: prefix to be used
> + * @n: amount of lines to be allocated and filled
> + *
> + * Allocates and fills @n strings using pattern "%s-%zu", where prefix
> + * is provided by caller. The caller is responsible to free them with
> + * kfree_strarray() after use.
> + *
> + * Returns array of strings or NULL when memory can't be allocated.
> + */
> +char **kasprintf_strarray(gfp_t gfp, const char *prefix, size_t n)
> +{
> +	char **names;
> +	size_t i;
> +
> +	names = kcalloc(n + 1, sizeof(char *), gfp);
> +	if (!names)
> +		return NULL;
> +
> +	for (i = 0; i < n; i++) {
> +		names[i] = kasprintf(gfp, "%s-%zu", prefix, i);
> +		if (!names[i]) {
> +			kfree_strarray(names, i);
> +			return NULL;
> +		}
> +	}
> +
> +	return names;
> +}
> +EXPORT_SYMBOL_GPL(kasprintf_strarray);
> +
>  /**
>   * kfree_strarray - free a number of dynamically allocated strings contained
>   *                  in an array and the array itself



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 14/19] pinctrl: st: Use temporary variable for struct device
  2021-11-05 12:42 ` [PATCH v1 14/19] pinctrl: st: Use temporary variable for struct device Andy Shevchenko
@ 2021-11-06  7:50   ` Joe Perches
       [not found]     ` <CAHp75Ve0Bv9VsWFFZxL9wYk=Z_Mm7nat-vf7g8HHTiROi7EY=Q@mail.gmail.com>
  0 siblings, 1 reply; 48+ messages in thread
From: Joe Perches @ 2021-11-06  7:50 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Fri, 2021-11-05 at 14:42 +0200, Andy Shevchenko wrote:
> Use temporary variable for struct device to make code neater.
[]
> diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
[]
> @@ -814,26 +814,25 @@ static int st_pctl_dt_node_to_map(struct pinctrl_dev *pctldev,
>  {
>  	struct st_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
>  	const struct st_pctl_group *grp;
> +	struct device *dev = info->dev;
[]
> -	new_map = devm_kcalloc(pctldev->dev,
> -				map_num, sizeof(*new_map), GFP_KERNEL);
> +	new_map = devm_kcalloc(dev, map_num, sizeof(*new_map), GFP_KERNEL);

Are pctldev->dev and dev the same pointer?
It seems they are not.
Why reassign the ownership?



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 14/19] pinctrl: st: Use temporary variable for struct device
       [not found]     ` <CAHp75Ve0Bv9VsWFFZxL9wYk=Z_Mm7nat-vf7g8HHTiROi7EY=Q@mail.gmail.com>
@ 2021-11-06  8:28       ` Joe Perches
  2021-11-08  9:26         ` Andy Shevchenko
  0 siblings, 1 reply; 48+ messages in thread
From: Joe Perches @ 2021-11-06  8:28 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip, Bamvor Jian Zhang, Andrew Lunn,
	Gregory Clement, Sebastian Hesselbarth, Heiko Stuebner,
	Patrice Chotard, Michal Simek, Andy Shevchenko

On Sat, 2021-11-06 at 10:07 +0200, Andy Shevchenko wrote:
> On Saturday, November 6, 2021, Joe Perches <joe@perches.com> wrote:
> > On Fri, 2021-11-05 at 14:42 +0200, Andy Shevchenko wrote:
> > > Use temporary variable for struct device to make code neater.
> > []
> > > diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
> > []
> > > @@ -814,26 +814,25 @@ static int st_pctl_dt_node_to_map(struct
> > pinctrl_dev *pctldev,
> > >  {
> > >       struct st_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
> > >       const struct st_pctl_group *grp;
> > > +     struct device *dev = info->dev;
> > []
> > > -     new_map = devm_kcalloc(pctldev->dev,
> > > -                             map_num, sizeof(*new_map), GFP_KERNEL);
> > > +     new_map = devm_kcalloc(dev, map_num, sizeof(*new_map), GFP_KERNEL);
> > 
> > Are pctldev->dev and dev the same pointer?
> 
> Seems so.

OK.

> https://elixir.bootlin.com/linux/latest/source/drivers/pinctrl/core.c#L2015
> 
> > It seems they are not.
> 
> Can you elaborate, please?

From code shape, you assign dev to info->dev rather than pctldev->dev

I also believe this single 19 patch series would be better as
multiple patch series.

IMO: the strarray variants introduction and use should be a separate
patchset from the rest.



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 03/19] pinctrl/rockchip: Drop wrong kernel doc annotation
  2021-11-05 12:42 ` [PATCH v1 03/19] pinctrl/rockchip: Drop wrong kernel doc annotation Andy Shevchenko
@ 2021-11-06 16:32   ` Heiko Stübner
  0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2021-11-06 16:32 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip, Andy Shevchenko
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Patrice Chotard, Michal Simek,
	Andy Shevchenko

Am Freitag, 5. November 2021, 13:42:26 CET schrieb Andy Shevchenko:
> Kernel doc validator is not happy:
> 
>   .../pinctrl-rockchip.c:45: warning: This comment starts with '/**', but isn't a kernel-doc comment.
> 
> Drop it as it's indeed not a kernel doc comment.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Heiko Stuebner <heiko@sntech.de>

> ---
>  drivers/pinctrl/pinctrl-rockchip.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
> index 5ce260f152ce..6031d98d9849 100644
> --- a/drivers/pinctrl/pinctrl-rockchip.c
> +++ b/drivers/pinctrl/pinctrl-rockchip.c
> @@ -39,7 +39,7 @@
>  #include "pinconf.h"
>  #include "pinctrl-rockchip.h"
>  
> -/**
> +/*
>   * Generate a bitmask for setting a value (v) with a write mask bit in hiword
>   * register 31:16 area.
>   */
> 





^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 14/19] pinctrl: st: Use temporary variable for struct device
  2021-11-06  8:28       ` Joe Perches
@ 2021-11-08  9:26         ` Andy Shevchenko
  2021-11-09 11:55           ` Linus Walleij
  0 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-08  9:26 UTC (permalink / raw)
  To: Joe Perches
  Cc: Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip, Bamvor Jian Zhang, Andrew Lunn,
	Gregory Clement, Sebastian Hesselbarth, Heiko Stuebner,
	Patrice Chotard, Michal Simek, Andy Shevchenko

On Sat, Nov 06, 2021 at 01:28:17AM -0700, Joe Perches wrote:
> On Sat, 2021-11-06 at 10:07 +0200, Andy Shevchenko wrote:
> > On Saturday, November 6, 2021, Joe Perches <joe@perches.com> wrote:
> > > On Fri, 2021-11-05 at 14:42 +0200, Andy Shevchenko wrote:

...

> > > > -     new_map = devm_kcalloc(pctldev->dev,
> > > > -                             map_num, sizeof(*new_map), GFP_KERNEL);
> > > > +     new_map = devm_kcalloc(dev, map_num, sizeof(*new_map), GFP_KERNEL);
> > > 
> > > Are pctldev->dev and dev the same pointer?
> > 
> > Seems so.
> 
> OK.
> 
> > https://elixir.bootlin.com/linux/latest/source/drivers/pinctrl/core.c#L2015
> > 
> > > It seems they are not.
> > 
> > Can you elaborate, please?

> From code shape, you assign dev to info->dev rather than pctldev->dev

Yes. And they are the same. TBH these three drivers seem to be written by
copy'n'paste method where the first one, whichever it was, is simply messy
and buggy.

The extra redundant parameter (often struct platform_device) is passed to
zillions of functions when at the same time info structure already has pointer
to struct device is the easiest one to notice. And I believe so on, so on...

> I also believe this single 19 patch series would be better as
> multiple patch series.

I'm fine with either, but I would like to hear from Linus about what he wishes
as the maintainer. You know that we don't add code without users? So that's why
my motive to send it in full.

> IMO: the strarray variants introduction and use should be a separate
> patchset from the rest.

It will add unnecessary churn. Yeah, I have planned to send just that, but then
it took more and more cleanups and I have to stop at some point, the code there
is bad (historically or by other reasons, dunno).

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 08/19] pinctrl: armada-37xx: Fix function name in the kernel doc
  2021-11-05 12:42 ` [PATCH v1 08/19] pinctrl: armada-37xx: Fix function name in the kernel doc Andy Shevchenko
@ 2021-11-08 10:37   ` Gregory CLEMENT
  0 siblings, 0 replies; 48+ messages in thread
From: Gregory CLEMENT @ 2021-11-08 10:37 UTC (permalink / raw)
  To: Andy Shevchenko, Andy Shevchenko, Bartosz Golaszewski,
	Jianqun Xu, Linus Walleij, Sai Krishna Potthuri, Andrew Morton,
	linux-gpio, linux-kernel, linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Sebastian Hesselbarth,
	Heiko Stuebner, Patrice Chotard, Michal Simek, Andy Shevchenko

Andy Shevchenko <andriy.shevchenko@linux.intel.com> writes:

> Kernel doc validator is not happy:
>
>   .../pinctrl-armada-37xx.c:926: warning: expecting prototype for armada_37xx_fill_funcs(). Prototype was for armada_37xx_fill_func() instead
>
> Fix this by updating function name in the kernel doc.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>


Reviewed-by: Gregory CLEMENT <gregory.clement@bootlin.com>

Thanks,

Gregory

> ---
>  drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> index 5cb018f98800..5615cb7a1209 100644
> --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> @@ -913,7 +913,7 @@ static int armada_37xx_fill_group(struct armada_37xx_pinctrl *info)
>  }
>  
>  /**
> - * armada_37xx_fill_funcs() - complete the funcs array
> + * armada_37xx_fill_func() - complete the funcs array
>   * @info: info driver instance
>   *
>   * Based on the data available from the armada_37xx_pin_group array
> -- 
> 2.33.0
>

-- 
Gregory Clement, Bootlin
Embedded Linux and Kernel engineering
http://bootlin.com

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 09/19] pinctrl: armada-37xx: Use temporary variable for struct device
  2021-11-05 12:42 ` [PATCH v1 09/19] pinctrl: armada-37xx: Use temporary variable for struct device Andy Shevchenko
@ 2021-11-08 10:49   ` Gregory CLEMENT
  0 siblings, 0 replies; 48+ messages in thread
From: Gregory CLEMENT @ 2021-11-08 10:49 UTC (permalink / raw)
  To: Andy Shevchenko, Andy Shevchenko, Bartosz Golaszewski,
	Jianqun Xu, Linus Walleij, Sai Krishna Potthuri, Andrew Morton,
	linux-gpio, linux-kernel, linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Sebastian Hesselbarth,
	Heiko Stuebner, Patrice Chotard, Michal Simek, Andy Shevchenko

Hello Andy,

> Use temporary variable for struct device to make code neater.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>


Reviewed-by: Gregory CLEMENT <gregory.clement@bootlin.com>

Thanks,

Gregory


> ---
>  drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 56 +++++++++------------
>  1 file changed, 23 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> index 5615cb7a1209..37f92dc54d7a 100644
> --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> @@ -341,12 +341,12 @@ static int armada_37xx_pmx_set_by_name(struct pinctrl_dev *pctldev,
>  				       struct armada_37xx_pin_group *grp)
>  {
>  	struct armada_37xx_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
> +	struct device *dev = info->dev;
>  	unsigned int reg = SELECTION;
>  	unsigned int mask = grp->reg_mask;
>  	int func, val;
>  
> -	dev_dbg(info->dev, "enable function %s group %s\n",
> -		name, grp->name);
> +	dev_dbg(dev, "enable function %s group %s\n", name, grp->name);
>  
>  	func = match_string(grp->funcs, NB_FUNCS, name);
>  	if (func < 0)
> @@ -722,16 +722,16 @@ static unsigned int armada_37xx_irq_startup(struct irq_data *d)
>  static int armada_37xx_irqchip_register(struct platform_device *pdev,
>  					struct armada_37xx_pinctrl *info)
>  {
> -	struct device_node *np = info->dev->of_node;
>  	struct gpio_chip *gc = &info->gpio_chip;
>  	struct irq_chip *irqchip = &info->irq_chip;
>  	struct gpio_irq_chip *girq = &gc->irq;
>  	struct device *dev = &pdev->dev;
> +	struct device_node *np;
>  	struct resource res;
>  	int ret = -ENODEV, i, nr_irq_parent;
>  
>  	/* Check if we have at least one gpio-controller child node */
> -	for_each_child_of_node(info->dev->of_node, np) {
> +	for_each_child_of_node(dev->of_node, np) {
>  		if (of_property_read_bool(np, "gpio-controller")) {
>  			ret = 0;
>  			break;
> @@ -750,12 +750,12 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
>  		return 0;
>  	}
>  
> -	if (of_address_to_resource(info->dev->of_node, 1, &res)) {
> +	if (of_address_to_resource(dev->of_node, 1, &res)) {
>  		dev_err(dev, "cannot find IO resource\n");
>  		return -ENOENT;
>  	}
>  
> -	info->base = devm_ioremap_resource(info->dev, &res);
> +	info->base = devm_ioremap_resource(dev, &res);
>  	if (IS_ERR(info->base))
>  		return PTR_ERR(info->base);
>  
> @@ -774,8 +774,7 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
>  	 * the chained irq with all of them.
>  	 */
>  	girq->num_parents = nr_irq_parent;
> -	girq->parents = devm_kcalloc(&pdev->dev, nr_irq_parent,
> -				     sizeof(*girq->parents), GFP_KERNEL);
> +	girq->parents = devm_kcalloc(dev, nr_irq_parent, sizeof(*girq->parents), GFP_KERNEL);
>  	if (!girq->parents)
>  		return -ENOMEM;
>  	for (i = 0; i < nr_irq_parent; i++) {
> @@ -794,11 +793,12 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
>  static int armada_37xx_gpiochip_register(struct platform_device *pdev,
>  					struct armada_37xx_pinctrl *info)
>  {
> +	struct device *dev = &pdev->dev;
>  	struct device_node *np;
>  	struct gpio_chip *gc;
>  	int ret = -ENODEV;
>  
> -	for_each_child_of_node(info->dev->of_node, np) {
> +	for_each_child_of_node(dev->of_node, np) {
>  		if (of_find_property(np, "gpio-controller", NULL)) {
>  			ret = 0;
>  			break;
> @@ -811,19 +811,16 @@ static int armada_37xx_gpiochip_register(struct platform_device *pdev,
>  
>  	gc = &info->gpio_chip;
>  	gc->ngpio = info->data->nr_pins;
> -	gc->parent = &pdev->dev;
> +	gc->parent = dev;
>  	gc->base = -1;
>  	gc->of_node = np;
>  	gc->label = info->data->name;
>  
>  	ret = armada_37xx_irqchip_register(pdev, info);
> -	if (ret)
> -		return ret;
> -	ret = devm_gpiochip_add_data(&pdev->dev, gc, info);
>  	if (ret)
>  		return ret;
>  
> -	return 0;
> +	return devm_gpiochip_add_data(dev, gc, info);
>  }
>  
>  /**
> @@ -874,13 +871,13 @@ static int armada_37xx_add_function(struct armada_37xx_pmx_func *funcs,
>  static int armada_37xx_fill_group(struct armada_37xx_pinctrl *info)
>  {
>  	int n, num = 0, funcsize = info->data->nr_pins;
> +	struct device *dev = info->dev;
>  
>  	for (n = 0; n < info->ngroups; n++) {
>  		struct armada_37xx_pin_group *grp = &info->groups[n];
>  		int i, j, f;
>  
> -		grp->pins = devm_kcalloc(info->dev,
> -					 grp->npins + grp->extra_npins,
> +		grp->pins = devm_kcalloc(dev, grp->npins + grp->extra_npins,
>  					 sizeof(*grp->pins),
>  					 GFP_KERNEL);
>  		if (!grp->pins)
> @@ -898,8 +895,7 @@ static int armada_37xx_fill_group(struct armada_37xx_pinctrl *info)
>  			ret = armada_37xx_add_function(info->funcs, &funcsize,
>  					    grp->funcs[f]);
>  			if (ret == -EOVERFLOW)
> -				dev_err(info->dev,
> -					"More functions than pins(%d)\n",
> +				dev_err(dev, "More functions than pins(%d)\n",
>  					info->data->nr_pins);
>  			if (ret < 0)
>  				continue;
> @@ -925,6 +921,7 @@ static int armada_37xx_fill_group(struct armada_37xx_pinctrl *info)
>  static int armada_37xx_fill_func(struct armada_37xx_pinctrl *info)
>  {
>  	struct armada_37xx_pmx_func *funcs = info->funcs;
> +	struct device *dev = info->dev;
>  	int n;
>  
>  	for (n = 0; n < info->nfuncs; n++) {
> @@ -932,8 +929,7 @@ static int armada_37xx_fill_func(struct armada_37xx_pinctrl *info)
>  		const char **groups;
>  		int g;
>  
> -		funcs[n].groups = devm_kcalloc(info->dev,
> -					       funcs[n].ngroups,
> +		funcs[n].groups = devm_kcalloc(dev, funcs[n].ngroups,
>  					       sizeof(*(funcs[n].groups)),
>  					       GFP_KERNEL);
>  		if (!funcs[n].groups)
> @@ -962,6 +958,7 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
>  	const struct armada_37xx_pin_data *pin_data = info->data;
>  	struct pinctrl_desc *ctrldesc = &info->pctl;
>  	struct pinctrl_pin_desc *pindesc, *pdesc;
> +	struct device *dev = &pdev->dev;
>  	int pin, ret;
>  
>  	info->groups = pin_data->groups;
> @@ -973,9 +970,7 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
>  	ctrldesc->pmxops = &armada_37xx_pmx_ops;
>  	ctrldesc->confops = &armada_37xx_pinconf_ops;
>  
> -	pindesc = devm_kcalloc(&pdev->dev,
> -			       pin_data->nr_pins, sizeof(*pindesc),
> -			       GFP_KERNEL);
> +	pindesc = devm_kcalloc(dev, pin_data->nr_pins, sizeof(*pindesc), GFP_KERNEL);
>  	if (!pindesc)
>  		return -ENOMEM;
>  
> @@ -994,14 +989,10 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
>  	 * we allocate functions for number of pins and hope there are
>  	 * fewer unique functions than pins available
>  	 */
> -	info->funcs = devm_kcalloc(&pdev->dev,
> -				   pin_data->nr_pins,
> -				   sizeof(struct armada_37xx_pmx_func),
> -				   GFP_KERNEL);
> +	info->funcs = devm_kcalloc(dev, pin_data->nr_pins, sizeof(*info->funcs), GFP_KERNEL);
>  	if (!info->funcs)
>  		return -ENOMEM;
>  
> -
>  	ret = armada_37xx_fill_group(info);
>  	if (ret)
>  		return ret;
> @@ -1010,9 +1001,9 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
>  	if (ret)
>  		return ret;
>  
> -	info->pctl_dev = devm_pinctrl_register(&pdev->dev, ctrldesc, info);
> +	info->pctl_dev = devm_pinctrl_register(dev, ctrldesc, info);
>  	if (IS_ERR(info->pctl_dev)) {
> -		dev_err(&pdev->dev, "could not register pinctrl driver\n");
> +		dev_err(dev, "could not register pinctrl driver\n");
>  		return PTR_ERR(info->pctl_dev);
>  	}
>  
> @@ -1143,8 +1134,7 @@ static int __init armada_37xx_pinctrl_probe(struct platform_device *pdev)
>  	struct regmap *regmap;
>  	int ret;
>  
> -	info = devm_kzalloc(dev, sizeof(struct armada_37xx_pinctrl),
> -			    GFP_KERNEL);
> +	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
>  	if (!info)
>  		return -ENOMEM;
>  
> @@ -1152,7 +1142,7 @@ static int __init armada_37xx_pinctrl_probe(struct platform_device *pdev)
>  
>  	regmap = syscon_node_to_regmap(np);
>  	if (IS_ERR(regmap)) {
> -		dev_err(&pdev->dev, "cannot get regmap\n");
> +		dev_err(dev, "cannot get regmap\n");
>  		return PTR_ERR(regmap);
>  	}
>  	info->regmap = regmap;
> -- 
> 2.33.0
>

-- 
Gregory Clement, Bootlin
Embedded Linux and Kernel engineering
http://bootlin.com

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 10/19] pinctrl: armada-37xx: Make use of the devm_platform_ioremap_resource()
  2021-11-05 12:42 ` [PATCH v1 10/19] pinctrl: armada-37xx: Make use of the devm_platform_ioremap_resource() Andy Shevchenko
@ 2021-11-08 10:56   ` Gregory CLEMENT
  0 siblings, 0 replies; 48+ messages in thread
From: Gregory CLEMENT @ 2021-11-08 10:56 UTC (permalink / raw)
  To: Andy Shevchenko, Andy Shevchenko, Bartosz Golaszewski,
	Jianqun Xu, Linus Walleij, Sai Krishna Potthuri, Andrew Morton,
	linux-gpio, linux-kernel, linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Sebastian Hesselbarth,
	Heiko Stuebner, Patrice Chotard, Michal Simek, Andy Shevchenko

Hello Andy,

> Use the devm_platform_ioremap_resource() helper instead of
> calling of_address_to_resource() and devm_ioremap_resource()
> separately.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Gregory CLEMENT <gregory.clement@bootlin.com>

Thanks,

Gregory

> ---
>  drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
>
> diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> index 37f92dc54d7a..282b3fac3bec 100644
> --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> @@ -727,7 +727,6 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
>  	struct gpio_irq_chip *girq = &gc->irq;
>  	struct device *dev = &pdev->dev;
>  	struct device_node *np;
> -	struct resource res;
>  	int ret = -ENODEV, i, nr_irq_parent;
>  
>  	/* Check if we have at least one gpio-controller child node */
> @@ -750,12 +749,7 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
>  		return 0;
>  	}
>  
> -	if (of_address_to_resource(dev->of_node, 1, &res)) {
> -		dev_err(dev, "cannot find IO resource\n");
> -		return -ENOENT;
> -	}
> -
> -	info->base = devm_ioremap_resource(dev, &res);
> +	info->base = devm_platform_ioremap_resource(pdev, 1);
>  	if (IS_ERR(info->base))
>  		return PTR_ERR(info->base);
>  
> -- 
> 2.33.0
>

-- 
Gregory Clement, Bootlin
Embedded Linux and Kernel engineering
http://bootlin.com

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 11/19] pinctrl: armada-37xx: Convert to use dev_err_probe()
  2021-11-05 12:42 ` [PATCH v1 11/19] pinctrl: armada-37xx: Convert to use dev_err_probe() Andy Shevchenko
@ 2021-11-08 10:59   ` Gregory CLEMENT
  0 siblings, 0 replies; 48+ messages in thread
From: Gregory CLEMENT @ 2021-11-08 10:59 UTC (permalink / raw)
  To: Andy Shevchenko, Andy Shevchenko, Bartosz Golaszewski,
	Jianqun Xu, Linus Walleij, Sai Krishna Potthuri, Andrew Morton,
	linux-gpio, linux-kernel, linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Sebastian Hesselbarth,
	Heiko Stuebner, Patrice Chotard, Michal Simek, Andy Shevchenko

Hello Andy,

> It's fine to call dev_err_probe() in ->probe() when error code is known.
> Convert the driver to use dev_err_probe().
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Gregory CLEMENT <gregory.clement@bootlin.com>

Thanks,

Gregory

> ---
>  drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 18 ++++++------------
>  1 file changed, 6 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> index 282b3fac3bec..f48745c43419 100644
> --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> @@ -736,10 +736,8 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
>  			break;
>  		}
>  	}
> -	if (ret) {
> -		dev_err(dev, "no gpio-controller child node\n");
> -		return ret;
> -	}
> +	if (ret)
> +		return dev_err_probe(dev, ret, "no gpio-controller child node\n");
>  
>  	nr_irq_parent = of_irq_count(np);
>  	spin_lock_init(&info->irq_lock);
> @@ -996,10 +994,8 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
>  		return ret;
>  
>  	info->pctl_dev = devm_pinctrl_register(dev, ctrldesc, info);
> -	if (IS_ERR(info->pctl_dev)) {
> -		dev_err(dev, "could not register pinctrl driver\n");
> -		return PTR_ERR(info->pctl_dev);
> -	}
> +	if (IS_ERR(info->pctl_dev))
> +		return dev_err_probe(dev, PTR_ERR(info->pctl_dev), "could not register pinctrl driver\n");
>  
>  	return 0;
>  }
> @@ -1135,10 +1131,8 @@ static int __init armada_37xx_pinctrl_probe(struct platform_device *pdev)
>  	info->dev = dev;
>  
>  	regmap = syscon_node_to_regmap(np);
> -	if (IS_ERR(regmap)) {
> -		dev_err(dev, "cannot get regmap\n");
> -		return PTR_ERR(regmap);
> -	}
> +	if (IS_ERR(regmap))
> +		return dev_err_probe(dev, PTR_ERR(regmap), "cannot get regmap\n");
>  	info->regmap = regmap;
>  
>  	info->data = of_device_get_match_data(dev);
> -- 
> 2.33.0
>

-- 
Gregory Clement, Bootlin
Embedded Linux and Kernel engineering
http://bootlin.com

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 12/19] pinctrl: armada-37xx: Switch to use devm_kasprintf_strarray()
  2021-11-05 12:42 ` [PATCH v1 12/19] pinctrl: armada-37xx: Switch to use devm_kasprintf_strarray() Andy Shevchenko
@ 2021-11-08 11:09   ` Gregory CLEMENT
  0 siblings, 0 replies; 48+ messages in thread
From: Gregory CLEMENT @ 2021-11-08 11:09 UTC (permalink / raw)
  To: Andy Shevchenko, Andy Shevchenko, Bartosz Golaszewski,
	Jianqun Xu, Linus Walleij, Sai Krishna Potthuri, Andrew Morton,
	linux-gpio, linux-kernel, linux-arm-kernel, linux-rockchip
  Cc: Bamvor Jian Zhang, Andrew Lunn, Sebastian Hesselbarth,
	Heiko Stuebner, Patrice Chotard, Michal Simek, Andy Shevchenko

Hello Andy,

> Since we have a generic helper, switch the module to use it.
>
> As a side effect, add check for the memory allocation failures and
> cleanup it either in error case or when driver is unloading.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Gregory CLEMENT <gregory.clement@bootlin.com>

Thanks,

Gregory

> ---
>  drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> index f48745c43419..08cad14042e2 100644
> --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> @@ -23,6 +23,7 @@
>  #include <linux/platform_device.h>
>  #include <linux/regmap.h>
>  #include <linux/slab.h>
> +#include <linux/string_helpers.h>
>  
>  #include "../pinctrl-utils.h"
>  
> @@ -951,6 +952,7 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
>  	struct pinctrl_desc *ctrldesc = &info->pctl;
>  	struct pinctrl_pin_desc *pindesc, *pdesc;
>  	struct device *dev = &pdev->dev;
> +	char **pin_names;
>  	int pin, ret;
>  
>  	info->groups = pin_data->groups;
> @@ -969,11 +971,14 @@ static int armada_37xx_pinctrl_register(struct platform_device *pdev,
>  	ctrldesc->pins = pindesc;
>  	ctrldesc->npins = pin_data->nr_pins;
>  
> +	pin_names = devm_kasprintf_strarray(dev, pin_data->name, pin_data->nr_pins);
> +	if (IS_ERR(pin_names))
> +		return PTR_ERR(pin_names);
> +
>  	pdesc = pindesc;
>  	for (pin = 0; pin < pin_data->nr_pins; pin++) {
>  		pdesc->number = pin;
> -		pdesc->name = kasprintf(GFP_KERNEL, "%s-%d",
> -					pin_data->name, pin);
> +		pdesc->name = pin_names[pin];
>  		pdesc++;
>  	}
>  
> -- 
> 2.33.0
>

-- 
Gregory Clement, Bootlin
Embedded Linux and Kernel engineering
http://bootlin.com

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 04/19] pinctrl/rockchip: Use temporary variable for struct device
  2021-11-05 12:42 ` [PATCH v1 04/19] pinctrl/rockchip: Use temporary variable for struct device Andy Shevchenko
@ 2021-11-08 12:46   ` Heiko Stübner
  0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2021-11-08 12:46 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip, Andy Shevchenko
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Patrice Chotard, Michal Simek,
	Andy Shevchenko

Am Freitag, 5. November 2021, 13:42:27 CET schrieb Andy Shevchenko:
> Use temporary variable for struct device to make code neater.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Heiko Stuebner <heiko@sntech.de>



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 05/19] pinctrl/rockchip: Make use of the devm_platform_get_and_ioremap_resource()
  2021-11-05 12:42 ` [PATCH v1 05/19] pinctrl/rockchip: Make use of the devm_platform_get_and_ioremap_resource() Andy Shevchenko
@ 2021-11-08 12:48   ` Heiko Stübner
  0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2021-11-08 12:48 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip, Andy Shevchenko
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Patrice Chotard, Michal Simek,
	Andy Shevchenko

Am Freitag, 5. November 2021, 13:42:28 CET schrieb Andy Shevchenko:
> Use the devm_platform_get_and_ioremap_resource() helper instead of
> calling platform_get_resource() and devm_ioremap_resource()
> separately.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Heiko Stuebner <heiko@sntech.de>



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 06/19] pinctrl/rockchip: Convert to use dev_err_probe()
  2021-11-05 12:42 ` [PATCH v1 06/19] pinctrl/rockchip: Convert to use dev_err_probe() Andy Shevchenko
@ 2021-11-08 12:49   ` Heiko Stübner
  0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2021-11-08 12:49 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip, Andy Shevchenko
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Patrice Chotard, Michal Simek,
	Andy Shevchenko

Am Freitag, 5. November 2021, 13:42:29 CET schrieb Andy Shevchenko:
> It's fine to call dev_err_probe() in ->probe() when error code is known.
> Convert the driver to use dev_err_probe().
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Heiko Stuebner <heiko@sntech.de>



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 07/19] pinctrl/rockchip: Switch to use devm_kasprintf_strarray()
  2021-11-05 12:42 ` [PATCH v1 07/19] pinctrl/rockchip: Switch to use devm_kasprintf_strarray() Andy Shevchenko
@ 2021-11-08 12:51   ` Heiko Stübner
  0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2021-11-08 12:51 UTC (permalink / raw)
  To: Andy Shevchenko, Bartosz Golaszewski, Jianqun Xu, Linus Walleij,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip, Andy Shevchenko
  Cc: Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Patrice Chotard, Michal Simek,
	Andy Shevchenko

Am Freitag, 5. November 2021, 13:42:30 CET schrieb Andy Shevchenko:
> Since we have a generic helper, switch the module to use it.
> 
> As a side effect, add check for the memory allocation failures and
> cleanup it either in error case or when driver is unloading.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Heiko Stuebner <heiko@sntech.de>



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 13/19] pinctrl: st: Drop wrong kernel doc annotations
  2021-11-05 12:42 ` [PATCH v1 13/19] pinctrl: st: Drop wrong kernel doc annotations Andy Shevchenko
@ 2021-11-09 11:32   ` Linus Walleij
  2021-11-09 12:04     ` Andy Shevchenko
  0 siblings, 1 reply; 48+ messages in thread
From: Linus Walleij @ 2021-11-09 11:32 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Bartosz Golaszewski, Jianqun Xu, Sai Krishna Potthuri,
	Andrew Morton, linux-gpio, linux-kernel, linux-arm-kernel,
	linux-rockchip, Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:

> Kernel doc validator is not happy:
>
>   .../pinctrl-st.c:59: warning: This comment starts with '/**', but isn't a kernel-doc comment.
>   .../pinctrl-st.c:73: warning: This comment starts with '/**', but isn't a kernel-doc comment.
>
> Drop them as they are indeed not a kernel doc comments.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Acked-by: Linus Walleij <linus.walleij@linaro.org>

Hm maybe I could just apply this patch, shouldn't collide with anything.
Let me know your preference.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 15/19] pinctrl: st: Make use of the devm_platform_ioremap_resource_byname()
  2021-11-05 12:42 ` [PATCH v1 15/19] pinctrl: st: Make use of the devm_platform_ioremap_resource_byname() Andy Shevchenko
@ 2021-11-09 11:33   ` Linus Walleij
  0 siblings, 0 replies; 48+ messages in thread
From: Linus Walleij @ 2021-11-09 11:33 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Bartosz Golaszewski, Jianqun Xu, Sai Krishna Potthuri,
	Andrew Morton, linux-gpio, linux-kernel, linux-arm-kernel,
	linux-rockchip, Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:

> Use the devm_platform_ioremap_resource_byname() helper instead of
> calling platform_get_resource_byname() and devm_ioremap_resource()
> separately.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Acked-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 16/19] pinctrl: st: Convert to use dev_err_probe()
  2021-11-05 12:42 ` [PATCH v1 16/19] pinctrl: st: Convert to use dev_err_probe() Andy Shevchenko
@ 2021-11-09 11:34   ` Linus Walleij
  0 siblings, 0 replies; 48+ messages in thread
From: Linus Walleij @ 2021-11-09 11:34 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Bartosz Golaszewski, Jianqun Xu, Sai Krishna Potthuri,
	Andrew Morton, linux-gpio, linux-kernel, linux-arm-kernel,
	linux-rockchip, Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:

> It's fine to call dev_err_probe() in ->probe() when error code is known.
> Convert the driver to use dev_err_probe().
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 17/19] pinctrl: st: Switch to use devm_kasprintf_strarray()
  2021-11-05 12:42 ` [PATCH v1 17/19] pinctrl: st: Switch to use devm_kasprintf_strarray() Andy Shevchenko
@ 2021-11-09 11:34   ` Linus Walleij
  0 siblings, 0 replies; 48+ messages in thread
From: Linus Walleij @ 2021-11-09 11:34 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Bartosz Golaszewski, Jianqun Xu, Sai Krishna Potthuri,
	Andrew Morton, linux-gpio, linux-kernel, linux-arm-kernel,
	linux-rockchip, Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:

> Since we have a generic helper, switch the module to use it.
>
> As a side effect, add check for the memory allocation failures and
> cleanup it either in error case or when driver is unloading.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 18/19] pinctrl: zynqmp: Unify pin naming
  2021-11-05 12:42 ` [PATCH v1 18/19] pinctrl: zynqmp: Unify pin naming Andy Shevchenko
@ 2021-11-09 11:34   ` Linus Walleij
  0 siblings, 0 replies; 48+ messages in thread
From: Linus Walleij @ 2021-11-09 11:34 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Bartosz Golaszewski, Jianqun Xu, Sai Krishna Potthuri,
	Andrew Morton, linux-gpio, linux-kernel, linux-arm-kernel,
	linux-rockchip, Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:

> Since we have devm_kasprintf_strarray() helper, which is used in
> the rest of pin control drivers, it makes sense to switch this
> driver to it. The pin names are not part of any ABI and hence
> there will be no regression based on that. Otherwise all generated
> pin names will follow the same schema in the pin control subsystem.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 19/19] gpio: mockup: Switch to use kasprintf_strarray()
  2021-11-05 12:42 ` [PATCH v1 19/19] gpio: mockup: Switch to use kasprintf_strarray() Andy Shevchenko
@ 2021-11-09 11:35   ` Linus Walleij
  2021-11-16  9:12   ` Bartosz Golaszewski
  1 sibling, 0 replies; 48+ messages in thread
From: Linus Walleij @ 2021-11-09 11:35 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Bartosz Golaszewski, Jianqun Xu, Sai Krishna Potthuri,
	Andrew Morton, linux-gpio, linux-kernel, linux-arm-kernel,
	linux-rockchip, Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:

> Since we have a generic helper, switch the module to use it.
> No functional change intended.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray()
  2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
                   ` (18 preceding siblings ...)
  2021-11-06  7:34 ` [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Joe Perches
@ 2021-11-09 11:42 ` Linus Walleij
  2021-11-15 11:23   ` Andy Shevchenko
  19 siblings, 1 reply; 48+ messages in thread
From: Linus Walleij @ 2021-11-09 11:42 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Bartosz Golaszewski, Jianqun Xu, Sai Krishna Potthuri,
	Andrew Morton, linux-gpio, linux-kernel, linux-arm-kernel,
	linux-rockchip, Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:

> We have a few users already that basically want to have array of
> sequential strings to be allocated and filled.
>
> Provide a helper for them (basically adjusted version from gpio-mockup.c).
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Fulfils Rusty Russell's API design hierarchy requirements
and help people to make less mistakes so:
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 14/19] pinctrl: st: Use temporary variable for struct device
  2021-11-08  9:26         ` Andy Shevchenko
@ 2021-11-09 11:55           ` Linus Walleij
  2021-11-09 12:07             ` Andy Shevchenko
  2021-11-09 12:09             ` Andy Shevchenko
  0 siblings, 2 replies; 48+ messages in thread
From: Linus Walleij @ 2021-11-09 11:55 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Joe Perches, Bartosz Golaszewski, Jianqun Xu,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip, Bamvor Jian Zhang, Andrew Lunn,
	Gregory Clement, Sebastian Hesselbarth, Heiko Stuebner,
	Patrice Chotard, Michal Simek, Andy Shevchenko

On Mon, Nov 8, 2021 at 10:26 AM Andy Shevchenko
<andy.shevchenko@gmail.com> wrote:

> > IMO: the strarray variants introduction and use should be a separate
> > patchset from the rest.
>
> It will add unnecessary churn. Yeah, I have planned to send just that, but then
> it took more and more cleanups and I have to stop at some point, the code there
> is bad (historically or by other reasons, dunno).

I trust your judgement and taste to a large extent so this will not be
necessary. I can queue the whole series in pinctrl when you
think it's mature.

The library bits I kind of feel uncertain about who maintains, but I might just
apply it.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 13/19] pinctrl: st: Drop wrong kernel doc annotations
  2021-11-09 11:32   ` Linus Walleij
@ 2021-11-09 12:04     ` Andy Shevchenko
  0 siblings, 0 replies; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-09 12:04 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Bartosz Golaszewski, Jianqun Xu, Sai Krishna Potthuri,
	Andrew Morton, linux-gpio, linux-kernel, linux-arm-kernel,
	linux-rockchip, Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Tue, Nov 09, 2021 at 12:32:31PM +0100, Linus Walleij wrote:
> On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> 
> > Kernel doc validator is not happy:
> >
> >   .../pinctrl-st.c:59: warning: This comment starts with '/**', but isn't a kernel-doc comment.
> >   .../pinctrl-st.c:73: warning: This comment starts with '/**', but isn't a kernel-doc comment.
> >
> > Drop them as they are indeed not a kernel doc comments.
> >
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> 
> Acked-by: Linus Walleij <linus.walleij@linaro.org>
> 
> Hm maybe I could just apply this patch, shouldn't collide with anything.
> Let me know your preference.

You may apply whatever patches you want that are precursors for the strarray()
idea. Basically you may apply somewhat 9 patches if I'm not mistaken.
Of course if you have no objections.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 14/19] pinctrl: st: Use temporary variable for struct device
  2021-11-09 11:55           ` Linus Walleij
@ 2021-11-09 12:07             ` Andy Shevchenko
  2021-11-09 12:09             ` Andy Shevchenko
  1 sibling, 0 replies; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-09 12:07 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Joe Perches, Bartosz Golaszewski, Jianqun Xu,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip, Bamvor Jian Zhang, Andrew Lunn,
	Gregory Clement, Sebastian Hesselbarth, Heiko Stuebner,
	Patrice Chotard, Michal Simek, Andy Shevchenko

On Tue, Nov 09, 2021 at 12:55:44PM +0100, Linus Walleij wrote:
> On Mon, Nov 8, 2021 at 10:26 AM Andy Shevchenko
> <andy.shevchenko@gmail.com> wrote:
> 
> > > IMO: the strarray variants introduction and use should be a separate
> > > patchset from the rest.
> >
> > It will add unnecessary churn. Yeah, I have planned to send just that, but then
> > it took more and more cleanups and I have to stop at some point, the code there
> > is bad (historically or by other reasons, dunno).
> 
> I trust your judgement and taste to a large extent so this will not be
> necessary. I can queue the whole series in pinctrl when you
> think it's mature.
> 
> The library bits I kind of feel uncertain about who maintains, but I might just
> apply it.

No worries, Andrew usually applies that in case it's _solely_ library code.
Otherwise it's on certain maintainer shoulders to decide. Note, that I'm one
of the designated reviewers for lib/string*.

Thanks!

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 14/19] pinctrl: st: Use temporary variable for struct device
  2021-11-09 11:55           ` Linus Walleij
  2021-11-09 12:07             ` Andy Shevchenko
@ 2021-11-09 12:09             ` Andy Shevchenko
  1 sibling, 0 replies; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-09 12:09 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Joe Perches, Bartosz Golaszewski, Jianqun Xu,
	Sai Krishna Potthuri, Andrew Morton, linux-gpio, linux-kernel,
	linux-arm-kernel, linux-rockchip, Bamvor Jian Zhang, Andrew Lunn,
	Gregory Clement, Sebastian Hesselbarth, Heiko Stuebner,
	Patrice Chotard, Michal Simek, Andy Shevchenko

On Tue, Nov 09, 2021 at 12:55:44PM +0100, Linus Walleij wrote:
> On Mon, Nov 8, 2021 at 10:26 AM Andy Shevchenko
> <andy.shevchenko@gmail.com> wrote:

...

> I can queue the whole series in pinctrl when you
> think it's mature.

Forgot to react on this.

I have compile tested the pin control stuff (of course, library including)
and gpio-mockup. To me it's all ready (taking into account the tags we got).

If you feel like pulling it now, go for it and thanks!

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray()
  2021-11-09 11:42 ` Linus Walleij
@ 2021-11-15 11:23   ` Andy Shevchenko
  2021-11-18 16:56     ` Andy Shevchenko
  0 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-15 11:23 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Bartosz Golaszewski, Jianqun Xu, Sai Krishna Potthuri,
	Andrew Morton, linux-gpio, linux-kernel, linux-arm-kernel,
	linux-rockchip, Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Tue, Nov 09, 2021 at 12:42:00PM +0100, Linus Walleij wrote:
> On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> 
> > We have a few users already that basically want to have array of
> > sequential strings to be allocated and filled.
> >
> > Provide a helper for them (basically adjusted version from gpio-mockup.c).
> >
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> 
> Fulfils Rusty Russell's API design hierarchy requirements
> and help people to make less mistakes so:
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Thanks!

Should I resend, take into mine PR, or you just apply it as is?

As I answered previously the series doesn't require additional work
from my perspective.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 19/19] gpio: mockup: Switch to use kasprintf_strarray()
  2021-11-05 12:42 ` [PATCH v1 19/19] gpio: mockup: Switch to use kasprintf_strarray() Andy Shevchenko
  2021-11-09 11:35   ` Linus Walleij
@ 2021-11-16  9:12   ` Bartosz Golaszewski
  1 sibling, 0 replies; 48+ messages in thread
From: Bartosz Golaszewski @ 2021-11-16  9:12 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Jianqun Xu, Linus Walleij, Sai Krishna Potthuri, Andrew Morton,
	open list:GPIO SUBSYSTEM, Linux Kernel Mailing List, Linux ARM,
	open list:ARM/Rockchip SoC...,
	Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> Since we have a generic helper, switch the module to use it.
> No functional change intended.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>  drivers/gpio/gpio-mockup.c | 23 +----------------------
>  1 file changed, 1 insertion(+), 22 deletions(-)
>
> diff --git a/drivers/gpio/gpio-mockup.c b/drivers/gpio/gpio-mockup.c
> index d26bff29157b..8943cea92764 100644
> --- a/drivers/gpio/gpio-mockup.c
> +++ b/drivers/gpio/gpio-mockup.c
> @@ -491,27 +491,6 @@ static void gpio_mockup_unregister_pdevs(void)
>         }
>  }
>
> -static __init char **gpio_mockup_make_line_names(const char *label,
> -                                                unsigned int num_lines)
> -{
> -       unsigned int i;
> -       char **names;
> -
> -       names = kcalloc(num_lines + 1, sizeof(char *), GFP_KERNEL);
> -       if (!names)
> -               return NULL;
> -
> -       for (i = 0; i < num_lines; i++) {
> -               names[i] = kasprintf(GFP_KERNEL, "%s-%u", label, i);
> -               if (!names[i]) {
> -                       kfree_strarray(names, i);
> -                       return NULL;
> -               }
> -       }
> -
> -       return names;
> -}
> -
>  static int __init gpio_mockup_register_chip(int idx)
>  {
>         struct property_entry properties[GPIO_MOCKUP_MAX_PROP];
> @@ -538,7 +517,7 @@ static int __init gpio_mockup_register_chip(int idx)
>         properties[prop++] = PROPERTY_ENTRY_U16("nr-gpios", ngpio);
>
>         if (gpio_mockup_named_lines) {
> -               line_names = gpio_mockup_make_line_names(chip_label, ngpio);
> +               line_names = kasprintf_strarray(GFP_KERNEL, chip_label, ngpio);
>                 if (!line_names)
>                         return -ENOMEM;
>
> --
> 2.33.0
>

Acked-by: Bartosz Golaszewski <brgl@bgdev.pl>

Feel free to take it with the rest of the series.

Bart

^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray()
  2021-11-15 11:23   ` Andy Shevchenko
@ 2021-11-18 16:56     ` Andy Shevchenko
  2021-11-18 20:30       ` Bartosz Golaszewski
  0 siblings, 1 reply; 48+ messages in thread
From: Andy Shevchenko @ 2021-11-18 16:56 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Bartosz Golaszewski, Jianqun Xu, Sai Krishna Potthuri,
	Andrew Morton, linux-gpio, linux-kernel, linux-arm-kernel,
	linux-rockchip, Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Mon, Nov 15, 2021 at 01:23:02PM +0200, Andy Shevchenko wrote:
> On Tue, Nov 09, 2021 at 12:42:00PM +0100, Linus Walleij wrote:
> > On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
> > <andriy.shevchenko@linux.intel.com> wrote:
> > 
> > > We have a few users already that basically want to have array of
> > > sequential strings to be allocated and filled.
> > >
> > > Provide a helper for them (basically adjusted version from gpio-mockup.c).
> > >
> > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > 
> > Fulfils Rusty Russell's API design hierarchy requirements
> > and help people to make less mistakes so:
> > Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> 
> Thanks!
> 
> Should I resend, take into mine PR, or you just apply it as is?
> 
> As I answered previously the series doesn't require additional work
> from my perspective.

Okay, I'm about to send a PR to you and Bart for this.
Does it sound good?

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 48+ messages in thread

* Re: [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray()
  2021-11-18 16:56     ` Andy Shevchenko
@ 2021-11-18 20:30       ` Bartosz Golaszewski
  0 siblings, 0 replies; 48+ messages in thread
From: Bartosz Golaszewski @ 2021-11-18 20:30 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Linus Walleij, Jianqun Xu, Sai Krishna Potthuri, Andrew Morton,
	open list:GPIO SUBSYSTEM, Linux Kernel Mailing List, Linux ARM,
	open list:ARM/Rockchip SoC...,
	Bamvor Jian Zhang, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Heiko Stuebner, Patrice Chotard,
	Michal Simek, Andy Shevchenko

On Thu, Nov 18, 2021 at 5:56 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> On Mon, Nov 15, 2021 at 01:23:02PM +0200, Andy Shevchenko wrote:
> > On Tue, Nov 09, 2021 at 12:42:00PM +0100, Linus Walleij wrote:
> > > On Fri, Nov 5, 2021 at 1:43 PM Andy Shevchenko
> > > <andriy.shevchenko@linux.intel.com> wrote:
> > >
> > > > We have a few users already that basically want to have array of
> > > > sequential strings to be allocated and filled.
> > > >
> > > > Provide a helper for them (basically adjusted version from gpio-mockup.c).
> > > >
> > > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > >
> > > Fulfils Rusty Russell's API design hierarchy requirements
> > > and help people to make less mistakes so:
> > > Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> >
> > Thanks!
> >
> > Should I resend, take into mine PR, or you just apply it as is?
> >
> > As I answered previously the series doesn't require additional work
> > from my perspective.
>
> Okay, I'm about to send a PR to you and Bart for this.
> Does it sound good?
>

Sounds good to me.

Bart

^ permalink raw reply	[flat|nested] 48+ messages in thread

end of thread, other threads:[~2021-11-18 20:30 UTC | newest]

Thread overview: 48+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-05 12:42 [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Andy Shevchenko
2021-11-05 12:42 ` [PATCH v1 02/19] lib/string_helpers: Introduce managed variant of kasprintf_strarray() Andy Shevchenko
2021-11-05 12:42 ` [PATCH v1 03/19] pinctrl/rockchip: Drop wrong kernel doc annotation Andy Shevchenko
2021-11-06 16:32   ` Heiko Stübner
2021-11-05 12:42 ` [PATCH v1 04/19] pinctrl/rockchip: Use temporary variable for struct device Andy Shevchenko
2021-11-08 12:46   ` Heiko Stübner
2021-11-05 12:42 ` [PATCH v1 05/19] pinctrl/rockchip: Make use of the devm_platform_get_and_ioremap_resource() Andy Shevchenko
2021-11-08 12:48   ` Heiko Stübner
2021-11-05 12:42 ` [PATCH v1 06/19] pinctrl/rockchip: Convert to use dev_err_probe() Andy Shevchenko
2021-11-08 12:49   ` Heiko Stübner
2021-11-05 12:42 ` [PATCH v1 07/19] pinctrl/rockchip: Switch to use devm_kasprintf_strarray() Andy Shevchenko
2021-11-08 12:51   ` Heiko Stübner
2021-11-05 12:42 ` [PATCH v1 08/19] pinctrl: armada-37xx: Fix function name in the kernel doc Andy Shevchenko
2021-11-08 10:37   ` Gregory CLEMENT
2021-11-05 12:42 ` [PATCH v1 09/19] pinctrl: armada-37xx: Use temporary variable for struct device Andy Shevchenko
2021-11-08 10:49   ` Gregory CLEMENT
2021-11-05 12:42 ` [PATCH v1 10/19] pinctrl: armada-37xx: Make use of the devm_platform_ioremap_resource() Andy Shevchenko
2021-11-08 10:56   ` Gregory CLEMENT
2021-11-05 12:42 ` [PATCH v1 11/19] pinctrl: armada-37xx: Convert to use dev_err_probe() Andy Shevchenko
2021-11-08 10:59   ` Gregory CLEMENT
2021-11-05 12:42 ` [PATCH v1 12/19] pinctrl: armada-37xx: Switch to use devm_kasprintf_strarray() Andy Shevchenko
2021-11-08 11:09   ` Gregory CLEMENT
2021-11-05 12:42 ` [PATCH v1 13/19] pinctrl: st: Drop wrong kernel doc annotations Andy Shevchenko
2021-11-09 11:32   ` Linus Walleij
2021-11-09 12:04     ` Andy Shevchenko
2021-11-05 12:42 ` [PATCH v1 14/19] pinctrl: st: Use temporary variable for struct device Andy Shevchenko
2021-11-06  7:50   ` Joe Perches
     [not found]     ` <CAHp75Ve0Bv9VsWFFZxL9wYk=Z_Mm7nat-vf7g8HHTiROi7EY=Q@mail.gmail.com>
2021-11-06  8:28       ` Joe Perches
2021-11-08  9:26         ` Andy Shevchenko
2021-11-09 11:55           ` Linus Walleij
2021-11-09 12:07             ` Andy Shevchenko
2021-11-09 12:09             ` Andy Shevchenko
2021-11-05 12:42 ` [PATCH v1 15/19] pinctrl: st: Make use of the devm_platform_ioremap_resource_byname() Andy Shevchenko
2021-11-09 11:33   ` Linus Walleij
2021-11-05 12:42 ` [PATCH v1 16/19] pinctrl: st: Convert to use dev_err_probe() Andy Shevchenko
2021-11-09 11:34   ` Linus Walleij
2021-11-05 12:42 ` [PATCH v1 17/19] pinctrl: st: Switch to use devm_kasprintf_strarray() Andy Shevchenko
2021-11-09 11:34   ` Linus Walleij
2021-11-05 12:42 ` [PATCH v1 18/19] pinctrl: zynqmp: Unify pin naming Andy Shevchenko
2021-11-09 11:34   ` Linus Walleij
2021-11-05 12:42 ` [PATCH v1 19/19] gpio: mockup: Switch to use kasprintf_strarray() Andy Shevchenko
2021-11-09 11:35   ` Linus Walleij
2021-11-16  9:12   ` Bartosz Golaszewski
2021-11-06  7:34 ` [PATCH v1 01/19] lib/string_helpers: Introduce kasprintf_strarray() Joe Perches
2021-11-09 11:42 ` Linus Walleij
2021-11-15 11:23   ` Andy Shevchenko
2021-11-18 16:56     ` Andy Shevchenko
2021-11-18 20:30       ` Bartosz Golaszewski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).