From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755257AbdERI0b (ORCPT ); Thu, 18 May 2017 04:26:31 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:46812 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753486AbdERI00 (ORCPT ); Thu, 18 May 2017 04:26:26 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 9B20A607ED Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=architt@codeaurora.org Subject: Re: [PATCH 2/4] dt-bindings: Document the Raspberry Pi Touchscreen nodes. To: Eric Anholt , Laurent Pinchart References: <20170511235625.22427-1-eric@anholt.net> <87h90ku4sq.fsf@eliezer.anholt.net> <3768334.nZM7df9y4L@avalon> <87shk4iqr7.fsf@eliezer.anholt.net> Cc: Rob Herring , dri-devel , Thierry Reding , Mark Rutland , Andrzej Hajda , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" From: Archit Taneja Message-ID: Date: Thu, 18 May 2017 13:56:19 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: <87shk4iqr7.fsf@eliezer.anholt.net> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On 05/17/2017 12:16 AM, Eric Anholt wrote: > Laurent Pinchart writes: > >> Hi Eric, >> >> On Tuesday 16 May 2017 09:47:49 Eric Anholt wrote: >>> Rob Herring writes: >>>> On Mon, May 15, 2017 at 7:03 PM, Eric Anholt wrote: >>>>> Laurent Pinchart writes: >>>>>> Hi Eric, >>>>>> >>>>>> Thank you for the patch. >>>>>> >>>>>> On Thursday 11 May 2017 16:56:23 Eric Anholt wrote: >>>>>>> The Raspberry Pi 7" Touchscreen is a DPI touchscreen panel with >>>>>>> DSI->DPI bridge and touchscreen controller integrated, that connects >>>>>>> to the Raspberry Pi through its 15-pin "DSI" connector (some lines are >>>>>>> DSI, some lines are I2C). >>>>>>> >>>>>>> This device is represented in the DT as three nodes (DSI device, I2C >>>>>>> device, panel). Input will be left to a separate binding later, as it >>>>>>> will be a basic I2C client device. >>>>>>> >>>>>>> Signed-off-by: Eric Anholt >>>>>>> --- >>>>>>> >>>>>>> .../raspberrypi,7inch-touchscreen-bridge.txt | 68 ++++++++++++++ >>>>>>> .../panel/raspberrypi,7inch-touchscreen-panel.txt | 7 +++ >>>>>>> 2 files changed, 75 insertions(+) >>>>>>> create mode 100644 >>>>>>> >>>>>>> Documentation/devicetree/bindings/display/bridge/raspberrypi,7inch-touc >>>>>>> hscreen-bridge.txt create mode 100644 >>>>>>> Documentation/devicetree/bindings/display/panel/raspberrypi,7inch-touch >>>>>>> screen-panel.txt >>>>>>> >>>>>>> diff --git >>>>>>> a/Documentation/devicetree/bindings/display/bridge/raspberrypi,7inch-to >>>>>>> uchscreen-bridge.txt >>>>>>> b/Documentation/devicetree/bindings/display/bridge/raspberrypi,7inch-to >>>>>>> uchscreen-bridge.txt new file mode 100644 >>>>>>> index 000000000000..a5669beaf68f >>>>>>> --- /dev/null >>>>>>> +++ >>>>>>> b/Documentation/devicetree/bindings/display/bridge/raspberrypi,7inch-to >>>>>>> uchscreen-bridge.txt >>>>>>> @@ -0,0 +1,68 @@ >>>>>>> +Official 7" (800x480) Raspberry Pi touchscreen panel's bridge. >>>>>>> + >>>>>>> +This DSI panel contains: >>>>>>> + >>>>>>> +- TC358762 DSI->DPI bridge >>>>>>> +- Atmel microcontroller on I2C for power sequencing the DSI bridge and >>>>>>> + controlling backlight >>>>>>> +- Touchscreen controller on I2C for touch input >>>>>>> + >>>>>>> +and this covers the TC358762 bridge and Atmel microcontroller, while >>>>>>> +../panel/raspberrypi,7inch-touchscreen-panel.txt covers the panel. >>>>>> >>>>>> The TC358762 is a standalone bridge that doesn't depend on the ATTiny >>>>>> microcontroller used by the RPI. As it's usable standalone, I believe >>>>>> this binding should be split in two. >>>>> >>>>> Do you have a plan for how I would implement a driver on top of that >>>>> binding change, though? Note that we don't program the Toshiba >>>>> directly, we only send commands to the Atmel. >>>> >>>> I agree. If it is a black box and the interface to the host is defined >>>> by the Atmel uC firmware, then that's what the DT should describe. >>>> Perhaps a diagram here or pointer to one would help and remove >>>> mentioning what kind of bridge chip it is. >>> >>> It's a *very* black box. I have some non-public schematics that don't >>> even say what panel is involved, and no documentation of the uc >>> interface. The driver code is just replicating the firmware's >>> programming sequence. >>> >>> I would certainly love to be building a generic TC358762 driver, which >>> would be a lot more satisfying. I just don't think it's doable for this >>> panel. Given that, what do I need to do to the DT? Should I just drop >>> mention of the Toshiba and talk about this being a bridge with a custom >>> microcontroller firmware? >> >> I think that would be best, yes. Could you share a simple block-diagram of the >> hardware ? It would help turning my random advices into semi-random advices >> :-) > > In terms of physical connections: > > [15-pin "DSI" connector on 2835] > | | > | I2C | DSI > | | > / \ SPI | > [TS] [Atmel]------[TC358762] > \ | > \PWM | > \ | DPI > [some backlight]------[some unknown panel] > > The binding I'm trying to create is to expose what's necessary for a > driver that talks I2C to the Atmel, which then controls the PWM and does > the command sequence over SPI to the Toshiba that sets up its end of the > DSI link. > The bridge (Atmel + TC358762 combination) here looks like it's primarily an i2c device (i.e, the control bus is i2c). Therefore, the drm-bridge driver here should be an i2c driver instead of a mipi_dsi_driver. We have the facility to create a mipi DSI device without the need to have a corresponding node in DT. The ADV7533 and TC358767 drivers are examples of that. The following is what the binding could look like, it's same as what Rob also mentioned previously in the thread. Thanks, Archit dsi1: dsi@7e700000 { #address-cells = <1>; #size-cells = <0>; <...> /* The SoC's DSI input/output port */ ports { #address-cells = <1>; #size-cells = <0>; /* port@0 if needed */ port@1 { dsi_out_port: endpoint { reg = <1>; remote-endpoint = <&bridge_dsi_port>; }; }; }; }; i2c_dsi: i2c { compatible = "i2c-gpio"; #address-cells = <1>; #size-cells = <0>; gpios = <&gpio 28 0 &gpio 29 0>; /* the Atmel + TC35872 bridge */ pitouchscreen_bridge: bridge@45 { compatible = "raspberrypi,touchscreen-bridge"; reg = <0x45>; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; bridge_dsi_port: endpoint { remote-endpoint = <&dsi_out_port>; }; }; port@1 { reg = <1>; bridge_dpi_port: endpoint { remote-endpoint = <&pitouchscreen_panel_port>; }; }; }; }; }; lcd { compatible = "raspberrypi,7inch-touchscreen-panel"; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; pitouchscreen_panel_port: endpoint { remote-endpoint = <&bridge_dpi_port>; }; }; }; }; -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [PATCH 2/4] dt-bindings: Document the Raspberry Pi Touchscreen nodes. Date: Thu, 18 May 2017 13:56:19 +0530 Message-ID: References: <20170511235625.22427-1-eric@anholt.net> <87h90ku4sq.fsf@eliezer.anholt.net> <3768334.nZM7df9y4L@avalon> <87shk4iqr7.fsf@eliezer.anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <87shk4iqr7.fsf@eliezer.anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Eric Anholt , Laurent Pinchart Cc: Mark Rutland , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , dri-devel , Rob Herring List-Id: devicetree@vger.kernel.org SGksCgpPbiAwNS8xNy8yMDE3IDEyOjE2IEFNLCBFcmljIEFuaG9sdCB3cm90ZToKPiBMYXVyZW50 IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+IHdyaXRlczoKPgo+ PiBIaSBFcmljLAo+Pgo+PiBPbiBUdWVzZGF5IDE2IE1heSAyMDE3IDA5OjQ3OjQ5IEVyaWMgQW5o b2x0IHdyb3RlOgo+Pj4gUm9iIEhlcnJpbmcgPHJvYmgrZHRAa2VybmVsLm9yZz4gd3JpdGVzOgo+ Pj4+IE9uIE1vbiwgTWF5IDE1LCAyMDE3IGF0IDc6MDMgUE0sIEVyaWMgQW5ob2x0IDxlcmljQGFu aG9sdC5uZXQ+IHdyb3RlOgo+Pj4+PiBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0 QGlkZWFzb25ib2FyZC5jb20+IHdyaXRlczoKPj4+Pj4+IEhpIEVyaWMsCj4+Pj4+Pgo+Pj4+Pj4g VGhhbmsgeW91IGZvciB0aGUgcGF0Y2guCj4+Pj4+Pgo+Pj4+Pj4gT24gVGh1cnNkYXkgMTEgTWF5 IDIwMTcgMTY6NTY6MjMgRXJpYyBBbmhvbHQgd3JvdGU6Cj4+Pj4+Pj4gVGhlIFJhc3BiZXJyeSBQ aSA3IiBUb3VjaHNjcmVlbiBpcyBhIERQSSB0b3VjaHNjcmVlbiBwYW5lbCB3aXRoCj4+Pj4+Pj4g RFNJLT5EUEkgYnJpZGdlIGFuZCB0b3VjaHNjcmVlbiBjb250cm9sbGVyIGludGVncmF0ZWQsIHRo YXQgY29ubmVjdHMKPj4+Pj4+PiB0byB0aGUgUmFzcGJlcnJ5IFBpIHRocm91Z2ggaXRzIDE1LXBp biAiRFNJIiBjb25uZWN0b3IgKHNvbWUgbGluZXMgYXJlCj4+Pj4+Pj4gRFNJLCBzb21lIGxpbmVz IGFyZSBJMkMpLgo+Pj4+Pj4+Cj4+Pj4+Pj4gVGhpcyBkZXZpY2UgaXMgcmVwcmVzZW50ZWQgaW4g dGhlIERUIGFzIHRocmVlIG5vZGVzIChEU0kgZGV2aWNlLCBJMkMKPj4+Pj4+PiBkZXZpY2UsIHBh bmVsKS4gIElucHV0IHdpbGwgYmUgbGVmdCB0byBhIHNlcGFyYXRlIGJpbmRpbmcgbGF0ZXIsIGFz IGl0Cj4+Pj4+Pj4gd2lsbCBiZSBhIGJhc2ljIEkyQyBjbGllbnQgZGV2aWNlLgo+Pj4+Pj4+Cj4+ Pj4+Pj4gU2lnbmVkLW9mZi1ieTogRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KPj4+Pj4+ PiAtLS0KPj4+Pj4+Pgo+Pj4+Pj4+ICAuLi4vcmFzcGJlcnJ5cGksN2luY2gtdG91Y2hzY3JlZW4t YnJpZGdlLnR4dCAgICAgICB8IDY4ICsrKysrKysrKysrKysrCj4+Pj4+Pj4gIC4uLi9wYW5lbC9y YXNwYmVycnlwaSw3aW5jaC10b3VjaHNjcmVlbi1wYW5lbC50eHQgIHwgIDcgKysrCj4+Pj4+Pj4g IDIgZmlsZXMgY2hhbmdlZCwgNzUgaW5zZXJ0aW9ucygrKQo+Pj4+Pj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQKPj4+Pj4+Pgo+Pj4+Pj4+IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9k aXNwbGF5L2JyaWRnZS9yYXNwYmVycnlwaSw3aW5jaC10b3VjCj4+Pj4+Pj4gaHNjcmVlbi1icmlk Z2UudHh0IGNyZWF0ZSBtb2RlIDEwMDY0NAo+Pj4+Pj4+IERvY3VtZW50YXRpb24vZGV2aWNldHJl ZS9iaW5kaW5ncy9kaXNwbGF5L3BhbmVsL3Jhc3BiZXJyeXBpLDdpbmNoLXRvdWNoCj4+Pj4+Pj4g c2NyZWVuLXBhbmVsLnR4dAo+Pj4+Pj4+Cj4+Pj4+Pj4gZGlmZiAtLWdpdAo+Pj4+Pj4+IGEvRG9j dW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvYnJpZGdlL3Jhc3BiZXJyeXBp LDdpbmNoLXRvCj4+Pj4+Pj4gdWNoc2NyZWVuLWJyaWRnZS50eHQKPj4+Pj4+PiBiL0RvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2JyaWRnZS9yYXNwYmVycnlwaSw3aW5j aC10bwo+Pj4+Pj4+IHVjaHNjcmVlbi1icmlkZ2UudHh0IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+ Pj4+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hNTY2OWJlYWY2OGYKPj4+Pj4+PiAtLS0gL2Rldi9u dWxsCj4+Pj4+Pj4gKysrCj4+Pj4+Pj4gYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGlu Z3MvZGlzcGxheS9icmlkZ2UvcmFzcGJlcnJ5cGksN2luY2gtdG8KPj4+Pj4+PiB1Y2hzY3JlZW4t YnJpZGdlLnR4dAo+Pj4+Pj4+IEBAIC0wLDAgKzEsNjggQEAKPj4+Pj4+PiArT2ZmaWNpYWwgNyIg KDgwMHg0ODApIFJhc3BiZXJyeSBQaSB0b3VjaHNjcmVlbiBwYW5lbCdzIGJyaWRnZS4KPj4+Pj4+ PiArCj4+Pj4+Pj4gK1RoaXMgRFNJIHBhbmVsIGNvbnRhaW5zOgo+Pj4+Pj4+ICsKPj4+Pj4+PiAr LSBUQzM1ODc2MiBEU0ktPkRQSSBicmlkZ2UKPj4+Pj4+PiArLSBBdG1lbCBtaWNyb2NvbnRyb2xs ZXIgb24gSTJDIGZvciBwb3dlciBzZXF1ZW5jaW5nIHRoZSBEU0kgYnJpZGdlIGFuZAo+Pj4+Pj4+ ICsgIGNvbnRyb2xsaW5nIGJhY2tsaWdodAo+Pj4+Pj4+ICstIFRvdWNoc2NyZWVuIGNvbnRyb2xs ZXIgb24gSTJDIGZvciB0b3VjaCBpbnB1dAo+Pj4+Pj4+ICsKPj4+Pj4+PiArYW5kIHRoaXMgY292 ZXJzIHRoZSBUQzM1ODc2MiBicmlkZ2UgYW5kIEF0bWVsIG1pY3JvY29udHJvbGxlciwgd2hpbGUK Pj4+Pj4+PiArLi4vcGFuZWwvcmFzcGJlcnJ5cGksN2luY2gtdG91Y2hzY3JlZW4tcGFuZWwudHh0 IGNvdmVycyB0aGUgcGFuZWwuCj4+Pj4+Pgo+Pj4+Pj4gVGhlIFRDMzU4NzYyIGlzIGEgc3RhbmRh bG9uZSBicmlkZ2UgdGhhdCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgQVRUaW55Cj4+Pj4+PiBtaWNy b2NvbnRyb2xsZXIgdXNlZCBieSB0aGUgUlBJLiBBcyBpdCdzIHVzYWJsZSBzdGFuZGFsb25lLCBJ IGJlbGlldmUKPj4+Pj4+IHRoaXMgYmluZGluZyBzaG91bGQgYmUgc3BsaXQgaW4gdHdvLgo+Pj4+ Pgo+Pj4+PiBEbyB5b3UgaGF2ZSBhIHBsYW4gZm9yIGhvdyBJIHdvdWxkIGltcGxlbWVudCBhIGRy aXZlciBvbiB0b3Agb2YgdGhhdAo+Pj4+PiBiaW5kaW5nIGNoYW5nZSwgdGhvdWdoPyAgTm90ZSB0 aGF0IHdlIGRvbid0IHByb2dyYW0gdGhlIFRvc2hpYmEKPj4+Pj4gZGlyZWN0bHksIHdlIG9ubHkg c2VuZCBjb21tYW5kcyB0byB0aGUgQXRtZWwuCj4+Pj4KPj4+PiBJIGFncmVlLiBJZiBpdCBpcyBh IGJsYWNrIGJveCBhbmQgdGhlIGludGVyZmFjZSB0byB0aGUgaG9zdCBpcyBkZWZpbmVkCj4+Pj4g YnkgdGhlIEF0bWVsIHVDIGZpcm13YXJlLCB0aGVuIHRoYXQncyB3aGF0IHRoZSBEVCBzaG91bGQg ZGVzY3JpYmUuCj4+Pj4gUGVyaGFwcyBhIGRpYWdyYW0gaGVyZSBvciBwb2ludGVyIHRvIG9uZSB3 b3VsZCBoZWxwIGFuZCByZW1vdmUKPj4+PiBtZW50aW9uaW5nIHdoYXQga2luZCBvZiBicmlkZ2Ug Y2hpcCBpdCBpcy4KPj4+Cj4+PiBJdCdzIGEgKnZlcnkqIGJsYWNrIGJveC4gIEkgaGF2ZSBzb21l IG5vbi1wdWJsaWMgc2NoZW1hdGljcyB0aGF0IGRvbid0Cj4+PiBldmVuIHNheSB3aGF0IHBhbmVs IGlzIGludm9sdmVkLCBhbmQgbm8gZG9jdW1lbnRhdGlvbiBvZiB0aGUgdWMKPj4+IGludGVyZmFj ZS4gIFRoZSBkcml2ZXIgY29kZSBpcyBqdXN0IHJlcGxpY2F0aW5nIHRoZSBmaXJtd2FyZSdzCj4+ PiBwcm9ncmFtbWluZyBzZXF1ZW5jZS4KPj4+Cj4+PiBJIHdvdWxkIGNlcnRhaW5seSBsb3ZlIHRv IGJlIGJ1aWxkaW5nIGEgZ2VuZXJpYyBUQzM1ODc2MiBkcml2ZXIsIHdoaWNoCj4+PiB3b3VsZCBi ZSBhIGxvdCBtb3JlIHNhdGlzZnlpbmcuICBJIGp1c3QgZG9uJ3QgdGhpbmsgaXQncyBkb2FibGUg Zm9yIHRoaXMKPj4+IHBhbmVsLiAgR2l2ZW4gdGhhdCwgd2hhdCBkbyBJIG5lZWQgdG8gZG8gdG8g dGhlIERUPyAgU2hvdWxkIEkganVzdCBkcm9wCj4+PiBtZW50aW9uIG9mIHRoZSBUb3NoaWJhIGFu ZCB0YWxrIGFib3V0IHRoaXMgYmVpbmcgYSBicmlkZ2Ugd2l0aCBhIGN1c3RvbQo+Pj4gbWljcm9j b250cm9sbGVyIGZpcm13YXJlPwo+Pgo+PiBJIHRoaW5rIHRoYXQgd291bGQgYmUgYmVzdCwgeWVz LiBDb3VsZCB5b3Ugc2hhcmUgYSBzaW1wbGUgYmxvY2stZGlhZ3JhbSBvZiB0aGUKPj4gaGFyZHdh cmUgPyBJdCB3b3VsZCBoZWxwIHR1cm5pbmcgbXkgcmFuZG9tIGFkdmljZXMgaW50byBzZW1pLXJh bmRvbSBhZHZpY2VzCj4+IDotKQo+Cj4gSW4gdGVybXMgb2YgcGh5c2ljYWwgY29ubmVjdGlvbnM6 Cj4KPiAgICBbMTUtcGluICJEU0kiIGNvbm5lY3RvciBvbiAyODM1XQo+ICAgICB8ICAgICAgICAg ICAgICAgICAgIHwKPiAgICAgfCBJMkMgICAgICAgICAgICAgICB8IERTSQo+ICAgICB8ICAgICAg ICAgICAgICAgICAgIHwKPiAgICAvIFwgICAgICAgIFNQSSAgICAgICB8Cj4gW1RTXSAgW0F0bWVs XS0tLS0tLVtUQzM1ODc2Ml0KPiAgICAgICAgXCAgICAgICAgICAgICAgICB8Cj4gICAgICAgICBc UFdNICAgICAgICAgICAgfAo+ICAgICAgICAgIFwgICAgICAgICAgICAgIHwgRFBJCj4gW3NvbWUg YmFja2xpZ2h0XS0tLS0tLVtzb21lIHVua25vd24gcGFuZWxdCj4KPiBUaGUgYmluZGluZyBJJ20g dHJ5aW5nIHRvIGNyZWF0ZSBpcyB0byBleHBvc2Ugd2hhdCdzIG5lY2Vzc2FyeSBmb3IgYQo+IGRy aXZlciB0aGF0IHRhbGtzIEkyQyB0byB0aGUgQXRtZWwsIHdoaWNoIHRoZW4gY29udHJvbHMgdGhl IFBXTSBhbmQgZG9lcwo+IHRoZSBjb21tYW5kIHNlcXVlbmNlIG92ZXIgU1BJIHRvIHRoZSBUb3No aWJhIHRoYXQgc2V0cyB1cCBpdHMgZW5kIG9mIHRoZQo+IERTSSBsaW5rLgo+CgpUaGUgYnJpZGdl IChBdG1lbCArIFRDMzU4NzYyIGNvbWJpbmF0aW9uKSBoZXJlIGxvb2tzIGxpa2UgaXQncyBwcmlt YXJpbHkKYW4gaTJjIGRldmljZSAoaS5lLCB0aGUgY29udHJvbCBidXMgaXMgaTJjKS4gVGhlcmVm b3JlLCB0aGUgZHJtLWJyaWRnZQpkcml2ZXIgaGVyZSBzaG91bGQgYmUgYW4gaTJjIGRyaXZlciBp bnN0ZWFkIG9mIGEgbWlwaV9kc2lfZHJpdmVyLgoKV2UgaGF2ZSB0aGUgZmFjaWxpdHkgdG8gY3Jl YXRlIGEgbWlwaSBEU0kgZGV2aWNlIHdpdGhvdXQgdGhlIG5lZWQgdG8gaGF2ZQphIGNvcnJlc3Bv bmRpbmcgbm9kZSBpbiBEVC4gVGhlIEFEVjc1MzMgYW5kIFRDMzU4NzY3IGRyaXZlcnMgYXJlIGV4 YW1wbGVzCm9mIHRoYXQuCgpUaGUgZm9sbG93aW5nIGlzIHdoYXQgdGhlIGJpbmRpbmcgY291bGQg bG9vayBsaWtlLCBpdCdzIHNhbWUgYXMgd2hhdCBSb2IKYWxzbyBtZW50aW9uZWQgcHJldmlvdXNs eSBpbiB0aGUgdGhyZWFkLgoKVGhhbmtzLApBcmNoaXQKCmRzaTE6IGRzaUA3ZTcwMDAwMCB7Cgkj YWRkcmVzcy1jZWxscyA9IDwxPjsKCSNzaXplLWNlbGxzID0gPDA+OwoJPC4uLj4KCgkvKiBUaGUg U29DJ3MgRFNJIGlucHV0L291dHB1dCBwb3J0ICovCglwb3J0cyB7CgkJI2FkZHJlc3MtY2VsbHMg PSA8MT47CgkJI3NpemUtY2VsbHMgPSA8MD47CgoJCS8qIHBvcnRAMCBpZiBuZWVkZWQgKi8KCgkJ cG9ydEAxIHsKCQkJZHNpX291dF9wb3J0OiBlbmRwb2ludCB7CgkJCQlyZWcgPSA8MT47CgkJCQly ZW1vdGUtZW5kcG9pbnQgPSA8JmJyaWRnZV9kc2lfcG9ydD47CgkJCX07CgkJfTsKCX07Cn07Cgpp MmNfZHNpOiBpMmMgewoJY29tcGF0aWJsZSA9ICJpMmMtZ3BpbyI7CgkjYWRkcmVzcy1jZWxscyA9 IDwxPjsKCSNzaXplLWNlbGxzID0gPDA+OwoJZ3Bpb3MgPSA8JmdwaW8gMjggMAoJCSAmZ3BpbyAy OSAwPjsKCgkvKiB0aGUgQXRtZWwgKyBUQzM1ODcyIGJyaWRnZSAqLwoJcGl0b3VjaHNjcmVlbl9i cmlkZ2U6IGJyaWRnZUA0NSB7CgkJY29tcGF0aWJsZSA9ICJyYXNwYmVycnlwaSx0b3VjaHNjcmVl bi1icmlkZ2UiOwoJCXJlZyA9IDwweDQ1PjsKCgkJcG9ydHMgewoJCQkjYWRkcmVzcy1jZWxscyA9 IDwxPjsKCQkJI3NpemUtY2VsbHMgPSA8MD47CgoJCQlwb3J0QDAgewoJCQkJcmVnID0gPDA+OwoJ CQkJYnJpZGdlX2RzaV9wb3J0OiBlbmRwb2ludCB7CgkJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZk c2lfb3V0X3BvcnQ+OwoJCQkJfTsKCQkJfTsKCQkJcG9ydEAxIHsKCQkJCXJlZyA9IDwxPjsKCQkJ CWJyaWRnZV9kcGlfcG9ydDogZW5kcG9pbnQgewoJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmcGl0 b3VjaHNjcmVlbl9wYW5lbF9wb3J0PjsKCQkJCX07CgkJCX07CgkJfTsKCX07Cn07CgpsY2QgewoJ Y29tcGF0aWJsZSA9ICJyYXNwYmVycnlwaSw3aW5jaC10b3VjaHNjcmVlbi1wYW5lbCI7Cglwb3J0 cyB7CgkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CgkJI3NpemUtY2VsbHMgPSA8MD47CgkJcG9ydEAw IHsKCQkJcmVnID0gPDA+OwoJCQlwaXRvdWNoc2NyZWVuX3BhbmVsX3BvcnQ6IGVuZHBvaW50IHsK CQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmYnJpZGdlX2RwaV9wb3J0PjsKCQkJfTsKCQl9OwoJfTsK fTsKCi0tIApRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiBD b2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVj dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK