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

Commit bcc397de authored by Linus Walleij's avatar Linus Walleij
Browse files

ARM: integrator: move core module LED to device tree



This gets rid of the custom LED driver in the Integrator directory
altogether and switches us over to using the syscon LEDs for this.

Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 7e610064
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -8,6 +8,16 @@
	core-module@10000000 {
		compatible = "arm,core-module-integrator", "syscon";
		reg = <0x10000000 0x200>;

		/* Use core module LED to indicate CPU load */
		led@0c.0 {
			compatible = "register-bit-led";
			offset = <0x0c>;
			mask = <0x01>;
			label = "integrator:core_module";
			linux,default-trigger = "cpu0";
			default-state = "on";
		};
	};

	ebi@12000000 {
+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@

# Object file lists.

obj-y					:= core.o lm.o leds.o
obj-y					:= core.o lm.o
obj-$(CONFIG_ARCH_INTEGRATOR_AP)	+= integrator_ap.o
obj-$(CONFIG_ARCH_INTEGRATOR_CP)	+= integrator_cp.o

arch/arm/mach-integrator/leds.c

deleted100644 → 0
+0 −80
Original line number Diff line number Diff line
/*
 * Driver for the 4 user LEDs found on the Integrator AP/CP baseboard
 * Based on Versatile and RealView machine LED code
 *
 * License terms: GNU General Public License (GPL) version 2
 * Author: Bryan Wu <bryan.wu@canonical.com>
 */
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/slab.h>
#include <linux/leds.h>

#include "hardware.h"
#include "cm.h"

#if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS)

struct integrator_led {
	struct led_classdev	cdev;
};

/*
 * The triggers lines up below will only be used if the
 * LED triggers are compiled in.
 */
static const struct {
	const char *name;
	const char *trigger;
} integrator_leds[] = {
	{ "integrator:core_module", "cpu0", },
};

static void cm_led_set(struct led_classdev *cdev,
			      enum led_brightness b)
{
	if (b != LED_OFF)
		cm_control(CM_CTRL_LED, CM_CTRL_LED);
	else
		cm_control(CM_CTRL_LED, 0);
}

static enum led_brightness cm_led_get(struct led_classdev *cdev)
{
	u32 reg = cm_get();

	return (reg & CM_CTRL_LED) ? LED_FULL : LED_OFF;
}

static int __init integrator_leds_init(void)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(integrator_leds); i++) {
		struct integrator_led *led;

		led = kzalloc(sizeof(*led), GFP_KERNEL);
		if (!led)
			break;

		led->cdev.name = integrator_leds[i].name;
		led->cdev.brightness_set = cm_led_set;
		led->cdev.brightness_get = cm_led_get;
		led->cdev.default_trigger = integrator_leds[i].trigger;

		if (led_classdev_register(NULL, &led->cdev) < 0) {
			kfree(led);
			break;
		}
	}

	return 0;
}

/*
 * Since we may have triggers on any subsystem, defer registration
 * until after subsystem_init.
 */
fs_initcall(integrator_leds_init);
#endif