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 <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. | ||||
| 	 * | ||||
|  |  | |||
|  | @ -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", | ||||
|  |  | |||
|  | @ -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, | ||||
| }; | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|  * LED IDE-Disk Activity Trigger | ||||
|  * LED Disk Activity Trigger | ||||
|  * | ||||
|  * Copyright 2006 Openedhand Ltd. | ||||
|  * | ||||
|  | @ -17,20 +17,25 @@ | |||
| 
 | ||||
| #define BLINK_DELAY 30 | ||||
| 
 | ||||
| DEFINE_LED_TRIGGER(ledtrig_disk); | ||||
| 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, | ||||
| 				  &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); | ||||
| 
 | ||||
| 	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 */ | ||||
| 
 | ||||
| /* 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 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Stephan Linz
						Stephan Linz