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.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 9E463C433E9 for ; Mon, 8 Mar 2021 13:28:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6B607651CC for ; Mon, 8 Mar 2021 13:28:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229893AbhCHN17 (ORCPT ); Mon, 8 Mar 2021 08:27:59 -0500 Received: from esa.microchip.iphmx.com ([68.232.154.123]:63862 "EHLO esa.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229497AbhCHN1v (ORCPT ); Mon, 8 Mar 2021 08:27:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1615210070; x=1646746070; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=H0uWV6lEuEqWVBj4LHWPheMKq4V4y1TA96GXXa6BYak=; b=lqOrLo2jwsW2fENBWJqCkprVMce5OwbIGNeXcxNtBYzXEvAg0q6wjwmw NhGha8p2hs5Pg+GDka7wDsPh6wDI9fT4OwALG8y/h254Pvbj+0twKZ/FU BYoXH41LJG+JCc17XfFqE65+M25pNKNYHRI++ANgQPDN2wxg9bPh6qXwg Duo3oQzN8adsiv2PupvJAH2sdc1oWz9qjdYNF/0gAqKPG4Knl1sWeBEUT C2dYYGOhQJIg+rqZ+KH8e579TLgBPbyO6nGIivAdNDicWkuM9h4f6g/K0 s2Qdx3IJdj68aYhsj37zNcT7O3EUypfQibiiDqZQqRxrXQ+Mfsdx6oJ/z A==; IronPort-SDR: Ok5gZOyLXOHNUdsK6KcsMg1JC1c6TeKwwJQr5qW2FuQqsHNHQz+vxOCnSPZKXP4AnF779gOxIo xEqe9XbT4QnLOkrhrYTA/zDYwuoFwRAB7f0Q/u6jgdQKOgep+NyxYZjwRoORcIkQqjIKVUN7Pn mhgGBCifF9+9Gp/ilJW8ce19iI97mk5yyfBqUK75EpYoCJAEtbTWnF9hlTbe+Y6DidO9F98JQ+ 5FO5DDzOXcCz4RsrG2YPmt96DTkjsLsJu7Wohx9gHCwWYgagZDx19gLQU9jBHHhuuIzfQ43nb5 tuI= X-IronPort-AV: E=Sophos;i="5.81,232,1610434800"; d="scan'208";a="106348275" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa4.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 08 Mar 2021 06:27:50 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.85.152) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Mon, 8 Mar 2021 06:27:50 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2 via Frontend Transport; Mon, 8 Mar 2021 06:27:50 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hKqOeqgkGDV1/GBA6rNCxHJr5yM6urjDcXtsnWP30w8p0Ys05PlauLc/Jr9bOEM2M4Kbg3K6mE6hDl5082kXafZPVgObRNDhwjRQvkqyeVPe0XclPzZWqNLEaQ6MhZXY6MEcz9pVabouGtWIDXfUFTb9do1xvFRWXKK6jyDKkMWJ3QrGV39f47qBsty84gHBumOdjMRHqZd/bjWN0zzrQRTZoc6x1pbaWnd0iBFGMPNRfER8T4J4F6FsV3Z/yP6QrfZT8JPXfWUUdFNuGH1goWsZI65bw65tLvtjUy4/Fx5V8up2cnqvB3+7AY35ZgP19OZXmKmJFZMSmOTLd/wg8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H0uWV6lEuEqWVBj4LHWPheMKq4V4y1TA96GXXa6BYak=; b=jysSAy9gxThTbzE+2mzUrKsuVTTuN4CmtbT5DhoBwS9BvLkR4EBV/O1aFhEzLZ4zOu9H9a22k7s6jkKqvx+7peQ1GWMdAefEZg2DN4LtL/s6h6QRket8UkwZrrQLzh0afdCkaCx4rwgV91DpqQesMsp/V4SWBrYOj71KFgCGnHkO049QyXCzs4fWHVn2QVVoz0UjxDq30bK6BOI9HTMyJYc1PZbeaqcr0Uw/Y+02mHOnbNksSkbhLCHA1wEfwUjv7lvB5dEeSfk4nyIyexQrOBHWzUEtHOX4wyJ6S09W9q5LUJmvEv/fR/RtDkEd4Z2XAcqCq0tLiqgqtJqz3tqIiw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H0uWV6lEuEqWVBj4LHWPheMKq4V4y1TA96GXXa6BYak=; b=irSmib3XCpeZBSo/m8kL6CX+kL8dycHky/Cgrk4nSyCBys2Aw6RFf61O8BAYliuPaxTojsT0kneveoJVuLbOhjMoAmqYDONt4WILoR3Mk6lBbz9vQJRrkKpefzLx2/gcbyxiycCLHwbVncC2XqOp6rGMoIsdjnvTZCKw7sY40lI= Received: from SJ0PR11MB4896.namprd11.prod.outlook.com (2603:10b6:a03:2dd::20) by SJ0PR11MB4864.namprd11.prod.outlook.com (2603:10b6:a03:2d4::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3912.17; Mon, 8 Mar 2021 13:27:48 +0000 Received: from SJ0PR11MB4896.namprd11.prod.outlook.com ([fe80::743e:9115:21df:d5a]) by SJ0PR11MB4896.namprd11.prod.outlook.com ([fe80::743e:9115:21df:d5a%5]) with mapi id 15.20.3890.038; Mon, 8 Mar 2021 13:27:48 +0000 From: To: CC: , , , , , Subject: Re: [PATCH 4/4] iio: adc: at91-sama5d2: add support for sama7g5 device Thread-Topic: [PATCH 4/4] iio: adc: at91-sama5d2: add support for sama7g5 device Thread-Index: AQHXDqfcrPT7OYaYuEKQSITCfo45Mqp3P2+AgALg6AA= Date: Mon, 8 Mar 2021 13:27:48 +0000 Message-ID: References: <20210301143256.16502-1-eugen.hristev@microchip.com> <20210301143256.16502-5-eugen.hristev@microchip.com> <20210306173017.0d3144c9@archlinux> In-Reply-To: <20210306173017.0d3144c9@archlinux> Accept-Language: en-US, ro-RO Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 authentication-results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=microchip.com; x-originating-ip: [86.121.125.229] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d30935dc-212d-458f-6f1f-08d8e235f745 x-ms-traffictypediagnostic: SJ0PR11MB4864: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: FR2Btm+O1rFlvVOJEcFBnaglXuhiExKwusuAvtKrE/EE+L4uEpY4Wqp1iOyoxf5BXIk9F3fbLT4c+0OnxzaJOIOKBbCE7z/s4pHSBQc6xQAUiXBA/wcI3CNB419c1Z5O/kdIyGjdi9gTs9rbTaHBZaRoZk/2uWjAC/k2kbWvfoTW5GaEoCksXsvNG/ag+4DExXrKoY4zpK1V9M0QATMAZTRsH/Te0oumpS8k7bAEg/Ptm9fPsS5vuMw9J2Wn2MaOjfzXJPWIDKlR7vFfhCh7FU+yAGr7Jvl5/9BNmc7UavzMlEtKwonQs6wBZ/s2CQznvaJpg0zXlwznQ8Y8kTb/I67AIvPhI5mkVLQwdYayOHlgQk0noQWgDjmiU6qYtx12B+3cAkd06l1JAT54s96HXHW98h/8/BkinDTsVEjugFt+L5cQ/6aU8Mv9pa5rumX/zllP/CDFNf12nfc+lz4Vr6ZkWuQPAOUgnZDe2Jblo2d6AB4ctJ4+D/44dmto2iF6QCM0yzkRkbyWBOpOb0gQGyQZKByxDuQXs4iJw7dRyYo2yuR09GhYsFXPIVBSpqS9f6TozIOt4905EU9XYS5kP83mZQcRPkb4ujZ1eCz31f7vD1d2fZSEVgjqyM1tiH+qqRENBKdS6zaYIhYiBfOFHwPlmgt+CLnt0RjaUtKDeQUGH82KxKgBzwFH1tfqt5Vk1zAmoVtFFRi4GpbjuP/26w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR11MB4896.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(346002)(136003)(39860400002)(366004)(376002)(54906003)(8936002)(86362001)(2906002)(6916009)(966005)(66446008)(53546011)(76116006)(8676002)(31686004)(6512007)(83380400001)(26005)(71200400001)(6506007)(2616005)(316002)(66556008)(36756003)(91956017)(6486002)(186003)(66476007)(64756008)(4326008)(478600001)(66946007)(5660300002)(31696002)(30864003)(43740500002)(45980500001)(579004)(559001)(309714004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?WGN0US9aci9MeExwUG92VmN0V2Nkb3Vla016RE5tM1ZmOW1NMWpoRWJ5YlN0?= =?utf-8?B?a3VpaldjaHJDeHNwVlB6NER6L2RoUzdSeDJWQTNtUFErTFk3QW5tTnVMVmQw?= =?utf-8?B?bUZpcUY4M2F6SkFOOEkvdktWZjB6eG5oblhkVHZQbjIvWmdnMmtmaUNGK3kx?= =?utf-8?B?cHlaTjBZSVZpc3hyQzl2Tk1TeE9lMUNjSjA1SVZWYXVEVitkN3IzYVRUWmVr?= =?utf-8?B?Y0laQjhaZDhwcWxkVUFmQVQzam9qbHFDeTdUaFBQVGttNXpsdTcxNmFYMEpu?= =?utf-8?B?dW0zWk5mOWQ3bGx5WjhXUjFwVWRQRHlxcyszbm9ldlBBbStoSUR3bG9OMTNR?= =?utf-8?B?eXZpQVdSOFdRNXk2bHR0am1MUFpGNXhRK1NvVzg5TWE5cHpidnFjSFoyYW1h?= =?utf-8?B?Y3haQzFXNnRzVi9zSzMrNHk1QU1qeHdBNVVEcCtDOGp2WDVuS0Z3bndlMVow?= =?utf-8?B?ZHBrNVFOV3NSYWErNElLOFdUWDFQaFlqa3p2c1ZDMjZXenFGQk5ETWJ4WEcz?= =?utf-8?B?aGQrdTJQeWQxaysxV3lyUTFHTWthdjl4TTBteXdydWdMTncwWUVZUDlqcURI?= =?utf-8?B?Y0V0VGZiWHJrWjJQalRpOTdjSWM1SlZ2VFNaaTVMNGRhaGNWcTUvNlZubXo0?= =?utf-8?B?OExtV1FLZ05aaUh3THJXengwdHhEaE01RW5wM3Y5RUJVUlQwTmIzSnVpZDE3?= =?utf-8?B?L21HeHEvdUcrSVBUczcrTENKand0TUs4NTY1ZEg3aHFaVC96elZ1QlZ3SzlM?= =?utf-8?B?NVpMK0xoQXozUGViUFd2TXNJN3ZVVUhoM0VCVXJaa2p5c1ExOE9NSmdaWklE?= =?utf-8?B?d1FqdVgvcFRGZ243V0kyU2lpWEU1R0YrZVAyejRkSEl0eHd4Q0FLcUdrZDE5?= =?utf-8?B?eHRwYjg4VFR4S1JtWnVVdllPeTVIeXgvTjIraFV4cGczWTBoYk1ScTRKcVJI?= =?utf-8?B?dkhwOFU2OS9WbU5kR2hDa1p1QzlCZGdrNnhqamJZNzIvVVZ0U2Y4T3gyMklX?= =?utf-8?B?VTR6VHY4dVg0OU5NVzBnd0dqNWJKL3N4c1l2T1p0TUJldzJtN0lYNnJ6bDhJ?= =?utf-8?B?SENKVEU5dEVPbXE0cC94VFBBZzRhMlZhT28zOFVJdmdvSTdieUdscXppWm5Z?= =?utf-8?B?d0ZLV0dJckZyV01PbTBWY3pnZk1FNlhReCtiWDZhQWlURkRoNWwwWmhBcGRI?= =?utf-8?B?K21zSWNsVjh0SFdSWnFCSUltZzhnNzA5YkpMand0U1VzZlgzcE9UUGdYeGdq?= =?utf-8?B?dlVtMy9MMjRwbnpSZDI5MVRGT1NPajlGeXp4WjUzRXJRa2tMdWd2ME1TV05K?= =?utf-8?B?Y3lPWVNLVGdSWThqVVdTd3o5eWVwcWp4V280WDVnbWFNc1dPeHE4cWNaWXh4?= =?utf-8?B?L1Z0ZEgxT2J3Q0tYZzd4WkVRWXl4RVpweUxOdGlaMVpISm5KZjJiZUdpejVw?= =?utf-8?B?R21sbVpTMW4xZjZTYTNDS1JydEdhcDZoOHUwbFNYL01UQi8xR3ZkMVJBU0I0?= =?utf-8?B?d1RvYnVPR0VsU2U2TW5jbUw1UWNjYmVyL0ZZM1M4Q3RuRWxUa1MwOVFEangw?= =?utf-8?B?c0VaaC9YejhQbFp4VDBMay8vN3U4cE5YRWNtTWl2bUVPRXNuRXpsdnhSVGhr?= =?utf-8?B?VnNMdkhEMUN2dDJNNjVyNTJ5dGVuZVArM29KR1prTTdSVW5YcTdid2ZvQVpl?= =?utf-8?B?UHloaXI4UmZaSXhOem05VzQyVFBkZWhLVDREUlEreFNEZFNJTmVYWEFxVTJJ?= =?utf-8?Q?xHfqFE5liijvzDEZC5FmcVpBgbYk6shlxuso9D2?= Content-Type: text/plain; charset="utf-8" Content-ID: <849B1A5C291EC845B734279B0F91CCA8@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ0PR11MB4896.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d30935dc-212d-458f-6f1f-08d8e235f745 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Mar 2021 13:27:48.1506 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: o00aPusQ/W3lw/PmLu0L4JT0KNvRfVUDe46dI7jwDksohqnztto+5Aek+SJUl9aqgA0FOv6Ed8cTdodxBrjSfSemK9oSCafhGeraN+Yr7xY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB4864 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gMDYuMDMuMjAyMSAxOTozMCwgSm9uYXRoYW4gQ2FtZXJvbiB3cm90ZToNCj4gT24gTW9uLCAx IE1hciAyMDIxIDE2OjMyOjU2ICswMjAwDQo+IEV1Z2VuIEhyaXN0ZXYgPGV1Z2VuLmhyaXN0ZXZA bWljcm9jaGlwLmNvbT4gd3JvdGU6DQo+IA0KPj4gQWRkIHN1cHBvcnQgdG8gc2FtYTdnNSBBREMg d2hpY2ggaXMgc2ltaWxhciB3aXRoIHNhbWE1ZDIvc2FtOXg2MCBkZXZpY2UuDQo+PiBEaWZmZXJl bmNlcyBhcmUgaGlnaGxpZ2h0ZWQgYnkgY29tcGF0aWJsZS4NCj4+IE1haW4gZGlmZmVyZW5jZXMg aW5jbHVkZSAxNiBjaGFubmVscyBpbnN0ZWFkIG9mIDEyIGFuZCBtaXNzaW5nDQo+PiByZXNpc3Rp dmUgdG91Y2hzY3JlZW4uDQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogRXVnZW4gSHJpc3RldiA8ZXVn ZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KPiANCj4gSGkgRXVnZW4sDQo+IA0KPiBXaGF0IHRl bmRzIHRvIGVuZCB1cCBjbGVhbmVyIHRoYW4gdGhlIG1hbnkgc2NhdHRlcmVkIHBsYWNlcyB5b3Ug aGF2ZQ0KPiBoYWQgdG8gYm9sdCBpbiBwYXJ0IHN1cHBvcnQgaGVyZSwgaXMgdG8gdXNlIGEgcGVy IGRldmljZSB0eXBlIGNvbnN0YW50DQo+IHN0cnVjdHVyZS4gIFRoYXQgc3RydWN0dXJlIGNhbiBj b250YWluIHJlZ2lzdGVyIGFkZHJlc3NlcyB3aGVyZSB0aGF0DQo+IGlzIGFsbCB0aGUgZGlmZmVy cyBiZXR3ZWVuIHBhcnRzLCBhbmQgY2FsbGJhY2tzIGZvciBtb3JlIGNvbXBsZXggY2FzZXMuDQo+ IA0KPiBBbG9uZyB0aGUgbGluZXMgb2YNCj4gDQo+IHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2FtNWQy X2NoaXBfaW5mbyBzYW01ZDJfaW5mIHsNCj4gICAgICAgICAgLmVvY19yZWdpc3RlciA9IDB4MzMs DQo+ICAgICAgICAgIC5tYXhfY2hhbl9pZHggPSBib2IsDQo+ICAgICAgICAgIC5jY3IgPSBib2Jf ZnVuY3Rpb24sDQo+IC4uLg0KPiB9Ow0KPiANCj4gVGhlbiB5b3UgY2FuIGp1c3QgcHV0IGEgcG9p bnRlciB0byB0aGlzIGluIHRoZSBtYXRjaF9kYXRhIGFuZCBsb29rIHRoYXQNCj4gdXAgaW4gcHJv YmUNCg0KSGkgSm9uYXRoYW4sDQoNCg0KQ291bGQgeW91IGhhdmUgYSBsb29rIGEgbGl0dGxlIGF0 IHRoaXMgZHJpdmVyIHRob3VnaDoNCg0KaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xp bnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0L3RyZWUvZHJpdmVycy93YXRjaGRvZy9z YW1hNWQ0X3dkdC5jDQoNClRoZSBzcGVjaWZpYyBzdXBwb3J0IGZvciAnc2FtOXg2MCcgd2FzIGFk ZGVkIGJ5IG1lLCBhbmQgdGhlIGRyaXZlciBkb2VzIA0Kbm90IGxvb2sgc28gYmFkIGFmdGVyIGFs bCwgaGF2aW5nIGlmL2Vsc2UgY2xhdXNlcyBuZWFybHkgZXZlcnl3aGVyZSwgYW5kIA0KZ2V0dGlu ZyB0aGF0ICdzYW05eDYwX3N1cHBvcnRlZCcgYml0IGZyb20gdGhlIGNvbXBhdGlibGUgc3RyaW5n IGNvbXBhcmlzb24uDQoNClRoYXQncyB0aGUgcmVhc29uIHdoeSBJIHRyaWVkIHRvIGhhdmUgdGhp cyBBREMgZHJpdmVyIGluIGEgc2ltaWxhciBmYXNoaW9uLg0KDQpJIGxpa2UgeW91ciBhcHByb2Fj aCBhcyB3ZWxsLCBJIGd1ZXNzIGl0J3MganVzdCBhIG1hdHRlciBvZiBwcmVmZXJlbmNlLiANCkkg d2lsbCBzdGFydCB0byBjaGFuZ2UgdGhpbmdzIHRvIGltcGxlbWVudCBpdCBhcyB5b3Ugc3VnZ2Vz dGVkIGlmIHlvdSANCmRvbid0IHNheSBvdGhlcndpc2UuDQoNClRoYW5rcyBmb3IgcmV2aWV3aW5n LA0KRXVnZW4NCg0KPiANCj4+IC0tLQ0KPj4gICBkcml2ZXJzL2lpby9hZGMvYXQ5MS1zYW1hNWQy X2FkYy5jIHwgMjg3ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tDQo+PiAgIDEgZmlsZSBj aGFuZ2VkLCAyMzQgaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25zKC0pDQo+Pg0KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9hdDkxLXNhbWE1ZDJfYWRjLmMgYi9kcml2ZXJzL2lpby9h ZGMvYXQ5MS1zYW1hNWQyX2FkYy5jDQo+PiBpbmRleCAwNjZkMGFkNjQ0Y2EuLmQ2MWZhMzJlZjI5 NCAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvaWlvL2FkYy9hdDkxLXNhbWE1ZDJfYWRjLmMNCj4+ ICsrKyBiL2RyaXZlcnMvaWlvL2FkYy9hdDkxLXNhbWE1ZDJfYWRjLmMNCj4+IEBAIC0xLDkgKzEs MTEgQEANCj4+ICAgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPj4g ICAvKg0KPj4gLSAqIEF0bWVsIEFEQyBkcml2ZXIgZm9yIFNBTUE1RDIgZGV2aWNlcyBhbmQgY29t cGF0aWJsZS4NCj4+ICsgKiBNaWNyb2NoaXAgQURDIGRyaXZlciBmb3IgU0FNQTVEMi9TQU1BN0c1 IGRldmljZXMgYW5kIGNvbXBhdGlibGUuDQo+PiAgICAqDQo+PiAgICAqIENvcHlyaWdodCAoQykg MjAxNSBBdG1lbCwNCj4+IC0gKiAgICAgICAgICAgICAgIDIwMTUgTHVkb3ZpYyBEZXNyb2NoZXMg PGx1ZG92aWMuZGVzcm9jaGVzQGF0bWVsLmNvbT4NCj4+ICsgKiAgICAgICAgICAgICAgIDIwMTUg THVkb3ZpYyBEZXNyb2NoZXMgPGx1ZG92aWMuZGVzcm9jaGVzQG1pY3JvY2hpcC5jb20+LA0KPj4g KyAqICAgICAgICAgICAgMjAyMSBNaWNyb2NoaXAgVGVjaG5vbG9neSwgSW5jLiwNCj4+ICsgKiAg ICAgICAgICAgIDIwMjEgRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29t Pg0KPj4gICAgKi8NCj4+DQo+PiAgICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4NCj4+IEBAIC0x MTcsMTQgKzExOSwyNiBAQA0KPj4gICAjZGVmaW5lIEFUOTFfU0FNQTVEMl9JU1IgICAgIDB4MzAN Cj4+ICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtIFBlbiB0b3VjaGluZyBzZW5zZSBz dGF0dXMgKi8NCj4+ICAgI2RlZmluZSBBVDkxX1NBTUE1RDJfSVNSX1BFTlMgICBCSVQoMzEpDQo+ PiArDQo+PiArLyogRW5kIG9mIENvbnZlcnNpb24gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAq Lw0KPj4gKyNkZWZpbmUgQVQ5MV9TQU1BN0c1X0VPQ19JRVIgMHgzNA0KPj4gKy8qIEVuZCBvZiBD b252ZXJzaW9uIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQo+PiArI2RlZmluZSBBVDkx X1NBTUE3RzVfRU9DX0lEUiAweDM4DQo+PiArLyogRW5kIG9mIENvbnZlcnNpb24gSW50ZXJydXB0 IE1hc2sgUmVnaXN0ZXIgKi8NCj4+ICsjZGVmaW5lIEFUOTFfU0FNQTdHNV9FT0NfSU1SIDB4M2MN Cj4+ICsvKiBFbmQgb2YgQ29udmVyc2lvbiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQo+ PiArI2RlZmluZSBBVDkxX1NBTUE3RzVfRU9DX0lTUiAweDQwDQo+PiArDQo+PiAgIC8qIExhc3Qg Q2hhbm5lbCBUcmlnZ2VyIE1vZGUgUmVnaXN0ZXIgKi8NCj4+ICAgI2RlZmluZSBBVDkxX1NBTUE1 RDJfTENUTVIgICAweDM0DQo+PiAgIC8qIExhc3QgQ2hhbm5lbCBDb21wYXJlIFdpbmRvdyBSZWdp c3RlciAqLw0KPj4gICAjZGVmaW5lIEFUOTFfU0FNQTVEMl9MQ0NXUiAgIDB4MzgNCj4+ICAgLyog T3ZlcnJ1biBTdGF0dXMgUmVnaXN0ZXIgKi8NCj4+ICAgI2RlZmluZSBBVDkxX1NBTUE1RDJfT1ZF UiAgICAweDNjDQo+PiArI2RlZmluZSBBVDkxX1NBTUE3RzVfT1ZFUiAgICAweDRjDQo+PiAgIC8q IEV4dGVuZGVkIE1vZGUgUmVnaXN0ZXIgKi8NCj4+ICAgI2RlZmluZSBBVDkxX1NBTUE1RDJfRU1S ICAgICAweDQwDQo+PiArI2RlZmluZSBBVDkxX1NBTUE3RzVfRU1SICAgICAweDUwDQo+PiAgIC8q IEV4dGVuZGVkIE1vZGUgUmVnaXN0ZXIgLSBPdmVyc2FtcGxpbmcgcmF0ZSAqLw0KPj4gICAjZGVm aW5lIEFUOTFfU0FNQTVEMl9FTVJfT1NSKFYpICAgICAgICAgICAgICAgICAgICAgICgoVikgPDwg MTYpDQo+PiAgICNkZWZpbmUgQVQ5MV9TQU1BNUQyX0VNUl9PU1JfTUFTSyAgICAgICAgICAgIEdF Tk1BU0soMTcsIDE2KQ0KPj4gQEAgLTE0Miw2ICsxNTYsOSBAQA0KPj4gICAvKiBDaGFubmVsIE9m ZnNldCBSZWdpc3RlciAqLw0KPj4gICAjZGVmaW5lIEFUOTFfU0FNQTVEMl9DT1IgICAgIDB4NGMN Cj4+ICAgI2RlZmluZSBBVDkxX1NBTUE1RDJfQ09SX0RJRkZfT0ZGU0VUIDE2DQo+PiArLyogQ2hh bm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovDQo+PiArI2RlZmluZSBBVDkxX1NBTUE3RzVf Q0NSICAgICAweDVjDQo+PiArI2RlZmluZSBBVDkxX1NBTUE3RzVfQ09SX0RJRkZfT0ZGU0VUIDAN Cj4+DQo+PiAgIC8qIEFuYWxvZyBDb250cm9sIFJlZ2lzdGVyICovDQo+PiAgICNkZWZpbmUgQVQ5 MV9TQU1BNUQyX0FDUiAgICAgMHg5NA0KPj4gQEAgLTE4NSw2ICsyMDIsNyBAQA0KPj4gICAjZGVm aW5lIEFUOTFfU0FNQTVEMl9QUkVTU1IgIDB4YmMNCj4+ICAgLyogVHJpZ2dlciBSZWdpc3RlciAq Lw0KPj4gICAjZGVmaW5lIEFUOTFfU0FNQTVEMl9UUkdSICAgIDB4YzANCj4+ICsjZGVmaW5lIEFU OTFfU0FNQTdHNV9UUkdSICAgIDB4MTAwDQo+PiAgIC8qIE1hc2sgZm9yIFRSR01PRCBmaWVsZCBv ZiBUUkdSIHJlZ2lzdGVyICovDQo+PiAgICNkZWZpbmUgQVQ5MV9TQU1BNUQyX1RSR1JfVFJHTU9E X01BU0sgR0VOTUFTSygyLCAwKQ0KPj4gICAvKiBObyB0cmlnZ2VyLCBvbmx5IHNvZnR3YXJlIHRy aWdnZXIgY2FuIHN0YXJ0IGNvbnZlcnNpb25zICovDQo+PiBAQCAtMjE0LDE5ICsyMzIsMjYgQEAN Cj4+ICAgI2RlZmluZSBBVDkxX1NBTUE1RDJfV1BTUiAgICAweGU4DQo+PiAgIC8qIFZlcnNpb24g UmVnaXN0ZXIgKi8NCj4+ICAgI2RlZmluZSBBVDkxX1NBTUE1RDJfVkVSU0lPTiAweGZjDQo+PiAr I2RlZmluZSBBVDkxX1NBTUE3RzVfVkVSU0lPTiAweDEzMA0KPj4NCj4+ICAgI2RlZmluZSBBVDkx X1NBTUE1RDJfSFdfVFJJR19DTlQgMw0KPj4gICAjZGVmaW5lIEFUOTFfU0FNQTVEMl9TSU5HTEVf Q0hBTl9DTlQgMTINCj4+ICsjZGVmaW5lIEFUOTFfU0FNQTdHNV9TSU5HTEVfQ0hBTl9DTlQgMTYN Cj4+ICAgI2RlZmluZSBBVDkxX1NBTUE1RDJfRElGRl9DSEFOX0NOVCA2DQo+PiArI2RlZmluZSBB VDkxX1NBTUE3RzVfRElGRl9DSEFOX0NOVCA4DQo+Pg0KPj4gICAjZGVmaW5lIEFUOTFfU0FNQTVE Ml9USU1FU1RBTVBfQ0hBTl9JRFggKEFUOTFfU0FNQTVEMl9TSU5HTEVfQ0hBTl9DTlQgKyBcDQo+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MV9TQU1BNUQyX0RJ RkZfQ0hBTl9DTlQgKyAxKQ0KPj4NCj4+ICsjZGVmaW5lIEFUOTFfU0FNQTdHNV9USU1FU1RBTVBf Q0hBTl9JRFggKEFUOTFfU0FNQTdHNV9TSU5HTEVfQ0hBTl9DTlQgKyBcDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxX1NBTUE3RzVfRElGRl9DSEFOX0NOVCAr IDEpDQo+PiArDQo+PiAgICNkZWZpbmUgQVQ5MV9TQU1BNUQyX1RPVUNIX1hfQ0hBTl9JRFggKEFU OTFfU0FNQTVEMl9TSU5HTEVfQ0hBTl9DTlQgKyBcDQo+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQVQ5MV9TQU1BNUQyX0RJRkZfQ0hBTl9DTlQgKiAyKQ0KPj4gICAj ZGVmaW5lIEFUOTFfU0FNQTVEMl9UT1VDSF9ZX0NIQU5fSURYICAgKEFUOTFfU0FNQTVEMl9UT1VD SF9YX0NIQU5fSURYICsgMSkNCj4+ICAgI2RlZmluZSBBVDkxX1NBTUE1RDJfVE9VQ0hfUF9DSEFO X0lEWCAgIChBVDkxX1NBTUE1RDJfVE9VQ0hfWV9DSEFOX0lEWCArIDEpDQo+PiAgICNkZWZpbmUg QVQ5MV9TQU1BNUQyX01BWF9DSEFOX0lEWCAgICBBVDkxX1NBTUE1RDJfVE9VQ0hfUF9DSEFOX0lE WA0KPj4gKyNkZWZpbmUgQVQ5MV9TQU1BN0c1X01BWF9DSEFOX0lEWCAgICBBVDkxX1NBTUE3RzVf VElNRVNUQU1QX0NIQU5fSURYDQo+Pg0KPj4gICAjZGVmaW5lIEFUOTFfU0FNQTVEMl9UT1VDSF9T QU1QTEVfUEVSSU9EX1VTICAgICAgICAgIDIwMDAgICAgLyogMm1zICovDQo+PiAgICNkZWZpbmUg QVQ5MV9TQU1BNUQyX1RPVUNIX1BFTl9ERVRFQ1RfREVCT1VOQ0VfVVMgICAgMjAwDQo+PiBAQCAt MjM5LDggKzI2NCwxOSBAQA0KPj4gICAgKiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBob2xk IGNvbnZlcnNpb24gZnJvbSBhbGwgY2hhbm5lbHMNCj4+ICAgICogd2l0aG91dCB0aGUgdGltZXN0 YW1wLg0KPj4gICAgKi8NCj4+IC0jZGVmaW5lIEFUOTFfQlVGRkVSX01BWF9DT05WRVJTSU9OX0JZ VEVTICgoQVQ5MV9TQU1BNUQyX1NJTkdMRV9DSEFOX0NOVCArIFwNCj4+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFfU0FNQTVEMl9ESUZGX0NIQU5fQ05UKSAqIDIp DQo+PiArI2RlZmluZSBBVDkxX1NBTUE1RDJfQlVGRkVSX01BWF9DT05WRVJTSU9OX0JZVEVTICgg XA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVQ5MV9TQU1BNUQy X1NJTkdMRV9DSEFOX0NOVCArIFwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQVQ5MV9TQU1BNUQyX0RJRkZfQ0hBTl9DTlQpICogMikNCj4+ICsNCj4+ICsjZGVmaW5l IEFUOTFfU0FNQTdHNV9CVUZGRVJfTUFYX0NPTlZFUlNJT05fQllURVMgKCBcDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBVDkxX1NBTUE3RzVfU0lOR0xFX0NIQU5f Q05UICsgXA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxX1NB TUE3RzVfRElGRl9DSEFOX0NOVCkgKiAyKQ0KPj4gKw0KPj4gKyNkZWZpbmUgQVQ5MV9CVUZGRVJf TUFYX0NPTlZFUlNJT05fQllURVMgKCBcDQo+PiArICAgICAoQVQ5MV9TQU1BN0c1X0JVRkZFUl9N QVhfQ09OVkVSU0lPTl9CWVRFUyA+IFwNCj4+ICsgICAgIEFUOTFfU0FNQTVEMl9CVUZGRVJfTUFY X0NPTlZFUlNJT05fQllURVMpID8gXA0KPj4gKyAgICAgQVQ5MV9TQU1BN0c1X0JVRkZFUl9NQVhf Q09OVkVSU0lPTl9CWVRFUyA6IFwNCj4+ICsgICAgIEFUOTFfU0FNQTVEMl9CVUZGRVJfTUFYX0NP TlZFUlNJT05fQllURVMpDQo+Pg0KPj4gICAvKiBUaGlzIHRvdGFsIG11c3QgYWxzbyBpbmNsdWRl IHRoZSB0aW1lc3RhbXAgKi8NCj4+ICAgI2RlZmluZSBBVDkxX0JVRkZFUl9NQVhfQllURVMgKEFU OTFfQlVGRkVSX01BWF9DT05WRVJTSU9OX0JZVEVTICsgOCkNCj4+IEBAIC0yOTUsNiArMzMxLDI3 IEBADQo+PiAgICAgICAgICAgICAgICAuaW5kZXhlZCA9IDEsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwNCj4+ICAgICAgICB9DQo+Pg0KPj4gKyNkZWZpbmUgQVQ5 MV9TQU1BN0c1X0NIQU5fRElGRihudW0sIG51bTIsIGFkZHIpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KPj4gKyAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4+ICsgICAgICAgICAgICAgLnR5cGUgPSBJ SU9fVk9MVEFHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+PiArICAg ICAgICAgICAgIC5kaWZmZXJlbnRpYWwgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KPj4gKyAgICAgICAgICAgICAuY2hhbm5lbCA9IG51bSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4+ICsgICAgICAgICAgICAgLmNoYW5uZWwy ID0gbnVtMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+PiArICAg ICAgICAgICAgIC5hZGRyZXNzID0gYWRkciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KPj4gKyAgICAgICAgICAgICAuc2Nhbl9pbmRleCA9IG51bSArIEFUOTFfU0FN QTdHNV9TSU5HTEVfQ0hBTl9DTlQsICAgICAgIFwNCj4+ICsgICAgICAgICAgICAgLnNjYW5fdHlw ZSA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+PiArICAg ICAgICAgICAgICAgICAgICAgLnNpZ24gPSAncycsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KPj4gKyAgICAgICAgICAgICAgICAgICAgIC5yZWFsYml0cyA9IDE0LCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAu c3RvcmFnZWJpdHMgPSAxNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+PiArICAg ICAgICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KPj4gKyAgICAgICAgICAgICAuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJ T19DSEFOX0lORk9fUkFXKSwgICAgICAgICAgIFwNCj4+ICsgICAgICAgICAgICAgLmluZm9fbWFz a19zaGFyZWRfYnlfdHlwZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1NDQUxFKSwgICBcDQo+PiArICAg ICAgICAgICAgIC5pbmZvX21hc2tfc2hhcmVkX2J5X2FsbCA9IEJJVChJSU9fQ0hBTl9JTkZPX1NB TVBfRlJFUSl8XA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKElJT19DSEFO X0lORk9fT1ZFUlNBTVBMSU5HX1JBVElPKSwgIFwNCj4+ICsgICAgICAgICAgICAgLmRhdGFzaGVl dF9uYW1lID0gIkNIIiNudW0iLUNIIiNudW0yLCAgICAgICAgICAgICAgICAgICBcDQo+PiArICAg ICAgICAgICAgIC5pbmRleGVkID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KPj4gKyAgICAgfQ0KPj4gKw0KPj4gICAjZGVmaW5lIEFUOTFfU0FNQTVEMl9D SEFOX1RPVUNIKG51bSwgbmFtZSwgbW9kKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwN Cj4+ICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXA0KPj4gICAgICAgICAgICAgICAgLnR5cGUgPSBJSU9fUE9TSVRJ T05SRUxBVElWRSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+PiBAQCAtMzM1LDYgKzM5 Miw4IEBAIHN0cnVjdCBhdDkxX2FkY19zb2NfaW5mbyB7DQo+PiAgICAgICAgdW5zaWduZWQgICAg ICAgICAgICAgICAgICAgICAgICBzdGFydHVwX3RpbWU7DQo+PiAgICAgICAgdW5zaWduZWQgICAg ICAgICAgICAgICAgICAgICAgICBtaW5fc2FtcGxlX3JhdGU7DQo+PiAgICAgICAgdW5zaWduZWQg ICAgICAgICAgICAgICAgICAgICAgICBtYXhfc2FtcGxlX3JhdGU7DQo+PiArI2RlZmluZSBBVDkx X0FEQ19TQU1BN0c1KHN0KSAgICAgICAgICgoc3QpLT5zb2NfaW5mby5zYW1hN2c1KQ0KPj4gKyAg ICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1hN2c1Ow0KPj4gICB9Ow0KPj4N Cj4+ICAgc3RydWN0IGF0OTFfYWRjX3RyaWdnZXIgew0KPj4gQEAgLTQzNiw3ICs0OTUsNyBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGF0OTFfYWRjX3RyaWdnZXIgYXQ5MV9hZGNfdHJpZ2dlcl9saXN0 W10gPSB7DQo+PiAgICAgICAgfSwNCj4+ICAgfTsNCj4+DQo+PiAtc3RhdGljIGNvbnN0IHN0cnVj dCBpaW9fY2hhbl9zcGVjIGF0OTFfYWRjX2NoYW5uZWxzW10gPSB7DQo+PiArc3RhdGljIGNvbnN0 IHN0cnVjdCBpaW9fY2hhbl9zcGVjIGF0OTFfc2FtYTVkMl9hZGNfY2hhbm5lbHNbXSA9IHsNCj4+ ICAgICAgICBBVDkxX1NBTUE1RDJfQ0hBTl9TSU5HTEUoMCwgMHg1MCksDQo+PiAgICAgICAgQVQ5 MV9TQU1BNUQyX0NIQU5fU0lOR0xFKDEsIDB4NTQpLA0KPj4gICAgICAgIEFUOTFfU0FNQTVEMl9D SEFOX1NJTkdMRSgyLCAweDU4KSwNCj4+IEBAIC00NjEsNiArNTIwLDQyIEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBhdDkxX2FkY19jaGFubmVsc1tdID0gew0KPj4gICAgICAg IEFUOTFfU0FNQTVEMl9DSEFOX1BSRVNTVVJFKEFUOTFfU0FNQTVEMl9UT1VDSF9QX0NIQU5fSURY LCAicHJlc3N1cmUiKSwNCj4+ICAgfTsNCj4+DQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9f Y2hhbl9zcGVjIGF0OTFfc2FtYTdnNV9hZGNfY2hhbm5lbHNbXSA9IHsNCj4+ICsgICAgIEFUOTFf U0FNQTVEMl9DSEFOX1NJTkdMRSgwLCAweDYwKSwNCj4+ICsgICAgIEFUOTFfU0FNQTVEMl9DSEFO X1NJTkdMRSgxLCAweDY0KSwNCj4+ICsgICAgIEFUOTFfU0FNQTVEMl9DSEFOX1NJTkdMRSgyLCAw eDY4KSwNCj4+ICsgICAgIEFUOTFfU0FNQTVEMl9DSEFOX1NJTkdMRSgzLCAweDZjKSwNCj4+ICsg ICAgIEFUOTFfU0FNQTVEMl9DSEFOX1NJTkdMRSg0LCAweDcwKSwNCj4+ICsgICAgIEFUOTFfU0FN QTVEMl9DSEFOX1NJTkdMRSg1LCAweDc0KSwNCj4+ICsgICAgIEFUOTFfU0FNQTVEMl9DSEFOX1NJ TkdMRSg2LCAweDc4KSwNCj4+ICsgICAgIEFUOTFfU0FNQTVEMl9DSEFOX1NJTkdMRSg3LCAweDdj KSwNCj4+ICsgICAgIEFUOTFfU0FNQTVEMl9DSEFOX1NJTkdMRSg4LCAweDgwKSwNCj4+ICsgICAg IEFUOTFfU0FNQTVEMl9DSEFOX1NJTkdMRSg5LCAweDg0KSwNCj4+ICsgICAgIEFUOTFfU0FNQTVE Ml9DSEFOX1NJTkdMRSgxMCwgMHg4OCksDQo+PiArICAgICBBVDkxX1NBTUE1RDJfQ0hBTl9TSU5H TEUoMTEsIDB4OGMpLA0KPj4gKyAgICAgQVQ5MV9TQU1BNUQyX0NIQU5fU0lOR0xFKDEyLCAweDkw KSwNCj4+ICsgICAgIEFUOTFfU0FNQTVEMl9DSEFOX1NJTkdMRSgxMywgMHg5NCksDQo+PiArICAg ICBBVDkxX1NBTUE1RDJfQ0hBTl9TSU5HTEUoMTQsIDB4OTgpLA0KPj4gKyAgICAgQVQ5MV9TQU1B NUQyX0NIQU5fU0lOR0xFKDE1LCAweDljKSwNCj4+ICsgICAgIEFUOTFfU0FNQTdHNV9DSEFOX0RJ RkYoMCwgMSwgMHg2MCksDQo+PiArICAgICBBVDkxX1NBTUE3RzVfQ0hBTl9ESUZGKDIsIDMsIDB4 NjgpLA0KPj4gKyAgICAgQVQ5MV9TQU1BN0c1X0NIQU5fRElGRig0LCA1LCAweDcwKSwNCj4+ICsg ICAgIEFUOTFfU0FNQTdHNV9DSEFOX0RJRkYoNiwgNywgMHg3OCksDQo+PiArICAgICBBVDkxX1NB TUE3RzVfQ0hBTl9ESUZGKDgsIDksIDB4ODApLA0KPj4gKyAgICAgQVQ5MV9TQU1BN0c1X0NIQU5f RElGRigxMCwgMTEsIDB4ODgpLA0KPj4gKyAgICAgQVQ5MV9TQU1BN0c1X0NIQU5fRElGRigxMiwg MTMsIDB4OTApLA0KPj4gKyAgICAgQVQ5MV9TQU1BN0c1X0NIQU5fRElGRigxNCwgMTUsIDB4OTgp LA0KPj4gKyAgICAgSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoQVQ5MV9TQU1BN0c1X1RJTUVTVEFN UF9DSEFOX0lEWCksDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgdW5zaWduZWQgaW50IGF0OTFf YWRjX21heF9jaGFuX2lkeChzdHJ1Y3QgYXQ5MV9hZGNfc3RhdGUgKnN0KQ0KPj4gK3sNCj4+ICsg ICAgIGlmIChBVDkxX0FEQ19TQU1BN0c1KHN0KSkNCj4+ICsgICAgICAgICAgICAgcmV0dXJuIEFU OTFfU0FNQTdHNV9NQVhfQ0hBTl9JRFg7DQo+PiArICAgICBlbHNlDQo+PiArICAgICAgICAgICAg IHJldHVybiBBVDkxX1NBTUE1RDJfTUFYX0NIQU5fSURYOw0KPj4gK30NCj4+ICsNCj4+ICAgc3Rh dGljIGludCBhdDkxX2FkY19jaGFuX3hsYXRlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIGlu dCBjaGFuKQ0KPj4gICB7DQo+PiAgICAgICAgaW50IGk7DQo+PiBAQCAtNDkyLDYgKzU4Nyw3IEBA IHN0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MV9hZGNfYWN0aXZlX3NjYW5fbWFza190b19yZWcoc3Ry dWN0IGlpb19kZXYgKmluZGlvX2RldikNCj4+ICAgew0KPj4gICAgICAgIHUzMiBtYXNrID0gMDsN Cj4+ICAgICAgICB1OCBiaXQ7DQo+PiArICAgICBzdHJ1Y3QgYXQ5MV9hZGNfc3RhdGUgKnN0ID0g aWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4+DQo+PiAgICAgICAgZm9yX2VhY2hfc2V0X2JpdChiaXQs IGluZGlvX2Rldi0+YWN0aXZlX3NjYW5fbWFzaywNCj4+ICAgICAgICAgICAgICAgICAgICAgICAg IGluZGlvX2Rldi0+bnVtX2NoYW5uZWxzKSB7DQo+PiBAQCAtNTAwLDEzICs1OTYsNzggQEAgc3Rh dGljIHVuc2lnbmVkIGludCBhdDkxX2FkY19hY3RpdmVfc2Nhbl9tYXNrX3RvX3JlZyhzdHJ1Y3Qg aWlvX2RldiAqaW5kaW9fZGV2KQ0KPj4gICAgICAgICAgICAgICAgbWFzayB8PSBCSVQoY2hhbi0+ Y2hhbm5lbCk7DQo+PiAgICAgICAgfQ0KPj4NCj4+IC0gICAgIHJldHVybiBtYXNrICYgR0VOTUFT SygxMSwgMCk7DQo+PiArICAgICByZXR1cm4gbWFzayAmIEdFTk1BU0soYXQ5MV9hZGNfbWF4X2No YW5faWR4KHN0KSwgMCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGF0OTFfYWRjX2Nj cihzdHJ1Y3QgYXQ5MV9hZGNfc3RhdGUgKnN0LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbikNCj4+ICt7DQo+PiArICAgICB1MzIgY2Ny LCBjdXJfY2NyOw0KPj4gKw0KPj4gKyAgICAgY2NyID0gKEJJVChjaGFuLT5jaGFubmVsKSB8IEJJ VChjaGFuLT5jaGFubmVsMikpOw0KPj4gKw0KPj4gKyAgICAgaWYgKEFUOTFfQURDX1NBTUE3RzUo c3QpKSB7DQo+PiArICAgICAgICAgICAgIGN1cl9jY3IgPSBhdDkxX2FkY19yZWFkbChzdCwgQVQ5 MV9TQU1BN0c1X0NDUik7DQo+PiArICAgICAgICAgICAgIGNjciA8PD0gQVQ5MV9TQU1BN0c1X0NP Ul9ESUZGX09GRlNFVDsNCj4+ICsgICAgICAgICAgICAgaWYgKGNoYW4tPmRpZmZlcmVudGlhbCkN Cj4+ICsgICAgICAgICAgICAgICAgICAgICBhdDkxX2FkY193cml0ZWwoc3QsIEFUOTFfU0FNQTdH NV9DQ1IsIGN1cl9jY3IgfCBjY3IpOw0KPj4gKyAgICAgICAgICAgICBlbHNlDQo+PiArICAgICAg ICAgICAgICAgICAgICAgYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX1NBTUE3RzVfQ0NSLCBjdXJf Y2NyICYgfmNjcik7DQo+PiArICAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgICAgICBjdXJfY2Ny ID0gYXQ5MV9hZGNfcmVhZGwoc3QsIEFUOTFfU0FNQTVEMl9DT1IpOw0KPj4gKyAgICAgICAgICAg ICBjY3IgPDw9IEFUOTFfU0FNQTVEMl9DT1JfRElGRl9PRkZTRVQ7DQo+PiArICAgICAgICAgICAg IGlmIChjaGFuLT5kaWZmZXJlbnRpYWwpDQo+PiArICAgICAgICAgICAgICAgICAgICAgYXQ5MV9h ZGNfd3JpdGVsKHN0LCBBVDkxX1NBTUE1RDJfQ09SLCBjdXJfY2NyIHwgY2NyKTsNCj4+ICsgICAg ICAgICAgICAgZWxzZQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgIGF0OTFfYWRjX3dyaXRlbChz dCwgQVQ5MV9TQU1BNUQyX0NPUiwgY3VyX2NjciAmIH5jY3IpOw0KPj4gKyAgICAgfQ0KPj4gK30N Cj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBhdDkxX2FkY19pcnFfc3RhdHVzKHN0cnVjdCBhdDkxX2Fk Y19zdGF0ZSAqc3QsIHUzMiAqc3RhdHVzLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdTMyICplb2MpDQo+PiArew0KPj4gKyAgICAgaWYgKEFUOTFfQURDX1NBTUE3RzUoc3QpKSB7 DQo+PiArICAgICAgICAgICAgICpzdGF0dXMgPSBhdDkxX2FkY19yZWFkbChzdCwgQVQ5MV9TQU1B NUQyX0lTUik7DQo+PiArICAgICAgICAgICAgICplb2MgPSBhdDkxX2FkY19yZWFkbChzdCwgQVQ5 MV9TQU1BN0c1X0VPQ19JU1IpOw0KPj4gKyAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgICAgICAg KnN0YXR1cyA9ICplb2MgPSBhdDkxX2FkY19yZWFkbChzdCwgQVQ5MV9TQU1BNUQyX0lTUik7DQo+ PiArICAgICB9DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGF0OTFfYWRjX2lycV9tYXNr KHN0cnVjdCBhdDkxX2FkY19zdGF0ZSAqc3QsIHUzMiAqc3RhdHVzLCB1MzIgKmVvYykNCj4+ICt7 DQo+PiArICAgICBpZiAoQVQ5MV9BRENfU0FNQTdHNShzdCkpIHsNCj4+ICsgICAgICAgICAgICAg KnN0YXR1cyA9IGF0OTFfYWRjX3JlYWRsKHN0LCBBVDkxX1NBTUE1RDJfSU1SKTsNCj4+ICsgICAg ICAgICAgICAgKmVvYyA9IGF0OTFfYWRjX3JlYWRsKHN0LCBBVDkxX1NBTUE3RzVfRU9DX0lNUik7 DQo+PiArICAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgICAgICAqc3RhdHVzID0gKmVvYyA9IGF0 OTFfYWRjX3JlYWRsKHN0LCBBVDkxX1NBTUE1RDJfSU1SKTsNCj4+ICsgICAgIH0NCj4+ICt9DQo+ PiArDQo+PiArc3RhdGljIHZvaWQgYXQ5MV9hZGNfZW9jX2RpcyhzdHJ1Y3QgYXQ5MV9hZGNfc3Rh dGUgKnN0LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkNCj4+ICt7DQo+PiArICAgICBpZiAoIUFUOTFf QURDX1NBTUE3RzUoc3QpKQ0KPj4gKyAgICAgICAgICAgICBhdDkxX2FkY193cml0ZWwoc3QsIEFU OTFfU0FNQTVEMl9JRFIsIEJJVChjaGFubmVsKSk7DQo+PiArICAgICAvKiBmb3IgU0FNQTdHNSwg RXJyYXRhIHJlY29tbWVuZHMgbm90IHdyaXRpbmcgdG8gRU9DX0lEUiByZWdpc3RlciAqLw0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBhdDkxX2FkY19lb2NfZW5hKHN0cnVjdCBhdDkxX2Fk Y19zdGF0ZSAqc3QsIHVuc2lnbmVkIGludCBjaGFubmVsKQ0KPj4gK3sNCj4+ICsgICAgIGlmIChB VDkxX0FEQ19TQU1BN0c1KHN0KSkNCj4+ICsgICAgICAgICAgICAgYXQ5MV9hZGNfd3JpdGVsKHN0 LCBBVDkxX1NBTUE3RzVfRU9DX0lFUiwgQklUKGNoYW5uZWwpKTsNCj4+ICsgICAgIGVsc2UNCj4+ ICsgICAgICAgICAgICAgYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX1NBTUE1RDJfSUVSLCBCSVQo Y2hhbm5lbCkpOw0KPj4gICB9DQo+Pg0KPj4gICBzdGF0aWMgdm9pZCBhdDkxX2FkY19jb25maWdf ZW1yKHN0cnVjdCBhdDkxX2FkY19zdGF0ZSAqc3QpDQo+PiAgIHsNCj4+ICAgICAgICAvKiBjb25m aWd1cmUgdGhlIGV4dGVuZGVkIG1vZGUgcmVnaXN0ZXIgKi8NCj4+IC0gICAgIHVuc2lnbmVkIGlu dCBlbXIgPSBhdDkxX2FkY19yZWFkbChzdCwgQVQ5MV9TQU1BNUQyX0VNUik7DQo+PiArICAgICB1 bnNpZ25lZCBpbnQgZW1yOw0KPj4gKw0KPj4gKyAgICAgaWYgKEFUOTFfQURDX1NBTUE3RzUoc3Qp KQ0KPj4gKyAgICAgICAgICAgICBlbXIgPSBhdDkxX2FkY19yZWFkbChzdCwgQVQ5MV9TQU1BN0c1 X0VNUik7DQo+PiArICAgICBlbHNlDQo+PiArICAgICAgICAgICAgIGVtciA9IGF0OTFfYWRjX3Jl YWRsKHN0LCBBVDkxX1NBTUE1RDJfRU1SKTsNCj4+DQo+PiAgICAgICAgLyogc2VsZWN0IG92ZXJz YW1wbGluZyBwZXIgc2luZ2xlIHRyaWdnZXIgZXZlbnQgKi8NCj4+ICAgICAgICBlbXIgfD0gQVQ5 MV9TQU1BNUQyX0VNUl9BU1RFKDEpOw0KPj4gQEAgLTUzMCw3ICs2OTEsMTAgQEAgc3RhdGljIHZv aWQgYXQ5MV9hZGNfY29uZmlnX2VtcihzdHJ1Y3QgYXQ5MV9hZGNfc3RhdGUgKnN0KQ0KPj4gICAg ICAgICAgICAgICAgYnJlYWs7DQo+PiAgICAgICAgfQ0KPj4NCj4+IC0gICAgIGF0OTFfYWRjX3dy aXRlbChzdCwgQVQ5MV9TQU1BNUQyX0VNUiwgZW1yKTsNCj4+ICsgICAgIGlmIChBVDkxX0FEQ19T QU1BN0c1KHN0KSkNCj4+ICsgICAgICAgICAgICAgYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX1NB TUE3RzVfRU1SLCBlbXIpOw0KPj4gKyAgICAgZWxzZQ0KPj4gKyAgICAgICAgICAgICBhdDkxX2Fk Y193cml0ZWwoc3QsIEFUOTFfU0FNQTVEMl9FTVIsIGVtcik7DQo+PiAgIH0NCj4+DQo+PiAgIHN0 YXRpYyBpbnQgYXQ5MV9hZGNfYWRqdXN0X3ZhbF9vc3Ioc3RydWN0IGF0OTFfYWRjX3N0YXRlICpz dCwgaW50ICp2YWwpDQo+PiBAQCAtNzI2LDcgKzg5MCwxMiBAQCBzdGF0aWMgaW50IGF0OTFfYWRj X2NvbmZpZ3VyZV90cmlnZ2VyKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZywgYm9vbCBzdGF0ZSkN Cj4+ICAgew0KPj4gICAgICAgIHN0cnVjdCBpaW9fZGV2ICppbmRpbyA9IGlpb190cmlnZ2VyX2dl dF9kcnZkYXRhKHRyaWcpOw0KPj4gICAgICAgIHN0cnVjdCBhdDkxX2FkY19zdGF0ZSAqc3QgPSBp aW9fcHJpdihpbmRpbyk7DQo+PiAtICAgICB1MzIgc3RhdHVzID0gYXQ5MV9hZGNfcmVhZGwoc3Qs IEFUOTFfU0FNQTVEMl9UUkdSKTsNCj4+ICsgICAgIHUzMiBzdGF0dXM7DQo+PiArDQo+PiArICAg ICBpZiAoQVQ5MV9BRENfU0FNQTdHNShzdCkpDQo+PiArICAgICAgICAgICAgIHN0YXR1cyA9IGF0 OTFfYWRjX3JlYWRsKHN0LCBBVDkxX1NBTUE3RzVfVFJHUik7DQo+PiArICAgICBlbHNlDQo+PiAr ICAgICAgICAgICAgIHN0YXR1cyA9IGF0OTFfYWRjX3JlYWRsKHN0LCBBVDkxX1NBTUE1RDJfVFJH Uik7DQo+Pg0KPj4gICAgICAgIC8qIGNsZWFyIFRSR01PRCAqLw0KPj4gICAgICAgIHN0YXR1cyAm PSB+QVQ5MV9TQU1BNUQyX1RSR1JfVFJHTU9EX01BU0s7DQo+PiBAQCAtNzM1LDcgKzkwNCwxMCBA QCBzdGF0aWMgaW50IGF0OTFfYWRjX2NvbmZpZ3VyZV90cmlnZ2VyKHN0cnVjdCBpaW9fdHJpZ2dl ciAqdHJpZywgYm9vbCBzdGF0ZSkNCj4+ICAgICAgICAgICAgICAgIHN0YXR1cyB8PSBzdC0+c2Vs ZWN0ZWRfdHJpZy0+dHJnbW9kX3ZhbHVlOw0KPj4NCj4+ICAgICAgICAvKiBzZXQvdW5zZXQgaHcg dHJpZ2dlciAqLw0KPj4gLSAgICAgYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX1NBTUE1RDJfVFJH Uiwgc3RhdHVzKTsNCj4+ICsgICAgIGlmIChBVDkxX0FEQ19TQU1BN0c1KHN0KSkNCj4+ICsgICAg ICAgICAgICAgYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX1NBTUE3RzVfVFJHUiwgc3RhdHVzKTsN Cj4+ICsgICAgIGVsc2UNCj4+ICsgICAgICAgICAgICAgYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkx X1NBTUE1RDJfVFJHUiwgc3RhdHVzKTsNCj4+DQo+PiAgICAgICAgcmV0dXJuIDA7DQo+PiAgIH0N Cj4+IEBAIC04NzcsNyArMTA0OSw3IEBAIHN0YXRpYyBib29sIGF0OTFfYWRjX2N1cnJlbnRfY2hh bl9pc190b3VjaChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQ0KPj4NCj4+ICAgICAgICByZXR1 cm4gISFiaXRtYXBfc3Vic2V0KGluZGlvX2Rldi0+YWN0aXZlX3NjYW5fbWFzaywNCj4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZzdC0+dG91Y2hfc3QuY2hhbm5lbHNfYml0bWFzaywN Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MV9TQU1BNUQyX01BWF9DSEFOX0lE WCArIDEpOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdDkxX2FkY19tYXhfY2hh bl9pZHgoc3QpICsgMSk7DQo+PiAgIH0NCj4+DQo+PiAgIHN0YXRpYyBpbnQgYXQ5MV9hZGNfYnVm ZmVyX3ByZXBhcmUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikNCj4+IEBAIC05MDUsNyArMTA3 Nyw2IEBAIHN0YXRpYyBpbnQgYXQ5MV9hZGNfYnVmZmVyX3ByZXBhcmUoc3RydWN0IGlpb19kZXYg KmluZGlvX2RldikNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGlvX2Rldi0+bnVtX2No YW5uZWxzKSB7DQo+PiAgICAgICAgICAgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAq Y2hhbiA9DQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdDkxX2Fk Y19jaGFuX2dldChpbmRpb19kZXYsIGJpdCk7DQo+PiAtICAgICAgICAgICAgIHUzMiBjb3I7DQo+ Pg0KPj4gICAgICAgICAgICAgICAgaWYgKCFjaGFuKQ0KPj4gICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsNCj4+IEBAIC05MTQsMTYgKzEwODUsNyBAQCBzdGF0aWMgaW50IGF0OTFfYWRj X2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpDQo+PiAgICAgICAgICAg ICAgICAgICAgY2hhbi0+dHlwZSA9PSBJSU9fUFJFU1NVUkUpDQo+PiAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOw0KPj4NCj4+IC0gICAgICAgICAgICAgY29yID0gYXQ5MV9hZGNfcmVh ZGwoc3QsIEFUOTFfU0FNQTVEMl9DT1IpOw0KPj4gLQ0KPj4gLSAgICAgICAgICAgICBpZiAoY2hh bi0+ZGlmZmVyZW50aWFsKQ0KPj4gLSAgICAgICAgICAgICAgICAgICAgIGNvciB8PSAoQklUKGNo YW4tPmNoYW5uZWwpIHwgQklUKGNoYW4tPmNoYW5uZWwyKSkgPDwNCj4+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFUOTFfU0FNQTVEMl9DT1JfRElGRl9PRkZTRVQ7DQo+PiAtICAgICAg ICAgICAgIGVsc2UNCj4+IC0gICAgICAgICAgICAgICAgICAgICBjb3IgJj0gfihCSVQoY2hhbi0+ Y2hhbm5lbCkgPDwNCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MV9TQU1BNUQy X0NPUl9ESUZGX09GRlNFVCk7DQo+PiAtDQo+PiAtICAgICAgICAgICAgIGF0OTFfYWRjX3dyaXRl bChzdCwgQVQ5MV9TQU1BNUQyX0NPUiwgY29yKTsNCj4+ICsgICAgICAgICAgICAgYXQ5MV9hZGNf Y2NyKHN0LCBjaGFuKTsNCj4+DQo+PiAgICAgICAgICAgICAgICBhdDkxX2FkY193cml0ZWwoc3Qs IEFUOTFfU0FNQTVEMl9DSEVSLCBCSVQoY2hhbi0+Y2hhbm5lbCkpOw0KPj4gICAgICAgIH0NCj4+ IEBAIC05NzUsNyArMTEzNywxMCBAQCBzdGF0aWMgaW50IGF0OTFfYWRjX2J1ZmZlcl9wb3N0ZGlz YWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQ0KPj4gICAgICAgICAgICAgICAgYXQ5MV9h ZGNfd3JpdGVsKHN0LCBBVDkxX1NBTUE1RDJfSURSLCBBVDkxX1NBTUE1RDJfSUVSX0RSRFkpOw0K Pj4NCj4+ICAgICAgICAvKiByZWFkIG92ZXJmbG93IHJlZ2lzdGVyIHRvIGNsZWFyIHBvc3NpYmxl IG92ZXJmbG93IHN0YXR1cyAqLw0KPj4gLSAgICAgYXQ5MV9hZGNfcmVhZGwoc3QsIEFUOTFfU0FN QTVEMl9PVkVSKTsNCj4+ICsgICAgIGlmIChBVDkxX0FEQ19TQU1BN0c1KHN0KSkNCj4+ICsgICAg ICAgICAgICAgYXQ5MV9hZGNfcmVhZGwoc3QsIEFUOTFfU0FNQTdHNV9PVkVSKTsNCj4+ICsgICAg IGVsc2UNCj4+ICsgICAgICAgICAgICAgYXQ5MV9hZGNfcmVhZGwoc3QsIEFUOTFfU0FNQTVEMl9P VkVSKTsNCj4+DQo+PiAgICAgICAgLyogaWYgd2UgYXJlIHVzaW5nIERNQSB3ZSBtdXN0IGNsZWFy IHJlZ2lzdGVycyBhbmQgZW5kIERNQSAqLw0KPj4gICAgICAgIGlmIChzdC0+ZG1hX3N0LmRtYV9j aGFuKQ0KPj4gQEAgLTEwMTgsMTMgKzExODMsMTUgQEAgc3RhdGljIHZvaWQgYXQ5MV9hZGNfdHJp Z2dlcl9oYW5kbGVyX25vZG1hKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsDQo+PiAgICAgICAg dTggYml0Ow0KPj4gICAgICAgIHUzMiBtYXNrID0gYXQ5MV9hZGNfYWN0aXZlX3NjYW5fbWFza190 b19yZWcoaW5kaW9fZGV2KTsNCj4+ICAgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCA9IDUwOw0K Pj4gKyAgICAgdTMyIHN0YXR1cywgaW1yLCBlb2MgPSAwLCBlb2NfaW1yOw0KPj4NCj4+ICAgICAg ICAvKg0KPj4gICAgICAgICAqIENoZWNrIGlmIHRoZSBjb252ZXJzaW9uIGlzIHJlYWR5LiBJZiBu b3QsIHdhaXQgYSBsaXR0bGUgYml0LCBhbmQNCj4+ICAgICAgICAgKiBpbiBjYXNlIG9mIHRpbWVv dXQgZXhpdCB3aXRoIGFuIGVycm9yLg0KPj4gICAgICAgICAqLw0KPj4gLSAgICAgd2hpbGUgKChh dDkxX2FkY19yZWFkbChzdCwgQVQ5MV9TQU1BNUQyX0lTUikgJiBtYXNrKSAhPSBtYXNrICYmDQo+ PiAtICAgICAgICAgICAgdGltZW91dCkgew0KPj4gKyAgICAgd2hpbGUgKCgoZW9jICYgbWFzaykg IT0gbWFzaykgJiYgdGltZW91dCkgew0KPj4gKyAgICAgICAgICAgICBhdDkxX2FkY19pcnFfc3Rh dHVzKHN0LCAmc3RhdHVzLCAmZW9jKTsNCj4+ICsgICAgICAgICAgICAgYXQ5MV9hZGNfaXJxX21h c2soc3QsICZpbXIsICZlb2NfaW1yKTsNCj4+ICAgICAgICAgICAgICAgIHVzbGVlcF9yYW5nZSg1 MCwgMTAwKTsNCj4+ICAgICAgICAgICAgICAgIHRpbWVvdXQtLTsNCj4+ICAgICAgICB9DQo+PiBA QCAtMTE5NSw3ICsxMzYyLDcgQEAgc3RhdGljIHZvaWQgYXQ5MV9hZGNfdG91Y2hfZGF0YV9oYW5k bGVyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpDQo+PiAgICAgICAgaW50IGkgPSAwOw0KPj4N Cj4+ICAgICAgICBmb3JfZWFjaF9zZXRfYml0KGJpdCwgaW5kaW9fZGV2LT5hY3RpdmVfc2Nhbl9t YXNrLA0KPj4gLSAgICAgICAgICAgICAgICAgICAgICBBVDkxX1NBTUE1RDJfTUFYX0NIQU5fSURY ICsgMSkgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgICBhdDkxX2FkY19tYXhfY2hhbl9pZHgo c3QpICsgMSkgew0KPj4gICAgICAgICAgICAgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3Qg KmNoYW4gPQ0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0OTFf YWRjX2NoYW5fZ2V0KGluZGlvX2RldiwgYml0KTsNCj4+DQo+PiBAQCAtMTI2MiwxMiArMTQyOSwx NCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXQ5MV9hZGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQg KnByaXZhdGUpDQo+PiAgIHsNCj4+ICAgICAgICBzdHJ1Y3QgaWlvX2RldiAqaW5kaW8gPSBwcml2 YXRlOw0KPj4gICAgICAgIHN0cnVjdCBhdDkxX2FkY19zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRp byk7DQo+PiAtICAgICB1MzIgc3RhdHVzID0gYXQ5MV9hZGNfcmVhZGwoc3QsIEFUOTFfU0FNQTVE Ml9JU1IpOw0KPj4gLSAgICAgdTMyIGltciA9IGF0OTFfYWRjX3JlYWRsKHN0LCBBVDkxX1NBTUE1 RDJfSU1SKTsNCj4+ICsgICAgIHUzMiBzdGF0dXMsIGVvYywgaW1yLCBlb2NfaW1yOw0KPj4gICAg ICAgIHUzMiByZHlfbWFzayA9IEFUOTFfU0FNQTVEMl9JRVJfWFJEWSB8IEFUOTFfU0FNQTVEMl9J RVJfWVJEWSB8DQo+PiAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFfU0FNQTVEMl9JRVJfUFJE WTsNCj4+DQo+PiAtICAgICBpZiAoIShzdGF0dXMgJiBpbXIpKQ0KPj4gKyAgICAgYXQ5MV9hZGNf aXJxX3N0YXR1cyhzdCwgJnN0YXR1cywgJmVvYyk7DQo+PiArICAgICBhdDkxX2FkY19pcnFfbWFz ayhzdCwgJmltciwgJmVvY19pbXIpOw0KPj4gKw0KPj4gKyAgICAgaWYgKCEoc3RhdHVzICYgaW1y KSAmJiAhKGVvYyAmIGVvY19pbXIpKQ0KPj4gICAgICAgICAgICAgICAgcmV0dXJuIElSUV9OT05F Ow0KPj4gICAgICAgIGlmIChzdGF0dXMgJiBBVDkxX1NBTUE1RDJfSUVSX1BFTikgew0KPj4gICAg ICAgICAgICAgICAgLyogcGVuIGRldGVjdGVkIElSUSAqLw0KPj4gQEAgLTEzMDksNyArMTQ3OCw2 IEBAIHN0YXRpYyBpbnQgYXQ5MV9hZGNfcmVhZF9pbmZvX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5k aW9fZGV2LA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlpb19j aGFuX3NwZWMgY29uc3QgKmNoYW4sIGludCAqdmFsKQ0KPj4gICB7DQo+PiAgICAgICAgc3RydWN0 IGF0OTFfYWRjX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7DQo+PiAtICAgICB1MzIg Y29yID0gMDsNCj4+ICAgICAgICB1MTYgdG1wX3ZhbDsNCj4+ICAgICAgICBpbnQgcmV0Ow0KPj4N Cj4+IEBAIC0xMzU1LDEzICsxNTIzLDkgQEAgc3RhdGljIGludCBhdDkxX2FkY19yZWFkX2luZm9f cmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsDQo+Pg0KPj4gICAgICAgIHN0LT5jaGFuID0g Y2hhbjsNCj4+DQo+PiAtICAgICBpZiAoY2hhbi0+ZGlmZmVyZW50aWFsKQ0KPj4gLSAgICAgICAg ICAgICBjb3IgPSAoQklUKGNoYW4tPmNoYW5uZWwpIHwgQklUKGNoYW4tPmNoYW5uZWwyKSkgPDwN Cj4+IC0gICAgICAgICAgICAgICAgICAgQVQ5MV9TQU1BNUQyX0NPUl9ESUZGX09GRlNFVDsNCj4+ IC0NCj4+IC0gICAgIGF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9TQU1BNUQyX0NPUiwgY29yKTsN Cj4+ICsgICAgIGF0OTFfYWRjX2NjcihzdCwgY2hhbik7DQo+PiAgICAgICAgYXQ5MV9hZGNfd3Jp dGVsKHN0LCBBVDkxX1NBTUE1RDJfQ0hFUiwgQklUKGNoYW4tPmNoYW5uZWwpKTsNCj4+IC0gICAg IGF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9TQU1BNUQyX0lFUiwgQklUKGNoYW4tPmNoYW5uZWwp KTsNCj4+ICsgICAgIGF0OTFfYWRjX2VvY19lbmEoc3QsIGNoYW4tPmNoYW5uZWwpOw0KPj4gICAg ICAgIGF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9TQU1BNUQyX0NSLCBBVDkxX1NBTUE1RDJfQ1Jf U1RBUlQpOw0KPj4NCj4+ICAgICAgICByZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGlt ZW91dChzdC0+d3FfZGF0YV9hdmFpbGFibGUsDQo+PiBAQCAtMTM3OCw3ICsxNTQyLDcgQEAgc3Rh dGljIGludCBhdDkxX2FkY19yZWFkX2luZm9fcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYs DQo+PiAgICAgICAgICAgICAgICBzdC0+Y29udmVyc2lvbl9kb25lID0gZmFsc2U7DQo+PiAgICAg ICAgfQ0KPj4NCj4+IC0gICAgIGF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9TQU1BNUQyX0lEUiwg QklUKGNoYW4tPmNoYW5uZWwpKTsNCj4+ICsgICAgIGF0OTFfYWRjX2VvY19kaXMoc3QsIHN0LT5j aGFuLT5jaGFubmVsKTsNCj4+ICAgICAgICBhdDkxX2FkY193cml0ZWwoc3QsIEFUOTFfU0FNQTVE Ml9DSERSLCBCSVQoY2hhbi0+Y2hhbm5lbCkpOw0KPj4NCj4+ICAgICAgICAvKiBOZWVkZWQgdG8g QUNLIHRoZSBEUkRZIGludGVycnVwdGlvbiAqLw0KPj4gQEAgLTE1NzcsMTQgKzE3NDEsMTQgQEAg c3RhdGljIGludCBhdDkxX2FkY191cGRhdGVfc2Nhbl9tb2RlKHN0cnVjdCBpaW9fZGV2ICppbmRp b19kZXYsDQo+PiAgICAgICAgc3RydWN0IGF0OTFfYWRjX3N0YXRlICpzdCA9IGlpb19wcml2KGlu ZGlvX2Rldik7DQo+Pg0KPj4gICAgICAgIGlmIChiaXRtYXBfc3Vic2V0KHNjYW5fbWFzaywgJnN0 LT50b3VjaF9zdC5jaGFubmVsc19iaXRtYXNrLA0KPj4gLSAgICAgICAgICAgICAgICAgICAgICAg QVQ5MV9TQU1BNUQyX01BWF9DSEFOX0lEWCArIDEpKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgYXQ5MV9hZGNfbWF4X2NoYW5faWR4KHN0KSArIDEpKQ0KPj4gICAgICAgICAgICAgICAgcmV0 dXJuIDA7DQo+PiAgICAgICAgLyoNCj4+ICAgICAgICAgKiBpZiB0aGUgbmV3IGJpdG1hcCBpcyBh IGNvbWJpbmF0aW9uIG9mIHRvdWNoc2NyZWVuIGFuZCByZWd1bGFyDQo+PiAgICAgICAgICogY2hh bm5lbHMsIHRoZW4gd2UgYXJlIG5vdCBmaW5lDQo+PiAgICAgICAgICovDQo+PiAgICAgICAgaWYg KGJpdG1hcF9pbnRlcnNlY3RzKCZzdC0+dG91Y2hfc3QuY2hhbm5lbHNfYml0bWFzaywgc2Nhbl9t YXNrLA0KPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFfU0FNQTVEMl9NQVhfQ0hB Tl9JRFggKyAxKSkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBhdDkxX2FkY19tYXhf Y2hhbl9pZHgoc3QpICsgMSkpDQo+PiAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4+ ICAgICAgICByZXR1cm4gMDsNCj4+ICAgfQ0KPj4gQEAgLTE1OTQsNiArMTc1OCw4IEBAIHN0YXRp YyB2b2lkIGF0OTFfYWRjX2h3X2luaXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikNCj4+ICAg ICAgICBzdHJ1Y3QgYXQ5MV9hZGNfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4+ DQo+PiAgICAgICAgYXQ5MV9hZGNfd3JpdGVsKHN0LCBBVDkxX1NBTUE1RDJfQ1IsIEFUOTFfU0FN QTVEMl9DUl9TV1JTVCk7DQo+PiArICAgICBpZiAoQVQ5MV9BRENfU0FNQTdHNShzdCkpDQo+PiAr ICAgICAgICAgICAgIGF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9TQU1BN0c1X0VPQ19JRFIsIDB4 ZmZmZmZmZmYpOw0KPj4gICAgICAgIGF0OTFfYWRjX3dyaXRlbChzdCwgQVQ5MV9TQU1BNUQyX0lE UiwgMHhmZmZmZmZmZik7DQo+PiAgICAgICAgLyoNCj4+ICAgICAgICAgKiBUcmFuc2ZlciBmaWVs ZCBtdXN0IGJlIHNldCB0byAyIGFjY29yZGluZyB0byB0aGUgZGF0YXNoZWV0IGFuZA0KPj4gQEAg LTE3MTgsMTggKzE4ODQsMjcgQEAgc3RhdGljIGludCBhdDkxX2FkY19wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQ0KPj4gICAgICAgIGluZGlvX2Rldi0+bmFtZSA9IGRldl9uYW1l KCZwZGV2LT5kZXYpOw0KPj4gICAgICAgIGluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1Rf TU9ERSB8IElORElPX0JVRkZFUl9TT0ZUV0FSRTsNCj4+ICAgICAgICBpbmRpb19kZXYtPmluZm8g PSAmYXQ5MV9hZGNfaW5mbzsNCj4+IC0gICAgIGluZGlvX2Rldi0+Y2hhbm5lbHMgPSBhdDkxX2Fk Y19jaGFubmVsczsNCj4+IC0gICAgIGluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0la RShhdDkxX2FkY19jaGFubmVscyk7DQo+Pg0KPj4gICAgICAgIHN0ID0gaWlvX3ByaXYoaW5kaW9f ZGV2KTsNCj4+ICAgICAgICBzdC0+aW5kaW9fZGV2ID0gaW5kaW9fZGV2Ow0KPj4NCj4+IC0gICAg IGJpdG1hcF9zZXQoJnN0LT50b3VjaF9zdC5jaGFubmVsc19iaXRtYXNrLA0KPj4gLSAgICAgICAg ICAgICAgICBBVDkxX1NBTUE1RDJfVE9VQ0hfWF9DSEFOX0lEWCwgMSk7DQo+PiAtICAgICBiaXRt YXBfc2V0KCZzdC0+dG91Y2hfc3QuY2hhbm5lbHNfYml0bWFzaywNCj4+IC0gICAgICAgICAgICAg ICAgQVQ5MV9TQU1BNUQyX1RPVUNIX1lfQ0hBTl9JRFgsIDEpOw0KPj4gLSAgICAgYml0bWFwX3Nl dCgmc3QtPnRvdWNoX3N0LmNoYW5uZWxzX2JpdG1hc2ssDQo+PiAtICAgICAgICAgICAgICAgIEFU OTFfU0FNQTVEMl9UT1VDSF9QX0NIQU5fSURYLCAxKTsNCj4+ICsgICAgIHN0LT5zb2NfaW5mby5z YW1hN2c1ID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGRldi0+ZGV2Lm9mX25vZGUsDQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaWNy b2NoaXAsc2FtYTdnNS1hZGMiKTsNCj4gDQo+IEJldHRlciB0byB1c2UgbWF0Y2hfZGF0YSB0byBn ZXQgYW4gZW51bSB2YWx1ZSB3aGljaCBpcyB1c2VkIHRvIGluZGV4DQo+IGludG8gYSB0YWJsZSBv ZiBzdXBwb3J0IHBhcnQgZGVzY3JpcHRpb24gc3RydWN0dXJlcy4gIEVhY2ggb2YgdGhvc2UNCj4g c3RydWN0dXJlcyBoYXMgYWxsIHRoZSByZWdpc3RlcnMgZXRjICsgY2hhbm5lbCBzcGVjcyBhbmQg Y2FsbGJhY2tzDQo+IHdoZXJlIG5lZWRlZCBmb3IgbW9yZSBjb21wbGV4IGhhbmRsaW5nLg0KPiAN Cj4gT3RoZXIgYWR2YW50YWdlIGlzIHlvdSBjYW4gaW50cm9kdWNlIHRoZSBzdHJ1Y3R1cmVzIGlu IGEgcHJlY3Vyc29yIHBhdGNoIHdpdGgNCj4ganVzdCBvbmUgZW50cnkgZm9yIGV4aXN0aW5nIGJl aGF2aW91ci4gIFRoZSBuZXcgZGV2aWNlIHN1cHBvcnQgaXMgdGhlbiBhZGRlZA0KPiBpbiBhIHNl Y29uZCBwYXRjaC4gIEFsbCB3ZSBuZWVkIHRvIGRvIHRoZW4gaXMgY2hlY2sgZmlyc3QgcGF0Y2gg aXMgYSBub29wDQo+IGFuZCB0aGF0IHNlY29uZCBtdWNoIHNob3J0ZXIgcGF0Y2ggbWFrZXMgc2Vu c2UuDQo+IA0KPj4gKw0KPj4gKyAgICAgaWYgKEFUOTFfQURDX1NBTUE3RzUoc3QpKSB7DQo+PiAr ICAgICAgICAgICAgIGluZGlvX2Rldi0+Y2hhbm5lbHMgPSBhdDkxX3NhbWE3ZzVfYWRjX2NoYW5u ZWxzOw0KPj4gKyAgICAgICAgICAgICBpbmRpb19kZXYtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJ WkUoYXQ5MV9zYW1hN2c1X2FkY19jaGFubmVscyk7DQo+PiArICAgICB9IGVsc2Ugew0KPj4gKyAg ICAgICAgICAgICBpbmRpb19kZXYtPmNoYW5uZWxzID0gYXQ5MV9zYW1hNWQyX2FkY19jaGFubmVs czsNCj4+ICsgICAgICAgICAgICAgaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpF KGF0OTFfc2FtYTVkMl9hZGNfY2hhbm5lbHMpOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICBiaXRt YXBfc2V0KCZzdC0+dG91Y2hfc3QuY2hhbm5lbHNfYml0bWFzaywNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICBBVDkxX1NBTUE1RDJfVE9VQ0hfWF9DSEFOX0lEWCwgMSk7DQo+PiArICAgICAg ICAgICAgIGJpdG1hcF9zZXQoJnN0LT50b3VjaF9zdC5jaGFubmVsc19iaXRtYXNrLA0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIEFUOTFfU0FNQTVEMl9UT1VDSF9ZX0NIQU5fSURYLCAxKTsN Cj4+ICsgICAgICAgICAgICAgYml0bWFwX3NldCgmc3QtPnRvdWNoX3N0LmNoYW5uZWxzX2JpdG1h c2ssDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MV9TQU1BNUQyX1RPVUNIX1BfQ0hB Tl9JRFgsIDEpOw0KPj4gKyAgICAgfQ0KPj4NCj4+ICAgICAgICBzdC0+b3ZlcnNhbXBsaW5nX3Jh dGlvID0gQVQ5MV9PU1JfMVNBTVBMRVM7DQo+Pg0KPj4gQEAgLTE4NTMsOSArMjAyOCwxMiBAQCBz dGF0aWMgaW50IGF0OTFfYWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ PiAgICAgICAgICAgICAgICBkZXZfaW5mbygmcGRldi0+ZGV2LCAic2V0dGluZyB1cCB0cmlnZ2Vy IGFzICVzXG4iLA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnNlbGVjdGVkX3RyaWct Pm5hbWUpOw0KPj4NCj4+IC0gICAgIGRldl9pbmZvKCZwZGV2LT5kZXYsICJ2ZXJzaW9uOiAleFxu IiwNCj4+IC0gICAgICAgICAgICAgIHJlYWRsX3JlbGF4ZWQoc3QtPmJhc2UgKyBBVDkxX1NBTUE1 RDJfVkVSU0lPTikpOw0KPj4gLQ0KPj4gKyAgICAgaWYgKEFUOTFfQURDX1NBTUE3RzUoc3QpKQ0K PiANCj4gV2UgbWF5IGJlIGJldHRlciBvZmYgd2l0aCBhIGxvb2sgdXAgdGFibGUgb2YgYWxsIHRo ZSByZWdpc3RlcnMNCj4gKCsgaWYgbmVlZGVkIHNvbWUgY2FsbGJhY2sgZnVuY3Rpb25zKSByYXRo ZXIgdGhhbiBhIHdob2xlIGJ1bmNoIG9mDQo+IGlmIHN0YXRlbWVudHMuDQo+IA0KPiBZb3UgdGhl biBqdXN0IGFzc2lnbiB0aGUgcmlnaHQgJ3BhcnQgbnVtYmVyIHNwZWNpZmljJyBzdHJ1Y3R1cmUN Cj4gb25jZSBpbiBwcm9iZS4NCj4gDQo+PiArICAgICAgICAgICAgIGRldl9pbmZvKCZwZGV2LT5k ZXYsICJ2ZXJzaW9uOiAleFxuIiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgYXQ5MV9hZGNf cmVhZGwoc3QsIEFUOTFfU0FNQTdHNV9WRVJTSU9OKSk7DQo+PiArICAgICBlbHNlDQo+PiArICAg ICAgICAgICAgIGRldl9pbmZvKCZwZGV2LT5kZXYsICJ2ZXJzaW9uOiAleFxuIiwNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgYXQ5MV9hZGNfcmVhZGwoc3QsIEFUOTFfU0FNQTVEMl9WRVJTSU9O KSk7DQo+PiAgICAgICAgcmV0dXJuIDA7DQo+Pg0KPj4gICBkbWFfZGlzYWJsZToNCj4+IEBAIC0x OTU3LDYgKzIxMzUsOCBAQCBzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYXQ5MV9hZGNfcG1fb3Bz LCBhdDkxX2FkY19zdXNwZW5kLCBhdDkxX2FkY19yZXN1bWUpOw0KPj4gICBzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBhdDkxX2FkY19kdF9tYXRjaFtdID0gew0KPj4gICAgICAgIHsN Cj4+ICAgICAgICAgICAgICAgIC5jb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDItYWRjIiwNCj4+ ICsgICAgIH0sIHsNCj4+ICsgICAgICAgICAgICAgLmNvbXBhdGlibGUgPSAibWljcm9jaGlwLHNh bWE3ZzUtYWRjIiwNCj4+ICAgICAgICB9LCB7DQo+PiAgICAgICAgICAgICAgICAvKiBzZW50aW5l bCAqLw0KPj4gICAgICAgIH0NCj4+IEBAIC0xOTY3LDEzICsyMTQ3LDE0IEBAIHN0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIGF0OTFfYWRjX2RyaXZlciA9IHsNCj4+ICAgICAgICAucHJvYmUg PSBhdDkxX2FkY19wcm9iZSwNCj4+ICAgICAgICAucmVtb3ZlID0gYXQ5MV9hZGNfcmVtb3ZlLA0K Pj4gICAgICAgIC5kcml2ZXIgPSB7DQo+PiAtICAgICAgICAgICAgIC5uYW1lID0gImF0OTEtc2Ft YTVkMl9hZGMiLA0KPj4gKyAgICAgICAgICAgICAubmFtZSA9ICJhdDkxLXNhbWE1ZDItc2FtYTdn NV9hZGMiLA0KPiANCj4gUGxlYXNlIGtlZXAgdGhlIGRyaXZlciBuYW1lIHRoZSBzYW1lLiBJdCdz IGNvbW1vbiB0byBoYXZlIGEgbmFtZSBvZiBvbmUNCj4gcmFuZG9tIHBhcnQgYSBkcml2ZXIgc3Vw cG9ydHMgdXNlZCBldmVuIGlmIHRoZXJlIGFyZSBsb3RzIG9mIG90aGVycy4NCj4gVGhpcyAob3Ig d2lsZCBjYXJkcykgbmV2ZXIgc2NhbGVzIGFzIG1vcmUgcGFydHMgYXJlIGFkZGVkIHRvIGEgZHJp dmVyLg0KPiANCj4+ICAgICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IGF0OTFfYWRjX2R0 X21hdGNoLA0KPj4gICAgICAgICAgICAgICAgLnBtID0gJmF0OTFfYWRjX3BtX29wcywNCj4+ICAg ICAgICB9LA0KPj4gICB9Ow0KPj4gICBtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGF0OTFfYWRjX2Ry aXZlcikNCj4+DQo+PiAtTU9EVUxFX0FVVEhPUigiTHVkb3ZpYyBEZXNyb2NoZXMgPGx1ZG92aWMu ZGVzcm9jaGVzQGF0bWVsLmNvbT4iKTsNCj4+IC1NT0RVTEVfREVTQ1JJUFRJT04oIkF0bWVsIEFU OTEgU0FNQTVEMiBBREMiKTsNCj4+ICtNT0RVTEVfQVVUSE9SKCJMdWRvdmljIERlc3JvY2hlcyA8 bHVkb3ZpYy5kZXNyb2NoZXNAbWljcm9jaGlwLmNvbT4iKTsNCj4+ICtNT0RVTEVfQVVUSE9SKCJF dWdlbiBIcmlzdGV2IDxldWdlbi5ocmlzdGV2QG1pY3JvY2hpcC5jb20+Iik7DQo+PiArTU9EVUxF X0RFU0NSSVBUSU9OKCJNaWNyb2NoaXAgQVQ5MSBTQU1BNUQyL1NBTUE3RzUgQURDIik7DQo+PiAg IE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCj4gDQoNCg== 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.5 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,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B6ABCC433E9 for ; Mon, 8 Mar 2021 13:29:42 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 0D2C3651C2 for ; Mon, 8 Mar 2021 13:29:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0D2C3651C2 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=microchip.com 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=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Content-ID:In-Reply-To:References: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=zRezzmjBP5xiIh1ShLPBCDCVG4+LRL0B3dD/FhkrT3o=; b=R0mnVe242QoBumyOPFLIpzBe+ 7EF4bKBZIt1aD86P0/5BSWjL5v6n1THx+y785aTYbnsUoMcILeYL1+lEqGv1GAz4ilSVHMIQW5emy Pqt+SWgoJWiFqS7A4W9BxEeHd36prteKodtS0rn2ScfyslKtVkSqJcaQyGR9d4K6JBcn/+WH7g3de PUv8oYO8PU2Ro/PczHaWKxuvlgHaWjj3IkBDLMBKTncIb4gucyJKXk3CwZnstyHem7Vq7Tc0FYGKV 2YBJg8rXHau/WHIOpdCNoKMQx6OrI8cst4Ov01BUD38UiRIs41BuZjjyxzs8W/mnVxNBRdjs/t/6v 2w55t7LlQ==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lJFvX-00HRZL-Es; Mon, 08 Mar 2021 13:28:03 +0000 Received: from esa.microchip.iphmx.com ([68.232.154.123]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lJFvP-00HRVK-JC for linux-arm-kernel@lists.infradead.org; Mon, 08 Mar 2021 13:27:59 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1615210075; x=1646746075; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=H0uWV6lEuEqWVBj4LHWPheMKq4V4y1TA96GXXa6BYak=; b=XORnSL9VsYTercVP+/XNUcJwnSHRay6drMFI0GXK3fYPMeXb/LokelvN TznVjeCnlnFI5yiN8xxE/XeyITN89Pn5JmFUXIyYHunTx4fXU8fwNXJ6w fzEvA+2FyLI7u4pdv/+Rk9Hk7ZqUCdUwZ0J5I0DNL7MCnkvTKm5QBRoBR yomVl2NHqSEdMJWsqwzgMgUNvjg9rTPZhNsaaXJozs/y9qtqfnGUJhaVb cnkS6jx6ztPO2vl4MwvBnmLen+xKX2oePk5kKwEV99mO1PrmnD1cEYFbh KwvZa8CSaBE/Tal80Djrm9GRijvAhUy4BnH8SwZRw0d0BNdOkv5MpGuAB w==; IronPort-SDR: Ok5gZOyLXOHNUdsK6KcsMg1JC1c6TeKwwJQr5qW2FuQqsHNHQz+vxOCnSPZKXP4AnF779gOxIo xEqe9XbT4QnLOkrhrYTA/zDYwuoFwRAB7f0Q/u6jgdQKOgep+NyxYZjwRoORcIkQqjIKVUN7Pn mhgGBCifF9+9Gp/ilJW8ce19iI97mk5yyfBqUK75EpYoCJAEtbTWnF9hlTbe+Y6DidO9F98JQ+ 5FO5DDzOXcCz4RsrG2YPmt96DTkjsLsJu7Wohx9gHCwWYgagZDx19gLQU9jBHHhuuIzfQ43nb5 tuI= X-IronPort-AV: E=Sophos;i="5.81,232,1610434800"; d="scan'208";a="106348275" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa4.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 08 Mar 2021 06:27:50 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.85.152) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Mon, 8 Mar 2021 06:27:50 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2 via Frontend Transport; Mon, 8 Mar 2021 06:27:50 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hKqOeqgkGDV1/GBA6rNCxHJr5yM6urjDcXtsnWP30w8p0Ys05PlauLc/Jr9bOEM2M4Kbg3K6mE6hDl5082kXafZPVgObRNDhwjRQvkqyeVPe0XclPzZWqNLEaQ6MhZXY6MEcz9pVabouGtWIDXfUFTb9do1xvFRWXKK6jyDKkMWJ3QrGV39f47qBsty84gHBumOdjMRHqZd/bjWN0zzrQRTZoc6x1pbaWnd0iBFGMPNRfER8T4J4F6FsV3Z/yP6QrfZT8JPXfWUUdFNuGH1goWsZI65bw65tLvtjUy4/Fx5V8up2cnqvB3+7AY35ZgP19OZXmKmJFZMSmOTLd/wg8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H0uWV6lEuEqWVBj4LHWPheMKq4V4y1TA96GXXa6BYak=; b=jysSAy9gxThTbzE+2mzUrKsuVTTuN4CmtbT5DhoBwS9BvLkR4EBV/O1aFhEzLZ4zOu9H9a22k7s6jkKqvx+7peQ1GWMdAefEZg2DN4LtL/s6h6QRket8UkwZrrQLzh0afdCkaCx4rwgV91DpqQesMsp/V4SWBrYOj71KFgCGnHkO049QyXCzs4fWHVn2QVVoz0UjxDq30bK6BOI9HTMyJYc1PZbeaqcr0Uw/Y+02mHOnbNksSkbhLCHA1wEfwUjv7lvB5dEeSfk4nyIyexQrOBHWzUEtHOX4wyJ6S09W9q5LUJmvEv/fR/RtDkEd4Z2XAcqCq0tLiqgqtJqz3tqIiw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H0uWV6lEuEqWVBj4LHWPheMKq4V4y1TA96GXXa6BYak=; b=irSmib3XCpeZBSo/m8kL6CX+kL8dycHky/Cgrk4nSyCBys2Aw6RFf61O8BAYliuPaxTojsT0kneveoJVuLbOhjMoAmqYDONt4WILoR3Mk6lBbz9vQJRrkKpefzLx2/gcbyxiycCLHwbVncC2XqOp6rGMoIsdjnvTZCKw7sY40lI= Received: from SJ0PR11MB4896.namprd11.prod.outlook.com (2603:10b6:a03:2dd::20) by SJ0PR11MB4864.namprd11.prod.outlook.com (2603:10b6:a03:2d4::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3912.17; Mon, 8 Mar 2021 13:27:48 +0000 Received: from SJ0PR11MB4896.namprd11.prod.outlook.com ([fe80::743e:9115:21df:d5a]) by SJ0PR11MB4896.namprd11.prod.outlook.com ([fe80::743e:9115:21df:d5a%5]) with mapi id 15.20.3890.038; Mon, 8 Mar 2021 13:27:48 +0000 From: To: CC: , , , , , Subject: Re: [PATCH 4/4] iio: adc: at91-sama5d2: add support for sama7g5 device Thread-Topic: [PATCH 4/4] iio: adc: at91-sama5d2: add support for sama7g5 device Thread-Index: AQHXDqfcrPT7OYaYuEKQSITCfo45Mqp3P2+AgALg6AA= Date: Mon, 8 Mar 2021 13:27:48 +0000 Message-ID: References: <20210301143256.16502-1-eugen.hristev@microchip.com> <20210301143256.16502-5-eugen.hristev@microchip.com> <20210306173017.0d3144c9@archlinux> In-Reply-To: <20210306173017.0d3144c9@archlinux> Accept-Language: en-US, ro-RO Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 authentication-results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=microchip.com; x-originating-ip: [86.121.125.229] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d30935dc-212d-458f-6f1f-08d8e235f745 x-ms-traffictypediagnostic: SJ0PR11MB4864: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: FR2Btm+O1rFlvVOJEcFBnaglXuhiExKwusuAvtKrE/EE+L4uEpY4Wqp1iOyoxf5BXIk9F3fbLT4c+0OnxzaJOIOKBbCE7z/s4pHSBQc6xQAUiXBA/wcI3CNB419c1Z5O/kdIyGjdi9gTs9rbTaHBZaRoZk/2uWjAC/k2kbWvfoTW5GaEoCksXsvNG/ag+4DExXrKoY4zpK1V9M0QATMAZTRsH/Te0oumpS8k7bAEg/Ptm9fPsS5vuMw9J2Wn2MaOjfzXJPWIDKlR7vFfhCh7FU+yAGr7Jvl5/9BNmc7UavzMlEtKwonQs6wBZ/s2CQznvaJpg0zXlwznQ8Y8kTb/I67AIvPhI5mkVLQwdYayOHlgQk0noQWgDjmiU6qYtx12B+3cAkd06l1JAT54s96HXHW98h/8/BkinDTsVEjugFt+L5cQ/6aU8Mv9pa5rumX/zllP/CDFNf12nfc+lz4Vr6ZkWuQPAOUgnZDe2Jblo2d6AB4ctJ4+D/44dmto2iF6QCM0yzkRkbyWBOpOb0gQGyQZKByxDuQXs4iJw7dRyYo2yuR09GhYsFXPIVBSpqS9f6TozIOt4905EU9XYS5kP83mZQcRPkb4ujZ1eCz31f7vD1d2fZSEVgjqyM1tiH+qqRENBKdS6zaYIhYiBfOFHwPlmgt+CLnt0RjaUtKDeQUGH82KxKgBzwFH1tfqt5Vk1zAmoVtFFRi4GpbjuP/26w== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR11MB4896.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(396003)(346002)(136003)(39860400002)(366004)(376002)(54906003)(8936002)(86362001)(2906002)(6916009)(966005)(66446008)(53546011)(76116006)(8676002)(31686004)(6512007)(83380400001)(26005)(71200400001)(6506007)(2616005)(316002)(66556008)(36756003)(91956017)(6486002)(186003)(66476007)(64756008)(4326008)(478600001)(66946007)(5660300002)(31696002)(30864003)(43740500002)(45980500001)(579004)(559001)(309714004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?WGN0US9aci9MeExwUG92VmN0V2Nkb3Vla016RE5tM1ZmOW1NMWpoRWJ5YlN0?= =?utf-8?B?a3VpaldjaHJDeHNwVlB6NER6L2RoUzdSeDJWQTNtUFErTFk3QW5tTnVMVmQw?= =?utf-8?B?bUZpcUY4M2F6SkFOOEkvdktWZjB6eG5oblhkVHZQbjIvWmdnMmtmaUNGK3kx?= =?utf-8?B?cHlaTjBZSVZpc3hyQzl2Tk1TeE9lMUNjSjA1SVZWYXVEVitkN3IzYVRUWmVr?= =?utf-8?B?Y0laQjhaZDhwcWxkVUFmQVQzam9qbHFDeTdUaFBQVGttNXpsdTcxNmFYMEpu?= =?utf-8?B?dW0zWk5mOWQ3bGx5WjhXUjFwVWRQRHlxcyszbm9ldlBBbStoSUR3bG9OMTNR?= =?utf-8?B?eXZpQVdSOFdRNXk2bHR0am1MUFpGNXhRK1NvVzg5TWE5cHpidnFjSFoyYW1h?= =?utf-8?B?Y3haQzFXNnRzVi9zSzMrNHk1QU1qeHdBNVVEcCtDOGp2WDVuS0Z3bndlMVow?= =?utf-8?B?ZHBrNVFOV3NSYWErNElLOFdUWDFQaFlqa3p2c1ZDMjZXenFGQk5ETWJ4WEcz?= =?utf-8?B?aGQrdTJQeWQxaysxV3lyUTFHTWthdjl4TTBteXdydWdMTncwWUVZUDlqcURI?= =?utf-8?B?Y0V0VGZiWHJrWjJQalRpOTdjSWM1SlZ2VFNaaTVMNGRhaGNWcTUvNlZubXo0?= =?utf-8?B?OExtV1FLZ05aaUh3THJXengwdHhEaE01RW5wM3Y5RUJVUlQwTmIzSnVpZDE3?= =?utf-8?B?L21HeHEvdUcrSVBUczcrTENKand0TUs4NTY1ZEg3aHFaVC96elZ1QlZ3SzlM?= =?utf-8?B?NVpMK0xoQXozUGViUFd2TXNJN3ZVVUhoM0VCVXJaa2p5c1ExOE9NSmdaWklE?= =?utf-8?B?d1FqdVgvcFRGZ243V0kyU2lpWEU1R0YrZVAyejRkSEl0eHd4Q0FLcUdrZDE5?= =?utf-8?B?eHRwYjg4VFR4S1JtWnVVdllPeTVIeXgvTjIraFV4cGczWTBoYk1ScTRKcVJI?= =?utf-8?B?dkhwOFU2OS9WbU5kR2hDa1p1QzlCZGdrNnhqamJZNzIvVVZ0U2Y4T3gyMklX?= =?utf-8?B?VTR6VHY4dVg0OU5NVzBnd0dqNWJKL3N4c1l2T1p0TUJldzJtN0lYNnJ6bDhJ?= =?utf-8?B?SENKVEU5dEVPbXE0cC94VFBBZzRhMlZhT28zOFVJdmdvSTdieUdscXppWm5Z?= =?utf-8?B?d0ZLV0dJckZyV01PbTBWY3pnZk1FNlhReCtiWDZhQWlURkRoNWwwWmhBcGRI?= =?utf-8?B?K21zSWNsVjh0SFdSWnFCSUltZzhnNzA5YkpMand0U1VzZlgzcE9UUGdYeGdq?= =?utf-8?B?dlVtMy9MMjRwbnpSZDI5MVRGT1NPajlGeXp4WjUzRXJRa2tMdWd2ME1TV05K?= =?utf-8?B?Y3lPWVNLVGdSWThqVVdTd3o5eWVwcWp4V280WDVnbWFNc1dPeHE4cWNaWXh4?= =?utf-8?B?L1Z0ZEgxT2J3Q0tYZzd4WkVRWXl4RVpweUxOdGlaMVpISm5KZjJiZUdpejVw?= =?utf-8?B?R21sbVpTMW4xZjZTYTNDS1JydEdhcDZoOHUwbFNYL01UQi8xR3ZkMVJBU0I0?= =?utf-8?B?d1RvYnVPR0VsU2U2TW5jbUw1UWNjYmVyL0ZZM1M4Q3RuRWxUa1MwOVFEangw?= =?utf-8?B?c0VaaC9YejhQbFp4VDBMay8vN3U4cE5YRWNtTWl2bUVPRXNuRXpsdnhSVGhr?= =?utf-8?B?VnNMdkhEMUN2dDJNNjVyNTJ5dGVuZVArM29KR1prTTdSVW5YcTdid2ZvQVpl?= =?utf-8?B?UHloaXI4UmZaSXhOem05VzQyVFBkZWhLVDREUlEreFNEZFNJTmVYWEFxVTJJ?= =?utf-8?Q?xHfqFE5liijvzDEZC5FmcVpBgbYk6shlxuso9D2?= Content-ID: <849B1A5C291EC845B734279B0F91CCA8@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ0PR11MB4896.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d30935dc-212d-458f-6f1f-08d8e235f745 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Mar 2021 13:27:48.1506 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: o00aPusQ/W3lw/PmLu0L4JT0KNvRfVUDe46dI7jwDksohqnztto+5Aek+SJUl9aqgA0FOv6Ed8cTdodxBrjSfSemK9oSCafhGeraN+Yr7xY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB4864 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210308_132756_605673_9DCEF2F7 X-CRM114-Status: GOOD ( 26.27 ) 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="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On 06.03.2021 19:30, Jonathan Cameron wrote: > On Mon, 1 Mar 2021 16:32:56 +0200 > Eugen Hristev wrote: > >> Add support to sama7g5 ADC which is similar with sama5d2/sam9x60 device. >> Differences are highlighted by compatible. >> Main differences include 16 channels instead of 12 and missing >> resistive touchscreen. >> >> Signed-off-by: Eugen Hristev > > Hi Eugen, > > What tends to end up cleaner than the many scattered places you have > had to bolt in part support here, is to use a per device type constant > structure. That structure can contain register addresses where that > is all the differs between parts, and callbacks for more complex cases. > > Along the lines of > > static const struct sam5d2_chip_info sam5d2_inf { > .eoc_register = 0x33, > .max_chan_idx = bob, > .ccr = bob_function, > ... > }; > > Then you can just put a pointer to this in the match_data and look that > up in probe Hi Jonathan, Could you have a look a little at this driver though: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/watchdog/sama5d4_wdt.c The specific support for 'sam9x60' was added by me, and the driver does not look so bad after all, having if/else clauses nearly everywhere, and getting that 'sam9x60_supported' bit from the compatible string comparison. That's the reason why I tried to have this ADC driver in a similar fashion. I like your approach as well, I guess it's just a matter of preference. I will start to change things to implement it as you suggested if you don't say otherwise. Thanks for reviewing, Eugen > >> --- >> drivers/iio/adc/at91-sama5d2_adc.c | 287 +++++++++++++++++++++++------ >> 1 file changed, 234 insertions(+), 53 deletions(-) >> >> diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c >> index 066d0ad644ca..d61fa32ef294 100644 >> --- a/drivers/iio/adc/at91-sama5d2_adc.c >> +++ b/drivers/iio/adc/at91-sama5d2_adc.c >> @@ -1,9 +1,11 @@ >> // SPDX-License-Identifier: GPL-2.0-only >> /* >> - * Atmel ADC driver for SAMA5D2 devices and compatible. >> + * Microchip ADC driver for SAMA5D2/SAMA7G5 devices and compatible. >> * >> * Copyright (C) 2015 Atmel, >> - * 2015 Ludovic Desroches >> + * 2015 Ludovic Desroches , >> + * 2021 Microchip Technology, Inc., >> + * 2021 Eugen Hristev >> */ >> >> #include >> @@ -117,14 +119,26 @@ >> #define AT91_SAMA5D2_ISR 0x30 >> /* Interrupt Status Register - Pen touching sense status */ >> #define AT91_SAMA5D2_ISR_PENS BIT(31) >> + >> +/* End of Conversion Interrupt Enable Register */ >> +#define AT91_SAMA7G5_EOC_IER 0x34 >> +/* End of Conversion Interrupt Disable Register */ >> +#define AT91_SAMA7G5_EOC_IDR 0x38 >> +/* End of Conversion Interrupt Mask Register */ >> +#define AT91_SAMA7G5_EOC_IMR 0x3c >> +/* End of Conversion Interrupt Status Register */ >> +#define AT91_SAMA7G5_EOC_ISR 0x40 >> + >> /* Last Channel Trigger Mode Register */ >> #define AT91_SAMA5D2_LCTMR 0x34 >> /* Last Channel Compare Window Register */ >> #define AT91_SAMA5D2_LCCWR 0x38 >> /* Overrun Status Register */ >> #define AT91_SAMA5D2_OVER 0x3c >> +#define AT91_SAMA7G5_OVER 0x4c >> /* Extended Mode Register */ >> #define AT91_SAMA5D2_EMR 0x40 >> +#define AT91_SAMA7G5_EMR 0x50 >> /* Extended Mode Register - Oversampling rate */ >> #define AT91_SAMA5D2_EMR_OSR(V) ((V) << 16) >> #define AT91_SAMA5D2_EMR_OSR_MASK GENMASK(17, 16) >> @@ -142,6 +156,9 @@ >> /* Channel Offset Register */ >> #define AT91_SAMA5D2_COR 0x4c >> #define AT91_SAMA5D2_COR_DIFF_OFFSET 16 >> +/* Channel Configuration Register */ >> +#define AT91_SAMA7G5_CCR 0x5c >> +#define AT91_SAMA7G5_COR_DIFF_OFFSET 0 >> >> /* Analog Control Register */ >> #define AT91_SAMA5D2_ACR 0x94 >> @@ -185,6 +202,7 @@ >> #define AT91_SAMA5D2_PRESSR 0xbc >> /* Trigger Register */ >> #define AT91_SAMA5D2_TRGR 0xc0 >> +#define AT91_SAMA7G5_TRGR 0x100 >> /* Mask for TRGMOD field of TRGR register */ >> #define AT91_SAMA5D2_TRGR_TRGMOD_MASK GENMASK(2, 0) >> /* No trigger, only software trigger can start conversions */ >> @@ -214,19 +232,26 @@ >> #define AT91_SAMA5D2_WPSR 0xe8 >> /* Version Register */ >> #define AT91_SAMA5D2_VERSION 0xfc >> +#define AT91_SAMA7G5_VERSION 0x130 >> >> #define AT91_SAMA5D2_HW_TRIG_CNT 3 >> #define AT91_SAMA5D2_SINGLE_CHAN_CNT 12 >> +#define AT91_SAMA7G5_SINGLE_CHAN_CNT 16 >> #define AT91_SAMA5D2_DIFF_CHAN_CNT 6 >> +#define AT91_SAMA7G5_DIFF_CHAN_CNT 8 >> >> #define AT91_SAMA5D2_TIMESTAMP_CHAN_IDX (AT91_SAMA5D2_SINGLE_CHAN_CNT + \ >> AT91_SAMA5D2_DIFF_CHAN_CNT + 1) >> >> +#define AT91_SAMA7G5_TIMESTAMP_CHAN_IDX (AT91_SAMA7G5_SINGLE_CHAN_CNT + \ >> + AT91_SAMA7G5_DIFF_CHAN_CNT + 1) >> + >> #define AT91_SAMA5D2_TOUCH_X_CHAN_IDX (AT91_SAMA5D2_SINGLE_CHAN_CNT + \ >> AT91_SAMA5D2_DIFF_CHAN_CNT * 2) >> #define AT91_SAMA5D2_TOUCH_Y_CHAN_IDX (AT91_SAMA5D2_TOUCH_X_CHAN_IDX + 1) >> #define AT91_SAMA5D2_TOUCH_P_CHAN_IDX (AT91_SAMA5D2_TOUCH_Y_CHAN_IDX + 1) >> #define AT91_SAMA5D2_MAX_CHAN_IDX AT91_SAMA5D2_TOUCH_P_CHAN_IDX >> +#define AT91_SAMA7G5_MAX_CHAN_IDX AT91_SAMA7G5_TIMESTAMP_CHAN_IDX >> >> #define AT91_SAMA5D2_TOUCH_SAMPLE_PERIOD_US 2000 /* 2ms */ >> #define AT91_SAMA5D2_TOUCH_PEN_DETECT_DEBOUNCE_US 200 >> @@ -239,8 +264,19 @@ >> * Maximum number of bytes to hold conversion from all channels >> * without the timestamp. >> */ >> -#define AT91_BUFFER_MAX_CONVERSION_BYTES ((AT91_SAMA5D2_SINGLE_CHAN_CNT + \ >> - AT91_SAMA5D2_DIFF_CHAN_CNT) * 2) >> +#define AT91_SAMA5D2_BUFFER_MAX_CONVERSION_BYTES ( \ >> + (AT91_SAMA5D2_SINGLE_CHAN_CNT + \ >> + AT91_SAMA5D2_DIFF_CHAN_CNT) * 2) >> + >> +#define AT91_SAMA7G5_BUFFER_MAX_CONVERSION_BYTES ( \ >> + (AT91_SAMA7G5_SINGLE_CHAN_CNT + \ >> + AT91_SAMA7G5_DIFF_CHAN_CNT) * 2) >> + >> +#define AT91_BUFFER_MAX_CONVERSION_BYTES ( \ >> + (AT91_SAMA7G5_BUFFER_MAX_CONVERSION_BYTES > \ >> + AT91_SAMA5D2_BUFFER_MAX_CONVERSION_BYTES) ? \ >> + AT91_SAMA7G5_BUFFER_MAX_CONVERSION_BYTES : \ >> + AT91_SAMA5D2_BUFFER_MAX_CONVERSION_BYTES) >> >> /* This total must also include the timestamp */ >> #define AT91_BUFFER_MAX_BYTES (AT91_BUFFER_MAX_CONVERSION_BYTES + 8) >> @@ -295,6 +331,27 @@ >> .indexed = 1, \ >> } >> >> +#define AT91_SAMA7G5_CHAN_DIFF(num, num2, addr) \ >> + { \ >> + .type = IIO_VOLTAGE, \ >> + .differential = 1, \ >> + .channel = num, \ >> + .channel2 = num2, \ >> + .address = addr, \ >> + .scan_index = num + AT91_SAMA7G5_SINGLE_CHAN_CNT, \ >> + .scan_type = { \ >> + .sign = 's', \ >> + .realbits = 14, \ >> + .storagebits = 16, \ >> + }, \ >> + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ >> + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ >> + .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ)|\ >> + BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), \ >> + .datasheet_name = "CH"#num"-CH"#num2, \ >> + .indexed = 1, \ >> + } >> + >> #define AT91_SAMA5D2_CHAN_TOUCH(num, name, mod) \ >> { \ >> .type = IIO_POSITIONRELATIVE, \ >> @@ -335,6 +392,8 @@ struct at91_adc_soc_info { >> unsigned startup_time; >> unsigned min_sample_rate; >> unsigned max_sample_rate; >> +#define AT91_ADC_SAMA7G5(st) ((st)->soc_info.sama7g5) >> + bool sama7g5; >> }; >> >> struct at91_adc_trigger { >> @@ -436,7 +495,7 @@ static const struct at91_adc_trigger at91_adc_trigger_list[] = { >> }, >> }; >> >> -static const struct iio_chan_spec at91_adc_channels[] = { >> +static const struct iio_chan_spec at91_sama5d2_adc_channels[] = { >> AT91_SAMA5D2_CHAN_SINGLE(0, 0x50), >> AT91_SAMA5D2_CHAN_SINGLE(1, 0x54), >> AT91_SAMA5D2_CHAN_SINGLE(2, 0x58), >> @@ -461,6 +520,42 @@ static const struct iio_chan_spec at91_adc_channels[] = { >> AT91_SAMA5D2_CHAN_PRESSURE(AT91_SAMA5D2_TOUCH_P_CHAN_IDX, "pressure"), >> }; >> >> +static const struct iio_chan_spec at91_sama7g5_adc_channels[] = { >> + AT91_SAMA5D2_CHAN_SINGLE(0, 0x60), >> + AT91_SAMA5D2_CHAN_SINGLE(1, 0x64), >> + AT91_SAMA5D2_CHAN_SINGLE(2, 0x68), >> + AT91_SAMA5D2_CHAN_SINGLE(3, 0x6c), >> + AT91_SAMA5D2_CHAN_SINGLE(4, 0x70), >> + AT91_SAMA5D2_CHAN_SINGLE(5, 0x74), >> + AT91_SAMA5D2_CHAN_SINGLE(6, 0x78), >> + AT91_SAMA5D2_CHAN_SINGLE(7, 0x7c), >> + AT91_SAMA5D2_CHAN_SINGLE(8, 0x80), >> + AT91_SAMA5D2_CHAN_SINGLE(9, 0x84), >> + AT91_SAMA5D2_CHAN_SINGLE(10, 0x88), >> + AT91_SAMA5D2_CHAN_SINGLE(11, 0x8c), >> + AT91_SAMA5D2_CHAN_SINGLE(12, 0x90), >> + AT91_SAMA5D2_CHAN_SINGLE(13, 0x94), >> + AT91_SAMA5D2_CHAN_SINGLE(14, 0x98), >> + AT91_SAMA5D2_CHAN_SINGLE(15, 0x9c), >> + AT91_SAMA7G5_CHAN_DIFF(0, 1, 0x60), >> + AT91_SAMA7G5_CHAN_DIFF(2, 3, 0x68), >> + AT91_SAMA7G5_CHAN_DIFF(4, 5, 0x70), >> + AT91_SAMA7G5_CHAN_DIFF(6, 7, 0x78), >> + AT91_SAMA7G5_CHAN_DIFF(8, 9, 0x80), >> + AT91_SAMA7G5_CHAN_DIFF(10, 11, 0x88), >> + AT91_SAMA7G5_CHAN_DIFF(12, 13, 0x90), >> + AT91_SAMA7G5_CHAN_DIFF(14, 15, 0x98), >> + IIO_CHAN_SOFT_TIMESTAMP(AT91_SAMA7G5_TIMESTAMP_CHAN_IDX), >> +}; >> + >> +static unsigned int at91_adc_max_chan_idx(struct at91_adc_state *st) >> +{ >> + if (AT91_ADC_SAMA7G5(st)) >> + return AT91_SAMA7G5_MAX_CHAN_IDX; >> + else >> + return AT91_SAMA5D2_MAX_CHAN_IDX; >> +} >> + >> static int at91_adc_chan_xlate(struct iio_dev *indio_dev, int chan) >> { >> int i; >> @@ -492,6 +587,7 @@ static unsigned int at91_adc_active_scan_mask_to_reg(struct iio_dev *indio_dev) >> { >> u32 mask = 0; >> u8 bit; >> + struct at91_adc_state *st = iio_priv(indio_dev); >> >> for_each_set_bit(bit, indio_dev->active_scan_mask, >> indio_dev->num_channels) { >> @@ -500,13 +596,78 @@ static unsigned int at91_adc_active_scan_mask_to_reg(struct iio_dev *indio_dev) >> mask |= BIT(chan->channel); >> } >> >> - return mask & GENMASK(11, 0); >> + return mask & GENMASK(at91_adc_max_chan_idx(st), 0); >> +} >> + >> +static void at91_adc_ccr(struct at91_adc_state *st, >> + struct iio_chan_spec const *chan) >> +{ >> + u32 ccr, cur_ccr; >> + >> + ccr = (BIT(chan->channel) | BIT(chan->channel2)); >> + >> + if (AT91_ADC_SAMA7G5(st)) { >> + cur_ccr = at91_adc_readl(st, AT91_SAMA7G5_CCR); >> + ccr <<= AT91_SAMA7G5_COR_DIFF_OFFSET; >> + if (chan->differential) >> + at91_adc_writel(st, AT91_SAMA7G5_CCR, cur_ccr | ccr); >> + else >> + at91_adc_writel(st, AT91_SAMA7G5_CCR, cur_ccr & ~ccr); >> + } else { >> + cur_ccr = at91_adc_readl(st, AT91_SAMA5D2_COR); >> + ccr <<= AT91_SAMA5D2_COR_DIFF_OFFSET; >> + if (chan->differential) >> + at91_adc_writel(st, AT91_SAMA5D2_COR, cur_ccr | ccr); >> + else >> + at91_adc_writel(st, AT91_SAMA5D2_COR, cur_ccr & ~ccr); >> + } >> +} >> + >> +static void at91_adc_irq_status(struct at91_adc_state *st, u32 *status, >> + u32 *eoc) >> +{ >> + if (AT91_ADC_SAMA7G5(st)) { >> + *status = at91_adc_readl(st, AT91_SAMA5D2_ISR); >> + *eoc = at91_adc_readl(st, AT91_SAMA7G5_EOC_ISR); >> + } else { >> + *status = *eoc = at91_adc_readl(st, AT91_SAMA5D2_ISR); >> + } >> +} >> + >> +static void at91_adc_irq_mask(struct at91_adc_state *st, u32 *status, u32 *eoc) >> +{ >> + if (AT91_ADC_SAMA7G5(st)) { >> + *status = at91_adc_readl(st, AT91_SAMA5D2_IMR); >> + *eoc = at91_adc_readl(st, AT91_SAMA7G5_EOC_IMR); >> + } else { >> + *status = *eoc = at91_adc_readl(st, AT91_SAMA5D2_IMR); >> + } >> +} >> + >> +static void at91_adc_eoc_dis(struct at91_adc_state *st, unsigned int channel) >> +{ >> + if (!AT91_ADC_SAMA7G5(st)) >> + at91_adc_writel(st, AT91_SAMA5D2_IDR, BIT(channel)); >> + /* for SAMA7G5, Errata recommends not writing to EOC_IDR register */ >> +} >> + >> +static void at91_adc_eoc_ena(struct at91_adc_state *st, unsigned int channel) >> +{ >> + if (AT91_ADC_SAMA7G5(st)) >> + at91_adc_writel(st, AT91_SAMA7G5_EOC_IER, BIT(channel)); >> + else >> + at91_adc_writel(st, AT91_SAMA5D2_IER, BIT(channel)); >> } >> >> static void at91_adc_config_emr(struct at91_adc_state *st) >> { >> /* configure the extended mode register */ >> - unsigned int emr = at91_adc_readl(st, AT91_SAMA5D2_EMR); >> + unsigned int emr; >> + >> + if (AT91_ADC_SAMA7G5(st)) >> + emr = at91_adc_readl(st, AT91_SAMA7G5_EMR); >> + else >> + emr = at91_adc_readl(st, AT91_SAMA5D2_EMR); >> >> /* select oversampling per single trigger event */ >> emr |= AT91_SAMA5D2_EMR_ASTE(1); >> @@ -530,7 +691,10 @@ static void at91_adc_config_emr(struct at91_adc_state *st) >> break; >> } >> >> - at91_adc_writel(st, AT91_SAMA5D2_EMR, emr); >> + if (AT91_ADC_SAMA7G5(st)) >> + at91_adc_writel(st, AT91_SAMA7G5_EMR, emr); >> + else >> + at91_adc_writel(st, AT91_SAMA5D2_EMR, emr); >> } >> >> static int at91_adc_adjust_val_osr(struct at91_adc_state *st, int *val) >> @@ -726,7 +890,12 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) >> { >> struct iio_dev *indio = iio_trigger_get_drvdata(trig); >> struct at91_adc_state *st = iio_priv(indio); >> - u32 status = at91_adc_readl(st, AT91_SAMA5D2_TRGR); >> + u32 status; >> + >> + if (AT91_ADC_SAMA7G5(st)) >> + status = at91_adc_readl(st, AT91_SAMA7G5_TRGR); >> + else >> + status = at91_adc_readl(st, AT91_SAMA5D2_TRGR); >> >> /* clear TRGMOD */ >> status &= ~AT91_SAMA5D2_TRGR_TRGMOD_MASK; >> @@ -735,7 +904,10 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) >> status |= st->selected_trig->trgmod_value; >> >> /* set/unset hw trigger */ >> - at91_adc_writel(st, AT91_SAMA5D2_TRGR, status); >> + if (AT91_ADC_SAMA7G5(st)) >> + at91_adc_writel(st, AT91_SAMA7G5_TRGR, status); >> + else >> + at91_adc_writel(st, AT91_SAMA5D2_TRGR, status); >> >> return 0; >> } >> @@ -877,7 +1049,7 @@ static bool at91_adc_current_chan_is_touch(struct iio_dev *indio_dev) >> >> return !!bitmap_subset(indio_dev->active_scan_mask, >> &st->touch_st.channels_bitmask, >> - AT91_SAMA5D2_MAX_CHAN_IDX + 1); >> + at91_adc_max_chan_idx(st) + 1); >> } >> >> static int at91_adc_buffer_prepare(struct iio_dev *indio_dev) >> @@ -905,7 +1077,6 @@ static int at91_adc_buffer_prepare(struct iio_dev *indio_dev) >> indio_dev->num_channels) { >> struct iio_chan_spec const *chan = >> at91_adc_chan_get(indio_dev, bit); >> - u32 cor; >> >> if (!chan) >> continue; >> @@ -914,16 +1085,7 @@ static int at91_adc_buffer_prepare(struct iio_dev *indio_dev) >> chan->type == IIO_PRESSURE) >> continue; >> >> - cor = at91_adc_readl(st, AT91_SAMA5D2_COR); >> - >> - if (chan->differential) >> - cor |= (BIT(chan->channel) | BIT(chan->channel2)) << >> - AT91_SAMA5D2_COR_DIFF_OFFSET; >> - else >> - cor &= ~(BIT(chan->channel) << >> - AT91_SAMA5D2_COR_DIFF_OFFSET); >> - >> - at91_adc_writel(st, AT91_SAMA5D2_COR, cor); >> + at91_adc_ccr(st, chan); >> >> at91_adc_writel(st, AT91_SAMA5D2_CHER, BIT(chan->channel)); >> } >> @@ -975,7 +1137,10 @@ static int at91_adc_buffer_postdisable(struct iio_dev *indio_dev) >> at91_adc_writel(st, AT91_SAMA5D2_IDR, AT91_SAMA5D2_IER_DRDY); >> >> /* read overflow register to clear possible overflow status */ >> - at91_adc_readl(st, AT91_SAMA5D2_OVER); >> + if (AT91_ADC_SAMA7G5(st)) >> + at91_adc_readl(st, AT91_SAMA7G5_OVER); >> + else >> + at91_adc_readl(st, AT91_SAMA5D2_OVER); >> >> /* if we are using DMA we must clear registers and end DMA */ >> if (st->dma_st.dma_chan) >> @@ -1018,13 +1183,15 @@ static void at91_adc_trigger_handler_nodma(struct iio_dev *indio_dev, >> u8 bit; >> u32 mask = at91_adc_active_scan_mask_to_reg(indio_dev); >> unsigned int timeout = 50; >> + u32 status, imr, eoc = 0, eoc_imr; >> >> /* >> * Check if the conversion is ready. If not, wait a little bit, and >> * in case of timeout exit with an error. >> */ >> - while ((at91_adc_readl(st, AT91_SAMA5D2_ISR) & mask) != mask && >> - timeout) { >> + while (((eoc & mask) != mask) && timeout) { >> + at91_adc_irq_status(st, &status, &eoc); >> + at91_adc_irq_mask(st, &imr, &eoc_imr); >> usleep_range(50, 100); >> timeout--; >> } >> @@ -1195,7 +1362,7 @@ static void at91_adc_touch_data_handler(struct iio_dev *indio_dev) >> int i = 0; >> >> for_each_set_bit(bit, indio_dev->active_scan_mask, >> - AT91_SAMA5D2_MAX_CHAN_IDX + 1) { >> + at91_adc_max_chan_idx(st) + 1) { >> struct iio_chan_spec const *chan = >> at91_adc_chan_get(indio_dev, bit); >> >> @@ -1262,12 +1429,14 @@ static irqreturn_t at91_adc_interrupt(int irq, void *private) >> { >> struct iio_dev *indio = private; >> struct at91_adc_state *st = iio_priv(indio); >> - u32 status = at91_adc_readl(st, AT91_SAMA5D2_ISR); >> - u32 imr = at91_adc_readl(st, AT91_SAMA5D2_IMR); >> + u32 status, eoc, imr, eoc_imr; >> u32 rdy_mask = AT91_SAMA5D2_IER_XRDY | AT91_SAMA5D2_IER_YRDY | >> AT91_SAMA5D2_IER_PRDY; >> >> - if (!(status & imr)) >> + at91_adc_irq_status(st, &status, &eoc); >> + at91_adc_irq_mask(st, &imr, &eoc_imr); >> + >> + if (!(status & imr) && !(eoc & eoc_imr)) >> return IRQ_NONE; >> if (status & AT91_SAMA5D2_IER_PEN) { >> /* pen detected IRQ */ >> @@ -1309,7 +1478,6 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev, >> struct iio_chan_spec const *chan, int *val) >> { >> struct at91_adc_state *st = iio_priv(indio_dev); >> - u32 cor = 0; >> u16 tmp_val; >> int ret; >> >> @@ -1355,13 +1523,9 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev, >> >> st->chan = chan; >> >> - if (chan->differential) >> - cor = (BIT(chan->channel) | BIT(chan->channel2)) << >> - AT91_SAMA5D2_COR_DIFF_OFFSET; >> - >> - at91_adc_writel(st, AT91_SAMA5D2_COR, cor); >> + at91_adc_ccr(st, chan); >> at91_adc_writel(st, AT91_SAMA5D2_CHER, BIT(chan->channel)); >> - at91_adc_writel(st, AT91_SAMA5D2_IER, BIT(chan->channel)); >> + at91_adc_eoc_ena(st, chan->channel); >> at91_adc_writel(st, AT91_SAMA5D2_CR, AT91_SAMA5D2_CR_START); >> >> ret = wait_event_interruptible_timeout(st->wq_data_available, >> @@ -1378,7 +1542,7 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev, >> st->conversion_done = false; >> } >> >> - at91_adc_writel(st, AT91_SAMA5D2_IDR, BIT(chan->channel)); >> + at91_adc_eoc_dis(st, st->chan->channel); >> at91_adc_writel(st, AT91_SAMA5D2_CHDR, BIT(chan->channel)); >> >> /* Needed to ACK the DRDY interruption */ >> @@ -1577,14 +1741,14 @@ static int at91_adc_update_scan_mode(struct iio_dev *indio_dev, >> struct at91_adc_state *st = iio_priv(indio_dev); >> >> if (bitmap_subset(scan_mask, &st->touch_st.channels_bitmask, >> - AT91_SAMA5D2_MAX_CHAN_IDX + 1)) >> + at91_adc_max_chan_idx(st) + 1)) >> return 0; >> /* >> * if the new bitmap is a combination of touchscreen and regular >> * channels, then we are not fine >> */ >> if (bitmap_intersects(&st->touch_st.channels_bitmask, scan_mask, >> - AT91_SAMA5D2_MAX_CHAN_IDX + 1)) >> + at91_adc_max_chan_idx(st) + 1)) >> return -EINVAL; >> return 0; >> } >> @@ -1594,6 +1758,8 @@ static void at91_adc_hw_init(struct iio_dev *indio_dev) >> struct at91_adc_state *st = iio_priv(indio_dev); >> >> at91_adc_writel(st, AT91_SAMA5D2_CR, AT91_SAMA5D2_CR_SWRST); >> + if (AT91_ADC_SAMA7G5(st)) >> + at91_adc_writel(st, AT91_SAMA7G5_EOC_IDR, 0xffffffff); >> at91_adc_writel(st, AT91_SAMA5D2_IDR, 0xffffffff); >> /* >> * Transfer field must be set to 2 according to the datasheet and >> @@ -1718,18 +1884,27 @@ static int at91_adc_probe(struct platform_device *pdev) >> indio_dev->name = dev_name(&pdev->dev); >> indio_dev->modes = INDIO_DIRECT_MODE | INDIO_BUFFER_SOFTWARE; >> indio_dev->info = &at91_adc_info; >> - indio_dev->channels = at91_adc_channels; >> - indio_dev->num_channels = ARRAY_SIZE(at91_adc_channels); >> >> st = iio_priv(indio_dev); >> st->indio_dev = indio_dev; >> >> - bitmap_set(&st->touch_st.channels_bitmask, >> - AT91_SAMA5D2_TOUCH_X_CHAN_IDX, 1); >> - bitmap_set(&st->touch_st.channels_bitmask, >> - AT91_SAMA5D2_TOUCH_Y_CHAN_IDX, 1); >> - bitmap_set(&st->touch_st.channels_bitmask, >> - AT91_SAMA5D2_TOUCH_P_CHAN_IDX, 1); >> + st->soc_info.sama7g5 = of_device_is_compatible(pdev->dev.of_node, >> + "microchip,sama7g5-adc"); > > Better to use match_data to get an enum value which is used to index > into a table of support part description structures. Each of those > structures has all the registers etc + channel specs and callbacks > where needed for more complex handling. > > Other advantage is you can introduce the structures in a precursor patch with > just one entry for existing behaviour. The new device support is then added > in a second patch. All we need to do then is check first patch is a noop > and that second much shorter patch makes sense. > >> + >> + if (AT91_ADC_SAMA7G5(st)) { >> + indio_dev->channels = at91_sama7g5_adc_channels; >> + indio_dev->num_channels = ARRAY_SIZE(at91_sama7g5_adc_channels); >> + } else { >> + indio_dev->channels = at91_sama5d2_adc_channels; >> + indio_dev->num_channels = ARRAY_SIZE(at91_sama5d2_adc_channels); >> + >> + bitmap_set(&st->touch_st.channels_bitmask, >> + AT91_SAMA5D2_TOUCH_X_CHAN_IDX, 1); >> + bitmap_set(&st->touch_st.channels_bitmask, >> + AT91_SAMA5D2_TOUCH_Y_CHAN_IDX, 1); >> + bitmap_set(&st->touch_st.channels_bitmask, >> + AT91_SAMA5D2_TOUCH_P_CHAN_IDX, 1); >> + } >> >> st->oversampling_ratio = AT91_OSR_1SAMPLES; >> >> @@ -1853,9 +2028,12 @@ static int at91_adc_probe(struct platform_device *pdev) >> dev_info(&pdev->dev, "setting up trigger as %s\n", >> st->selected_trig->name); >> >> - dev_info(&pdev->dev, "version: %x\n", >> - readl_relaxed(st->base + AT91_SAMA5D2_VERSION)); >> - >> + if (AT91_ADC_SAMA7G5(st)) > > We may be better off with a look up table of all the registers > (+ if needed some callback functions) rather than a whole bunch of > if statements. > > You then just assign the right 'part number specific' structure > once in probe. > >> + dev_info(&pdev->dev, "version: %x\n", >> + at91_adc_readl(st, AT91_SAMA7G5_VERSION)); >> + else >> + dev_info(&pdev->dev, "version: %x\n", >> + at91_adc_readl(st, AT91_SAMA5D2_VERSION)); >> return 0; >> >> dma_disable: >> @@ -1957,6 +2135,8 @@ static SIMPLE_DEV_PM_OPS(at91_adc_pm_ops, at91_adc_suspend, at91_adc_resume); >> static const struct of_device_id at91_adc_dt_match[] = { >> { >> .compatible = "atmel,sama5d2-adc", >> + }, { >> + .compatible = "microchip,sama7g5-adc", >> }, { >> /* sentinel */ >> } >> @@ -1967,13 +2147,14 @@ static struct platform_driver at91_adc_driver = { >> .probe = at91_adc_probe, >> .remove = at91_adc_remove, >> .driver = { >> - .name = "at91-sama5d2_adc", >> + .name = "at91-sama5d2-sama7g5_adc", > > Please keep the driver name the same. It's common to have a name of one > random part a driver supports used even if there are lots of others. > This (or wild cards) never scales as more parts are added to a driver. > >> .of_match_table = at91_adc_dt_match, >> .pm = &at91_adc_pm_ops, >> }, >> }; >> module_platform_driver(at91_adc_driver) >> >> -MODULE_AUTHOR("Ludovic Desroches "); >> -MODULE_DESCRIPTION("Atmel AT91 SAMA5D2 ADC"); >> +MODULE_AUTHOR("Ludovic Desroches "); >> +MODULE_AUTHOR("Eugen Hristev "); >> +MODULE_DESCRIPTION("Microchip AT91 SAMA5D2/SAMA7G5 ADC"); >> MODULE_LICENSE("GPL v2"); > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel