Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

leds: convert IDE trigger to common disk trigger

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>

authored by

Stephan Linz and committed by
Jacek Anaszewski
eb25cb99 fa4191a6

+26 -17
+4
drivers/ata/libata-core.c
··· 69 69 #include <asm/unaligned.h> 70 70 #include <linux/cdrom.h> 71 71 #include <linux/ratelimit.h> 72 + #include <linux/leds.h> 72 73 #include <linux/pm_runtime.h> 73 74 #include <linux/platform_device.h> 74 75 ··· 5072 5071 void ata_qc_complete(struct ata_queued_cmd *qc) 5073 5072 { 5074 5073 struct ata_port *ap = qc->ap; 5074 + 5075 + /* Trigger the LED (if available) */ 5076 + ledtrig_disk_activity(); 5075 5077 5076 5078 /* XXX: New EH and old EH use different mechanisms to 5077 5079 * synchronize EH with regular execution path.
+1 -1
drivers/ide/ide-disk.c
··· 186 186 BUG_ON(drive->dev_flags & IDE_DFLAG_BLOCKED); 187 187 BUG_ON(rq->cmd_type != REQ_TYPE_FS); 188 188 189 - ledtrig_ide_activity(); 189 + ledtrig_disk_activity(); 190 190 191 191 pr_debug("%s: %sing: block=%llu, sectors=%u\n", 192 192 drive->name, rq_data_dir(rq) == READ ? "read" : "writ",
+1 -1
drivers/leds/leds-hp6xx.c
··· 50 50 51 51 static struct led_classdev hp6xx_green_led = { 52 52 .name = "hp6xx:green", 53 - .default_trigger = "ide-disk", 53 + .default_trigger = "disk-activity", 54 54 .brightness_set = hp6xxled_green_set, 55 55 .flags = LED_CORE_SUSPENDRESUME, 56 56 };
+4 -4
drivers/leds/trigger/Kconfig
··· 33 33 34 34 If unsure, say Y. 35 35 36 - config LEDS_TRIGGER_IDE_DISK 37 - bool "LED IDE Disk Trigger" 38 - depends on IDE_GD_ATA 36 + config LEDS_TRIGGER_DISK 37 + bool "LED Disk Trigger" 38 + depends on IDE_GD_ATA || ATA 39 39 depends on LEDS_TRIGGERS 40 40 help 41 - This allows LEDs to be controlled by IDE disk activity. 41 + This allows LEDs to be controlled by disk activity. 42 42 If unsure, say Y. 43 43 44 44 config LEDS_TRIGGER_MTD
+1 -1
drivers/leds/trigger/Makefile
··· 1 1 obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o 2 2 obj-$(CONFIG_LEDS_TRIGGER_ONESHOT) += ledtrig-oneshot.o 3 - obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o 3 + obj-$(CONFIG_LEDS_TRIGGER_DISK) += ledtrig-disk.o 4 4 obj-$(CONFIG_LEDS_TRIGGER_MTD) += ledtrig-mtd.o 5 5 obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o 6 6 obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += ledtrig-backlight.o
+12 -7
drivers/leds/trigger/ledtrig-ide-disk.c drivers/leds/trigger/ledtrig-disk.c
··· 1 1 /* 2 - * LED IDE-Disk Activity Trigger 2 + * LED Disk Activity Trigger 3 3 * 4 4 * Copyright 2006 Openedhand Ltd. 5 5 * ··· 17 17 18 18 #define BLINK_DELAY 30 19 19 20 + DEFINE_LED_TRIGGER(ledtrig_disk); 20 21 DEFINE_LED_TRIGGER(ledtrig_ide); 21 22 22 - void ledtrig_ide_activity(void) 23 + void ledtrig_disk_activity(void) 23 24 { 24 - unsigned long ide_blink_delay = BLINK_DELAY; 25 + unsigned long blink_delay = BLINK_DELAY; 25 26 27 + led_trigger_blink_oneshot(ledtrig_disk, 28 + &blink_delay, &blink_delay, 0); 26 29 led_trigger_blink_oneshot(ledtrig_ide, 27 - &ide_blink_delay, &ide_blink_delay, 0); 30 + &blink_delay, &blink_delay, 0); 28 31 } 29 - EXPORT_SYMBOL(ledtrig_ide_activity); 32 + EXPORT_SYMBOL(ledtrig_disk_activity); 30 33 31 - static int __init ledtrig_ide_init(void) 34 + static int __init ledtrig_disk_init(void) 32 35 { 36 + led_trigger_register_simple("disk-activity", &ledtrig_disk); 33 37 led_trigger_register_simple("ide-disk", &ledtrig_ide); 38 + 34 39 return 0; 35 40 } 36 - device_initcall(ledtrig_ide_init); 41 + device_initcall(ledtrig_disk_init);
+3 -3
include/linux/leds.h
··· 325 325 #endif /* CONFIG_LEDS_TRIGGERS */ 326 326 327 327 /* Trigger specific functions */ 328 - #ifdef CONFIG_LEDS_TRIGGER_IDE_DISK 329 - extern void ledtrig_ide_activity(void); 328 + #ifdef CONFIG_LEDS_TRIGGER_DISK 329 + extern void ledtrig_disk_activity(void); 330 330 #else 331 - static inline void ledtrig_ide_activity(void) {} 331 + static inline void ledtrig_disk_activity(void) {} 332 332 #endif 333 333 334 334 #ifdef CONFIG_LEDS_TRIGGER_MTD