apm821xx: backport generic HDD led-triggers for WNDR4700 and MBL
authorChristian Lamparter <chunkeey@googlemail.com>
Tue, 30 Aug 2016 17:42:39 +0000 (19:42 +0200)
committerJohn Crispin <john@phrozen.org>
Thu, 8 Sep 2016 11:40:03 +0000 (13:40 +0200)
This patch backports the new generic HDD/SDD led-trigger
from 4.8-rc1.

Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
target/linux/apm821xx/base-files/etc/board.d/01_leds
target/linux/apm821xx/nand/config-default
target/linux/apm821xx/patches-4.4/040-backport_leds-convert-IDE-trigger-to-common-disk-trigger.patch [new file with mode: 0644]
target/linux/apm821xx/sata/config-default

index 48fe139..a1eeb8f 100755 (executable)
@@ -17,9 +17,11 @@ mr24)
        ;;
 
 mbl)
+       ucidef_set_led_ide "sata" "SATA" "mbl:blue:power"
        ;;
 
 wndr4700)
+       ucidef_set_led_ide "sata" "SATA" "wndr4700:green:hd"
        ucidef_set_led_netdev "wan" "WAN (green)" "wndr4700:green:wan" "eth0.2"
        ucidef_set_led_usbdev "usb3-1" "USB3-1" "wndr4700:blue:usb" "2-1"
        ucidef_set_led_usbdev "usb3-2" "USB3-2" "wndr4700:blue:usb" "3-1"
index 9c93680..5d5d2a4 100644 (file)
@@ -18,6 +18,7 @@ CONFIG_BLK_DEV_SD=y
 CONFIG_GPIOLIB=y
 CONFIG_GPIO_GENERIC=y
 CONFIG_GPIO_GENERIC_PLATFORM=y
+CONFIG_LEDS_TRIGGER_DISK=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_DRV_M48T86=y
 CONFIG_THERMAL=y
diff --git a/target/linux/apm821xx/patches-4.4/040-backport_leds-convert-IDE-trigger-to-common-disk-trigger.patch b/target/linux/apm821xx/patches-4.4/040-backport_leds-convert-IDE-trigger-to-common-disk-trigger.patch
new file mode 100644 (file)
index 0000000..2331e29
--- /dev/null
@@ -0,0 +1,228 @@
+From eb25cb9956cc9384b7fa0d75dec908c9fac8c444 Mon Sep 17 00:00:00 2001
+From: Stephan Linz <linz@li-pro.net>
+Date: Fri, 10 Jun 2016 07:59:56 +0200
+Subject: [PATCH] leds: convert IDE trigger to common disk trigger
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+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               |  4 ++++
+ drivers/ide/ide-disk.c                  |  2 +-
+ drivers/leds/trigger/Kconfig            |  8 +++----
+ drivers/leds/trigger/Makefile           |  2 +-
+ drivers/leds/trigger/ledtrig-disk.c     | 41 +++++++++++++++++++++++++++++++++
+ drivers/leds/trigger/ledtrig-ide-disk.c | 36 -----------------------------
+ include/linux/leds.h                    |  6 ++---
+ 8 files changed, 55 insertions(+), 46 deletions(-)
+ create mode 100644 drivers/leds/trigger/ledtrig-disk.c
+ delete mode 100644 drivers/leds/trigger/ledtrig-ide-disk.c
+
+diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
+index 6be7770..2eca572 100644
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -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.
+        *
+diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
+index 05dbcce..5ceb176 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\n",
+                drive->name, rq_data_dir(rq) == READ ? "read" : "writ",
+diff --git a/drivers/leds/trigger/Kconfig b/drivers/leds/trigger/Kconfig
+index 9893d91..3f9ddb9 100644
+--- a/drivers/leds/trigger/Kconfig
++++ b/drivers/leds/trigger/Kconfig
+@@ -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
+diff --git a/drivers/leds/trigger/Makefile b/drivers/leds/trigger/Makefile
+index 8cc64a4..a72c43c 100644
+--- a/drivers/leds/trigger/Makefile
++++ b/drivers/leds/trigger/Makefile
+@@ -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_HEARTBEAT)  += ledtrig-heartbeat.o
+ obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)  += ledtrig-backlight.o
+ obj-$(CONFIG_LEDS_TRIGGER_GPIO)       += ledtrig-gpio.o
+diff --git a/drivers/leds/trigger/ledtrig-disk.c b/drivers/leds/trigger/ledtrig-disk.c
+new file mode 100644
+index 0000000..cd525b4
+--- /dev/null
++++ b/drivers/leds/trigger/ledtrig-disk.c
+@@ -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
+index 15123d3..0000000
+--- a/drivers/leds/trigger/ledtrig-ide-disk.c  2016-07-11 18:31:24.000000000 +0200
++++ /dev/null  2016-08-08 12:56:55.887448160 +0200
+@@ -1,47 +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/module.h>
+-#include <linux/kernel.h>
+-#include <linux/init.h>
+-#include <linux/leds.h>
+-
+-#define BLINK_DELAY 30
+-
+-DEFINE_LED_TRIGGER(ledtrig_ide);
+-static unsigned long ide_blink_delay = BLINK_DELAY;
+-
+-void ledtrig_ide_activity(void)
+-{
+-      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;
+-}
+-
+-static void __exit ledtrig_ide_exit(void)
+-{
+-      led_trigger_unregister_simple(ledtrig_ide);
+-}
+-
+-module_init(ledtrig_ide_init);
+-module_exit(ledtrig_ide_exit);
+-
+-MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
+-MODULE_DESCRIPTION("LED IDE Disk Activity Trigger");
+-MODULE_LICENSE("GPL");
+diff --git a/include/linux/leds.h b/include/linux/leds.h
+index e5e7f2e..0aa3701 100644
+--- a/include/linux/leds.h
++++ b/include/linux/leds.h
+@@ -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
+-- 
+2.8.1
+
index 8b286fe..5abc105 100644 (file)
@@ -22,6 +22,7 @@ CONFIG_GPIOLIB=y
 CONFIG_GPIO_GENERIC=y
 CONFIG_GPIO_GENERIC_PLATFORM=y
 CONFIG_GPIO_74XX_MMIO=y
+CONFIG_LEDS_TRIGGER_DISK=y
 CONFIG_BLK_DEV_DM=y
 CONFIG_BLK_DEV_DM_BUILTIN=y
 CONFIG_BLK_DEV_MD=y