From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752653AbbFKI2k (ORCPT ); Thu, 11 Jun 2015 04:28:40 -0400 Received: from mail1.bemta3.messagelabs.com ([195.245.230.166]:20678 "EHLO mail1.bemta3.messagelabs.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751090AbbFKI2f (ORCPT ); Thu, 11 Jun 2015 04:28:35 -0400 X-Env-Sender: stwiss.opensource@diasemi.com X-Msg-Ref: server-11.tower-38.messagelabs.com!1434011278!3226553!1 X-Originating-IP: [94.185.165.51] X-StarScan-Received: X-StarScan-Version: 6.13.16; banners=-,-,- X-VirusChecked: Checked From: "Opensource [Steve Twiss]" To: "'Lee Jones'" CC: LINUXKERNEL , Samuel Ortiz , Alessandro Zummo , DEVICETREE , David Dajun Chen , Dmitry Torokhov , Ian Campbell , Kumar Gala , LINUXINPUT , LINUXWATCHDOG , Liam Girdwood , "Mark Brown" , Mark Rutland , Pawel Moll , RTCLINUX , Rob Herring , Support Opensource , Wim Van Sebroeck Subject: RE: [PATCH V3 1/4] mfd: da9062: DA9062 MFD core driver Thread-Topic: [PATCH V3 1/4] mfd: da9062: DA9062 MFD core driver Thread-Index: AQHQkje+BbbztfyjIkOz27ag7HsO6Z2OZ74AgALzVjCAFbuuAA== Date: Thu, 11 Jun 2015 08:27:57 +0000 Message-ID: <6ED8E3B22081A4459DAC7699F3695FB7014B22F4C4@SW-EX-MBX02.diasemi.com> References: <20150526161024.GQ11677@x1> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.20.26.77] Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by nfs id t5B8SjU4009447 On 28 May 2015 13:53, Steve Twiss wrote: > To: 'Lee Jones' > Subject: RE: [PATCH V3 1/4] mfd: da9062: DA9062 MFD core driver > > Hi Lee, > > I will refactor a lot of the driver and implement your changes as requested. Hi Lee, I realise this is a busy kernel time for you, as ever, so this is just to see if I am missing anything with the reply I sent about the requested alterations a couple of weeks ago. It relates to the addition of support for the Dialog DA9062 Power Management IC - https://lkml.org/lkml/2015/5/28/358 The main changes requested (for the core MFD) can be found in here: - https://lkml.org/lkml/2015/5/28/359 I believe that the only two major differences with your previous comments were those relating to the interrupt handler da9062_vdd_warn_event() -- which has been erased, and the header file -- which I would prefer the to remain [mostly] untouched if possible. The reasons for these two differences are described below: > > > + /* VDD WARN event support */ > > > + irq_vdd_warn = regmap_irq_get_virq(chip->regmap_irq, > > > + DA9062_IRQ_VDD_WARN); > > > + if (irq_vdd_warn < 0) { > > > + dev_err(chip->dev, "Failed to get IRQ.\n"); > > > + return irq_vdd_warn; > > > + } > > > + chip->irq_vdd_warn = irq_vdd_warn; > > > + > > > + ret = devm_request_threaded_irq(chip->dev, irq_vdd_warn, > > > + NULL, da9062_vdd_warn_event, > > > + IRQF_TRIGGER_LOW | IRQF_ONESHOT, > > > + "VDD_WARN", chip); > > > + if (ret) { > > > + dev_warn(chip->dev, > > > + "Failed to request VDD_WARN IRQ.\n"); > > > + chip->irq_vdd_warn = -ENXIO; > > > + } > > > > This looks like a lot of code, which doesn't really do anything. What > > is a VDD warning indicator anyway? > > > > I will remove this. > > The IRQ handler da9062_vdd_warn_event() -- see earlier above -- does > not currently do anything apart from handle the IRQ that was requested > here. It prints a statement to say the main PMIC voltage supply dropped > below a defined trigger point, but doesn't actually do anything to mitigate > this problem. > > Previously this VDD_WARN was in the regulator driver, however it should > be made available even if the regulator driver is not installed -- so I added it > to the core instead. > > In a previous driver submission I had a similar problem, a warning IRQ was > just printing to the console to say there was an error -- the handler and > IRQ code was put in by me so it could be used if the driver was taken and > integrated into a fully working system. > > I was asked to remove it in the other driver -- and I have done the same > here for now. I can always add it back later. > And > > > diff --git a/include/linux/mfd/da9062/registers.h > > b/include/linux/mfd/da9062/registers.h > > > new file mode 100644 > > > index 0000000..d07c2bc > > > --- /dev/null > > > +++ b/include/linux/mfd/da9062/registers.h > > [...] > > > > +/* > > > + * Registers > > > + */ > > > > Really? ;) > > > > > +#define DA9062AA_PAGE_CON 0x000 > > > +#define DA9062AA_STATUS_A 0x001 > > > +#define DA9062AA_STATUS_B 0x002 > > [...] > > > > + > > > +/* > > > + * Bit fields > > > + */ > > > + > > > +/* DA9062AA_PAGE_CON = 0x000 */ > > > +#define DA9062AA_PAGE_SHIFT 0 > > > +#define DA9062AA_PAGE_MASK (0x3f << 0) > > > +#define DA9062AA_WRITE_MODE_SHIFT 6 > > > +#define DA9062AA_WRITE_MODE_MASK (0x01 << 6) > > > > For 1 << X, you should use BIT(X). > > > > For the two comments above "Registers" and "Bit fields" and the (1< definitions ... > > The whole of this file is automatically generated by our hardware designers > I would prefer it if the register definitions and bit fields are not altered using > the #define BIT(nr) (1UL<<(nr)) macro and the comments removed because > we have scripts that can be used to check this file automatically. > > Also if the register map is ever updated, then it will be easier for me to diff > the new delivered register and bit field definitions with the old one. > > My preference would be not to change this header file. > > [...] If these last two things are a problem can you please let me know. regards, Steve {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail1.bemta3.messagelabs.com (mail1.bemta3.messagelabs.com. [195.245.230.166]) by gmr-mx.google.com with ESMTPS id p9si393885wiz.3.2015.06.11.01.28.32 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jun 2015 01:28:32 -0700 (PDT) From: "Opensource [Steve Twiss]" To: 'Lee Jones' CC: LINUXKERNEL , Samuel Ortiz , Alessandro Zummo , DEVICETREE , David Dajun Chen , Dmitry Torokhov , Ian Campbell , Kumar Gala , LINUXINPUT , LINUXWATCHDOG , Liam Girdwood , "Mark Brown" , Mark Rutland , Pawel Moll , RTCLINUX , Rob Herring , Support Opensource , Wim Van Sebroeck Subject: [rtc-linux] RE: [PATCH V3 1/4] mfd: da9062: DA9062 MFD core driver Date: Thu, 11 Jun 2015 08:27:57 +0000 Message-ID: <6ED8E3B22081A4459DAC7699F3695FB7014B22F4C4@SW-EX-MBX02.diasemi.com> References: <20150526161024.GQ11677@x1> Content-Type: text/plain; charset=UTF-8 MIME-Version: 1.0 Reply-To: rtc-linux@googlegroups.com List-ID: List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , On 28 May 2015 13:53, Steve Twiss wrote: > To: 'Lee Jones' > Subject: RE: [PATCH V3 1/4] mfd: da9062: DA9062 MFD core driver > > Hi Lee, > > I will refactor a lot of the driver and implement your changes as requested. Hi Lee, I realise this is a busy kernel time for you, as ever, so this is just to see if I am missing anything with the reply I sent about the requested alterations a couple of weeks ago. It relates to the addition of support for the Dialog DA9062 Power Management IC - https://lkml.org/lkml/2015/5/28/358 The main changes requested (for the core MFD) can be found in here: - https://lkml.org/lkml/2015/5/28/359 I believe that the only two major differences with your previous comments were those relating to the interrupt handler da9062_vdd_warn_event() -- which has been erased, and the header file -- which I would prefer the to remain [mostly] untouched if possible. The reasons for these two differences are described below: > > > + /* VDD WARN event support */ > > > + irq_vdd_warn = regmap_irq_get_virq(chip->regmap_irq, > > > + DA9062_IRQ_VDD_WARN); > > > + if (irq_vdd_warn < 0) { > > > + dev_err(chip->dev, "Failed to get IRQ.\n"); > > > + return irq_vdd_warn; > > > + } > > > + chip->irq_vdd_warn = irq_vdd_warn; > > > + > > > + ret = devm_request_threaded_irq(chip->dev, irq_vdd_warn, > > > + NULL, da9062_vdd_warn_event, > > > + IRQF_TRIGGER_LOW | IRQF_ONESHOT, > > > + "VDD_WARN", chip); > > > + if (ret) { > > > + dev_warn(chip->dev, > > > + "Failed to request VDD_WARN IRQ.\n"); > > > + chip->irq_vdd_warn = -ENXIO; > > > + } > > > > This looks like a lot of code, which doesn't really do anything. What > > is a VDD warning indicator anyway? > > > > I will remove this. > > The IRQ handler da9062_vdd_warn_event() -- see earlier above -- does > not currently do anything apart from handle the IRQ that was requested > here. It prints a statement to say the main PMIC voltage supply dropped > below a defined trigger point, but doesn't actually do anything to mitigate > this problem. > > Previously this VDD_WARN was in the regulator driver, however it should > be made available even if the regulator driver is not installed -- so I added it > to the core instead. > > In a previous driver submission I had a similar problem, a warning IRQ was > just printing to the console to say there was an error -- the handler and > IRQ code was put in by me so it could be used if the driver was taken and > integrated into a fully working system. > > I was asked to remove it in the other driver -- and I have done the same > here for now. I can always add it back later. > And > > > diff --git a/include/linux/mfd/da9062/registers.h > > b/include/linux/mfd/da9062/registers.h > > > new file mode 100644 > > > index 0000000..d07c2bc > > > --- /dev/null > > > +++ b/include/linux/mfd/da9062/registers.h > > [...] > > > > +/* > > > + * Registers > > > + */ > > > > Really? ;) > > > > > +#define DA9062AA_PAGE_CON 0x000 > > > +#define DA9062AA_STATUS_A 0x001 > > > +#define DA9062AA_STATUS_B 0x002 > > [...] > > > > + > > > +/* > > > + * Bit fields > > > + */ > > > + > > > +/* DA9062AA_PAGE_CON = 0x000 */ > > > +#define DA9062AA_PAGE_SHIFT 0 > > > +#define DA9062AA_PAGE_MASK (0x3f << 0) > > > +#define DA9062AA_WRITE_MODE_SHIFT 6 > > > +#define DA9062AA_WRITE_MODE_MASK (0x01 << 6) > > > > For 1 << X, you should use BIT(X). > > > > For the two comments above "Registers" and "Bit fields" and the (1< definitions ... > > The whole of this file is automatically generated by our hardware designers > I would prefer it if the register definitions and bit fields are not altered using > the #define BIT(nr) (1UL<<(nr)) macro and the comments removed because > we have scripts that can be used to check this file automatically. > > Also if the register map is ever updated, then it will be easier for me to diff > the new delivered register and bit field definitions with the old one. > > My preference would be not to change this header file. > > [...] If these last two things are a problem can you please let me know. regards, Steve -- -- You received this message because you are subscribed to "rtc-linux". Membership options at http://groups.google.com/group/rtc-linux . Please read http://groups.google.com/group/rtc-linux/web/checklist before submitting a driver. --- You received this message because you are subscribed to the Google Groups "rtc-linux" group. To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/d/optout. From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Opensource [Steve Twiss]" Subject: RE: [PATCH V3 1/4] mfd: da9062: DA9062 MFD core driver Date: Thu, 11 Jun 2015 08:27:57 +0000 Message-ID: <6ED8E3B22081A4459DAC7699F3695FB7014B22F4C4@SW-EX-MBX02.diasemi.com> References: <20150526161024.GQ11677@x1> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Language: en-US Sender: linux-input-owner@vger.kernel.org To: 'Lee Jones' Cc: LINUXKERNEL , Samuel Ortiz , Alessandro Zummo , DEVICETREE , David Dajun Chen , Dmitry Torokhov , Ian Campbell , Kumar Gala , LINUXINPUT , LINUXWATCHDOG , Liam Girdwood , Mark Brown , Mark Rutland , Pawel Moll , RTCLINUX , Rob Herring , Support Opensource , Wim Van Sebroeck List-Id: devicetree@vger.kernel.org T24gMjggTWF5IDIwMTUgMTM6NTMsIFN0ZXZlIFR3aXNzIHdyb3RlOg0KDQo+IFRvOiAnTGVlIEpv bmVzJw0KPiBTdWJqZWN0OiBSRTogW1BBVENIIFYzIDEvNF0gbWZkOiBkYTkwNjI6IERBOTA2MiBN RkQgY29yZSBkcml2ZXINCj4gDQo+IEhpIExlZSwNCj4gDQo+IEkgd2lsbCByZWZhY3RvciBhIGxv dCBvZiB0aGUgZHJpdmVyIGFuZCBpbXBsZW1lbnQgeW91ciBjaGFuZ2VzIGFzIHJlcXVlc3RlZC4N Cg0KSGkgTGVlLA0KDQpJIHJlYWxpc2UgdGhpcyBpcyBhIGJ1c3kga2VybmVsIHRpbWUgZm9yIHlv dSwgYXMgZXZlciwgc28gdGhpcyBpcyBqdXN0IHRvIHNlZSBpZiBJIGFtDQptaXNzaW5nIGFueXRo aW5nIHdpdGggdGhlIHJlcGx5IEkgc2VudCBhYm91dCB0aGUgcmVxdWVzdGVkIGFsdGVyYXRpb25z IGEgY291cGxlDQpvZiB3ZWVrcyBhZ28uIA0KDQpJdCByZWxhdGVzIHRvIHRoZSBhZGRpdGlvbiBv ZiBzdXBwb3J0IGZvciB0aGUgRGlhbG9nIERBOTA2MiBQb3dlciBNYW5hZ2VtZW50IElDDQogLSBo dHRwczovL2xrbWwub3JnL2xrbWwvMjAxNS81LzI4LzM1OA0KDQpUaGUgbWFpbiBjaGFuZ2VzIHJl cXVlc3RlZCAoZm9yIHRoZSBjb3JlIE1GRCkgY2FuIGJlIGZvdW5kIGluIGhlcmU6DQogLSBodHRw czovL2xrbWwub3JnL2xrbWwvMjAxNS81LzI4LzM1OQ0KDQpJIGJlbGlldmUgdGhhdCB0aGUgb25s eSB0d28gbWFqb3IgZGlmZmVyZW5jZXMgd2l0aCB5b3VyIHByZXZpb3VzIGNvbW1lbnRzIHdlcmUg DQp0aG9zZSByZWxhdGluZyB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZGE5MDYyX3ZkZF93YXJu X2V2ZW50KCkgLS0gd2hpY2ggDQpoYXMgYmVlbiBlcmFzZWQsICBhbmQgdGhlIGhlYWRlciBmaWxl IC0tIHdoaWNoIEkgd291bGQgcHJlZmVyIHRoZSB0byByZW1haW4NClttb3N0bHldIHVudG91Y2hl ZCBpZiBwb3NzaWJsZS4NCg0KVGhlIHJlYXNvbnMgZm9yIHRoZXNlIHR3byBkaWZmZXJlbmNlcyBh cmUgZGVzY3JpYmVkIGJlbG93Og0KDQo+ID4gPiArCS8qIFZERCBXQVJOIGV2ZW50IHN1cHBvcnQg Ki8NCj4gPiA+ICsJaXJxX3ZkZF93YXJuID0gcmVnbWFwX2lycV9nZXRfdmlycShjaGlwLT5yZWdt YXBfaXJxLA0KPiA+ID4gKwkJCQkJICAgREE5MDYyX0lSUV9WRERfV0FSTik7DQo+ID4gPiArCWlm IChpcnFfdmRkX3dhcm4gPCAwKSB7DQo+ID4gPiArCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxl ZCB0byBnZXQgSVJRLlxuIik7DQo+ID4gPiArCQlyZXR1cm4gaXJxX3ZkZF93YXJuOw0KPiA+ID4g Kwl9DQo+ID4gPiArCWNoaXAtPmlycV92ZGRfd2FybiA9IGlycV92ZGRfd2FybjsNCj4gPiA+ICsN Cj4gPiA+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShjaGlwLT5kZXYsIGlycV92 ZGRfd2FybiwNCj4gPiA+ICsJCQkJCU5VTEwsIGRhOTA2Ml92ZGRfd2Fybl9ldmVudCwNCj4gPiA+ ICsJCQkJCUlSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsDQo+ID4gPiArCQkJCQkiVkRE X1dBUk4iLCBjaGlwKTsNCj4gPiA+ICsJaWYgKHJldCkgew0KPiA+ID4gKwkJZGV2X3dhcm4oY2hp cC0+ZGV2LA0KPiA+ID4gKwkJCSAiRmFpbGVkIHRvIHJlcXVlc3QgVkREX1dBUk4gSVJRLlxuIik7 DQo+ID4gPiArCQljaGlwLT5pcnFfdmRkX3dhcm4gPSAtRU5YSU87DQo+ID4gPiArCX0NCj4gPg0K PiA+IFRoaXMgbG9va3MgbGlrZSBhIGxvdCBvZiBjb2RlLCB3aGljaCBkb2Vzbid0IHJlYWxseSBk byBhbnl0aGluZy4gIFdoYXQNCj4gPiBpcyBhIFZERCB3YXJuaW5nIGluZGljYXRvciBhbnl3YXk/ DQo+ID4NCj4gDQo+IEkgd2lsbCByZW1vdmUgdGhpcy4NCj4gDQo+IFRoZSBJUlEgaGFuZGxlciBk YTkwNjJfdmRkX3dhcm5fZXZlbnQoKSAtLSBzZWUgZWFybGllciBhYm92ZSAtLSBkb2VzDQo+IG5v dCBjdXJyZW50bHkgZG8gYW55dGhpbmcgYXBhcnQgZnJvbSBoYW5kbGUgdGhlIElSUSB0aGF0IHdh cyByZXF1ZXN0ZWQNCj4gaGVyZS4gSXQgcHJpbnRzIGEgc3RhdGVtZW50IHRvIHNheSB0aGUgbWFp biBQTUlDIHZvbHRhZ2Ugc3VwcGx5IGRyb3BwZWQNCj4gYmVsb3cgYSBkZWZpbmVkIHRyaWdnZXIg cG9pbnQsIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIHRvIG1pdGlnYXRlDQo+IHRo aXMgcHJvYmxlbS4NCj4gDQo+IFByZXZpb3VzbHkgdGhpcyBWRERfV0FSTiB3YXMgaW4gdGhlIHJl Z3VsYXRvciBkcml2ZXIsIGhvd2V2ZXIgaXQgc2hvdWxkDQo+IGJlIG1hZGUgYXZhaWxhYmxlIGV2 ZW4gaWYgdGhlIHJlZ3VsYXRvciBkcml2ZXIgaXMgbm90IGluc3RhbGxlZCAtLSBzbyBJIGFkZGVk IGl0DQo+IHRvIHRoZSBjb3JlIGluc3RlYWQuDQo+IA0KPiBJbiBhIHByZXZpb3VzIGRyaXZlciBz dWJtaXNzaW9uIEkgaGFkIGEgc2ltaWxhciBwcm9ibGVtLCBhIHdhcm5pbmcgSVJRIHdhcw0KPiBq dXN0IHByaW50aW5nIHRvIHRoZSBjb25zb2xlIHRvIHNheSB0aGVyZSB3YXMgYW4gZXJyb3IgLS0g dGhlIGhhbmRsZXIgYW5kDQo+IElSUSBjb2RlIHdhcyBwdXQgaW4gYnkgbWUgc28gaXQgY291bGQg YmUgdXNlZCBpZiB0aGUgZHJpdmVyIHdhcyB0YWtlbiBhbmQNCj4gaW50ZWdyYXRlZCBpbnRvIGEg ZnVsbHkgd29ya2luZyBzeXN0ZW0uDQo+IA0KPiBJIHdhcyBhc2tlZCB0byByZW1vdmUgaXQgaW4g dGhlIG90aGVyIGRyaXZlciAtLSBhbmQgSSBoYXZlIGRvbmUgdGhlIHNhbWUNCj4gaGVyZSBmb3Ig bm93LiBJIGNhbiBhbHdheXMgYWRkIGl0IGJhY2sgbGF0ZXIuDQo+IA0KDQpBbmQNCg0KPiA+ID4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2RhOTA2Mi9yZWdpc3RlcnMuaA0KPiA+IGIv aW5jbHVkZS9saW51eC9tZmQvZGE5MDYyL3JlZ2lzdGVycy5oDQo+ID4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMC4uZDA3YzJiYw0KPiA+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ID4gKysrIGIvaW5jbHVkZS9saW51eC9tZmQvZGE5MDYyL3JlZ2lzdGVycy5oDQo+IA0K PiBbLi4uXQ0KPiANCj4gPiA+ICsvKg0KPiA+ID4gKyAqIFJlZ2lzdGVycw0KPiA+ID4gKyAqLw0K PiA+DQo+ID4gUmVhbGx5PyA7KQ0KPiA+DQo+ID4gPiArI2RlZmluZSBEQTkwNjJBQV9QQUdFX0NP TgkJMHgwMDANCj4gPiA+ICsjZGVmaW5lIERBOTA2MkFBX1NUQVRVU19BCQkweDAwMQ0KPiA+ID4g KyNkZWZpbmUgREE5MDYyQUFfU1RBVFVTX0IJCTB4MDAyDQo+IA0KPiBbLi4uXQ0KPiANCj4gPiA+ ICsNCj4gPiA+ICsvKg0KPiA+ID4gKyAqIEJpdCBmaWVsZHMNCj4gPiA+ICsgKi8NCj4gPiA+ICsN Cj4gPiA+ICsvKiBEQTkwNjJBQV9QQUdFX0NPTiA9IDB4MDAwICovDQo+ID4gPiArI2RlZmluZSBE QTkwNjJBQV9QQUdFX1NISUZUCQkwDQo+ID4gPiArI2RlZmluZSBEQTkwNjJBQV9QQUdFX01BU0sJ CSgweDNmIDw8IDApDQo+ID4gPiArI2RlZmluZSBEQTkwNjJBQV9XUklURV9NT0RFX1NISUZUCTYN Cj4gPiA+ICsjZGVmaW5lIERBOTA2MkFBX1dSSVRFX01PREVfTUFTSwkoMHgwMSA8PCA2KQ0KPiA+ DQo+ID4gRm9yIDEgPDwgWCwgeW91IHNob3VsZCB1c2UgQklUKFgpLg0KPiA+DQo+IA0KPiBGb3Ig dGhlIHR3byBjb21tZW50cyBhYm92ZSAiUmVnaXN0ZXJzIiBhbmQgIkJpdCBmaWVsZHMiIGFuZCB0 aGUgKDE8PHgpDQo+IGRlZmluaXRpb25zIC4uLg0KPiANCj4gVGhlIHdob2xlIG9mIHRoaXMgZmls ZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBvdXIgaGFyZHdhcmUgZGVzaWduZXJzDQo+ IEkgd291bGQgcHJlZmVyIGl0IGlmIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgYml0IGZp ZWxkcyBhcmUgbm90IGFsdGVyZWQgdXNpbmcNCj4gdGhlICNkZWZpbmUgQklUKG5yKSAoMVVMPDwo bnIpKSBtYWNybyBhbmQgdGhlIGNvbW1lbnRzIHJlbW92ZWQgYmVjYXVzZQ0KPiB3ZSBoYXZlIHNj cmlwdHMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayB0aGlzIGZpbGUgYXV0b21hdGljYWxseS4N Cj4gDQo+IEFsc28gaWYgdGhlIHJlZ2lzdGVyIG1hcCBpcyBldmVyIHVwZGF0ZWQsIHRoZW4gaXQg d2lsbCBiZSBlYXNpZXIgZm9yIG1lIHRvIGRpZmYNCj4gdGhlIG5ldyBkZWxpdmVyZWQgcmVnaXN0 ZXIgYW5kIGJpdCBmaWVsZCBkZWZpbml0aW9ucyB3aXRoIHRoZSBvbGQgb25lLg0KPiANCj4gTXkg cHJlZmVyZW5jZSB3b3VsZCBiZSBub3QgdG8gY2hhbmdlIHRoaXMgaGVhZGVyIGZpbGUuDQo+IA0K PiBbLi4uXQ0KIA0KSWYgdGhlc2UgbGFzdCB0d28gdGhpbmdzIGFyZSBhIHByb2JsZW0gY2FuIHlv dSBwbGVhc2UgbGV0IG1lIGtub3cuDQoNCnJlZ2FyZHMsDQpTdGV2ZQ0K