From: Tomi Valkeinen <tomi.valkeinen@ti.com>
To: Andrew Lunn <andrew@lunn.ch>
Cc: cooloney@gmail.com, rpurdie@rpsys.net,
devicetree@vger.kernel.org, vigneshr@ti.com,
Matthew.Fatheree@belkin.com, linux-leds@vger.kernel.org,
kaloz@openwrt.org,
linux ARM <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCHv5 2/2] leds: tlc591xx: Driver for the TI 8/16 Channel i2c LED driver
Date: Tue, 27 Jan 2015 13:17:47 +0200 [thread overview]
Message-ID: <54C773DB.8010905@ti.com> (raw)
In-Reply-To: <20150126174100.GD5015@lunn.ch>
[-- Attachment #1: Type: text/plain, Size: 2350 bytes --]
On 26/01/15 19:41, Andrew Lunn wrote:
>> Maybe it's normal for LED drivers, but why is the workqueue needed? Why
>> not just do the work synchronously?
>
> include/linux/leds.h says:
>
> /* Must not sleep, use a workqueue if needed */
> void (*brightness_set)(struct led_classdev *led_cdev,
> enum led_brightness brightness);
>
> and regmap uses a lock to protect its structures, and so does i2c, etc.
Ah ok.
>>> +static int
>>> +tlc591xx_configure(struct device *dev,
>>> + struct tlc591xx_priv *priv,
>>> + struct regmap *regmap,
>>> + const struct tlc591xx *tlc591xx)
>>> +{
>>> + unsigned int i;
>>> + int err = 0;
>>> +
>>> + tlc591xx_set_mode(regmap, MODE2_DIM);
>>> + for (i = 0; i < TLC59116_LEDS; i++) {
>>
>> Looping for tlc591xx->maxleds should be enough?
>
> Yes, it would, but i'm not sure that is any better. At the moment it
> is a constant, so the compiler can optimise it. We might save 8
> iterations for TLC59108, but how much do we add by having less well
> optimized code? And this is during probe, not some hot path, so do we
> really care?
True. And if the define is renamed to TLC591XX_MAX_LEDS or such, then
it's clear.
>>> +
>>> + tlc591xx = of_match_device(of_tlc591xx_leds_match, dev)->data;
>>
>> I presume of_match_device() can return NULL or an error, making the
>> above crash.
>
> It would be very odd. The fact the probe function is being called
> means there is a match. So return values like -ENODEV would mean a
> core OF bug. There is no memory allocations needed, so -ENOMEM would
> also not be expected.
The match could come from non-DT based matching. You don't support that
in the driver, but it would be good to bail out early if that is the case.
>>> +
>>> + count = of_get_child_count(np);
>>
>> 'np' may be NULL. I'm not sure how of_get_child_count() likes that.
>
> How can it be NULL? If the probe has been called, it means the
> compatibility string must match. If it matches, there must be a np!
Again with non-DT match, although if that's the case the driver should
have already returned an error at this point.
> Anyway, of_get_child_count() looks to be happy with NULL and will
> return 0.
Yep, then it's not an issue.
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: tomi.valkeinen@ti.com (Tomi Valkeinen)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv5 2/2] leds: tlc591xx: Driver for the TI 8/16 Channel i2c LED driver
Date: Tue, 27 Jan 2015 13:17:47 +0200 [thread overview]
Message-ID: <54C773DB.8010905@ti.com> (raw)
In-Reply-To: <20150126174100.GD5015@lunn.ch>
On 26/01/15 19:41, Andrew Lunn wrote:
>> Maybe it's normal for LED drivers, but why is the workqueue needed? Why
>> not just do the work synchronously?
>
> include/linux/leds.h says:
>
> /* Must not sleep, use a workqueue if needed */
> void (*brightness_set)(struct led_classdev *led_cdev,
> enum led_brightness brightness);
>
> and regmap uses a lock to protect its structures, and so does i2c, etc.
Ah ok.
>>> +static int
>>> +tlc591xx_configure(struct device *dev,
>>> + struct tlc591xx_priv *priv,
>>> + struct regmap *regmap,
>>> + const struct tlc591xx *tlc591xx)
>>> +{
>>> + unsigned int i;
>>> + int err = 0;
>>> +
>>> + tlc591xx_set_mode(regmap, MODE2_DIM);
>>> + for (i = 0; i < TLC59116_LEDS; i++) {
>>
>> Looping for tlc591xx->maxleds should be enough?
>
> Yes, it would, but i'm not sure that is any better. At the moment it
> is a constant, so the compiler can optimise it. We might save 8
> iterations for TLC59108, but how much do we add by having less well
> optimized code? And this is during probe, not some hot path, so do we
> really care?
True. And if the define is renamed to TLC591XX_MAX_LEDS or such, then
it's clear.
>>> +
>>> + tlc591xx = of_match_device(of_tlc591xx_leds_match, dev)->data;
>>
>> I presume of_match_device() can return NULL or an error, making the
>> above crash.
>
> It would be very odd. The fact the probe function is being called
> means there is a match. So return values like -ENODEV would mean a
> core OF bug. There is no memory allocations needed, so -ENOMEM would
> also not be expected.
The match could come from non-DT based matching. You don't support that
in the driver, but it would be good to bail out early if that is the case.
>>> +
>>> + count = of_get_child_count(np);
>>
>> 'np' may be NULL. I'm not sure how of_get_child_count() likes that.
>
> How can it be NULL? If the probe has been called, it means the
> compatibility string must match. If it matches, there must be a np!
Again with non-DT match, although if that's the case the driver should
have already returned an error at this point.
> Anyway, of_get_child_count() looks to be happy with NULL and will
> return 0.
Yep, then it's not an issue.
Tomi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150127/5f2abe00/attachment.sig>
next prev parent reply other threads:[~2015-01-27 11:18 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-21 22:29 [PATCHv5 0/2] Driver for TI tlc591xx 8/16 Channel i2c LED driver Andrew Lunn
2015-01-21 22:29 ` Andrew Lunn
[not found] ` <1421879364-8573-1-git-send-email-andrew-g2DYL2Zd6BY@public.gmane.org>
2015-01-21 22:29 ` [PATCHv5 1/2] leds: tlc591xx: Document binding for the TI " Andrew Lunn
2015-01-21 22:29 ` Andrew Lunn
2015-01-21 22:29 ` [PATCHv5 2/2] leds: tlc591xx: Driver " Andrew Lunn
2015-01-21 22:29 ` Andrew Lunn
2015-01-26 11:32 ` Tomi Valkeinen
2015-01-26 11:32 ` Tomi Valkeinen
2015-01-26 17:41 ` Andrew Lunn
2015-01-26 17:41 ` Andrew Lunn
2015-01-27 11:17 ` Tomi Valkeinen [this message]
2015-01-27 11:17 ` Tomi Valkeinen
[not found] ` <1421879364-8573-3-git-send-email-andrew-g2DYL2Zd6BY@public.gmane.org>
2015-01-26 11:46 ` Tomi Valkeinen
2015-01-26 11:46 ` Tomi Valkeinen
2015-01-26 17:10 ` Andrew Lunn
2015-01-26 17:10 ` Andrew Lunn
2015-01-27 11:11 ` Tomi Valkeinen
2015-01-27 11:11 ` Tomi Valkeinen
2015-02-03 9:14 ` Peter Ujfalusi
2015-02-03 9:14 ` Peter Ujfalusi
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=54C773DB.8010905@ti.com \
--to=tomi.valkeinen@ti.com \
--cc=Matthew.Fatheree@belkin.com \
--cc=andrew@lunn.ch \
--cc=cooloney@gmail.com \
--cc=devicetree@vger.kernel.org \
--cc=kaloz@openwrt.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-leds@vger.kernel.org \
--cc=rpurdie@rpsys.net \
--cc=vigneshr@ti.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.