forked from Minki/linux
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>
This commit is contained in:
parent
18775a7bea
commit
fa8bbb13ab
@ -1739,59 +1739,6 @@ config FORCE_MAX_ZONEORDER
|
||||
This config option is actually maximum order plus one. For example,
|
||||
a value of 11 means that the largest free memory block is 2^10 pages.
|
||||
|
||||
config LEDS
|
||||
bool "Timer and CPU usage LEDs"
|
||||
depends on ARCH_CDB89712 || ARCH_EBSA110 || \
|
||||
ARCH_EBSA285 || ARCH_INTEGRATOR || \
|
||||
ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \
|
||||
ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \
|
||||
ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || \
|
||||
ARCH_AT91 || ARCH_DAVINCI || \
|
||||
ARCH_KS8695 || MACH_RD88F5182 || ARCH_REALVIEW
|
||||
help
|
||||
If you say Y here, the LEDs on your machine will be used
|
||||
to provide useful information about your current system status.
|
||||
|
||||
If you are compiling a kernel for a NetWinder or EBSA-285, you will
|
||||
be able to select which LEDs are active using the options below. If
|
||||
you are compiling a kernel for the EBSA-110 or the LART however, the
|
||||
red LED will simply flash regularly to indicate that the system is
|
||||
still functional. It is safe to say Y here if you have a CATS
|
||||
system, but the driver will do nothing.
|
||||
|
||||
config LEDS_TIMER
|
||||
bool "Timer LED" if (!ARCH_CDB89712 && !ARCH_OMAP) || \
|
||||
OMAP_OSK_MISTRAL || MACH_OMAP_H2 \
|
||||
|| MACH_OMAP_PERSEUS2
|
||||
depends on LEDS
|
||||
depends on !GENERIC_CLOCKEVENTS
|
||||
default y if ARCH_EBSA110
|
||||
help
|
||||
If you say Y here, one of the system LEDs (the green one on the
|
||||
NetWinder, the amber one on the EBSA285, or the red one on the LART)
|
||||
will flash regularly to indicate that the system is still
|
||||
operational. This is mainly useful to kernel hackers who are
|
||||
debugging unstable kernels.
|
||||
|
||||
The LART uses the same LED for both Timer LED and CPU usage LED
|
||||
functions. You may choose to use both, but the Timer LED function
|
||||
will overrule the CPU usage LED.
|
||||
|
||||
config LEDS_CPU
|
||||
bool "CPU usage LED" if (!ARCH_CDB89712 && !ARCH_EBSA110 && \
|
||||
!ARCH_OMAP) \
|
||||
|| OMAP_OSK_MISTRAL || MACH_OMAP_H2 \
|
||||
|| MACH_OMAP_PERSEUS2
|
||||
depends on LEDS
|
||||
help
|
||||
If you say Y here, the red LED will be used to give a good real
|
||||
time indication of CPU usage, by lighting whenever the idle task
|
||||
is not currently executing.
|
||||
|
||||
The LART uses the same LED for both Timer LED and CPU usage LED
|
||||
functions. You may choose to use both, but the Timer LED function
|
||||
will overrule the CPU usage LED.
|
||||
|
||||
config ALIGNMENT_TRAP
|
||||
bool
|
||||
depends on CPU_CP15_MMU
|
||||
|
@ -1,50 +0,0 @@
|
||||
/*
|
||||
* arch/arm/include/asm/leds.h
|
||||
*
|
||||
* Copyright (C) 1998 Russell King
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Event-driven interface for LEDs on machines
|
||||
* Added led_start and led_stop- Alex Holden, 28th Dec 1998.
|
||||
*/
|
||||
#ifndef ASM_ARM_LEDS_H
|
||||
#define ASM_ARM_LEDS_H
|
||||
|
||||
|
||||
typedef enum {
|
||||
led_idle_start,
|
||||
led_idle_end,
|
||||
led_timer,
|
||||
led_start,
|
||||
led_stop,
|
||||
led_claim, /* override idle & timer leds */
|
||||
led_release, /* restore idle & timer leds */
|
||||
led_start_timer_mode,
|
||||
led_stop_timer_mode,
|
||||
led_green_on,
|
||||
led_green_off,
|
||||
led_amber_on,
|
||||
led_amber_off,
|
||||
led_red_on,
|
||||
led_red_off,
|
||||
led_blue_on,
|
||||
led_blue_off,
|
||||
/*
|
||||
* I want this between led_timer and led_start, but
|
||||
* someone has decided to export this to user space
|
||||
*/
|
||||
led_halted
|
||||
} led_event_t;
|
||||
|
||||
/* Use this routine to handle LEDs */
|
||||
|
||||
#ifdef CONFIG_LEDS
|
||||
extern void (*leds_event)(led_event_t);
|
||||
#else
|
||||
#define leds_event(e)
|
||||
#endif
|
||||
|
||||
#endif
|
@ -21,7 +21,6 @@ obj-y := elf.o entry-armv.o entry-common.o irq.o opcodes.o \
|
||||
|
||||
obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += compat.o
|
||||
|
||||
obj-$(CONFIG_LEDS) += leds.o
|
||||
obj-$(CONFIG_OC_ETM) += etm.o
|
||||
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
||||
obj-$(CONFIG_ISA_DMA_API) += dma.o
|
||||
|
@ -1,121 +0,0 @@
|
||||
/*
|
||||
* LED support code, ripped out of arch/arm/kernel/time.c
|
||||
*
|
||||
* Copyright (C) 1994-2001 Russell King
|
||||
*
|
||||
* 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/export.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/syscore_ops.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
#include <asm/leds.h>
|
||||
|
||||
static void dummy_leds_event(led_event_t evt)
|
||||
{
|
||||
}
|
||||
|
||||
void (*leds_event)(led_event_t) = dummy_leds_event;
|
||||
|
||||
struct leds_evt_name {
|
||||
const char name[8];
|
||||
int on;
|
||||
int off;
|
||||
};
|
||||
|
||||
static const struct leds_evt_name evt_names[] = {
|
||||
{ "amber", led_amber_on, led_amber_off },
|
||||
{ "blue", led_blue_on, led_blue_off },
|
||||
{ "green", led_green_on, led_green_off },
|
||||
{ "red", led_red_on, led_red_off },
|
||||
};
|
||||
|
||||
static ssize_t leds_store(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
const char *buf, size_t size)
|
||||
{
|
||||
int ret = -EINVAL, len = strcspn(buf, " ");
|
||||
|
||||
if (len > 0 && buf[len] == '\0')
|
||||
len--;
|
||||
|
||||
if (strncmp(buf, "claim", len) == 0) {
|
||||
leds_event(led_claim);
|
||||
ret = size;
|
||||
} else if (strncmp(buf, "release", len) == 0) {
|
||||
leds_event(led_release);
|
||||
ret = size;
|
||||
} else {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(evt_names); i++) {
|
||||
if (strlen(evt_names[i].name) != len ||
|
||||
strncmp(buf, evt_names[i].name, len) != 0)
|
||||
continue;
|
||||
if (strncmp(buf+len, " on", 3) == 0) {
|
||||
leds_event(evt_names[i].on);
|
||||
ret = size;
|
||||
} else if (strncmp(buf+len, " off", 4) == 0) {
|
||||
leds_event(evt_names[i].off);
|
||||
ret = size;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(event, 0200, NULL, leds_store);
|
||||
|
||||
static struct bus_type leds_subsys = {
|
||||
.name = "leds",
|
||||
.dev_name = "leds",
|
||||
};
|
||||
|
||||
static struct device leds_device = {
|
||||
.id = 0,
|
||||
.bus = &leds_subsys,
|
||||
};
|
||||
|
||||
static int leds_suspend(void)
|
||||
{
|
||||
leds_event(led_stop);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void leds_resume(void)
|
||||
{
|
||||
leds_event(led_start);
|
||||
}
|
||||
|
||||
static void leds_shutdown(void)
|
||||
{
|
||||
leds_event(led_halted);
|
||||
}
|
||||
|
||||
static struct syscore_ops leds_syscore_ops = {
|
||||
.shutdown = leds_shutdown,
|
||||
.suspend = leds_suspend,
|
||||
.resume = leds_resume,
|
||||
};
|
||||
|
||||
static int __init leds_init(void)
|
||||
{
|
||||
int ret;
|
||||
ret = subsys_system_register(&leds_subsys, NULL);
|
||||
if (ret == 0)
|
||||
ret = device_register(&leds_device);
|
||||
if (ret == 0)
|
||||
ret = device_create_file(&leds_device, &dev_attr_event);
|
||||
if (ret == 0)
|
||||
register_syscore_ops(&leds_syscore_ops);
|
||||
return ret;
|
||||
}
|
||||
|
||||
device_initcall(leds_init);
|
||||
|
||||
EXPORT_SYMBOL(leds_event);
|
@ -31,9 +31,9 @@
|
||||
#include <linux/random.h>
|
||||
#include <linux/hw_breakpoint.h>
|
||||
#include <linux/cpuidle.h>
|
||||
#include <linux/leds.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/leds.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/thread_notify.h>
|
||||
#include <asm/stacktrace.h>
|
||||
@ -189,7 +189,7 @@ void cpu_idle(void)
|
||||
while (1) {
|
||||
tick_nohz_idle_enter();
|
||||
rcu_idle_enter();
|
||||
leds_event(led_idle_start);
|
||||
ledtrig_cpu(CPU_LED_IDLE_START);
|
||||
while (!need_resched()) {
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
if (cpu_is_offline(smp_processor_id()))
|
||||
@ -220,7 +220,7 @@ void cpu_idle(void)
|
||||
} else
|
||||
local_irq_enable();
|
||||
}
|
||||
leds_event(led_idle_end);
|
||||
ledtrig_cpu(CPU_LED_IDLE_END);
|
||||
rcu_idle_exit();
|
||||
tick_nohz_idle_exit();
|
||||
schedule_preempt_disabled();
|
||||
|
@ -25,7 +25,6 @@
|
||||
#include <linux/timer.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include <asm/leds.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/sched_clock.h>
|
||||
#include <asm/stacktrace.h>
|
||||
@ -80,21 +79,6 @@ u32 arch_gettimeoffset(void)
|
||||
}
|
||||
#endif /* CONFIG_ARCH_USES_GETTIMEOFFSET */
|
||||
|
||||
#ifdef CONFIG_LEDS_TIMER
|
||||
static inline void do_leds(void)
|
||||
{
|
||||
static unsigned int count = HZ/2;
|
||||
|
||||
if (--count == 0) {
|
||||
count = HZ/2;
|
||||
leds_event(led_timer);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define do_leds()
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef CONFIG_GENERIC_CLOCKEVENTS
|
||||
/*
|
||||
* Kernel system timer support.
|
||||
@ -102,7 +86,6 @@ static inline void do_leds(void)
|
||||
void timer_tick(void)
|
||||
{
|
||||
profile_tick(CPU_PROFILING);
|
||||
do_leds();
|
||||
xtime_update(1);
|
||||
#ifndef CONFIG_SMP
|
||||
update_process_times(user_mode(get_irq_regs()));
|
||||
|
Loading…
Reference in New Issue
Block a user