diff for duplicates of <4F9E8D8C.9090704@canonical.com> diff --git a/a/1.txt b/N1/1.txt index 70b951d..3733c64 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -3,7 +3,7 @@ On 04/30/2012 01:37 AM, Bryan Wu wrote: > custom RealView LED trigger code to turn LEDs on and off in > response to CPU activity and replace it with a standard trigger. > -> (bryan.wu at canonical.com: +> (bryan.wu@canonical.com: > It introduces several syscore stubs into this trigger. > It also provides ledtrig_cpu trigger event stub in <linux/leds.h>. > Although it was inspired by ARM work, it can be used in other arch.) @@ -124,11 +124,4 @@ I've attached the changes I think you should make. rtg -- -Tim Gardner tim.gardner at canonical.com --------------- next part -------------- -A non-text attachment was scrubbed... -Name: 0001-led-triggers-create-a-trigger-for-CPU-activity.patch -Type: text/x-patch -Size: 7256 bytes -Desc: not available -URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120430/71b769f5/attachment.bin> +Tim Gardner tim.gardner@canonical.com diff --git a/N1/2.hdr b/N1/2.hdr new file mode 100644 index 0000000..4c87cf3 --- /dev/null +++ b/N1/2.hdr @@ -0,0 +1,5 @@ +Content-Type: text/x-patch; + name="0001-led-triggers-create-a-trigger-for-CPU-activity.patch" +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; + filename*0="0001-led-triggers-create-a-trigger-for-CPU-activity.patch" diff --git a/N1/2.txt b/N1/2.txt new file mode 100644 index 0000000..2a20813 --- /dev/null +++ b/N1/2.txt @@ -0,0 +1,254 @@ +>From 37cb1dc95f0af9d9916e856111bd19ecf6688c1c Mon Sep 17 00:00:00 2001 +From: Bryan Wu <bryan.wu@canonical.com> +Date: Mon, 30 Apr 2012 15:37:07 +0800 +Subject: [PATCH] led-triggers: create a trigger for CPU activity + +Attempting to consolidate the ARM LED code, this removes the +custom RealView LED trigger code to turn LEDs on and off in +response to CPU activity and replace it with a standard trigger. + +(bryan.wu@canonical.com: +It introduces several syscore stubs into this trigger. +It also provides ledtrig_cpu trigger event stub in <linux/leds.h>. +Although it was inspired by ARM work, it can be used in other arch.) + +Cc: Richard Purdie <rpurdie@rpsys.net> +Signed-off-by: Linus Walleij <linus.walleij@linaro.org> +Signed-off-by: Bryan Wu <bryan.wu@canonical.com> +Reviewed-by: Jamie Iles <jamie@jamieiles.com> +Tested-by: Jochen Friedrich <jochen@scram.de> +Signed-off-by: Tim Gardner <tim.gardner@canonical.com> +--- + drivers/leds/Kconfig | 10 +++ + drivers/leds/Makefile | 1 + + drivers/leds/ledtrig-cpu.c | 162 ++++++++++++++++++++++++++++++++++++++++++++ + include/linux/leds.h | 16 +++++ + 4 files changed, 189 insertions(+) + create mode 100644 drivers/leds/ledtrig-cpu.c + +diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig +index ff4b8cf..b006d09 100644 +--- a/drivers/leds/Kconfig ++++ b/drivers/leds/Kconfig +@@ -448,6 +448,16 @@ config LEDS_TRIGGER_BACKLIGHT + + If unsure, say N. + ++config LEDS_TRIGGER_CPU ++ tristate "LED CPU Trigger" ++ depends on LEDS_TRIGGERS ++ help ++ This allows LEDs to be controlled by active CPUs. This shows ++ the active CPUs across an array of LEDs so you can see which ++ CPUs are active on the system at any given moment. ++ ++ If unsure, say N. ++ + config LEDS_TRIGGER_GPIO + tristate "LED GPIO Trigger" + depends on LEDS_TRIGGERS +diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile +index 890481c..0a3d5ad 100644 +--- a/drivers/leds/Makefile ++++ b/drivers/leds/Makefile +@@ -55,4 +55,5 @@ obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o + obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o + obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += ledtrig-backlight.o + obj-$(CONFIG_LEDS_TRIGGER_GPIO) += ledtrig-gpio.o ++obj-$(CONFIG_LEDS_TRIGGER_CPU) += ledtrig-cpu.o + obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o +diff --git a/drivers/leds/ledtrig-cpu.c b/drivers/leds/ledtrig-cpu.c +new file mode 100644 +index 0000000..47f5fa5 +--- /dev/null ++++ b/drivers/leds/ledtrig-cpu.c +@@ -0,0 +1,162 @@ ++/* ++ * ledtrig-cpu.c - LED trigger based on CPU activity ++ * ++ * This LED trigger will be registered for each possible CPU and named as ++ * cpu0, cpu1, cpu2, cpu3, etc. ++ * ++ * It can be bound to any LED just like other triggers using either a ++ * board file or via sysfs interface. ++ * ++ * An API named ledtrig_cpu is exported for any user, who want to add CPU ++ * activity indication in their code ++ * ++ * Copyright 2011 Linus Walleij <linus.walleij@linaro.org> ++ * Copyright 2011 - 2012 Bryan Wu <bryan.wu@canonical.com> ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/init.h> ++#include <linux/slab.h> ++#include <linux/percpu.h> ++#include <linux/syscore_ops.h> ++#include <linux/mutex.h> ++#include "leds.h" ++ ++#define MAX_NAME_LEN 8 ++ ++static DEFINE_PER_CPU(struct led_trigger *, cpu_trig); ++static DEFINE_PER_CPU(char [MAX_NAME_LEN], trig_name); ++static DEFINE_PER_CPU(struct mutex, trig_lock); ++ ++/** ++ * ledtrig_cpu - emit a CPU event as a trigger ++ * @evt: CPU event to be emitted ++ * ++ * Emit a CPU event on a CPU core, which will trigger a ++ * binded LED to turn on or turn off. ++ */ ++void ledtrig_cpu(enum cpu_led_event ledevt) ++{ ++ struct mutex *lock = this_cpu_ptr(&trig_lock); ++ struct led_trigger *trig; ++ ++ mutex_lock(lock); ++ ++ trig = __get_cpu_var(cpu_trig); ++ ++ /* Locate the correct CPU LED */ ++ switch (ledevt) { ++ case CPU_LED_IDLE_END: ++ case CPU_LED_START: ++ /* Will turn the LED on, max brightness */ ++ led_trigger_event(trig, LED_FULL); ++ break; ++ ++ case CPU_LED_IDLE_START: ++ case CPU_LED_STOP: ++ case CPU_LED_HALTED: ++ /* Will turn the LED off */ ++ led_trigger_event(trig, LED_OFF); ++ break; ++ ++ default: ++ /* Will leave the LED as it is */ ++ break; ++ } ++ ++ mutex_unlock(lock); ++} ++EXPORT_SYMBOL(ledtrig_cpu); ++ ++static int ledtrig_cpu_syscore_suspend(void) ++{ ++ ledtrig_cpu(CPU_LED_STOP); ++ return 0; ++} ++ ++static void ledtrig_cpu_syscore_resume(void) ++{ ++ ledtrig_cpu(CPU_LED_START); ++} ++ ++static void ledtrig_cpu_syscore_shutdown(void) ++{ ++ ledtrig_cpu(CPU_LED_HALTED); ++} ++ ++static struct syscore_ops ledtrig_cpu_syscore_ops = { ++ .shutdown = ledtrig_cpu_syscore_shutdown, ++ .suspend = ledtrig_cpu_syscore_suspend, ++ .resume = ledtrig_cpu_syscore_resume, ++}; ++ ++static int __init ledtrig_cpu_init(void) ++{ ++ int cpu; ++ ++ /* Supports up to 9999 cpu cores */ ++ BUILD_BUG_ON(CONFIG_NR_CPUS > 9999); ++ ++ /* ++ * Registering CPU led trigger for each CPU core here ++ * ignores CPU hotplug, but after this CPU hotplug works ++ * fine with this trigger. ++ */ ++ for_each_possible_cpu(cpu) { ++ struct led_trigger *trig; ++ char *name = per_cpu(trig_name, cpu); ++ struct mutex *lock = &per_cpu(trig_lock, cpu); ++ ++ mutex_init(lock); ++ ++ snprintf(name, MAX_NAME_LEN, "cpu%d", cpu); ++ ++ mutex_lock(lock); ++ led_trigger_register_simple(name, &trig); ++ per_cpu(cpu_trig, cpu) = trig; ++ mutex_unlock(lock); ++ } ++ ++ register_syscore_ops(&ledtrig_cpu_syscore_ops); ++ ++ pr_info("ledtrig-cpu: registered to indicate activity on CPUs\n"); ++ ++ return 0; ++} ++module_init(ledtrig_cpu_init); ++ ++static void __exit ledtrig_cpu_exit(void) ++{ ++ int cpu; ++ ++ for_each_possible_cpu(cpu) { ++ struct mutex *lock = &per_cpu(trig_lock, cpu); ++ struct led_trigger *trig; ++ char *name; ++ ++ mutex_lock(lock); ++ ++ trig = per_cpu(cpu_trig, cpu); ++ name = per_cpu(trig_name, cpu); ++ ++ led_trigger_unregister_simple(trig); ++ per_cpu(cpu_trig, cpu) = NULL; ++ memset(name, 0, MAX_NAME_LEN); ++ ++ mutex_unlock(lock); ++ } ++ ++ unregister_syscore_ops(&ledtrig_cpu_syscore_ops); ++} ++module_exit(ledtrig_cpu_exit); ++ ++MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>"); ++MODULE_AUTHOR("Bryan Wu <bryan.wu@canonical.com>"); ++MODULE_DESCRIPTION("CPU LED trigger"); ++MODULE_LICENSE("GPL"); +diff --git a/include/linux/leds.h b/include/linux/leds.h +index 5884def..5fae540 100644 +--- a/include/linux/leds.h ++++ b/include/linux/leds.h +@@ -210,4 +210,20 @@ struct gpio_led_platform_data { + struct platform_device *gpio_led_register_device( + int id, const struct gpio_led_platform_data *pdata); + ++enum cpu_led_event { ++ CPU_LED_IDLE_START, /* CPU enters idle */ ++ CPU_LED_IDLE_END, /* CPU idle ends */ ++ CPU_LED_START, /* Machine starts, especially resume */ ++ CPU_LED_STOP, /* Machine stops, especially suspend */ ++ CPU_LED_HALTED, /* Machine shutdown */ ++}; ++#if defined(CONFIG_LEDS_TRIGGER_CPU) || defined(CONFIG_LEDS_TRIGGER_CPU_MODULE) ++extern void ledtrig_cpu(enum cpu_led_event evt); ++#else ++static inline void ledtrig_cpu(enum cpu_led_event evt) ++{ ++ return; ++} ++#endif ++ + #endif /* __LINUX_LEDS_H_INCLUDED */ +-- +1.7.9.5 diff --git a/a/content_digest b/N1/content_digest index 8f101e0..ad54452 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,17 +1,25 @@ "ref\01335771444-26361-1-git-send-email-bryan.wu@canonical.com\0" "ref\01335771444-26361-3-git-send-email-bryan.wu@canonical.com\0" - "From\0tim.gardner@canonical.com (Tim Gardner)\0" - "Subject\0[PATCH 02/19] led-triggers: create a trigger for CPU activity\0" + "From\0Tim Gardner <tim.gardner@canonical.com>\0" + "Subject\0Re: [PATCH 02/19] led-triggers: create a trigger for CPU activity\0" "Date\0Mon, 30 Apr 2012 07:03:08 -0600\0" - "To\0linux-arm-kernel@lists.infradead.org\0" - "\00:1\0" + "To\0Bryan Wu <bryan.wu@canonical.com>\0" + "Cc\0linux@arm.linux.org.uk" + rpurdie@rpsys.net + linux-arm-kernel@lists.infradead.org + linux-kernel@vger.kernel.org + linus.walleij@linaro.org + akpm@linux-foundation.org + arnd.bergmann@linaro.org + " nicolas.pitre@linaro.org\0" + "\01:1\0" "b\0" "On 04/30/2012 01:37 AM, Bryan Wu wrote:\n" "> Attempting to consolidate the ARM LED code, this removes the\n" "> custom RealView LED trigger code to turn LEDs on and off in\n" "> response to CPU activity and replace it with a standard trigger.\n" "> \n" - "> (bryan.wu at canonical.com:\n" + "> (bryan.wu@canonical.com:\n" "> It introduces several syscore stubs into this trigger.\n" "> It also provides ledtrig_cpu trigger event stub in <linux/leds.h>.\n" "> Although it was inspired by ARM work, it can be used in other arch.)\n" @@ -132,13 +140,263 @@ "\n" "rtg\n" "-- \n" - "Tim Gardner tim.gardner at canonical.com\n" - "-------------- next part --------------\n" - "A non-text attachment was scrubbed...\n" - "Name: 0001-led-triggers-create-a-trigger-for-CPU-activity.patch\n" - "Type: text/x-patch\n" - "Size: 7256 bytes\n" - "Desc: not available\n" - URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120430/71b769f5/attachment.bin> + Tim Gardner tim.gardner@canonical.com + "\01:2\0" + "fn\00001-led-triggers-create-a-trigger-for-CPU-activity.patch\0" + "b\0" + ">From 37cb1dc95f0af9d9916e856111bd19ecf6688c1c Mon Sep 17 00:00:00 2001\n" + "From: Bryan Wu <bryan.wu@canonical.com>\n" + "Date: Mon, 30 Apr 2012 15:37:07 +0800\n" + "Subject: [PATCH] led-triggers: create a trigger for CPU activity\n" + "\n" + "Attempting to consolidate the ARM LED code, this removes the\n" + "custom RealView LED trigger code to turn LEDs on and off in\n" + "response to CPU activity and replace it with a standard trigger.\n" + "\n" + "(bryan.wu@canonical.com:\n" + "It introduces several syscore stubs into this trigger.\n" + "It also provides ledtrig_cpu trigger event stub in <linux/leds.h>.\n" + "Although it was inspired by ARM work, it can be used in other arch.)\n" + "\n" + "Cc: Richard Purdie <rpurdie@rpsys.net>\n" + "Signed-off-by: Linus Walleij <linus.walleij@linaro.org>\n" + "Signed-off-by: Bryan Wu <bryan.wu@canonical.com>\n" + "Reviewed-by: Jamie Iles <jamie@jamieiles.com>\n" + "Tested-by: Jochen Friedrich <jochen@scram.de>\n" + "Signed-off-by: Tim Gardner <tim.gardner@canonical.com>\n" + "---\n" + " drivers/leds/Kconfig | 10 +++\n" + " drivers/leds/Makefile | 1 +\n" + " drivers/leds/ledtrig-cpu.c | 162 ++++++++++++++++++++++++++++++++++++++++++++\n" + " include/linux/leds.h | 16 +++++\n" + " 4 files changed, 189 insertions(+)\n" + " create mode 100644 drivers/leds/ledtrig-cpu.c\n" + "\n" + "diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig\n" + "index ff4b8cf..b006d09 100644\n" + "--- a/drivers/leds/Kconfig\n" + "+++ b/drivers/leds/Kconfig\n" + "@@ -448,6 +448,16 @@ config LEDS_TRIGGER_BACKLIGHT\n" + " \n" + " \t If unsure, say N.\n" + " \n" + "+config LEDS_TRIGGER_CPU\n" + "+\ttristate \"LED CPU Trigger\"\n" + "+\tdepends on LEDS_TRIGGERS\n" + "+\thelp\n" + "+\t This allows LEDs to be controlled by active CPUs. This shows\n" + "+\t the active CPUs across an array of LEDs so you can see which\n" + "+\t CPUs are active on the system at any given moment.\n" + "+\n" + "+\t If unsure, say N.\n" + "+\n" + " config LEDS_TRIGGER_GPIO\n" + " \ttristate \"LED GPIO Trigger\"\n" + " \tdepends on LEDS_TRIGGERS\n" + "diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile\n" + "index 890481c..0a3d5ad 100644\n" + "--- a/drivers/leds/Makefile\n" + "+++ b/drivers/leds/Makefile\n" + "@@ -55,4 +55,5 @@ obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK)\t+= ledtrig-ide-disk.o\n" + " obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)\t+= ledtrig-heartbeat.o\n" + " obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)\t+= ledtrig-backlight.o\n" + " obj-$(CONFIG_LEDS_TRIGGER_GPIO)\t\t+= ledtrig-gpio.o\n" + "+obj-$(CONFIG_LEDS_TRIGGER_CPU)\t\t+= ledtrig-cpu.o\n" + " obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON)\t+= ledtrig-default-on.o\n" + "diff --git a/drivers/leds/ledtrig-cpu.c b/drivers/leds/ledtrig-cpu.c\n" + "new file mode 100644\n" + "index 0000000..47f5fa5\n" + "--- /dev/null\n" + "+++ b/drivers/leds/ledtrig-cpu.c\n" + "@@ -0,0 +1,162 @@\n" + "+/*\n" + "+ * ledtrig-cpu.c - LED trigger based on CPU activity\n" + "+ *\n" + "+ * This LED trigger will be registered for each possible CPU and named as\n" + "+ * cpu0, cpu1, cpu2, cpu3, etc.\n" + "+ *\n" + "+ * It can be bound to any LED just like other triggers using either a\n" + "+ * board file or via sysfs interface.\n" + "+ *\n" + "+ * An API named ledtrig_cpu is exported for any user, who want to add CPU\n" + "+ * activity indication in their code\n" + "+ *\n" + "+ * Copyright 2011 Linus Walleij <linus.walleij@linaro.org>\n" + "+ * Copyright 2011 - 2012 Bryan Wu <bryan.wu@canonical.com>\n" + "+ *\n" + "+ * This program is free software; you can redistribute it and/or modify\n" + "+ * it under the terms of the GNU General Public License version 2 as\n" + "+ * published by the Free Software Foundation.\n" + "+ *\n" + "+ */\n" + "+\n" + "+#include <linux/module.h>\n" + "+#include <linux/kernel.h>\n" + "+#include <linux/init.h>\n" + "+#include <linux/slab.h>\n" + "+#include <linux/percpu.h>\n" + "+#include <linux/syscore_ops.h>\n" + "+#include <linux/mutex.h>\n" + "+#include \"leds.h\"\n" + "+\n" + "+#define MAX_NAME_LEN\t8\n" + "+\n" + "+static DEFINE_PER_CPU(struct led_trigger *, cpu_trig);\n" + "+static DEFINE_PER_CPU(char [MAX_NAME_LEN], trig_name);\n" + "+static DEFINE_PER_CPU(struct mutex, trig_lock);\n" + "+\n" + "+/**\n" + "+ * ledtrig_cpu - emit a CPU event as a trigger\n" + "+ * @evt: CPU event to be emitted\n" + "+ *\n" + "+ * Emit a CPU event on a CPU core, which will trigger a\n" + "+ * binded LED to turn on or turn off.\n" + "+ */\n" + "+void ledtrig_cpu(enum cpu_led_event ledevt)\n" + "+{\n" + "+\tstruct mutex *lock = this_cpu_ptr(&trig_lock);\n" + "+\tstruct led_trigger *trig;\n" + "+\n" + "+\tmutex_lock(lock);\n" + "+\n" + "+\ttrig = __get_cpu_var(cpu_trig);\n" + "+\n" + "+\t/* Locate the correct CPU LED */\n" + "+\tswitch (ledevt) {\n" + "+\tcase CPU_LED_IDLE_END:\n" + "+\tcase CPU_LED_START:\n" + "+\t\t/* Will turn the LED on, max brightness */\n" + "+\t\tled_trigger_event(trig, LED_FULL);\n" + "+\t\tbreak;\n" + "+\n" + "+\tcase CPU_LED_IDLE_START:\n" + "+\tcase CPU_LED_STOP:\n" + "+\tcase CPU_LED_HALTED:\n" + "+\t\t/* Will turn the LED off */\n" + "+\t\tled_trigger_event(trig, LED_OFF);\n" + "+\t\tbreak;\n" + "+\n" + "+\tdefault:\n" + "+\t\t/* Will leave the LED as it is */\n" + "+\t\tbreak;\n" + "+\t}\n" + "+\n" + "+\tmutex_unlock(lock);\n" + "+}\n" + "+EXPORT_SYMBOL(ledtrig_cpu);\n" + "+\n" + "+static int ledtrig_cpu_syscore_suspend(void)\n" + "+{\n" + "+\tledtrig_cpu(CPU_LED_STOP);\n" + "+\treturn 0;\n" + "+}\n" + "+\n" + "+static void ledtrig_cpu_syscore_resume(void)\n" + "+{\n" + "+\tledtrig_cpu(CPU_LED_START);\n" + "+}\n" + "+\n" + "+static void ledtrig_cpu_syscore_shutdown(void)\n" + "+{\n" + "+\tledtrig_cpu(CPU_LED_HALTED);\n" + "+}\n" + "+\n" + "+static struct syscore_ops ledtrig_cpu_syscore_ops = {\n" + "+\t.shutdown\t= ledtrig_cpu_syscore_shutdown,\n" + "+\t.suspend\t= ledtrig_cpu_syscore_suspend,\n" + "+\t.resume\t\t= ledtrig_cpu_syscore_resume,\n" + "+};\n" + "+\n" + "+static int __init ledtrig_cpu_init(void)\n" + "+{\n" + "+\tint cpu;\n" + "+\n" + "+\t/* Supports up to 9999 cpu cores */\n" + "+\tBUILD_BUG_ON(CONFIG_NR_CPUS > 9999);\n" + "+\n" + "+\t/*\n" + "+\t * Registering CPU led trigger for each CPU core here\n" + "+\t * ignores CPU hotplug, but after this CPU hotplug works\n" + "+\t * fine with this trigger.\n" + "+\t */\n" + "+\tfor_each_possible_cpu(cpu) {\n" + "+\t\tstruct led_trigger *trig;\n" + "+\t\tchar *name = per_cpu(trig_name, cpu);\n" + "+\t\tstruct mutex *lock = &per_cpu(trig_lock, cpu);\n" + "+\n" + "+\t\tmutex_init(lock);\n" + "+\n" + "+\t\tsnprintf(name, MAX_NAME_LEN, \"cpu%d\", cpu);\n" + "+\n" + "+\t\tmutex_lock(lock);\n" + "+\t\tled_trigger_register_simple(name, &trig);\n" + "+\t\tper_cpu(cpu_trig, cpu) = trig;\n" + "+\t\tmutex_unlock(lock);\n" + "+\t}\n" + "+\n" + "+\tregister_syscore_ops(&ledtrig_cpu_syscore_ops);\n" + "+\n" + "+\tpr_info(\"ledtrig-cpu: registered to indicate activity on CPUs\\n\");\n" + "+\n" + "+\treturn 0;\n" + "+}\n" + "+module_init(ledtrig_cpu_init);\n" + "+\n" + "+static void __exit ledtrig_cpu_exit(void)\n" + "+{\n" + "+\tint cpu;\n" + "+\n" + "+\tfor_each_possible_cpu(cpu) {\n" + "+\t\tstruct mutex *lock = &per_cpu(trig_lock, cpu);\n" + "+\t\tstruct led_trigger *trig;\n" + "+\t\tchar *name;\n" + "+\n" + "+\t\tmutex_lock(lock);\n" + "+\n" + "+\t\ttrig = per_cpu(cpu_trig, cpu);\n" + "+\t\tname = per_cpu(trig_name, cpu);\n" + "+\n" + "+\t\tled_trigger_unregister_simple(trig);\n" + "+\t\tper_cpu(cpu_trig, cpu) = NULL;\n" + "+\t\tmemset(name, 0, MAX_NAME_LEN);\n" + "+\n" + "+\t\tmutex_unlock(lock);\n" + "+\t}\n" + "+\n" + "+\tunregister_syscore_ops(&ledtrig_cpu_syscore_ops);\n" + "+}\n" + "+module_exit(ledtrig_cpu_exit);\n" + "+\n" + "+MODULE_AUTHOR(\"Linus Walleij <linus.walleij@linaro.org>\");\n" + "+MODULE_AUTHOR(\"Bryan Wu <bryan.wu@canonical.com>\");\n" + "+MODULE_DESCRIPTION(\"CPU LED trigger\");\n" + "+MODULE_LICENSE(\"GPL\");\n" + "diff --git a/include/linux/leds.h b/include/linux/leds.h\n" + "index 5884def..5fae540 100644\n" + "--- a/include/linux/leds.h\n" + "+++ b/include/linux/leds.h\n" + "@@ -210,4 +210,20 @@ struct gpio_led_platform_data {\n" + " struct platform_device *gpio_led_register_device(\n" + " \t\tint id, const struct gpio_led_platform_data *pdata);\n" + " \n" + "+enum cpu_led_event {\n" + "+\tCPU_LED_IDLE_START,\t/* CPU enters idle */\n" + "+\tCPU_LED_IDLE_END,\t/* CPU idle ends */\n" + "+\tCPU_LED_START,\t\t/* Machine starts, especially resume */\n" + "+\tCPU_LED_STOP,\t\t/* Machine stops, especially suspend */\n" + "+\tCPU_LED_HALTED,\t\t/* Machine shutdown */\n" + "+};\n" + "+#if defined(CONFIG_LEDS_TRIGGER_CPU) || defined(CONFIG_LEDS_TRIGGER_CPU_MODULE)\n" + "+extern void ledtrig_cpu(enum cpu_led_event evt);\n" + "+#else\n" + "+static inline void ledtrig_cpu(enum cpu_led_event evt)\n" + "+{\n" + "+\treturn;\n" + "+}\n" + "+#endif\n" + "+\n" + " #endif\t\t/* __LINUX_LEDS_H_INCLUDED */\n" + "-- \n" + 1.7.9.5 -7a32afbd41e40a8599246fec5907e3dc357dd2ed95f90cd4f0b5cf4d20795056 +21e05cb560bc797bbe8410c28ef99b0e84a6f8e9b9cd3be8f8abd1e87b9d5e10
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.