diff for duplicates of <20140829105913.GI24579@lee--X1> diff --git a/a/1.txt b/N1/1.txt index 74cddd7..1ba0af4 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,228 +1,154 @@ -On Fri, 29 Aug 2014, Andreas Werner wrote: - -> On Fri, Aug 29, 2014 at 07:59:15AM +0100, Lee Jones wrote: -> > On Thu, 28 Aug 2014, Bryan Wu wrote: -> > -> > > On Wed, Aug 27, 2014 at 10:52 AM, Andreas Werner <andreas.werner@men.de> wrote: -> > > > Added driver to support the 14F021P00 BMC LEDs. -> > > > The BMC is a Board Management Controller including four LEDs which -> > > > can be switched on and off. -> > > > -> > > -> > > Please go ahead with my Ack -> > > Acked-by: Bryan Wu <cooloney@gmail.com> -> > > -> > > Lee, will you merge this through your tree? I think we do that in one -> > > shot is better. -> > -> > Yes, that's fine. Pull-request to follow. -> > -> -> Thanks to all for review. -> -> Who of you does the Watchdog part? Is it the part of Wim to Ack the patch -> if everythings is right or Guenther? - -Wim looks like the guy: - -WATCHDOG DEVICE DRIVERS -M: Wim Van Sebroeck <wim@iguana.be> -L: linux-watchdog@vger.kernel.org -W: http://www.linux-watchdog.org/ -T: git git://www.linux-watchdog.org/linux-watchdog.git -S: Maintained -F: Documentation/watchdog/ -F: drivers/watchdog/ -F: include/linux/watchdog.h -F: include/uapi/linux/watchdog.h - -> I ask because if everything is ok all the patches can go in completly that would -> be nice. - -That is the plan. - -> > > > Signed-off-by: Andreas Werner <andreas.werner@men.de> -> > > > --- -> > > > drivers/leds/Kconfig | 9 +++ -> > > > drivers/leds/Makefile | 1 + -> > > > drivers/leds/leds-menf21bmc.c | 131 ++++++++++++++++++++++++++++++++++++++++++ -> > > > 3 files changed, 141 insertions(+) -> > > > create mode 100644 drivers/leds/leds-menf21bmc.c -> > > > -> > > > diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig -> > > > index 27cf0cd..ec03457 100644 -> > > > --- a/drivers/leds/Kconfig -> > > > +++ b/drivers/leds/Kconfig -> > > > @@ -458,6 +458,15 @@ config LEDS_OT200 -> > > > This option enables support for the LEDs on the Bachmann OT200. -> > > > Say Y to enable LEDs on the Bachmann OT200. -> > > > -> > > > +config LEDS_MENF21BMC -> > > > + tristate "LED support for the MEN 14F021P00 BMC" -> > > > + depends on LEDS_CLASS && MFD_MENF21BMC -> > > > + help -> > > > + Say Y here to include support for the MEN 14F021P00 BMC LEDs. -> > > > + -> > > > + This driver can also be built as a module. If so the module -> > > > + will be called leds-menf21bmc. -> > > > + -> > > > comment "LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)" -> > > > -> > > > config LEDS_BLINKM -> > > > diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile -> > > > index 3c03666..cadc433 100644 -> > > > --- a/drivers/leds/Makefile -> > > > +++ b/drivers/leds/Makefile -> > > > @@ -53,6 +53,7 @@ obj-$(CONFIG_LEDS_MAX8997) += leds-max8997.o -> > > > obj-$(CONFIG_LEDS_LM355x) += leds-lm355x.o -> > > > obj-$(CONFIG_LEDS_BLINKM) += leds-blinkm.o -> > > > obj-$(CONFIG_LEDS_VERSATILE) += leds-versatile.o -> > > > +obj-$(CONFIG_LEDS_MENF21BMC) += leds-menf21bmc.o -> > > > -> > > > # LED SPI Drivers -> > > > obj-$(CONFIG_LEDS_DAC124S085) += leds-dac124s085.o -> > > > diff --git a/drivers/leds/leds-menf21bmc.c b/drivers/leds/leds-menf21bmc.c -> > > > new file mode 100644 -> > > > index 0000000..89dd577 -> > > > --- /dev/null -> > > > +++ b/drivers/leds/leds-menf21bmc.c -> > > > @@ -0,0 +1,131 @@ -> > > > +/* -> > > > + * MEN 14F021P00 Board Management Controller (BMC) LEDs Driver. -> > > > + * -> > > > + * This is the core LED driver of the MEN 14F021P00 BMC. -> > > > + * There are four LEDs available which can be switched on and off. -> > > > + * STATUS LED, HOT SWAP LED, USER LED 1, USER LED 2 -> > > > + * -> > > > + * Copyright (C) 2014 MEN Mikro Elektronik Nuernberg GmbH -> > > > + * -> > > > + * This program is free software; you can redistribute it and/or modify it -> > > > + * under the terms of the GNU General Public License as published by the -> > > > + * Free Software Foundation; either version 2 of the License, or (at your -> > > > + * option) any later version. -> > > > + */ -> > > > + -> > > > +#include <linux/module.h> -> > > > +#include <linux/kernel.h> -> > > > +#include <linux/platform_device.h> -> > > > +#include <linux/leds.h> -> > > > +#include <linux/i2c.h> -> > > > + -> > > > +#define BMC_CMD_LED_GET_SET 0xA0 -> > > > +#define BMC_BIT_LED_STATUS BIT(0) -> > > > +#define BMC_BIT_LED_HOTSWAP BIT(1) -> > > > +#define BMC_BIT_LED_USER1 BIT(2) -> > > > +#define BMC_BIT_LED_USER2 BIT(3) -> > > > + -> > > > +struct menf21bmc_led { -> > > > + struct led_classdev cdev; -> > > > + u8 led_bit; -> > > > + const char *name; -> > > > + struct i2c_client *i2c_client; -> > > > +}; -> > > > + -> > > > +static struct menf21bmc_led leds[] = { -> > > > + { -> > > > + .name = "menf21bmc:led_status", -> > > > + .led_bit = BMC_BIT_LED_STATUS, -> > > > + }, -> > > > + { -> > > > + .name = "menf21bmc:led_hotswap", -> > > > + .led_bit = BMC_BIT_LED_HOTSWAP, -> > > > + }, -> > > > + { -> > > > + .name = "menf21bmc:led_user1", -> > > > + .led_bit = BMC_BIT_LED_USER1, -> > > > + }, -> > > > + { -> > > > + .name = "menf21bmc:led_user2", -> > > > + .led_bit = BMC_BIT_LED_USER2, -> > > > + } -> > > > +}; -> > > > + -> > > > +static DEFINE_MUTEX(led_lock); -> > > > + -> > > > +static void -> > > > +menf21bmc_led_set(struct led_classdev *led_cdev, enum led_brightness value) -> > > > +{ -> > > > + int led_val; -> > > > + struct menf21bmc_led *led = container_of(led_cdev, -> > > > + struct menf21bmc_led, cdev); -> > > > + -> > > > + mutex_lock(&led_lock); -> > > > + led_val = i2c_smbus_read_byte_data(led->i2c_client, -> > > > + BMC_CMD_LED_GET_SET); -> > > > + if (led_val < 0) -> > > > + goto err_out; -> > > > + -> > > > + if (value == LED_OFF) -> > > > + led_val &= ~led->led_bit; -> > > > + else -> > > > + led_val |= led->led_bit; -> > > > + -> > > > + i2c_smbus_write_byte_data(led->i2c_client, -> > > > + BMC_CMD_LED_GET_SET, led_val); -> > > > +err_out: -> > > > + mutex_unlock(&led_lock); -> > > > +} -> > > > + -> > > > +static int menf21bmc_led_probe(struct platform_device *pdev) -> > > > +{ -> > > > + int i; -> > > > + int ret; -> > > > + struct i2c_client *i2c_client = to_i2c_client(pdev->dev.parent); -> > > > + -> > > > + for (i = 0; i < ARRAY_SIZE(leds); i++) { -> > > > + leds[i].cdev.name = leds[i].name; -> > > > + leds[i].cdev.brightness_set = menf21bmc_led_set; -> > > > + leds[i].i2c_client = i2c_client; -> > > > + ret = led_classdev_register(&pdev->dev, &leds[i].cdev); -> > > > + if (ret < 0) -> > > > + goto err_free_leds; -> > > > + } -> > > > + dev_info(&pdev->dev, "MEN 140F21P00 BMC LED device enabled\n"); -> > > > + -> > > > + return 0; -> > > > + -> > > > +err_free_leds: -> > > > + dev_err(&pdev->dev, "failed to register LED device\n"); -> > > > + -> > > > + for (i = i - 1; i >= 0; i--) -> > > > + led_classdev_unregister(&leds[i].cdev); -> > > > + -> > > > + return ret; -> > > > +} -> > > > + -> > > > +static int menf21bmc_led_remove(struct platform_device *pdev) -> > > > +{ -> > > > + int i; -> > > > + -> > > > + for (i = 0; i < ARRAY_SIZE(leds); i++) -> > > > + led_classdev_unregister(&leds[i].cdev); -> > > > + -> > > > + return 0; -> > > > +} -> > > > + -> > > > +static struct platform_driver menf21bmc_led = { -> > > > + .probe = menf21bmc_led_probe, -> > > > + .remove = menf21bmc_led_remove, -> > > > + .driver = { -> > > > + .name = "menf21bmc_led", -> > > > + .owner = THIS_MODULE, -> > > > + }, -> > > > +}; -> > > > + -> > > > +module_platform_driver(menf21bmc_led); -> > > > + -> > > > +MODULE_AUTHOR("Andreas Werner <andreas.werner@men.de>"); -> > > > +MODULE_DESCRIPTION("MEN 14F021P00 BMC led driver"); -> > > > +MODULE_LICENSE("GPL v2"); -> > > > +MODULE_ALIAS("platform:menf21bmc_led"); -> > > > -> > - --- -Lee Jones -Linaro STMicroelectronics Landing Team Lead -Linaro.org │ Open source software for ARM SoCs -Follow Linaro: Facebook | Twitter | Blog +T24gRnJpLCAyOSBBdWcgMjAxNCwgQW5kcmVhcyBXZXJuZXIgd3JvdGU6Cgo+IE9uIEZyaSwgQXVn +IDI5LCAyMDE0IGF0IDA3OjU5OjE1QU0gKzAxMDAsIExlZSBKb25lcyB3cm90ZToKPiA+IE9uIFRo +dSwgMjggQXVnIDIwMTQsIEJyeWFuIFd1IHdyb3RlOgo+ID4gCj4gPiA+IE9uIFdlZCwgQXVnIDI3 +LCAyMDE0IGF0IDEwOjUyIEFNLCBBbmRyZWFzIFdlcm5lciA8YW5kcmVhcy53ZXJuZXJAbWVuLmRl +PiB3cm90ZToKPiA+ID4gPiBBZGRlZCBkcml2ZXIgdG8gc3VwcG9ydCB0aGUgMTRGMDIxUDAwIEJN +QyBMRURzLgo+ID4gPiA+IFRoZSBCTUMgaXMgYSBCb2FyZCBNYW5hZ2VtZW50IENvbnRyb2xsZXIg +aW5jbHVkaW5nIGZvdXIgTEVEcyB3aGljaAo+ID4gPiA+IGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQg +b2ZmLgo+ID4gPiA+Cj4gPiA+IAo+ID4gPiBQbGVhc2UgZ28gYWhlYWQgd2l0aCBteSBBY2sKPiA+ +ID4gQWNrZWQtYnk6IEJyeWFuIFd1IDxjb29sb25leUBnbWFpbC5jb20+Cj4gPiA+IAo+ID4gPiBM +ZWUsIHdpbGwgeW91IG1lcmdlIHRoaXMgdGhyb3VnaCB5b3VyIHRyZWU/IEkgdGhpbmsgd2UgZG8g +dGhhdCBpbiBvbmUKPiA+ID4gc2hvdCBpcyBiZXR0ZXIuCj4gPiAKPiA+IFllcywgdGhhdCdzIGZp +bmUuICBQdWxsLXJlcXVlc3QgdG8gZm9sbG93Lgo+ID4gCj4gCj4gVGhhbmtzIHRvIGFsbCBmb3Ig +cmV2aWV3Lgo+IAo+IFdobyBvZiB5b3UgZG9lcyB0aGUgV2F0Y2hkb2cgcGFydD8gSXMgaXQgdGhl +IHBhcnQgb2YgV2ltIHRvIEFjayB0aGUgcGF0Y2gKPiBpZiBldmVyeXRoaW5ncyBpcyByaWdodCBv +ciBHdWVudGhlcj8KCldpbSBsb29rcyBsaWtlIHRoZSBndXk6CgpXQVRDSERPRyBERVZJQ0UgRFJJ +VkVSUwpNOiAgICAgIFdpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+Ckw6ICAgICAgbGlu +dXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnClc6ICAgICAgaHR0cDovL3d3dy5saW51eC13YXRj +aGRvZy5vcmcvClQ6ICAgICAgZ2l0IGdpdDovL3d3dy5saW51eC13YXRjaGRvZy5vcmcvbGludXgt +d2F0Y2hkb2cuZ2l0ClM6ICAgICAgTWFpbnRhaW5lZApGOiAgICAgIERvY3VtZW50YXRpb24vd2F0 +Y2hkb2cvCkY6ICAgICAgZHJpdmVycy93YXRjaGRvZy8KRjogICAgICBpbmNsdWRlL2xpbnV4L3dh +dGNoZG9nLmgKRjogICAgICBpbmNsdWRlL3VhcGkvbGludXgvd2F0Y2hkb2cuaAoKPiBJIGFzayBi +ZWNhdXNlIGlmIGV2ZXJ5dGhpbmcgaXMgb2sgYWxsIHRoZSBwYXRjaGVzIGNhbiBnbyBpbiBjb21w +bGV0bHkgdGhhdCB3b3VsZAo+IGJlIG5pY2UuCgpUaGF0IGlzIHRoZSBwbGFuLgoKPiA+ID4gPiBT +aWduZWQtb2ZmLWJ5OiBBbmRyZWFzIFdlcm5lciA8YW5kcmVhcy53ZXJuZXJAbWVuLmRlPgo+ID4g +PiA+IC0tLQo+ID4gPiA+ICBkcml2ZXJzL2xlZHMvS2NvbmZpZyAgICAgICAgICB8ICAgOSArKysK +PiA+ID4gPiAgZHJpdmVycy9sZWRzL01ha2VmaWxlICAgICAgICAgfCAgIDEgKwo+ID4gPiA+ICBk +cml2ZXJzL2xlZHMvbGVkcy1tZW5mMjFibWMuYyB8IDEzMSArKysrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysrKysrKysrKysKPiA+ID4gPiAgMyBmaWxlcyBjaGFuZ2VkLCAxNDEgaW5zZXJ0 +aW9ucygrKQo+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9sZWRzL2xlZHMtbWVu +ZjIxYm1jLmMKPiA+ID4gPgo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZp +ZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCj4gPiA+ID4gaW5kZXggMjdjZjBjZC4uZWMwMzQ1NyAx +MDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZwo+ID4gPiA+ICsrKyBiL2Ry +aXZlcnMvbGVkcy9LY29uZmlnCj4gPiA+ID4gQEAgLTQ1OCw2ICs0NTgsMTUgQEAgY29uZmlnIExF +RFNfT1QyMDAKPiA+ID4gPiAgICAgICAgICAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZv +ciB0aGUgTEVEcyBvbiB0aGUgQmFjaG1hbm4gT1QyMDAuCj4gPiA+ID4gICAgICAgICAgIFNheSBZ +IHRvIGVuYWJsZSBMRURzIG9uIHRoZSBCYWNobWFubiBPVDIwMC4KPiA+ID4gPgo+ID4gPiA+ICtj +b25maWcgTEVEU19NRU5GMjFCTUMKPiA+ID4gPiArICAgICAgIHRyaXN0YXRlICJMRUQgc3VwcG9y +dCBmb3IgdGhlIE1FTiAxNEYwMjFQMDAgQk1DIgo+ID4gPiA+ICsgICAgICAgZGVwZW5kcyBvbiBM +RURTX0NMQVNTICYmIE1GRF9NRU5GMjFCTUMKPiA+ID4gPiArICAgICAgIGhlbHAKPiA+ID4gPiAr +ICAgICAgICAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBNRU4gMTRGMDIx +UDAwIEJNQyBMRURzLgo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgICAgVGhpcyBkcml2ZXIgY2Fu +IGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvIHRoZSBtb2R1bGUKPiA+ID4gPiArICAg +ICAgICAgd2lsbCBiZSBjYWxsZWQgbGVkcy1tZW5mMjFibWMuCj4gPiA+ID4gKwo+ID4gPiA+ICBj +b21tZW50ICJMRUQgZHJpdmVyIGZvciBibGluaygxKSBVU0IgUkdCIExFRCBpcyB1bmRlciBTcGVj +aWFsIEhJRCBkcml2ZXJzIChISURfVEhJTkdNKSIKPiA+ID4gPgo+ID4gPiA+ICBjb25maWcgTEVE +U19CTElOS00KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL01ha2VmaWxlIGIvZHJp +dmVycy9sZWRzL01ha2VmaWxlCj4gPiA+ID4gaW5kZXggM2MwMzY2Ni4uY2FkYzQzMyAxMDA2NDQK +PiA+ID4gPiAtLS0gYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKPiA+ID4gPiArKysgYi9kcml2ZXJz +L2xlZHMvTWFrZWZpbGUKPiA+ID4gPiBAQCAtNTMsNiArNTMsNyBAQCBvYmotJChDT05GSUdfTEVE +U19NQVg4OTk3KSAgICAgICAgICAgICs9IGxlZHMtbWF4ODk5Ny5vCj4gPiA+ID4gIG9iai0kKENP +TkZJR19MRURTX0xNMzU1eCkgICAgICAgICAgICAgICs9IGxlZHMtbG0zNTV4Lm8KPiA+ID4gPiAg +b2JqLSQoQ09ORklHX0xFRFNfQkxJTktNKSAgICAgICAgICAgICAgKz0gbGVkcy1ibGlua20ubwo+ +ID4gPiA+ICBvYmotJChDT05GSUdfTEVEU19WRVJTQVRJTEUpICAgICAgICAgICArPSBsZWRzLXZl +cnNhdGlsZS5vCj4gPiA+ID4gK29iai0kKENPTkZJR19MRURTX01FTkYyMUJNQykgICAgICAgICAg +ICs9IGxlZHMtbWVuZjIxYm1jLm8KPiA+ID4gPgo+ID4gPiA+ICAjIExFRCBTUEkgRHJpdmVycwo+ +ID4gPiA+ICBvYmotJChDT05GSUdfTEVEU19EQUMxMjRTMDg1KSAgICAgICAgICArPSBsZWRzLWRh +YzEyNHMwODUubwo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1tZW5mMjFi +bWMuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLW1lbmYyMWJtYy5jCj4gPiA+ID4gbmV3IGZpbGUgbW9k +ZSAxMDA2NDQKPiA+ID4gPiBpbmRleCAwMDAwMDAwLi44OWRkNTc3Cj4gPiA+ID4gLS0tIC9kZXYv +bnVsbAo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLW1lbmYyMWJtYy5jCj4gPiA+ID4g +QEAgLTAsMCArMSwxMzEgQEAKPiA+ID4gPiArLyoKPiA+ID4gPiArICogIE1FTiAxNEYwMjFQMDAg +Qm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyIChCTUMpIExFRHMgRHJpdmVyLgo+ID4gPiA+ICsg +Kgo+ID4gPiA+ICsgKiAgVGhpcyBpcyB0aGUgY29yZSBMRUQgZHJpdmVyIG9mIHRoZSBNRU4gMTRG +MDIxUDAwIEJNQy4KPiA+ID4gPiArICogIFRoZXJlIGFyZSBmb3VyIExFRHMgYXZhaWxhYmxlIHdo +aWNoIGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmLgo+ID4gPiA+ICsgKiAgU1RBVFVTIExFRCwg +SE9UIFNXQVAgTEVELCBVU0VSIExFRCAxLCBVU0VSIExFRCAyCj4gPiA+ID4gKyAqCj4gPiA+ID4g +KyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgTUVOIE1pa3JvIEVsZWt0cm9uaWsgTnVlcm5iZXJnIEdt +YkgKPiA+ID4gPiArICoKPiA+ID4gPiArICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl +OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAo+ID4gPiA+ICsgKiAg +dW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBw +dWJsaXNoZWQgYnkgdGhlCj4gPiA+ID4gKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBl +aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKPiA+ID4gPiArICog +IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gPiA+ID4gKyAqLwo+ID4gPiA+ICsKPiA+ID4g +PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgva2Vy +bmVsLmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiA+ID4g +PiArI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5o +Pgo+ID4gPiA+ICsKPiA+ID4gPiArI2RlZmluZSBCTUNfQ01EX0xFRF9HRVRfU0VUICAgIDB4QTAK +PiA+ID4gPiArI2RlZmluZSBCTUNfQklUX0xFRF9TVEFUVVMgICAgIEJJVCgwKQo+ID4gPiA+ICsj +ZGVmaW5lIEJNQ19CSVRfTEVEX0hPVFNXQVAgICAgQklUKDEpCj4gPiA+ID4gKyNkZWZpbmUgQk1D +X0JJVF9MRURfVVNFUjEgICAgICBCSVQoMikKPiA+ID4gPiArI2RlZmluZSBCTUNfQklUX0xFRF9V +U0VSMiAgICAgIEJJVCgzKQo+ID4gPiA+ICsKPiA+ID4gPiArc3RydWN0IG1lbmYyMWJtY19sZWQg +ewo+ID4gPiA+ICsgICAgICAgc3RydWN0IGxlZF9jbGFzc2RldiBjZGV2Owo+ID4gPiA+ICsgICAg +ICAgdTggbGVkX2JpdDsKPiA+ID4gPiArICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7Cj4gPiA+ID4g +KyAgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudDsKPiA+ID4gPiArfTsKPiA+ID4g +PiArCj4gPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgbWVuZjIxYm1jX2xlZCBsZWRzW10gPSB7Cj4gPiA+ +ID4gKyAgICAgICB7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIC5uYW1lID0gIm1lbmYyMWJtYzps +ZWRfc3RhdHVzIiwKPiA+ID4gPiArICAgICAgICAgICAgICAgLmxlZF9iaXQgPSBCTUNfQklUX0xF +RF9TVEFUVVMsCj4gPiA+ID4gKyAgICAgICB9LAo+ID4gPiA+ICsgICAgICAgewo+ID4gPiA+ICsg +ICAgICAgICAgICAgICAubmFtZSA9ICJtZW5mMjFibWM6bGVkX2hvdHN3YXAiLAo+ID4gPiA+ICsg +ICAgICAgICAgICAgICAubGVkX2JpdCA9IEJNQ19CSVRfTEVEX0hPVFNXQVAsCj4gPiA+ID4gKyAg +ICAgICB9LAo+ID4gPiA+ICsgICAgICAgewo+ID4gPiA+ICsgICAgICAgICAgICAgICAubmFtZSA9 +ICJtZW5mMjFibWM6bGVkX3VzZXIxIiwKPiA+ID4gPiArICAgICAgICAgICAgICAgLmxlZF9iaXQg +PSBCTUNfQklUX0xFRF9VU0VSMSwKPiA+ID4gPiArICAgICAgIH0sCj4gPiA+ID4gKyAgICAgICB7 +Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIC5uYW1lID0gIm1lbmYyMWJtYzpsZWRfdXNlcjIiLAo+ +ID4gPiA+ICsgICAgICAgICAgICAgICAubGVkX2JpdCA9IEJNQ19CSVRfTEVEX1VTRVIyLAo+ID4g +PiA+ICsgICAgICAgfQo+ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIERFRklO +RV9NVVRFWChsZWRfbG9jayk7Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgdm9pZAo+ID4gPiA+ +ICttZW5mMjFibWNfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgZW51bSBs +ZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKPiA+ID4gPiArewo+ID4gPiA+ICsgICAgICAgaW50IGxlZF92 +YWw7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgbWVuZjIxYm1jX2xlZCAqbGVkID0gY29udGFpbmVy +X29mKGxlZF9jZGV2LAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBzdHJ1Y3QgbWVuZjIxYm1jX2xlZCwgY2Rldik7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAg +ICAgbXV0ZXhfbG9jaygmbGVkX2xvY2spOwo+ID4gPiA+ICsgICAgICAgbGVkX3ZhbCA9IGkyY19z +bWJ1c19yZWFkX2J5dGVfZGF0YShsZWQtPmkyY19jbGllbnQsCj4gPiA+ID4gKyAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJNQ19DTURfTEVEX0dFVF9TRVQpOwo+ID4g +PiA+ICsgICAgICAgaWYgKGxlZF92YWwgPCAwKQo+ID4gPiA+ICsgICAgICAgICAgICAgICBnb3Rv +IGVycl9vdXQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgaWYgKHZhbHVlID09IExFRF9PRkYp +Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGxlZF92YWwgJj0gfmxlZC0+bGVkX2JpdDsKPiA+ID4g +PiArICAgICAgIGVsc2UKPiA+ID4gPiArICAgICAgICAgICAgICAgbGVkX3ZhbCB8PSBsZWQtPmxl +ZF9iaXQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0 +YShsZWQtPmkyY19jbGllbnQsCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIEJNQ19DTURfTEVEX0dFVF9TRVQsIGxlZF92YWwpOwo+ID4gPiA+ICtlcnJfb3V0Ogo+ID4g +PiA+ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZsZWRfbG9jayk7Cj4gPiA+ID4gK30KPiA+ID4gPiAr +Cj4gPiA+ID4gK3N0YXRpYyBpbnQgbWVuZjIxYm1jX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f +ZGV2aWNlICpwZGV2KQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAgICBpbnQgaTsKPiA+ID4gPiAr +ICAgICAgIGludCByZXQ7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2Ns +aWVudCA9IHRvX2kyY19jbGllbnQocGRldi0+ZGV2LnBhcmVudCk7Cj4gPiA+ID4gKwo+ID4gPiA+ +ICsgICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGVkcyk7IGkrKykgewo+ID4gPiA+ +ICsgICAgICAgICAgICAgICBsZWRzW2ldLmNkZXYubmFtZSA9IGxlZHNbaV0ubmFtZTsKPiA+ID4g +PiArICAgICAgICAgICAgICAgbGVkc1tpXS5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gbWVuZjIxYm1j +X2xlZF9zZXQ7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGxlZHNbaV0uaTJjX2NsaWVudCA9IGky +Y19jbGllbnQ7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGxlZF9jbGFzc2Rldl9yZWdp +c3RlcigmcGRldi0+ZGV2LCAmbGVkc1tpXS5jZGV2KTsKPiA+ID4gPiArICAgICAgICAgICAgICAg +aWYgKHJldCA8IDApCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfZnJl +ZV9sZWRzOwo+ID4gPiA+ICsgICAgICAgfQo+ID4gPiA+ICsgICAgICAgZGV2X2luZm8oJnBkZXYt +PmRldiwgIk1FTiAxNDBGMjFQMDAgQk1DIExFRCBkZXZpY2UgZW5hYmxlZFxuIik7Cj4gPiA+ID4g +Kwo+ID4gPiA+ICsgICAgICAgcmV0dXJuIDA7Cj4gPiA+ID4gKwo+ID4gPiA+ICtlcnJfZnJlZV9s +ZWRzOgo+ID4gPiA+ICsgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lz +dGVyIExFRCBkZXZpY2VcbiIpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGZvciAoaSA9IGkg +LSAxOyBpID49IDA7IGktLSkKPiA+ID4gPiArICAgICAgICAgICAgICAgbGVkX2NsYXNzZGV2X3Vu +cmVnaXN0ZXIoJmxlZHNbaV0uY2Rldik7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgcmV0dXJu +IHJldDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBtZW5mMjFibWNf +bGVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gPiA+ICt7Cj4gPiA+ +ID4gKyAgICAgICBpbnQgaTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBp +IDwgQVJSQVlfU0laRShsZWRzKTsgaSsrKQo+ID4gPiA+ICsgICAgICAgICAgICAgICBsZWRfY2xh +c3NkZXZfdW5yZWdpc3RlcigmbGVkc1tpXS5jZGV2KTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAg +ICByZXR1cm4gMDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIHN0cnVjdCBw +bGF0Zm9ybV9kcml2ZXIgbWVuZjIxYm1jX2xlZCA9IHsKPiA+ID4gPiArICAgICAgIC5wcm9iZSAg +ICAgICAgICA9IG1lbmYyMWJtY19sZWRfcHJvYmUsCj4gPiA+ID4gKyAgICAgICAucmVtb3ZlICAg +ICAgICAgPSBtZW5mMjFibWNfbGVkX3JlbW92ZSwKPiA+ID4gPiArICAgICAgIC5kcml2ZXIgICAg +ICAgICA9IHsKPiA+ID4gPiArICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIm1lbmYy +MWJtY19sZWQiLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAub3duZXIgICAgICAgICAgPSBUSElT +X01PRFVMRSwKPiA+ID4gPiArICAgICAgIH0sCj4gPiA+ID4gK307Cj4gPiA+ID4gKwo+ID4gPiA+ +ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1lbmYyMWJtY19sZWQpOwo+ID4gPiA+ICsKPiA+ID4g +PiArTU9EVUxFX0FVVEhPUigiQW5kcmVhcyBXZXJuZXIgPGFuZHJlYXMud2VybmVyQG1lbi5kZT4i +KTsKPiA+ID4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNRU4gMTRGMDIxUDAwIEJNQyBsZWQgZHJp +dmVyIik7Cj4gPiA+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiA+ID4gPiArTU9EVUxF +X0FMSUFTKCJwbGF0Zm9ybTptZW5mMjFibWNfbGVkIik7Cj4gPiA+ID4KPiA+IAoKLS0gCkxlZSBK +b25lcwpMaW5hcm8gU1RNaWNyb2VsZWN0cm9uaWNzIExhbmRpbmcgVGVhbSBMZWFkCkxpbmFyby5v +cmcg4pSCIE9wZW4gc291cmNlIHNvZnR3YXJlIGZvciBBUk0gU29DcwpGb2xsb3cgTGluYXJvOiBG +YWNlYm9vayB8IFR3aXR0ZXIgfCBCbG9nCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f +X19fX19fX19fX19fX19fXwpsbS1zZW5zb3JzIG1haWxpbmcgbGlzdApsbS1zZW5zb3JzQGxtLXNl +bnNvcnMub3JnCmh0dHA6Ly9saXN0cy5sbS1zZW5zb3JzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xt +LXNlbnNvcnM diff --git a/a/content_digest b/N1/content_digest index 86b40ee..44328a7 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -4,8 +4,8 @@ "ref\020140829065915.GZ24579@lee--X1\0" "ref\020140829113815.GA30736@awelinux\0" "From\0Lee Jones <lee.jones@linaro.org>\0" - "Subject\0Re: [PATCH v6 3/4] drivers/leds/leds-menf21bmc: introduce MEN 14F021P00 BMC LED driver\0" - "Date\0Fri, 29 Aug 2014 11:59:13 +0100\0" + "Subject\0Re: [lm-sensors] [PATCH v6 3/4] drivers/leds/leds-menf21bmc: introduce MEN 14F021P00 BMC LED driver\0" + "Date\0Fri, 29 Aug 2014 10:59:13 +0000\0" "To\0Andreas Werner <andreas.werner@men.de>\0" "Cc\0Bryan Wu <cooloney@gmail.com>" lkml <linux-kernel@vger.kernel.org> @@ -18,233 +18,159 @@ " Linux LED Subsystem <linux-leds@vger.kernel.org>\0" "\00:1\0" "b\0" - "On Fri, 29 Aug 2014, Andreas Werner wrote:\n" - "\n" - "> On Fri, Aug 29, 2014 at 07:59:15AM +0100, Lee Jones wrote:\n" - "> > On Thu, 28 Aug 2014, Bryan Wu wrote:\n" - "> > \n" - "> > > On Wed, Aug 27, 2014 at 10:52 AM, Andreas Werner <andreas.werner@men.de> wrote:\n" - "> > > > Added driver to support the 14F021P00 BMC LEDs.\n" - "> > > > The BMC is a Board Management Controller including four LEDs which\n" - "> > > > can be switched on and off.\n" - "> > > >\n" - "> > > \n" - "> > > Please go ahead with my Ack\n" - "> > > Acked-by: Bryan Wu <cooloney@gmail.com>\n" - "> > > \n" - "> > > Lee, will you merge this through your tree? I think we do that in one\n" - "> > > shot is better.\n" - "> > \n" - "> > Yes, that's fine. Pull-request to follow.\n" - "> > \n" - "> \n" - "> Thanks to all for review.\n" - "> \n" - "> Who of you does the Watchdog part? Is it the part of Wim to Ack the patch\n" - "> if everythings is right or Guenther?\n" - "\n" - "Wim looks like the guy:\n" - "\n" - "WATCHDOG DEVICE DRIVERS\n" - "M: Wim Van Sebroeck <wim@iguana.be>\n" - "L: linux-watchdog@vger.kernel.org\n" - "W: http://www.linux-watchdog.org/\n" - "T: git git://www.linux-watchdog.org/linux-watchdog.git\n" - "S: Maintained\n" - "F: Documentation/watchdog/\n" - "F: drivers/watchdog/\n" - "F: include/linux/watchdog.h\n" - "F: include/uapi/linux/watchdog.h\n" - "\n" - "> I ask because if everything is ok all the patches can go in completly that would\n" - "> be nice.\n" - "\n" - "That is the plan.\n" - "\n" - "> > > > Signed-off-by: Andreas Werner <andreas.werner@men.de>\n" - "> > > > ---\n" - "> > > > drivers/leds/Kconfig | 9 +++\n" - "> > > > drivers/leds/Makefile | 1 +\n" - "> > > > drivers/leds/leds-menf21bmc.c | 131 ++++++++++++++++++++++++++++++++++++++++++\n" - "> > > > 3 files changed, 141 insertions(+)\n" - "> > > > create mode 100644 drivers/leds/leds-menf21bmc.c\n" - "> > > >\n" - "> > > > diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig\n" - "> > > > index 27cf0cd..ec03457 100644\n" - "> > > > --- a/drivers/leds/Kconfig\n" - "> > > > +++ b/drivers/leds/Kconfig\n" - "> > > > @@ -458,6 +458,15 @@ config LEDS_OT200\n" - "> > > > This option enables support for the LEDs on the Bachmann OT200.\n" - "> > > > Say Y to enable LEDs on the Bachmann OT200.\n" - "> > > >\n" - "> > > > +config LEDS_MENF21BMC\n" - "> > > > + tristate \"LED support for the MEN 14F021P00 BMC\"\n" - "> > > > + depends on LEDS_CLASS && MFD_MENF21BMC\n" - "> > > > + help\n" - "> > > > + Say Y here to include support for the MEN 14F021P00 BMC LEDs.\n" - "> > > > +\n" - "> > > > + This driver can also be built as a module. If so the module\n" - "> > > > + will be called leds-menf21bmc.\n" - "> > > > +\n" - "> > > > comment \"LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)\"\n" - "> > > >\n" - "> > > > config LEDS_BLINKM\n" - "> > > > diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile\n" - "> > > > index 3c03666..cadc433 100644\n" - "> > > > --- a/drivers/leds/Makefile\n" - "> > > > +++ b/drivers/leds/Makefile\n" - "> > > > @@ -53,6 +53,7 @@ obj-$(CONFIG_LEDS_MAX8997) += leds-max8997.o\n" - "> > > > obj-$(CONFIG_LEDS_LM355x) += leds-lm355x.o\n" - "> > > > obj-$(CONFIG_LEDS_BLINKM) += leds-blinkm.o\n" - "> > > > obj-$(CONFIG_LEDS_VERSATILE) += leds-versatile.o\n" - "> > > > +obj-$(CONFIG_LEDS_MENF21BMC) += leds-menf21bmc.o\n" - "> > > >\n" - "> > > > # LED SPI Drivers\n" - "> > > > obj-$(CONFIG_LEDS_DAC124S085) += leds-dac124s085.o\n" - "> > > > diff --git a/drivers/leds/leds-menf21bmc.c b/drivers/leds/leds-menf21bmc.c\n" - "> > > > new file mode 100644\n" - "> > > > index 0000000..89dd577\n" - "> > > > --- /dev/null\n" - "> > > > +++ b/drivers/leds/leds-menf21bmc.c\n" - "> > > > @@ -0,0 +1,131 @@\n" - "> > > > +/*\n" - "> > > > + * MEN 14F021P00 Board Management Controller (BMC) LEDs Driver.\n" - "> > > > + *\n" - "> > > > + * This is the core LED driver of the MEN 14F021P00 BMC.\n" - "> > > > + * There are four LEDs available which can be switched on and off.\n" - "> > > > + * STATUS LED, HOT SWAP LED, USER LED 1, USER LED 2\n" - "> > > > + *\n" - "> > > > + * Copyright (C) 2014 MEN Mikro Elektronik Nuernberg GmbH\n" - "> > > > + *\n" - "> > > > + * This program is free software; you can redistribute it and/or modify it\n" - "> > > > + * under the terms of the GNU General Public License as published by the\n" - "> > > > + * Free Software Foundation; either version 2 of the License, or (at your\n" - "> > > > + * option) any later version.\n" - "> > > > + */\n" - "> > > > +\n" - "> > > > +#include <linux/module.h>\n" - "> > > > +#include <linux/kernel.h>\n" - "> > > > +#include <linux/platform_device.h>\n" - "> > > > +#include <linux/leds.h>\n" - "> > > > +#include <linux/i2c.h>\n" - "> > > > +\n" - "> > > > +#define BMC_CMD_LED_GET_SET 0xA0\n" - "> > > > +#define BMC_BIT_LED_STATUS BIT(0)\n" - "> > > > +#define BMC_BIT_LED_HOTSWAP BIT(1)\n" - "> > > > +#define BMC_BIT_LED_USER1 BIT(2)\n" - "> > > > +#define BMC_BIT_LED_USER2 BIT(3)\n" - "> > > > +\n" - "> > > > +struct menf21bmc_led {\n" - "> > > > + struct led_classdev cdev;\n" - "> > > > + u8 led_bit;\n" - "> > > > + const char *name;\n" - "> > > > + struct i2c_client *i2c_client;\n" - "> > > > +};\n" - "> > > > +\n" - "> > > > +static struct menf21bmc_led leds[] = {\n" - "> > > > + {\n" - "> > > > + .name = \"menf21bmc:led_status\",\n" - "> > > > + .led_bit = BMC_BIT_LED_STATUS,\n" - "> > > > + },\n" - "> > > > + {\n" - "> > > > + .name = \"menf21bmc:led_hotswap\",\n" - "> > > > + .led_bit = BMC_BIT_LED_HOTSWAP,\n" - "> > > > + },\n" - "> > > > + {\n" - "> > > > + .name = \"menf21bmc:led_user1\",\n" - "> > > > + .led_bit = BMC_BIT_LED_USER1,\n" - "> > > > + },\n" - "> > > > + {\n" - "> > > > + .name = \"menf21bmc:led_user2\",\n" - "> > > > + .led_bit = BMC_BIT_LED_USER2,\n" - "> > > > + }\n" - "> > > > +};\n" - "> > > > +\n" - "> > > > +static DEFINE_MUTEX(led_lock);\n" - "> > > > +\n" - "> > > > +static void\n" - "> > > > +menf21bmc_led_set(struct led_classdev *led_cdev, enum led_brightness value)\n" - "> > > > +{\n" - "> > > > + int led_val;\n" - "> > > > + struct menf21bmc_led *led = container_of(led_cdev,\n" - "> > > > + struct menf21bmc_led, cdev);\n" - "> > > > +\n" - "> > > > + mutex_lock(&led_lock);\n" - "> > > > + led_val = i2c_smbus_read_byte_data(led->i2c_client,\n" - "> > > > + BMC_CMD_LED_GET_SET);\n" - "> > > > + if (led_val < 0)\n" - "> > > > + goto err_out;\n" - "> > > > +\n" - "> > > > + if (value == LED_OFF)\n" - "> > > > + led_val &= ~led->led_bit;\n" - "> > > > + else\n" - "> > > > + led_val |= led->led_bit;\n" - "> > > > +\n" - "> > > > + i2c_smbus_write_byte_data(led->i2c_client,\n" - "> > > > + BMC_CMD_LED_GET_SET, led_val);\n" - "> > > > +err_out:\n" - "> > > > + mutex_unlock(&led_lock);\n" - "> > > > +}\n" - "> > > > +\n" - "> > > > +static int menf21bmc_led_probe(struct platform_device *pdev)\n" - "> > > > +{\n" - "> > > > + int i;\n" - "> > > > + int ret;\n" - "> > > > + struct i2c_client *i2c_client = to_i2c_client(pdev->dev.parent);\n" - "> > > > +\n" - "> > > > + for (i = 0; i < ARRAY_SIZE(leds); i++) {\n" - "> > > > + leds[i].cdev.name = leds[i].name;\n" - "> > > > + leds[i].cdev.brightness_set = menf21bmc_led_set;\n" - "> > > > + leds[i].i2c_client = i2c_client;\n" - "> > > > + ret = led_classdev_register(&pdev->dev, &leds[i].cdev);\n" - "> > > > + if (ret < 0)\n" - "> > > > + goto err_free_leds;\n" - "> > > > + }\n" - "> > > > + dev_info(&pdev->dev, \"MEN 140F21P00 BMC LED device enabled\\n\");\n" - "> > > > +\n" - "> > > > + return 0;\n" - "> > > > +\n" - "> > > > +err_free_leds:\n" - "> > > > + dev_err(&pdev->dev, \"failed to register LED device\\n\");\n" - "> > > > +\n" - "> > > > + for (i = i - 1; i >= 0; i--)\n" - "> > > > + led_classdev_unregister(&leds[i].cdev);\n" - "> > > > +\n" - "> > > > + return ret;\n" - "> > > > +}\n" - "> > > > +\n" - "> > > > +static int menf21bmc_led_remove(struct platform_device *pdev)\n" - "> > > > +{\n" - "> > > > + int i;\n" - "> > > > +\n" - "> > > > + for (i = 0; i < ARRAY_SIZE(leds); i++)\n" - "> > > > + led_classdev_unregister(&leds[i].cdev);\n" - "> > > > +\n" - "> > > > + return 0;\n" - "> > > > +}\n" - "> > > > +\n" - "> > > > +static struct platform_driver menf21bmc_led = {\n" - "> > > > + .probe = menf21bmc_led_probe,\n" - "> > > > + .remove = menf21bmc_led_remove,\n" - "> > > > + .driver = {\n" - "> > > > + .name = \"menf21bmc_led\",\n" - "> > > > + .owner = THIS_MODULE,\n" - "> > > > + },\n" - "> > > > +};\n" - "> > > > +\n" - "> > > > +module_platform_driver(menf21bmc_led);\n" - "> > > > +\n" - "> > > > +MODULE_AUTHOR(\"Andreas Werner <andreas.werner@men.de>\");\n" - "> > > > +MODULE_DESCRIPTION(\"MEN 14F021P00 BMC led driver\");\n" - "> > > > +MODULE_LICENSE(\"GPL v2\");\n" - "> > > > +MODULE_ALIAS(\"platform:menf21bmc_led\");\n" - "> > > >\n" - "> > \n" - "\n" - "-- \n" - "Lee Jones\n" - "Linaro STMicroelectronics Landing Team Lead\n" - "Linaro.org \342\224\202 Open source software for ARM SoCs\n" - Follow Linaro: Facebook | Twitter | Blog + "T24gRnJpLCAyOSBBdWcgMjAxNCwgQW5kcmVhcyBXZXJuZXIgd3JvdGU6Cgo+IE9uIEZyaSwgQXVn\n" + "IDI5LCAyMDE0IGF0IDA3OjU5OjE1QU0gKzAxMDAsIExlZSBKb25lcyB3cm90ZToKPiA+IE9uIFRo\n" + "dSwgMjggQXVnIDIwMTQsIEJyeWFuIFd1IHdyb3RlOgo+ID4gCj4gPiA+IE9uIFdlZCwgQXVnIDI3\n" + "LCAyMDE0IGF0IDEwOjUyIEFNLCBBbmRyZWFzIFdlcm5lciA8YW5kcmVhcy53ZXJuZXJAbWVuLmRl\n" + "PiB3cm90ZToKPiA+ID4gPiBBZGRlZCBkcml2ZXIgdG8gc3VwcG9ydCB0aGUgMTRGMDIxUDAwIEJN\n" + "QyBMRURzLgo+ID4gPiA+IFRoZSBCTUMgaXMgYSBCb2FyZCBNYW5hZ2VtZW50IENvbnRyb2xsZXIg\n" + "aW5jbHVkaW5nIGZvdXIgTEVEcyB3aGljaAo+ID4gPiA+IGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQg\n" + "b2ZmLgo+ID4gPiA+Cj4gPiA+IAo+ID4gPiBQbGVhc2UgZ28gYWhlYWQgd2l0aCBteSBBY2sKPiA+\n" + "ID4gQWNrZWQtYnk6IEJyeWFuIFd1IDxjb29sb25leUBnbWFpbC5jb20+Cj4gPiA+IAo+ID4gPiBM\n" + "ZWUsIHdpbGwgeW91IG1lcmdlIHRoaXMgdGhyb3VnaCB5b3VyIHRyZWU/IEkgdGhpbmsgd2UgZG8g\n" + "dGhhdCBpbiBvbmUKPiA+ID4gc2hvdCBpcyBiZXR0ZXIuCj4gPiAKPiA+IFllcywgdGhhdCdzIGZp\n" + "bmUuICBQdWxsLXJlcXVlc3QgdG8gZm9sbG93Lgo+ID4gCj4gCj4gVGhhbmtzIHRvIGFsbCBmb3Ig\n" + "cmV2aWV3Lgo+IAo+IFdobyBvZiB5b3UgZG9lcyB0aGUgV2F0Y2hkb2cgcGFydD8gSXMgaXQgdGhl\n" + "IHBhcnQgb2YgV2ltIHRvIEFjayB0aGUgcGF0Y2gKPiBpZiBldmVyeXRoaW5ncyBpcyByaWdodCBv\n" + "ciBHdWVudGhlcj8KCldpbSBsb29rcyBsaWtlIHRoZSBndXk6CgpXQVRDSERPRyBERVZJQ0UgRFJJ\n" + "VkVSUwpNOiAgICAgIFdpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+Ckw6ICAgICAgbGlu\n" + "dXgtd2F0Y2hkb2dAdmdlci5rZXJuZWwub3JnClc6ICAgICAgaHR0cDovL3d3dy5saW51eC13YXRj\n" + "aGRvZy5vcmcvClQ6ICAgICAgZ2l0IGdpdDovL3d3dy5saW51eC13YXRjaGRvZy5vcmcvbGludXgt\n" + "d2F0Y2hkb2cuZ2l0ClM6ICAgICAgTWFpbnRhaW5lZApGOiAgICAgIERvY3VtZW50YXRpb24vd2F0\n" + "Y2hkb2cvCkY6ICAgICAgZHJpdmVycy93YXRjaGRvZy8KRjogICAgICBpbmNsdWRlL2xpbnV4L3dh\n" + "dGNoZG9nLmgKRjogICAgICBpbmNsdWRlL3VhcGkvbGludXgvd2F0Y2hkb2cuaAoKPiBJIGFzayBi\n" + "ZWNhdXNlIGlmIGV2ZXJ5dGhpbmcgaXMgb2sgYWxsIHRoZSBwYXRjaGVzIGNhbiBnbyBpbiBjb21w\n" + "bGV0bHkgdGhhdCB3b3VsZAo+IGJlIG5pY2UuCgpUaGF0IGlzIHRoZSBwbGFuLgoKPiA+ID4gPiBT\n" + "aWduZWQtb2ZmLWJ5OiBBbmRyZWFzIFdlcm5lciA8YW5kcmVhcy53ZXJuZXJAbWVuLmRlPgo+ID4g\n" + "PiA+IC0tLQo+ID4gPiA+ICBkcml2ZXJzL2xlZHMvS2NvbmZpZyAgICAgICAgICB8ICAgOSArKysK\n" + "PiA+ID4gPiAgZHJpdmVycy9sZWRzL01ha2VmaWxlICAgICAgICAgfCAgIDEgKwo+ID4gPiA+ICBk\n" + "cml2ZXJzL2xlZHMvbGVkcy1tZW5mMjFibWMuYyB8IDEzMSArKysrKysrKysrKysrKysrKysrKysr\n" + "KysrKysrKysrKysrKysrKysrKysKPiA+ID4gPiAgMyBmaWxlcyBjaGFuZ2VkLCAxNDEgaW5zZXJ0\n" + "aW9ucygrKQo+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9sZWRzL2xlZHMtbWVu\n" + "ZjIxYm1jLmMKPiA+ID4gPgo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZp\n" + "ZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCj4gPiA+ID4gaW5kZXggMjdjZjBjZC4uZWMwMzQ1NyAx\n" + "MDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZwo+ID4gPiA+ICsrKyBiL2Ry\n" + "aXZlcnMvbGVkcy9LY29uZmlnCj4gPiA+ID4gQEAgLTQ1OCw2ICs0NTgsMTUgQEAgY29uZmlnIExF\n" + "RFNfT1QyMDAKPiA+ID4gPiAgICAgICAgICAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZv\n" + "ciB0aGUgTEVEcyBvbiB0aGUgQmFjaG1hbm4gT1QyMDAuCj4gPiA+ID4gICAgICAgICAgIFNheSBZ\n" + "IHRvIGVuYWJsZSBMRURzIG9uIHRoZSBCYWNobWFubiBPVDIwMC4KPiA+ID4gPgo+ID4gPiA+ICtj\n" + "b25maWcgTEVEU19NRU5GMjFCTUMKPiA+ID4gPiArICAgICAgIHRyaXN0YXRlICJMRUQgc3VwcG9y\n" + "dCBmb3IgdGhlIE1FTiAxNEYwMjFQMDAgQk1DIgo+ID4gPiA+ICsgICAgICAgZGVwZW5kcyBvbiBM\n" + "RURTX0NMQVNTICYmIE1GRF9NRU5GMjFCTUMKPiA+ID4gPiArICAgICAgIGhlbHAKPiA+ID4gPiAr\n" + "ICAgICAgICAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBNRU4gMTRGMDIx\n" + "UDAwIEJNQyBMRURzLgo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgICAgVGhpcyBkcml2ZXIgY2Fu\n" + "IGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvIHRoZSBtb2R1bGUKPiA+ID4gPiArICAg\n" + "ICAgICAgd2lsbCBiZSBjYWxsZWQgbGVkcy1tZW5mMjFibWMuCj4gPiA+ID4gKwo+ID4gPiA+ICBj\n" + "b21tZW50ICJMRUQgZHJpdmVyIGZvciBibGluaygxKSBVU0IgUkdCIExFRCBpcyB1bmRlciBTcGVj\n" + "aWFsIEhJRCBkcml2ZXJzIChISURfVEhJTkdNKSIKPiA+ID4gPgo+ID4gPiA+ICBjb25maWcgTEVE\n" + "U19CTElOS00KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL01ha2VmaWxlIGIvZHJp\n" + "dmVycy9sZWRzL01ha2VmaWxlCj4gPiA+ID4gaW5kZXggM2MwMzY2Ni4uY2FkYzQzMyAxMDA2NDQK\n" + "PiA+ID4gPiAtLS0gYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKPiA+ID4gPiArKysgYi9kcml2ZXJz\n" + "L2xlZHMvTWFrZWZpbGUKPiA+ID4gPiBAQCAtNTMsNiArNTMsNyBAQCBvYmotJChDT05GSUdfTEVE\n" + "U19NQVg4OTk3KSAgICAgICAgICAgICs9IGxlZHMtbWF4ODk5Ny5vCj4gPiA+ID4gIG9iai0kKENP\n" + "TkZJR19MRURTX0xNMzU1eCkgICAgICAgICAgICAgICs9IGxlZHMtbG0zNTV4Lm8KPiA+ID4gPiAg\n" + "b2JqLSQoQ09ORklHX0xFRFNfQkxJTktNKSAgICAgICAgICAgICAgKz0gbGVkcy1ibGlua20ubwo+\n" + "ID4gPiA+ICBvYmotJChDT05GSUdfTEVEU19WRVJTQVRJTEUpICAgICAgICAgICArPSBsZWRzLXZl\n" + "cnNhdGlsZS5vCj4gPiA+ID4gK29iai0kKENPTkZJR19MRURTX01FTkYyMUJNQykgICAgICAgICAg\n" + "ICs9IGxlZHMtbWVuZjIxYm1jLm8KPiA+ID4gPgo+ID4gPiA+ICAjIExFRCBTUEkgRHJpdmVycwo+\n" + "ID4gPiA+ICBvYmotJChDT05GSUdfTEVEU19EQUMxMjRTMDg1KSAgICAgICAgICArPSBsZWRzLWRh\n" + "YzEyNHMwODUubwo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1tZW5mMjFi\n" + "bWMuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLW1lbmYyMWJtYy5jCj4gPiA+ID4gbmV3IGZpbGUgbW9k\n" + "ZSAxMDA2NDQKPiA+ID4gPiBpbmRleCAwMDAwMDAwLi44OWRkNTc3Cj4gPiA+ID4gLS0tIC9kZXYv\n" + "bnVsbAo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLW1lbmYyMWJtYy5jCj4gPiA+ID4g\n" + "QEAgLTAsMCArMSwxMzEgQEAKPiA+ID4gPiArLyoKPiA+ID4gPiArICogIE1FTiAxNEYwMjFQMDAg\n" + "Qm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyIChCTUMpIExFRHMgRHJpdmVyLgo+ID4gPiA+ICsg\n" + "Kgo+ID4gPiA+ICsgKiAgVGhpcyBpcyB0aGUgY29yZSBMRUQgZHJpdmVyIG9mIHRoZSBNRU4gMTRG\n" + "MDIxUDAwIEJNQy4KPiA+ID4gPiArICogIFRoZXJlIGFyZSBmb3VyIExFRHMgYXZhaWxhYmxlIHdo\n" + "aWNoIGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmLgo+ID4gPiA+ICsgKiAgU1RBVFVTIExFRCwg\n" + "SE9UIFNXQVAgTEVELCBVU0VSIExFRCAxLCBVU0VSIExFRCAyCj4gPiA+ID4gKyAqCj4gPiA+ID4g\n" + "KyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgTUVOIE1pa3JvIEVsZWt0cm9uaWsgTnVlcm5iZXJnIEdt\n" + "YkgKPiA+ID4gPiArICoKPiA+ID4gPiArICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl\n" + "OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAo+ID4gPiA+ICsgKiAg\n" + "dW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBw\n" + "dWJsaXNoZWQgYnkgdGhlCj4gPiA+ID4gKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBl\n" + "aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKPiA+ID4gPiArICog\n" + "IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gPiA+ID4gKyAqLwo+ID4gPiA+ICsKPiA+ID4g\n" + "PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgva2Vy\n" + "bmVsLmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiA+ID4g\n" + "PiArI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5o\n" + "Pgo+ID4gPiA+ICsKPiA+ID4gPiArI2RlZmluZSBCTUNfQ01EX0xFRF9HRVRfU0VUICAgIDB4QTAK\n" + "PiA+ID4gPiArI2RlZmluZSBCTUNfQklUX0xFRF9TVEFUVVMgICAgIEJJVCgwKQo+ID4gPiA+ICsj\n" + "ZGVmaW5lIEJNQ19CSVRfTEVEX0hPVFNXQVAgICAgQklUKDEpCj4gPiA+ID4gKyNkZWZpbmUgQk1D\n" + "X0JJVF9MRURfVVNFUjEgICAgICBCSVQoMikKPiA+ID4gPiArI2RlZmluZSBCTUNfQklUX0xFRF9V\n" + "U0VSMiAgICAgIEJJVCgzKQo+ID4gPiA+ICsKPiA+ID4gPiArc3RydWN0IG1lbmYyMWJtY19sZWQg\n" + "ewo+ID4gPiA+ICsgICAgICAgc3RydWN0IGxlZF9jbGFzc2RldiBjZGV2Owo+ID4gPiA+ICsgICAg\n" + "ICAgdTggbGVkX2JpdDsKPiA+ID4gPiArICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7Cj4gPiA+ID4g\n" + "KyAgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudDsKPiA+ID4gPiArfTsKPiA+ID4g\n" + "PiArCj4gPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgbWVuZjIxYm1jX2xlZCBsZWRzW10gPSB7Cj4gPiA+\n" + "ID4gKyAgICAgICB7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIC5uYW1lID0gIm1lbmYyMWJtYzps\n" + "ZWRfc3RhdHVzIiwKPiA+ID4gPiArICAgICAgICAgICAgICAgLmxlZF9iaXQgPSBCTUNfQklUX0xF\n" + "RF9TVEFUVVMsCj4gPiA+ID4gKyAgICAgICB9LAo+ID4gPiA+ICsgICAgICAgewo+ID4gPiA+ICsg\n" + "ICAgICAgICAgICAgICAubmFtZSA9ICJtZW5mMjFibWM6bGVkX2hvdHN3YXAiLAo+ID4gPiA+ICsg\n" + "ICAgICAgICAgICAgICAubGVkX2JpdCA9IEJNQ19CSVRfTEVEX0hPVFNXQVAsCj4gPiA+ID4gKyAg\n" + "ICAgICB9LAo+ID4gPiA+ICsgICAgICAgewo+ID4gPiA+ICsgICAgICAgICAgICAgICAubmFtZSA9\n" + "ICJtZW5mMjFibWM6bGVkX3VzZXIxIiwKPiA+ID4gPiArICAgICAgICAgICAgICAgLmxlZF9iaXQg\n" + "PSBCTUNfQklUX0xFRF9VU0VSMSwKPiA+ID4gPiArICAgICAgIH0sCj4gPiA+ID4gKyAgICAgICB7\n" + "Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIC5uYW1lID0gIm1lbmYyMWJtYzpsZWRfdXNlcjIiLAo+\n" + "ID4gPiA+ICsgICAgICAgICAgICAgICAubGVkX2JpdCA9IEJNQ19CSVRfTEVEX1VTRVIyLAo+ID4g\n" + "PiA+ICsgICAgICAgfQo+ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIERFRklO\n" + "RV9NVVRFWChsZWRfbG9jayk7Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgdm9pZAo+ID4gPiA+\n" + "ICttZW5mMjFibWNfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgZW51bSBs\n" + "ZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKPiA+ID4gPiArewo+ID4gPiA+ICsgICAgICAgaW50IGxlZF92\n" + "YWw7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgbWVuZjIxYm1jX2xlZCAqbGVkID0gY29udGFpbmVy\n" + "X29mKGxlZF9jZGV2LAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\n" + "ICAgICBzdHJ1Y3QgbWVuZjIxYm1jX2xlZCwgY2Rldik7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAg\n" + "ICAgbXV0ZXhfbG9jaygmbGVkX2xvY2spOwo+ID4gPiA+ICsgICAgICAgbGVkX3ZhbCA9IGkyY19z\n" + "bWJ1c19yZWFkX2J5dGVfZGF0YShsZWQtPmkyY19jbGllbnQsCj4gPiA+ID4gKyAgICAgICAgICAg\n" + "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJNQ19DTURfTEVEX0dFVF9TRVQpOwo+ID4g\n" + "PiA+ICsgICAgICAgaWYgKGxlZF92YWwgPCAwKQo+ID4gPiA+ICsgICAgICAgICAgICAgICBnb3Rv\n" + "IGVycl9vdXQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgaWYgKHZhbHVlID09IExFRF9PRkYp\n" + "Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGxlZF92YWwgJj0gfmxlZC0+bGVkX2JpdDsKPiA+ID4g\n" + "PiArICAgICAgIGVsc2UKPiA+ID4gPiArICAgICAgICAgICAgICAgbGVkX3ZhbCB8PSBsZWQtPmxl\n" + "ZF9iaXQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0\n" + "YShsZWQtPmkyY19jbGllbnQsCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\n" + "ICAgIEJNQ19DTURfTEVEX0dFVF9TRVQsIGxlZF92YWwpOwo+ID4gPiA+ICtlcnJfb3V0Ogo+ID4g\n" + "PiA+ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZsZWRfbG9jayk7Cj4gPiA+ID4gK30KPiA+ID4gPiAr\n" + "Cj4gPiA+ID4gK3N0YXRpYyBpbnQgbWVuZjIxYm1jX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f\n" + "ZGV2aWNlICpwZGV2KQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAgICBpbnQgaTsKPiA+ID4gPiAr\n" + "ICAgICAgIGludCByZXQ7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2Ns\n" + "aWVudCA9IHRvX2kyY19jbGllbnQocGRldi0+ZGV2LnBhcmVudCk7Cj4gPiA+ID4gKwo+ID4gPiA+\n" + "ICsgICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGVkcyk7IGkrKykgewo+ID4gPiA+\n" + "ICsgICAgICAgICAgICAgICBsZWRzW2ldLmNkZXYubmFtZSA9IGxlZHNbaV0ubmFtZTsKPiA+ID4g\n" + "PiArICAgICAgICAgICAgICAgbGVkc1tpXS5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gbWVuZjIxYm1j\n" + "X2xlZF9zZXQ7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGxlZHNbaV0uaTJjX2NsaWVudCA9IGky\n" + "Y19jbGllbnQ7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGxlZF9jbGFzc2Rldl9yZWdp\n" + "c3RlcigmcGRldi0+ZGV2LCAmbGVkc1tpXS5jZGV2KTsKPiA+ID4gPiArICAgICAgICAgICAgICAg\n" + "aWYgKHJldCA8IDApCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfZnJl\n" + "ZV9sZWRzOwo+ID4gPiA+ICsgICAgICAgfQo+ID4gPiA+ICsgICAgICAgZGV2X2luZm8oJnBkZXYt\n" + "PmRldiwgIk1FTiAxNDBGMjFQMDAgQk1DIExFRCBkZXZpY2UgZW5hYmxlZFxuIik7Cj4gPiA+ID4g\n" + "Kwo+ID4gPiA+ICsgICAgICAgcmV0dXJuIDA7Cj4gPiA+ID4gKwo+ID4gPiA+ICtlcnJfZnJlZV9s\n" + "ZWRzOgo+ID4gPiA+ICsgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lz\n" + "dGVyIExFRCBkZXZpY2VcbiIpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGZvciAoaSA9IGkg\n" + "LSAxOyBpID49IDA7IGktLSkKPiA+ID4gPiArICAgICAgICAgICAgICAgbGVkX2NsYXNzZGV2X3Vu\n" + "cmVnaXN0ZXIoJmxlZHNbaV0uY2Rldik7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgcmV0dXJu\n" + "IHJldDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBtZW5mMjFibWNf\n" + "bGVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gPiA+ICt7Cj4gPiA+\n" + "ID4gKyAgICAgICBpbnQgaTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBp\n" + "IDwgQVJSQVlfU0laRShsZWRzKTsgaSsrKQo+ID4gPiA+ICsgICAgICAgICAgICAgICBsZWRfY2xh\n" + "c3NkZXZfdW5yZWdpc3RlcigmbGVkc1tpXS5jZGV2KTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAg\n" + "ICByZXR1cm4gMDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIHN0cnVjdCBw\n" + "bGF0Zm9ybV9kcml2ZXIgbWVuZjIxYm1jX2xlZCA9IHsKPiA+ID4gPiArICAgICAgIC5wcm9iZSAg\n" + "ICAgICAgICA9IG1lbmYyMWJtY19sZWRfcHJvYmUsCj4gPiA+ID4gKyAgICAgICAucmVtb3ZlICAg\n" + "ICAgICAgPSBtZW5mMjFibWNfbGVkX3JlbW92ZSwKPiA+ID4gPiArICAgICAgIC5kcml2ZXIgICAg\n" + "ICAgICA9IHsKPiA+ID4gPiArICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIm1lbmYy\n" + "MWJtY19sZWQiLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAub3duZXIgICAgICAgICAgPSBUSElT\n" + "X01PRFVMRSwKPiA+ID4gPiArICAgICAgIH0sCj4gPiA+ID4gK307Cj4gPiA+ID4gKwo+ID4gPiA+\n" + "ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1lbmYyMWJtY19sZWQpOwo+ID4gPiA+ICsKPiA+ID4g\n" + "PiArTU9EVUxFX0FVVEhPUigiQW5kcmVhcyBXZXJuZXIgPGFuZHJlYXMud2VybmVyQG1lbi5kZT4i\n" + "KTsKPiA+ID4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNRU4gMTRGMDIxUDAwIEJNQyBsZWQgZHJp\n" + "dmVyIik7Cj4gPiA+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiA+ID4gPiArTU9EVUxF\n" + "X0FMSUFTKCJwbGF0Zm9ybTptZW5mMjFibWNfbGVkIik7Cj4gPiA+ID4KPiA+IAoKLS0gCkxlZSBK\n" + "b25lcwpMaW5hcm8gU1RNaWNyb2VsZWN0cm9uaWNzIExhbmRpbmcgVGVhbSBMZWFkCkxpbmFyby5v\n" + "cmcg4pSCIE9wZW4gc291cmNlIHNvZnR3YXJlIGZvciBBUk0gU29DcwpGb2xsb3cgTGluYXJvOiBG\n" + "YWNlYm9vayB8IFR3aXR0ZXIgfCBCbG9nCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f\n" + "X19fX19fX19fX19fX19fXwpsbS1zZW5zb3JzIG1haWxpbmcgbGlzdApsbS1zZW5zb3JzQGxtLXNl\n" + "bnNvcnMub3JnCmh0dHA6Ly9saXN0cy5sbS1zZW5zb3JzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xt\n" + LXNlbnNvcnM -2a0065cd270fc66282ecd77a9e891ea10153d25be5e00b03f4c8e807bee030e4 +130504f0fa740ccbb1de3c8b0fc502d7924fd29d4af4ad27576419264416b65d
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.