From: Jacek Anaszewski <jacek.anaszewski@gmail.com>
To: Daniel Mack <daniel@zonque.org>, robh+dt@kernel.org
Cc: linux-leds@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH v3 2/5] leds: lt3593: merge functions and clean up code
Date: Thu, 21 Jun 2018 21:23:05 +0200 [thread overview]
Message-ID: <e9a09314-1fcf-1ac3-1b34-b062e197ac6b@gmail.com> (raw)
In-Reply-To: <20180620201303.6272-3-daniel@zonque.org>
Hi Daniel,
You switched to using kcalloc, but apparently without compile-testing
it:
drivers/leds/leds-lt3593.c: In function ‘lt3593_led_probe_pdata’:
drivers/leds/leds-lt3593.c:88:13: error: too few arguments to function
‘devm_kcalloc’
led_data = devm_kcalloc(dev, sizeof(*led_data), GFP_KERNEL);
Once you'll be resending the patch set please also remove
empty line at the end of DT bindings.
Also you could think of switching to using SPDX license identifier
at the occasion of updating the email address.
Best regards,
acek Anaszewski
On 06/20/2018 10:13 PM, Daniel Mack wrote:
> In preparation to DT probe functionality, merge create_lt3593_led() into
> its only call-site. The DT based setup code will be quite different, so this
> internal helper function is of no help.
>
> This also changes the way the driver works by only handling one entry inside
> 'struct gpio_led_platform_data'. If multiple devices of the same type are
> found in a design, there should be a platform device for each of them. The
> only mainline user of this driver is not affected by this change.
>
> Last, use devm_led_classdev_register() instead of
> led_classdev_register(), so the driver's remove callback can go away.
>
> Signed-off-by: Daniel Mack <daniel@zonque.org>
> ---
> drivers/leds/leds-lt3593.c | 103 +++++++++++++------------------------
> 1 file changed, 35 insertions(+), 68 deletions(-)
>
> diff --git a/drivers/leds/leds-lt3593.c b/drivers/leds/leds-lt3593.c
> index 5ec730a31b65..a99ba2741e39 100644
> --- a/drivers/leds/leds-lt3593.c
> +++ b/drivers/leds/leds-lt3593.c
> @@ -71,104 +71,71 @@ static int lt3593_led_set(struct led_classdev *led_cdev,
> return 0;
> }
>
> -static int create_lt3593_led(const struct gpio_led *template,
> - struct lt3593_led_data *led_dat, struct device *parent)
> +static struct lt3593_led_data *lt3593_led_probe_pdata(struct device *dev)
> {
> + struct gpio_led_platform_data *pdata = dev_get_platdata(dev);
> + const struct gpio_led *template = &pdata->leds[0];
> + struct lt3593_led_data *led_data;
> int ret, state;
>
> - /* skip leds on GPIOs that aren't available */
> + if (pdata->num_leds != 1)
> + return ERR_PTR(-EINVAL);
> +
> + led_data = devm_kcalloc(dev, sizeof(*led_data), GFP_KERNEL);
> + if (!led_data)
> + return ERR_PTR(-ENOMEM);
> +
> if (!gpio_is_valid(template->gpio)) {
> - dev_info(parent, "%s: skipping unavailable LT3593 LED at gpio %d (%s)\n",
> - KBUILD_MODNAME, template->gpio, template->name);
> - return 0;
> + dev_info(dev, "skipping unavailable LT3593 LED at gpio "
> + "%d (%s)\n", template->gpio, template->name);
> + return ERR_PTR(-EINVAL);
> }
>
> - led_dat->cdev.name = template->name;
> - led_dat->cdev.default_trigger = template->default_trigger;
> - led_dat->gpio = template->gpio;
> -
> - led_dat->cdev.brightness_set_blocking = lt3593_led_set;
> + led_data->cdev.name = template->name;
> + led_data->cdev.default_trigger = template->default_trigger;
> + led_data->gpio = template->gpio;
> + led_data->cdev.brightness_set_blocking = lt3593_led_set;
>
> state = (template->default_state == LEDS_GPIO_DEFSTATE_ON);
> - led_dat->cdev.brightness = state ? LED_FULL : LED_OFF;
> + led_data->cdev.brightness = state ? LED_FULL : LED_OFF;
>
> if (!template->retain_state_suspended)
> - led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
> + led_data->cdev.flags |= LED_CORE_SUSPENDRESUME;
>
> - ret = devm_gpio_request_one(parent, template->gpio, state ?
> + ret = devm_gpio_request_one(dev, template->gpio, state ?
> GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW,
> template->name);
> if (ret < 0)
> - return ret;
> + return ERR_PTR(ret);
>
> - ret = led_classdev_register(parent, &led_dat->cdev);
> + ret = devm_led_classdev_register(dev, &led_data->cdev);
> if (ret < 0)
> - return ret;
> -
> - dev_info(parent, "%s: registered LT3593 LED '%s' at GPIO %d\n",
> - KBUILD_MODNAME, template->name, template->gpio);
> + return ERR_PTR(ret);
>
> - return 0;
> -}
> + dev_info(dev, "registered LT3593 LED '%s' at GPIO %d\n",
> + template->name, template->gpio);
>
> -static void delete_lt3593_led(struct lt3593_led_data *led)
> -{
> - if (!gpio_is_valid(led->gpio))
> - return;
> -
> - led_classdev_unregister(&led->cdev);
> + return led_data;
> }
>
> static int lt3593_led_probe(struct platform_device *pdev)
> {
> - struct gpio_led_platform_data *pdata = dev_get_platdata(&pdev->dev);
> - struct lt3593_led_data *leds_data;
> - int i, ret = 0;
> -
> - if (!pdata)
> - return -EBUSY;
> -
> - leds_data = devm_kcalloc(&pdev->dev,
> - pdata->num_leds, sizeof(struct lt3593_led_data),
> - GFP_KERNEL);
> - if (!leds_data)
> - return -ENOMEM;
> -
> - for (i = 0; i < pdata->num_leds; i++) {
> - ret = create_lt3593_led(&pdata->leds[i], &leds_data[i],
> - &pdev->dev);
> - if (ret < 0)
> - goto err;
> - }
> + struct device *dev = &pdev->dev;
> + struct lt3593_led_data *led_data;
>
> - platform_set_drvdata(pdev, leds_data);
> -
> - return 0;
> -
> -err:
> - for (i = i - 1; i >= 0; i--)
> - delete_lt3593_led(&leds_data[i]);
> -
> - return ret;
> -}
> -
> -static int lt3593_led_remove(struct platform_device *pdev)
> -{
> - int i;
> - struct gpio_led_platform_data *pdata = dev_get_platdata(&pdev->dev);
> - struct lt3593_led_data *leds_data;
> -
> - leds_data = platform_get_drvdata(pdev);
> + if (dev_get_platdata(dev)) {
> + led_data = lt3593_led_probe_pdata(dev);
> + if (IS_ERR(led_data))
> + return PTR_ERR(led_data);
> + }
>
> - for (i = 0; i < pdata->num_leds; i++)
> - delete_lt3593_led(&leds_data[i]);
> + platform_set_drvdata(pdev, led_data);
>
> return 0;
> }
>
> static struct platform_driver lt3593_led_driver = {
> .probe = lt3593_led_probe,
> - .remove = lt3593_led_remove,
> .driver = {
> .name = "leds-lt3593",
> },
>
next prev parent reply other threads:[~2018-06-21 19:23 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-20 20:12 [PATCH v3 0/5] leds: add devicetree functionality to lltc,lt3593 driver Daniel Mack
2018-06-20 20:12 ` [PATCH v3 1/5] dt-bindings: leds: Add bindings for lltc,lt3593 Daniel Mack
2018-06-20 20:13 ` [PATCH v3 2/5] leds: lt3593: merge functions and clean up code Daniel Mack
2018-06-21 19:23 ` Jacek Anaszewski [this message]
2018-06-21 20:16 ` Daniel Mack
2018-06-20 20:13 ` [PATCH v3 3/5] leds: lt3593: switch to gpiod interface Daniel Mack
2018-06-20 20:13 ` [PATCH v3 4/5] leds: lt3593: Add device tree probing glue Daniel Mack
2018-06-20 20:13 ` [PATCH v3 5/5] leds: lt3593: update email address Daniel Mack
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=e9a09314-1fcf-1ac3-1b34-b062e197ac6b@gmail.com \
--to=jacek.anaszewski@gmail.com \
--cc=daniel@zonque.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=robh+dt@kernel.org \
/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 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).