forked from mirrors/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>
This commit is contained in:
		
							parent
							
								
									fa4191a609
								
							
						
					
					
						commit
						eb25cb9956
					
				
					 7 changed files with 26 additions and 17 deletions
				
			
		|  | @ -69,6 +69,7 @@ | ||||||
| #include <asm/unaligned.h> | #include <asm/unaligned.h> | ||||||
| #include <linux/cdrom.h> | #include <linux/cdrom.h> | ||||||
| #include <linux/ratelimit.h> | #include <linux/ratelimit.h> | ||||||
|  | #include <linux/leds.h> | ||||||
| #include <linux/pm_runtime.h> | #include <linux/pm_runtime.h> | ||||||
| #include <linux/platform_device.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; | 	struct ata_port *ap = qc->ap; | ||||||
| 
 | 
 | ||||||
|  | 	/* Trigger the LED (if available) */ | ||||||
|  | 	ledtrig_disk_activity(); | ||||||
|  | 
 | ||||||
| 	/* XXX: New EH and old EH use different mechanisms to
 | 	/* XXX: New EH and old EH use different mechanisms to
 | ||||||
| 	 * synchronize EH with regular execution path. | 	 * synchronize EH with regular execution path. | ||||||
| 	 * | 	 * | ||||||
|  |  | ||||||
|  | @ -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(drive->dev_flags & IDE_DFLAG_BLOCKED); | ||||||
| 	BUG_ON(rq->cmd_type != REQ_TYPE_FS); | 	BUG_ON(rq->cmd_type != REQ_TYPE_FS); | ||||||
| 
 | 
 | ||||||
| 	ledtrig_ide_activity(); | 	ledtrig_disk_activity(); | ||||||
| 
 | 
 | ||||||
| 	pr_debug("%s: %sing: block=%llu, sectors=%u\n", | 	pr_debug("%s: %sing: block=%llu, sectors=%u\n", | ||||||
| 		 drive->name, rq_data_dir(rq) == READ ? "read" : "writ", | 		 drive->name, rq_data_dir(rq) == READ ? "read" : "writ", | ||||||
|  |  | ||||||
|  | @ -50,7 +50,7 @@ static struct led_classdev hp6xx_red_led = { | ||||||
| 
 | 
 | ||||||
| static struct led_classdev hp6xx_green_led = { | static struct led_classdev hp6xx_green_led = { | ||||||
| 	.name			= "hp6xx:green", | 	.name			= "hp6xx:green", | ||||||
| 	.default_trigger	= "ide-disk", | 	.default_trigger	= "disk-activity", | ||||||
| 	.brightness_set		= hp6xxled_green_set, | 	.brightness_set		= hp6xxled_green_set, | ||||||
| 	.flags			= LED_CORE_SUSPENDRESUME, | 	.flags			= LED_CORE_SUSPENDRESUME, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -33,12 +33,12 @@ config LEDS_TRIGGER_ONESHOT | ||||||
| 
 | 
 | ||||||
| 	  If unsure, say Y. | 	  If unsure, say Y. | ||||||
| 
 | 
 | ||||||
| config LEDS_TRIGGER_IDE_DISK | config LEDS_TRIGGER_DISK | ||||||
| 	bool "LED IDE Disk Trigger" | 	bool "LED Disk Trigger" | ||||||
| 	depends on IDE_GD_ATA | 	depends on IDE_GD_ATA || ATA | ||||||
| 	depends on LEDS_TRIGGERS | 	depends on LEDS_TRIGGERS | ||||||
| 	help | 	help | ||||||
| 	  This allows LEDs to be controlled by IDE disk activity. | 	  This allows LEDs to be controlled by disk activity. | ||||||
| 	  If unsure, say Y. | 	  If unsure, say Y. | ||||||
| 
 | 
 | ||||||
| config LEDS_TRIGGER_MTD | config LEDS_TRIGGER_MTD | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| obj-$(CONFIG_LEDS_TRIGGER_TIMER)	+= ledtrig-timer.o | obj-$(CONFIG_LEDS_TRIGGER_TIMER)	+= ledtrig-timer.o | ||||||
| obj-$(CONFIG_LEDS_TRIGGER_ONESHOT)	+= ledtrig-oneshot.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_MTD)		+= ledtrig-mtd.o | ||||||
| obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)	+= ledtrig-heartbeat.o | obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)	+= ledtrig-heartbeat.o | ||||||
| obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)	+= ledtrig-backlight.o | obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)	+= ledtrig-backlight.o | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /*
 | /*
 | ||||||
|  * LED IDE-Disk Activity Trigger |  * LED Disk Activity Trigger | ||||||
|  * |  * | ||||||
|  * Copyright 2006 Openedhand Ltd. |  * Copyright 2006 Openedhand Ltd. | ||||||
|  * |  * | ||||||
|  | @ -17,20 +17,25 @@ | ||||||
| 
 | 
 | ||||||
| #define BLINK_DELAY 30 | #define BLINK_DELAY 30 | ||||||
| 
 | 
 | ||||||
|  | DEFINE_LED_TRIGGER(ledtrig_disk); | ||||||
| DEFINE_LED_TRIGGER(ledtrig_ide); | DEFINE_LED_TRIGGER(ledtrig_ide); | ||||||
| 
 | 
 | ||||||
| void ledtrig_ide_activity(void) | void ledtrig_disk_activity(void) | ||||||
| { | { | ||||||
| 	unsigned long ide_blink_delay = BLINK_DELAY; | 	unsigned long blink_delay = BLINK_DELAY; | ||||||
| 
 | 
 | ||||||
|  | 	led_trigger_blink_oneshot(ledtrig_disk, | ||||||
|  | 				  &blink_delay, &blink_delay, 0); | ||||||
| 	led_trigger_blink_oneshot(ledtrig_ide, | 	led_trigger_blink_oneshot(ledtrig_ide, | ||||||
| 				  &ide_blink_delay, &ide_blink_delay, 0); | 				  &blink_delay, &blink_delay, 0); | ||||||
| } | } | ||||||
| EXPORT_SYMBOL(ledtrig_ide_activity); | EXPORT_SYMBOL(ledtrig_disk_activity); | ||||||
| 
 | 
 | ||||||
| static int __init ledtrig_ide_init(void) | static int __init ledtrig_disk_init(void) | ||||||
| { | { | ||||||
|  | 	led_trigger_register_simple("disk-activity", &ledtrig_disk); | ||||||
| 	led_trigger_register_simple("ide-disk", &ledtrig_ide); | 	led_trigger_register_simple("ide-disk", &ledtrig_ide); | ||||||
|  | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| device_initcall(ledtrig_ide_init); | device_initcall(ledtrig_disk_init); | ||||||
|  | @ -325,10 +325,10 @@ static inline void *led_get_trigger_data(struct led_classdev *led_cdev) | ||||||
| #endif /* CONFIG_LEDS_TRIGGERS */ | #endif /* CONFIG_LEDS_TRIGGERS */ | ||||||
| 
 | 
 | ||||||
| /* Trigger specific functions */ | /* Trigger specific functions */ | ||||||
| #ifdef CONFIG_LEDS_TRIGGER_IDE_DISK | #ifdef CONFIG_LEDS_TRIGGER_DISK | ||||||
| extern void ledtrig_ide_activity(void); | extern void ledtrig_disk_activity(void); | ||||||
| #else | #else | ||||||
| static inline void ledtrig_ide_activity(void) {} | static inline void ledtrig_disk_activity(void) {} | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_LEDS_TRIGGER_MTD | #ifdef CONFIG_LEDS_TRIGGER_MTD | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Stephan Linz
						Stephan Linz