From e9f86c6cac1802eca052f98d3a5874521b2a87cd Mon Sep 17 00:00:00 2001 From: Christian Lamparter Date: Tue, 30 Aug 2016 19:42:39 +0200 Subject: [PATCH] apm821xx: backport generic HDD led-triggers for WNDR4700 and MBL This patch backports the new generic HDD/SDD led-trigger from 4.8-rc1. Signed-off-by: Christian Lamparter --- .../apm821xx/base-files/etc/board.d/01_leds | 2 + target/linux/apm821xx/nand/config-default | 1 + ...t-IDE-trigger-to-common-disk-trigger.patch | 228 ++++++++++++++++++ target/linux/apm821xx/sata/config-default | 1 + 4 files changed, 232 insertions(+) create mode 100644 target/linux/apm821xx/patches-4.4/040-backport_leds-convert-IDE-trigger-to-common-disk-trigger.patch diff --git a/target/linux/apm821xx/base-files/etc/board.d/01_leds b/target/linux/apm821xx/base-files/etc/board.d/01_leds index 48fe139ce9..a1eeb8fda8 100755 --- a/target/linux/apm821xx/base-files/etc/board.d/01_leds +++ b/target/linux/apm821xx/base-files/etc/board.d/01_leds @@ -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" diff --git a/target/linux/apm821xx/nand/config-default b/target/linux/apm821xx/nand/config-default index 9c93680f5f..5d5d2a4bf4 100644 --- a/target/linux/apm821xx/nand/config-default +++ b/target/linux/apm821xx/nand/config-default @@ -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 index 0000000000..2331e29fd8 --- /dev/null +++ b/target/linux/apm821xx/patches-4.4/040-backport_leds-convert-IDE-trigger-to-common-disk-trigger.patch @@ -0,0 +1,228 @@ +From eb25cb9956cc9384b7fa0d75dec908c9fac8c444 Mon Sep 17 00:00:00 2001 +From: Stephan Linz +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 +Cc: Jörg Sommer +Cc: Richard Purdie +Signed-off-by: Stephan Linz +Signed-off-by: Jacek Anaszewski +--- + 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 + #include + #include ++#include + #include + #include + +@@ -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 ++ * ++ * 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 ++#include ++#include ++ ++#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 +- * +- * 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 +-#include +-#include +-#include +- +-#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 "); +-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 + diff --git a/target/linux/apm821xx/sata/config-default b/target/linux/apm821xx/sata/config-default index 8b286fe159..5abc105350 100644 --- a/target/linux/apm821xx/sata/config-default +++ b/target/linux/apm821xx/sata/config-default @@ -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 -- 2.30.2