mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-22 06:41:23 +00:00
233 lines
7.2 KiB
Diff
233 lines
7.2 KiB
Diff
|
[PATCH] Update the IDE led trigger to generic disk activity
|
||
|
|
||
|
diff --git a/drivers/leds/ledtrig-disk.c b/drivers/leds/ledtrig-disk.c
|
||
|
new file mode 100644
|
||
|
index 0000000..fb5e1f5
|
||
|
--- /dev/null
|
||
|
+++ b/drivers/leds/ledtrig-disk.c
|
||
|
@@ -0,0 +1,64 @@
|
||
|
+/*
|
||
|
+ * LED Disk Activity Trigger
|
||
|
+ *
|
||
|
+ * Copyright 2006 Openedhand Ltd.
|
||
|
+ *
|
||
|
+ * Author: Richard Purdie <rpurdie@openedhand.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/jiffies.h>
|
||
|
+#include <linux/kernel.h>
|
||
|
+#include <linux/init.h>
|
||
|
+#include <linux/timer.h>
|
||
|
+#include <linux/leds.h>
|
||
|
+
|
||
|
+static void ledtrig_disk_timerfunc(unsigned long data);
|
||
|
+
|
||
|
+DEFINE_LED_TRIGGER(ledtrig_disk);
|
||
|
+static DEFINE_TIMER(ledtrig_disk_timer, ledtrig_disk_timerfunc, 0, 0);
|
||
|
+static int disk_activity;
|
||
|
+static int disk_lastactivity;
|
||
|
+
|
||
|
+void ledtrig_disk_activity(void)
|
||
|
+{
|
||
|
+ disk_activity++;
|
||
|
+ if (!timer_pending(&ledtrig_disk_timer))
|
||
|
+ mod_timer(&ledtrig_disk_timer, jiffies + msecs_to_jiffies(10));
|
||
|
+}
|
||
|
+EXPORT_SYMBOL(ledtrig_disk_activity);
|
||
|
+
|
||
|
+static void ledtrig_disk_timerfunc(unsigned long data)
|
||
|
+{
|
||
|
+ if (disk_lastactivity != disk_activity) {
|
||
|
+ disk_lastactivity = disk_activity;
|
||
|
+ /* INT_MAX will set each LED to its maximum brightness */
|
||
|
+ led_trigger_event(ledtrig_disk, INT_MAX);
|
||
|
+ mod_timer(&ledtrig_disk_timer, jiffies + msecs_to_jiffies(10));
|
||
|
+ } else {
|
||
|
+ led_trigger_event(ledtrig_disk, LED_OFF);
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+static int __init ledtrig_disk_init(void)
|
||
|
+{
|
||
|
+ led_trigger_register_simple("disk-activity", &ledtrig_disk);
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
+static void __exit ledtrig_disk_exit(void)
|
||
|
+{
|
||
|
+ led_trigger_unregister_simple(ledtrig_disk);
|
||
|
+}
|
||
|
+
|
||
|
+module_init(ledtrig_disk_init);
|
||
|
+module_exit(ledtrig_disk_exit);
|
||
|
+
|
||
|
+MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
|
||
|
+MODULE_DESCRIPTION("LED IDE Disk Activity Trigger");
|
||
|
+MODULE_LICENSE("GPL");
|
||
|
diff --git a/arch/powerpc/configs/pmac32_defconfig b/arch/powerpc/configs/pmac32_defconfig
|
||
|
index f8b394a..cff5d4e 100644
|
||
|
--- a/arch/powerpc/configs/pmac32_defconfig
|
||
|
+++ b/arch/powerpc/configs/pmac32_defconfig
|
||
|
@@ -180,7 +180,7 @@ CONFIG_ADB=y
|
||
|
CONFIG_ADB_CUDA=y
|
||
|
CONFIG_ADB_PMU=y
|
||
|
CONFIG_ADB_PMU_LED=y
|
||
|
-CONFIG_ADB_PMU_LED_IDE=y
|
||
|
+CONFIG_ADB_PMU_LED_DISK=y
|
||
|
CONFIG_PMAC_APM_EMU=m
|
||
|
CONFIG_PMAC_MEDIABAY=y
|
||
|
CONFIG_PMAC_BACKLIGHT=y
|
||
|
diff --git a/arch/powerpc/configs/ppc6xx_defconfig b/arch/powerpc/configs/ppc6xx_defconfig
|
||
|
index c47f2be..afd3ac7 100644
|
||
|
--- a/arch/powerpc/configs/ppc6xx_defconfig
|
||
|
+++ b/arch/powerpc/configs/ppc6xx_defconfig
|
||
|
@@ -471,7 +471,7 @@ CONFIG_ADB=y
|
||
|
CONFIG_ADB_CUDA=y
|
||
|
CONFIG_ADB_PMU=y
|
||
|
CONFIG_ADB_PMU_LED=y
|
||
|
-CONFIG_ADB_PMU_LED_IDE=y
|
||
|
+CONFIG_ADB_PMU_LED_DISK=y
|
||
|
CONFIG_PMAC_APM_EMU=y
|
||
|
CONFIG_PMAC_MEDIABAY=y
|
||
|
CONFIG_PMAC_BACKLIGHT=y
|
||
|
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
|
||
|
index cd20cf1..5f3b5be 100644
|
||
|
--- a/drivers/ata/libata-core.c
|
||
|
+++ b/drivers/ata/libata-core.c
|
||
|
@@ -66,6 +66,7 @@
|
||
|
#include <asm/byteorder.h>
|
||
|
#include <linux/cdrom.h>
|
||
|
#include <linux/ratelimit.h>
|
||
|
+#include <linux/leds.h>
|
||
|
#include <linux/pm_runtime.h>
|
||
|
|
||
|
#include "libata.h"
|
||
|
@@ -4844,6 +4845,9 @@ static void ata_verify_xfer(struct ata_queued_cmd *qc)
|
||
|
void ata_qc_complete(struct ata_queued_cmd *qc)
|
||
|
{
|
||
|
struct ata_port *ap = qc->ap;
|
||
|
+
|
||
|
+ /* Trigger the LED (if available) */
|
||
|
+ ledtrig_disk_activity();
|
||
|
|
||
|
/* XXX: New EH and old EH use different mechanisms to
|
||
|
* synchronize EH with regular execution path.
|
||
|
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
|
||
|
index 16f69be..196a6d6 100644
|
||
|
--- a/drivers/ide/ide-disk.c
|
||
|
+++ b/drivers/ide/ide-disk.c
|
||
|
@@ -186,7 +186,7 @@ static ide_startstop_t ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
|
||
|
BUG_ON(drive->dev_flags & IDE_DFLAG_BLOCKED);
|
||
|
BUG_ON(rq->cmd_type != REQ_TYPE_FS);
|
||
|
|
||
|
- ledtrig_ide_activity();
|
||
|
+ ledtrig_disk_activity();
|
||
|
|
||
|
pr_debug("%s: %sing: block=%llu, sectors=%u, buffer=0x%08lx\n",
|
||
|
drive->name, rq_data_dir(rq) == READ ? "read" : "writ",
|
||
|
diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
|
||
|
index 8f1ccfe..14c78ca 100644
|
||
|
--- a/drivers/leds/Kconfig
|
||
|
+++ b/drivers/leds/Kconfig
|
||
|
@@ -432,12 +432,12 @@ config LEDS_TRIGGER_TIMER
|
||
|
|
||
|
If unsure, say Y.
|
||
|
|
||
|
-config LEDS_TRIGGER_IDE_DISK
|
||
|
- bool "LED IDE Disk Trigger"
|
||
|
- depends on IDE_GD_ATA
|
||
|
+config LEDS_TRIGGER_DISK
|
||
|
+ bool "LED Disk Trigger"
|
||
|
+ depends on IDE_GD_ATA || ATA
|
||
|
depends on LEDS_TRIGGERS
|
||
|
help
|
||
|
- This allows LEDs to be controlled by IDE disk activity.
|
||
|
+ This allows LEDs to be controlled by disk activity.
|
||
|
If unsure, say Y.
|
||
|
|
||
|
config LEDS_TRIGGER_HEARTBEAT
|
||
|
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
|
||
|
index df48868..8a2c740 100644
|
||
|
--- a/drivers/leds/Makefile
|
||
|
+++ b/drivers/leds/Makefile
|
||
|
@@ -52,7 +52,7 @@ obj-$(CONFIG_LEDS_DAC124S085) += leds-dac124s085.o
|
||
|
|
||
|
# LED Triggers
|
||
|
obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
|
||
|
-obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o
|
||
|
+obj-$(CONFIG_LEDS_TRIGGER_DISK) += ledtrig-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
|
||
|
diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig
|
||
|
index fa51af1..d766848 100644
|
||
|
--- a/drivers/macintosh/Kconfig
|
||
|
+++ b/drivers/macintosh/Kconfig
|
||
|
@@ -96,18 +96,17 @@ config ADB_PMU_LED
|
||
|
Support the front LED on Power/iBooks as a generic LED that can
|
||
|
be triggered by any of the supported triggers. To get the
|
||
|
behaviour of the old CONFIG_BLK_DEV_IDE_PMAC_BLINK, select this
|
||
|
- and the ide-disk LED trigger and configure appropriately through
|
||
|
- sysfs.
|
||
|
+ and the disk LED trigger and configure appropriately through sysfs.
|
||
|
|
||
|
-config ADB_PMU_LED_IDE
|
||
|
- bool "Use front LED as IDE LED by default"
|
||
|
+config ADB_PMU_LED_DISK
|
||
|
+ bool "Use front LED as a DISK LED by default"
|
||
|
depends on ADB_PMU_LED
|
||
|
depends on LEDS_CLASS
|
||
|
select LEDS_TRIGGERS
|
||
|
- select LEDS_TRIGGER_IDE_DISK
|
||
|
+ select LEDS_TRIGGER_DISK
|
||
|
help
|
||
|
- This option makes the front LED default to the IDE trigger
|
||
|
- so that it blinks on IDE activity.
|
||
|
+ This option makes the front LED default to the disk trigger
|
||
|
+ so that it blinks on disk activity.
|
||
|
|
||
|
config PMAC_SMU
|
||
|
bool "Support for SMU based PowerMacs"
|
||
|
diff --git a/drivers/macintosh/via-pmu-led.c b/drivers/macintosh/via-pmu-led.c
|
||
|
index 19c3718..ae067ab 100644
|
||
|
--- a/drivers/macintosh/via-pmu-led.c
|
||
|
+++ b/drivers/macintosh/via-pmu-led.c
|
||
|
@@ -73,8 +73,8 @@ static void pmu_led_set(struct led_classdev *led_cdev,
|
||
|
|
||
|
static struct led_classdev pmu_led = {
|
||
|
.name = "pmu-led::front",
|
||
|
-#ifdef CONFIG_ADB_PMU_LED_IDE
|
||
|
- .default_trigger = "ide-disk",
|
||
|
+#ifdef CONFIG_ADB_PMU_LED_DISK
|
||
|
+ .default_trigger = "disk-activity",
|
||
|
#endif
|
||
|
.brightness_set = pmu_led_set,
|
||
|
};
|
||
|
diff --git a/include/linux/leds.h b/include/linux/leds.h
|
||
|
index 23f20fd..5e1310c 100644
|
||
|
--- a/include/linux/leds.h
|
||
|
+++ b/include/linux/leds.h
|
||
|
@@ -161,10 +161,10 @@ extern void led_trigger_blink(struct led_trigger *trigger,
|
||
|
#endif
|
||
|
|
||
|
/* Trigger specific functions */
|
||
|
-#ifdef CONFIG_LEDS_TRIGGER_IDE_DISK
|
||
|
-extern void ledtrig_ide_activity(void);
|
||
|
+#ifdef CONFIG_LEDS_TRIGGER_DISK
|
||
|
+extern void ledtrig_disk_activity(void);
|
||
|
#else
|
||
|
-#define ledtrig_ide_activity() do {} while(0)
|
||
|
+#define ledtrig_disk_activity() do {} while(0)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
--
|
||
|
1.9.1
|
||
|
|