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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1C071C00140 for ; Wed, 10 Aug 2022 11:27:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232009AbiHJL1e (ORCPT ); Wed, 10 Aug 2022 07:27:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55324 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229816AbiHJL1d (ORCPT ); Wed, 10 Aug 2022 07:27:33 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B75B661132; Wed, 10 Aug 2022 04:27:31 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 51E7661140; Wed, 10 Aug 2022 11:27:31 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 44E7EC433D6; Wed, 10 Aug 2022 11:27:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1660130850; bh=z/OKIcAzTBcdMX9iK6IKj9KPZAAUaEsnnfpMyrHpeSs=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=LrypvFqT+Y9bhTA16v1hrCarSogPTCwgAlPsvQvGCLqykm196bOo1XT2fwUZZywWt OMBGxnJ590hLWCvwWWUzknzpVP0GglGacZWqk3gKq05vUq1fKsKxLyKn1MPlxbw2Ih rMg71aIIfGLl3SGUtnFuMTaHH9fz6gGcLhlE9rFpMyGTK06sCVg/cKr8k+/TfSvyRv eG+nznF7TegAwUinc4h+Br2rQ2H5+VjoTnacgyp1A7aWbtaBl58o39xZdQ7wFEqXoi r7J28l4IJ/XOKp/tPZ2iNjqSZF7JWgNe6vbGv2S+ZjfYTUasAcqnySKgrJAfuE9GdG DjljcRwdOBUgQ== Date: Wed, 10 Aug 2022 12:27:25 +0100 From: Lee Jones To: Matt Ranostay Cc: nm@ti.com, linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Keerthy Subject: Re: [PATCH 2/4] MFD: TPS6594x: Add new mfd device for TPS6594x PMIC Message-ID: References: <20220805064352.793918-1-mranostay@ti.com> <20220805064352.793918-3-mranostay@ti.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220805064352.793918-3-mranostay@ti.com> Precedence: bulk List-ID: X-Mailing-List: linux-rtc@vger.kernel.org On Thu, 04 Aug 2022, Matt Ranostay wrote: > From: Keerthy > > The TPS6594x chip is a PMIC, and contains the following components: > > - Regulators > - GPIO controller > - RTC > > However initially only RTC is supported. > > Signed-off-by: Keerthy > Signed-off-by: Matt Ranostay > --- > drivers/mfd/Kconfig | 14 +++++ > drivers/mfd/Makefile | 1 + > drivers/mfd/tps6594x.c | 106 +++++++++++++++++++++++++++++++++++ > include/linux/mfd/tps6594x.h | 66 ++++++++++++++++++++++ > 4 files changed, 187 insertions(+) > create mode 100644 drivers/mfd/tps6594x.c > create mode 100644 include/linux/mfd/tps6594x.h > > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig > index abb58ab1a1a4..cfb5b3d66b76 100644 > --- a/drivers/mfd/Kconfig > +++ b/drivers/mfd/Kconfig > @@ -1547,6 +1547,20 @@ config MFD_TI_LP873X > This driver can also be built as a module. If so, the module > will be called lp873x. > > +config MFD_TPS6594X > + tristate "TI TPS6594X Power Management IC" > + depends on I2C > + select MFD_CORE > + select REGMAP_I2C > + help > + If you say yes here then you get support for the TPS6594X series of > + Power Management Integrated Circuits (PMIC). > + These include voltage regulators, RTS, configurable > + General Purpose Outputs (GPO) that are used in portable devices. > + > + This driver can also be built as a module. If so, the module > + will be called tps7694x. > + > config MFD_TI_LP87565 > tristate "TI LP87565 Power Management IC" > depends on I2C && OF > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile > index 858cacf659d6..7ff6a8a57d55 100644 > --- a/drivers/mfd/Makefile > +++ b/drivers/mfd/Makefile > @@ -105,6 +105,7 @@ obj-$(CONFIG_MFD_TPS65910) += tps65910.o > obj-$(CONFIG_MFD_TPS65912) += tps65912-core.o > obj-$(CONFIG_MFD_TPS65912_I2C) += tps65912-i2c.o > obj-$(CONFIG_MFD_TPS65912_SPI) += tps65912-spi.o > +obj-$(CONFIG_MFD_TPS6594X) += tps6594x.o > obj-$(CONFIG_MENELAUS) += menelaus.o > > obj-$(CONFIG_TWL4030_CORE) += twl-core.o twl4030-irq.o twl6030-irq.o > diff --git a/drivers/mfd/tps6594x.c b/drivers/mfd/tps6594x.c > new file mode 100644 > index 000000000000..519162cc1fbe > --- /dev/null > +++ b/drivers/mfd/tps6594x.c > @@ -0,0 +1,106 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * tps6594x.c -- TI TPS6594x chip family multi-function driver No filenames in comments please. Also, there are too many spaces around the '--'. It's not a "multi-function driver" it's a PMIC Core driver. > + * Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/ > + * > + * Author: Keerthy > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include Alphabetical. > +#include > + > +static const struct regmap_config tps6594x_regmap_config = { > + .reg_bits = 8, > + .val_bits = 8, > + .max_register = TPS6594X_REG_MAX, > +}; > + > +static const struct mfd_cell tps6594x_cells[] = { > + { .name = "tps6594x-rtc", }, > +}; Where are the rest of the devices? This is not an MFD with only one device. > +static struct tps6594x *tps; > + > +static void tps6594x_power_off(void) > +{ > + regmap_write(tps->regmap, TPS6594X_FSM_NSLEEP_TRIGGERS, 0x3); > + regmap_write(tps->regmap, TPS6594X_INT_STARTUP, 0xff); > + regmap_write(tps->regmap, TPS6594X_INT_MISC, 0xff); > + regmap_write(tps->regmap, TPS6594X_CONFIG_1, 0xc0); > + regmap_write(tps->regmap, TPS6594X_FSM_I2C_TRIGGERS, 0x1); No magic numbers please. Define all of those values. > +} > + > +static int tps6594x_probe(struct i2c_client *client, > + const struct i2c_device_id *ids) > +{ > + struct tps6594x *tps6594; *ddata is preferred. > + int ret; > + unsigned int otpid; > + struct device_node *node = client->dev.of_node; Re-order these - usually 'structs' go first, then ints. > + tps6594 = devm_kzalloc(&client->dev, sizeof(*tps6594), GFP_KERNEL); > + if (!tps6594) > + return -ENOMEM; > + > + tps6594->dev = &client->dev; > + > + tps6594->regmap = devm_regmap_init_i2c(client, &tps6594x_regmap_config); > + if (IS_ERR(tps6594->regmap)) { > + ret = PTR_ERR(tps6594->regmap); > + dev_err(tps6594->dev, > + "Failed to initialize register map: %d\n", ret); > + return ret; > + } > + > + ret = regmap_read(tps6594->regmap, TPS6594X_REG_DEV_REV, &otpid); > + if (ret) { > + dev_err(tps6594->dev, "Failed to read OTP ID\n"); > + return ret; > + } > + > + tps6594->rev = otpid; > + > + i2c_set_clientdata(client, tps6594); > + > + ret = mfd_add_devices(tps6594->dev, PLATFORM_DEVID_AUTO, tps6594x_cells, > + ARRAY_SIZE(tps6594x_cells), NULL, 0, NULL); > + > + tps = tps6594; > + if (of_property_read_bool(node, "ti,system-power-controller")) > + pm_power_off = tps6594x_power_off; You setting this up even if mfd_add_devices() fails? Seems wrong. > + return ret; > +} > + > +static const struct of_device_id of_tps6594x_match_table[] = { > + { .compatible = "ti,tps6594x", }, > + {} > +}; > +MODULE_DEVICE_TABLE(of, of_tps6594x_match_table); > + > +static const struct i2c_device_id tps6594x_id_table[] = { > + { "tps6594x", 0 }, > + { }, > +}; > +MODULE_DEVICE_TABLE(i2c, tps6594x_id_table); Remove this and use .probe_new instead please. > +static struct i2c_driver tps6594x_driver = { > + .driver = { > + .name = "tps6594x", > + .of_match_table = of_tps6594x_match_table, > + }, > + .probe = tps6594x_probe, > + .id_table = tps6594x_id_table, > +}; > +module_i2c_driver(tps6594x_driver); > + > +MODULE_AUTHOR("J Keerthy "); > +MODULE_DESCRIPTION("TPS6594X chip family Multi-Function Device driver"); Not an MFD. > +MODULE_LICENSE("GPL"); > diff --git a/include/linux/mfd/tps6594x.h b/include/linux/mfd/tps6594x.h > new file mode 100644 > index 000000000000..41349f96f013 > --- /dev/null > +++ b/include/linux/mfd/tps6594x.h > @@ -0,0 +1,66 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > +/* > + * tps6594x.h -- TI TPS6594x No filenames. > + * Copyright (C) 2016 Texas Instruments Incorporated - https://www.ti.com/ 2016? > + */ > + > +#ifndef __LINUX_MFD_TPS6594X_H > +#define __LINUX_MFD_TPS6594X_H Any reason go keep the LINUX part? > +#include > + > +/* TPS6594x chip id list */ "ID" > +#define TPS6594X 0x00 > + > +/* All register addresses */ > +#define TPS6594X_REG_DEV_REV 0x01 > +#define TPS6594X_INT_STARTUP 0x65 > +#define TPS6594X_INT_MISC 0x66 > +#define TPS6594X_CONFIG_1 0x7d > +#define TPS6594X_FSM_I2C_TRIGGERS 0x85 > +#define TPS6594X_FSM_NSLEEP_TRIGGERS 0x86 > + > +#define TPS6594X_RTC_SECONDS 0xb5 > +#define TPS6594X_RTC_MINUTES 0xb6 > +#define TPS6594X_RTC_HOURS 0xb7 > +#define TPS6594X_RTC_DAYS 0xb8 > +#define TPS6594X_RTC_MONTHS 0xb9 > +#define TPS6594X_RTC_YEARS 0xba > +#define TPS6594X_RTC_WEEKS 0xbb > +#define TPS6594X_ALARM_SECONDS 0xbc > +#define TPS6594X_ALARM_MINUTES 0xbd > +#define TPS6594X_ALARM_HOURS 0xbe > +#define TPS6594X_ALARM_DAYS 0xbf > +#define TPS6594X_ALARM_MONTHS 0xc0 > +#define TPS6594X_ALARM_YEARS 0xc1 > +#define TPS6594X_RTC_CTRL_1 0xc2 > +#define TPS6594X_RTC_CTRL_2 0xc3 > +#define TPS6594X_RTC_STATUS 0xc4 > +#define TPS6594X_RTC_INTERRUPTS 0xc5 > +#define TPS6594X_REG_MAX 0xd0 > + > +/* Register field definitions */ > +#define TPS6594X_DEV_REV_DEV_ID 0xff > + > +#define TPS6594X_RTC_CTRL_REG_GET_TIME BIT(6) > +#define TPS6594X_RTC_CTRL_REG_STOP_RTC BIT(0) > +#define TPS6594X_RTC_INTERRUPTS_REG_IT_ALARM BIT(3) > + > +#define TPS6594X_RTC_STATUS_RUN BIT(1) > + > +/** > + * struct tps6594x - state holder for the tps6594x driver > + * @dev: struct device pointer for MFD device > + * @rev: revision of the tps6594x > + * @lock: lock guarding the data structure > + * @regmap: register map of the tps6594x PMIC > + * > + * Device data may be used to access the TPS6594X chip > + */ > +struct tps6594x { > + struct device *dev; > + u8 rev; > + struct regmap *regmap; > +}; Please test compile with W=1 enabled and fix the issues. > +#endif /* __LINUX_MFD_TPS6594X_H */ -- 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 BD9C6C00140 for ; Wed, 10 Aug 2022 11:28:51 +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=PGxX3rWDUWrmzFXAHmTCiZRf3EVuWTLBj5xef57mEvo=; b=JEJxlBYDobwzDk 6KOpq0uDT63eAl6v9R5wlfPGrfQH3XgwYteIdtQfRUE2lQuU+xAFgtwz442tcmQbt02m1hb1Uus0A tg69iVGsZlMbSeeml1ExF/FBDnjtJ8l2xzAry5xEFq00qvk2ZXBfeUSbuGqsYuVRQ5wQkKLZb3wB4 xvOvk0gf3ZY2c3Y3ikCfbqABR4cNLTvW6tzvYJW2unjvoix1P4soqvr0PYpqykKONbHrocw3p2TmR 6QKAWNK2sGaGM9Ef0EI6TBiYP4g3NRrubO1lGz3p4Yvp0ahQt6R/3QWH9AmdUerta7ACSvpATEvUP IXhglhOL8dJDV4oRoTjg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oLjsA-00BZhM-11; Wed, 10 Aug 2022 11:27:38 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oLjs5-00BZf8-Lz for linux-arm-kernel@lists.infradead.org; Wed, 10 Aug 2022 11:27:36 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 0DDBDB81BAF; Wed, 10 Aug 2022 11:27:32 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 44E7EC433D6; Wed, 10 Aug 2022 11:27:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1660130850; bh=z/OKIcAzTBcdMX9iK6IKj9KPZAAUaEsnnfpMyrHpeSs=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=LrypvFqT+Y9bhTA16v1hrCarSogPTCwgAlPsvQvGCLqykm196bOo1XT2fwUZZywWt OMBGxnJ590hLWCvwWWUzknzpVP0GglGacZWqk3gKq05vUq1fKsKxLyKn1MPlxbw2Ih rMg71aIIfGLl3SGUtnFuMTaHH9fz6gGcLhlE9rFpMyGTK06sCVg/cKr8k+/TfSvyRv eG+nznF7TegAwUinc4h+Br2rQ2H5+VjoTnacgyp1A7aWbtaBl58o39xZdQ7wFEqXoi r7J28l4IJ/XOKp/tPZ2iNjqSZF7JWgNe6vbGv2S+ZjfYTUasAcqnySKgrJAfuE9GdG DjljcRwdOBUgQ== Date: Wed, 10 Aug 2022 12:27:25 +0100 From: Lee Jones To: Matt Ranostay Cc: nm@ti.com, linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Keerthy Subject: Re: [PATCH 2/4] MFD: TPS6594x: Add new mfd device for TPS6594x PMIC Message-ID: References: <20220805064352.793918-1-mranostay@ti.com> <20220805064352.793918-3-mranostay@ti.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20220805064352.793918-3-mranostay@ti.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220810_042734_083687_6F45B149 X-CRM114-Status: GOOD ( 36.76 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 T24gVGh1LCAwNCBBdWcgMjAyMiwgTWF0dCBSYW5vc3RheSB3cm90ZToKCj4gRnJvbTogS2VlcnRo eSA8ai1rZWVydGh5QHRpLmNvbT4KPiAKPiBUaGUgVFBTNjU5NHggY2hpcCBpcyBhIFBNSUMsIGFu ZCBjb250YWlucyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6Cj4gCj4gLSBSZWd1bGF0b3JzCj4g LSBHUElPIGNvbnRyb2xsZXIKPiAtIFJUQwo+IAo+IEhvd2V2ZXIgaW5pdGlhbGx5IG9ubHkgUlRD IGlzIHN1cHBvcnRlZC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBLZWVydGh5IDxqLWtlZXJ0aHlAdGku Y29tPgo+IFNpZ25lZC1vZmYtYnk6IE1hdHQgUmFub3N0YXkgPG1yYW5vc3RheUB0aS5jb20+Cj4g LS0tCj4gIGRyaXZlcnMvbWZkL0tjb25maWcgICAgICAgICAgfCAgMTQgKysrKysKPiAgZHJpdmVy cy9tZmQvTWFrZWZpbGUgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvbWZkL3RwczY1OTR4LmMg ICAgICAgfCAxMDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVk ZS9saW51eC9tZmQvdHBzNjU5NHguaCB8ICA2NiArKysrKysrKysrKysrKysrKysrKysrCj4gIDQg ZmlsZXMgY2hhbmdlZCwgMTg3IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbWZkL3RwczY1OTR4LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgv bWZkL3RwczY1OTR4LmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2Ry aXZlcnMvbWZkL0tjb25maWcKPiBpbmRleCBhYmI1OGFiMWExYTQuLmNmYjViM2Q2NmI3NiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9tZmQvS2NvbmZp Zwo+IEBAIC0xNTQ3LDYgKzE1NDcsMjAgQEAgY29uZmlnIE1GRF9USV9MUDg3M1gKPiAgCSAgVGhp cyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxl Cj4gIAkgIHdpbGwgYmUgY2FsbGVkIGxwODczeC4KPiAgCj4gK2NvbmZpZyBNRkRfVFBTNjU5NFgK PiArCXRyaXN0YXRlICJUSSBUUFM2NTk0WCBQb3dlciBNYW5hZ2VtZW50IElDIgo+ICsJZGVwZW5k cyBvbiBJMkMKPiArCXNlbGVjdCBNRkRfQ09SRQo+ICsJc2VsZWN0IFJFR01BUF9JMkMKPiArCWhl bHAKPiArCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB0aGVuIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhl IFRQUzY1OTRYIHNlcmllcyBvZgo+ICsJICBQb3dlciBNYW5hZ2VtZW50IEludGVncmF0ZWQgQ2ly Y3VpdHMgKFBNSUMpLgo+ICsJICBUaGVzZSBpbmNsdWRlIHZvbHRhZ2UgcmVndWxhdG9ycywgUlRT LCBjb25maWd1cmFibGUKPiArCSAgR2VuZXJhbCBQdXJwb3NlIE91dHB1dHMgKEdQTykgdGhhdCBh cmUgdXNlZCBpbiBwb3J0YWJsZSBkZXZpY2VzLgo+ICsKPiArCSAgVGhpcyBkcml2ZXIgY2FuIGFs c28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCj4gKwkgIHdpbGwgYmUg Y2FsbGVkIHRwczc2OTR4Lgo+ICsKPiAgY29uZmlnIE1GRF9USV9MUDg3NTY1Cj4gIAl0cmlzdGF0 ZSAiVEkgTFA4NzU2NSBQb3dlciBNYW5hZ2VtZW50IElDIgo+ICAJZGVwZW5kcyBvbiBJMkMgJiYg T0YKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvTWFrZWZpbGUgYi9kcml2ZXJzL21mZC9NYWtl ZmlsZQo+IGluZGV4IDg1OGNhY2Y2NTlkNi4uN2ZmNmE4YTU3ZDU1IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvbWZkL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKPiBAQCAtMTA1 LDYgKzEwNSw3IEBAIG9iai0kKENPTkZJR19NRkRfVFBTNjU5MTApCSs9IHRwczY1OTEwLm8KPiAg b2JqLSQoQ09ORklHX01GRF9UUFM2NTkxMikJKz0gdHBzNjU5MTItY29yZS5vCj4gIG9iai0kKENP TkZJR19NRkRfVFBTNjU5MTJfSTJDKQkrPSB0cHM2NTkxMi1pMmMubwo+ICBvYmotJChDT05GSUdf TUZEX1RQUzY1OTEyX1NQSSkgICs9IHRwczY1OTEyLXNwaS5vCj4gK29iai0kKENPTkZJR19NRkRf VFBTNjU5NFgpCSs9IHRwczY1OTR4Lm8KPiAgb2JqLSQoQ09ORklHX01FTkVMQVVTKQkJKz0gbWVu ZWxhdXMubwo+ICAKPiAgb2JqLSQoQ09ORklHX1RXTDQwMzBfQ09SRSkJKz0gdHdsLWNvcmUubyB0 d2w0MDMwLWlycS5vIHR3bDYwMzAtaXJxLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHBz NjU5NHguYyBiL2RyaXZlcnMvbWZkL3RwczY1OTR4LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uNTE5MTYyY2MxZmJlCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvbWZkL3RwczY1OTR4LmMKPiBAQCAtMCwwICsxLDEwNiBAQAo+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+ICsvKgo+ICsgKiB0cHM2NTk0eC5j ICAtLSAgVEkgVFBTNjU5NHggY2hpcCBmYW1pbHkgbXVsdGktZnVuY3Rpb24gZHJpdmVyCgpObyBm aWxlbmFtZXMgaW4gY29tbWVudHMgcGxlYXNlLgoKQWxzbywgdGhlcmUgYXJlIHRvbyBtYW55IHNw YWNlcyBhcm91bmQgdGhlICctLScuCgpJdCdzIG5vdCBhICJtdWx0aS1mdW5jdGlvbiBkcml2ZXIi IGl0J3MgYSBQTUlDIENvcmUgZHJpdmVyLgoKPiArICogQ29weXJpZ2h0IChDKSAyMDIyIFRleGFz IEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHBzOi8vd3d3LnRpLmNvbS8KPiArICoKPiAr ICogQXV0aG9yOiBLZWVydGh5IDxqLWtlZXJ0aHlAdGkuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNs dWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5o Pgo+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4K CkFscGhhYmV0aWNhbC4KCj4gKyNpbmNsdWRlIDxsaW51eC9tZmQvdHBzNjU5NHguaD4KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyB0cHM2NTk0eF9yZWdtYXBfY29uZmln ID0gewo+ICsJLnJlZ19iaXRzID0gOCwKPiArCS52YWxfYml0cyA9IDgsCj4gKwkubWF4X3JlZ2lz dGVyID0gVFBTNjU5NFhfUkVHX01BWCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg bWZkX2NlbGwgdHBzNjU5NHhfY2VsbHNbXSA9IHsKPiArCXsgLm5hbWUgPSAidHBzNjU5NHgtcnRj IiwgfSwKPiArfTsKCldoZXJlIGFyZSB0aGUgcmVzdCBvZiB0aGUgZGV2aWNlcz8KClRoaXMgaXMg bm90IGFuIE1GRCB3aXRoIG9ubHkgb25lIGRldmljZS4KCj4gK3N0YXRpYyBzdHJ1Y3QgdHBzNjU5 NHggKnRwczsKPiArCj4gK3N0YXRpYyB2b2lkIHRwczY1OTR4X3Bvd2VyX29mZih2b2lkKQo+ICt7 Cj4gKwlyZWdtYXBfd3JpdGUodHBzLT5yZWdtYXAsIFRQUzY1OTRYX0ZTTV9OU0xFRVBfVFJJR0dF UlMsIDB4Myk7Cj4gKwlyZWdtYXBfd3JpdGUodHBzLT5yZWdtYXAsIFRQUzY1OTRYX0lOVF9TVEFS VFVQLCAweGZmKTsKPiArCXJlZ21hcF93cml0ZSh0cHMtPnJlZ21hcCwgVFBTNjU5NFhfSU5UX01J U0MsIDB4ZmYpOwo+ICsJcmVnbWFwX3dyaXRlKHRwcy0+cmVnbWFwLCBUUFM2NTk0WF9DT05GSUdf MSwgMHhjMCk7Cj4gKwlyZWdtYXBfd3JpdGUodHBzLT5yZWdtYXAsIFRQUzY1OTRYX0ZTTV9JMkNf VFJJR0dFUlMsIDB4MSk7CgpObyBtYWdpYyBudW1iZXJzIHBsZWFzZS4gIERlZmluZSBhbGwgb2Yg dGhvc2UgdmFsdWVzLgoKPiArfQo+ICsKPiArc3RhdGljIGludCB0cHM2NTk0eF9wcm9iZShzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50LAo+ICsJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAq aWRzKQo+ICt7Cj4gKwlzdHJ1Y3QgdHBzNjU5NHggKnRwczY1OTQ7CgoqZGRhdGEgaXMgcHJlZmVy cmVkLgoKPiArCWludCByZXQ7Cj4gKwl1bnNpZ25lZCBpbnQgb3RwaWQ7Cj4gKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5vZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOwoKUmUtb3JkZXIgdGhlc2UgLSB1 c3VhbGx5ICdzdHJ1Y3RzJyBnbyBmaXJzdCwgdGhlbiBpbnRzLgoKPiArCXRwczY1OTQgPSBkZXZt X2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKnRwczY1OTQpLCBHRlBfS0VSTkVMKTsKPiAr CWlmICghdHBzNjU5NCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwl0cHM2NTk0LT5kZXYg PSAmY2xpZW50LT5kZXY7Cj4gKwo+ICsJdHBzNjU5NC0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5p dF9pMmMoY2xpZW50LCAmdHBzNjU5NHhfcmVnbWFwX2NvbmZpZyk7Cj4gKwlpZiAoSVNfRVJSKHRw czY1OTQtPnJlZ21hcCkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHRwczY1OTQtPnJlZ21hcCk7Cj4g KwkJZGV2X2Vycih0cHM2NTk0LT5kZXYsCj4gKwkJCSJGYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdp c3RlciBtYXA6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0 ID0gcmVnbWFwX3JlYWQodHBzNjU5NC0+cmVnbWFwLCBUUFM2NTk0WF9SRUdfREVWX1JFViwgJm90 cGlkKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKHRwczY1OTQtPmRldiwgIkZhaWxlZCB0 byByZWFkIE9UUCBJRFxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwl0cHM2NTk0 LT5yZXYgPSBvdHBpZDsKPiArCj4gKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB0cHM2NTk0 KTsKPiArCj4gKwlyZXQgPSBtZmRfYWRkX2RldmljZXModHBzNjU5NC0+ZGV2LCBQTEFURk9STV9E RVZJRF9BVVRPLCB0cHM2NTk0eF9jZWxscywKPiArCQkJICAgICAgQVJSQVlfU0laRSh0cHM2NTk0 eF9jZWxscyksIE5VTEwsIDAsIE5VTEwpOwo+ICsKPiArCXRwcyA9IHRwczY1OTQ7Cj4gKwlpZiAo b2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsICJ0aSxzeXN0ZW0tcG93ZXItY29udHJvbGxlciIp KQo+ICsJCXBtX3Bvd2VyX29mZiA9IHRwczY1OTR4X3Bvd2VyX29mZjsKCllvdSBzZXR0aW5nIHRo aXMgdXAgZXZlbiBpZiBtZmRfYWRkX2RldmljZXMoKSBmYWlscz8KClNlZW1zIHdyb25nLgoKPiAr CXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IG9mX3RwczY1OTR4X21hdGNoX3RhYmxlW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gInRpLHRw czY1OTR4IiwgfSwKPiArCXt9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3Rw czY1OTR4X21hdGNoX3RhYmxlKTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2Rldmlj ZV9pZCB0cHM2NTk0eF9pZF90YWJsZVtdID0gewo+ICsJeyAidHBzNjU5NHgiLCAwIH0sCj4gKwl7 IH0sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0cHM2NTk0eF9pZF90YWJsZSk7 CgpSZW1vdmUgdGhpcyBhbmQgdXNlIC5wcm9iZV9uZXcgaW5zdGVhZCBwbGVhc2UuCgo+ICtzdGF0 aWMgc3RydWN0IGkyY19kcml2ZXIgdHBzNjU5NHhfZHJpdmVyID0gewo+ICsJLmRyaXZlcgk9IHsK PiArCQkubmFtZQk9ICJ0cHM2NTk0eCIsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfdHBzNjU5 NHhfbWF0Y2hfdGFibGUsCj4gKwl9LAo+ICsJLnByb2JlCQk9IHRwczY1OTR4X3Byb2JlLAo+ICsJ LmlkX3RhYmxlCT0gdHBzNjU5NHhfaWRfdGFibGUsCj4gK307Cj4gK21vZHVsZV9pMmNfZHJpdmVy KHRwczY1OTR4X2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJKIEtlZXJ0aHkgPGota2Vl cnRoeUB0aS5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiVFBTNjU5NFggY2hpcCBmYW1p bHkgTXVsdGktRnVuY3Rpb24gRGV2aWNlIGRyaXZlciIpOwoKTm90IGFuIE1GRC4KCj4gK01PRFVM RV9MSUNFTlNFKCJHUEwiKTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvdHBzNjU5 NHguaCBiL2luY2x1ZGUvbGludXgvbWZkL3RwczY1OTR4LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNDEzNDlmOTZmMDEzCj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL2luY2x1ZGUvbGludXgvbWZkL3RwczY1OTR4LmgKPiBAQCAtMCwwICsxLDY2IEBACj4gKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCj4gKy8qCj4gKyAq IHRwczY1OTR4LmggIC0tICBUSSBUUFM2NTk0eAoKTm8gZmlsZW5hbWVzLgoKPiArICogQ29weXJp Z2h0IChDKSAyMDE2IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHBzOi8vd3d3 LnRpLmNvbS8KCjIwMTY/Cgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19MSU5VWF9NRkRfVFBTNjU5 NFhfSAo+ICsjZGVmaW5lIF9fTElOVVhfTUZEX1RQUzY1OTRYX0gKCkFueSByZWFzb24gZ28ga2Vl cCB0aGUgTElOVVggcGFydD8KCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+Cj4gKwo+ICsvKiBU UFM2NTk0eCBjaGlwIGlkIGxpc3QgKi8KCiJJRCIKCj4gKyNkZWZpbmUgVFBTNjU5NFgJCQkweDAw Cj4gKwo+ICsvKiBBbGwgcmVnaXN0ZXIgYWRkcmVzc2VzICovCj4gKyNkZWZpbmUgVFBTNjU5NFhf UkVHX0RFVl9SRVYJCQkweDAxCj4gKyNkZWZpbmUgVFBTNjU5NFhfSU5UX1NUQVJUVVAJCQkweDY1 Cj4gKyNkZWZpbmUgVFBTNjU5NFhfSU5UX01JU0MJCQkweDY2Cj4gKyNkZWZpbmUgVFBTNjU5NFhf Q09ORklHXzEJCQkweDdkCj4gKyNkZWZpbmUgVFBTNjU5NFhfRlNNX0kyQ19UUklHR0VSUwkJMHg4 NQo+ICsjZGVmaW5lIFRQUzY1OTRYX0ZTTV9OU0xFRVBfVFJJR0dFUlMJCTB4ODYKPiArCj4gKyNk ZWZpbmUgVFBTNjU5NFhfUlRDX1NFQ09ORFMJCQkweGI1Cj4gKyNkZWZpbmUgVFBTNjU5NFhfUlRD X01JTlVURVMJCQkweGI2Cj4gKyNkZWZpbmUgVFBTNjU5NFhfUlRDX0hPVVJTCQkJMHhiNwo+ICsj ZGVmaW5lIFRQUzY1OTRYX1JUQ19EQVlTCQkJMHhiOAo+ICsjZGVmaW5lIFRQUzY1OTRYX1JUQ19N T05USFMJCQkweGI5Cj4gKyNkZWZpbmUgVFBTNjU5NFhfUlRDX1lFQVJTCQkJMHhiYQo+ICsjZGVm aW5lIFRQUzY1OTRYX1JUQ19XRUVLUwkJCTB4YmIKPiArI2RlZmluZSBUUFM2NTk0WF9BTEFSTV9T RUNPTkRTCQkJMHhiYwo+ICsjZGVmaW5lIFRQUzY1OTRYX0FMQVJNX01JTlVURVMJCQkweGJkCj4g KyNkZWZpbmUgVFBTNjU5NFhfQUxBUk1fSE9VUlMJCQkweGJlCj4gKyNkZWZpbmUgVFBTNjU5NFhf QUxBUk1fREFZUwkJCTB4YmYKPiArI2RlZmluZSBUUFM2NTk0WF9BTEFSTV9NT05USFMJCQkweGMw Cj4gKyNkZWZpbmUgVFBTNjU5NFhfQUxBUk1fWUVBUlMJCQkweGMxCj4gKyNkZWZpbmUgVFBTNjU5 NFhfUlRDX0NUUkxfMQkJCTB4YzIKPiArI2RlZmluZSBUUFM2NTk0WF9SVENfQ1RSTF8yCQkJMHhj Mwo+ICsjZGVmaW5lIFRQUzY1OTRYX1JUQ19TVEFUVVMJCQkweGM0Cj4gKyNkZWZpbmUgVFBTNjU5 NFhfUlRDX0lOVEVSUlVQVFMJCQkweGM1Cj4gKyNkZWZpbmUgVFBTNjU5NFhfUkVHX01BWAkJCTB4 ZDAKPiArCj4gKy8qIFJlZ2lzdGVyIGZpZWxkIGRlZmluaXRpb25zICovCj4gKyNkZWZpbmUgVFBT NjU5NFhfREVWX1JFVl9ERVZfSUQJCQkweGZmCj4gKwo+ICsjZGVmaW5lIFRQUzY1OTRYX1JUQ19D VFJMX1JFR19HRVRfVElNRQkJQklUKDYpCj4gKyNkZWZpbmUgVFBTNjU5NFhfUlRDX0NUUkxfUkVH X1NUT1BfUlRDCQlCSVQoMCkKPiArI2RlZmluZSBUUFM2NTk0WF9SVENfSU5URVJSVVBUU19SRUdf SVRfQUxBUk0JQklUKDMpCj4gKwo+ICsjZGVmaW5lIFRQUzY1OTRYX1JUQ19TVEFUVVNfUlVOCQkJ QklUKDEpCj4gKwo+ICsvKioKPiArICogc3RydWN0IHRwczY1OTR4IC0gc3RhdGUgaG9sZGVyIGZv ciB0aGUgdHBzNjU5NHggZHJpdmVyCj4gKyAqIEBkZXY6IHN0cnVjdCBkZXZpY2UgcG9pbnRlciBm b3IgTUZEIGRldmljZQo+ICsgKiBAcmV2OiByZXZpc2lvbiBvZiB0aGUgdHBzNjU5NHgKPiArICog QGxvY2s6IGxvY2sgZ3VhcmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlCj4gKyAqIEByZWdtYXA6IHJl Z2lzdGVyIG1hcCBvZiB0aGUgdHBzNjU5NHggUE1JQwo+ICsgKgo+ICsgKiBEZXZpY2UgZGF0YSBt YXkgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIFRQUzY1OTRYIGNoaXAKPiArICovCj4gK3N0cnVjdCB0 cHM2NTk0eCB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwl1OCByZXY7Cj4gKwlzdHJ1Y3Qg cmVnbWFwICpyZWdtYXA7Cj4gK307CgpQbGVhc2UgdGVzdCBjb21waWxlIHdpdGggVz0xIGVuYWJs ZWQgYW5kIGZpeCB0aGUgaXNzdWVzLgoKPiArI2VuZGlmIC8qIF9fTElOVVhfTUZEX1RQUzY1OTRY X0ggKi8KCi0tIApMZWUgSm9uZXMgW+adjueQvOaWr10KCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cmxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK