video: imxfb: Fix retrieve values from DT
Subsystems (3)
PATCH 1/2 video: imxfb: Fix retrieve values from DT
Display settings should be retrieved from "display" node, not from root fb node. This patch fix this bug.
--- drivers/video/imxfb.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-)
drivers/video/imxfb.c +14 -12
@@ -753,12 +753,12 @@ static int imxfb_resume(struct platform_device *dev)#define imxfb_resume NULL#endif -static int imxfb_init_fbinfo (struct platform_device *pdev) +static int imxfb_init_fbinfo (struct platform_device *pdev, +struct device_node *np) {struct imx_fb_platform_data *pdata = pdev->dev.platform_data;struct fb_info *info =dev_get_drvdata (&pdev->dev);struct imxfb_info *fbi = info->par; -struct device_node *np;pr_debug ("%s\n" ,__func__);
@@ -799,7 +799,6 @@ static int imxfb_init_fbinfo(struct platform_device *pdev) fbi->lcd_power = pdata->lcd_power; fbi->backlight_power = pdata->backlight_power; }else { - np = pdev->dev.of_node; info->var.grayscale =of_property_read_bool (np,"cmap-greyscale" ); fbi->cmap_inverse =of_property_read_bool (np,"cmap-inverse" );
@@ -858,6 +857,7 @@ static int imxfb_of_read_mode(struct device *dev, struct device_node *np,static int imxfb_probe (struct platform_device *pdev) { +struct device_node *display_np =NULL ;struct imxfb_info *fbi;struct fb_info *info;struct imx_fb_platform_data *pdata;
@@ -887,7 +887,17 @@ static int imxfb_probe(struct platform_device *pdev)platform_set_drvdata (pdev, info); - ret =imxfb_init_fbinfo (pdev); +if (pdev->dev.of_node) { + display_np =of_parse_phandle (pdev->dev.of_node,"display" ,0 ); +if (!display_np) { +dev_err (&pdev->dev, +"No display defined in devicetree\n" ); + ret = -EINVAL ; + goto failed_init; + } + } + + ret =imxfb_init_fbinfo (pdev, display_np);if (ret <0 ) goto failed_init;
@@ -898,16 +908,8 @@ static int imxfb_probe(struct platform_device *pdev) fbi->mode = pdata->mode; fbi->num_modes = pdata->num_modes; }else { -struct device_node *display_np; fb_mode =NULL ; - display_np =of_parse_phandle (pdev->dev.of_node,"display" ,0 ); -if (!display_np) { -dev_err (&pdev->dev,"No display defined in devicetree\n" ); - ret = -EINVAL ; - goto failed_of_parse; - } -/* * imxfb does not support more modes, we choose only the native * mode.
Signature · 1 line
1.8.1.5
PATCH 2/2 video: imxfb: Add feature to setup PWM Contrast Control Register
This patch adds feature to setup PWM Contrast Control Register. This register is used to control the signal output at the contrast pin, which controls contrast of the LCD panel.
--- Documentation/devicetree/bindings/video/fsl,imx-fb.txt | 1 + drivers/video/imxfb.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/video/fsl,imx-fb.txt +1 -0
@@ -18,6 +18,7 @@ Optional properties: - fsl,dmacr: DMA Control Register value. This is optional. By default, the register is not modified as recommended by the datasheet. - fsl,lscr1: LCDC Sharp Configuration Register value. +- fsl,pwmr: LCDC PWM Contrast Control Register value. Example:
drivers/video/imxfb.c +1 -1
@@ -806,8 +806,8 @@ static int imxfb_init_fbinfo(struct platform_device *pdev, fbi->lscr1 =IMXFB_LSCR1_DEFAULT ;of_property_read_u32 (np,"fsl,lscr1" , &fbi->lscr1); -of_property_read_u32 (np,"fsl,dmacr" , &fbi->dmacr); +of_property_read_u32 (np,"fsl,pwmr" , &fbi->pwmr);/* These two function pointers could be used by some specific * platforms. */
Signature · 1 line
1.8.1.5
PATCH 2/2 video: imxfb: Add feature to setup PWM Contrast Control Register
Hi,
Quoted 3 lines · Alexander Shiyan
This patch adds feature to setup PWM Contrast Control Register. This register is used to control the signal output at the contrast pin, which controls contrast of the LCD panel.
http://www.spinics.net/lists/linux-fbdev/msg10002.html
Regards,
Markus
Quoted 37 lines
Signed-off-by Alexander Shiyan <[email protected]>--- Documentation/devicetree/bindings/video/fsl,imx-fb.txt | 1 + drivers/video/imxfb.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-)Documentation/devicetree/bindings/video/fsl,imx-fb.txt +1
-0@@ -18,6 +18,7 @@ Optional properties: - fsl,dmacr: DMA Control Register value. This is optional. By default, the register is not modified as recommended by the datasheet. - fsl,lscr1: LCDC Sharp Configuration Register value. +- fsl,pwmr: LCDC PWM Contrast Control Register value. Example:drivers/video/imxfb.c +1
-1@@ -806,8 +806,8 @@ static int imxfb_init_fbinfo(struct platform_device *pdev, fbi->lscr1 =IMXFB_LSCR1_DEFAULT ;of_property_read_u32 (np,"fsl,lscr1" , &fbi->lscr1); -of_property_read_u32 (np,"fsl,dmacr" , &fbi->dmacr); +of_property_read_u32 (np,"fsl,pwmr" , &fbi->pwmr);/* These two function pointers could be used by some specific * platforms. */ Signature · 1 line
1.8.1.5
Signature · 4 lines
Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
PATCH 2/2 video: imxfb: Add feature to setup PWM Contrast Control Register
Quoted 8 lines · On Thu, 25 Jul 2013 15:38:56 +0200 Markus Pargmann <[email protected]> wrote:
Hi,
Quoted 3 lines · Alexander Shiyan
This patch adds feature to setup PWM Contrast Control Register. This register is used to control the signal output at the contrast pin, which controls contrast of the LCD panel.
PWM? I can not understand how the PWM driver will be connected to the framebuffer driver. It is not backlight, this is contrast.
Even if we imagine that the driver will be connected through phandle, then we will need to have at least 4! additional parameters in the framebuffer
driver: freq source, frequency and active pulse period + phandle to PWM. Is it worth it, given that these parameters should not be adjustable? On my opinion, the only one additional parameter in framebuffer is enough. Thanks.
[...]
Quoted 32 lines
Quoted 32 lines
--- Documentation/devicetree/bindings/video/fsl,imx-fb.txt | 1 + drivers/video/imxfb.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-)Documentation/devicetree/bindings/video/fsl,imx-fb.txt +1
-0@@ -18,6 +18,7 @@ Optional properties: - fsl,dmacr: DMA Control Register value. This is optional. By default, the register is not modified as recommended by the datasheet. - fsl,lscr1: LCDC Sharp Configuration Register value. +- fsl,pwmr: LCDC PWM Contrast Control Register value. Example:drivers/video/imxfb.c +1
-1@@ -806,8 +806,8 @@ static int imxfb_init_fbinfo(struct platform_device *pdev, fbi->lscr1 =IMXFB_LSCR1_DEFAULT ;of_property_read_u32 (np,"fsl,lscr1" , &fbi->lscr1); -of_property_read_u32 (np,"fsl,dmacr" , &fbi->dmacr); +of_property_read_u32 (np,"fsl,pwmr" , &fbi->pwmr);/* These two function pointers could be used by some specific * platforms. */
Signature · 1 line
Alexander Shiyan <[email protected]>
Sascha Hauer
maintainerPATCH 2/2 video: imxfb: Add feature to setup PWM Contrast Control Register
Quoted 12 lines · Alexander Shiyan
Quoted 8 lines · On Thu, 25 Jul 2013 15:38:56 +0200 Markus Pargmann <[email protected]> wrote:
Hi,
Quoted 3 lines · Alexander Shiyan
This patch adds feature to setup PWM Contrast Control Register. This register is used to control the signal output at the contrast pin, which controls contrast of the LCD panel.
Quoted 8 lines
PWM? I can not understand how the PWM driver will be connected to the framebuffer driver. It is not backlight, this is contrast.
Even if we imagine that the driver will be connected through phandle, then we will need to have at least 4! additional parameters in the framebuffer
driver: freq source, frequency and active pulse period + phandle to PWM. Is it worth it, given that these parameters should not be adjustable? On my opinion, the only one additional parameter in framebuffer is enough. Thanks.
Why should the contrast of a display not be adjustable?
Sascha
Signature · 4 lines
Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Re: [PATCH 2/2] video: imxfb: Add feature to setup PWM Contrast Control Register
Quoted 22 lines · Alexander Shiyan
Quoted 12 lines
Quoted 8 lines · On Thu, 25 Jul 2013 15:38:56 +0200 Markus Pargmann <[email protected]> wrote:
Hi,
Quoted 3 lines · Alexander Shiyan
This patch adds feature to setup PWM Contrast Control Register. This register is used to control the signal output at the contrast pin, which controls contrast of the LCD panel.
Quoted 8 lines
PWM? I can not understand how the PWM driver will be connected to the framebuffer driver. It is not backlight, this is contrast.
Even if we imagine that the driver will be connected through phandle, then we will need to have at least 4! additional parameters in the framebuffer
driver: freq source, frequency and active pulse period + phandle to PWM. Is it worth it, given that these parameters should not be adjustable? On my opinion, the only one additional parameter in framebuffer is enough. Thanks.
Quoted 1 line
Why should the contrast of a display not be adjustable?
I still can not understand the interface through which it can be changed. Same as how the default settings can be passed to the framebuffer driver.
---
Re: [PATCH 2/2] video: clps711x: Fix sparse warnings
VHVlLCAxIEp1bCAyMDE0IDA5OjE0OjAyICswMzAwINC+0YIgVG9taSBWYWxrZWluZW4gPHRvbWku dmFsa2VpbmVuQHRpLmNvbT46Cj4gT24gMjgvMDYvMTQgMDk6MzQsIEFsZXhhbmRlciBTaGl5YW4g d3JvdGU6Cj4gPiBUaGlzIHBhdGNoIGZpeGVzIGJlbG93IHdhcm5pbmdzOgo+ID4gQ0hFQ0sgICBk cml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4LWZiLmMKPiA+ICAgZHJpdmVycy92aWRlby9mYmRl di9jbHBzNzExeC1mYi5jOjI0NzoyNDogd2FybmluZzogaW5jb3JyZWN0IHR5cGUgaW4gYXJndW1l bnQgMSAoZGlmZmVyZW50IGFkZHJlc3Mgc3BhY2VzKQo+ID4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2 L2NscHM3MTF4LWZiLmM6MjQ3OjI0OiAgICBleHBlY3RlZCB2b2lkIGNvbnN0ICpwdHIKPiA+ICAg ZHJpdmVycy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5jOjI0NzoyNDogICAgZ290IGNoYXIgW25v ZGVyZWZdIDxhc246Mj4qc2NyZWVuX2Jhc2UKPiA+ICAgZHJpdmVycy92aWRlby9mYmRldi9jbHBz NzExeC1mYi5jOjI0ODozNTogd2FybmluZzogaW5jb3JyZWN0IHR5cGUgaW4gYXJndW1lbnQgMSAo ZGlmZmVyZW50IGFkZHJlc3Mgc3BhY2VzKQo+ID4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3 MTF4LWZiLmM6MjQ4OjM1OiAgICBleHBlY3RlZCB2b2lkIGNvbnN0ICpwdHIKPiA+ICAgZHJpdmVy cy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5jOjI0ODozNTogICAgZ290IGNoYXIgW25vZGVyZWZd IDxhc246Mj4qc2NyZWVuX2Jhc2UKLi4uCj4gPiAgCWluZm8tPnNjcmVlbl9iYXNlID0gZGV2bV9p b3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKPiA+IC0JaWYgKElTX0VSUihpbmZvLT5zY3JlZW5f YmFzZSkpIHsKPiA+IC0JCXJldCA9IFBUUl9FUlIoaW5mby0+c2NyZWVuX2Jhc2UpOwo+ID4gKwlp ZiAoSVNfRVJSKChfX2ZvcmNlIHZvaWQgKilpbmZvLT5zY3JlZW5fYmFzZSkpIHsKPiA+ICsJCXJl dCA9IFBUUl9FUlIoKF9fZm9yY2Ugdm9pZCAqKWluZm8tPnNjcmVlbl9iYXNlKTsKPiAKPiBJIGRv bid0IHNlZSBhbnkgb3RoZXIgdXNlciBvZiBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoKSBoYXZpbmcg dGhhdCBraW5kCj4gb2YgY2FzdHMuIFdoeSBhcmUgdGhleSBuZWVkZWQgaGVyZT8KCk5vdCBuZWVk ZWQsIHR5cGUgY2FzdCB3YXMgZG9uZSBvbmx5IHRvIHJlbW92ZSBzcGFyc2Ugd2FybmluZ3MuCgot LS0KCg=
Re: [PATCH 2/2] video: clps711x: Fix sparse warnings
In reply to Alexander ShiyanVHVlLCAxIEp1bCAyMDE0IDEzOjIyOjUxICswMzAwINC+0YIgVG9taSBWYWxrZWluZW4gPHRvbWku dmFsa2VpbmVuQHRpLmNvbT46Cj4gT24gMDEvMDcvMTQgMDk6MjMsIEFsZXhhbmRlciBTaGl5YW4g d3JvdGU6Cj4gPiBUdWUsIDEgSnVsIDIwMTQgMDk6MTQ6MDIgKzAzMDAg0L7RgiBUb21pIFZhbGtl aW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPjoKPiA+PiBPbiAyOC8wNi8xNCAwOTozNCwgQWxl eGFuZGVyIFNoaXlhbiB3cm90ZToKPiA+Pj4gVGhpcyBwYXRjaCBmaXhlcyBiZWxvdyB3YXJuaW5n czoKPiA+Pj4gQ0hFQ0sgICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4LWZiLmMKPiA+Pj4g ICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4LWZiLmM6MjQ3OjI0OiB3YXJuaW5nOiBpbmNv cnJlY3QgdHlwZSBpbiBhcmd1bWVudCAxIChkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZXMpCj4gPj4+ ICAgZHJpdmVycy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5jOjI0NzoyNDogICAgZXhwZWN0ZWQg dm9pZCBjb25zdCAqcHRyCj4gPj4+ICAgZHJpdmVycy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5j OjI0NzoyNDogICAgZ290IGNoYXIgW25vZGVyZWZdIDxhc246Mj4qc2NyZWVuX2Jhc2UKPiA+Pj4g ICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4LWZiLmM6MjQ4OjM1OiB3YXJuaW5nOiBpbmNv cnJlY3QgdHlwZSBpbiBhcmd1bWVudCAxIChkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZXMpCj4gPj4+ ICAgZHJpdmVycy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5jOjI0ODozNTogICAgZXhwZWN0ZWQg dm9pZCBjb25zdCAqcHRyCj4gPj4+ICAgZHJpdmVycy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5j OjI0ODozNTogICAgZ290IGNoYXIgW25vZGVyZWZdIDxhc246Mj4qc2NyZWVuX2Jhc2UKPiA+IC4u Lgo+ID4+PiAgCWluZm8tPnNjcmVlbl9iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg cmVzKTsKPiA+Pj4gLQlpZiAoSVNfRVJSKGluZm8tPnNjcmVlbl9iYXNlKSkgewo+ID4+PiAtCQly ZXQgPSBQVFJfRVJSKGluZm8tPnNjcmVlbl9iYXNlKTsKPiA+Pj4gKwlpZiAoSVNfRVJSKChfX2Zv cmNlIHZvaWQgKilpbmZvLT5zY3JlZW5fYmFzZSkpIHsKPiA+Pj4gKwkJcmV0ID0gUFRSX0VSUigo X19mb3JjZSB2b2lkICopaW5mby0+c2NyZWVuX2Jhc2UpOwo+ID4+Cj4gPj4gSSBkb24ndCBzZWUg YW55IG90aGVyIHVzZXIgb2YgZGV2bV9pb3JlbWFwX3Jlc291cmNlKCkgaGF2aW5nIHRoYXQga2lu ZAo+ID4+IG9mIGNhc3RzLiBXaHkgYXJlIHRoZXkgbmVlZGVkIGhlcmU/Cj4gPiAKPiA+IE5vdCBu ZWVkZWQsIHR5cGUgY2FzdCB3YXMgZG9uZSBvbmx5IHRvIHJlbW92ZSBzcGFyc2Ugd2FybmluZ3Mu Cj4gCj4gUmlnaHQsIGJ1dCBJIHRoaW5rIGVpdGhlciBzcGFyc2UgaXMgd3JvbmcgaGVyZSwgb3Ig dGhlIFBUUl9FUlIvSVNfRVJSCj4gYXJlIHdyb25nLiBZb3Ugc2hvdWxkbid0IGRvIHR5cGVjYXN0 cyBsaWtlIHRoYXQgdG8gaGlkZSB0aG9zZSB3YXJuaW5ncy4KCldlbGwsIEknbGwgcmVtb3ZlIHRo ZXNlIGNoYW5nZXMgYW5kIHNlbmQgYSBzZWNvbmQgdmVyc2lvbiBvZiB0aGUgcGF0Y2guCgotLS0K Cg=
Re: [PATCH 2/2] video: clps711x: Fix sparse warnings
In reply to Alexander ShiyanRnJpLCA0IEp1bCAyMDE0IDExOjA2OjMxICswMzAwINC+0YIgVG9taSBWYWxrZWluZW4gPHRvbWku dmFsa2VpbmVuQHRpLmNvbT46Cj4gT24gMDEvMDcvMTQgMTM6MzEsIEFsZXhhbmRlciBTaGl5YW4g d3JvdGU6Cj4gPiBUdWUsIDEgSnVsIDIwMTQgMTM6MjI6NTEgKzAzMDAg0L7RgiBUb21pIFZhbGtl aW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPjoKPiA+PiBPbiAwMS8wNy8xNCAwOToyMywgQWxl eGFuZGVyIFNoaXlhbiB3cm90ZToKPiA+Pj4gVHVlLCAxIEp1bCAyMDE0IDA5OjE0OjAyICswMzAw INC+0YIgVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT46Cj4gPj4+PiBPbiAy OC8wNi8xNCAwOTozNCwgQWxleGFuZGVyIFNoaXlhbiB3cm90ZToKPiA+Pj4+PiBUaGlzIHBhdGNo IGZpeGVzIGJlbG93IHdhcm5pbmdzOgo+ID4+Pj4+IENIRUNLICAgZHJpdmVycy92aWRlby9mYmRl di9jbHBzNzExeC1mYi5jCj4gPj4+Pj4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4LWZi LmM6MjQ3OjI0OiB3YXJuaW5nOiBpbmNvcnJlY3QgdHlwZSBpbiBhcmd1bWVudCAxIChkaWZmZXJl bnQgYWRkcmVzcyBzcGFjZXMpCj4gPj4+Pj4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4 LWZiLmM6MjQ3OjI0OiAgICBleHBlY3RlZCB2b2lkIGNvbnN0ICpwdHIKPiA+Pj4+PiAgIGRyaXZl cnMvdmlkZW8vZmJkZXYvY2xwczcxMXgtZmIuYzoyNDc6MjQ6ICAgIGdvdCBjaGFyIFtub2RlcmVm XSA8YXNuOjI+KnNjcmVlbl9iYXNlCj4gPj4+Pj4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3 MTF4LWZiLmM6MjQ4OjM1OiB3YXJuaW5nOiBpbmNvcnJlY3QgdHlwZSBpbiBhcmd1bWVudCAxIChk aWZmZXJlbnQgYWRkcmVzcyBzcGFjZXMpCj4gPj4+Pj4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2Ns cHM3MTF4LWZiLmM6MjQ4OjM1OiAgICBleHBlY3RlZCB2b2lkIGNvbnN0ICpwdHIKPiA+Pj4+PiAg IGRyaXZlcnMvdmlkZW8vZmJkZXYvY2xwczcxMXgtZmIuYzoyNDg6MzU6ICAgIGdvdCBjaGFyIFtu b2RlcmVmXSA8YXNuOjI+KnNjcmVlbl9iYXNlCj4gPj4+IC4uLgo+ID4+Pj4+ICAJaW5mby0+c2Ny ZWVuX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ID4+Pj4+IC0JaWYg KElTX0VSUihpbmZvLT5zY3JlZW5fYmFzZSkpIHsKPiA+Pj4+PiAtCQlyZXQgPSBQVFJfRVJSKGlu Zm8tPnNjcmVlbl9iYXNlKTsKPiA+Pj4+PiArCWlmIChJU19FUlIoKF9fZm9yY2Ugdm9pZCAqKWlu Zm8tPnNjcmVlbl9iYXNlKSkgewo+ID4+Pj4+ICsJCXJldCA9IFBUUl9FUlIoKF9fZm9yY2Ugdm9p ZCAqKWluZm8tPnNjcmVlbl9iYXNlKTsKPiA+Pj4+Cj4gPj4+PiBJIGRvbid0IHNlZSBhbnkgb3Ro ZXIgdXNlciBvZiBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoKSBoYXZpbmcgdGhhdCBraW5kCj4gPj4+ PiBvZiBjYXN0cy4gV2h5IGFyZSB0aGV5IG5lZWRlZCBoZXJlPwo+ID4+Pgo+ID4+PiBOb3QgbmVl ZGVkLCB0eXBlIGNhc3Qgd2FzIGRvbmUgb25seSB0byByZW1vdmUgc3BhcnNlIHdhcm5pbmdzLgo+ ID4+Cj4gPj4gUmlnaHQsIGJ1dCBJIHRoaW5rIGVpdGhlciBzcGFyc2UgaXMgd3JvbmcgaGVyZSwg b3IgdGhlIFBUUl9FUlIvSVNfRVJSCj4gPj4gYXJlIHdyb25nLiBZb3Ugc2hvdWxkbid0IGRvIHR5 cGVjYXN0cyBsaWtlIHRoYXQgdG8gaGlkZSB0aG9zZSB3YXJuaW5ncy4KPiA+IAo+ID4gV2VsbCwg SSdsbCByZW1vdmUgdGhlc2UgY2hhbmdlcyBhbmQgc2VuZCBhIHNlY29uZCB2ZXJzaW9uIG9mIHRo ZSBwYXRjaC4KPiAKPiBJIGFwcGxpZWQgdGhlc2UgdHdvIHBhdGNoZXMsIGFuZCByZW1vdmVkIHRo ZSB0eXBlIGNhc3RzIGZyb20gdGhlIHNlY29uZCBvbmUuCgpPSywgVGhhbmtzIQoKLS0tCgo