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=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 8DE23C433E4 for ; Thu, 25 Mar 2021 08:23:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 55B81619F9 for ; Thu, 25 Mar 2021 08:23:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229758AbhCYIWj (ORCPT ); Thu, 25 Mar 2021 04:22:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55938 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229728AbhCYIWY (ORCPT ); Thu, 25 Mar 2021 04:22:24 -0400 Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 56583C06174A; Thu, 25 Mar 2021 01:22:24 -0700 (PDT) Received: by mail-lf1-x135.google.com with SMTP id b83so1219346lfd.11; Thu, 25 Mar 2021 01:22:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=G826T6os5KhrXWhgWWSol9eRD4q55UejsVL4Aih0kVk=; b=nkK7ygHCjzogkk85Hs85aPvKDl9+y9aHUUxCc/JPwvqHRwreCYcqEoBSlHZJRAC526 meVjDtOWr3Ub1/hGxUxqgGg23+WyX1Q3jXCxhvy0T8e8vEwq/Kg0ulhjPdpUuQpD4odT zP3buTH4Crg4mBy7ydWLObie0uC0qdQYAYwZmxwD2bPwxYLZXAgi6/K+kTe4PVTAmxpf 2caREH833aSsd+iiEll92r2kWBUdOh+mh2F+em2BveLKygEEd1vCAcpW0tJhSp2mtGhv cpEfskC2Ce0sPmwnC40/XP/LGo1gpO9MhCBwm8r0noLNnPP2iS442cFkXcJdQh5fRb8i asPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=G826T6os5KhrXWhgWWSol9eRD4q55UejsVL4Aih0kVk=; b=jc0mnAUyklBH9FR3lIdmWROTe38EbHWngYs4qnEj3UmP3hPCnE8LgkT3dprmyh8hm1 VHja+H85vtb9HEYRA30py6Jopavx87US39ZOi2+D2thff0f8zJJ1cWQwrYidO9Dz7uvQ akcUu1ivqzc+OSom9FfKct2Vy0X/HaS6hKO47tp0QTECVak8cL4bLNy5mPmM/CygS/6u zA6Op3t8VHcNwf4IvmTw+SQJETKnvUDLyzF6j4rpN/vwF91nVhoVXUr8x9kXdk3RQYJ4 Q1FAFr+JVXZoW8U2WFMpVWB1WalnDK/GvXzs46sE80w30kmcfG+vnd+05qNx7Hp+TN7d IekA== X-Gm-Message-State: AOAM530IB7FqrP5GvunvIjZwPJ6x4uJepgVziJSljqWdk9+OIcmQsOHO Hb6ulMZQKxGL7/IOjTQcfxaL0LwEhaJowiX/eiw= X-Google-Smtp-Source: ABdhPJyilmo5xJ3ryeQb1hDSfMNJ6g9UEiWKYjSioLwKiFVpAG+2I7g0hvodsspIy0sK9ApNIQWpYBymBEszsmTSPio= X-Received: by 2002:a05:6512:1192:: with SMTP id g18mr4084205lfr.408.1616660542638; Thu, 25 Mar 2021 01:22:22 -0700 (PDT) MIME-Version: 1.0 References: <1608217244-314-1-git-send-email-u0084500@gmail.com> <1608217244-314-5-git-send-email-u0084500@gmail.com> In-Reply-To: <1608217244-314-5-git-send-email-u0084500@gmail.com> From: ChiYuan Huang Date: Thu, 25 Mar 2021 16:22:11 +0800 Message-ID: Subject: Re: [PATCH v5 5/6] backlight: rt4831: Adds support for Richtek RT4831 backlight To: Lee Jones , lgirdwood@gmail.com, Mark Brown , Daniel Thompson , jingoohan1@gmail.com, b.zolnierkie@samsung.com Cc: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, lkml , ChiYuan Huang Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Dear reviewers: Didn't get any response about this backlight patch. Is there any part need to be refined? cy_huang =E6=96=BC 2020=E5=B9=B412=E6=9C=8817=E6=97=A5= =E9=80=B1=E5=9B=9B =E4=B8=8B=E5=8D=8811:01=E5=AF=AB=E9=81=93=EF=BC=9A > > From: ChiYuan Huang > > Adds support for Richtek RT4831 backlight. > > Signed-off-by: ChiYuan Huang > --- > drivers/video/backlight/Kconfig | 8 ++ > drivers/video/backlight/Makefile | 1 + > drivers/video/backlight/rt4831-backlight.c | 219 +++++++++++++++++++++++= ++++++ > 3 files changed, 228 insertions(+) > create mode 100644 drivers/video/backlight/rt4831-backlight.c > > diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kc= onfig > index d83c87b..666bdb0 100644 > --- a/drivers/video/backlight/Kconfig > +++ b/drivers/video/backlight/Kconfig > @@ -289,6 +289,14 @@ config BACKLIGHT_QCOM_WLED > If you have the Qualcomm PMIC, say Y to enable a driver for the > WLED block. Currently it supports PM8941 and PMI8998. > > +config BACKLIGHT_RT4831 > + tristate "Richtek RT4831 Backlight Driver" > + depends on MFD_RT4831 > + help > + This enables support for Richtek RT4831 Backlight driver. > + It's commont used to drive the display WLED. There're four chan= nels > + inisde, and each channel can provide up to 30mA current. > + > config BACKLIGHT_SAHARA > tristate "Tabletkiosk Sahara Touch-iT Backlight Driver" > depends on X86 > diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/M= akefile > index 685f3f1..cae2c83 100644 > --- a/drivers/video/backlight/Makefile > +++ b/drivers/video/backlight/Makefile > @@ -49,6 +49,7 @@ obj-$(CONFIG_BACKLIGHT_PANDORA) +=3D pand= ora_bl.o > obj-$(CONFIG_BACKLIGHT_PCF50633) +=3D pcf50633-backlight.o > obj-$(CONFIG_BACKLIGHT_PWM) +=3D pwm_bl.o > obj-$(CONFIG_BACKLIGHT_QCOM_WLED) +=3D qcom-wled.o > +obj-$(CONFIG_BACKLIGHT_RT4831) +=3D rt4831-backlight.o > obj-$(CONFIG_BACKLIGHT_SAHARA) +=3D kb3886_bl.o > obj-$(CONFIG_BACKLIGHT_SKY81452) +=3D sky81452-backlight.o > obj-$(CONFIG_BACKLIGHT_TOSA) +=3D tosa_bl.o > diff --git a/drivers/video/backlight/rt4831-backlight.c b/drivers/video/b= acklight/rt4831-backlight.c > new file mode 100644 > index 00000000..816c4d6 > --- /dev/null > +++ b/drivers/video/backlight/rt4831-backlight.c > @@ -0,0 +1,219 @@ > +// SPDX-License-Identifier: GPL-2.0-only > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define RT4831_REG_BLCFG 0x02 > +#define RT4831_REG_BLDIML 0x04 > +#define RT4831_REG_ENABLE 0x08 > + > +#define BL_MAX_BRIGHTNESS 2048 > + > +#define RT4831_BLOVP_MASK GENMASK(7, 5) > +#define RT4831_BLOVP_SHIFT 5 > +#define RT4831_BLPWMEN_MASK BIT(0) > +#define RT4831_BLEN_MASK BIT(4) > +#define RT4831_BLCH_MASK GENMASK(3, 0) > +#define RT4831_BLDIML_MASK GENMASK(2, 0) > +#define RT4831_BLDIMH_MASK GENMASK(10, 3) > +#define RT4831_BLDIMH_SHIFT 3 > + > +struct rt4831_priv { > + struct regmap *regmap; > + struct mutex lock; > + struct backlight_device *bl; > +}; > + > +static int rt4831_bl_update_status(struct backlight_device *bl_dev) > +{ > + struct rt4831_priv *priv =3D bl_get_data(bl_dev); > + int brightness =3D backlight_get_brightness(bl_dev); > + unsigned int enable =3D brightness ? RT4831_BLEN_MASK : 0; > + u8 v[2]; > + int ret; > + > + mutex_lock(&priv->lock); > + > + if (brightness) { > + v[0] =3D (brightness - 1) & RT4831_BLDIML_MASK; > + v[1] =3D ((brightness - 1) & RT4831_BLDIMH_MASK) >> RT483= 1_BLDIMH_SHIFT; > + > + ret =3D regmap_raw_write(priv->regmap, RT4831_REG_BLDIML,= v, sizeof(v)); > + if (ret) > + goto unlock; > + } > + > + ret =3D regmap_update_bits(priv->regmap, RT4831_REG_ENABLE, RT483= 1_BLEN_MASK, enable); > + > +unlock: > + mutex_unlock(&priv->lock); > + return ret; > +} > + > +static int rt4831_bl_get_brightness(struct backlight_device *bl_dev) > +{ > + struct rt4831_priv *priv =3D bl_get_data(bl_dev); > + unsigned int val; > + u8 v[2]; > + int ret; > + > + mutex_lock(&priv->lock); > + > + ret =3D regmap_read(priv->regmap, RT4831_REG_ENABLE, &val); > + if (ret) > + return ret; > + > + if (!(val & RT4831_BLEN_MASK)) { > + ret =3D 0; > + goto unlock; > + } > + > + ret =3D regmap_raw_read(priv->regmap, RT4831_REG_BLDIML, v, sizeo= f(v)); > + if (ret) > + goto unlock; > + > + ret =3D (v[1] << RT4831_BLDIMH_SHIFT) + (v[0] & RT4831_BLDIML_MAS= K) + 1; > + > +unlock: > + mutex_unlock(&priv->lock); > + return ret; > +} > + > +static const struct backlight_ops rt4831_bl_ops =3D { > + .options =3D BL_CORE_SUSPENDRESUME, > + .update_status =3D rt4831_bl_update_status, > + .get_brightness =3D rt4831_bl_get_brightness, > +}; > + > +static int rt4831_init_device_properties(struct rt4831_priv *priv, struc= t device *dev, > + struct backlight_properties *bl= _props) > +{ > + u8 propval; > + u32 brightness; > + unsigned int val =3D 0; > + int ret; > + > + /* common properties */ > + ret =3D device_property_read_u32(dev, "max-brightness", &brightne= ss); > + if (ret) { > + dev_warn(dev, "max-brightness DT property missing, use HW= max as default\n"); > + brightness =3D BL_MAX_BRIGHTNESS; > + } > + > + bl_props->max_brightness =3D min_t(u32, brightness, BL_MAX_BRIGHT= NESS); > + > + ret =3D device_property_read_u32(dev, "default-brightness", &brig= htness); > + if (ret) { > + dev_warn(dev, "default-brightness DT property missing, us= e max limit as default\n"); > + brightness =3D bl_props->max_brightness; > + } > + > + bl_props->brightness =3D min_t(u32, brightness, bl_props->max_bri= ghtness); > + > + /* vendor properties */ > + if (device_property_read_bool(dev, "richtek,pwm-enable")) > + val =3D RT4831_BLPWMEN_MASK; > + > + ret =3D regmap_update_bits(priv->regmap, RT4831_REG_BLCFG, RT4831= _BLPWMEN_MASK, val); > + if (ret) > + return ret; > + > + ret =3D device_property_read_u8(dev, "richtek,bled-ovp-sel", &pro= pval); > + if (ret) { > + dev_warn(dev, "richtek,bled-ovp-sel DT property missing, = use default 21V\n"); > + propval =3D RT4831_BLOVPLVL_21V; > + } > + > + propval =3D min_t(u8, propval, RT4831_BLOVPLVL_29V); > + ret =3D regmap_update_bits(priv->regmap, RT4831_REG_BLCFG, RT4831= _BLOVP_MASK, > + propval << RT4831_BLOVP_SHIFT); > + if (ret) > + return ret; > + > + ret =3D device_property_read_u8(dev, "richtek,channel-use", &prop= val); > + if (ret) { > + dev_err(dev, "richtek,channel-use DT property missing\n")= ; > + return ret; > + } > + > + if (!(propval & RT4831_BLCH_MASK)) { > + dev_err(dev, "No channel specified\n"); > + return -EINVAL; > + } > + > + return regmap_update_bits(priv->regmap, RT4831_REG_ENABLE, RT4831= _BLCH_MASK, propval); > +} > + > +static int rt4831_bl_probe(struct platform_device *pdev) > +{ > + struct rt4831_priv *priv; > + struct backlight_properties bl_props =3D { .type =3D BACKLIGHT_RA= W, }; > + int ret; > + > + priv =3D devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); > + if (!priv) > + return -ENOMEM; > + > + mutex_init(&priv->lock); > + > + priv->regmap =3D dev_get_regmap(pdev->dev.parent, NULL); > + if (IS_ERR(priv->regmap)) { > + dev_err(&pdev->dev, "Failed to init regmap\n"); > + return PTR_ERR(priv->regmap); > + } > + > + ret =3D rt4831_init_device_properties(priv, &pdev->dev, &bl_props= ); > + if (ret) { > + dev_err(&pdev->dev, "Failed to init device properties\n")= ; > + return ret; > + } > + > + priv->bl =3D devm_backlight_device_register(&pdev->dev, pdev->nam= e, &pdev->dev, priv, > + &rt4831_bl_ops, &bl_pro= ps); > + if (IS_ERR(priv->bl)) { > + dev_err(&pdev->dev, "Failed to register backlight\n"); > + return PTR_ERR(priv->bl); > + } > + > + backlight_update_status(priv->bl); > + platform_set_drvdata(pdev, priv); > + > + return 0; > +} > + > +static int rt4831_bl_remove(struct platform_device *pdev) > +{ > + struct rt4831_priv *priv =3D platform_get_drvdata(pdev); > + struct backlight_device *bl_dev =3D priv->bl; > + > + bl_dev->props.brightness =3D 0; > + backlight_update_status(priv->bl); > + > + return 0; > +} > + > +static const struct of_device_id __maybe_unused rt4831_bl_of_match[] =3D= { > + { .compatible =3D "richtek,rt4831-backlight", }, > + {} > +}; > +MODULE_DEVICE_TABLE(of, rt4831_bl_of_match); > + > +static struct platform_driver rt4831_bl_driver =3D { > + .driver =3D { > + .name =3D "rt4831-backlight", > + .of_match_table =3D rt4831_bl_of_match, > + }, > + .probe =3D rt4831_bl_probe, > + .remove =3D rt4831_bl_remove, > +}; > +module_platform_driver(rt4831_bl_driver); > + > +MODULE_AUTHOR("ChiYuan Huang "); > +MODULE_LICENSE("GPL v2"); > -- > 2.7.4 > 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=-10.5 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 0BA05C433C1 for ; Thu, 25 Mar 2021 09:30:11 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A286361A0E for ; Thu, 25 Mar 2021 09:30:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A286361A0E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 25C536ECEA; Thu, 25 Mar 2021 09:30:07 +0000 (UTC) Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [IPv6:2a00:1450:4864:20::12c]) by gabe.freedesktop.org (Postfix) with ESMTPS id 699376EB40 for ; Thu, 25 Mar 2021 08:22:24 +0000 (UTC) Received: by mail-lf1-x12c.google.com with SMTP id i26so1271442lfl.1 for ; Thu, 25 Mar 2021 01:22:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=G826T6os5KhrXWhgWWSol9eRD4q55UejsVL4Aih0kVk=; b=nkK7ygHCjzogkk85Hs85aPvKDl9+y9aHUUxCc/JPwvqHRwreCYcqEoBSlHZJRAC526 meVjDtOWr3Ub1/hGxUxqgGg23+WyX1Q3jXCxhvy0T8e8vEwq/Kg0ulhjPdpUuQpD4odT zP3buTH4Crg4mBy7ydWLObie0uC0qdQYAYwZmxwD2bPwxYLZXAgi6/K+kTe4PVTAmxpf 2caREH833aSsd+iiEll92r2kWBUdOh+mh2F+em2BveLKygEEd1vCAcpW0tJhSp2mtGhv cpEfskC2Ce0sPmwnC40/XP/LGo1gpO9MhCBwm8r0noLNnPP2iS442cFkXcJdQh5fRb8i asPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=G826T6os5KhrXWhgWWSol9eRD4q55UejsVL4Aih0kVk=; b=kRVBBW/wOZVX0Wxpg+oFLomZnlkQGVZpd60gHu+NlUbEqz8zoMDWVdw1vRYk2Ogh6V urQ8E83jEIldVnnUf0i11xsKSGxBXyiURI5sSAnl+qFVaChqXToEzOp8jOE2NCTMbh/F Xio9vuGXkoozhg0C66WEeNToO7LrDSo/YloEhT7k7Q62jPZhKFQhDUyTagxZdMExawno IKNbmPpIm4zGPs0/OovIbnNxmypGVlklcf1DFRkLGFN8SFNh5LQMiZ2dsXRGYohZv4p0 KpAHM2v7oy0N6gt++CtwuzZiT+xtD0TXLGQfIvo1bn4Xg67Fzgs+BuMu4p1Jsqr567n1 9kWg== X-Gm-Message-State: AOAM531XxMb/OO17VefScMPthrQrNno+zB3tBhm2howaSHsz0MNXw246 zOvYMSkmQLJo35pEdKDYwz4sYg0GlJ1Mbe1tRJg= X-Google-Smtp-Source: ABdhPJyilmo5xJ3ryeQb1hDSfMNJ6g9UEiWKYjSioLwKiFVpAG+2I7g0hvodsspIy0sK9ApNIQWpYBymBEszsmTSPio= X-Received: by 2002:a05:6512:1192:: with SMTP id g18mr4084205lfr.408.1616660542638; Thu, 25 Mar 2021 01:22:22 -0700 (PDT) MIME-Version: 1.0 References: <1608217244-314-1-git-send-email-u0084500@gmail.com> <1608217244-314-5-git-send-email-u0084500@gmail.com> In-Reply-To: <1608217244-314-5-git-send-email-u0084500@gmail.com> From: ChiYuan Huang Date: Thu, 25 Mar 2021 16:22:11 +0800 Message-ID: Subject: Re: [PATCH v5 5/6] backlight: rt4831: Adds support for Richtek RT4831 backlight To: Lee Jones , lgirdwood@gmail.com, Mark Brown , Daniel Thompson , jingoohan1@gmail.com, b.zolnierkie@samsung.com X-Mailman-Approved-At: Thu, 25 Mar 2021 09:30:06 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ChiYuan Huang , linux-fbdev@vger.kernel.org, lkml , dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RGVhciByZXZpZXdlcnM6CgogICAgICAgICAgIERpZG4ndCBnZXQgYW55IHJlc3BvbnNlIGFib3V0 IHRoaXMgYmFja2xpZ2h0IHBhdGNoLgpJcyB0aGVyZSBhbnkgcGFydCBuZWVkIHRvIGJlIHJlZmlu ZWQ/CgpjeV9odWFuZyA8dTAwODQ1MDBAZ21haWwuY29tPiDmlrwgMjAyMOW5tDEy5pyIMTfml6Ug 6YCx5ZubIOS4i+WNiDExOjAx5a+r6YGT77yaCj4KPiBGcm9tOiBDaGlZdWFuIEh1YW5nIDxjeV9o dWFuZ0ByaWNodGVrLmNvbT4KPgo+IEFkZHMgc3VwcG9ydCBmb3IgUmljaHRlayBSVDQ4MzEgYmFj a2xpZ2h0Lgo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hpWXVhbiBIdWFuZyA8Y3lfaHVhbmdAcmljaHRl ay5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcgICAgICAgICAg ICB8ICAgOCArKwo+ICBkcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZSAgICAgICAgICAg fCAgIDEgKwo+ICBkcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ydDQ4MzEtYmFja2xpZ2h0LmMgfCAy MTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCAyMjgg aW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aWRlby9iYWNrbGln aHQvcnQ0ODMxLWJhY2tsaWdodC5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNr bGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKPiBpbmRleCBk ODNjODdiLi42NjZiZGIwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tj b25maWcKPiArKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCj4gQEAgLTI4OSw2 ICsyODksMTQgQEAgY29uZmlnIEJBQ0tMSUdIVF9RQ09NX1dMRUQKPiAgICAgICAgICAgSWYgeW91 IGhhdmUgdGhlIFF1YWxjb21tIFBNSUMsIHNheSBZIHRvIGVuYWJsZSBhIGRyaXZlciBmb3IgdGhl Cj4gICAgICAgICAgIFdMRUQgYmxvY2suIEN1cnJlbnRseSBpdCBzdXBwb3J0cyBQTTg5NDEgYW5k IFBNSTg5OTguCj4KPiArY29uZmlnIEJBQ0tMSUdIVF9SVDQ4MzEKPiArICAgICAgIHRyaXN0YXRl ICJSaWNodGVrIFJUNDgzMSBCYWNrbGlnaHQgRHJpdmVyIgo+ICsgICAgICAgZGVwZW5kcyBvbiBN RkRfUlQ0ODMxCj4gKyAgICAgICBoZWxwCj4gKyAgICAgICAgIFRoaXMgZW5hYmxlcyBzdXBwb3J0 IGZvciBSaWNodGVrIFJUNDgzMSBCYWNrbGlnaHQgZHJpdmVyLgo+ICsgICAgICAgICBJdCdzIGNv bW1vbnQgdXNlZCB0byBkcml2ZSB0aGUgZGlzcGxheSBXTEVELiBUaGVyZSdyZSBmb3VyIGNoYW5u ZWxzCj4gKyAgICAgICAgIGluaXNkZSwgYW5kIGVhY2ggY2hhbm5lbCBjYW4gcHJvdmlkZSB1cCB0 byAzMG1BIGN1cnJlbnQuCj4gKwo+ICBjb25maWcgQkFDS0xJR0hUX1NBSEFSQQo+ICAgICAgICAg dHJpc3RhdGUgIlRhYmxldGtpb3NrIFNhaGFyYSBUb3VjaC1pVCBCYWNrbGlnaHQgRHJpdmVyIgo+ ICAgICAgICAgZGVwZW5kcyBvbiBYODYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNr bGlnaHQvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQo+IGluZGV4 IDY4NWYzZjEuLmNhZTJjODMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQv TWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQo+IEBAIC00 OSw2ICs0OSw3IEBAIG9iai0kKENPTkZJR19CQUNLTElHSFRfUEFORE9SQSkgICAgICAgICAgICAg ICArPSBwYW5kb3JhX2JsLm8KPiAgb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9QQ0Y1MDYzMykgICAg ICAgKz0gcGNmNTA2MzMtYmFja2xpZ2h0Lm8KPiAgb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9QV00p ICAgICAgICAgICAgKz0gcHdtX2JsLm8KPiAgb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9RQ09NX1dM RUQpICAgICAgKz0gcWNvbS13bGVkLm8KPiArb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9SVDQ4MzEp ICAgICAgICAgKz0gcnQ0ODMxLWJhY2tsaWdodC5vCj4gIG9iai0kKENPTkZJR19CQUNLTElHSFRf U0FIQVJBKSAgICAgICAgICs9IGtiMzg4Nl9ibC5vCj4gIG9iai0kKENPTkZJR19CQUNLTElHSFRf U0tZODE0NTIpICAgICAgICs9IHNreTgxNDUyLWJhY2tsaWdodC5vCj4gIG9iai0kKENPTkZJR19C QUNLTElHSFRfVE9TQSkgICAgICAgICAgICs9IHRvc2FfYmwubwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3ZpZGVvL2JhY2tsaWdodC9ydDQ4MzEtYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2Jh Y2tsaWdodC9ydDQ4MzEtYmFja2xpZ2h0LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwLi44MTZjNGQ2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdmlkZW8v YmFja2xpZ2h0L3J0NDgzMS1iYWNrbGlnaHQuYwo+IEBAIC0wLDAgKzEsMjE5IEBACj4gKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArCj4gKyNpbmNsdWRlIDxkdC1i aW5kaW5ncy9sZWRzL3J0NDgzMS1iYWNrbGlnaHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2JhY2ts aWdodC5oPgo+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgv bXV0ZXguaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvcHJvcGVydHkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+ICsKPiAr I2RlZmluZSBSVDQ4MzFfUkVHX0JMQ0ZHICAgICAgIDB4MDIKPiArI2RlZmluZSBSVDQ4MzFfUkVH X0JMRElNTCAgICAgIDB4MDQKPiArI2RlZmluZSBSVDQ4MzFfUkVHX0VOQUJMRSAgICAgIDB4MDgK PiArCj4gKyNkZWZpbmUgQkxfTUFYX0JSSUdIVE5FU1MgICAgICAyMDQ4Cj4gKwo+ICsjZGVmaW5l IFJUNDgzMV9CTE9WUF9NQVNLICAgICAgR0VOTUFTSyg3LCA1KQo+ICsjZGVmaW5lIFJUNDgzMV9C TE9WUF9TSElGVCAgICAgNQo+ICsjZGVmaW5lIFJUNDgzMV9CTFBXTUVOX01BU0sgICAgQklUKDAp Cj4gKyNkZWZpbmUgUlQ0ODMxX0JMRU5fTUFTSyAgICAgICBCSVQoNCkKPiArI2RlZmluZSBSVDQ4 MzFfQkxDSF9NQVNLICAgICAgIEdFTk1BU0soMywgMCkKPiArI2RlZmluZSBSVDQ4MzFfQkxESU1M X01BU0sgICAgIEdFTk1BU0soMiwgMCkKPiArI2RlZmluZSBSVDQ4MzFfQkxESU1IX01BU0sgICAg IEdFTk1BU0soMTAsIDMpCj4gKyNkZWZpbmUgUlQ0ODMxX0JMRElNSF9TSElGVCAgICAzCj4gKwo+ ICtzdHJ1Y3QgcnQ0ODMxX3ByaXYgewo+ICsgICAgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwOwo+ ICsgICAgICAgc3RydWN0IG11dGV4IGxvY2s7Cj4gKyAgICAgICBzdHJ1Y3QgYmFja2xpZ2h0X2Rl dmljZSAqYmw7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHJ0NDgzMV9ibF91cGRhdGVfc3RhdHVz KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibF9kZXYpCj4gK3sKPiArICAgICAgIHN0cnVjdCBy dDQ4MzFfcHJpdiAqcHJpdiA9IGJsX2dldF9kYXRhKGJsX2Rldik7Cj4gKyAgICAgICBpbnQgYnJp Z2h0bmVzcyA9IGJhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcyhibF9kZXYpOwo+ICsgICAgICAgdW5z aWduZWQgaW50IGVuYWJsZSA9IGJyaWdodG5lc3MgPyBSVDQ4MzFfQkxFTl9NQVNLIDogMDsKPiAr ICAgICAgIHU4IHZbMl07Cj4gKyAgICAgICBpbnQgcmV0Owo+ICsKPiArICAgICAgIG11dGV4X2xv Y2soJnByaXYtPmxvY2spOwo+ICsKPiArICAgICAgIGlmIChicmlnaHRuZXNzKSB7Cj4gKyAgICAg ICAgICAgICAgIHZbMF0gPSAoYnJpZ2h0bmVzcyAtIDEpICYgUlQ0ODMxX0JMRElNTF9NQVNLOwo+ ICsgICAgICAgICAgICAgICB2WzFdID0gKChicmlnaHRuZXNzIC0gMSkgJiBSVDQ4MzFfQkxESU1I X01BU0spID4+IFJUNDgzMV9CTERJTUhfU0hJRlQ7Cj4gKwo+ICsgICAgICAgICAgICAgICByZXQg PSByZWdtYXBfcmF3X3dyaXRlKHByaXYtPnJlZ21hcCwgUlQ0ODMxX1JFR19CTERJTUwsIHYsIHNp emVvZih2KSk7Cj4gKyAgICAgICAgICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgZ290byB1bmxvY2s7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcmV0ID0gcmVnbWFw X3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgUlQ0ODMxX1JFR19FTkFCTEUsIFJUNDgzMV9CTEVO X01BU0ssIGVuYWJsZSk7Cj4gKwo+ICt1bmxvY2s6Cj4gKyAgICAgICBtdXRleF91bmxvY2soJnBy aXYtPmxvY2spOwo+ICsgICAgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBy dDQ4MzFfYmxfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsX2RldikK PiArewo+ICsgICAgICAgc3RydWN0IHJ0NDgzMV9wcml2ICpwcml2ID0gYmxfZ2V0X2RhdGEoYmxf ZGV2KTsKPiArICAgICAgIHVuc2lnbmVkIGludCB2YWw7Cj4gKyAgICAgICB1OCB2WzJdOwo+ICsg ICAgICAgaW50IHJldDsKPiArCj4gKyAgICAgICBtdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKPiAr Cj4gKyAgICAgICByZXQgPSByZWdtYXBfcmVhZChwcml2LT5yZWdtYXAsIFJUNDgzMV9SRUdfRU5B QkxFLCAmdmFsKTsKPiArICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4gKwo+ICsgICAgICAgaWYgKCEodmFsICYgUlQ0ODMxX0JMRU5fTUFTSykpIHsKPiArICAg ICAgICAgICAgICAgcmV0ID0gMDsKPiArICAgICAgICAgICAgICAgZ290byB1bmxvY2s7Cj4gKyAg ICAgICB9Cj4gKwo+ICsgICAgICAgcmV0ID0gcmVnbWFwX3Jhd19yZWFkKHByaXYtPnJlZ21hcCwg UlQ0ODMxX1JFR19CTERJTUwsIHYsIHNpemVvZih2KSk7Cj4gKyAgICAgICBpZiAocmV0KQo+ICsg ICAgICAgICAgICAgICBnb3RvIHVubG9jazsKPiArCj4gKyAgICAgICByZXQgPSAodlsxXSA8PCBS VDQ4MzFfQkxESU1IX1NISUZUKSArICh2WzBdICYgUlQ0ODMxX0JMRElNTF9NQVNLKSArIDE7Cj4g Kwo+ICt1bmxvY2s6Cj4gKyAgICAgICBtdXRleF91bmxvY2soJnByaXYtPmxvY2spOwo+ICsgICAg ICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRf b3BzIHJ0NDgzMV9ibF9vcHMgPSB7Cj4gKyAgICAgICAub3B0aW9ucyA9IEJMX0NPUkVfU1VTUEVO RFJFU1VNRSwKPiArICAgICAgIC51cGRhdGVfc3RhdHVzID0gcnQ0ODMxX2JsX3VwZGF0ZV9zdGF0 dXMsCj4gKyAgICAgICAuZ2V0X2JyaWdodG5lc3MgPSBydDQ4MzFfYmxfZ2V0X2JyaWdodG5lc3Ms Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHJ0NDgzMV9pbml0X2RldmljZV9wcm9wZXJ0aWVzKHN0 cnVjdCBydDQ4MzFfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZSAqZGV2LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGll cyAqYmxfcHJvcHMpCj4gK3sKPiArICAgICAgIHU4IHByb3B2YWw7Cj4gKyAgICAgICB1MzIgYnJp Z2h0bmVzczsKPiArICAgICAgIHVuc2lnbmVkIGludCB2YWwgPSAwOwo+ICsgICAgICAgaW50IHJl dDsKPiArCj4gKyAgICAgICAvKiBjb21tb24gcHJvcGVydGllcyAqLwo+ICsgICAgICAgcmV0ID0g ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgIm1heC1icmlnaHRuZXNzIiwgJmJyaWdodG5l c3MpOwo+ICsgICAgICAgaWYgKHJldCkgewo+ICsgICAgICAgICAgICAgICBkZXZfd2FybihkZXYs ICJtYXgtYnJpZ2h0bmVzcyBEVCBwcm9wZXJ0eSBtaXNzaW5nLCB1c2UgSFcgbWF4IGFzIGRlZmF1 bHRcbiIpOwo+ICsgICAgICAgICAgICAgICBicmlnaHRuZXNzID0gQkxfTUFYX0JSSUdIVE5FU1M7 Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgYmxfcHJvcHMtPm1heF9icmlnaHRuZXNzID0gbWlu X3QodTMyLCBicmlnaHRuZXNzLCBCTF9NQVhfQlJJR0hUTkVTUyk7Cj4gKwo+ICsgICAgICAgcmV0 ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImRlZmF1bHQtYnJpZ2h0bmVzcyIsICZi cmlnaHRuZXNzKTsKPiArICAgICAgIGlmIChyZXQpIHsKPiArICAgICAgICAgICAgICAgZGV2X3dh cm4oZGV2LCAiZGVmYXVsdC1icmlnaHRuZXNzIERUIHByb3BlcnR5IG1pc3NpbmcsIHVzZSBtYXgg bGltaXQgYXMgZGVmYXVsdFxuIik7Cj4gKyAgICAgICAgICAgICAgIGJyaWdodG5lc3MgPSBibF9w cm9wcy0+bWF4X2JyaWdodG5lc3M7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgYmxfcHJvcHMt PmJyaWdodG5lc3MgPSBtaW5fdCh1MzIsIGJyaWdodG5lc3MsIGJsX3Byb3BzLT5tYXhfYnJpZ2h0 bmVzcyk7Cj4gKwo+ICsgICAgICAgLyogdmVuZG9yIHByb3BlcnRpZXMgKi8KPiArICAgICAgIGlm IChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgInJpY2h0ZWsscHdtLWVuYWJsZSIpKQo+ ICsgICAgICAgICAgICAgICB2YWwgPSBSVDQ4MzFfQkxQV01FTl9NQVNLOwo+ICsKPiArICAgICAg IHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFJUNDgzMV9SRUdfQkxDRkcs IFJUNDgzMV9CTFBXTUVOX01BU0ssIHZhbCk7Cj4gKyAgICAgICBpZiAocmV0KQo+ICsgICAgICAg ICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgICAgIHJldCA9IGRldmljZV9wcm9wZXJ0eV9y ZWFkX3U4KGRldiwgInJpY2h0ZWssYmxlZC1vdnAtc2VsIiwgJnByb3B2YWwpOwo+ICsgICAgICAg aWYgKHJldCkgewo+ICsgICAgICAgICAgICAgICBkZXZfd2FybihkZXYsICJyaWNodGVrLGJsZWQt b3ZwLXNlbCBEVCBwcm9wZXJ0eSBtaXNzaW5nLCB1c2UgZGVmYXVsdCAyMVZcbiIpOwo+ICsgICAg ICAgICAgICAgICBwcm9wdmFsID0gUlQ0ODMxX0JMT1ZQTFZMXzIxVjsKPiArICAgICAgIH0KPiAr Cj4gKyAgICAgICBwcm9wdmFsID0gbWluX3QodTgsIHByb3B2YWwsIFJUNDgzMV9CTE9WUExWTF8y OVYpOwo+ICsgICAgICAgcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgUlQ0 ODMxX1JFR19CTENGRywgUlQ0ODMxX0JMT1ZQX01BU0ssCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJvcHZhbCA8PCBSVDQ4MzFfQkxPVlBfU0hJRlQpOwo+ICsgICAgICAgaWYg KHJldCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICAgICByZXQgPSBk ZXZpY2VfcHJvcGVydHlfcmVhZF91OChkZXYsICJyaWNodGVrLGNoYW5uZWwtdXNlIiwgJnByb3B2 YWwpOwo+ICsgICAgICAgaWYgKHJldCkgewo+ICsgICAgICAgICAgICAgICBkZXZfZXJyKGRldiwg InJpY2h0ZWssY2hhbm5lbC11c2UgRFQgcHJvcGVydHkgbWlzc2luZ1xuIik7Cj4gKyAgICAgICAg ICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgaWYgKCEocHJvcHZh bCAmIFJUNDgzMV9CTENIX01BU0spKSB7Cj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAi Tm8gY2hhbm5lbCBzcGVjaWZpZWRcbiIpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICByZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHBy aXYtPnJlZ21hcCwgUlQ0ODMxX1JFR19FTkFCTEUsIFJUNDgzMV9CTENIX01BU0ssIHByb3B2YWwp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJ0NDgzMV9ibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgcnQ0ODMxX3ByaXYgKnByaXY7Cj4g KyAgICAgICBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgYmxfcHJvcHMgPSB7IC50eXBlID0g QkFDS0xJR0hUX1JBVywgfTsKPiArICAgICAgIGludCByZXQ7Cj4gKwo+ICsgICAgICAgcHJpdiA9 IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKPiAr ICAgICAgIGlmICghcHJpdikKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gKwo+ ICsgICAgICAgbXV0ZXhfaW5pdCgmcHJpdi0+bG9jayk7Cj4gKwo+ICsgICAgICAgcHJpdi0+cmVn bWFwID0gZGV2X2dldF9yZWdtYXAocGRldi0+ZGV2LnBhcmVudCwgTlVMTCk7Cj4gKyAgICAgICBp ZiAoSVNfRVJSKHByaXYtPnJlZ21hcCkpIHsKPiArICAgICAgICAgICAgICAgZGV2X2VycigmcGRl di0+ZGV2LCAiRmFpbGVkIHRvIGluaXQgcmVnbWFwXG4iKTsKPiArICAgICAgICAgICAgICAgcmV0 dXJuIFBUUl9FUlIocHJpdi0+cmVnbWFwKTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICByZXQg PSBydDQ4MzFfaW5pdF9kZXZpY2VfcHJvcGVydGllcyhwcml2LCAmcGRldi0+ZGV2LCAmYmxfcHJv cHMpOwo+ICsgICAgICAgaWYgKHJldCkgewo+ICsgICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2 LT5kZXYsICJGYWlsZWQgdG8gaW5pdCBkZXZpY2UgcHJvcGVydGllc1xuIik7Cj4gKyAgICAgICAg ICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcHJpdi0+YmwgPSBk ZXZtX2JhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgcGRldi0+bmFtZSwgJnBk ZXYtPmRldiwgcHJpdiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZydDQ4MzFfYmxfb3BzLCAmYmxfcHJvcHMpOwo+ICsgICAgICAgaWYgKElTX0VS Uihwcml2LT5ibCkpIHsKPiArICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiRmFp bGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiBQ VFJfRVJSKHByaXYtPmJsKTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBiYWNrbGlnaHRfdXBk YXRlX3N0YXR1cyhwcml2LT5ibCk7Cj4gKyAgICAgICBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCBwcml2KTsKPiArCj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBy dDQ4MzFfYmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArICAg ICAgIHN0cnVjdCBydDQ4MzFfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp Owo+ICsgICAgICAgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsX2RldiA9IHByaXYtPmJsOwo+ ICsKPiArICAgICAgIGJsX2Rldi0+cHJvcHMuYnJpZ2h0bmVzcyA9IDA7Cj4gKyAgICAgICBiYWNr bGlnaHRfdXBkYXRlX3N0YXR1cyhwcml2LT5ibCk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fbWF5YmVfdW51c2Vk IHJ0NDgzMV9ibF9vZl9tYXRjaFtdID0gewo+ICsgICAgICAgeyAuY29tcGF0aWJsZSA9ICJyaWNo dGVrLHJ0NDgzMS1iYWNrbGlnaHQiLCB9LAo+ICsgICAgICAge30KPiArfTsKPiArTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgcnQ0ODMxX2JsX29mX21hdGNoKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIHJ0NDgzMV9ibF9kcml2ZXIgPSB7Cj4gKyAgICAgICAuZHJpdmVyID0g ewo+ICsgICAgICAgICAgICAgICAubmFtZSA9ICJydDQ4MzEtYmFja2xpZ2h0IiwKPiArICAgICAg ICAgICAgICAgLm9mX21hdGNoX3RhYmxlID0gcnQ0ODMxX2JsX29mX21hdGNoLAo+ICsgICAgICAg fSwKPiArICAgICAgIC5wcm9iZSA9IHJ0NDgzMV9ibF9wcm9iZSwKPiArICAgICAgIC5yZW1vdmUg PSBydDQ4MzFfYmxfcmVtb3ZlLAo+ICt9Owo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHJ0NDgz MV9ibF9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiQ2hpWXVhbiBIdWFuZyA8Y3lfaHVh bmdAcmljaHRlay5jb20+Iik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiAtLQo+IDIu Ny40Cj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==