All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jacek Anaszewski <j.anaszewski@samsung.com>
To: Sakari Ailus <sakari.ailus@iki.fi>
Cc: linux-leds@vger.kernel.org, linux-media@vger.kernel.org,
	linux-kernel@vger.kernel.org, kyungmin.park@samsung.com,
	b.zolnierkie@samsung.com, pavel@ucw.cz, cooloney@gmail.com,
	rpurdie@rpsys.net, s.nawrocki@samsung.com, robh+dt@kernel.org,
	pawel.moll@arm.com, mark.rutland@arm.com,
	ijc+devicetree@hellion.org.uk, galak@codeaurora.org
Subject: Re: [PATCH/RFC v9 01/19] leds: Add LED Flash class extension to the LED subsystem
Date: Tue, 09 Dec 2014 13:56:47 +0100	[thread overview]
Message-ID: <5486F18F.1000202@samsung.com> (raw)
In-Reply-To: <20141209123607.GI15559@valkosipuli.retiisi.org.uk>

Hi Sakari,

On 12/09/2014 01:36 PM, Sakari Ailus wrote:
> Hi Jacek,
>
> On Thu, Dec 04, 2014 at 10:29:10AM +0100, Jacek Anaszewski wrote:
> ...
>>>> +static struct attribute *led_flash_strobe_attrs[] = {
>>>> +	&dev_attr_flash_strobe.attr,
>>>> +	NULL,
>>>> +};
>>>> +
>>>> +static struct attribute *led_flash_timeout_attrs[] = {
>>>> +	&dev_attr_flash_timeout.attr,
>>>> +	&dev_attr_max_flash_timeout.attr,
>>>> +	NULL,
>>>> +};
>>>> +
>>>> +static struct attribute *led_flash_brightness_attrs[] = {
>>>> +	&dev_attr_flash_brightness.attr,
>>>> +	&dev_attr_max_flash_brightness.attr,
>>>> +	NULL,
>>>> +};
>>>> +
>>>> +static struct attribute *led_flash_fault_attrs[] = {
>>>> +	&dev_attr_flash_fault.attr,
>>>> +	NULL,
>>>> +};
>>>> +
>>>> +static struct attribute *led_flash_sync_strobe_attrs[] = {
>>>> +	&dev_attr_flash_sync_strobe.attr,
>>>> +	NULL,
>>>> +};
>>>> +
>>>> +static const struct attribute_group led_flash_strobe_group = {
>>>> +	.attrs = led_flash_strobe_attrs,
>>>> +};
>>>> +
>>>> +static const struct attribute_group led_flash_timeout_group = {
>>>> +	.attrs = led_flash_timeout_attrs,
>>>> +};
>>>> +
>>>> +static const struct attribute_group led_flash_brightness_group = {
>>>> +	.attrs = led_flash_brightness_attrs,
>>>> +};
>>>> +
>>>> +static const struct attribute_group led_flash_fault_group = {
>>>> +	.attrs = led_flash_fault_attrs,
>>>> +};
>>>> +
>>>> +static const struct attribute_group led_flash_sync_strobe_group = {
>>>> +	.attrs = led_flash_sync_strobe_attrs,
>>>> +};
>>>> +
>>>> +static const struct attribute_group *flash_groups[] = {
>>>> +	&led_flash_strobe_group,
>>>> +	NULL,
>>>> +	NULL,
>>>> +	NULL,
>>>> +	NULL,
>>>> +	NULL,
>>>> +	NULL
>>>> +};
>>>> +
>>>> +static void led_flash_resume(struct led_classdev *led_cdev)
>>>> +{
>>>> +	struct led_classdev_flash *flash = lcdev_to_flash(led_cdev);
>>>> +
>>>> +	call_flash_op(flash, flash_brightness_set, flash->brightness.val);
>>>> +	call_flash_op(flash, timeout_set, flash->timeout.val);
>>>> +}
>>>> +
>>>> +static void led_flash_init_sysfs_groups(struct led_classdev_flash *flash)
>>>> +{
>>>> +	struct led_classdev *led_cdev = &flash->led_cdev;
>>>> +	const struct led_flash_ops *ops = flash->ops;
>>>> +	int num_sysfs_groups = 1;
>>>> +
>>>> +	if (ops->flash_brightness_set)
>>>> +		flash_groups[num_sysfs_groups++] = &led_flash_brightness_group;
>>>> +
>>>> +	if (ops->timeout_set)
>>>> +		flash_groups[num_sysfs_groups++] = &led_flash_timeout_group;
>>>> +
>>>> +	if (ops->fault_get)
>>>> +		flash_groups[num_sysfs_groups++] = &led_flash_fault_group;
>>>> +
>>>> +	if (led_cdev->flags & LED_DEV_CAP_COMPOUND)
>>>> +		flash_groups[num_sysfs_groups++] = &led_flash_sync_strobe_group;
>>>> +
>>>> +	led_cdev->groups = flash_groups;
>>>
>>> Shouldn't you have groups local to the device instead? If you register
>>> another flash device bad things will happen if the ops the device supports
>>> are different.
>>
>> The groups are local to the device. A LED class device is registered
>> with device_create_with_groups called from led_classdev_register
>> function. It is passed led_cdev->groups in the fifth argument.
>
> The groups pointer will be stored in struct device. If you have another
> driver using different groups, it will affect the groups for all flash
> devices that use the same groups pointer. I'm not sure what exactly would
> follow from that but I'd rather not change them once the device is created.

I had to take another look at this to understand the problem.
I think that the best option will be making flash_groups array
a member of struct led_classdev_flash.

>>>> +}
>>>> +
>>>> +int led_classdev_flash_register(struct device *parent,
>>>> +				struct led_classdev_flash *flash)
>>>> +{
>>>> +	struct led_classdev *led_cdev;
>>>> +	const struct led_flash_ops *ops;
>>>> +	int ret;
>>>> +
>>>> +	if (!flash)
>>>
>>> Do you have a use case for this?
>>
>> This is just a guard against NULL pointer dereference. Maybe it is
>> indeed redundant, as the driver developer can easily check its
>> origin during implementation.
>
> Fine for me.

Fine regarding my explanation or you agree that it is redundant?

Best Regards,
Jacek Anaszewski

  reply	other threads:[~2014-12-09 12:56 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-03 16:06 [PATCH/RFC v9 00/19] LED / flash API integration Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 01/19] leds: Add LED Flash class extension to the LED subsystem Jacek Anaszewski
2014-12-03 16:50   ` Sakari Ailus
2014-12-04  9:29     ` Jacek Anaszewski
2014-12-09 12:36       ` Sakari Ailus
2014-12-09 12:56         ` Jacek Anaszewski [this message]
2014-12-09 14:12           ` Sakari Ailus
2014-12-03 16:06 ` [PATCH/RFC v9 02/19] Documentation: leds: Add description of LED Flash class extension Jacek Anaszewski
2014-12-03 17:08   ` Sakari Ailus
2014-12-04  9:42     ` Jacek Anaszewski
2014-12-09 12:38       ` Sakari Ailus
2014-12-09 13:14         ` Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 03/19] mfd: max77693: Modify flash cell name identifiers Jacek Anaszewski
2014-12-09  8:52   ` Lee Jones
2014-12-09  9:18     ` Jacek Anaszewski
2014-12-09 10:02       ` Lee Jones
2014-12-03 16:06 ` [PATCH/RFC v9 04/19] mfd: max77693: adjust max77693_led_platform_data Jacek Anaszewski
2014-12-09  8:50   ` Lee Jones
2014-12-09  9:09     ` Jacek Anaszewski
2014-12-09 10:04       ` Lee Jones
2014-12-09 10:25         ` Jacek Anaszewski
2014-12-09 13:50           ` Lee Jones
2014-12-09 14:02             ` Jacek Anaszewski
2014-12-09 14:41               ` Lee Jones
2014-12-09 15:08                 ` Sylwester Nawrocki
2014-12-10 12:38                 ` Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 05/19] leds: Add support for max77693 mfd flash cell Jacek Anaszewski
2014-12-04  9:39   ` Sakari Ailus
2014-12-04 11:06     ` Jacek Anaszewski
2014-12-09 13:11       ` Sakari Ailus
2014-12-11 13:53         ` Jacek Anaszewski
2014-12-11 15:48           ` Sakari Ailus
2014-12-03 16:06 ` [PATCH/RFC v9 06/19] DT: Add documentation for the mfd Maxim max77693 Jacek Anaszewski
2014-12-04 10:07   ` Sakari Ailus
2014-12-04 11:40     ` Jacek Anaszewski
2014-12-04 16:12       ` Pavel Machek
2014-12-08 10:29         ` Jacek Anaszewski
2014-12-08 10:29           ` Jacek Anaszewski
2014-12-10 12:20         ` Sylwester Nawrocki
2014-12-10 12:41           ` Jacek Anaszewski
2014-12-09 14:09       ` Sakari Ailus
2014-12-09 14:13         ` Jacek Anaszewski
2014-12-10 10:02       ` Jacek Anaszewski
2014-12-10 10:50         ` Sakari Ailus
2014-12-10 10:59         ` Sylwester Nawrocki
2014-12-03 16:06 ` [PATCH/RFC v9 07/19] dt-binding: mfd: max77693: Add DT binding related macros Jacek Anaszewski
2014-12-30 22:15   ` Sakari Ailus
2014-12-03 16:06 ` [PATCH/RFC v9 08/19] leds: Add driver for AAT1290 current regulator Jacek Anaszewski
2014-12-11 14:16   ` Sakari Ailus
2014-12-11 15:34     ` Jacek Anaszewski
2014-12-11 15:52       ` Sakari Ailus
2014-12-03 16:06 ` [PATCH/RFC v9 09/19] of: Add Skyworks Solutions, Inc. vendor prefix Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 10/19] DT: Add documentation for the Skyworks AAT1290 Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 11/19] v4l2-async: change custom.match callback argument type Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 12/19] v4l2-async: add V4L2_ASYNC_MATCH_CUSTOM_OF matching type Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 13/19] v4l2-ctrls: Add V4L2_CID_FLASH_SYNC_STROBE control Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 14/19] media: Add registration helpers for V4L2 flash sub-devices Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 15/19] Documentation: leds: Add description of v4l2-flash sub-device Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 16/19] exynos4-is: Add support for v4l2-flash subdevs Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 17/19] DT: Add documentation for exynos4-is 'flashes' property Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 18/19] leds: max77693: add support for V4L2 Flash sub-device Jacek Anaszewski
2014-12-03 16:06 ` [PATCH/RFC v9 19/19] leds: aat1290: " Jacek Anaszewski
2014-12-10 13:48   ` Sakari Ailus

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=5486F18F.1000202@samsung.com \
    --to=j.anaszewski@samsung.com \
    --cc=b.zolnierkie@samsung.com \
    --cc=cooloney@gmail.com \
    --cc=galak@codeaurora.org \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=pavel@ucw.cz \
    --cc=pawel.moll@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=rpurdie@rpsys.net \
    --cc=s.nawrocki@samsung.com \
    --cc=sakari.ailus@iki.fi \
    /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.