leds: convert IDE trigger to common disk trigger
authorStephan Linz <linz@li-pro.net>
Fri, 10 Jun 2016 05:59:56 +0000 (07:59 +0200)
committerJacek Anaszewski <j.anaszewski@samsung.com>
Mon, 20 Jun 2016 07:57:56 +0000 (09:57 +0200)
This patch converts the IDE specific LED trigger to a generic disk
activity LED trigger. The libata core is now a trigger source just
like before the IDE disk driver. It's merely a replacement of the
string ide by disk.

The patch is taken from http://dev.gentoo.org/~josejx/ata.patch and is
widely used by any ibook/powerbook owners with great satisfaction.
Likewise, it is very often used successfully on different ARM platforms.

Unlike the original patch, the existing 'ide-disk' trigger is still
available for backward compatibility. That reduce the amount of patches
in affected device trees out of the mainline kernel. For further
development, the new name 'disk-activity' should be used.

Cc: Joseph Jezak <josejx@gentoo.org>
Cc: Jörg Sommer <joerg@alea.gnuu.de>
Cc: Richard Purdie <rpurdie@rpsys.net>
Signed-off-by: Stephan Linz <linz@li-pro.net>
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
drivers/ata/libata-core.c
drivers/ide/ide-disk.c
drivers/leds/leds-hp6xx.c
drivers/leds/trigger/Kconfig
drivers/leds/trigger/Makefile
drivers/leds/trigger/ledtrig-disk.c [new file with mode: 0644]
drivers/leds/trigger/ledtrig-ide-disk.c [deleted file]
include/linux/leds.h

index 6be7770..2eca572 100644 (file)
@@ -69,6 +69,7 @@
 #include <asm/unaligned.h>
 #include <linux/cdrom.h>
 #include <linux/ratelimit.h>
+#include <linux/leds.h>
 #include <linux/pm_runtime.h>
 #include <linux/platform_device.h>
 
@@ -5072,6 +5073,9 @@ 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.
         *
index 05dbcce..5ceb176 100644 (file)
@@ -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\n",
                 drive->name, rq_data_dir(rq) == READ ? "read" : "writ",
index a6b8db0..137969f 100644 (file)
@@ -50,7 +50,7 @@ static struct led_classdev hp6xx_red_led = {
 
 static struct led_classdev hp6xx_green_led = {
        .name                   = "hp6xx:green",
-       .default_trigger        = "ide-disk",
+       .default_trigger        = "disk-activity",
        .brightness_set         = hp6xxled_green_set,
        .flags                  = LED_CORE_SUSPENDRESUME,
 };
index 9893d91..3f9ddb9 100644 (file)
@@ -33,12 +33,12 @@ config LEDS_TRIGGER_ONESHOT
 
          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_MTD
index 8cc64a4..a72c43c 100644 (file)
@@ -1,6 +1,6 @@
 obj-$(CONFIG_LEDS_TRIGGER_TIMER)       += ledtrig-timer.o
 obj-$(CONFIG_LEDS_TRIGGER_ONESHOT)     += ledtrig-oneshot.o
-obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK)    += ledtrig-ide-disk.o
+obj-$(CONFIG_LEDS_TRIGGER_DISK)                += ledtrig-disk.o
 obj-$(CONFIG_LEDS_TRIGGER_MTD)         += ledtrig-mtd.o
 obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)   += ledtrig-heartbeat.o
 obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)   += ledtrig-backlight.o
diff --git a/drivers/leds/trigger/ledtrig-disk.c b/drivers/leds/trigger/ledtrig-disk.c
new file mode 100644 (file)
index 0000000..cd525b4
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * 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/kernel.h>
+#include <linux/init.h>
+#include <linux/leds.h>
+
+#define BLINK_DELAY 30
+
+DEFINE_LED_TRIGGER(ledtrig_disk);
+DEFINE_LED_TRIGGER(ledtrig_ide);
+
+void ledtrig_disk_activity(void)
+{
+       unsigned long blink_delay = BLINK_DELAY;
+
+       led_trigger_blink_oneshot(ledtrig_disk,
+                                 &blink_delay, &blink_delay, 0);
+       led_trigger_blink_oneshot(ledtrig_ide,
+                                 &blink_delay, &blink_delay, 0);
+}
+EXPORT_SYMBOL(ledtrig_disk_activity);
+
+static int __init ledtrig_disk_init(void)
+{
+       led_trigger_register_simple("disk-activity", &ledtrig_disk);
+       led_trigger_register_simple("ide-disk", &ledtrig_ide);
+
+       return 0;
+}
+device_initcall(ledtrig_disk_init);
diff --git a/drivers/leds/trigger/ledtrig-ide-disk.c b/drivers/leds/trigger/ledtrig-ide-disk.c
deleted file mode 100644 (file)
index 15123d3..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * LED IDE-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/kernel.h>
-#include <linux/init.h>
-#include <linux/leds.h>
-
-#define BLINK_DELAY 30
-
-DEFINE_LED_TRIGGER(ledtrig_ide);
-
-void ledtrig_ide_activity(void)
-{
-       unsigned long ide_blink_delay = BLINK_DELAY;
-
-       led_trigger_blink_oneshot(ledtrig_ide,
-                                 &ide_blink_delay, &ide_blink_delay, 0);
-}
-EXPORT_SYMBOL(ledtrig_ide_activity);
-
-static int __init ledtrig_ide_init(void)
-{
-       led_trigger_register_simple("ide-disk", &ledtrig_ide);
-       return 0;
-}
-device_initcall(ledtrig_ide_init);
index e5e7f2e..0aa3701 100644 (file)
@@ -325,10 +325,10 @@ static inline void *led_get_trigger_data(struct led_classdev *led_cdev)
 #endif /* CONFIG_LEDS_TRIGGERS */
 
 /* 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
-static inline void ledtrig_ide_activity(void) {}
+static inline void ledtrig_disk_activity(void) {}
 #endif
 
 #ifdef CONFIG_LEDS_TRIGGER_MTD