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=-14.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,USER_AGENT_GIT 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 697BEC433E0 for ; Mon, 18 May 2020 13:29:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 304EA2065F for ; Mon, 18 May 2020 13:29:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="OLMXGUJN" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727076AbgERN3S (ORCPT ); Mon, 18 May 2020 09:29:18 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:33073 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726854AbgERN3S (ORCPT ); Mon, 18 May 2020 09:29:18 -0400 X-UUID: a83d6975a7794f32883c4e83825e7e9e-20200518 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=4txpK8+SHQy+VhrQXxtHs+I7mGgbJo8BNRv/Vc/vQMg=; b=OLMXGUJNi/0bwAmoT9+AJ7mSe+i1jvG3DwfnJiUGRnsvxB4VFICmB83Ba3PooFkYeDIr9Dvqe2paLb3OKdGB6J7OXRbX5wpHG7btNvuuZ+iVJ7L7WvTGp7AK0ROROGbeedF1JZUaEenR2Gdghzp2Dx9PyruLo+wBONMZWlHoLro=; X-UUID: a83d6975a7794f32883c4e83825e7e9e-20200518 Received: from mtkcas06.mediatek.inc [(172.21.101.30)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1546656329; Mon, 18 May 2020 21:29:06 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 18 May 2020 21:29:04 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 18 May 2020 21:29:03 +0800 From: Dongchun Zhu To: , , , , , , , , , , CC: , , , , , , , , Subject: [V6, 2/2] media: i2c: dw9768: Add DW9768 VCM driver Date: Mon, 18 May 2020 21:27:31 +0800 Message-ID: <20200518132731.20855-3-dongchun.zhu@mediatek.com> X-Mailer: git-send-email 2.9.2 In-Reply-To: <20200518132731.20855-1-dongchun.zhu@mediatek.com> References: <20200518132731.20855-1-dongchun.zhu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org QWRkIGEgVjRMMiBzdWItZGV2aWNlIGRyaXZlciBmb3IgRFc5NzY4IHZvaWNlIGNvaWwgbW90b3Is IHByb3ZpZGluZw0KY29udHJvbCB0byBzZXQgdGhlIGRlc2lyZWQgZm9jdXMgdmlhIElJQyBzZXJp YWwgaW50ZXJmYWNlLg0KDQpTaWduZWQtb2ZmLWJ5OiBEb25nY2h1biBaaHUgPGRvbmdjaHVuLnpo dUBtZWRpYXRlay5jb20+DQotLS0NCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICB8ICAgMSAr DQogZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZyAgfCAgMTMgKysNCiBkcml2ZXJzL21lZGlhL2ky Yy9NYWtlZmlsZSB8ICAgMSArDQogZHJpdmVycy9tZWRpYS9pMmMvZHc5NzY4LmMgfCA1MTUgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogNCBmaWxlcyBjaGFu Z2VkLCA1MzAgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlh L2kyYy9kdzk3NjguYw0KDQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0K aW5kZXggOGQ3MmM0MS4uYzkyZGM5OSAxMDA2NDQNCi0tLSBhL01BSU5UQUlORVJTDQorKysgYi9N QUlOVEFJTkVSUw0KQEAgLTUxNTcsNiArNTE1Nyw3IEBAIEw6CWxpbnV4LW1lZGlhQHZnZXIua2Vy bmVsLm9yZw0KIFM6CU1haW50YWluZWQNCiBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFf dHJlZS5naXQNCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVkaWEvaTJj L2Rvbmd3b29uLGR3OTc2OC55YW1sDQorRjoJZHJpdmVycy9tZWRpYS9pMmMvZHc5NzY4LmMNCiAN CiBET05HV09PTiBEVzk4MDcgTEVOUyBWT0lDRSBDT0lMIERSSVZFUg0KIE06CVNha2FyaSBBaWx1 cyA8c2FrYXJpLmFpbHVzQGxpbnV4LmludGVsLmNvbT4NCmRpZmYgLS1naXQgYS9kcml2ZXJzL21l ZGlhL2kyYy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KaW5kZXggMTI1ZDU5 Ni4uYWZkZjk5NCAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcNCisrKyBi L2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcNCkBAIC0xMDQwLDYgKzEwNDAsMTkgQEAgY29uZmln IFZJREVPX0RXOTcxNA0KIAkgIGNhcGFiaWxpdHkuIFRoaXMgaXMgZGVzaWduZWQgZm9yIGxpbmVh ciBjb250cm9sIG9mDQogCSAgdm9pY2UgY29pbCBtb3RvcnMsIGNvbnRyb2xsZWQgdmlhIEkyQyBz ZXJpYWwgaW50ZXJmYWNlLg0KIA0KK2NvbmZpZyBWSURFT19EVzk3NjgNCisJdHJpc3RhdGUgIkRX OTc2OCBsZW5zIHZvaWNlIGNvaWwgc3VwcG9ydCINCisJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9f VjRMMg0KKwlkZXBlbmRzIG9uIFBNDQorCXNlbGVjdCBNRURJQV9DT05UUk9MTEVSDQorCXNlbGVj dCBWSURFT19WNEwyX1NVQkRFVl9BUEkNCisJc2VsZWN0IFY0TDJfRldOT0RFDQorCWhlbHANCisJ ICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgRFc5NzY4IGNhbWVyYSBsZW5zIHZvaWNlIGNvaWwu DQorCSAgRFc5NzY4IGlzIGEgMTAgYml0IERBQyB3aXRoIDEwMG1BIG91dHB1dCBjdXJyZW50IHNp bmsNCisJICBjYXBhYmlsaXR5LiBUaGlzIGlzIGRlc2lnbmVkIGZvciBsaW5lYXIgY29udHJvbCBv Zg0KKwkgIHZvaWNlIGNvaWwgbW90b3JzLCBjb250cm9sbGVkIHZpYSBJMkMgc2VyaWFsIGludGVy ZmFjZS4NCisNCiBjb25maWcgVklERU9fRFc5ODA3X1ZDTQ0KIAl0cmlzdGF0ZSAiRFc5ODA3IGxl bnMgdm9pY2UgY29pbCBzdXBwb3J0Ig0KIAlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19WNEwyICYm IE1FRElBX0NPTlRST0xMRVINCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9NYWtlZmls ZSBiL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlDQppbmRleCA3N2JmN2QwLi40MDU3NDc2IDEw MDY0NA0KLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUNCisrKyBiL2RyaXZlcnMvbWVk aWEvaTJjL01ha2VmaWxlDQpAQCAtMjQsNiArMjQsNyBAQCBvYmotJChDT05GSUdfVklERU9fU0FB Njc1MkhTKSArPSBzYWE2NzUyaHMubw0KIG9iai0kKENPTkZJR19WSURFT19BRDU4MjApICArPSBh ZDU4MjAubw0KIG9iai0kKENPTkZJR19WSURFT19BSzczNzUpICArPSBhazczNzUubw0KIG9iai0k KENPTkZJR19WSURFT19EVzk3MTQpICArPSBkdzk3MTQubw0KK29iai0kKENPTkZJR19WSURFT19E Vzk3NjgpICArPSBkdzk3Njgubw0KIG9iai0kKENPTkZJR19WSURFT19EVzk4MDdfVkNNKSAgKz0g ZHc5ODA3LXZjbS5vDQogb2JqLSQoQ09ORklHX1ZJREVPX0FEVjcxNzApICs9IGFkdjcxNzAubw0K IG9iai0kKENPTkZJR19WSURFT19BRFY3MTc1KSArPSBhZHY3MTc1Lm8NCmRpZmYgLS1naXQgYS9k cml2ZXJzL21lZGlhL2kyYy9kdzk3NjguYyBiL2RyaXZlcnMvbWVkaWEvaTJjL2R3OTc2OC5jDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYTBjYzlmMw0KLS0tIC9kZXYvbnVs bA0KKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvZHc5NzY4LmMNCkBAIC0wLDAgKzEsNTE1IEBADQor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisvLyBDb3B5cmlnaHQgKGMpIDIw MjAgTWVkaWFUZWsgSW5jLg0KKw0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRl IDxsaW51eC9pMmMuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxp bnV4L3BtX3J1bnRpbWUuaD4NCisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+ DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItYXN5bmMuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1j dHJscy5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPg0KKyNpbmNsdWRlIDxtZWRp YS92NGwyLWZ3bm9kZS5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPg0KKw0KKyNk ZWZpbmUgRFc5NzY4X05BTUUJCQkJImR3OTc2OCINCisjZGVmaW5lIERXOTc2OF9NQVhfRk9DVVNf UE9TCQkJKDEwMjQgLSAxKQ0KKy8qDQorICogVGhpcyBzZXRzIHRoZSBtaW5pbXVtIGdyYW51bGFy aXR5IGZvciB0aGUgZm9jdXMgcG9zaXRpb25zLg0KKyAqIEEgdmFsdWUgb2YgMSBnaXZlcyBtYXhp bXVtIGFjY3VyYWN5IGZvciBhIGRlc2lyZWQgZm9jdXMgcG9zaXRpb24NCisgKi8NCisjZGVmaW5l IERXOTc2OF9GT0NVU19TVEVQUwkJCTENCisNCisvKg0KKyAqIFJpbmcgY29udHJvbCBhbmQgUG93 ZXIgY29udHJvbCByZWdpc3Rlcg0KKyAqIEJpdFsxXSBSSU5HX0VODQorICogMDogRGlyZWN0IG1v ZGUNCisgKiAxOiBBQUMgbW9kZSAocmluZ2luZyBjb250cm9sIG1vZGUpDQorICogQml0WzBdIFBE DQorICogMDogTm9ybWFsIG9wZXJhdGlvbiBtb2RlDQorICogMTogUG93ZXIgZG93biBtb2RlDQor ICogRFc5NzY4IHJlcXVpcmVzIHdhaXRpbmcgdGltZSBvZiBUb3ByIGFmdGVyIFBEIHJlc2V0IHRh a2VzIHBsYWNlLg0KKyAqLw0KKyNkZWZpbmUgRFc5NzY4X1JJTkdfUERfQ09OVFJPTF9SRUcJCTB4 MDINCisjZGVmaW5lIERXOTc2OF9QRF9NT0RFX09GRgkJCTB4MDANCisjZGVmaW5lIERXOTc2OF9Q RF9NT0RFX0VOCQkJQklUKDApDQorI2RlZmluZSBEVzk3NjhfQUFDX01PREVfRU4JCQlCSVQoMSkN CisNCisvKg0KKyAqIERXOTc2OCBzZXBhcmF0ZXMgdHdvIHJlZ2lzdGVycyB0byBjb250cm9sIHRo ZSBWQ00gcG9zaXRpb24uDQorICogT25lIGZvciBNU0IgdmFsdWUsIGFub3RoZXIgaXMgTFNCIHZh bHVlLg0KKyAqIERBQ19NU0I6IERbOTo4XSAoQUREOiAweDAzKQ0KKyAqIERBQ19MU0I6IERbNzow XSAoQUREOiAweDA0KQ0KKyAqIERbOTowXSBEQUMgZGF0YSBpbnB1dDogcG9zaXRpdmUgb3V0cHV0 IGN1cnJlbnQgPSBEWzk6MF0gLyAxMDIzICogMTAwW21BXQ0KKyAqLw0KKyNkZWZpbmUgRFc5NzY4 X01TQl9BRERSCQkJCTB4MDMNCisjZGVmaW5lIERXOTc2OF9MU0JfQUREUgkJCQkweDA0DQorI2Rl ZmluZSBEVzk3NjhfU1RBVFVTX0FERFIJCQkweDA1DQorDQorLyoNCisgKiBBQUMgbW9kZSBjb250 cm9sICYgcHJlc2NhbGUgcmVnaXN0ZXINCisgKiBCaXRbNzo1XSBOYW1lbHkgQUNbMjowXSwgZGVj aWRlIHRoZSBWQ00gbW9kZSBhbmQgb3BlcmF0aW9uIHRpbWUuDQorICogMDAwIERpcmVjdChkZWZh dWx0KQ0KKyAqIDAwMSBBQUMyIDAuNDh4VHZpYg0KKyAqIDAxMCBBQUMzIDAuNzB4VHZpYg0KKyAq IDAxMSBBQUM0IDAuNzV4VHZpYg0KKyAqIDEwMCBSZXNlcnZlZA0KKyAqIDEwMSBBQUM4IDEuMTN4 VHZpYg0KKyAqIDExMCBSZXNlcnZlZA0KKyAqIDExMSBSZXNlcnZlZA0KKyAqIEJpdFsyOjBdIE5h bWVseSBQUkVTQ1syOjBdLCBzZXQgdGhlIGludGVybmFsIGNsb2NrIGRpdmlkaW5nIHJhdGUgYXMg Zm9sbG93Lg0KKyAqIDAwMCAyDQorICogMDAxIDEoZGVmYXVsdCkNCisgKiAwMTAgMS8yDQorICog MDExIDEvNA0KKyAqIDEwMCA4DQorICogMTAxIDQNCisgKiAxMTAgUmVzZXJ2ZWQNCisgKiAxMTEg UmVzZXJ2ZWQNCisgKi8NCisjZGVmaW5lIERXOTc2OF9BQUNfUFJFU0NfUkVHCQkJMHgwNg0KKyNk ZWZpbmUgRFc5NzY4X0FBQ19NT0RFX1NFTF9NQVNLCQlHRU5NQVNLKDcsIDUpDQorI2RlZmluZSBE Vzk3NjhfQ0xPQ0tfUFJFX1NDQUxFX1NFTF9NQVNLCQlHRU5NQVNLKDIsIDApDQorDQorLyoNCisg KiBWQ00gcGVyaW9kIG9mIHZpYnJhdGlvbiByZWdpc3Rlcg0KKyAqIEJpdFs1OjBdIERlZmluZWQg YXMgVkNNIHJpc2luZyBwZXJpb2RpYyB0aW1lIChUdmliKSB0b2dldGhlciB3aXRoIFBSRVNDWzI6 MF0NCisgKiBUdmliID0gKDYuM21zICsgQUFDVFs1OjBdICogMC4xbXMpICogRGl2aWRpbmcgUmF0 ZQ0KKyAqIERpdmlkaW5nIFJhdGUgaXMgdGhlIGludGVybmFsIGNsb2NrIGRpdmlkaW5nIHJhdGUg dGhhdCBpcyBkZWZpbmVkIGF0DQorICogUFJFU0NBTEUgcmVnaXN0ZXIgKEFERDogMHgwNikNCisg Ki8NCisjZGVmaW5lIERXOTc2OF9BQUNfVElNRV9SRUcJCQkweDA3DQorDQorLyoNCisgKiBEVzk3 NjggcmVxdWlyZXMgd2FpdGluZyB0aW1lIChkZWxheSB0aW1lKSBvZiB0X09QUiBhZnRlciBwb3dl ci11cCwNCisgKiBvciBpbiB0aGUgY2FzZSBvZiBQRCByZXNldCB0YWtpbmcgcGxhY2UuDQorICov DQorI2RlZmluZSBEVzk3NjhfVF9PUFJfVVMJCQkJMTAwMA0KKw0KKy8qDQorICogVGhpcyBhY3Rz IGFzIHRoZSBtaW5pbXVtIGdyYW51bGFyaXR5IG9mIGxlbnMgbW92ZW1lbnQuDQorICogS2VlcCB0 aGlzIHZhbHVlIHBvd2VyIG9mIDIsIHNvIHRoZSBjb250cm9sIHN0ZXBzIGNhbiBiZQ0KKyAqIHVu aWZvcm1seSBhZGp1c3RlZCBmb3IgZ3JhZHVhbCBsZW5zIG1vdmVtZW50LCB3aXRoIGRlc2lyZWQN CisgKiBudW1iZXIgb2YgY29udHJvbCBzdGVwcy4NCisgKi8NCisjZGVmaW5lIERXOTc2OF9NT1ZF X1NURVBTCQkJMTYNCisNCisvKg0KKyAqIERXOTc2OF9BQUNfUFJFU0NfUkVHICYgRFc5NzY4X0FB Q19USU1FX1JFRyBkZXRlcm1pbmUgVkNNIG9wZXJhdGlvbiB0aW1lLg0KKyAqIElmIERXOTc2OF9B QUNfUFJFU0NfUkVHIGlzIDB4NDEsIGFuZCBEVzk3NjhfQUFDX1RJTUVfUkVHIGlzIDB4MzksIFZD TSBtb2RlDQorICogd291bGQgYmUgQUFDMywgT3BlcmF0aW9uIFRpbWUgd291bGQgYmUgMC43MHhU dmliLCB0aGF0IGlzIDguNDBtcy4NCisgKi8NCisjZGVmaW5lIERXOTc2OF9NT1ZFX0RFTEFZX1VT CQkJODQwMA0KKyNkZWZpbmUgRFc5NzY4X1NUQUJMRV9USU1FX1VTCQkJMjAwMDANCisNCitzdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0IGR3OTc2OF9zdXBwbHlfbmFtZXNbXSA9IHsNCisJInZpbiIs CS8qIEkyQyBJL08gaW50ZXJmYWNlIHBvd2VyICovDQorCSJ2ZGQiLAkvKiBWQ00gcG93ZXIgKi8N Cit9Ow0KKw0KKy8qIGR3OTc2OCBkZXZpY2Ugc3RydWN0dXJlICovDQorc3RydWN0IGR3OTc2OCB7 DQorCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW0FSUkFZX1NJWkUoZHc5NzY4 X3N1cHBseV9uYW1lcyldOw0KKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgY3RybHM7DQorCXN0 cnVjdCB2NGwyX2N0cmwJKmZvY3VzOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJc2Q7DQorDQorCXUz MgkJCWFhY19tb2RlOw0KKwl1MzIJCQlhYWNfdGltaW5nOw0KKwl1MzIJCQljbG9ja19kaXZpZGlu Z19yYXRlOw0KKwlib29sCQkJYWFjX21vZGVfY29udHJvbF9lbmFibGU7DQorCWJvb2wJCQlhYWN0 X2NudF9zZWxlY3RfZW5hYmxlOw0KKwlib29sCQkJY2xvY2tfZGl2aWRpbmdfcmF0ZV9zZWxlY3Rf ZW5hYmxlOw0KK307DQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHc5NzY4ICpzZF90b19kdzk3 Njgoc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYpDQorew0KKwlyZXR1cm4gY29udGFpbmVyX29m KHN1YmRldiwgc3RydWN0IGR3OTc2OCwgc2QpOw0KK30NCisNCitzdHJ1Y3QgcmVndmFsX2xpc3Qg ew0KKwl1OCByZWdfbnVtOw0KKwl1OCB2YWx1ZTsNCit9Ow0KKw0KK3N0YXRpYyBpbnQgZHc5NzY4 X3JlYWRfc21idXMoc3RydWN0IGR3OTc2OCAqZHc5NzY4LCB1bnNpZ25lZCBjaGFyIHJlZywNCisJ CQkgICAgIHVuc2lnbmVkIGNoYXIgKnZhbCkNCit7DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGll bnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZkdzk3NjgtPnNkKTsNCisJaW50IHJldDsNCisNCisJ cmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsNCisNCisJaWYgKHJl dCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwkqdmFsID0gKHVuc2lnbmVkIGNoYXIpcmV0Ow0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBkdzk3NjhfbW9kX3JlZyhzdHJ1Y3Qg ZHc5NzY4ICpkdzk3NjgsIHU4IHJlZywgdTggbWFzaywgdTggdmFsKQ0KK3sNCisJc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJmR3OTc2OC0+c2QpOw0KKwl1 OCByZWFkdmFsOw0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBkdzk3NjhfcmVhZF9zbWJ1cyhkdzk3 NjgsIHJlZywgJnJlYWR2YWwpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJdmFs ID0gKHJlYWR2YWwgJiB+bWFzaykgfCAodmFsICYgbWFzayk7DQorDQorCXJldHVybiBpMmNfc21i dXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOw0KK30NCisNCitzdGF0aWMgaW50 IGR3OTc2OF9zZXRfZGFjKHN0cnVjdCBkdzk3NjggKmR3OTc2OCwgdTE2IHZhbCkNCit7DQorCXN0 cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZkdzk3NjgtPnNk KTsNCisNCisJLyogV3JpdGUgVkNNIHBvc2l0aW9uIHRvIHJlZ2lzdGVycyAqLw0KKwlyZXR1cm4g aTJjX3NtYnVzX3dyaXRlX3dvcmRfc3dhcHBlZChjbGllbnQsIERXOTc2OF9NU0JfQUREUiwgdmFs KTsNCit9DQorDQorc3RhdGljIGludCBkdzk3NjhfaW5pdChzdHJ1Y3QgZHc5NzY4ICpkdzk3Njgp DQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgm ZHc5NzY4LT5zZCk7DQorCWludCByZXQsIHZhbDsNCisNCisJLyogUmVzZXQgRFc5NzY4X1JJTkdf UERfQ09OVFJPTF9SRUcgdG8gZGVmYXVsdCBzdGF0dXMgMHgwMCAqLw0KKwlyZXQgPSBpMmNfc21i dXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFc5NzY4X1JJTkdfUERfQ09OVFJPTF9SRUcsDQor CQkJCQlEVzk3NjhfUERfTU9ERV9PRkYpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7 DQorDQorCS8qDQorCSAqIERXOTc2OSByZXF1aXJlcyB3YWl0aW5nIGRlbGF5IHRpbWUgb2YgdF9P UFINCisJICogYWZ0ZXIgUEQgcmVzZXQgdGFrZXMgcGxhY2UuDQorCSAqLw0KKwl1c2xlZXBfcmFu Z2UoRFc5NzY4X1RfT1BSX1VTLCBEVzk3NjhfVF9PUFJfVVMgKyAxMDApOw0KKw0KKwkvKiBTZXQg RFc5NzY4X1JJTkdfUERfQ09OVFJPTF9SRUcgdG8gRFc5NzY4X0FBQ19NT0RFX0VOKDB4MDEpICov DQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEVzk3NjhfUklOR19Q RF9DT05UUk9MX1JFRywNCisJCQkJCURXOTc2OF9BQUNfTU9ERV9FTik7DQorCWlmIChyZXQgPCAw KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJLyogU2V0IEFBQyBtb2RlIGFjY29yZGluZyB0byBEVCBw cm9wZXJ0eSAqLw0KKwlpZiAoZHc5NzY4LT5hYWNfbW9kZV9jb250cm9sX2VuYWJsZSkgew0KKwkJ cmV0ID0gZHc5NzY4X21vZF9yZWcoZHc5NzY4LCBEVzk3NjhfQUFDX1BSRVNDX1JFRywNCisJCQkJ ICAgICBEVzk3NjhfQUFDX01PREVfU0VMX01BU0ssDQorCQkJCSAgICAgZHc5NzY4LT5hYWNfbW9k ZSA8PCA1KTsNCisJCWlmIChyZXQgPCAwKQ0KKwkJCXJldHVybiByZXQ7DQorCX0NCisNCisJLyog U2V0IENsb2NrIERpdmlkaW5nIFJhdGUgZmFjdG9yIGFjY29yZGluZyB0byBEVCBwcm9wZXJ0eSAq Lw0KKwlpZiAoZHc5NzY4LT5jbG9ja19kaXZpZGluZ19yYXRlX3NlbGVjdF9lbmFibGUpIHsNCisJ CXJldCA9IGR3OTc2OF9tb2RfcmVnKGR3OTc2OCwgRFc5NzY4X0FBQ19QUkVTQ19SRUcsDQorCQkJ CSAgICAgRFc5NzY4X0NMT0NLX1BSRV9TQ0FMRV9TRUxfTUFTSywNCisJCQkJICAgICBkdzk3Njgt PmNsb2NrX2RpdmlkaW5nX3JhdGUpOw0KKwkJaWYgKHJldCA8IDApDQorCQkJcmV0dXJuIHJldDsN CisJfQ0KKw0KKwkvKiBTZXQgQUFDIFRpbWluZyBhY2NvcmRpbmcgdG8gRFQgcHJvcGVydHkgKi8N CisJaWYgKGR3OTc2OC0+YWFjdF9jbnRfc2VsZWN0X2VuYWJsZSkgew0KKwkJcmV0ID0gaTJjX3Nt YnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERXOTc2OF9BQUNfVElNRV9SRUcsDQorCQkJCQkJ ZHc5NzY4LT5hYWNfdGltaW5nKTsNCisJCWlmIChyZXQgPCAwKQ0KKwkJCXJldHVybiByZXQ7DQor CX0NCisNCisJZm9yICh2YWwgPSBkdzk3NjgtPmZvY3VzLT52YWwgJSBEVzk3NjhfTU9WRV9TVEVQ UzsNCisJICAgICB2YWwgPD0gZHc5NzY4LT5mb2N1cy0+dmFsOw0KKwkgICAgIHZhbCArPSBEVzk3 NjhfTU9WRV9TVEVQUykgew0KKwkJcmV0ID0gZHc5NzY4X3NldF9kYWMoZHc5NzY4LCB2YWwpOw0K KwkJaWYgKHJldCkgew0KKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXMgSTJDIGZhaWx1cmU6 ICVkIiwNCisJCQkJX19mdW5jX18sIHJldCk7DQorCQkJcmV0dXJuIHJldDsNCisJCX0NCisJCXVz bGVlcF9yYW5nZShEVzk3NjhfTU9WRV9ERUxBWV9VUywNCisJCQkgICAgIERXOTc2OF9NT1ZFX0RF TEFZX1VTICsgMTAwMCk7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQg ZHc5NzY4X3JlbGVhc2Uoc3RydWN0IGR3OTc2OCAqZHc5NzY4KQ0KK3sNCisJc3RydWN0IGkyY19j bGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJmR3OTc2OC0+c2QpOw0KKwlpbnQg cmV0LCB2YWw7DQorDQorCXZhbCA9IHJvdW5kX2Rvd24oZHc5NzY4LT5mb2N1cy0+dmFsLCBEVzk3 NjhfTU9WRV9TVEVQUyk7DQorCWZvciAoIDsgdmFsID49IDA7IHZhbCAtPSBEVzk3NjhfTU9WRV9T VEVQUykgew0KKwkJcmV0ID0gZHc5NzY4X3NldF9kYWMoZHc5NzY4LCB2YWwpOw0KKwkJaWYgKHJl dCkgew0KKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiSTJDIHdyaXRlIGZhaWw6ICVkIiwgcmV0 KTsNCisJCQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKwkJdXNsZWVwX3JhbmdlKERXOTc2OF9NT1ZFX0RF TEFZX1VTLCBEVzk3NjhfTU9WRV9ERUxBWV9VUyArIDEwMDApOw0KKwl9DQorDQorCS8qDQorCSAq IFdhaXQgZm9yIHRoZSBtb3RvciB0byBzdGFiaWxpemUgYWZ0ZXIgdGhlIGxhc3QgbW92ZW1lbnQN CisJICogdG8gcHJldmVudCB0aGUgbW90b3IgZnJvbSBzaGFraW5nLg0KKwkgKi8NCisJdXNsZWVw X3JhbmdlKERXOTc2OF9TVEFCTEVfVElNRV9VUyAtIERXOTc2OF9NT1ZFX0RFTEFZX1VTLA0KKwkJ ICAgICBEVzk3NjhfU1RBQkxFX1RJTUVfVVMgLSBEVzk3NjhfTU9WRV9ERUxBWV9VUyArIDEwMDAp Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFc5NzY4X1JJ TkdfUERfQ09OVFJPTF9SRUcsDQorCQkJCQlEVzk3NjhfUERfTU9ERV9FTik7DQorCWlmIChyZXQg PCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJLyoNCisJICogRFc5NzY5IHJlcXVpcmVzIHdhaXRp bmcgZGVsYXkgdGltZSBvZiB0X09QUg0KKwkgKiBhZnRlciBQRCByZXNldCB0YWtlcyBwbGFjZS4N CisJICovDQorCXVzbGVlcF9yYW5nZShEVzk3NjhfVF9PUFJfVVMsIERXOTc2OF9UX09QUl9VUyAr IDEwMCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGR3OTc2OF9ydW50aW1l X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGky Y19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0KKwlzdHJ1Y3QgZHc5NzY4ICpkdzk3NjggPSBzZF90 b19kdzk3Njgoc2QpOw0KKw0KKwlkdzk3NjhfcmVsZWFzZShkdzk3NjgpOw0KKwlyZWd1bGF0b3Jf YnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoZHc5NzY4X3N1cHBseV9uYW1lcyksDQorCQkJICAgICAg IGR3OTc2OC0+c3VwcGxpZXMpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBk dzk3NjhfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsNCisJc3RydWN0IHY0bDJfc3Vi ZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0KKwlzdHJ1Y3QgZHc5NzY4ICpk dzk3NjggPSBzZF90b19kdzk3Njgoc2QpOw0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSByZWd1bGF0 b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShkdzk3Njhfc3VwcGx5X25hbWVzKSwNCisJCQkJICAg IGR3OTc2OC0+c3VwcGxpZXMpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRvcnNcbiIpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0K KwkvKg0KKwkgKiBUaGUgZGF0YXNoZWV0IHJlZmVycyB0byB0X09QUiB0aGF0IG5lZWRzIHRvIGJl IHdhaXRlZCBiZWZvcmUgc2VuZGluZw0KKwkgKiBJMkMgY29tbWFuZHMgYWZ0ZXIgcG93ZXItdXAu DQorCSAqLw0KKwl1c2xlZXBfcmFuZ2UoRFc5NzY4X1RfT1BSX1VTLCBEVzk3NjhfVF9PUFJfVVMg KyAxMDApOw0KKw0KKwlyZXQgPSBkdzk3NjhfaW5pdChkdzk3NjgpOw0KKwlpZiAocmV0IDwgMCkN CisJCWdvdG8gZGlzYWJsZV9yZWd1bGF0b3I7DQorDQorCXJldHVybiAwOw0KKw0KK2Rpc2FibGVf cmVndWxhdG9yOg0KKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoZHc5NzY4X3N1 cHBseV9uYW1lcyksDQorCQkJICAgICAgIGR3OTc2OC0+c3VwcGxpZXMpOw0KKw0KKwlyZXR1cm4g cmV0Ow0KK30NCisNCitzdGF0aWMgaW50IGR3OTc2OF9zZXRfY3RybChzdHJ1Y3QgdjRsMl9jdHJs ICpjdHJsKQ0KK3sNCisJc3RydWN0IGR3OTc2OCAqZHc5NzY4ID0gY29udGFpbmVyX29mKGN0cmwt PmhhbmRsZXIsDQorCQkJCQkgICAgIHN0cnVjdCBkdzk3NjgsIGN0cmxzKTsNCisNCisJaWYgKGN0 cmwtPmlkID09IFY0TDJfQ0lEX0ZPQ1VTX0FCU09MVVRFKQ0KKwkJcmV0dXJuIGR3OTc2OF9zZXRf ZGFjKGR3OTc2OCwgY3RybC0+dmFsKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBj b25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBkdzk3NjhfY3RybF9vcHMgPSB7DQorCS5zX2N0cmwg PSBkdzk3Njhfc2V0X2N0cmwsDQorfTsNCisNCitzdGF0aWMgaW50IGR3OTc2OF9vcGVuKHN0cnVj dCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgpDQorew0KKwlpbnQg cmV0Ow0KKw0KKwlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKHNkLT5kZXYpOw0KKwlpZiAocmV0 IDwgMCkgew0KKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKHNkLT5kZXYpOw0KKwkJcmV0dXJuIHJl dDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBkdzk3NjhfY2xvc2Uo c3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCkNCit7DQor CXBtX3J1bnRpbWVfcHV0KHNkLT5kZXYpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9pbnRlcm5hbF9vcHMgZHc5NzY4X2ludF9vcHMgPSB7 DQorCS5vcGVuID0gZHc5NzY4X29wZW4sDQorCS5jbG9zZSA9IGR3OTc2OF9jbG9zZSwNCit9Ow0K Kw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGR3OTc2OF9vcHMgPSB7IH07 DQorDQorc3RhdGljIGludCBkdzk3NjhfaW5pdF9jb250cm9scyhzdHJ1Y3QgZHc5NzY4ICpkdzk3 NjgpDQorew0KKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCA9ICZkdzk3NjgtPmN0cmxz Ow0KKwljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyAqb3BzID0gJmR3OTc2OF9jdHJsX29wczsN CisNCisJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDEpOw0KKw0KKwlkdzk3NjgtPmZvY3Vz ID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCBvcHMsIFY0TDJfQ0lEX0ZPQ1VTX0FCU09MVVRFLCAw LA0KKwkJCQkJICBEVzk3NjhfTUFYX0ZPQ1VTX1BPUywNCisJCQkJCSAgRFc5NzY4X0ZPQ1VTX1NU RVBTLCAwKTsNCisNCisJaWYgKGhkbC0+ZXJyb3IpDQorCQlyZXR1cm4gaGRsLT5lcnJvcjsNCisN CisJZHc5NzY4LT5zZC5jdHJsX2hhbmRsZXIgPSBoZGw7DQorDQorCXJldHVybiAwOw0KK30NCisN CitzdGF0aWMgaW50IGR3OTc2OF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQ0KK3sN CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2Ow0KKwlzdHJ1Y3QgZHc5NzY4ICpk dzk3Njg7DQorCXVuc2lnbmVkIGludCBhYWNfbW9kZV9zZWxlY3Q7DQorCXVuc2lnbmVkIGludCBh YWNfdGltaW5nX3NlbGVjdDsNCisJdW5zaWduZWQgaW50IGNsb2NrX2RpdmlkaW5nX3JhdGVfc2Vs ZWN0Ow0KKwl1bnNpZ25lZCBpbnQgaTsNCisJaW50IHJldDsNCisNCisJZHc5NzY4ID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCpkdzk3NjgpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFkdzk3Njgp DQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJdjRsMl9pMmNfc3ViZGV2X2luaXQoJmR3OTc2OC0+ c2QsIGNsaWVudCwgJmR3OTc2OF9vcHMpOw0KKwlkdzk3NjgtPmFhY19tb2RlX2NvbnRyb2xfZW5h YmxlID0gZmFsc2U7DQorCWR3OTc2OC0+YWFjdF9jbnRfc2VsZWN0X2VuYWJsZSA9IGZhbHNlOw0K Kwlkdzk3NjgtPmNsb2NrX2RpdmlkaW5nX3JhdGVfc2VsZWN0X2VuYWJsZSA9IGZhbHNlOw0KKw0K KwkvKiBPcHRpb25hbCBpbmRpY2F0aW9uIG9mIEFBQyBtb2RlIHNlbGVjdCAqLw0KKwlyZXQgPSBm d25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCAiZG9uZ3dvb24sYWFjLW1v ZGUiLA0KKwkJCQkgICAgICAgJmFhY19tb2RlX3NlbGVjdCk7DQorDQorCWlmICghcmV0KSB7DQor CQlkdzk3NjgtPmFhY19tb2RlX2NvbnRyb2xfZW5hYmxlID0gdHJ1ZTsNCisJCWR3OTc2OC0+YWFj X21vZGUgPSBhYWNfbW9kZV9zZWxlY3Q7DQorCX0NCisNCisJLyogT3B0aW9uYWwgaW5kaWNhdGlv biBvZiBWQ00gaW50ZXJuYWwgY2xvY2sgZGl2aWRpbmcgcmF0ZSBzZWxlY3QgKi8NCisJcmV0ID0g Zndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwNCisJCQkJICAgICAgICJk b25nd29vbixjbG9jay1kaXZpZGluZy1yYXRlIiwNCisJCQkJICAgICAgICZjbG9ja19kaXZpZGlu Z19yYXRlX3NlbGVjdCk7DQorDQorCWlmICghcmV0KSB7DQorCQlkdzk3NjgtPmNsb2NrX2Rpdmlk aW5nX3JhdGVfc2VsZWN0X2VuYWJsZSA9IHRydWU7DQorCQlkdzk3NjgtPmNsb2NrX2RpdmlkaW5n X3JhdGUgPSBjbG9ja19kaXZpZGluZ19yYXRlX3NlbGVjdDsNCisJfQ0KKw0KKwkvKiBPcHRpb25h bCBpbmRpY2F0aW9uIG9mIEFBQyBUaW1pbmcgKi8NCisJcmV0ID0gZndub2RlX3Byb3BlcnR5X3Jl YWRfdTMyKGRldl9md25vZGUoZGV2KSwgImRvbmd3b29uLGFhYy10aW1pbmciLA0KKwkJCQkgICAg ICAgJmFhY190aW1pbmdfc2VsZWN0KTsNCisNCisJaWYgKCFyZXQpIHsNCisJCWR3OTc2OC0+YWFj dF9jbnRfc2VsZWN0X2VuYWJsZSA9IHRydWU7DQorCQlkdzk3NjgtPmFhY190aW1pbmcgPSBhYWNf dGltaW5nX3NlbGVjdDsNCisJfQ0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkdzk3 Njhfc3VwcGx5X25hbWVzKTsgaSsrKQ0KKwkJZHc5NzY4LT5zdXBwbGllc1tpXS5zdXBwbHkgPSBk dzk3Njhfc3VwcGx5X25hbWVzW2ldOw0KKw0KKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dl dChkZXYsIEFSUkFZX1NJWkUoZHc5NzY4X3N1cHBseV9uYW1lcyksDQorCQkJCSAgICAgIGR3OTc2 OC0+c3VwcGxpZXMpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBn ZXQgcmVndWxhdG9yc1xuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IGR3OTc2 OF9pbml0X2NvbnRyb2xzKGR3OTc2OCk7DQorCWlmIChyZXQpDQorCQlnb3RvIGVudGl0eV9jbGVh bnVwOw0KKw0KKwlkdzk3NjgtPnNkLmZsYWdzIHw9IFY0TDJfU1VCREVWX0ZMX0hBU19ERVZOT0RF Ow0KKwlkdzk3NjgtPnNkLmludGVybmFsX29wcyA9ICZkdzk3NjhfaW50X29wczsNCisNCisJcmV0 ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5pdCgmZHc5NzY4LT5zZC5lbnRpdHksIDAsIE5VTEwpOw0K KwlpZiAocmV0IDwgMCkNCisJCWdvdG8gZW50aXR5X2NsZWFudXA7DQorDQorCWR3OTc2OC0+c2Qu ZW50aXR5LmZ1bmN0aW9uID0gTUVESUFfRU5UX0ZfTEVOUzsNCisNCisJcG1fcnVudGltZV9lbmFi bGUoZGV2KTsNCisJaWYgKCFwbV9ydW50aW1lX2VuYWJsZWQoZGV2KSkgew0KKwkJcmV0ID0gZHc5 NzY4X3J1bnRpbWVfcmVzdW1lKGRldik7DQorCQlpZiAocmV0IDwgMCkgew0KKwkJCWRldl9lcnIo ZGV2LCAiZmFpbGVkIHRvIHBvd2VyIG9uOiAlZFxuIiwgcmV0KTsNCisJCQlnb3RvIGVudGl0eV9j bGVhbnVwOw0KKwkJfQ0KKwl9DQorDQorCXJldCA9IHY0bDJfYXN5bmNfcmVnaXN0ZXJfc3ViZGV2 KCZkdzk3NjgtPnNkKTsNCisJaWYgKHJldCA8IDApDQorCQlnb3RvIGVudGl0eV9jbGVhbnVwOw0K Kw0KKwlyZXR1cm4gMDsNCisNCitlbnRpdHlfY2xlYW51cDoNCisJdjRsMl9jdHJsX2hhbmRsZXJf ZnJlZSgmZHc5NzY4LT5jdHJscyk7DQorCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZkdzk3NjgtPnNk LmVudGl0eSk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZHc5NzY4X3JlbW92 ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQ0KK3sNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0KKwlzdHJ1Y3QgZHc5NzY4ICpkdzk3Njgg PSBzZF90b19kdzk3Njgoc2QpOw0KKw0KKwlwbV9ydW50aW1lX2Rpc2FibGUoJmNsaWVudC0+ZGV2 KTsNCisJdjRsMl9hc3luY191bnJlZ2lzdGVyX3N1YmRldigmZHc5NzY4LT5zZCk7DQorCXY0bDJf Y3RybF9oYW5kbGVyX2ZyZWUoJmR3OTc2OC0+Y3RybHMpOw0KKwltZWRpYV9lbnRpdHlfY2xlYW51 cCgmZHc5NzY4LT5zZC5lbnRpdHkpOw0KKwlpZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRl ZCgmY2xpZW50LT5kZXYpKQ0KKwkJZHc5NzY4X3J1bnRpbWVfc3VzcGVuZCgmY2xpZW50LT5kZXYp Ow0KKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJmNsaWVudC0+ZGV2KTsNCisNCisJcmV0dXJu IDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3OTc2OF9vZl90 YWJsZVtdID0gew0KKwl7IC5jb21wYXRpYmxlID0gImRvbmd3b29uLGR3OTc2OCIgfSwNCisJeyAu Y29tcGF0aWJsZSA9ICJnaWFudGVjLGd0OTc2OSIgfSwNCisJe30NCit9Ow0KK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIGR3OTc2OF9vZl90YWJsZSk7DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBk ZXZfcG1fb3BzIGR3OTc2OF9wbV9vcHMgPSB7DQorCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHBt X3J1bnRpbWVfZm9yY2Vfc3VzcGVuZCwNCisJCQkJcG1fcnVudGltZV9mb3JjZV9yZXN1bWUpDQor CVNFVF9SVU5USU1FX1BNX09QUyhkdzk3NjhfcnVudGltZV9zdXNwZW5kLCBkdzk3NjhfcnVudGlt ZV9yZXN1bWUsIE5VTEwpDQorfTsNCisNCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHc5NzY4 X2kyY19kcml2ZXIgPSB7DQorCS5kcml2ZXIgPSB7DQorCQkubmFtZSA9IERXOTc2OF9OQU1FLA0K KwkJLnBtID0gJmR3OTc2OF9wbV9vcHMsDQorCQkub2ZfbWF0Y2hfdGFibGUgPSBkdzk3Njhfb2Zf dGFibGUsDQorCX0sDQorCS5wcm9iZV9uZXcgID0gZHc5NzY4X3Byb2JlLA0KKwkucmVtb3ZlID0g ZHc5NzY4X3JlbW92ZSwNCit9Ow0KK21vZHVsZV9pMmNfZHJpdmVyKGR3OTc2OF9pMmNfZHJpdmVy KTsNCisNCitNT0RVTEVfQVVUSE9SKCJEb25nY2h1biBaaHUgPGRvbmdjaHVuLnpodUBtZWRpYXRl ay5jb20+Iik7DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJEVzk3NjggVkNNIGRyaXZlciIpOw0KK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCi0tIA0KMi45LjINCg==