From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3FC51D0DD9; Wed, 2 Oct 2024 15:35:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727883344; cv=none; b=RYnwtZjO0O+ZFZUIMbf1jmfQUc0dfaONa8+bKtCihN5Wxxcjc8fqJ6dQjcnNOZa4tcwOpRLHZCVdX00/eDwEopBxoR/kQv4RqUi0qSf9j0JQz8TAUhOvK/L4vJJa8qkxaVnrEfplMPFCqIQrlneHsYjsQBDmnYJ5YnNFh71cByo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727883344; c=relaxed/simple; bh=k1zW8KXz7EwiJvjqcAxwtSjygKZUVJO8HBFqTJuGMF0=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=rQ5iwQ/2ABMp30aiiUKMjLqvalzp4G8Jdu+R3KMqHwN0w+qPsrEDsoL/9TLj34Ri7yvKlnUvxezwlsRR6lhdyVula/HAoJgQ25kff4XkrLPXk1KZ5voP4/O8BQSQ2KIo0/h7AhuDRwJAFibA7JOrJLjebK3/il36ize+xN/IiBQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gvZ48ukx; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gvZ48ukx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EF281C4CECD; Wed, 2 Oct 2024 15:35:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727883343; bh=k1zW8KXz7EwiJvjqcAxwtSjygKZUVJO8HBFqTJuGMF0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=gvZ48ukxkvlA/tROM+XWQCC+GQjn1xdlFnYHeifEYVq3bNZE7U+/awWbv/IXObCLK Ysc1gbU85mEH1o377fQn2byyXFnnUwqVzaCVMUJDVsA8bKlOmU5vmNabqZmvyRGbGc X/7kX4t1SPLDknV2pBJAyf8aXxdc31pTUtOn2E1xJQ91H6DmdnOUL0nKg75YA48ga8 /xwVQ+krKvfrEpXXbqzBZXcjjpO8Rpksw4EdnWB1XquWOMs6zS79szHrzEoSX0ZE31 jvaKCO00kXJudpcVy4IoBnDzj6q4gdEc1EpMNZp4UTrHDbHjavRHXl1tGXmhrSbzdl mkgFXnebCgzIw== Date: Wed, 2 Oct 2024 16:35:36 +0100 From: Lee Jones To: Junhao Xie Cc: devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, linux-rtc@vger.kernel.org, linux-watchdog@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, Jean Delvare , Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Pavel Machek , Sebastian Reichel , Alexandre Belloni , Wim Van Sebroeck , Heiko Stuebner , Chukun Pan Subject: Re: [PATCH 7/9] leds: add Photonicat PMU LED driver Message-ID: <20241002153536.GG7504@google.com> References: <20240906093630.2428329-1-bigfoot@classfun.cn> <20240906093630.2428329-8-bigfoot@classfun.cn> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240906093630.2428329-8-bigfoot@classfun.cn> On Fri, 06 Sep 2024, Junhao Xie wrote: > Photonicat has a network status LED that can be controlled by system. > The LED status can be set through command 0x19. > > Signed-off-by: Junhao Xie > --- > drivers/leds/Kconfig | 11 +++++ > drivers/leds/Makefile | 1 + > drivers/leds/leds-photonicat.c | 75 ++++++++++++++++++++++++++++++++++ > 3 files changed, 87 insertions(+) > create mode 100644 drivers/leds/leds-photonicat.c > > diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig > index 8d9d8da376e4..539adb5944e6 100644 > --- a/drivers/leds/Kconfig > +++ b/drivers/leds/Kconfig > @@ -381,6 +381,17 @@ config LEDS_PCA9532_GPIO > To use a pin as gpio pca9532_type in pca9532_platform data needs to > set to PCA9532_TYPE_GPIO. > > +config LEDS_PHOTONICAT_PMU > + tristate "LED Support for Photonicat PMU" > + depends on LEDS_CLASS > + depends on MFD_PHOTONICAT_PMU > + help > + Photonicat has a network status LED that can be controlled by system, "the system" > + this option enables support for LEDs connected to the Photonicat PMU. > + > + To compile this driver as a module, choose M here: the > + module will be called leds-photonicat. > + > config LEDS_GPIO > tristate "LED Support for GPIO connected LEDs" > depends on LEDS_CLASS > diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile > index 18afbb5a23ee..dcd5312aee12 100644 > --- a/drivers/leds/Makefile > +++ b/drivers/leds/Makefile > @@ -76,6 +76,7 @@ obj-$(CONFIG_LEDS_PCA9532) += leds-pca9532.o > obj-$(CONFIG_LEDS_PCA955X) += leds-pca955x.o > obj-$(CONFIG_LEDS_PCA963X) += leds-pca963x.o > obj-$(CONFIG_LEDS_PCA995X) += leds-pca995x.o > +obj-$(CONFIG_LEDS_PHOTONICAT_PMU) += leds-photonicat.o > obj-$(CONFIG_LEDS_PM8058) += leds-pm8058.o > obj-$(CONFIG_LEDS_POWERNV) += leds-powernv.o > obj-$(CONFIG_LEDS_PWM) += leds-pwm.o > diff --git a/drivers/leds/leds-photonicat.c b/drivers/leds/leds-photonicat.c > new file mode 100644 > index 000000000000..3aa5ce525b83 > --- /dev/null > +++ b/drivers/leds/leds-photonicat.c > @@ -0,0 +1,75 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * Copyright (c) 2024 Junhao Xie > + */ > + > +#include > +#include > +#include > +#include > +#include Alphabetical. > +struct pcat_leds { > + struct device *dev; Where is this used? > + struct pcat_pmu *pmu; Why do you need to store this? Can't you get this at the call-site by: dev_get_drvdata(cdev->dev->parent) > + struct led_classdev cdev; > +}; > + > +static int pcat_led_status_set(struct led_classdev *cdev, > + enum led_brightness brightness) > +{ > + struct pcat_leds *leds = container_of(cdev, struct pcat_leds, cdev); > + struct pcat_data_cmd_led_setup setup = { 0, 0, 0 }; > + > + if (brightness) > + setup.on_time = 100; > + else > + setup.down_time = 100; > + return pcat_pmu_write_data(leds->pmu, PCAT_CMD_NET_STATUS_LED_SETUP, > + &setup, sizeof(setup)); > +} > + > +static int pcat_leds_probe(struct platform_device *pdev) > +{ > + int ret; Small sized variables at the bottom please. > + struct device *dev = &pdev->dev; > + struct pcat_leds *leds; > + const char *label; > + > + leds = devm_kzalloc(dev, sizeof(*leds), GFP_KERNEL); > + if (!leds) > + return -ENOMEM; > + > + leds->dev = dev; Where is this used? > + leds->pmu = dev_get_drvdata(dev->parent); > + platform_set_drvdata(pdev, leds); Where do you platform_get_drvdata() > + ret = of_property_read_string(dev->of_node, "label", &label); > + if (ret) > + return dev_err_probe(dev, ret, "No label property\n"); > + > + leds->cdev.name = label; > + leds->cdev.max_brightness = 1; > + leds->cdev.brightness_set_blocking = pcat_led_status_set; > + > + return devm_led_classdev_register(dev, &leds->cdev); > +} > + > +static const struct of_device_id pcat_leds_dt_ids[] = { > + { .compatible = "ariaboard,photonicat-pmu-leds", }, How many LEDs are there? > + { /* sentinel */ } > +}; > +MODULE_DEVICE_TABLE(of, pcat_leds_dt_ids); > + > +static struct platform_driver pcat_leds_driver = { > + .driver = { > + .name = "photonicat-leds", > + .of_match_table = pcat_leds_dt_ids, > + }, > + .probe = pcat_leds_probe, > +}; > +module_platform_driver(pcat_leds_driver); > + > +MODULE_AUTHOR("Junhao Xie "); > +MODULE_DESCRIPTION("Photonicat PMU Status LEDs"); > +MODULE_LICENSE("GPL"); > -- > 2.46.0 > -- 0) Lee Jones [李琼斯] 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DCC37CF6D39 for ; Wed, 2 Oct 2024 15:37:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AngX6xMCfWHYdaZsUZejiSg54dPRB02nkMvGRDwQsto=; b=SrHeVlOs5QL8X/ +6ILrACC4rv1ZTNYQ/cBS+kfwqduTuQBYUeU2FYmb0xqBot+uuvG2Tgzfg2iA13As1ON3n4F/5HKU BcnCH0dsO8kUzSyoYUFuT4VeTFTWNDg5JIcrhy9cVr89o1QkZ/NL6YC/Ah07P6C9OdgQYxcInv0VS yR+WBJ82BJvsQ3y6BaT9ODAZkV1oljjvyid4PTRj95IhG4CFJJpTi1eH97doTtFeEHs6yidkO35/v 7cn7D1ZTcFc+koe83Nt3iffmpZbM0gcmaroyc0PEqvaF9Bprgmc9G9RLw1Yepo1qAmEtfwlpkCBw9 SGg2n5XLyhwRe6OkK4uQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1sw1Pt-00000006hmE-26iw; Wed, 02 Oct 2024 15:37:29 +0000 Received: from nyc.source.kernel.org ([147.75.193.91]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1sw1OC-00000006hBe-1LKa; Wed, 02 Oct 2024 15:35:45 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 36474A43DF3; Wed, 2 Oct 2024 15:35:35 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EF281C4CECD; Wed, 2 Oct 2024 15:35:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727883343; bh=k1zW8KXz7EwiJvjqcAxwtSjygKZUVJO8HBFqTJuGMF0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=gvZ48ukxkvlA/tROM+XWQCC+GQjn1xdlFnYHeifEYVq3bNZE7U+/awWbv/IXObCLK Ysc1gbU85mEH1o377fQn2byyXFnnUwqVzaCVMUJDVsA8bKlOmU5vmNabqZmvyRGbGc X/7kX4t1SPLDknV2pBJAyf8aXxdc31pTUtOn2E1xJQ91H6DmdnOUL0nKg75YA48ga8 /xwVQ+krKvfrEpXXbqzBZXcjjpO8Rpksw4EdnWB1XquWOMs6zS79szHrzEoSX0ZE31 jvaKCO00kXJudpcVy4IoBnDzj6q4gdEc1EpMNZp4UTrHDbHjavRHXl1tGXmhrSbzdl mkgFXnebCgzIw== Date: Wed, 2 Oct 2024 16:35:36 +0100 From: Lee Jones To: Junhao Xie Cc: devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, linux-rtc@vger.kernel.org, linux-watchdog@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, Jean Delvare , Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Pavel Machek , Sebastian Reichel , Alexandre Belloni , Wim Van Sebroeck , Heiko Stuebner , Chukun Pan Subject: Re: [PATCH 7/9] leds: add Photonicat PMU LED driver Message-ID: <20241002153536.GG7504@google.com> References: <20240906093630.2428329-1-bigfoot@classfun.cn> <20240906093630.2428329-8-bigfoot@classfun.cn> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240906093630.2428329-8-bigfoot@classfun.cn> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241002_083544_542977_90DCD341 X-CRM114-Status: GOOD ( 30.19 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org T24gRnJpLCAwNiBTZXAgMjAyNCwgSnVuaGFvIFhpZSB3cm90ZToKCj4gUGhvdG9uaWNhdCBoYXMg YSBuZXR3b3JrIHN0YXR1cyBMRUQgdGhhdCBjYW4gYmUgY29udHJvbGxlZCBieSBzeXN0ZW0uCj4g VGhlIExFRCBzdGF0dXMgY2FuIGJlIHNldCB0aHJvdWdoIGNvbW1hbmQgMHgxOS4KPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBKdW5oYW8gWGllIDxiaWdmb290QGNsYXNzZnVuLmNuPgo+IC0tLQo+ICBkcml2 ZXJzL2xlZHMvS2NvbmZpZyAgICAgICAgICAgfCAxMSArKysrKwo+ICBkcml2ZXJzL2xlZHMvTWFr ZWZpbGUgICAgICAgICAgfCAgMSArCj4gIGRyaXZlcnMvbGVkcy9sZWRzLXBob3RvbmljYXQuYyB8 IDc1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2Vk LCA4NyBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2xlZHMvbGVk cy1waG90b25pY2F0LmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9k cml2ZXJzL2xlZHMvS2NvbmZpZwo+IGluZGV4IDhkOWQ4ZGEzNzZlNC4uNTM5YWRiNTk0NGU2IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9sZWRzL0tj b25maWcKPiBAQCAtMzgxLDYgKzM4MSwxNyBAQCBjb25maWcgTEVEU19QQ0E5NTMyX0dQSU8KPiAg CSAgVG8gdXNlIGEgcGluIGFzIGdwaW8gcGNhOTUzMl90eXBlIGluIHBjYTk1MzJfcGxhdGZvcm0g ZGF0YSBuZWVkcyB0bwo+ICAJICBzZXQgdG8gUENBOTUzMl9UWVBFX0dQSU8uCj4gIAo+ICtjb25m aWcgTEVEU19QSE9UT05JQ0FUX1BNVQo+ICsJdHJpc3RhdGUgIkxFRCBTdXBwb3J0IGZvciBQaG90 b25pY2F0IFBNVSIKPiArCWRlcGVuZHMgb24gTEVEU19DTEFTUwo+ICsJZGVwZW5kcyBvbiBNRkRf UEhPVE9OSUNBVF9QTVUKPiArCWhlbHAKPiArCSAgUGhvdG9uaWNhdCBoYXMgYSBuZXR3b3JrIHN0 YXR1cyBMRUQgdGhhdCBjYW4gYmUgY29udHJvbGxlZCBieSBzeXN0ZW0sCgoidGhlIHN5c3RlbSIK Cj4gKwkgIHRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgTEVEcyBjb25uZWN0ZWQgdG8g dGhlIFBob3RvbmljYXQgUE1VLgo+ICsKPiArCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBh IG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCj4gKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBs ZWRzLXBob3RvbmljYXQuCj4gKwo+ICBjb25maWcgTEVEU19HUElPCj4gIAl0cmlzdGF0ZSAiTEVE IFN1cHBvcnQgZm9yIEdQSU8gY29ubmVjdGVkIExFRHMiCj4gIAlkZXBlbmRzIG9uIExFRFNfQ0xB U1MKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL01ha2VmaWxlIGIvZHJpdmVycy9sZWRzL01h a2VmaWxlCj4gaW5kZXggMThhZmJiNWEyM2VlLi5kY2Q1MzEyYWVlMTIgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9sZWRzL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCj4gQEAg LTc2LDYgKzc2LDcgQEAgb2JqLSQoQ09ORklHX0xFRFNfUENBOTUzMikJCSs9IGxlZHMtcGNhOTUz Mi5vCj4gIG9iai0kKENPTkZJR19MRURTX1BDQTk1NVgpCQkrPSBsZWRzLXBjYTk1NXgubwo+ICBv YmotJChDT05GSUdfTEVEU19QQ0E5NjNYKQkJKz0gbGVkcy1wY2E5NjN4Lm8KPiAgb2JqLSQoQ09O RklHX0xFRFNfUENBOTk1WCkJCSs9IGxlZHMtcGNhOTk1eC5vCj4gK29iai0kKENPTkZJR19MRURT X1BIT1RPTklDQVRfUE1VKQkrPSBsZWRzLXBob3RvbmljYXQubwo+ICBvYmotJChDT05GSUdfTEVE U19QTTgwNTgpCQkrPSBsZWRzLXBtODA1OC5vCj4gIG9iai0kKENPTkZJR19MRURTX1BPV0VSTlYp CQkrPSBsZWRzLXBvd2VybnYubwo+ICBvYmotJChDT05GSUdfTEVEU19QV00pCQkJKz0gbGVkcy1w d20ubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1waG90b25pY2F0LmMgYi9kcml2 ZXJzL2xlZHMvbGVkcy1waG90b25pY2F0LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwMDAwMC4uM2FhNWNlNTI1YjgzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZl cnMvbGVkcy9sZWRzLXBob3RvbmljYXQuYwo+IEBAIC0wLDAgKzEsNzUgQEAKPiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMp IDIwMjQgSnVuaGFvIFhpZSA8YmlnZm9vdEBjbGFzc2Z1bi5jbj4KPiArICovCj4gKwo+ICsjaW5j bHVkZSA8bGludXgvbWZkL3Bob3RvbmljYXQtcG11Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KCkFscGhhYmV0aWNhbC4KCj4g K3N0cnVjdCBwY2F0X2xlZHMgewo+ICsJc3RydWN0IGRldmljZSAqZGV2OwoKV2hlcmUgaXMgdGhp cyB1c2VkPwoKPiArCXN0cnVjdCBwY2F0X3BtdSAqcG11OwoKV2h5IGRvIHlvdSBuZWVkIHRvIHN0 b3JlIHRoaXM/CgpDYW4ndCB5b3UgZ2V0IHRoaXMgYXQgdGhlIGNhbGwtc2l0ZSBieToKCiAgZGV2 X2dldF9kcnZkYXRhKGNkZXYtPmRldi0+cGFyZW50KQoKPiArCXN0cnVjdCBsZWRfY2xhc3NkZXYg Y2RldjsKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgcGNhdF9sZWRfc3RhdHVzX3NldChzdHJ1Y3Qg bGVkX2NsYXNzZGV2ICpjZGV2LAo+ICsJCQkgICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmln aHRuZXNzKQo+ICt7Cj4gKwlzdHJ1Y3QgcGNhdF9sZWRzICpsZWRzID0gY29udGFpbmVyX29mKGNk ZXYsIHN0cnVjdCBwY2F0X2xlZHMsIGNkZXYpOwo+ICsJc3RydWN0IHBjYXRfZGF0YV9jbWRfbGVk X3NldHVwIHNldHVwID0geyAwLCAwLCAwIH07Cj4gKwo+ICsJaWYgKGJyaWdodG5lc3MpCj4gKwkJ c2V0dXAub25fdGltZSA9IDEwMDsKPiArCWVsc2UKPiArCQlzZXR1cC5kb3duX3RpbWUgPSAxMDA7 Cj4gKwlyZXR1cm4gcGNhdF9wbXVfd3JpdGVfZGF0YShsZWRzLT5wbXUsIFBDQVRfQ01EX05FVF9T VEFUVVNfTEVEX1NFVFVQLAo+ICsJCQkJICAgJnNldHVwLCBzaXplb2Yoc2V0dXApKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBwY2F0X2xlZHNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiArewo+ICsJaW50IHJldDsKClNtYWxsIHNpemVkIHZhcmlhYmxlcyBhdCB0aGUgYm90 dG9tIHBsZWFzZS4KCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3Ry dWN0IHBjYXRfbGVkcyAqbGVkczsKPiArCWNvbnN0IGNoYXIgKmxhYmVsOwo+ICsKPiArCWxlZHMg PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZHMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICgh bGVkcykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlsZWRzLT5kZXYgPSBkZXY7CgpXaGVy ZSBpcyB0aGlzIHVzZWQ/Cgo+ICsJbGVkcy0+cG11ID0gZGV2X2dldF9kcnZkYXRhKGRldi0+cGFy ZW50KTsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGxlZHMpOwoKV2hlcmUgZG8geW91 IHBsYXRmb3JtX2dldF9kcnZkYXRhKCkKCj4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmlu ZyhkZXYtPm9mX25vZGUsICJsYWJlbCIsICZsYWJlbCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVy biBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiTm8gbGFiZWwgcHJvcGVydHlcbiIpOwo+ICsKPiAr CWxlZHMtPmNkZXYubmFtZSA9IGxhYmVsOwo+ICsJbGVkcy0+Y2Rldi5tYXhfYnJpZ2h0bmVzcyA9 IDE7Cj4gKwlsZWRzLT5jZGV2LmJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0gcGNhdF9sZWRfc3Rh dHVzX3NldDsKPiArCj4gKwlyZXR1cm4gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXIoZGV2LCAm bGVkcy0+Y2Rldik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IHBjYXRfbGVkc19kdF9pZHNbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAiYXJpYWJvYXJkLHBo b3RvbmljYXQtcG11LWxlZHMiLCB9LAoKSG93IG1hbnkgTEVEcyBhcmUgdGhlcmU/Cgo+ICsJeyAv KiBzZW50aW5lbCAqLyB9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBjYXRfbGVk c19kdF9pZHMpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGNhdF9sZWRz X2RyaXZlciA9IHsKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAicGhvdG9uaWNhdC1sZWRz IiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBwY2F0X2xlZHNfZHRfaWRzLAo+ICsJfSwKPiArCS5w cm9iZSA9IHBjYXRfbGVkc19wcm9iZSwKPiArfTsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihw Y2F0X2xlZHNfZHJpdmVyKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIkp1bmhhbyBYaWUgPGJpZ2Zv b3RAY2xhc3NmdW4uY24+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiUGhvdG9uaWNhdCBQTVUg U3RhdHVzIExFRHMiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+IC0tIAo+IDIuNDYuMAo+ IAoKLS0gCjApCkxlZSBKb25lcyBb5p2O55C85pavXQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KTGludXgtcm9ja2NoaXAgbWFpbGluZyBsaXN0CkxpbnV4 LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hpcAo=