From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8127DC3A59E for ; Wed, 21 Aug 2019 17:51:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3360022D6D for ; Wed, 21 Aug 2019 17:51:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YgMR3dED" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726752AbfHURvw (ORCPT ); Wed, 21 Aug 2019 13:51:52 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:36214 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726252AbfHURvw (ORCPT ); Wed, 21 Aug 2019 13:51:52 -0400 Received: by mail-wr1-f66.google.com with SMTP id r3so2879645wrt.3 for ; Wed, 21 Aug 2019 10:51:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:openpgp:autocrypt:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=qtmwjYyEpOnl0DbzPhBD0M3Es8mML1i5/xI6JxT0hGo=; b=YgMR3dEDnWQZA0lg0s33MEJGnhMVwWraiUBIEGyFiyMSiiT2G/uEUNCEXsCKQCyYnj zBjNX25WB1evaE0ja1P1rtlaFisSBlpEFcwDg1hHn6iLjW6IvOondDD4AxcaNvA34PfW KczVk+DTCCLuf6/lK/5qY8gbTCDES8fZMi74nnpVdhLruEZqVJ1MoPq+98Gv+qM5+V2/ 0GPIpsE0E3KWvqnhyvrvo8lBpNR6PmdHwUTzFVdmPMA0CKscMt8GytyVUvX2V1mDOXB+ v4/02p6xmF791esgV0JuKGO1NdEXvyuqftGQVE/3xW2ELjXEhsE2d3+yt187OKMeVotd JPXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:openpgp:autocrypt :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=qtmwjYyEpOnl0DbzPhBD0M3Es8mML1i5/xI6JxT0hGo=; b=JJC7sKMkwN5YLnCaEvHAC8h2jHJ9uvhj2TgumS/XlAfNXcgOMEMGcBCGj/UwU6ZDOz 5EtbheHVHHUWeKZjDq01oUW/mUJFv+5N8EJAGzhrZgYfxYvaoxeJIcDf+jUkSMMy9evg RO2qjIloJQRkVrWBxtCMaAHl7o5V24ADgn48zxntSZg2X+aINLUczRKpc0QZmM8VoJ5y 1P9CKgM/lvSOoaaHrXrRC5URGuoClhRnVnO+wa/pntg/+PCURx8oovAZ8H53ON+wVkej dx4NkfhTC7dMUi/I8/ggt8rtB9Apva6umyj02ZsqtwRnNJ+WSVLqO/Z1DUXZqHBr76Y5 sGuw== X-Gm-Message-State: APjAAAXQm6PXw4N+1TkpzVtvQxhpGpO2olQC+N6fb9DjaEsT8TP+iJ9q 6qmZlNjx6dtioPrWU8YmzNuoIxZh X-Google-Smtp-Source: APXvYqzYZk7TrBbdObs1nNkEN9+d4zX5x8E1mumfw17+u0qOJ1DRrlo4nWkAECN/1AdaHwQnolTVkQ== X-Received: by 2002:adf:f14f:: with SMTP id y15mr42285828wro.28.1566409908212; Wed, 21 Aug 2019 10:51:48 -0700 (PDT) Received: from [192.168.1.19] (bfz71.neoplus.adsl.tpnet.pl. [83.28.63.71]) by smtp.gmail.com with ESMTPSA id 5sm486883wmg.42.2019.08.21.10.51.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Aug 2019 10:51:47 -0700 (PDT) Subject: Re: [PATCH v1 2/2] leds: Switch to use fwnode instead of be stuck with OF one To: Andy Shevchenko , Pavel Machek , Dan Murphy , linux-leds@vger.kernel.org References: <20190821163617.33881-1-andriy.shevchenko@linux.intel.com> <20190821163617.33881-2-andriy.shevchenko@linux.intel.com> From: Jacek Anaszewski Openpgp: preference=signencrypt Autocrypt: addr=jacek.anaszewski@gmail.com; prefer-encrypt=mutual; keydata= mQINBFWjfaEBEADd66EQbd6yd8YjG0kbEDT2QIkx8C7BqMXR8AdmA1OMApbfSvEZFT1D/ECR eWFBS8XtApKQx1xAs1j5z70k3zebk2eeNs5ahxi6vM4Qh89vBM46biSKeeX5fLcv7asmGb/a FnHPAfQaKFyG/Bj9V+//ef67hpjJWR3s74C6LZCFLcbZM0z/wTH+baA5Jwcnqr4h/ygosvhP X3gkRzJLSFYekmEv+WHieeKXLrJdsUPUvPJTZtvi3ELUxHNOZwX2oRJStWpmL2QGMwPokRNQ 29GvnueQdQrIl2ylhul6TSrClMrKZqOajDFng7TLgvNfyVZE8WQwmrkTrdzBLfu3kScjE14Q Volq8OtQpTsw5570D4plVKh2ahlhrwXdneSot0STk9Dh1grEB/Jfw8dknvqkdjALUrrM45eF FM4FSMxIlNV8WxueHDss9vXRbCUxzGw37Ck9JWYo0EpcpcvwPf33yntYCbnt+RQRjv7vy3w5 osVwRR4hpbL/fWt1AnZ+RvbP4kYSptOCPQ+Pp1tCw16BOaPjtlqSTcrlD2fo2IbaB5D21SUa IsdZ/XkD+V2S9jCrN1yyK2iKgxtDoUkWiqlfRgH2Ep1tZtb4NLF/S0oCr7rNLO7WbqLZQh1q ShfZR16h7YW//1/NFwnyCVaG1CP/L/io719dPWgEd/sVSKT2TwARAQABtC1KYWNlayBBbmFz emV3c2tpIDxqYWNlay5hbmFzemV3c2tpQGdtYWlsLmNvbT6JAlgEEwEIAEICGwMHCwkIBwMC AQYVCAIJCgsDFgIBAh4BAheABQkJZgNMFiEEvx38ClaPBfeVdXCQvWpQHLeLfCYFAl05/9sC GQEACgkQvWpQHLeLfCarMQ/9FN/WqJdN2tf6xkP0RFyS4ft0sT04zkOCFfOMxs8mZ+KZoMU+ X3a+fEppDL7xgRFpHyGaEel7lSi1eqtzsqZ5JiHbDS1Ht1G8TtATb8q8id68qeSeW2mfzaLQ 98NPELGfUXFoUqUQkG5z2p92UrGF4Muj1vOIW93pwvE4uDpNsl+jriwHomLtjIUoZtIRjGfZ RCyUQI0vi5LYzXCebuzAjGD7Jh2YAp7fDGrv3qTq8sX+DUJ4H/+I8PiL+jXKkEeppqIhlBJJ l4WcgggMu3c2uljYDuqRYghte33BXyCPAocfO2/sN+yJRUTVuRFlOxUk4srz/W8SQDwOAwtK V7TzdyF1/jOGBxWwS13EjMb4u3XwPMzcPlEQNdIqz76NFmJ99xYEvgkAmFmRioxuBTRv8Fs1 c1jQ00WWJ5vezqY6lccdDroPalXWeFzfPjIhKbV3LAYTlqv0It75GW9+0TBhPqdTM15DrCVX B7Ues7UnD5FBtWwewTnwr+cu8te449VDMzN2I+a9YKJ1s6uZmzh5HnuKn6tAfGyQh8MujSOM lZrNHrRsIsLXOjeGVa84Qk/watEcOoyQ7d+YaVosU0OCZl0GldvbGp1z2u8cd2N/HJ7dAgFh Q7dtGXmdXpt2WKQvTvQXhIrCWVQErNYbDZDD2V0TZtlPBaZP4fkUDkvH+Sy5Ag0EVaN9oQEQ AMPNymBNoCWc13U6qOztXrIKBVsLGZXq/yOaR2n7gFbFACD0TU7XuH2UcnwvNR+uQFwSrRqa EczX2V6iIy2CITXKg5Yvg12yn09gTmafuoIyKoU16XvC3aZQQ2Bn3LO2sRP0j/NuMD9GlO37 pHCVRpI2DPxFE39TMm1PLbHnDG8+lZql+dpNwWw8dDaRgyXx2Le542CcTBT52VCeeWDtqd2M wOr4LioYlfGfAqmwcwucBdTEBUxklQaOR3VbJQx6ntI2oDOBlNGvjnVDzZe+iREd5l40l+Oj TaiWvBGXkv6OI+wx5TFPp+BM6ATU+6UzFRTUWbj+LqVA/JMqYHQp04Y4H5GtjbHCa8abRvBw IKEvpwTyWZlfXPtp8gRlNmxYn6gQlTyEZAWodXwE7CE+KxNnq7bPHeLvrSn8bLNK682PoTGr 0Y00bguYLfyvEwuDYek1/h9YSXtHaCR3CEj4LU1B561G1j7FVaeYbX9bKBAoy/GxAW8J5O1n mmw7FnkSHuwO/QDe0COoO0QZ620Cf9IBWYHW4m2M2yh5981lUaiMcNM2kPgsJFYloFo2XGn6 lWU9BrWjEoNDhHZtF+yaPEuwjZo6x/3E2Tu3E5Jj0VpVcE9U1Zq/fquDY79l2RJn5ENogOs5 +Pi0GjVpEYQVWfm0PTCxNPOzOzGR4QB3BNFvABEBAAGJAiUEGAEIAA8FAlWjfaECGwwFCQlm AYAACgkQvWpQHLeLfCZqGxAAlWBWVvjU6xj70GwengiqYZwmW1i8gfS4TNibQT/KRq0zkBnE wgKwXRbVoW38pYVuGa5x/JDQMJDrLAJ0wrCOS3XxbSHCWOl/k2ZD9OaxUeXq6N+OmGTzfrYv PUvWS1Hy04q9AD1dIaMNruZQmvnRfkOk2UDncDIg0166/NTHiYI09H5mpWGpHn/2aT6dmpVw uoM9/rHlF5s5qAAo95tZ0QW2BtIceG9/rbYlL57waSMPF49awvwLQX5RhWoF8mPS5LsBrXXK hmizIsn40tLbi2RtWjzDWgZYitqmmqijeCnDvISN4qJ/nCLO4DjiSGs59w5HR+l0nwePDhOC A4RYZqS1e2Clx1VSkDXFpL3egabcIsqK7CZ6a21r8lXVpo4RnMlQsmXZTnRx4SajFvX7PrRg /02C811fLfh2r5O5if8sKQ6BKKlHpuuioqfj/w9z3B0aQ71e4n1zNJBO1kcdznikPLAbr7jG gkBUXT1yJiwpTfRQr5y2Uo12IJsKxohnNFVYtK8X/R6S0deKPjrZWvAkllgIPcHjMi2Va8yw KTj/JgcpUO5KN906Pf7ywZISe7Kbcc/qnE0YjPPSqFOvoeZvHe6EZCMW9+xZsaipvlqpByQV UHnVg09K9YFvjUBsBPdC8ef6YwgfR9o6AnPmxl0oMUIXkCCC5c99fzJY/k+JAq0EGAEIACAW IQS/HfwKVo8F95V1cJC9alAct4t8JgUCWwqKhgIbAgCBCRC9alAct4t8JnYgBBkWCAAdFiEE FMMcSshOZf56bfAEYhBsURv0pdsFAlsKioYACgkQYhBsURv0pdvELgD/U+y3/hsz0bIjMQJY 0LLxM/rFY9Vz1L43+lQHXjL3MPsA/1lNm5sailsY7aFBVJxAzTa8ZAGWBdVaGo6KCvimDB8G 7joP/jx+oGOmdRogs7mG//H+w9DTnBfPpnfkeiiokGYo/+huWO5V0Ac9tTqZeFc//t/YuYJn wWvS0Rx+KL0fT3eh9BQo47uF4yDiZIiWLNh4Agpup1MUSVsz4MjD0lW6ghtnLcGlIgoVHW0v tPW1m9jATYyJSOG/MC1iDrcYcp9uVYn5tKfkEeQNspuG6iSfS0q3tajPKnT1nJxMTxVOD2RW EIGfaV9Scrou92VD/eC+/8INRsiWS93j3hOKIAV5XRNINFqtzkagPYAP8r6wksjSjh01fSTB p5zxjfsIwWDDzDrqgzwv83CvrLXRV3OlG1DNUDYA52qJr47paH5QMWmHW5TNuoBX8qb6RW/H M3DzPgT+l+r1pPjMPfvL1t7civZUoPuNzoyFpQRj6TvWi2bGGMQKryeYksXG2zi2+avMFnLe lOxGdUZ7jn1SJ6Abba5WL3VrXCP+TUE6bZLgfw8kYa8QSXP3ysyeMI0topHFntBZ8a0KXBNs qqFCBWmTHXfwsfW0VgBmRtPO7eXVBybjJ1VXKR2RZxwSq/GoNXh/yrRXQxbcpZ+QP3/Tttsb FdKciZ4u3ts+5UwYra0BRuvb51RiZR2wRNnUeBnXWagJVTlG7RHBO/2jJOE6wrcdCMjs0Iiw PNWmiVoZA930TvHA5UeGENxdGqo2MvMdRJ54YaIR Message-ID: <48a4786c-5d4c-0751-1b66-9aac79de0c14@gmail.com> Date: Wed, 21 Aug 2019 19:51:45 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20190821163617.33881-2-andriy.shevchenko@linux.intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-leds-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-leds@vger.kernel.org Hi Andy, Thank you for the patch. We've had some changes in this area during current cycle, so most of your changes will be not needed. Please compare patch set [0] that is already in linux-next. Best regards, Jacek Anaszewski On 8/21/19 6:36 PM, Andy Shevchenko wrote: > There is no need to be stuck with OF node when we may use agnostic > firmware node instead. > > It allows users to get property if needed independently of provider. > > Signed-off-by: Andy Shevchenko > --- > drivers/leds/led-class.c | 26 ++++++++++++++------------ > drivers/leds/leds-cr0014114.c | 8 ++------ > drivers/leds/leds-gpio.c | 11 +++++------ > drivers/leds/leds-max77650.c | 2 +- > drivers/leds/leds-pwm.c | 3 +-- > include/linux/leds.h | 16 ++++++++-------- > 6 files changed, 31 insertions(+), 35 deletions(-) > > diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c > index 4793e77808e2..80974de814f3 100644 > --- a/drivers/leds/led-class.c > +++ b/drivers/leds/led-class.c > @@ -242,14 +242,15 @@ static int led_classdev_next_name(const char *init_name, char *name, > } > > /** > - * of_led_classdev_register - register a new object of led_classdev class. > + * fwnode_led_classdev_register - register a new object of led_classdev class. > * > * @parent: parent of LED device > + * @fwnode: firmware node describing this LED > * @led_cdev: the led_classdev structure for this device. > - * @np: DT node describing this LED > */ > -int of_led_classdev_register(struct device *parent, struct device_node *np, > - struct led_classdev *led_cdev) > +int fwnode_led_classdev_register(struct device *parent, > + struct fwnode_handle *fwnode, > + struct led_classdev *led_cdev) > { > char name[LED_MAX_NAME_SIZE]; > int ret; > @@ -266,7 +267,7 @@ int of_led_classdev_register(struct device *parent, struct device_node *np, > mutex_unlock(&led_cdev->led_access); > return PTR_ERR(led_cdev->dev); > } > - led_cdev->dev->of_node = np; > + led_cdev->dev->fwnode = fwnode; > > if (ret) > dev_warn(parent, "Led %s renamed to %s due to name collision", > @@ -311,7 +312,7 @@ int of_led_classdev_register(struct device *parent, struct device_node *np, > > return 0; > } > -EXPORT_SYMBOL_GPL(of_led_classdev_register); > +EXPORT_SYMBOL_GPL(fwnode_led_classdev_register); > > /** > * led_classdev_unregister - unregisters a object of led_properties class. > @@ -356,14 +357,15 @@ static void devm_led_classdev_release(struct device *dev, void *res) > } > > /** > - * devm_of_led_classdev_register - resource managed led_classdev_register() > + * devm_fwnode_led_classdev_register - resource managed led_classdev_register() > * > * @parent: parent of LED device > + * @fwnode: firmware node describing this LED > * @led_cdev: the led_classdev structure for this device. > */ > -int devm_of_led_classdev_register(struct device *parent, > - struct device_node *np, > - struct led_classdev *led_cdev) > +int devm_fwnode_led_classdev_register(struct device *parent, > + struct fwnode_handle *fwnode, > + struct led_classdev *led_cdev) > { > struct led_classdev **dr; > int rc; > @@ -372,7 +374,7 @@ int devm_of_led_classdev_register(struct device *parent, > if (!dr) > return -ENOMEM; > > - rc = of_led_classdev_register(parent, np, led_cdev); > + rc = fwnode_led_classdev_register(parent, fwnode, led_cdev); > if (rc) { > devres_free(dr); > return rc; > @@ -383,7 +385,7 @@ int devm_of_led_classdev_register(struct device *parent, > > return 0; > } > -EXPORT_SYMBOL_GPL(devm_of_led_classdev_register); > +EXPORT_SYMBOL_GPL(devm_fwnode_led_classdev_register); > > static int devm_led_classdev_match(struct device *dev, void *res, void *data) > { > diff --git a/drivers/leds/leds-cr0014114.c b/drivers/leds/leds-cr0014114.c > index 0e4262462cb9..cb91dab7a1e1 100644 > --- a/drivers/leds/leds-cr0014114.c > +++ b/drivers/leds/leds-cr0014114.c > @@ -183,12 +183,10 @@ static int cr0014114_probe_dt(struct cr0014114 *priv) > size_t i = 0; > struct cr0014114_led *led; > struct fwnode_handle *child; > - struct device_node *np; > int ret; > const char *str; > > device_for_each_child_node(priv->dev, child) { > - np = to_of_node(child); > led = &priv->leds[i]; > > ret = fwnode_property_read_string(child, "label", &str); > @@ -207,8 +205,8 @@ static int cr0014114_probe_dt(struct cr0014114 *priv) > led->ldev.max_brightness = CR_MAX_BRIGHTNESS; > led->ldev.brightness_set_blocking = cr0014114_set_sync; > > - ret = devm_of_led_classdev_register(priv->dev, np, > - &led->ldev); > + ret = devm_fwnode_led_classdev_register(priv->dev, child, > + &led->ldev); > if (ret) { > dev_err(priv->dev, > "failed to register LED device %s, err %d", > @@ -217,8 +215,6 @@ static int cr0014114_probe_dt(struct cr0014114 *priv) > return ret; > } > > - led->ldev.dev->of_node = np; > - > i++; > } > > diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c > index bdc98ddca1dc..9035e1c4c534 100644 > --- a/drivers/leds/leds-gpio.c > +++ b/drivers/leds/leds-gpio.c > @@ -73,7 +73,7 @@ static int gpio_blink_set(struct led_classdev *led_cdev, > > static int create_gpio_led(const struct gpio_led *template, > struct gpio_led_data *led_dat, struct device *parent, > - struct device_node *np, gpio_blink_set_t blink_set) > + struct fwnode_handle *child, gpio_blink_set_t blink_set) > { > int ret, state; > > @@ -108,7 +108,7 @@ static int create_gpio_led(const struct gpio_led *template, > if (ret < 0) > return ret; > > - return devm_of_led_classdev_register(parent, np, &led_dat->cdev); > + return devm_fwnode_led_classdev_register(parent, child, &led_dat->cdev); > } > > struct gpio_leds_priv { > @@ -141,11 +141,10 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev) > struct gpio_led_data *led_dat = &priv->leds[priv->num_leds]; > struct gpio_led led = {}; > const char *state = NULL; > - struct device_node *np = to_of_node(child); > > ret = fwnode_property_read_string(child, "label", &led.name); > - if (ret && IS_ENABLED(CONFIG_OF) && np) > - led.name = np->name; > + if (ret && is_of_node(child)) > + led.name = to_of_node(child)->name; > if (!led.name) { > fwnode_handle_put(child); > return ERR_PTR(-EINVAL); > @@ -181,7 +180,7 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev) > if (fwnode_property_present(child, "panic-indicator")) > led.panic_indicator = 1; > > - ret = create_gpio_led(&led, led_dat, dev, np, NULL); > + ret = create_gpio_led(&led, led_dat, dev, child, NULL); > if (ret < 0) { > fwnode_handle_put(child); > return ERR_PTR(ret); > diff --git a/drivers/leds/leds-max77650.c b/drivers/leds/leds-max77650.c > index ae752ec150d9..d6fdbb47fce0 100644 > --- a/drivers/leds/leds-max77650.c > +++ b/drivers/leds/leds-max77650.c > @@ -110,7 +110,7 @@ static int max77650_led_probe(struct platform_device *pdev) > fwnode_property_read_string(child, "linux,default-trigger", > &led->cdev.default_trigger); > > - rv = devm_of_led_classdev_register(dev, to_of_node(child), &led->cdev); > + rv = devm_fwnode_led_classdev_register(dev, child, &led->cdev); > if (rv) > return rv; > > diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c > index 48d068f80f11..a582c3e768e6 100644 > --- a/drivers/leds/leds-pwm.c > +++ b/drivers/leds/leds-pwm.c > @@ -111,8 +111,7 @@ 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, to_of_node(fwnode), > - &led_data->cdev); > + ret = devm_fwnode_led_classdev_register(dev, fwnode, &led_data->cdev); > if (ret == 0) { > priv->num_leds++; > led_pwm_set(&led_data->cdev, led_data->cdev.brightness); > diff --git a/include/linux/leds.h b/include/linux/leds.h > index 9b2bf574a17a..c94375ef8af6 100644 > --- a/include/linux/leds.h > +++ b/include/linux/leds.h > @@ -125,16 +125,16 @@ struct led_classdev { > struct mutex led_access; > }; > > -extern int of_led_classdev_register(struct device *parent, > - struct device_node *np, > - struct led_classdev *led_cdev); > +extern int fwnode_led_classdev_register(struct device *parent, > + struct fwnode_handle *fwnode, > + struct led_classdev *led_cdev); > #define led_classdev_register(parent, led_cdev) \ > - of_led_classdev_register(parent, NULL, led_cdev) > -extern int devm_of_led_classdev_register(struct device *parent, > - struct device_node *np, > - struct led_classdev *led_cdev); > + fwnode_led_classdev_register(parent, NULL, led_cdev) > +extern int devm_fwnode_led_classdev_register(struct device *parent, > + struct fwnode_handle *fwnode, > + struct led_classdev *led_cdev); > #define devm_led_classdev_register(parent, led_cdev) \ > - devm_of_led_classdev_register(parent, NULL, led_cdev) > + devm_fwnode_led_classdev_register(parent, NULL, led_cdev) > extern void led_classdev_unregister(struct led_classdev *led_cdev); > extern void devm_led_classdev_unregister(struct device *parent, > struct led_classdev *led_cdev); > [0] https://lore.kernel.org/linux-leds/20190609190803.14815-1-jacek.anaszewski@gmail.com/T/#md8895442b1b7bc9fe23ede32aaf8a4a3a2b494ff