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=-20.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED 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 4A506C83013 for ; Wed, 2 Dec 2020 13:06:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 15A8E2222C for ; Wed, 2 Dec 2020 13:06:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730045AbgLBNGL (ORCPT ); Wed, 2 Dec 2020 08:06:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727956AbgLBNGK (ORCPT ); Wed, 2 Dec 2020 08:06:10 -0500 Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9C497C0613D4 for ; Wed, 2 Dec 2020 05:05:24 -0800 (PST) Received: by mail-wr1-x443.google.com with SMTP id k14so3881076wrn.1 for ; Wed, 02 Dec 2020 05:05:24 -0800 (PST) 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; bh=YF+WlyCt3rq165R9rPhsAR5qsYk6r1RiPW2tzO/YPhE=; b=kxX9wrHZNwlLIJdTxtKvUwuk/et7M4x5wlpSjhdkxmEz1piNL/IeIIXigGIUl9ipjY dIdTNlI4IAELmPStajXBBI+Klk6ii/r0HMOro78xmzlzKgcDUptC4TlsCbnICCG1LW4D sqnfqrSHnT+1OGJzPA6btCamhetgcJo3iPQvqVq8LVzmPPTMGQLF6VuqcOKjcvYGEL1L KiWHTEX6h8AjrKEAv3Z5D3VNdut9VG0waZ9k1XZTtQSZ14qSl0NGIeiTCBj5Mie7kFY3 8IeGal8nhCIgKtpl50HyJ7RBz+qgk/FWV1+tbFCqgiUa8sVSlrevuMAnmbIkxOKg3Bp5 b0dg== 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; bh=YF+WlyCt3rq165R9rPhsAR5qsYk6r1RiPW2tzO/YPhE=; b=pBl480Jy0DbHPiiXWnkuzyYwhDO3IEk3dgxvjP4Ja4jKiaGPB0U9dobMKfInl86B+E i8VmNV+qIRDllValPiRti8yGw4JBsjd4YCvx1jnnpxuWqaevLU/iuLPZhCJ6US3gaacu e4pg2+yzjPkMVTsEldRzVZ6Vh/TH/doEilnKR+5/yi5SKVDBUMaMaqbGAdWNSnUBxmZA oEzwvVetZagWZO8rtd0x8zYzdhP02Hxe81hgrOz27a2Zv2YqaY6/Cb32cu8Py9qbdk3k ZIn6gy9iF6Dh4Sa9AML5NWY9Dkowhm80PYCAHz1HjbY/Ya5wnsv5XJiHVs10o7XsO+BA SqQw== X-Gm-Message-State: AOAM533p9YwGywjk5G+2YyF+aMB8Rc+d8COAD+WVy0GpfmrDV4KlzcQG 5xC9v8mrPWTvZRdSnoLjTaz57Q== X-Google-Smtp-Source: ABdhPJyU7nBUV7L/MOKEYhXF3YQLoNB4SBM8Oj1m3Ptw0bfruV++dLrYVysScV65WUtECftiWqkPEg== X-Received: by 2002:a5d:548b:: with SMTP id h11mr3417874wrv.306.1606914323134; Wed, 02 Dec 2020 05:05:23 -0800 (PST) Received: from dell ([91.110.221.235]) by smtp.gmail.com with ESMTPSA id v64sm2059455wme.25.2020.12.02.05.05.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 05:05:22 -0800 (PST) Date: Wed, 2 Dec 2020 13:05:20 +0000 From: Lee Jones To: Jonathan =?iso-8859-1?Q?Neusch=E4fer?= Cc: linux-kernel@vger.kernel.org, Rob Herring , Thierry Reding , Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , Alessandro Zummo , Alexandre Belloni , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Sam Ravnborg , Linus Walleij , Heiko Stuebner , Stephan Gerhold , Lubomir Rintel , Mark Brown , allen , Mauro Carvalho Chehab , "David S. Miller" , devicetree@vger.kernel.org, linux-pwm@vger.kernel.org, linux-rtc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Heiko Stuebner , Josua Mayer , Andreas Kemnade , Arnd Bergmann , Daniel Palmer , Andy Shevchenko Subject: Re: [PATCH v4 3/7] mfd: Add base driver for Netronix embedded controller Message-ID: <20201202130520.GL4801@dell> References: <20201122222739.1455132-1-j.neuschaefer@gmx.net> <20201122222739.1455132-4-j.neuschaefer@gmx.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20201122222739.1455132-4-j.neuschaefer@gmx.net> Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org On Sun, 22 Nov 2020, Jonathan Neuschäfer wrote: > The Netronix embedded controller is a microcontroller found in some > e-book readers designed by the original design manufacturer Netronix, > Inc. It contains RTC, battery monitoring, system power management, and > PWM functionality. > > This driver implements register access and version detection. > > Third-party hardware documentation is available at: > > https://github.com/neuschaefer/linux/wiki/Netronix-MSP430-embedded-controller > > The EC supports interrupts, but the driver doesn't make use of them so > far. > > Signed-off-by: Jonathan Neuschäfer > --- > > v4: > - include asm/unaligned.h after linux/* > - Use put_unaligned_be16 instead of open-coded big-endian packing > - Clarify that 0x90=0xff00 causes an error in downstream kernel too > - Add commas after non-sentinel positions > - ntxec.h: declare structs device and regmap > - Replace WARN_ON usage and add comments to explain errors > - Replace dev_alert with dev_warn when the result isn't handled > - Change subdevice registration error message to dev_err > - Declare ntxec_reg8 as returning __be16 > - Restructure version detection code > - Spell out ODM > > v3: > - https://lore.kernel.org/lkml/20200924192455.2484005-4-j.neuschaefer@gmx.net/ > - Add (EC) to CONFIG_MFD_NTXEC prompt > - Relicense as GPLv2 or later > - Add email address to copyright line > - remove empty lines in ntxec_poweroff and ntxec_restart functions > - Split long lines > - Remove 'Install ... handler' comments > - Make naming of struct i2c_client parameter consistent > - Remove struct ntxec_info > - Rework 'depends on' lines in Kconfig, hard-depend on I2C, select REGMAP_I2C and > MFD_CORE > - Register subdevices via mfd_cells > - Move 8-bit register conversion to ntxec.h > > v2: > - https://lore.kernel.org/lkml/20200905133230.1014581-4-j.neuschaefer@gmx.net/ > - Add a description of the device to the patch text > - Unify spelling as 'Netronix embedded controller'. > 'Netronix' is the proper name of the manufacturer, but 'embedded controller' > is just a label that I have assigned to the device. > - Switch to regmap, avoid regmap use in poweroff and reboot handlers. > Inspired by cf84dc0bb40f4 ("mfd: rn5t618: Make restart handler atomic safe") > - Use a list of known-working firmware versions instead of checking for a > known-incompatible version > - Prefix registers with NTXEC_REG_ > - Define register values as constants > - Various style cleanups as suggested by Lee Jones > - Don't align = signs in struct initializers [Uwe Kleine-König] > - Don't use dev_dbg for an error message > - Explain sleep in poweroff handler > - Remove (struct ntxec).client > - Switch to .probe_new in i2c driver > - Add .remove callback > - Make CONFIG_MFD_NTXEC a tristate option > --- > drivers/mfd/Kconfig | 11 ++ > drivers/mfd/Makefile | 1 + > drivers/mfd/ntxec.c | 216 ++++++++++++++++++++++++++++++++++++++ > include/linux/mfd/ntxec.h | 34 ++++++ > 4 files changed, 262 insertions(+) > create mode 100644 drivers/mfd/ntxec.c > create mode 100644 include/linux/mfd/ntxec.h > > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig > index 8b99a13669bfc..d96751f884dc6 100644 > --- a/drivers/mfd/Kconfig > +++ b/drivers/mfd/Kconfig > @@ -990,6 +990,17 @@ config MFD_VIPERBOARD > You need to select the mfd cell drivers separately. > The drivers do not support all features the board exposes. > > +config MFD_NTXEC > + tristate "Netronix embedded controller (EC)" > + depends on OF || COMPILE_TEST > + depends on I2C > + select REGMAP_I2C > + select MFD_CORE > + help > + Say yes here if you want to support the embedded controller found in > + certain e-book readers designed by the original design manufacturer > + Netronix. > + > config MFD_RETU > tristate "Nokia Retu and Tahvo multi-function device" > select MFD_CORE > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile > index 1780019d24748..815c99b84019e 100644 > --- a/drivers/mfd/Makefile > +++ b/drivers/mfd/Makefile > @@ -218,6 +218,7 @@ obj-$(CONFIG_MFD_INTEL_MSIC) += intel_msic.o > obj-$(CONFIG_MFD_INTEL_PMC_BXT) += intel_pmc_bxt.o > obj-$(CONFIG_MFD_PALMAS) += palmas.o > obj-$(CONFIG_MFD_VIPERBOARD) += viperboard.o > +obj-$(CONFIG_MFD_NTXEC) += ntxec.o > obj-$(CONFIG_MFD_RC5T583) += rc5t583.o rc5t583-irq.o > obj-$(CONFIG_MFD_RK808) += rk808.o > obj-$(CONFIG_MFD_RN5T618) += rn5t618.o > diff --git a/drivers/mfd/ntxec.c b/drivers/mfd/ntxec.c > new file mode 100644 > index 0000000000000..c1510711d7363 > --- /dev/null > +++ b/drivers/mfd/ntxec.c > @@ -0,0 +1,216 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * The Netronix embedded controller is a microcontroller found in some > + * e-book readers designed by the original design manufacturer Netronix, Inc. > + * It contains RTC, battery monitoring, system power management, and PWM > + * functionality. > + * > + * This driver implements register access, version detection, and system > + * power-off/reset. > + * > + * Copyright 2020 Jonathan Neuschäfer > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define NTXEC_REG_VERSION 0x00 > +#define NTXEC_REG_POWEROFF 0x50 > +#define NTXEC_REG_POWERKEEP 0x70 > +#define NTXEC_REG_RESET 0x90 > + > +#define NTXEC_POWEROFF_VALUE 0x0100 > +#define NTXEC_POWERKEEP_VALUE 0x0800 > +#define NTXEC_RESET_VALUE 0xff00 > + > +static struct i2c_client *poweroff_restart_client; > + > +static void ntxec_poweroff(void) > +{ > + int res; > + u8 buf[3] = { NTXEC_REG_POWEROFF }; > + struct i2c_msg msgs[] = { > + { > + .addr = poweroff_restart_client->addr, > + .flags = 0, > + .len = sizeof(buf), > + .buf = buf, > + }, > + }; > + > + put_unaligned_be16(NTXEC_POWEROFF_VALUE, buf + 1); > + > + res = i2c_transfer(poweroff_restart_client->adapter, msgs, ARRAY_SIZE(msgs)); > + if (res < 0) > + dev_warn(&poweroff_restart_client->dev, > + "Failed to power off (err = %d)\n", res); > + > + /* > + * The time from the register write until the host CPU is powered off > + * has been observed to be about 2.5 to 3 seconds. Sleep long enough to > + * safely avoid returning from the poweroff handler. > + */ > + msleep(5000); > +} > + > +static int ntxec_restart(struct notifier_block *nb, > + unsigned long action, void *data) > +{ > + int res; > + u8 buf[3] = { NTXEC_REG_RESET }; > + /* > + * NOTE: The lower half of the reset value is not sent, because sending > + * it causes an I2C error. (The reset handler in the downstream driver > + * does send the full two-byte value, but doesn't check the result). > + */ > + struct i2c_msg msgs[] = { > + { > + .addr = poweroff_restart_client->addr, > + .flags = 0, > + .len = sizeof(buf) - 1, > + .buf = buf, > + }, > + }; > + > + put_unaligned_be16(NTXEC_RESET_VALUE, buf + 1); > + > + res = i2c_transfer(poweroff_restart_client->adapter, msgs, ARRAY_SIZE(msgs)); > + if (res < 0) > + dev_warn(&poweroff_restart_client->dev, > + "Failed to restart (err = %d)\n", res); > + > + return NOTIFY_DONE; > +} > + > +static struct notifier_block ntxec_restart_handler = { > + .notifier_call = ntxec_restart, > + .priority = 128, > +}; > + > +static const struct regmap_config regmap_config = { > + .name = "ntxec", > + .reg_bits = 8, > + .val_bits = 16, > + .cache_type = REGCACHE_NONE, > + .val_format_endian = REGMAP_ENDIAN_BIG, > +}; > + > +static const struct mfd_cell ntxec_subdevices[] = { > + { .name = "ntxec-rtc" }, > + { .name = "ntxec-pwm" }, > +}; > + > +static int ntxec_probe(struct i2c_client *client) > +{ > + struct ntxec *ec; > + unsigned int version; > + int res; > + > + ec = devm_kmalloc(&client->dev, sizeof(*ec), GFP_KERNEL); > + if (!ec) > + return -ENOMEM; > + > + ec->dev = &client->dev; > + > + ec->regmap = devm_regmap_init_i2c(client, ®map_config); > + if (IS_ERR(ec->regmap)) { > + dev_err(ec->dev, "Failed to set up regmap for device\n"); > + return res; > + } > + > + /* Determine the firmware version */ > + res = regmap_read(ec->regmap, NTXEC_REG_VERSION, &version); > + if (res < 0) { > + dev_err(ec->dev, "Failed to read firmware version number\n"); > + return res; > + } > + > + /* Bail out if we encounter an unknown firmware version */ > + switch (version) { > + case 0xd726: /* found in Kobo Aura */ No magic numbers. Please submit a subsequent patch to define this. > + break; > + default: > + dev_err(ec->dev, > + "Netronix embedded controller version %04x is not supported.\n", > + version); > + return -ENODEV; > + } Applied, thanks. -- Lee Jones [李琼斯] Senior Technical Lead - Developer Services Linaro.org │ Open source software for Arm SoCs Follow Linaro: Facebook | Twitter | Blog 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=-20.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,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 83D8EC64E7C for ; Wed, 2 Dec 2020 13:07:00 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 F0FD72223C for ; Wed, 2 Dec 2020 13:06:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F0FD72223C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject: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=Ws6/7uUwLMtJ413s2/djmEJUqH0fl04Ys/M2yuDrq5I=; b=YjxXe+qntqFjprNxYJ+kw6emP NX5x0EvTqBu/YYe+uK2rs6GTIYW9RVUqyIcJfTPTtJxKD5g0FQabUlPKQxIJYCFIsQlhFr8ALjYMx 233P5idnGS4n1eT5g+dJNzR0q+cQg6+sPaRS/qw/6myEiZ4jD6JnFVKcE9WSR6EWVQkgymH5VQsvY fWXhsF62dPL08patXnMSVGnXnFFzL9FfuVO/ee9u73/SBh77PJ3ZIMndLy6lCYjGSGtORMaGR2yp7 e8/dqr4Jv0AaIcIQ5oCLEmyXlFbaFd6bU4b6cNiD54yEIFGPMTxXGg2RUBEZKBYKGOtSSmfoGstkb ps2gcB/4w==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kkRp4-0003bl-Qy; Wed, 02 Dec 2020 13:05:30 +0000 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kkRp0-0003ag-0c for linux-arm-kernel@lists.infradead.org; Wed, 02 Dec 2020 13:05:27 +0000 Received: by mail-wr1-x444.google.com with SMTP id r3so3879029wrt.2 for ; Wed, 02 Dec 2020 05:05:24 -0800 (PST) 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; bh=YF+WlyCt3rq165R9rPhsAR5qsYk6r1RiPW2tzO/YPhE=; b=kxX9wrHZNwlLIJdTxtKvUwuk/et7M4x5wlpSjhdkxmEz1piNL/IeIIXigGIUl9ipjY dIdTNlI4IAELmPStajXBBI+Klk6ii/r0HMOro78xmzlzKgcDUptC4TlsCbnICCG1LW4D sqnfqrSHnT+1OGJzPA6btCamhetgcJo3iPQvqVq8LVzmPPTMGQLF6VuqcOKjcvYGEL1L KiWHTEX6h8AjrKEAv3Z5D3VNdut9VG0waZ9k1XZTtQSZ14qSl0NGIeiTCBj5Mie7kFY3 8IeGal8nhCIgKtpl50HyJ7RBz+qgk/FWV1+tbFCqgiUa8sVSlrevuMAnmbIkxOKg3Bp5 b0dg== 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; bh=YF+WlyCt3rq165R9rPhsAR5qsYk6r1RiPW2tzO/YPhE=; b=SpXN1Q2mKbGWjSOIzg6V0BSIH0xpfVgRShfHyUWBM/4utWvZ/+yusf7hLYaPfMvWe7 9MtPibEfE9sXd8qNDXW5mdqrzlQ0Zm4Gugnfy/Uy72Tu5WHMoubw/dp+S2E8iAO1uHn+ iuERkLsB9SNz+JuJ7Uh5Vyps9Hi7U9ykBs7x6iyUlk5FeZtvLCk6ikhlraq9asJOBhO3 zGrQQiqY+sBb9vF1ATOxzJxNCsjh/BjQ45um0x7Uhyoz2OZ0xui22hs0ML0oB7aEAI/J fm99WaU+iFq8HCIy3tDFHuO+waxiqNzDpU1b1hP+gRfGxRcw0ixgs9V9V15oxqNOsEh/ lf7A== X-Gm-Message-State: AOAM5337WDJ1smz+eMsO/f4H4QMBG3jKd4ev3Mn3GNj420J05v7GP6Jf AWETK8cU4OguAt1AIjFL+xtr+A== X-Google-Smtp-Source: ABdhPJyU7nBUV7L/MOKEYhXF3YQLoNB4SBM8Oj1m3Ptw0bfruV++dLrYVysScV65WUtECftiWqkPEg== X-Received: by 2002:a5d:548b:: with SMTP id h11mr3417874wrv.306.1606914323134; Wed, 02 Dec 2020 05:05:23 -0800 (PST) Received: from dell ([91.110.221.235]) by smtp.gmail.com with ESMTPSA id v64sm2059455wme.25.2020.12.02.05.05.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 05:05:22 -0800 (PST) Date: Wed, 2 Dec 2020 13:05:20 +0000 From: Lee Jones To: Jonathan =?iso-8859-1?Q?Neusch=E4fer?= Subject: Re: [PATCH v4 3/7] mfd: Add base driver for Netronix embedded controller Message-ID: <20201202130520.GL4801@dell> References: <20201122222739.1455132-1-j.neuschaefer@gmx.net> <20201122222739.1455132-4-j.neuschaefer@gmx.net> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20201122222739.1455132-4-j.neuschaefer@gmx.net> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201202_080526_114437_A046FC66 X-CRM114-Status: GOOD ( 47.36 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Alexandre Belloni , Heiko Stuebner , devicetree@vger.kernel.org, Linus Walleij , Thierry Reding , Sam Ravnborg , linux-rtc@vger.kernel.org, Arnd Bergmann , Mauro Carvalho Chehab , Fabio Estevam , Daniel Palmer , Andy Shevchenko , Andreas Kemnade , NXP Linux Team , Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , linux-pwm@vger.kernel.org, Stephan Gerhold , allen , Sascha Hauer , Lubomir Rintel , Mark Brown , linux-arm-kernel@lists.infradead.org, Alessandro Zummo , linux-kernel@vger.kernel.org, Rob Herring , Pengutronix Kernel Team , Heiko Stuebner , Josua Mayer , Shawn Guo , "David S. Miller" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gU3VuLCAyMiBOb3YgMjAyMCwgSm9uYXRoYW4gTmV1c2Now6RmZXIgd3JvdGU6Cgo+IFRoZSBO ZXRyb25peCBlbWJlZGRlZCBjb250cm9sbGVyIGlzIGEgbWljcm9jb250cm9sbGVyIGZvdW5kIGlu IHNvbWUKPiBlLWJvb2sgcmVhZGVycyBkZXNpZ25lZCBieSB0aGUgb3JpZ2luYWwgZGVzaWduIG1h bnVmYWN0dXJlciBOZXRyb25peCwKPiBJbmMuIEl0IGNvbnRhaW5zIFJUQywgYmF0dGVyeSBtb25p dG9yaW5nLCBzeXN0ZW0gcG93ZXIgbWFuYWdlbWVudCwgYW5kCj4gUFdNIGZ1bmN0aW9uYWxpdHku Cj4gCj4gVGhpcyBkcml2ZXIgaW1wbGVtZW50cyByZWdpc3RlciBhY2Nlc3MgYW5kIHZlcnNpb24g ZGV0ZWN0aW9uLgo+IAo+IFRoaXJkLXBhcnR5IGhhcmR3YXJlIGRvY3VtZW50YXRpb24gaXMgYXZh aWxhYmxlIGF0Ogo+IAo+ICAgaHR0cHM6Ly9naXRodWIuY29tL25ldXNjaGFlZmVyL2xpbnV4L3dp a2kvTmV0cm9uaXgtTVNQNDMwLWVtYmVkZGVkLWNvbnRyb2xsZXIKPiAKPiBUaGUgRUMgc3VwcG9y dHMgaW50ZXJydXB0cywgYnV0IHRoZSBkcml2ZXIgZG9lc24ndCBtYWtlIHVzZSBvZiB0aGVtIHNv Cj4gZmFyLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIE5ldXNjaMOkZmVyIDxqLm5ldXNj aGFlZmVyQGdteC5uZXQ+Cj4gLS0tCj4gCj4gdjQ6Cj4gLSBpbmNsdWRlIGFzbS91bmFsaWduZWQu aCBhZnRlciBsaW51eC8qCj4gLSBVc2UgcHV0X3VuYWxpZ25lZF9iZTE2IGluc3RlYWQgb2Ygb3Bl bi1jb2RlZCBiaWctZW5kaWFuIHBhY2tpbmcKPiAtIENsYXJpZnkgdGhhdCAweDkwPTB4ZmYwMCBj YXVzZXMgYW4gZXJyb3IgaW4gZG93bnN0cmVhbSBrZXJuZWwgdG9vCj4gLSBBZGQgY29tbWFzIGFm dGVyIG5vbi1zZW50aW5lbCBwb3NpdGlvbnMKPiAtIG50eGVjLmg6IGRlY2xhcmUgc3RydWN0cyBk ZXZpY2UgYW5kIHJlZ21hcAo+IC0gUmVwbGFjZSBXQVJOX09OIHVzYWdlIGFuZCBhZGQgY29tbWVu dHMgdG8gZXhwbGFpbiBlcnJvcnMKPiAtIFJlcGxhY2UgZGV2X2FsZXJ0IHdpdGggZGV2X3dhcm4g d2hlbiB0aGUgcmVzdWx0IGlzbid0IGhhbmRsZWQKPiAtIENoYW5nZSBzdWJkZXZpY2UgcmVnaXN0 cmF0aW9uIGVycm9yIG1lc3NhZ2UgdG8gZGV2X2Vycgo+IC0gRGVjbGFyZSBudHhlY19yZWc4IGFz IHJldHVybmluZyBfX2JlMTYKPiAtIFJlc3RydWN0dXJlIHZlcnNpb24gZGV0ZWN0aW9uIGNvZGUK PiAtIFNwZWxsIG91dCBPRE0KPiAKPiB2MzoKPiAtIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xr bWwvMjAyMDA5MjQxOTI0NTUuMjQ4NDAwNS00LWoubmV1c2NoYWVmZXJAZ214Lm5ldC8KPiAtIEFk ZCAoRUMpIHRvIENPTkZJR19NRkRfTlRYRUMgcHJvbXB0Cj4gLSBSZWxpY2Vuc2UgYXMgR1BMdjIg b3IgbGF0ZXIKPiAtIEFkZCBlbWFpbCBhZGRyZXNzIHRvIGNvcHlyaWdodCBsaW5lCj4gLSByZW1v dmUgZW1wdHkgbGluZXMgaW4gbnR4ZWNfcG93ZXJvZmYgYW5kIG50eGVjX3Jlc3RhcnQgZnVuY3Rp b25zCj4gLSBTcGxpdCBsb25nIGxpbmVzCj4gLSBSZW1vdmUgJ0luc3RhbGwgLi4uIGhhbmRsZXIn IGNvbW1lbnRzCj4gLSBNYWtlIG5hbWluZyBvZiBzdHJ1Y3QgaTJjX2NsaWVudCBwYXJhbWV0ZXIg Y29uc2lzdGVudAo+IC0gUmVtb3ZlIHN0cnVjdCBudHhlY19pbmZvCj4gLSBSZXdvcmsgJ2RlcGVu ZHMgb24nIGxpbmVzIGluIEtjb25maWcsIGhhcmQtZGVwZW5kIG9uIEkyQywgc2VsZWN0IFJFR01B UF9JMkMgYW5kCj4gICBNRkRfQ09SRQo+IC0gUmVnaXN0ZXIgc3ViZGV2aWNlcyB2aWEgbWZkX2Nl bGxzCj4gLSBNb3ZlIDgtYml0IHJlZ2lzdGVyIGNvbnZlcnNpb24gdG8gbnR4ZWMuaAo+IAo+IHYy Ogo+IC0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC8yMDIwMDkwNTEzMzIzMC4xMDE0NTgx LTQtai5uZXVzY2hhZWZlckBnbXgubmV0Lwo+IC0gQWRkIGEgZGVzY3JpcHRpb24gb2YgdGhlIGRl dmljZSB0byB0aGUgcGF0Y2ggdGV4dAo+IC0gVW5pZnkgc3BlbGxpbmcgYXMgJ05ldHJvbml4IGVt YmVkZGVkIGNvbnRyb2xsZXInLgo+ICAgJ05ldHJvbml4JyBpcyB0aGUgcHJvcGVyIG5hbWUgb2Yg dGhlIG1hbnVmYWN0dXJlciwgYnV0ICdlbWJlZGRlZCBjb250cm9sbGVyJwo+ICAgaXMganVzdCBh IGxhYmVsIHRoYXQgSSBoYXZlIGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuCj4gLSBTd2l0Y2ggdG8g cmVnbWFwLCBhdm9pZCByZWdtYXAgdXNlIGluIHBvd2Vyb2ZmIGFuZCByZWJvb3QgaGFuZGxlcnMu Cj4gICBJbnNwaXJlZCBieSBjZjg0ZGMwYmI0MGY0ICgibWZkOiBybjV0NjE4OiBNYWtlIHJlc3Rh cnQgaGFuZGxlciBhdG9taWMgc2FmZSIpCj4gLSBVc2UgYSBsaXN0IG9mIGtub3duLXdvcmtpbmcg ZmlybXdhcmUgdmVyc2lvbnMgaW5zdGVhZCBvZiBjaGVja2luZyBmb3IgYQo+ICAga25vd24taW5j b21wYXRpYmxlIHZlcnNpb24KPiAtIFByZWZpeCByZWdpc3RlcnMgd2l0aCBOVFhFQ19SRUdfCj4g LSBEZWZpbmUgcmVnaXN0ZXIgdmFsdWVzIGFzIGNvbnN0YW50cwo+IC0gVmFyaW91cyBzdHlsZSBj bGVhbnVwcyBhcyBzdWdnZXN0ZWQgYnkgTGVlIEpvbmVzCj4gLSBEb24ndCBhbGlnbiA9IHNpZ25z IGluIHN0cnVjdCBpbml0aWFsaXplcnMgW1V3ZSBLbGVpbmUtS8O2bmlnXQo+IC0gRG9uJ3QgdXNl IGRldl9kYmcgZm9yIGFuIGVycm9yIG1lc3NhZ2UKPiAtIEV4cGxhaW4gc2xlZXAgaW4gcG93ZXJv ZmYgaGFuZGxlcgo+IC0gUmVtb3ZlIChzdHJ1Y3QgbnR4ZWMpLmNsaWVudAo+IC0gU3dpdGNoIHRv IC5wcm9iZV9uZXcgaW4gaTJjIGRyaXZlcgo+IC0gQWRkIC5yZW1vdmUgY2FsbGJhY2sKPiAtIE1h a2UgQ09ORklHX01GRF9OVFhFQyBhIHRyaXN0YXRlIG9wdGlvbgo+IC0tLQo+ICBkcml2ZXJzL21m ZC9LY29uZmlnICAgICAgIHwgIDExICsrCj4gIGRyaXZlcnMvbWZkL01ha2VmaWxlICAgICAgfCAg IDEgKwo+ICBkcml2ZXJzL21mZC9udHhlYy5jICAgICAgIHwgMjE2ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4gIGluY2x1ZGUvbGludXgvbWZkL250eGVjLmggfCAgMzQg KysrKysrCj4gIDQgZmlsZXMgY2hhbmdlZCwgMjYyIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvbWZkL250eGVjLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1 ZGUvbGludXgvbWZkL250eGVjLmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZp ZyBiL2RyaXZlcnMvbWZkL0tjb25maWcKPiBpbmRleCA4Yjk5YTEzNjY5YmZjLi5kOTY3NTFmODg0 ZGM2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWZkL0tjb25maWcKPiArKysgYi9kcml2ZXJzL21m ZC9LY29uZmlnCj4gQEAgLTk5MCw2ICs5OTAsMTcgQEAgY29uZmlnIE1GRF9WSVBFUkJPQVJECj4g IAkgIFlvdSBuZWVkIHRvIHNlbGVjdCB0aGUgbWZkIGNlbGwgZHJpdmVycyBzZXBhcmF0ZWx5Lgo+ ICAJICBUaGUgZHJpdmVycyBkbyBub3Qgc3VwcG9ydCBhbGwgZmVhdHVyZXMgdGhlIGJvYXJkIGV4 cG9zZXMuCj4gCj4gK2NvbmZpZyBNRkRfTlRYRUMKPiArCXRyaXN0YXRlICJOZXRyb25peCBlbWJl ZGRlZCBjb250cm9sbGVyIChFQykiCj4gKwlkZXBlbmRzIG9uIE9GIHx8IENPTVBJTEVfVEVTVAo+ ICsJZGVwZW5kcyBvbiBJMkMKPiArCXNlbGVjdCBSRUdNQVBfSTJDCj4gKwlzZWxlY3QgTUZEX0NP UkUKPiArCWhlbHAKPiArCSAgU2F5IHllcyBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhl IGVtYmVkZGVkIGNvbnRyb2xsZXIgZm91bmQgaW4KPiArCSAgY2VydGFpbiBlLWJvb2sgcmVhZGVy cyBkZXNpZ25lZCBieSB0aGUgb3JpZ2luYWwgZGVzaWduIG1hbnVmYWN0dXJlcgo+ICsJICBOZXRy b25peC4KPiArCj4gIGNvbmZpZyBNRkRfUkVUVQo+ICAJdHJpc3RhdGUgIk5va2lhIFJldHUgYW5k IFRhaHZvIG11bHRpLWZ1bmN0aW9uIGRldmljZSIKPiAgCXNlbGVjdCBNRkRfQ09SRQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCj4gaW5k ZXggMTc4MDAxOWQyNDc0OC4uODE1Yzk5Yjg0MDE5ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21m ZC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCj4gQEAgLTIxOCw2ICsyMTgs NyBAQCBvYmotJChDT05GSUdfTUZEX0lOVEVMX01TSUMpCSs9IGludGVsX21zaWMubwo+ICBvYmot JChDT05GSUdfTUZEX0lOVEVMX1BNQ19CWFQpCSs9IGludGVsX3BtY19ieHQubwo+ICBvYmotJChD T05GSUdfTUZEX1BBTE1BUykJKz0gcGFsbWFzLm8KPiAgb2JqLSQoQ09ORklHX01GRF9WSVBFUkJP QVJEKSAgICArPSB2aXBlcmJvYXJkLm8KPiArb2JqLSQoQ09ORklHX01GRF9OVFhFQykJCSs9IG50 eGVjLm8KPiAgb2JqLSQoQ09ORklHX01GRF9SQzVUNTgzKQkrPSByYzV0NTgzLm8gcmM1dDU4My1p cnEubwo+ICBvYmotJChDT05GSUdfTUZEX1JLODA4KQkJKz0gcms4MDgubwo+ICBvYmotJChDT05G SUdfTUZEX1JONVQ2MTgpCSs9IHJuNXQ2MTgubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9u dHhlYy5jIGIvZHJpdmVycy9tZmQvbnR4ZWMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMDAwMDAwMC4uYzE1MTA3MTFkNzM2Mwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL21mZC9udHhlYy5jCj4gQEAgLTAsMCArMSwyMTYgQEAKPiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKPiArLyoKPiArICogVGhlIE5ldHJvbml4IGVt YmVkZGVkIGNvbnRyb2xsZXIgaXMgYSBtaWNyb2NvbnRyb2xsZXIgZm91bmQgaW4gc29tZQo+ICsg KiBlLWJvb2sgcmVhZGVycyBkZXNpZ25lZCBieSB0aGUgb3JpZ2luYWwgZGVzaWduIG1hbnVmYWN0 dXJlciBOZXRyb25peCwgSW5jLgo+ICsgKiBJdCBjb250YWlucyBSVEMsIGJhdHRlcnkgbW9uaXRv cmluZywgc3lzdGVtIHBvd2VyIG1hbmFnZW1lbnQsIGFuZCBQV00KPiArICogZnVuY3Rpb25hbGl0 eS4KPiArICoKPiArICogVGhpcyBkcml2ZXIgaW1wbGVtZW50cyByZWdpc3RlciBhY2Nlc3MsIHZl cnNpb24gZGV0ZWN0aW9uLCBhbmQgc3lzdGVtCj4gKyAqIHBvd2VyLW9mZi9yZXNldC4KPiArICoK PiArICogQ29weXJpZ2h0IDIwMjAgSm9uYXRoYW4gTmV1c2Now6RmZXIgPGoubmV1c2NoYWVmZXJA Z214Lm5ldD4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L2Vycm5vLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiArI2luY2x1ZGUg PGxpbnV4L21mZC9jb3JlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tZmQvbnR4ZWMuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcG0uaD4KPiArI2luY2x1 ZGUgPGxpbnV4L3JlYm9vdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgo+ICsKPiAr I2RlZmluZSBOVFhFQ19SRUdfVkVSU0lPTgkweDAwCj4gKyNkZWZpbmUgTlRYRUNfUkVHX1BPV0VS T0ZGCTB4NTAKPiArI2RlZmluZSBOVFhFQ19SRUdfUE9XRVJLRUVQCTB4NzAKPiArI2RlZmluZSBO VFhFQ19SRUdfUkVTRVQJCTB4OTAKPiArCj4gKyNkZWZpbmUgTlRYRUNfUE9XRVJPRkZfVkFMVUUJ MHgwMTAwCj4gKyNkZWZpbmUgTlRYRUNfUE9XRVJLRUVQX1ZBTFVFCTB4MDgwMAo+ICsjZGVmaW5l IE5UWEVDX1JFU0VUX1ZBTFVFCTB4ZmYwMAo+ICsKPiArc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50 ICpwb3dlcm9mZl9yZXN0YXJ0X2NsaWVudDsKPiArCj4gK3N0YXRpYyB2b2lkIG50eGVjX3Bvd2Vy b2ZmKHZvaWQpCj4gK3sKPiArCWludCByZXM7Cj4gKwl1OCBidWZbM10gPSB7IE5UWEVDX1JFR19Q T1dFUk9GRiB9Owo+ICsJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gewo+ICsJCXsKPiArCQkJLmFk ZHIgPSBwb3dlcm9mZl9yZXN0YXJ0X2NsaWVudC0+YWRkciwKPiArCQkJLmZsYWdzID0gMCwKPiAr CQkJLmxlbiA9IHNpemVvZihidWYpLAo+ICsJCQkuYnVmID0gYnVmLAo+ICsJCX0sCj4gKwl9Owo+ ICsKPiArCXB1dF91bmFsaWduZWRfYmUxNihOVFhFQ19QT1dFUk9GRl9WQUxVRSwgYnVmICsgMSk7 Cj4gKwo+ICsJcmVzID0gaTJjX3RyYW5zZmVyKHBvd2Vyb2ZmX3Jlc3RhcnRfY2xpZW50LT5hZGFw dGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKPiArCWlmIChyZXMgPCAwKQo+ICsJCWRldl93 YXJuKCZwb3dlcm9mZl9yZXN0YXJ0X2NsaWVudC0+ZGV2LAo+ICsJCQkgIkZhaWxlZCB0byBwb3dl ciBvZmYgKGVyciA9ICVkKVxuIiwgcmVzKTsKPiArCj4gKwkvKgo+ICsJICogVGhlIHRpbWUgZnJv bSB0aGUgcmVnaXN0ZXIgd3JpdGUgdW50aWwgdGhlIGhvc3QgQ1BVIGlzIHBvd2VyZWQgb2ZmCj4g KwkgKiBoYXMgYmVlbiBvYnNlcnZlZCB0byBiZSBhYm91dCAyLjUgdG8gMyBzZWNvbmRzLiBTbGVl cCBsb25nIGVub3VnaCB0bwo+ICsJICogc2FmZWx5IGF2b2lkIHJldHVybmluZyBmcm9tIHRoZSBw b3dlcm9mZiBoYW5kbGVyLgo+ICsJICovCj4gKwltc2xlZXAoNTAwMCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgbnR4ZWNfcmVzdGFydChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAo+ICsJCQkg dW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCj4gK3sKPiArCWludCByZXM7Cj4gKwl1 OCBidWZbM10gPSB7IE5UWEVDX1JFR19SRVNFVCB9Owo+ICsJLyoKPiArCSAqIE5PVEU6IFRoZSBs b3dlciBoYWxmIG9mIHRoZSByZXNldCB2YWx1ZSBpcyBub3Qgc2VudCwgYmVjYXVzZSBzZW5kaW5n Cj4gKwkgKiBpdCBjYXVzZXMgYW4gSTJDIGVycm9yLiAoVGhlIHJlc2V0IGhhbmRsZXIgaW4gdGhl IGRvd25zdHJlYW0gZHJpdmVyCj4gKwkgKiBkb2VzIHNlbmQgdGhlIGZ1bGwgdHdvLWJ5dGUgdmFs dWUsIGJ1dCBkb2Vzbid0IGNoZWNrIHRoZSByZXN1bHQpLgo+ICsJICovCj4gKwlzdHJ1Y3QgaTJj X21zZyBtc2dzW10gPSB7Cj4gKwkJewo+ICsJCQkuYWRkciA9IHBvd2Vyb2ZmX3Jlc3RhcnRfY2xp ZW50LT5hZGRyLAo+ICsJCQkuZmxhZ3MgPSAwLAo+ICsJCQkubGVuID0gc2l6ZW9mKGJ1ZikgLSAx LAo+ICsJCQkuYnVmID0gYnVmLAo+ICsJCX0sCj4gKwl9Owo+ICsKPiArCXB1dF91bmFsaWduZWRf YmUxNihOVFhFQ19SRVNFVF9WQUxVRSwgYnVmICsgMSk7Cj4gKwo+ICsJcmVzID0gaTJjX3RyYW5z ZmVyKHBvd2Vyb2ZmX3Jlc3RhcnRfY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1z Z3MpKTsKPiArCWlmIChyZXMgPCAwKQo+ICsJCWRldl93YXJuKCZwb3dlcm9mZl9yZXN0YXJ0X2Ns aWVudC0+ZGV2LAo+ICsJCQkgIkZhaWxlZCB0byByZXN0YXJ0IChlcnIgPSAlZClcbiIsIHJlcyk7 Cj4gKwo+ICsJcmV0dXJuIE5PVElGWV9ET05FOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IG5v dGlmaWVyX2Jsb2NrIG50eGVjX3Jlc3RhcnRfaGFuZGxlciA9IHsKPiArCS5ub3RpZmllcl9jYWxs ID0gbnR4ZWNfcmVzdGFydCwKPiArCS5wcmlvcml0eSA9IDEyOCwKPiArfTsKPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0gewo+ICsJLm5hbWUg PSAibnR4ZWMiLAo+ICsJLnJlZ19iaXRzID0gOCwKPiArCS52YWxfYml0cyA9IDE2LAo+ICsJLmNh Y2hlX3R5cGUgPSBSRUdDQUNIRV9OT05FLAo+ICsJLnZhbF9mb3JtYXRfZW5kaWFuID0gUkVHTUFQ X0VORElBTl9CSUcsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1mZF9jZWxsIG50 eGVjX3N1YmRldmljZXNbXSA9IHsKPiArCXsgLm5hbWUgPSAibnR4ZWMtcnRjIiB9LAo+ICsJeyAu bmFtZSA9ICJudHhlYy1wd20iIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IG50eGVjX3Byb2Jl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCBudHhlYyAqZWM7Cj4g Kwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsKPiArCWludCByZXM7Cj4gKwo+ICsJZWMgPSBkZXZtX2tt YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKmVjKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWVj KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWVjLT5kZXYgPSAmY2xpZW50LT5kZXY7Cj4g Kwo+ICsJZWMtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgJnJlZ21hcF9j b25maWcpOwo+ICsJaWYgKElTX0VSUihlYy0+cmVnbWFwKSkgewo+ICsJCWRldl9lcnIoZWMtPmRl diwgIkZhaWxlZCB0byBzZXQgdXAgcmVnbWFwIGZvciBkZXZpY2VcbiIpOwo+ICsJCXJldHVybiBy ZXM7Cj4gKwl9Cj4gKwo+ICsJLyogRGV0ZXJtaW5lIHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCj4g KwlyZXMgPSByZWdtYXBfcmVhZChlYy0+cmVnbWFwLCBOVFhFQ19SRUdfVkVSU0lPTiwgJnZlcnNp b24pOwo+ICsJaWYgKHJlcyA8IDApIHsKPiArCQlkZXZfZXJyKGVjLT5kZXYsICJGYWlsZWQgdG8g cmVhZCBmaXJtd2FyZSB2ZXJzaW9uIG51bWJlclxuIik7Cj4gKwkJcmV0dXJuIHJlczsKPiArCX0K PiArCj4gKwkvKiBCYWlsIG91dCBpZiB3ZSBlbmNvdW50ZXIgYW4gdW5rbm93biBmaXJtd2FyZSB2 ZXJzaW9uICovCj4gKwlzd2l0Y2ggKHZlcnNpb24pIHsKPiArCWNhc2UgMHhkNzI2OiAvKiBmb3Vu ZCBpbiBLb2JvIEF1cmEgKi8KCk5vIG1hZ2ljIG51bWJlcnMuCgpQbGVhc2Ugc3VibWl0IGEgc3Vi c2VxdWVudCBwYXRjaCB0byBkZWZpbmUgdGhpcy4KCj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ ICsJCWRldl9lcnIoZWMtPmRldiwKPiArCQkJIk5ldHJvbml4IGVtYmVkZGVkIGNvbnRyb2xsZXIg dmVyc2lvbiAlMDR4IGlzIG5vdCBzdXBwb3J0ZWQuXG4iLAo+ICsJCQl2ZXJzaW9uKTsKPiArCQly ZXR1cm4gLUVOT0RFVjsKPiArCX0KCgpBcHBsaWVkLCB0aGFua3MuCgotLSAKTGVlIEpvbmVzIFvm nY7nkLzmlq9dClNlbmlvciBUZWNobmljYWwgTGVhZCAtIERldmVsb3BlciBTZXJ2aWNlcwpMaW5h cm8ub3JnIOKUgiBPcGVuIHNvdXJjZSBzb2Z0d2FyZSBmb3IgQXJtIFNvQ3MKRm9sbG93IExpbmFy bzogRmFjZWJvb2sgfCBUd2l0dGVyIHwgQmxvZwoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgt YXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=