From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Thompson Date: Wed, 02 Oct 2019 14:40:28 +0000 Subject: Re: [PATCH v4 7/7] backlight: gpio: pull gpio_backlight_initial_power_state() into probe Message-Id: <20191002144028.6lljre76zxd52oui@holly.lan> List-Id: References: <20191001125837.4472-1-brgl@bgdev.pl> <20191001125837.4472-8-brgl@bgdev.pl> <20191002103318.6owxberhml6mbtxm@holly.lan> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: Bartosz Golaszewski Cc: Jacopo Mondi , Rich Felker , Yoshinori Sato , Bartlomiej Zolnierkiewicz , Jingoo Han , linux-sh@vger.kernel.org, Linux Kernel Mailing List , dri-devel@lists.freedesktop.org, Bartosz Golaszewski , linux-fbdev@vger.kernel.org, Andy Shevchenko , Lee Jones On Wed, Oct 02, 2019 at 01:46:17PM +0200, Bartosz Golaszewski wrote: > śr., 2 paź 2019 o 12:33 Daniel Thompson napisał(a): > > > > On Tue, Oct 01, 2019 at 02:58:37PM +0200, Bartosz Golaszewski wrote: > > > From: Bartosz Golaszewski > > > > > > The probe function in the gpio-backlight driver is quite short. If we > > > pull gpio_backlight_initial_power_state() into probe we can drop two > > > more fields from struct gpio_backlight and shrink the driver code. > > > > > > Signed-off-by: Bartosz Golaszewski > > > --- > > > drivers/video/backlight/gpio_backlight.c | 36 ++++++++---------------- > > > 1 file changed, 12 insertions(+), 24 deletions(-) > > > > > > diff --git a/drivers/video/backlight/gpio_backlight.c b/drivers/video/backlight/gpio_backlight.c > > > index 6247687b6330..37ec184f0c5c 100644 > > > --- a/drivers/video/backlight/gpio_backlight.c > > > +++ b/drivers/video/backlight/gpio_backlight.c > > > @@ -17,11 +17,8 @@ > > > #include > > > > > > struct gpio_backlight { > > > - struct device *dev; > > > struct device *fbdev; > > > - > > > struct gpio_desc *gpiod; > > > - int def_value; > > > }; > > > > > > static int gpio_backlight_update_status(struct backlight_device *bl) > > > @@ -53,41 +50,24 @@ static const struct backlight_ops gpio_backlight_ops = { > > > .check_fb = gpio_backlight_check_fb, > > > }; > > > > > > -static int gpio_backlight_initial_power_state(struct gpio_backlight *gbl) > > > > I'm inclined to view deleting this function as removing a comment (e.g. > > the function name helps us to read the code)! > > > > Right, but why not just add a comment then? I guess you could add a comment but keeping it pulled out in a function makes it easier to compare against equivalent code in other drivers (such as pwm_bl). Daniel. > The probe function is 50 > lines long, there's really no need to split it. This will get inlined > anyway too. > > Bart > > > Removing the variables from the context structure is good but why not > > just pass them to the function and let the compiler decided whether or > > not to inline. > > > > > > Daniel. > > > > > > > -{ > > > - struct device_node *node = gbl->dev->of_node; > > > - > > > - /* Not booted with device tree or no phandle link to the node */ > > > - if (!node || !node->phandle) > > > - return gbl->def_value ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN; > > > - > > > - /* if the enable GPIO is disabled, do not enable the backlight */ > > > - if (gpiod_get_value_cansleep(gbl->gpiod) = 0) > > > - return FB_BLANK_POWERDOWN; > > > - > > > - return FB_BLANK_UNBLANK; > > > -} > > > - > > > - > > > static int gpio_backlight_probe(struct platform_device *pdev) > > > { > > > struct device *dev = &pdev->dev; > > > struct gpio_backlight_platform_data *pdata = dev_get_platdata(dev); > > > + struct device_node *of_node = dev->of_node; > > > struct backlight_properties props; > > > struct backlight_device *bl; > > > struct gpio_backlight *gbl; > > > - int ret; > > > + int ret, def_value; > > > > > > gbl = devm_kzalloc(dev, sizeof(*gbl), GFP_KERNEL); > > > if (gbl = NULL) > > > return -ENOMEM; > > > > > > - gbl->dev = dev; > > > - > > > if (pdata) > > > gbl->fbdev = pdata->fbdev; > > > > > > - gbl->def_value = device_property_read_bool(dev, "default-on"); > > > + def_value = device_property_read_bool(dev, "default-on"); > > > > > > gbl->gpiod = devm_gpiod_get(dev, NULL, GPIOD_ASIS); > > > if (IS_ERR(gbl->gpiod)) { > > > @@ -109,7 +89,15 @@ static int gpio_backlight_probe(struct platform_device *pdev) > > > return PTR_ERR(bl); > > > } > > > > > > - bl->props.power = gpio_backlight_initial_power_state(gbl); > > > + /* Not booted with device tree or no phandle link to the node */ > > > + if (!of_node || !of_node->phandle) > > > + bl->props.power = def_value ? FB_BLANK_UNBLANK > > > + : FB_BLANK_POWERDOWN; > > > + else if (gpiod_get_value_cansleep(gbl->gpiod) = 0) > > > + bl->props.power = FB_BLANK_POWERDOWN; > > > + else > > > + bl->props.power = FB_BLANK_UNBLANK; > > > + > > > bl->props.brightness = 1; > > > > > > backlight_update_status(bl); > > > -- > > > 2.23.0 > > > 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.4 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,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 0013BC35280 for ; Wed, 2 Oct 2019 14:40:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BBA1221920 for ; Wed, 2 Oct 2019 14:40:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="fOezBZRI" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728255AbfJBOkg (ORCPT ); Wed, 2 Oct 2019 10:40:36 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:34598 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728129AbfJBOkf (ORCPT ); Wed, 2 Oct 2019 10:40:35 -0400 Received: by mail-wr1-f66.google.com with SMTP id a11so20003785wrx.1 for ; Wed, 02 Oct 2019 07:40:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=xuPflzsn/0nMabRW/MT553ev9ccDXsf7U9hGD8MKLiQ=; b=fOezBZRIOhBkH0+vOGOc3bn1f17r8HHWo8A5N5YSHRzL4/NECJx88ValUy/FtgO38s wrpkjJPcQaNWYASNYWewe6y7sx5LBiDuBUM7dG+3P/DOmLVVVtfPpbzSc3lGVvsuitsH pt+zI5lzIvDBkRvauPQlVLyDxzXBETF5eU5vGfr6XVPiKCgbd1QHVop9rag2R7cTAXPr XO0RBqOh9es8AVuKG1hWJL4vtGMVZSb1P/uRxHo6L0B7y04cf8gvl+cpjIdE8uOkNlzo i8xMJi8/uES3znh5rQyWSpRNdcbndC0ts2GFvEQPTsvIksQQW3WsfUSbFFT20Srw8Q5R Kxcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=xuPflzsn/0nMabRW/MT553ev9ccDXsf7U9hGD8MKLiQ=; b=mkBnKg2OaIgyjEBU2arK+Q7WuQZcokRzjBX+oap1Xw1Df+vhlW1ioowRmBw0IRmpLG wQN4f9NTNOWn0I15LwCuuFTD6E3uHVYztwVxYMCMrlArDJcHKLXrsJUN88NfCLwMWjB/ dviEgX71SQL8qaGOs4WMDB4nejePn//8LbmnrP3PdbAQpHiZJ7aUMsU8zyq6Hn/yIT1T RyGzABs8UByt03sfp9iAs00XgrJQ1VV021GPTA8z6gD43uJMp72XOhexVwPxNVvxW5vn RpI1YvyzRtwuh6xDGmtb42C1SAFYC5Bz8/ebddJDKVTp5GajnozmU9YPjHyUI8/gJ8Fb JxYA== X-Gm-Message-State: APjAAAV2K7cRe/ypMoEUPa6QmnW7t+ZFHbhhe0SCQCURwDaDXRyydBS1 XJhNDAS6Iu+vxAa2ZMGJImZNAg== X-Google-Smtp-Source: APXvYqxQzBe+7CgqDzvsjEknR8XWWPUStRqOZFa+eeAeIp6SkL1kb0FfgkR6tRNbregbg88YHzUFfg== X-Received: by 2002:adf:e64e:: with SMTP id b14mr3258477wrn.16.1570027231302; Wed, 02 Oct 2019 07:40:31 -0700 (PDT) Received: from holly.lan (cpc141214-aztw34-2-0-cust773.18-1.cable.virginm.net. [86.9.19.6]) by smtp.gmail.com with ESMTPSA id u10sm5853717wmm.0.2019.10.02.07.40.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Oct 2019 07:40:30 -0700 (PDT) Date: Wed, 2 Oct 2019 15:40:28 +0100 From: Daniel Thompson To: Bartosz Golaszewski Cc: Yoshinori Sato , Rich Felker , Lee Jones , Jingoo Han , Bartlomiej Zolnierkiewicz , Linus Walleij , Andy Shevchenko , Jacopo Mondi , linux-sh@vger.kernel.org, Linux Kernel Mailing List , dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, Bartosz Golaszewski Subject: Re: [PATCH v4 7/7] backlight: gpio: pull gpio_backlight_initial_power_state() into probe Message-ID: <20191002144028.6lljre76zxd52oui@holly.lan> References: <20191001125837.4472-1-brgl@bgdev.pl> <20191001125837.4472-8-brgl@bgdev.pl> <20191002103318.6owxberhml6mbtxm@holly.lan> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: NeoMutt/20180716 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Oct 02, 2019 at 01:46:17PM +0200, Bartosz Golaszewski wrote: > śr., 2 paź 2019 o 12:33 Daniel Thompson napisał(a): > > > > On Tue, Oct 01, 2019 at 02:58:37PM +0200, Bartosz Golaszewski wrote: > > > From: Bartosz Golaszewski > > > > > > The probe function in the gpio-backlight driver is quite short. If we > > > pull gpio_backlight_initial_power_state() into probe we can drop two > > > more fields from struct gpio_backlight and shrink the driver code. > > > > > > Signed-off-by: Bartosz Golaszewski > > > --- > > > drivers/video/backlight/gpio_backlight.c | 36 ++++++++---------------- > > > 1 file changed, 12 insertions(+), 24 deletions(-) > > > > > > diff --git a/drivers/video/backlight/gpio_backlight.c b/drivers/video/backlight/gpio_backlight.c > > > index 6247687b6330..37ec184f0c5c 100644 > > > --- a/drivers/video/backlight/gpio_backlight.c > > > +++ b/drivers/video/backlight/gpio_backlight.c > > > @@ -17,11 +17,8 @@ > > > #include > > > > > > struct gpio_backlight { > > > - struct device *dev; > > > struct device *fbdev; > > > - > > > struct gpio_desc *gpiod; > > > - int def_value; > > > }; > > > > > > static int gpio_backlight_update_status(struct backlight_device *bl) > > > @@ -53,41 +50,24 @@ static const struct backlight_ops gpio_backlight_ops = { > > > .check_fb = gpio_backlight_check_fb, > > > }; > > > > > > -static int gpio_backlight_initial_power_state(struct gpio_backlight *gbl) > > > > I'm inclined to view deleting this function as removing a comment (e.g. > > the function name helps us to read the code)! > > > > Right, but why not just add a comment then? I guess you could add a comment but keeping it pulled out in a function makes it easier to compare against equivalent code in other drivers (such as pwm_bl). Daniel. > The probe function is 50 > lines long, there's really no need to split it. This will get inlined > anyway too. > > Bart > > > Removing the variables from the context structure is good but why not > > just pass them to the function and let the compiler decided whether or > > not to inline. > > > > > > Daniel. > > > > > > > -{ > > > - struct device_node *node = gbl->dev->of_node; > > > - > > > - /* Not booted with device tree or no phandle link to the node */ > > > - if (!node || !node->phandle) > > > - return gbl->def_value ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN; > > > - > > > - /* if the enable GPIO is disabled, do not enable the backlight */ > > > - if (gpiod_get_value_cansleep(gbl->gpiod) == 0) > > > - return FB_BLANK_POWERDOWN; > > > - > > > - return FB_BLANK_UNBLANK; > > > -} > > > - > > > - > > > static int gpio_backlight_probe(struct platform_device *pdev) > > > { > > > struct device *dev = &pdev->dev; > > > struct gpio_backlight_platform_data *pdata = dev_get_platdata(dev); > > > + struct device_node *of_node = dev->of_node; > > > struct backlight_properties props; > > > struct backlight_device *bl; > > > struct gpio_backlight *gbl; > > > - int ret; > > > + int ret, def_value; > > > > > > gbl = devm_kzalloc(dev, sizeof(*gbl), GFP_KERNEL); > > > if (gbl == NULL) > > > return -ENOMEM; > > > > > > - gbl->dev = dev; > > > - > > > if (pdata) > > > gbl->fbdev = pdata->fbdev; > > > > > > - gbl->def_value = device_property_read_bool(dev, "default-on"); > > > + def_value = device_property_read_bool(dev, "default-on"); > > > > > > gbl->gpiod = devm_gpiod_get(dev, NULL, GPIOD_ASIS); > > > if (IS_ERR(gbl->gpiod)) { > > > @@ -109,7 +89,15 @@ static int gpio_backlight_probe(struct platform_device *pdev) > > > return PTR_ERR(bl); > > > } > > > > > > - bl->props.power = gpio_backlight_initial_power_state(gbl); > > > + /* Not booted with device tree or no phandle link to the node */ > > > + if (!of_node || !of_node->phandle) > > > + bl->props.power = def_value ? FB_BLANK_UNBLANK > > > + : FB_BLANK_POWERDOWN; > > > + else if (gpiod_get_value_cansleep(gbl->gpiod) == 0) > > > + bl->props.power = FB_BLANK_POWERDOWN; > > > + else > > > + bl->props.power = FB_BLANK_UNBLANK; > > > + > > > bl->props.brightness = 1; > > > > > > backlight_update_status(bl); > > > -- > > > 2.23.0 > > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Thompson Subject: Re: [PATCH v4 7/7] backlight: gpio: pull gpio_backlight_initial_power_state() into probe Date: Wed, 2 Oct 2019 15:40:28 +0100 Message-ID: <20191002144028.6lljre76zxd52oui@holly.lan> References: <20191001125837.4472-1-brgl@bgdev.pl> <20191001125837.4472-8-brgl@bgdev.pl> <20191002103318.6owxberhml6mbtxm@holly.lan> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by gabe.freedesktop.org (Postfix) with ESMTPS id DA5006E04E for ; Wed, 2 Oct 2019 14:40:32 +0000 (UTC) Received: by mail-wr1-x443.google.com with SMTP id b9so19991136wrs.0 for ; Wed, 02 Oct 2019 07:40:32 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Bartosz Golaszewski Cc: Jacopo Mondi , Rich Felker , Yoshinori Sato , Bartlomiej Zolnierkiewicz , Jingoo Han , linux-sh@vger.kernel.org, Linux Kernel Mailing List , dri-devel@lists.freedesktop.org, Bartosz Golaszewski , linux-fbdev@vger.kernel.org, Andy Shevchenko , Lee Jones List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBPY3QgMDIsIDIwMTkgYXQgMDE6NDY6MTdQTSArMDIwMCwgQmFydG9zeiBHb2xhc3pl d3NraSB3cm90ZToKPiDFm3IuLCAyIHBhxbogMjAxOSBvIDEyOjMzIERhbmllbCBUaG9tcHNvbiA8 ZGFuaWVsLnRob21wc29uQGxpbmFyby5vcmc+IG5hcGlzYcWCKGEpOgo+ID4KPiA+IE9uIFR1ZSwg T2N0IDAxLCAyMDE5IGF0IDAyOjU4OjM3UE0gKzAyMDAsIEJhcnRvc3ogR29sYXN6ZXdza2kgd3Jv dGU6Cj4gPiA+IEZyb206IEJhcnRvc3ogR29sYXN6ZXdza2kgPGJnb2xhc3pld3NraUBiYXlsaWJy ZS5jb20+Cj4gPiA+Cj4gPiA+IFRoZSBwcm9iZSBmdW5jdGlvbiBpbiB0aGUgZ3Bpby1iYWNrbGln aHQgZHJpdmVyIGlzIHF1aXRlIHNob3J0LiBJZiB3ZQo+ID4gPiBwdWxsIGdwaW9fYmFja2xpZ2h0 X2luaXRpYWxfcG93ZXJfc3RhdGUoKSBpbnRvIHByb2JlIHdlIGNhbiBkcm9wIHR3bwo+ID4gPiBt b3JlIGZpZWxkcyBmcm9tIHN0cnVjdCBncGlvX2JhY2tsaWdodCBhbmQgc2hyaW5rIHRoZSBkcml2 ZXIgY29kZS4KPiA+ID4KPiA+ID4gU2lnbmVkLW9mZi1ieTogQmFydG9zeiBHb2xhc3pld3NraSA8 YmdvbGFzemV3c2tpQGJheWxpYnJlLmNvbT4KPiA+ID4gLS0tCj4gPiA+ICBkcml2ZXJzL3ZpZGVv L2JhY2tsaWdodC9ncGlvX2JhY2tsaWdodC5jIHwgMzYgKysrKysrKystLS0tLS0tLS0tLS0tLS0t Cj4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0p Cj4gPiA+Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ncGlvX2Jh Y2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZ3Bpb19iYWNrbGlnaHQuYwo+ID4g PiBpbmRleCA2MjQ3Njg3YjYzMzAuLjM3ZWMxODRmMGM1YyAxMDA2NDQKPiA+ID4gLS0tIGEvZHJp dmVycy92aWRlby9iYWNrbGlnaHQvZ3Bpb19iYWNrbGlnaHQuYwo+ID4gPiArKysgYi9kcml2ZXJz L3ZpZGVvL2JhY2tsaWdodC9ncGlvX2JhY2tsaWdodC5jCj4gPiA+IEBAIC0xNywxMSArMTcsOCBA QAo+ID4gPiAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ID4KPiA+ID4gIHN0cnVjdCBncGlv X2JhY2tsaWdodCB7Cj4gPiA+IC0gICAgIHN0cnVjdCBkZXZpY2UgKmRldjsKPiA+ID4gICAgICAg c3RydWN0IGRldmljZSAqZmJkZXY7Cj4gPiA+IC0KPiA+ID4gICAgICAgc3RydWN0IGdwaW9fZGVz YyAqZ3Bpb2Q7Cj4gPiA+IC0gICAgIGludCBkZWZfdmFsdWU7Cj4gPiA+ICB9Owo+ID4gPgo+ID4g PiAgc3RhdGljIGludCBncGlvX2JhY2tsaWdodF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGln aHRfZGV2aWNlICpibCkKPiA+ID4gQEAgLTUzLDQxICs1MCwyNCBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IGJhY2tsaWdodF9vcHMgZ3Bpb19iYWNrbGlnaHRfb3BzID0gewo+ID4gPiAgICAgICAuY2hl Y2tfZmIgICAgICAgPSBncGlvX2JhY2tsaWdodF9jaGVja19mYiwKPiA+ID4gIH07Cj4gPiA+Cj4g PiA+IC1zdGF0aWMgaW50IGdwaW9fYmFja2xpZ2h0X2luaXRpYWxfcG93ZXJfc3RhdGUoc3RydWN0 IGdwaW9fYmFja2xpZ2h0ICpnYmwpCj4gPgo+ID4gSSdtIGluY2xpbmVkIHRvIHZpZXcgZGVsZXRp bmcgdGhpcyBmdW5jdGlvbiBhcyByZW1vdmluZyBhIGNvbW1lbnQgKGUuZy4KPiA+IHRoZSBmdW5j dGlvbiBuYW1lIGhlbHBzIHVzIHRvIHJlYWQgdGhlIGNvZGUpIQo+ID4KPiAKPiBSaWdodCwgYnV0 IHdoeSBub3QganVzdCBhZGQgYSBjb21tZW50IHRoZW4/CgpJIGd1ZXNzIHlvdSBjb3VsZCBhZGQg YSBjb21tZW50IGJ1dCBrZWVwaW5nIGl0IHB1bGxlZCBvdXQgaW4gYSBmdW5jdGlvbgptYWtlcyBp dCBlYXNpZXIgdG8gY29tcGFyZSBhZ2FpbnN0IGVxdWl2YWxlbnQgY29kZSBpbiBvdGhlciBkcml2 ZXJzCihzdWNoIGFzIHB3bV9ibCkuCgoKRGFuaWVsLgoKCj4gVGhlIHByb2JlIGZ1bmN0aW9uIGlz IDUwCj4gbGluZXMgbG9uZywgdGhlcmUncyByZWFsbHkgbm8gbmVlZCB0byBzcGxpdCBpdC4gVGhp cyB3aWxsIGdldCBpbmxpbmVkCj4gYW55d2F5IHRvby4KPiAKPiBCYXJ0Cj4gCj4gPiBSZW1vdmlu ZyB0aGUgdmFyaWFibGVzIGZyb20gdGhlIGNvbnRleHQgc3RydWN0dXJlIGlzIGdvb2QgYnV0IHdo eSBub3QKPiA+IGp1c3QgcGFzcyB0aGVtIHRvIHRoZSBmdW5jdGlvbiBhbmQgbGV0IHRoZSBjb21w aWxlciBkZWNpZGVkIHdoZXRoZXIgb3IKPiA+IG5vdCB0byBpbmxpbmUuCj4gPgo+ID4KPiA+IERh bmllbC4KPiA+Cj4gPgo+ID4gPiAtewo+ID4gPiAtICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v ZGUgPSBnYmwtPmRldi0+b2Zfbm9kZTsKPiA+ID4gLQo+ID4gPiAtICAgICAvKiBOb3QgYm9vdGVk IHdpdGggZGV2aWNlIHRyZWUgb3Igbm8gcGhhbmRsZSBsaW5rIHRvIHRoZSBub2RlICovCj4gPiA+ IC0gICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cGhhbmRsZSkKPiA+ID4gLSAgICAgICAgICAgICBy ZXR1cm4gZ2JsLT5kZWZfdmFsdWUgPyBGQl9CTEFOS19VTkJMQU5LIDogRkJfQkxBTktfUE9XRVJE T1dOOwo+ID4gPiAtCj4gPiA+IC0gICAgIC8qIGlmIHRoZSBlbmFibGUgR1BJTyBpcyBkaXNhYmxl ZCwgZG8gbm90IGVuYWJsZSB0aGUgYmFja2xpZ2h0ICovCj4gPiA+IC0gICAgIGlmIChncGlvZF9n ZXRfdmFsdWVfY2Fuc2xlZXAoZ2JsLT5ncGlvZCkgPT0gMCkKPiA+ID4gLSAgICAgICAgICAgICBy ZXR1cm4gRkJfQkxBTktfUE9XRVJET1dOOwo+ID4gPiAtCj4gPiA+IC0gICAgIHJldHVybiBGQl9C TEFOS19VTkJMQU5LOwo+ID4gPiAtfQo+ID4gPiAtCj4gPiA+IC0KPiA+ID4gIHN0YXRpYyBpbnQg Z3Bpb19iYWNrbGlnaHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ID4g IHsKPiA+ID4gICAgICAgc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiA+ID4gICAg ICAgc3RydWN0IGdwaW9fYmFja2xpZ2h0X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9w bGF0ZGF0YShkZXYpOwo+ID4gPiArICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUgPSBk ZXYtPm9mX25vZGU7Cj4gPiA+ICAgICAgIHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9w czsKPiA+ID4gICAgICAgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsOwo+ID4gPiAgICAgICBz dHJ1Y3QgZ3Bpb19iYWNrbGlnaHQgKmdibDsKPiA+ID4gLSAgICAgaW50IHJldDsKPiA+ID4gKyAg ICAgaW50IHJldCwgZGVmX3ZhbHVlOwo+ID4gPgo+ID4gPiAgICAgICBnYmwgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKmdibCksIEdGUF9LRVJORUwpOwo+ID4gPiAgICAgICBpZiAoZ2JsID09 IE5VTEwpCj4gPiA+ICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiA+Cj4gPiA+IC0g ICAgIGdibC0+ZGV2ID0gZGV2Owo+ID4gPiAtCj4gPiA+ICAgICAgIGlmIChwZGF0YSkKPiA+ID4g ICAgICAgICAgICAgICBnYmwtPmZiZGV2ID0gcGRhdGEtPmZiZGV2Owo+ID4gPgo+ID4gPiAtICAg ICBnYmwtPmRlZl92YWx1ZSA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCAiZGVmYXVs dC1vbiIpOwo+ID4gPiArICAgICBkZWZfdmFsdWUgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29s KGRldiwgImRlZmF1bHQtb24iKTsKPiA+ID4KPiA+ID4gICAgICAgZ2JsLT5ncGlvZCA9IGRldm1f Z3Bpb2RfZ2V0KGRldiwgTlVMTCwgR1BJT0RfQVNJUyk7Cj4gPiA+ICAgICAgIGlmIChJU19FUlIo Z2JsLT5ncGlvZCkpIHsKPiA+ID4gQEAgLTEwOSw3ICs4OSwxNSBAQCBzdGF0aWMgaW50IGdwaW9f YmFja2xpZ2h0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiA+ICAgICAg ICAgICAgICAgcmV0dXJuIFBUUl9FUlIoYmwpOwo+ID4gPiAgICAgICB9Cj4gPiA+Cj4gPiA+IC0g ICAgIGJsLT5wcm9wcy5wb3dlciA9IGdwaW9fYmFja2xpZ2h0X2luaXRpYWxfcG93ZXJfc3RhdGUo Z2JsKTsKPiA+ID4gKyAgICAgLyogTm90IGJvb3RlZCB3aXRoIGRldmljZSB0cmVlIG9yIG5vIHBo YW5kbGUgbGluayB0byB0aGUgbm9kZSAqLwo+ID4gPiArICAgICBpZiAoIW9mX25vZGUgfHwgIW9m X25vZGUtPnBoYW5kbGUpCj4gPiA+ICsgICAgICAgICAgICAgYmwtPnByb3BzLnBvd2VyID0gZGVm X3ZhbHVlID8gRkJfQkxBTktfVU5CTEFOSwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6IEZCX0JMQU5LX1BPV0VSRE9XTjsKPiA+ID4gKyAgICAgZWxzZSBp ZiAoZ3Bpb2RfZ2V0X3ZhbHVlX2NhbnNsZWVwKGdibC0+Z3Bpb2QpID09IDApCj4gPiA+ICsgICAg ICAgICAgICAgYmwtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfUE9XRVJET1dOOwo+ID4gPiArICAg ICBlbHNlCj4gPiA+ICsgICAgICAgICAgICAgYmwtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5C TEFOSzsKPiA+ID4gKwo+ID4gPiAgICAgICBibC0+cHJvcHMuYnJpZ2h0bmVzcyA9IDE7Cj4gPiA+ Cj4gPiA+ICAgICAgIGJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJsKTsKPiA+ID4gLS0KPiA+ID4g Mi4yMy4wCj4gPiA+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bA==