diff for duplicates of <20140829065915.GZ24579@lee--X1> diff --git a/a/1.txt b/N1/1.txt index e00f2ca..f6c9c33 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -198,3 +198,7 @@ Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog +-- +To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/a/content_digest b/N1/content_digest index 824e483..dc72872 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -215,6 +215,10 @@ "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 + "Follow Linaro: Facebook | Twitter | Blog\n" + "--\n" + "To unsubscribe from this list: send the line \"unsubscribe linux-watchdog\" in\n" + "the body of a message to majordomo@vger.kernel.org\n" + More majordomo info at http://vger.kernel.org/majordomo-info.html -756a276e16292d2d16f5b30d992f710ef1779ea7e5464856b9187acde2507448 +4a4a6ae0a3d4e63251fd21bd883537f1d461376a73fc99e6d135030264daca83
diff --git a/a/1.txt b/N2/1.txt index e00f2ca..245657d 100644 --- a/a/1.txt +++ b/N2/1.txt @@ -1,200 +1,127 @@ -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. - -> > 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 +T24gVGh1LCAyOCBBdWcgMjAxNCwgQnJ5YW4gV3Ugd3JvdGU6Cgo+IE9uIFdlZCwgQXVnIDI3LCAy +MDE0IGF0IDEwOjUyIEFNLCBBbmRyZWFzIFdlcm5lciA8YW5kcmVhcy53ZXJuZXJAbWVuLmRlPiB3 +cm90ZToKPiA+IEFkZGVkIGRyaXZlciB0byBzdXBwb3J0IHRoZSAxNEYwMjFQMDAgQk1DIExFRHMu +Cj4gPiBUaGUgQk1DIGlzIGEgQm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyIGluY2x1ZGluZyBm +b3VyIExFRHMgd2hpY2gKPiA+IGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmLgo+ID4KPiAKPiBQ +bGVhc2UgZ28gYWhlYWQgd2l0aCBteSBBY2sKPiBBY2tlZC1ieTogQnJ5YW4gV3UgPGNvb2xvbmV5 +QGdtYWlsLmNvbT4KPiAKPiBMZWUsIHdpbGwgeW91IG1lcmdlIHRoaXMgdGhyb3VnaCB5b3VyIHRy +ZWU/IEkgdGhpbmsgd2UgZG8gdGhhdCBpbiBvbmUKPiBzaG90IGlzIGJldHRlci4KClllcywgdGhh +dCdzIGZpbmUuICBQdWxsLXJlcXVlc3QgdG8gZm9sbG93LgoKPiA+IFNpZ25lZC1vZmYtYnk6IEFu +ZHJlYXMgV2VybmVyIDxhbmRyZWFzLndlcm5lckBtZW4uZGU+Cj4gPiAtLS0KPiA+ICBkcml2ZXJz +L2xlZHMvS2NvbmZpZyAgICAgICAgICB8ICAgOSArKysKPiA+ICBkcml2ZXJzL2xlZHMvTWFrZWZp +bGUgICAgICAgICB8ICAgMSArCj4gPiAgZHJpdmVycy9sZWRzL2xlZHMtbWVuZjIxYm1jLmMgfCAx +MzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgMyBmaWxl +cyBjaGFuZ2VkLCAxNDEgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 +ZXJzL2xlZHMvbGVkcy1tZW5mMjFibWMuYwo+ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xl +ZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCj4gPiBpbmRleCAyN2NmMGNkLi5lYzAz +NDU3IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKPiA+ICsrKyBiL2RyaXZl +cnMvbGVkcy9LY29uZmlnCj4gPiBAQCAtNDU4LDYgKzQ1OCwxNSBAQCBjb25maWcgTEVEU19PVDIw +MAo+ID4gICAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIExFRHMg +b24gdGhlIEJhY2htYW5uIE9UMjAwLgo+ID4gICAgICAgICAgIFNheSBZIHRvIGVuYWJsZSBMRURz +IG9uIHRoZSBCYWNobWFubiBPVDIwMC4KPiA+Cj4gPiArY29uZmlnIExFRFNfTUVORjIxQk1DCj4g +PiArICAgICAgIHRyaXN0YXRlICJMRUQgc3VwcG9ydCBmb3IgdGhlIE1FTiAxNEYwMjFQMDAgQk1D +Igo+ID4gKyAgICAgICBkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgTUZEX01FTkYyMUJNQwo+ID4g +KyAgICAgICBoZWxwCj4gPiArICAgICAgICAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQg +Zm9yIHRoZSBNRU4gMTRGMDIxUDAwIEJNQyBMRURzLgo+ID4gKwo+ID4gKyAgICAgICAgIFRoaXMg +ZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbyB0aGUgbW9kdWxlCj4g +PiArICAgICAgICAgd2lsbCBiZSBjYWxsZWQgbGVkcy1tZW5mMjFibWMuCj4gPiArCj4gPiAgY29t +bWVudCAiTEVEIGRyaXZlciBmb3IgYmxpbmsoMSkgVVNCIFJHQiBMRUQgaXMgdW5kZXIgU3BlY2lh +bCBISUQgZHJpdmVycyAoSElEX1RISU5HTSkiCj4gPgo+ID4gIGNvbmZpZyBMRURTX0JMSU5LTQo+ +ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZSBiL2RyaXZlcnMvbGVkcy9NYWtl +ZmlsZQo+ID4gaW5kZXggM2MwMzY2Ni4uY2FkYzQzMyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMv +bGVkcy9NYWtlZmlsZQo+ID4gKysrIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCj4gPiBAQCAtNTMs +NiArNTMsNyBAQCBvYmotJChDT05GSUdfTEVEU19NQVg4OTk3KSAgICAgICAgICAgICs9IGxlZHMt +bWF4ODk5Ny5vCj4gPiAgb2JqLSQoQ09ORklHX0xFRFNfTE0zNTV4KSAgICAgICAgICAgICAgKz0g +bGVkcy1sbTM1NXgubwo+ID4gIG9iai0kKENPTkZJR19MRURTX0JMSU5LTSkgICAgICAgICAgICAg +ICs9IGxlZHMtYmxpbmttLm8KPiA+ICBvYmotJChDT05GSUdfTEVEU19WRVJTQVRJTEUpICAgICAg +ICAgICArPSBsZWRzLXZlcnNhdGlsZS5vCj4gPiArb2JqLSQoQ09ORklHX0xFRFNfTUVORjIxQk1D +KSAgICAgICAgICAgKz0gbGVkcy1tZW5mMjFibWMubwo+ID4KPiA+ICAjIExFRCBTUEkgRHJpdmVy +cwo+ID4gIG9iai0kKENPTkZJR19MRURTX0RBQzEyNFMwODUpICAgICAgICAgICs9IGxlZHMtZGFj +MTI0czA4NS5vCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtbWVuZjIxYm1jLmMg +Yi9kcml2ZXJzL2xlZHMvbGVkcy1tZW5mMjFibWMuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK +PiA+IGluZGV4IDAwMDAwMDAuLjg5ZGQ1NzcKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2Ry +aXZlcnMvbGVkcy9sZWRzLW1lbmYyMWJtYy5jCj4gPiBAQCAtMCwwICsxLDEzMSBAQAo+ID4gKy8q +Cj4gPiArICogIE1FTiAxNEYwMjFQMDAgQm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyIChCTUMp +IExFRHMgRHJpdmVyLgo+ID4gKyAqCj4gPiArICogIFRoaXMgaXMgdGhlIGNvcmUgTEVEIGRyaXZl +ciBvZiB0aGUgTUVOIDE0RjAyMVAwMCBCTUMuCj4gPiArICogIFRoZXJlIGFyZSBmb3VyIExFRHMg +YXZhaWxhYmxlIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmLgo+ID4gKyAqICBTVEFU +VVMgTEVELCBIT1QgU1dBUCBMRUQsIFVTRVIgTEVEIDEsIFVTRVIgTEVEIDIKPiA+ICsgKgo+ID4g +KyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgTUVOIE1pa3JvIEVsZWt0cm9uaWsgTnVlcm5iZXJnIEdt +YkgKPiA+ICsgKgo+ID4gKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh +biByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKPiA+ICsgKiAgdW5kZXIgIHRoZSB0 +ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg +dGhlCj4gPiArICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIg +b2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgo+ID4gKyAqICBvcHRpb24pIGFueSBsYXRlciB2 +ZXJzaW9uLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ +ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt +X2RldmljZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Cj4gPiArI2luY2x1ZGUgPGxp +bnV4L2kyYy5oPgo+ID4gKwo+ID4gKyNkZWZpbmUgQk1DX0NNRF9MRURfR0VUX1NFVCAgICAweEEw +Cj4gPiArI2RlZmluZSBCTUNfQklUX0xFRF9TVEFUVVMgICAgIEJJVCgwKQo+ID4gKyNkZWZpbmUg +Qk1DX0JJVF9MRURfSE9UU1dBUCAgICBCSVQoMSkKPiA+ICsjZGVmaW5lIEJNQ19CSVRfTEVEX1VT +RVIxICAgICAgQklUKDIpCj4gPiArI2RlZmluZSBCTUNfQklUX0xFRF9VU0VSMiAgICAgIEJJVCgz +KQo+ID4gKwo+ID4gK3N0cnVjdCBtZW5mMjFibWNfbGVkIHsKPiA+ICsgICAgICAgc3RydWN0IGxl +ZF9jbGFzc2RldiBjZGV2Owo+ID4gKyAgICAgICB1OCBsZWRfYml0Owo+ID4gKyAgICAgICBjb25z +dCBjaGFyICpuYW1lOwo+ID4gKyAgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudDsK +PiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgbWVuZjIxYm1jX2xlZCBsZWRzW10gPSB7 +Cj4gPiArICAgICAgIHsKPiA+ICsgICAgICAgICAgICAgICAubmFtZSA9ICJtZW5mMjFibWM6bGVk +X3N0YXR1cyIsCj4gPiArICAgICAgICAgICAgICAgLmxlZF9iaXQgPSBCTUNfQklUX0xFRF9TVEFU +VVMsCj4gPiArICAgICAgIH0sCj4gPiArICAgICAgIHsKPiA+ICsgICAgICAgICAgICAgICAubmFt +ZSA9ICJtZW5mMjFibWM6bGVkX2hvdHN3YXAiLAo+ID4gKyAgICAgICAgICAgICAgIC5sZWRfYml0 +ID0gQk1DX0JJVF9MRURfSE9UU1dBUCwKPiA+ICsgICAgICAgfSwKPiA+ICsgICAgICAgewo+ID4g +KyAgICAgICAgICAgICAgIC5uYW1lID0gIm1lbmYyMWJtYzpsZWRfdXNlcjEiLAo+ID4gKyAgICAg +ICAgICAgICAgIC5sZWRfYml0ID0gQk1DX0JJVF9MRURfVVNFUjEsCj4gPiArICAgICAgIH0sCj4g +PiArICAgICAgIHsKPiA+ICsgICAgICAgICAgICAgICAubmFtZSA9ICJtZW5mMjFibWM6bGVkX3Vz +ZXIyIiwKPiA+ICsgICAgICAgICAgICAgICAubGVkX2JpdCA9IEJNQ19CSVRfTEVEX1VTRVIyLAo+ +ID4gKyAgICAgICB9Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgREVGSU5FX01VVEVYKGxlZF9s +b2NrKTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK21lbmYyMWJtY19sZWRfc2V0KHN0cnVj +dCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQo+ID4g +K3sKPiA+ICsgICAgICAgaW50IGxlZF92YWw7Cj4gPiArICAgICAgIHN0cnVjdCBtZW5mMjFibWNf +bGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCj4gPiArICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1lbmYyMWJtY19sZWQsIGNkZXYpOwo+ID4gKwo+ +ID4gKyAgICAgICBtdXRleF9sb2NrKCZsZWRfbG9jayk7Cj4gPiArICAgICAgIGxlZF92YWwgPSBp +MmNfc21idXNfcmVhZF9ieXRlX2RhdGEobGVkLT5pMmNfY2xpZW50LAo+ID4gKyAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJNQ19DTURfTEVEX0dFVF9TRVQpOwo+ID4g +KyAgICAgICBpZiAobGVkX3ZhbCA8IDApCj4gPiArICAgICAgICAgICAgICAgZ290byBlcnJfb3V0 +Owo+ID4gKwo+ID4gKyAgICAgICBpZiAodmFsdWUgPT0gTEVEX09GRikKPiA+ICsgICAgICAgICAg +ICAgICBsZWRfdmFsICY9IH5sZWQtPmxlZF9iaXQ7Cj4gPiArICAgICAgIGVsc2UKPiA+ICsgICAg +ICAgICAgICAgICBsZWRfdmFsIHw9IGxlZC0+bGVkX2JpdDsKPiA+ICsKPiA+ICsgICAgICAgaTJj +X3NtYnVzX3dyaXRlX2J5dGVfZGF0YShsZWQtPmkyY19jbGllbnQsCj4gPiArICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgQk1DX0NNRF9MRURfR0VUX1NFVCwgbGVkX3ZhbCk7Cj4gPiAr +ZXJyX291dDoKPiA+ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZsZWRfbG9jayk7Cj4gPiArfQo+ID4g +Kwo+ID4gK3N0YXRpYyBpbnQgbWVuZjIxYm1jX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 +aWNlICpwZGV2KQo+ID4gK3sKPiA+ICsgICAgICAgaW50IGk7Cj4gPiArICAgICAgIGludCByZXQ7 +Cj4gPiArICAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50ID0gdG9faTJjX2NsaWVu +dChwZGV2LT5kZXYucGFyZW50KTsKPiA+ICsKPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IEFS +UkFZX1NJWkUobGVkcyk7IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGxlZHNbaV0uY2Rldi5u +YW1lID0gbGVkc1tpXS5uYW1lOwo+ID4gKyAgICAgICAgICAgICAgIGxlZHNbaV0uY2Rldi5icmln +aHRuZXNzX3NldCA9IG1lbmYyMWJtY19sZWRfc2V0Owo+ID4gKyAgICAgICAgICAgICAgIGxlZHNb +aV0uaTJjX2NsaWVudCA9IGkyY19jbGllbnQ7Cj4gPiArICAgICAgICAgICAgICAgcmV0ID0gbGVk +X2NsYXNzZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZsZWRzW2ldLmNkZXYpOwo+ID4gKyAgICAg +ICAgICAgICAgIGlmIChyZXQgPCAwKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBl +cnJfZnJlZV9sZWRzOwo+ID4gKyAgICAgICB9Cj4gPiArICAgICAgIGRldl9pbmZvKCZwZGV2LT5k +ZXYsICJNRU4gMTQwRjIxUDAwIEJNQyBMRUQgZGV2aWNlIGVuYWJsZWRcbiIpOwo+ID4gKwo+ID4g +KyAgICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICtlcnJfZnJlZV9sZWRzOgo+ID4gKyAgICAgICBk +ZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgTEVEIGRldmljZVxuIik7Cj4g +PiArCj4gPiArICAgICAgIGZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkKPiA+ICsgICAgICAg +ICAgICAgICBsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkc1tpXS5jZGV2KTsKPiA+ICsKPiA+ +ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtZW5mMjFi +bWNfbGVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICsg +ICAgICAgaW50IGk7Cj4gPiArCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF +KGxlZHMpOyBpKyspCj4gPiArICAgICAgICAgICAgICAgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIo +JmxlZHNbaV0uY2Rldik7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsK +PiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZW5mMjFibWNfbGVkID0gewo+ID4g +KyAgICAgICAucHJvYmUgICAgICAgICAgPSBtZW5mMjFibWNfbGVkX3Byb2JlLAo+ID4gKyAgICAg +ICAucmVtb3ZlICAgICAgICAgPSBtZW5mMjFibWNfbGVkX3JlbW92ZSwKPiA+ICsgICAgICAgLmRy +aXZlciAgICAgICAgID0gewo+ID4gKyAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJt +ZW5mMjFibWNfbGVkIiwKPiA+ICsgICAgICAgICAgICAgICAub3duZXIgICAgICAgICAgPSBUSElT +X01PRFVMRSwKPiA+ICsgICAgICAgfSwKPiA+ICt9Owo+ID4gKwo+ID4gK21vZHVsZV9wbGF0Zm9y +bV9kcml2ZXIobWVuZjIxYm1jX2xlZCk7Cj4gPiArCj4gPiArTU9EVUxFX0FVVEhPUigiQW5kcmVh +cyBXZXJuZXIgPGFuZHJlYXMud2VybmVyQG1lbi5kZT4iKTsKPiA+ICtNT0RVTEVfREVTQ1JJUFRJ +T04oIk1FTiAxNEYwMjFQMDAgQk1DIGxlZCBkcml2ZXIiKTsKPiA+ICtNT0RVTEVfTElDRU5TRSgi +R1BMIHYyIik7Cj4gPiArTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptZW5mMjFibWNfbGVkIik7Cj4g +PgoKLS0gCkxlZSBKb25lcwpMaW5hcm8gU1RNaWNyb2VsZWN0cm9uaWNzIExhbmRpbmcgVGVhbSBM +ZWFkCkxpbmFyby5vcmcg4pSCIE9wZW4gc291cmNlIHNvZnR3YXJlIGZvciBBUk0gU29DcwpGb2xs +b3cgTGluYXJvOiBGYWNlYm9vayB8IFR3aXR0ZXIgfCBCbG9nCgpfX19fX19fX19fX19fX19fX19f +X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsbS1zZW5zb3JzIG1haWxpbmcgbGlzdApsbS1z +ZW5zb3JzQGxtLXNlbnNvcnMub3JnCmh0dHA6Ly9saXN0cy5sbS1zZW5zb3JzLm9yZy9tYWlsbWFu +L2xpc3RpbmZvL2xtLXNlbnNvcnM diff --git a/a/content_digest b/N2/content_digest index 824e483..dc81a5b 100644 --- a/a/content_digest +++ b/N2/content_digest @@ -2,8 +2,8 @@ "ref\0e91e4f47cda55c03fa1d0a54c0891341d73adfa6.1409161615.git.andreas.werner@men.de\0" "ref\0CAK5ve-+zjZBw_HXWm9kGE5Vbv=R2SO4P2dB_0opzLHTAV-BQ0Q@mail.gmail.com\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 07:59:15 +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 06:59:15 +0000\0" "To\0Bryan Wu <cooloney@gmail.com>\0" "Cc\0Andreas Werner <andreas.werner@men.de>" lkml <linux-kernel@vger.kernel.org> @@ -16,205 +16,132 @@ " Linux LED Subsystem <linux-leds@vger.kernel.org>\0" "\00:1\0" "b\0" - "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" - "> > 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" - "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 + "T24gVGh1LCAyOCBBdWcgMjAxNCwgQnJ5YW4gV3Ugd3JvdGU6Cgo+IE9uIFdlZCwgQXVnIDI3LCAy\n" + "MDE0IGF0IDEwOjUyIEFNLCBBbmRyZWFzIFdlcm5lciA8YW5kcmVhcy53ZXJuZXJAbWVuLmRlPiB3\n" + "cm90ZToKPiA+IEFkZGVkIGRyaXZlciB0byBzdXBwb3J0IHRoZSAxNEYwMjFQMDAgQk1DIExFRHMu\n" + "Cj4gPiBUaGUgQk1DIGlzIGEgQm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyIGluY2x1ZGluZyBm\n" + "b3VyIExFRHMgd2hpY2gKPiA+IGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmLgo+ID4KPiAKPiBQ\n" + "bGVhc2UgZ28gYWhlYWQgd2l0aCBteSBBY2sKPiBBY2tlZC1ieTogQnJ5YW4gV3UgPGNvb2xvbmV5\n" + "QGdtYWlsLmNvbT4KPiAKPiBMZWUsIHdpbGwgeW91IG1lcmdlIHRoaXMgdGhyb3VnaCB5b3VyIHRy\n" + "ZWU/IEkgdGhpbmsgd2UgZG8gdGhhdCBpbiBvbmUKPiBzaG90IGlzIGJldHRlci4KClllcywgdGhh\n" + "dCdzIGZpbmUuICBQdWxsLXJlcXVlc3QgdG8gZm9sbG93LgoKPiA+IFNpZ25lZC1vZmYtYnk6IEFu\n" + "ZHJlYXMgV2VybmVyIDxhbmRyZWFzLndlcm5lckBtZW4uZGU+Cj4gPiAtLS0KPiA+ICBkcml2ZXJz\n" + "L2xlZHMvS2NvbmZpZyAgICAgICAgICB8ICAgOSArKysKPiA+ICBkcml2ZXJzL2xlZHMvTWFrZWZp\n" + "bGUgICAgICAgICB8ICAgMSArCj4gPiAgZHJpdmVycy9sZWRzL2xlZHMtbWVuZjIxYm1jLmMgfCAx\n" + "MzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgMyBmaWxl\n" + "cyBjaGFuZ2VkLCAxNDEgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2\n" + "ZXJzL2xlZHMvbGVkcy1tZW5mMjFibWMuYwo+ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xl\n" + "ZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCj4gPiBpbmRleCAyN2NmMGNkLi5lYzAz\n" + "NDU3IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKPiA+ICsrKyBiL2RyaXZl\n" + "cnMvbGVkcy9LY29uZmlnCj4gPiBAQCAtNDU4LDYgKzQ1OCwxNSBAQCBjb25maWcgTEVEU19PVDIw\n" + "MAo+ID4gICAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIExFRHMg\n" + "b24gdGhlIEJhY2htYW5uIE9UMjAwLgo+ID4gICAgICAgICAgIFNheSBZIHRvIGVuYWJsZSBMRURz\n" + "IG9uIHRoZSBCYWNobWFubiBPVDIwMC4KPiA+Cj4gPiArY29uZmlnIExFRFNfTUVORjIxQk1DCj4g\n" + "PiArICAgICAgIHRyaXN0YXRlICJMRUQgc3VwcG9ydCBmb3IgdGhlIE1FTiAxNEYwMjFQMDAgQk1D\n" + "Igo+ID4gKyAgICAgICBkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgTUZEX01FTkYyMUJNQwo+ID4g\n" + "KyAgICAgICBoZWxwCj4gPiArICAgICAgICAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQg\n" + "Zm9yIHRoZSBNRU4gMTRGMDIxUDAwIEJNQyBMRURzLgo+ID4gKwo+ID4gKyAgICAgICAgIFRoaXMg\n" + "ZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbyB0aGUgbW9kdWxlCj4g\n" + "PiArICAgICAgICAgd2lsbCBiZSBjYWxsZWQgbGVkcy1tZW5mMjFibWMuCj4gPiArCj4gPiAgY29t\n" + "bWVudCAiTEVEIGRyaXZlciBmb3IgYmxpbmsoMSkgVVNCIFJHQiBMRUQgaXMgdW5kZXIgU3BlY2lh\n" + "bCBISUQgZHJpdmVycyAoSElEX1RISU5HTSkiCj4gPgo+ID4gIGNvbmZpZyBMRURTX0JMSU5LTQo+\n" + "ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZSBiL2RyaXZlcnMvbGVkcy9NYWtl\n" + "ZmlsZQo+ID4gaW5kZXggM2MwMzY2Ni4uY2FkYzQzMyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMv\n" + "bGVkcy9NYWtlZmlsZQo+ID4gKysrIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCj4gPiBAQCAtNTMs\n" + "NiArNTMsNyBAQCBvYmotJChDT05GSUdfTEVEU19NQVg4OTk3KSAgICAgICAgICAgICs9IGxlZHMt\n" + "bWF4ODk5Ny5vCj4gPiAgb2JqLSQoQ09ORklHX0xFRFNfTE0zNTV4KSAgICAgICAgICAgICAgKz0g\n" + "bGVkcy1sbTM1NXgubwo+ID4gIG9iai0kKENPTkZJR19MRURTX0JMSU5LTSkgICAgICAgICAgICAg\n" + "ICs9IGxlZHMtYmxpbmttLm8KPiA+ICBvYmotJChDT05GSUdfTEVEU19WRVJTQVRJTEUpICAgICAg\n" + "ICAgICArPSBsZWRzLXZlcnNhdGlsZS5vCj4gPiArb2JqLSQoQ09ORklHX0xFRFNfTUVORjIxQk1D\n" + "KSAgICAgICAgICAgKz0gbGVkcy1tZW5mMjFibWMubwo+ID4KPiA+ICAjIExFRCBTUEkgRHJpdmVy\n" + "cwo+ID4gIG9iai0kKENPTkZJR19MRURTX0RBQzEyNFMwODUpICAgICAgICAgICs9IGxlZHMtZGFj\n" + "MTI0czA4NS5vCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtbWVuZjIxYm1jLmMg\n" + "Yi9kcml2ZXJzL2xlZHMvbGVkcy1tZW5mMjFibWMuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK\n" + "PiA+IGluZGV4IDAwMDAwMDAuLjg5ZGQ1NzcKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2Ry\n" + "aXZlcnMvbGVkcy9sZWRzLW1lbmYyMWJtYy5jCj4gPiBAQCAtMCwwICsxLDEzMSBAQAo+ID4gKy8q\n" + "Cj4gPiArICogIE1FTiAxNEYwMjFQMDAgQm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyIChCTUMp\n" + "IExFRHMgRHJpdmVyLgo+ID4gKyAqCj4gPiArICogIFRoaXMgaXMgdGhlIGNvcmUgTEVEIGRyaXZl\n" + "ciBvZiB0aGUgTUVOIDE0RjAyMVAwMCBCTUMuCj4gPiArICogIFRoZXJlIGFyZSBmb3VyIExFRHMg\n" + "YXZhaWxhYmxlIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmLgo+ID4gKyAqICBTVEFU\n" + "VVMgTEVELCBIT1QgU1dBUCBMRUQsIFVTRVIgTEVEIDEsIFVTRVIgTEVEIDIKPiA+ICsgKgo+ID4g\n" + "KyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgTUVOIE1pa3JvIEVsZWt0cm9uaWsgTnVlcm5iZXJnIEdt\n" + "YkgKPiA+ICsgKgo+ID4gKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh\n" + "biByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKPiA+ICsgKiAgdW5kZXIgIHRoZSB0\n" + "ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg\n" + "dGhlCj4gPiArICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIg\n" + "b2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgo+ID4gKyAqICBvcHRpb24pIGFueSBsYXRlciB2\n" + "ZXJzaW9uLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+\n" + "ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt\n" + "X2RldmljZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Cj4gPiArI2luY2x1ZGUgPGxp\n" + "bnV4L2kyYy5oPgo+ID4gKwo+ID4gKyNkZWZpbmUgQk1DX0NNRF9MRURfR0VUX1NFVCAgICAweEEw\n" + "Cj4gPiArI2RlZmluZSBCTUNfQklUX0xFRF9TVEFUVVMgICAgIEJJVCgwKQo+ID4gKyNkZWZpbmUg\n" + "Qk1DX0JJVF9MRURfSE9UU1dBUCAgICBCSVQoMSkKPiA+ICsjZGVmaW5lIEJNQ19CSVRfTEVEX1VT\n" + "RVIxICAgICAgQklUKDIpCj4gPiArI2RlZmluZSBCTUNfQklUX0xFRF9VU0VSMiAgICAgIEJJVCgz\n" + "KQo+ID4gKwo+ID4gK3N0cnVjdCBtZW5mMjFibWNfbGVkIHsKPiA+ICsgICAgICAgc3RydWN0IGxl\n" + "ZF9jbGFzc2RldiBjZGV2Owo+ID4gKyAgICAgICB1OCBsZWRfYml0Owo+ID4gKyAgICAgICBjb25z\n" + "dCBjaGFyICpuYW1lOwo+ID4gKyAgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudDsK\n" + "PiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgbWVuZjIxYm1jX2xlZCBsZWRzW10gPSB7\n" + "Cj4gPiArICAgICAgIHsKPiA+ICsgICAgICAgICAgICAgICAubmFtZSA9ICJtZW5mMjFibWM6bGVk\n" + "X3N0YXR1cyIsCj4gPiArICAgICAgICAgICAgICAgLmxlZF9iaXQgPSBCTUNfQklUX0xFRF9TVEFU\n" + "VVMsCj4gPiArICAgICAgIH0sCj4gPiArICAgICAgIHsKPiA+ICsgICAgICAgICAgICAgICAubmFt\n" + "ZSA9ICJtZW5mMjFibWM6bGVkX2hvdHN3YXAiLAo+ID4gKyAgICAgICAgICAgICAgIC5sZWRfYml0\n" + "ID0gQk1DX0JJVF9MRURfSE9UU1dBUCwKPiA+ICsgICAgICAgfSwKPiA+ICsgICAgICAgewo+ID4g\n" + "KyAgICAgICAgICAgICAgIC5uYW1lID0gIm1lbmYyMWJtYzpsZWRfdXNlcjEiLAo+ID4gKyAgICAg\n" + "ICAgICAgICAgIC5sZWRfYml0ID0gQk1DX0JJVF9MRURfVVNFUjEsCj4gPiArICAgICAgIH0sCj4g\n" + "PiArICAgICAgIHsKPiA+ICsgICAgICAgICAgICAgICAubmFtZSA9ICJtZW5mMjFibWM6bGVkX3Vz\n" + "ZXIyIiwKPiA+ICsgICAgICAgICAgICAgICAubGVkX2JpdCA9IEJNQ19CSVRfTEVEX1VTRVIyLAo+\n" + "ID4gKyAgICAgICB9Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgREVGSU5FX01VVEVYKGxlZF9s\n" + "b2NrKTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK21lbmYyMWJtY19sZWRfc2V0KHN0cnVj\n" + "dCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQo+ID4g\n" + "K3sKPiA+ICsgICAgICAgaW50IGxlZF92YWw7Cj4gPiArICAgICAgIHN0cnVjdCBtZW5mMjFibWNf\n" + "bGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCj4gPiArICAgICAgICAgICAgICAgICAg\n" + "ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1lbmYyMWJtY19sZWQsIGNkZXYpOwo+ID4gKwo+\n" + "ID4gKyAgICAgICBtdXRleF9sb2NrKCZsZWRfbG9jayk7Cj4gPiArICAgICAgIGxlZF92YWwgPSBp\n" + "MmNfc21idXNfcmVhZF9ieXRlX2RhdGEobGVkLT5pMmNfY2xpZW50LAo+ID4gKyAgICAgICAgICAg\n" + "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJNQ19DTURfTEVEX0dFVF9TRVQpOwo+ID4g\n" + "KyAgICAgICBpZiAobGVkX3ZhbCA8IDApCj4gPiArICAgICAgICAgICAgICAgZ290byBlcnJfb3V0\n" + "Owo+ID4gKwo+ID4gKyAgICAgICBpZiAodmFsdWUgPT0gTEVEX09GRikKPiA+ICsgICAgICAgICAg\n" + "ICAgICBsZWRfdmFsICY9IH5sZWQtPmxlZF9iaXQ7Cj4gPiArICAgICAgIGVsc2UKPiA+ICsgICAg\n" + "ICAgICAgICAgICBsZWRfdmFsIHw9IGxlZC0+bGVkX2JpdDsKPiA+ICsKPiA+ICsgICAgICAgaTJj\n" + "X3NtYnVzX3dyaXRlX2J5dGVfZGF0YShsZWQtPmkyY19jbGllbnQsCj4gPiArICAgICAgICAgICAg\n" + "ICAgICAgICAgICAgICAgICAgICAgQk1DX0NNRF9MRURfR0VUX1NFVCwgbGVkX3ZhbCk7Cj4gPiAr\n" + "ZXJyX291dDoKPiA+ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZsZWRfbG9jayk7Cj4gPiArfQo+ID4g\n" + "Kwo+ID4gK3N0YXRpYyBpbnQgbWVuZjIxYm1jX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2\n" + "aWNlICpwZGV2KQo+ID4gK3sKPiA+ICsgICAgICAgaW50IGk7Cj4gPiArICAgICAgIGludCByZXQ7\n" + "Cj4gPiArICAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50ID0gdG9faTJjX2NsaWVu\n" + "dChwZGV2LT5kZXYucGFyZW50KTsKPiA+ICsKPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IEFS\n" + "UkFZX1NJWkUobGVkcyk7IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGxlZHNbaV0uY2Rldi5u\n" + "YW1lID0gbGVkc1tpXS5uYW1lOwo+ID4gKyAgICAgICAgICAgICAgIGxlZHNbaV0uY2Rldi5icmln\n" + "aHRuZXNzX3NldCA9IG1lbmYyMWJtY19sZWRfc2V0Owo+ID4gKyAgICAgICAgICAgICAgIGxlZHNb\n" + "aV0uaTJjX2NsaWVudCA9IGkyY19jbGllbnQ7Cj4gPiArICAgICAgICAgICAgICAgcmV0ID0gbGVk\n" + "X2NsYXNzZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZsZWRzW2ldLmNkZXYpOwo+ID4gKyAgICAg\n" + "ICAgICAgICAgIGlmIChyZXQgPCAwKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBl\n" + "cnJfZnJlZV9sZWRzOwo+ID4gKyAgICAgICB9Cj4gPiArICAgICAgIGRldl9pbmZvKCZwZGV2LT5k\n" + "ZXYsICJNRU4gMTQwRjIxUDAwIEJNQyBMRUQgZGV2aWNlIGVuYWJsZWRcbiIpOwo+ID4gKwo+ID4g\n" + "KyAgICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICtlcnJfZnJlZV9sZWRzOgo+ID4gKyAgICAgICBk\n" + "ZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgTEVEIGRldmljZVxuIik7Cj4g\n" + "PiArCj4gPiArICAgICAgIGZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkKPiA+ICsgICAgICAg\n" + "ICAgICAgICBsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkc1tpXS5jZGV2KTsKPiA+ICsKPiA+\n" + "ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtZW5mMjFi\n" + "bWNfbGVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICsg\n" + "ICAgICAgaW50IGk7Cj4gPiArCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF\n" + "KGxlZHMpOyBpKyspCj4gPiArICAgICAgICAgICAgICAgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIo\n" + "JmxlZHNbaV0uY2Rldik7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsK\n" + "PiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZW5mMjFibWNfbGVkID0gewo+ID4g\n" + "KyAgICAgICAucHJvYmUgICAgICAgICAgPSBtZW5mMjFibWNfbGVkX3Byb2JlLAo+ID4gKyAgICAg\n" + "ICAucmVtb3ZlICAgICAgICAgPSBtZW5mMjFibWNfbGVkX3JlbW92ZSwKPiA+ICsgICAgICAgLmRy\n" + "aXZlciAgICAgICAgID0gewo+ID4gKyAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJt\n" + "ZW5mMjFibWNfbGVkIiwKPiA+ICsgICAgICAgICAgICAgICAub3duZXIgICAgICAgICAgPSBUSElT\n" + "X01PRFVMRSwKPiA+ICsgICAgICAgfSwKPiA+ICt9Owo+ID4gKwo+ID4gK21vZHVsZV9wbGF0Zm9y\n" + "bV9kcml2ZXIobWVuZjIxYm1jX2xlZCk7Cj4gPiArCj4gPiArTU9EVUxFX0FVVEhPUigiQW5kcmVh\n" + "cyBXZXJuZXIgPGFuZHJlYXMud2VybmVyQG1lbi5kZT4iKTsKPiA+ICtNT0RVTEVfREVTQ1JJUFRJ\n" + "T04oIk1FTiAxNEYwMjFQMDAgQk1DIGxlZCBkcml2ZXIiKTsKPiA+ICtNT0RVTEVfTElDRU5TRSgi\n" + "R1BMIHYyIik7Cj4gPiArTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptZW5mMjFibWNfbGVkIik7Cj4g\n" + "PgoKLS0gCkxlZSBKb25lcwpMaW5hcm8gU1RNaWNyb2VsZWN0cm9uaWNzIExhbmRpbmcgVGVhbSBM\n" + "ZWFkCkxpbmFyby5vcmcg4pSCIE9wZW4gc291cmNlIHNvZnR3YXJlIGZvciBBUk0gU29DcwpGb2xs\n" + "b3cgTGluYXJvOiBGYWNlYm9vayB8IFR3aXR0ZXIgfCBCbG9nCgpfX19fX19fX19fX19fX19fX19f\n" + "X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsbS1zZW5zb3JzIG1haWxpbmcgbGlzdApsbS1z\n" + "ZW5zb3JzQGxtLXNlbnNvcnMub3JnCmh0dHA6Ly9saXN0cy5sbS1zZW5zb3JzLm9yZy9tYWlsbWFu\n" + L2xpc3RpbmZvL2xtLXNlbnNvcnM -756a276e16292d2d16f5b30d992f710ef1779ea7e5464856b9187acde2507448 +15b60706bc6833286f6437acf5bd00b09dec99bfeef22661ebf539f3d11ff3d3
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.