Commit fa8bbb13ab49e77c00fa09e5504ec25b7176fb4b
1 parent
18775a7bea
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
ARM: use new LEDS CPU trigger stub to replace old one
Cc: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Bryan Wu <bryan.wu@canonical.com>
Showing 6 changed files with 3 additions and 245 deletions Side-by-side Diff
arch/arm/Kconfig
... | ... | @@ -1739,59 +1739,6 @@ |
1739 | 1739 | This config option is actually maximum order plus one. For example, |
1740 | 1740 | a value of 11 means that the largest free memory block is 2^10 pages. |
1741 | 1741 | |
1742 | -config LEDS | |
1743 | - bool "Timer and CPU usage LEDs" | |
1744 | - depends on ARCH_CDB89712 || ARCH_EBSA110 || \ | |
1745 | - ARCH_EBSA285 || ARCH_INTEGRATOR || \ | |
1746 | - ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \ | |
1747 | - ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \ | |
1748 | - ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || \ | |
1749 | - ARCH_AT91 || ARCH_DAVINCI || \ | |
1750 | - ARCH_KS8695 || MACH_RD88F5182 || ARCH_REALVIEW | |
1751 | - help | |
1752 | - If you say Y here, the LEDs on your machine will be used | |
1753 | - to provide useful information about your current system status. | |
1754 | - | |
1755 | - If you are compiling a kernel for a NetWinder or EBSA-285, you will | |
1756 | - be able to select which LEDs are active using the options below. If | |
1757 | - you are compiling a kernel for the EBSA-110 or the LART however, the | |
1758 | - red LED will simply flash regularly to indicate that the system is | |
1759 | - still functional. It is safe to say Y here if you have a CATS | |
1760 | - system, but the driver will do nothing. | |
1761 | - | |
1762 | -config LEDS_TIMER | |
1763 | - bool "Timer LED" if (!ARCH_CDB89712 && !ARCH_OMAP) || \ | |
1764 | - OMAP_OSK_MISTRAL || MACH_OMAP_H2 \ | |
1765 | - || MACH_OMAP_PERSEUS2 | |
1766 | - depends on LEDS | |
1767 | - depends on !GENERIC_CLOCKEVENTS | |
1768 | - default y if ARCH_EBSA110 | |
1769 | - help | |
1770 | - If you say Y here, one of the system LEDs (the green one on the | |
1771 | - NetWinder, the amber one on the EBSA285, or the red one on the LART) | |
1772 | - will flash regularly to indicate that the system is still | |
1773 | - operational. This is mainly useful to kernel hackers who are | |
1774 | - debugging unstable kernels. | |
1775 | - | |
1776 | - The LART uses the same LED for both Timer LED and CPU usage LED | |
1777 | - functions. You may choose to use both, but the Timer LED function | |
1778 | - will overrule the CPU usage LED. | |
1779 | - | |
1780 | -config LEDS_CPU | |
1781 | - bool "CPU usage LED" if (!ARCH_CDB89712 && !ARCH_EBSA110 && \ | |
1782 | - !ARCH_OMAP) \ | |
1783 | - || OMAP_OSK_MISTRAL || MACH_OMAP_H2 \ | |
1784 | - || MACH_OMAP_PERSEUS2 | |
1785 | - depends on LEDS | |
1786 | - help | |
1787 | - If you say Y here, the red LED will be used to give a good real | |
1788 | - time indication of CPU usage, by lighting whenever the idle task | |
1789 | - is not currently executing. | |
1790 | - | |
1791 | - The LART uses the same LED for both Timer LED and CPU usage LED | |
1792 | - functions. You may choose to use both, but the Timer LED function | |
1793 | - will overrule the CPU usage LED. | |
1794 | - | |
1795 | 1742 | config ALIGNMENT_TRAP |
1796 | 1743 | bool |
1797 | 1744 | depends on CPU_CP15_MMU |
arch/arm/include/asm/leds.h
1 | -/* | |
2 | - * arch/arm/include/asm/leds.h | |
3 | - * | |
4 | - * Copyright (C) 1998 Russell King | |
5 | - * | |
6 | - * This program is free software; you can redistribute it and/or modify | |
7 | - * it under the terms of the GNU General Public License version 2 as | |
8 | - * published by the Free Software Foundation. | |
9 | - * | |
10 | - * Event-driven interface for LEDs on machines | |
11 | - * Added led_start and led_stop- Alex Holden, 28th Dec 1998. | |
12 | - */ | |
13 | -#ifndef ASM_ARM_LEDS_H | |
14 | -#define ASM_ARM_LEDS_H | |
15 | - | |
16 | - | |
17 | -typedef enum { | |
18 | - led_idle_start, | |
19 | - led_idle_end, | |
20 | - led_timer, | |
21 | - led_start, | |
22 | - led_stop, | |
23 | - led_claim, /* override idle & timer leds */ | |
24 | - led_release, /* restore idle & timer leds */ | |
25 | - led_start_timer_mode, | |
26 | - led_stop_timer_mode, | |
27 | - led_green_on, | |
28 | - led_green_off, | |
29 | - led_amber_on, | |
30 | - led_amber_off, | |
31 | - led_red_on, | |
32 | - led_red_off, | |
33 | - led_blue_on, | |
34 | - led_blue_off, | |
35 | - /* | |
36 | - * I want this between led_timer and led_start, but | |
37 | - * someone has decided to export this to user space | |
38 | - */ | |
39 | - led_halted | |
40 | -} led_event_t; | |
41 | - | |
42 | -/* Use this routine to handle LEDs */ | |
43 | - | |
44 | -#ifdef CONFIG_LEDS | |
45 | -extern void (*leds_event)(led_event_t); | |
46 | -#else | |
47 | -#define leds_event(e) | |
48 | -#endif | |
49 | - | |
50 | -#endif |
arch/arm/kernel/Makefile
arch/arm/kernel/leds.c
1 | -/* | |
2 | - * LED support code, ripped out of arch/arm/kernel/time.c | |
3 | - * | |
4 | - * Copyright (C) 1994-2001 Russell King | |
5 | - * | |
6 | - * This program is free software; you can redistribute it and/or modify | |
7 | - * it under the terms of the GNU General Public License version 2 as | |
8 | - * published by the Free Software Foundation. | |
9 | - */ | |
10 | -#include <linux/export.h> | |
11 | -#include <linux/init.h> | |
12 | -#include <linux/device.h> | |
13 | -#include <linux/syscore_ops.h> | |
14 | -#include <linux/string.h> | |
15 | - | |
16 | -#include <asm/leds.h> | |
17 | - | |
18 | -static void dummy_leds_event(led_event_t evt) | |
19 | -{ | |
20 | -} | |
21 | - | |
22 | -void (*leds_event)(led_event_t) = dummy_leds_event; | |
23 | - | |
24 | -struct leds_evt_name { | |
25 | - const char name[8]; | |
26 | - int on; | |
27 | - int off; | |
28 | -}; | |
29 | - | |
30 | -static const struct leds_evt_name evt_names[] = { | |
31 | - { "amber", led_amber_on, led_amber_off }, | |
32 | - { "blue", led_blue_on, led_blue_off }, | |
33 | - { "green", led_green_on, led_green_off }, | |
34 | - { "red", led_red_on, led_red_off }, | |
35 | -}; | |
36 | - | |
37 | -static ssize_t leds_store(struct device *dev, | |
38 | - struct device_attribute *attr, | |
39 | - const char *buf, size_t size) | |
40 | -{ | |
41 | - int ret = -EINVAL, len = strcspn(buf, " "); | |
42 | - | |
43 | - if (len > 0 && buf[len] == '\0') | |
44 | - len--; | |
45 | - | |
46 | - if (strncmp(buf, "claim", len) == 0) { | |
47 | - leds_event(led_claim); | |
48 | - ret = size; | |
49 | - } else if (strncmp(buf, "release", len) == 0) { | |
50 | - leds_event(led_release); | |
51 | - ret = size; | |
52 | - } else { | |
53 | - int i; | |
54 | - | |
55 | - for (i = 0; i < ARRAY_SIZE(evt_names); i++) { | |
56 | - if (strlen(evt_names[i].name) != len || | |
57 | - strncmp(buf, evt_names[i].name, len) != 0) | |
58 | - continue; | |
59 | - if (strncmp(buf+len, " on", 3) == 0) { | |
60 | - leds_event(evt_names[i].on); | |
61 | - ret = size; | |
62 | - } else if (strncmp(buf+len, " off", 4) == 0) { | |
63 | - leds_event(evt_names[i].off); | |
64 | - ret = size; | |
65 | - } | |
66 | - break; | |
67 | - } | |
68 | - } | |
69 | - return ret; | |
70 | -} | |
71 | - | |
72 | -static DEVICE_ATTR(event, 0200, NULL, leds_store); | |
73 | - | |
74 | -static struct bus_type leds_subsys = { | |
75 | - .name = "leds", | |
76 | - .dev_name = "leds", | |
77 | -}; | |
78 | - | |
79 | -static struct device leds_device = { | |
80 | - .id = 0, | |
81 | - .bus = &leds_subsys, | |
82 | -}; | |
83 | - | |
84 | -static int leds_suspend(void) | |
85 | -{ | |
86 | - leds_event(led_stop); | |
87 | - return 0; | |
88 | -} | |
89 | - | |
90 | -static void leds_resume(void) | |
91 | -{ | |
92 | - leds_event(led_start); | |
93 | -} | |
94 | - | |
95 | -static void leds_shutdown(void) | |
96 | -{ | |
97 | - leds_event(led_halted); | |
98 | -} | |
99 | - | |
100 | -static struct syscore_ops leds_syscore_ops = { | |
101 | - .shutdown = leds_shutdown, | |
102 | - .suspend = leds_suspend, | |
103 | - .resume = leds_resume, | |
104 | -}; | |
105 | - | |
106 | -static int __init leds_init(void) | |
107 | -{ | |
108 | - int ret; | |
109 | - ret = subsys_system_register(&leds_subsys, NULL); | |
110 | - if (ret == 0) | |
111 | - ret = device_register(&leds_device); | |
112 | - if (ret == 0) | |
113 | - ret = device_create_file(&leds_device, &dev_attr_event); | |
114 | - if (ret == 0) | |
115 | - register_syscore_ops(&leds_syscore_ops); | |
116 | - return ret; | |
117 | -} | |
118 | - | |
119 | -device_initcall(leds_init); | |
120 | - | |
121 | -EXPORT_SYMBOL(leds_event); |
arch/arm/kernel/process.c
... | ... | @@ -31,9 +31,9 @@ |
31 | 31 | #include <linux/random.h> |
32 | 32 | #include <linux/hw_breakpoint.h> |
33 | 33 | #include <linux/cpuidle.h> |
34 | +#include <linux/leds.h> | |
34 | 35 | |
35 | 36 | #include <asm/cacheflush.h> |
36 | -#include <asm/leds.h> | |
37 | 37 | #include <asm/processor.h> |
38 | 38 | #include <asm/thread_notify.h> |
39 | 39 | #include <asm/stacktrace.h> |
... | ... | @@ -189,7 +189,7 @@ |
189 | 189 | while (1) { |
190 | 190 | tick_nohz_idle_enter(); |
191 | 191 | rcu_idle_enter(); |
192 | - leds_event(led_idle_start); | |
192 | + ledtrig_cpu(CPU_LED_IDLE_START); | |
193 | 193 | while (!need_resched()) { |
194 | 194 | #ifdef CONFIG_HOTPLUG_CPU |
195 | 195 | if (cpu_is_offline(smp_processor_id())) |
... | ... | @@ -220,7 +220,7 @@ |
220 | 220 | } else |
221 | 221 | local_irq_enable(); |
222 | 222 | } |
223 | - leds_event(led_idle_end); | |
223 | + ledtrig_cpu(CPU_LED_IDLE_END); | |
224 | 224 | rcu_idle_exit(); |
225 | 225 | tick_nohz_idle_exit(); |
226 | 226 | schedule_preempt_disabled(); |
arch/arm/kernel/time.c
... | ... | @@ -25,7 +25,6 @@ |
25 | 25 | #include <linux/timer.h> |
26 | 26 | #include <linux/irq.h> |
27 | 27 | |
28 | -#include <asm/leds.h> | |
29 | 28 | #include <asm/thread_info.h> |
30 | 29 | #include <asm/sched_clock.h> |
31 | 30 | #include <asm/stacktrace.h> |
... | ... | @@ -80,21 +79,6 @@ |
80 | 79 | } |
81 | 80 | #endif /* CONFIG_ARCH_USES_GETTIMEOFFSET */ |
82 | 81 | |
83 | -#ifdef CONFIG_LEDS_TIMER | |
84 | -static inline void do_leds(void) | |
85 | -{ | |
86 | - static unsigned int count = HZ/2; | |
87 | - | |
88 | - if (--count == 0) { | |
89 | - count = HZ/2; | |
90 | - leds_event(led_timer); | |
91 | - } | |
92 | -} | |
93 | -#else | |
94 | -#define do_leds() | |
95 | -#endif | |
96 | - | |
97 | - | |
98 | 82 | #ifndef CONFIG_GENERIC_CLOCKEVENTS |
99 | 83 | /* |
100 | 84 | * Kernel system timer support. |
... | ... | @@ -102,7 +86,6 @@ |
102 | 86 | void timer_tick(void) |
103 | 87 | { |
104 | 88 | profile_tick(CPU_PROFILING); |
105 | - do_leds(); | |
106 | 89 | xtime_update(1); |
107 | 90 | #ifndef CONFIG_SMP |
108 | 91 | update_process_times(user_mode(get_irq_regs())); |