Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 061d17a6 authored by Adrian Hunter's avatar Adrian Hunter Committed by Ulf Hansson
Browse files

mmc: sdhci: Tidy together LED code



ifdef's make the code more complicated and harder to read.
Move all the LED code together to reduce the ifdef's to
one place.

Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent eb5c20de
Loading
Loading
Loading
Loading
+63 −33
Original line number Diff line number Diff line
@@ -38,11 +38,6 @@
#define DBG(f, x...) \
	pr_debug(DRIVER_NAME " [%s()]: " f, __func__,## x)

#if defined(CONFIG_LEDS_CLASS) || (defined(CONFIG_LEDS_CLASS_MODULE) && \
	defined(CONFIG_MMC_SDHCI_MODULE))
#define SDHCI_USE_LEDS_CLASS
#endif

#define MAX_TUNING_LOOP 40

static unsigned int debug_quirks = 0;
@@ -246,7 +241,7 @@ static void sdhci_reinit(struct sdhci_host *host)
	sdhci_enable_card_detection(host);
}

static void sdhci_activate_led(struct sdhci_host *host)
static void __sdhci_led_activate(struct sdhci_host *host)
{
	u8 ctrl;

@@ -255,7 +250,7 @@ static void sdhci_activate_led(struct sdhci_host *host)
	sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
}

static void sdhci_deactivate_led(struct sdhci_host *host)
static void __sdhci_led_deactivate(struct sdhci_host *host)
{
	u8 ctrl;

@@ -264,7 +259,9 @@ static void sdhci_deactivate_led(struct sdhci_host *host)
	sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
}

#ifdef SDHCI_USE_LEDS_CLASS
#if defined(CONFIG_LEDS_CLASS) || (defined(CONFIG_LEDS_CLASS_MODULE) && \
				   defined(CONFIG_MMC_SDHCI_MODULE))

static void sdhci_led_control(struct led_classdev *led,
			      enum led_brightness brightness)
{
@@ -277,12 +274,62 @@ static void sdhci_led_control(struct led_classdev *led,
		goto out;

	if (brightness == LED_OFF)
		sdhci_deactivate_led(host);
		__sdhci_led_deactivate(host);
	else
		sdhci_activate_led(host);
		__sdhci_led_activate(host);
out:
	spin_unlock_irqrestore(&host->lock, flags);
}

static int sdhci_led_register(struct sdhci_host *host)
{
	struct mmc_host *mmc = host->mmc;

	snprintf(host->led_name, sizeof(host->led_name),
		 "%s::", mmc_hostname(mmc));

	host->led.name = host->led_name;
	host->led.brightness = LED_OFF;
	host->led.default_trigger = mmc_hostname(mmc);
	host->led.brightness_set = sdhci_led_control;

	return led_classdev_register(mmc_dev(mmc), &host->led);
}

static void sdhci_led_unregister(struct sdhci_host *host)
{
	led_classdev_unregister(&host->led);
}

static inline void sdhci_led_activate(struct sdhci_host *host)
{
}

static inline void sdhci_led_deactivate(struct sdhci_host *host)
{
}

#else

static inline int sdhci_led_register(struct sdhci_host *host)
{
	return 0;
}

static inline void sdhci_led_unregister(struct sdhci_host *host)
{
}

static inline void sdhci_led_activate(struct sdhci_host *host)
{
	__sdhci_led_activate(host);
}

static inline void sdhci_led_deactivate(struct sdhci_host *host)
{
	__sdhci_led_deactivate(host);
}

#endif

/*****************************************************************************\
@@ -1330,9 +1377,7 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)

	WARN_ON(host->mrq != NULL);

#ifndef SDHCI_USE_LEDS_CLASS
	sdhci_activate_led(host);
#endif
	sdhci_led_activate(host);

	/*
	 * Ensure we don't send the STOP for non-SET_BLOCK_COUNTED
@@ -2193,9 +2238,7 @@ static void sdhci_tasklet_finish(unsigned long param)
	host->cmd = NULL;
	host->data = NULL;

#ifndef SDHCI_USE_LEDS_CLASS
	sdhci_deactivate_led(host);
#endif
	sdhci_led_deactivate(host);

	mmiowb();
	spin_unlock_irqrestore(&host->lock, flags);
@@ -3315,21 +3358,12 @@ int sdhci_add_host(struct sdhci_host *host)
	sdhci_dumpregs(host);
#endif

#ifdef SDHCI_USE_LEDS_CLASS
	snprintf(host->led_name, sizeof(host->led_name),
		"%s::", mmc_hostname(mmc));
	host->led.name = host->led_name;
	host->led.brightness = LED_OFF;
	host->led.default_trigger = mmc_hostname(mmc);
	host->led.brightness_set = sdhci_led_control;

	ret = led_classdev_register(mmc_dev(mmc), &host->led);
	ret = sdhci_led_register(host);
	if (ret) {
		pr_err("%s: Failed to register LED device: %d\n",
		       mmc_hostname(mmc), ret);
		goto unirq;
	}
#endif

	mmiowb();

@@ -3348,10 +3382,8 @@ int sdhci_add_host(struct sdhci_host *host)
	return 0;

unled:
#ifdef SDHCI_USE_LEDS_CLASS
	led_classdev_unregister(&host->led);
	sdhci_led_unregister(host);
unirq:
#endif
	sdhci_do_reset(host, SDHCI_RESET_ALL);
	sdhci_writel(host, 0, SDHCI_INT_ENABLE);
	sdhci_writel(host, 0, SDHCI_SIGNAL_ENABLE);
@@ -3399,9 +3431,7 @@ void sdhci_remove_host(struct sdhci_host *host, int dead)

	mmc_remove_host(mmc);

#ifdef SDHCI_USE_LEDS_CLASS
	led_classdev_unregister(&host->led);
#endif
	sdhci_led_unregister(host);

	if (!dead)
		sdhci_do_reset(host, SDHCI_RESET_ALL);