From: Dan Murphy <dmurphy@ti.com> To: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>, "Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, Robert Moore <robert.moore@intel.com>, Erik Schmauss <erik.schmauss@intel.com>, Jacek Anaszewski <jacek.anaszewski@gmail.com>, Pavel Machek <pavel@ucw.cz>, Thierry Reding <thierry.reding@gmail.com> Cc: <linux-acpi@vger.kernel.org>, <devel@acpica.org>, <linux-leds@vger.kernel.org>, <linux-pwm@vger.kernel.org> Subject: Re: [PATCH 3/3] leds-pwm.c: support ACPI via firmware-node framework Date: Thu, 30 May 2019 10:14:32 -0500 Message-ID: <3c763c8f-985e-a292-1bd6-af20caab5239@ti.com> (raw) In-Reply-To: <4f89c4b91cc918302a9d5a7eedfa39259a5583bb.1559127603.git.nikolaus.voss@loewensteinmedical.de> On 5/29/19 7:18 AM, Nikolaus Voss wrote: > DT specific handling is replaced by firmware-node abstration to support > ACPI specification of PWM LEDS. > > Example ASL: > Device (PWML) > { > Name (_HID, "PRP0001") > Name (_DSD, Package () { > ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), > Package () { Package () {"compatible", > Package () {"pwm-leds"}}}}) > > Device (PWL0) > { > Name (_HID, "PRP0001") > Name (_DSD, Package () { > ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), > Package () { > Package () {"label", "alarm-led"}, > Package () {"pwms", Package () > {\_SB_.PCI0.PWM, 0, 600000, 0}}, > Package () {"linux,default-state", "off"}}}) > } > } > > Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de> > --- > drivers/leds/leds-pwm.c | 44 ++++++++++++++++++++++++----------------- > 1 file changed, 26 insertions(+), 18 deletions(-) > > diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c > index af08bcdc4fd8..cc717dd6a12c 100644 > --- a/drivers/leds/leds-pwm.c > +++ b/drivers/leds/leds-pwm.c > @@ -75,7 +75,7 @@ static inline size_t sizeof_pwm_leds_priv(int num_leds) > } > > static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv, > - struct led_pwm *led, struct device_node *child) > + struct led_pwm *led, struct fwnode_handle *fwnode) > { > struct led_pwm_data *led_data = &priv->leds[priv->num_leds]; > struct pwm_args pargs; > @@ -88,8 +88,8 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv, > led_data->cdev.max_brightness = led->max_brightness; > led_data->cdev.flags = LED_CORE_SUSPENDRESUME; > > - if (child) > - led_data->pwm = devm_of_pwm_get(dev, child, NULL); > + if (fwnode) > + led_data->pwm = devm_fwnode_pwm_get(dev, fwnode, NULL); > else > led_data->pwm = devm_pwm_get(dev, led->name); > if (IS_ERR(led_data->pwm)) { > @@ -114,7 +114,8 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv, > if (!led_data->period && (led->pwm_period_ns > 0)) > led_data->period = led->pwm_period_ns; > > - ret = devm_of_led_classdev_register(dev, child, &led_data->cdev); > + ret = devm_of_led_classdev_register(dev, to_of_node(fwnode), > + &led_data->cdev); > if (ret == 0) { > priv->num_leds++; > led_pwm_set(&led_data->cdev, led_data->cdev.brightness); > @@ -126,27 +127,34 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv, > return ret; > } > > -static int led_pwm_create_of(struct device *dev, struct led_pwm_priv *priv) > +static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv) > { > - struct device_node *child; > + struct fwnode_handle *fwnode; > struct led_pwm led; > int ret = 0; > > memset(&led, 0, sizeof(led)); > > - for_each_child_of_node(dev->of_node, child) { > - led.name = of_get_property(child, "label", NULL) ? : > - child->name; > + device_for_each_child_node(dev, fwnode) { > + ret = fwnode_property_read_string(fwnode, "label", &led.name); > + if (ret && is_of_node(fwnode)) > + led.name = to_of_node(fwnode)->name; new line > + if (!led.name) { > + fwnode_handle_put(fwnode); > + return -EINVAL; > + } 'label' is an optional parameter for device tree returning here makes it required. Maybe derive a default name. There is a patch series which is going to modify how labels are created for LED class devices. https://lore.kernel.org/patchwork/project/lkml/list/?series=391005 > > - led.default_trigger = of_get_property(child, > - "linux,default-trigger", NULL); > - led.active_low = of_property_read_bool(child, "active-low"); > - of_property_read_u32(child, "max-brightness", > - &led.max_brightness); > + fwnode_property_read_string(fwnode, "linux,default-trigger", > + &led.default_trigger); > > - ret = led_pwm_add(dev, priv, &led, child); > + led.active_low = fwnode_property_read_bool(fwnode, > + "active-low"); > + fwnode_property_read_u32(fwnode, "max-brightness", > + &led.max_brightness); > + > + ret = led_pwm_add(dev, priv, &led, fwnode); > if (ret) { > - of_node_put(child); > + fwnode_handle_put(fwnode); > break; > } > } > @@ -164,7 +172,7 @@ static int led_pwm_probe(struct platform_device *pdev) > if (pdata) > count = pdata->num_leds; > else > - count = of_get_child_count(pdev->dev.of_node); > + count = device_get_child_node_count(&pdev->dev); > > if (!count) > return -EINVAL; > @@ -182,7 +190,7 @@ static int led_pwm_probe(struct platform_device *pdev) > break; > } > } else { > - ret = led_pwm_create_of(&pdev->dev, priv); > + ret = led_pwm_create_fwnode(&pdev->dev, priv); > } > > if (ret)
next prev parent reply index Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-05-29 12:18 [PATCH 0/3] PWM framework: add support referencing PWMs from ACPI Nikolaus Voss 2019-05-29 12:18 ` [PATCH 1/3] ACPI: Resolve objects on host-directed table loads Nikolaus Voss 2019-05-30 14:42 ` Dan Murphy 2019-05-31 12:23 ` Pavel Machek 2019-05-31 12:45 ` Dan Murphy 2019-05-31 12:46 ` Dan Murphy 2019-06-03 9:12 ` Nikolaus Voss 2019-08-14 18:50 ` Andy Shevchenko 2019-08-14 20:27 ` Schmauss, Erik 2019-08-16 11:57 ` Nikolaus Voss 2019-08-30 14:53 ` Shevchenko, Andriy 2019-09-04 7:20 ` Nikolaus Voss 2019-09-06 17:46 ` Shevchenko, Andriy 2019-09-12 8:05 ` Nikolaus Voss 2019-09-12 8:07 ` [PATCH] ACPICA: make acpi_load_table() return table index Nikolaus Voss 2019-09-12 14:19 ` Moore, Robert 2019-09-12 19:36 ` Ferry Toth 2019-09-25 18:13 ` Schmauss, Erik 2019-09-26 8:09 ` Shevchenko, Andriy 2019-09-13 7:44 ` Nikolaus Voss 2019-09-13 14:20 ` Moore, Robert 2019-09-13 15:12 ` Shevchenko, Andriy 2019-09-13 16:48 ` Ferry Toth 2019-09-13 16:48 ` Ferry Toth 2019-09-13 17:40 ` Moore, Robert 2019-09-13 19:56 ` Rafael J. Wysocki 2019-09-16 9:46 ` Nikolaus Voss 2019-09-18 14:13 ` Moore, Robert 2019-09-18 14:31 ` Nikolaus Voss 2019-09-19 17:05 ` Moore, Robert 2019-09-23 9:05 ` Nikolaus Voss 2019-09-24 19:41 ` Moore, Robert 2019-09-25 10:18 ` Nikolaus Voss 2019-09-25 10:53 ` Shevchenko, Andriy 2019-09-19 8:13 ` Rafael J. Wysocki 2019-09-23 9:08 ` Nikolaus Voss 2019-09-23 9:47 ` [PATCH] ACPICA: Introduce acpi_load_table_with_index() Nikolaus Voss 2019-09-24 12:07 ` Shevchenko, Andriy 2019-09-24 12:08 ` Shevchenko, Andriy 2019-09-25 10:20 ` Nikolaus Voss 2019-09-24 15:11 ` Andy Shevchenko 2019-09-25 10:22 ` Nikolaus Voss 2019-09-26 16:09 ` [PATCH] ACPICA: make acpi_load_table() return table index Schmauss, Erik 2019-09-26 16:35 ` Shevchenko, Andriy 2019-09-26 16:51 ` Schmauss, Erik 2019-09-26 17:47 ` Shevchenko, Andriy 2019-09-26 18:44 ` Nikolaus Voss 2019-09-26 19:26 ` Rafael J. Wysocki 2019-09-26 19:41 ` Schmauss, Erik 2019-09-26 18:43 ` Nikolaus Voss 2019-05-29 12:18 ` [PATCH 2/3] PWM framework: add support referencing PWMs from ACPI Nikolaus Voss 2019-05-30 14:54 ` Dan Murphy 2019-05-31 12:24 ` Pavel Machek 2019-06-03 9:27 ` Nikolaus Voss 2019-05-29 12:18 ` [PATCH 3/3] leds-pwm.c: support ACPI via firmware-node framework Nikolaus Voss 2019-05-30 15:14 ` Dan Murphy [this message] 2019-06-03 9:44 ` Nikolaus Voss
Reply instructions: You may reply publically 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=3c763c8f-985e-a292-1bd6-af20caab5239@ti.com \ --to=dmurphy@ti.com \ --cc=devel@acpica.org \ --cc=erik.schmauss@intel.com \ --cc=jacek.anaszewski@gmail.com \ --cc=lenb@kernel.org \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-leds@vger.kernel.org \ --cc=linux-pwm@vger.kernel.org \ --cc=nikolaus.voss@loewensteinmedical.de \ --cc=pavel@ucw.cz \ --cc=rjw@rjwysocki.net \ --cc=robert.moore@intel.com \ --cc=thierry.reding@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
Linux-ACPI Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-acpi/0 linux-acpi/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-acpi linux-acpi/ https://lore.kernel.org/linux-acpi \ linux-acpi@vger.kernel.org public-inbox-index linux-acpi Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-acpi AGPL code for this site: git clone https://public-inbox.org/public-inbox.git