Commit af8350c7 authored by Pierre Ossman's avatar Pierre Ossman

mmc: add led trigger

Add a led trigger for each host controller that indicates if there
is a request active on the controller.
Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
parent 15a0580c
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/leds.h>
#include <asm/scatterlist.h> #include <asm/scatterlist.h>
#include <linux/scatterlist.h> #include <linux/scatterlist.h>
...@@ -92,6 +93,8 @@ void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq) ...@@ -92,6 +93,8 @@ void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq)
cmd->error = 0; cmd->error = 0;
host->ops->request(host, mrq); host->ops->request(host, mrq);
} else { } else {
led_trigger_event(host->led, LED_OFF);
pr_debug("%s: req done (CMD%u): %d: %08x %08x %08x %08x\n", pr_debug("%s: req done (CMD%u): %d: %08x %08x %08x %08x\n",
mmc_hostname(host), cmd->opcode, err, mmc_hostname(host), cmd->opcode, err,
cmd->resp[0], cmd->resp[1], cmd->resp[0], cmd->resp[1],
...@@ -146,6 +149,8 @@ mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) ...@@ -146,6 +149,8 @@ mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
WARN_ON(!host->claimed); WARN_ON(!host->claimed);
led_trigger_event(host->led, LED_FULL);
mrq->cmd->error = 0; mrq->cmd->error = 0;
mrq->cmd->mrq = mrq; mrq->cmd->mrq = mrq;
if (mrq->data) { if (mrq->data) {
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/idr.h> #include <linux/idr.h>
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/leds.h>
#include <linux/mmc/host.h> #include <linux/mmc/host.h>
...@@ -115,6 +116,8 @@ int mmc_add_host(struct mmc_host *host) ...@@ -115,6 +116,8 @@ int mmc_add_host(struct mmc_host *host)
snprintf(host->class_dev.bus_id, BUS_ID_SIZE, snprintf(host->class_dev.bus_id, BUS_ID_SIZE,
"mmc%d", host->index); "mmc%d", host->index);
led_trigger_register_simple(host->class_dev.bus_id, &host->led);
err = device_add(&host->class_dev); err = device_add(&host->class_dev);
if (err) if (err)
return err; return err;
...@@ -140,6 +143,8 @@ void mmc_remove_host(struct mmc_host *host) ...@@ -140,6 +143,8 @@ void mmc_remove_host(struct mmc_host *host)
device_del(&host->class_dev); device_del(&host->class_dev);
led_trigger_unregister(host->led);
spin_lock(&mmc_host_lock); spin_lock(&mmc_host_lock);
idr_remove(&mmc_host_idr, host->index); idr_remove(&mmc_host_idr, host->index);
spin_unlock(&mmc_host_lock); spin_unlock(&mmc_host_lock);
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
#ifndef LINUX_MMC_HOST_H #ifndef LINUX_MMC_HOST_H
#define LINUX_MMC_HOST_H #define LINUX_MMC_HOST_H
#include <linux/leds.h>
#include <linux/mmc/core.h> #include <linux/mmc/core.h>
struct mmc_ios { struct mmc_ios {
...@@ -133,6 +135,10 @@ struct mmc_host { ...@@ -133,6 +135,10 @@ struct mmc_host {
struct task_struct *sdio_irq_thread; struct task_struct *sdio_irq_thread;
atomic_t sdio_irq_thread_abort; atomic_t sdio_irq_thread_abort;
#ifdef CONFIG_LEDS_TRIGGERS
struct led_trigger *led; /* activity led */
#endif
unsigned long private[0] ____cacheline_aligned; unsigned long private[0] ____cacheline_aligned;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment