Skip to content

Commit

Permalink
leds: convert IDE trigger to common disk trigger
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
rexut authored and janaszewski committed Jun 20, 2016
1 parent fa4191a commit eb25cb9
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 17 deletions.
4 changes: 4 additions & 0 deletions drivers/ata/libata-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down Expand Up @@ -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.
*
Expand Down
2 changes: 1 addition & 1 deletion drivers/ide/ide-disk.c
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion drivers/leds/leds-hp6xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};
Expand Down
8 changes: 4 additions & 4 deletions drivers/leds/trigger/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion drivers/leds/trigger/Makefile
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* LED IDE-Disk Activity Trigger
* LED Disk Activity Trigger
*
* Copyright 2006 Openedhand Ltd.
*
Expand All @@ -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);
6 changes: 3 additions & 3 deletions include/linux/leds.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit eb25cb9

Please sign in to comment.