From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Linus Walleij <linus.walleij@linaro.org>,
Jonathan Corbet <corbet@lwn.net>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Kent Gibson <warthog618@gmail.com>
Cc: linux-gpio@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org,
Bartosz Golaszewski <bgolaszewski@baylibre.com>
Subject: [PATCH v2 9/9] gpio: mockup: refactor the module init function
Date: Mon, 28 Sep 2020 12:41:55 +0200 [thread overview]
Message-ID: <20200928104155.7385-10-brgl@bgdev.pl> (raw)
In-Reply-To: <20200928104155.7385-1-brgl@bgdev.pl>
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Let's move the code preparing the device properties into a separate
routine. This has the advantage of simplifying the error handling and
makes the indentation less deep.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/gpio/gpio-mockup.c | 96 +++++++++++++++++++-------------------
1 file changed, 49 insertions(+), 47 deletions(-)
diff --git a/drivers/gpio/gpio-mockup.c b/drivers/gpio/gpio-mockup.c
index 47b7de6d5ab1..02eea05a09dd 100644
--- a/drivers/gpio/gpio-mockup.c
+++ b/drivers/gpio/gpio-mockup.c
@@ -503,16 +503,59 @@ static __init char **gpio_mockup_make_line_names(const char *label,
return names;
}
-static int __init gpio_mockup_init(void)
+static int __init gpio_mockup_register_chip(int idx)
{
struct property_entry properties[GPIO_MOCKUP_MAX_PROP];
- int i, prop, num_chips, err = 0, base;
struct platform_device_info pdevinfo;
struct platform_device *pdev;
+ char **line_names = NULL;
char chip_label[32];
- char **line_names;
+ int prop = 0, base;
u16 ngpio;
+ memset(properties, 0, sizeof(properties));
+ memset(&pdevinfo, 0, sizeof(pdevinfo));
+
+ snprintf(chip_label, sizeof(chip_label), "gpio-mockup-%c", idx + 'A');
+ properties[prop++] = PROPERTY_ENTRY_STRING("chip-label", chip_label);
+
+ base = gpio_mockup_range_base(idx);
+ if (base >= 0)
+ properties[prop++] = PROPERTY_ENTRY_U32("gpio-base", base);
+
+ ngpio = base < 0 ? gpio_mockup_range_ngpio(idx)
+ : gpio_mockup_range_ngpio(idx) - base;
+ properties[prop++] = PROPERTY_ENTRY_U16("nr-gpios", ngpio);
+
+ if (gpio_mockup_named_lines) {
+ line_names = gpio_mockup_make_line_names(chip_label, ngpio);
+ if (!line_names)
+ return -ENOMEM;
+
+ properties[prop++] = PROPERTY_ENTRY_STRING_ARRAY_LEN(
+ "gpio-line-names", line_names, ngpio);
+ }
+
+ pdevinfo.name = "gpio-mockup";
+ pdevinfo.id = idx;
+ pdevinfo.properties = properties;
+
+ pdev = platform_device_register_full(&pdevinfo);
+ kfree_strarray(line_names, ngpio);
+ if (IS_ERR(pdev)) {
+ pr_err("error registering device");
+ return PTR_ERR(pdev);
+ }
+
+ gpio_mockup_pdevs[idx] = pdev;
+
+ return 0;
+}
+
+static int __init gpio_mockup_init(void)
+{
+ int i, num_chips, err;
+
if ((gpio_mockup_num_ranges < 2) ||
(gpio_mockup_num_ranges % 2) ||
(gpio_mockup_num_ranges > GPIO_MOCKUP_MAX_RANGES))
@@ -540,54 +583,13 @@ static int __init gpio_mockup_init(void)
}
for (i = 0; i < num_chips; i++) {
- memset(properties, 0, sizeof(properties));
- memset(&pdevinfo, 0, sizeof(pdevinfo));
- prop = 0;
- line_names = NULL;
-
- snprintf(chip_label, sizeof(chip_label),
- "gpio-mockup-%c", i + 'A');
- properties[prop++] = PROPERTY_ENTRY_STRING("chip-label",
- chip_label);
-
- base = gpio_mockup_range_base(i);
- if (base >= 0)
- properties[prop++] = PROPERTY_ENTRY_U32("gpio-base",
- base);
-
- ngpio = base < 0 ? gpio_mockup_range_ngpio(i)
- : gpio_mockup_range_ngpio(i) - base;
- properties[prop++] = PROPERTY_ENTRY_U16("nr-gpios", ngpio);
-
- if (gpio_mockup_named_lines) {
- line_names = gpio_mockup_make_line_names(chip_label,
- ngpio);
- if (!line_names) {
- platform_driver_unregister(&gpio_mockup_driver);
- gpio_mockup_unregister_pdevs();
- return -ENOMEM;
- }
-
- properties[prop++] = PROPERTY_ENTRY_STRING_ARRAY_LEN(
- "gpio-line-names",
- line_names, ngpio);
- }
-
- pdevinfo.name = "gpio-mockup";
- pdevinfo.id = i;
- pdevinfo.properties = properties;
-
- pdev = platform_device_register_full(&pdevinfo);
- kfree_strarray(line_names, ngpio);
- if (IS_ERR(pdev)) {
- pr_err("error registering device");
+ err = gpio_mockup_register_chip(i);
+ if (err) {
platform_driver_unregister(&gpio_mockup_driver);
gpio_mockup_unregister_pdevs();
debugfs_remove_recursive(gpio_mockup_dbg_dir);
- return PTR_ERR(pdev);
+ return err;
}
-
- gpio_mockup_pdevs[i] = pdev;
}
return 0;
--
2.26.1
prev parent reply other threads:[~2020-09-28 10:42 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-28 10:41 [PATCH v2 0/9] gpio: mockup: refactoring + documentation Bartosz Golaszewski
2020-09-28 10:41 ` [PATCH v2 1/9] lib: string_helpers: provide kfree_strarray() Bartosz Golaszewski
2020-09-28 12:55 ` Andy Shevchenko
2020-09-28 13:04 ` Bartosz Golaszewski
2020-09-28 13:56 ` Andy Shevchenko
2020-09-28 15:59 ` Joe Perches
2020-09-28 16:02 ` Bartosz Golaszewski
2020-09-28 16:06 ` Joe Perches
2020-09-28 16:25 ` Andy Shevchenko
2020-09-29 8:10 ` David Laight
2020-09-29 8:49 ` Andy Shevchenko
2020-09-29 9:42 ` Bartosz Golaszewski
2020-09-28 10:41 ` [PATCH v2 2/9] Documentation: gpio: add documentation for gpio-mockup Bartosz Golaszewski
2020-09-28 10:41 ` [PATCH v2 3/9] gpio: mockup: drop unneeded includes Bartosz Golaszewski
2020-09-28 10:41 ` [PATCH v2 4/9] gpio: mockup: use KBUILD_MODNAME Bartosz Golaszewski
2020-09-28 10:41 ` [PATCH v2 5/9] gpio: mockup: use pr_fmt() Bartosz Golaszewski
2020-09-28 10:41 ` [PATCH v2 6/9] gpio: mockup: remove unneeded return statement Bartosz Golaszewski
2020-09-28 10:41 ` [PATCH v2 7/9] gpio: mockup: pass the chip label as device property Bartosz Golaszewski
2020-09-28 13:00 ` Andy Shevchenko
2020-09-28 13:13 ` Bartosz Golaszewski
2020-09-28 14:00 ` Andy Shevchenko
2020-09-28 14:52 ` Bartosz Golaszewski
2020-09-28 16:24 ` Andy Shevchenko
2020-09-28 10:41 ` [PATCH v2 8/9] gpio: mockup: use the generic 'gpio-line-names' property Bartosz Golaszewski
2020-09-28 13:01 ` Andy Shevchenko
2020-09-28 10:41 ` Bartosz Golaszewski [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200928104155.7385-10-brgl@bgdev.pl \
--to=brgl@bgdev.pl \
--cc=andriy.shevchenko@linux.intel.com \
--cc=bgolaszewski@baylibre.com \
--cc=corbet@lwn.net \
--cc=linus.walleij@linaro.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=warthog618@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.