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

Commit b3a076dd authored by Alexander Shiyan's avatar Alexander Shiyan Committed by Olof Johansson
Browse files

ARM: clps711x: p720t: Using "leds-gpio" driver for LED control



Instead of manually create LED class device, we will use "leds-gpio"
driver for LED control.

Signed-off-by: default avatarAlexander Shiyan <shc_work@mail.ru>
Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parent 200daa36
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -4,6 +4,9 @@
 * Common bits.
 */

#define CLPS711X_NR_GPIO	(4 * 8 + 3)
#define CLPS711X_GPIO(prt, bit)	((prt) * 8 + (bit))

struct sys_timer;

extern void clps711x_map_io(void);
+20 −54
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <linux/io.h>
#include <linux/slab.h>
#include <linux/leds.h>
#include <linux/platform_device.h>

#include <mach/hardware.h>
#include <asm/pgtable.h>
@@ -38,6 +39,8 @@

#include "common.h"

#define GPIO_USERLED	CLPS711X_GPIO(3, 0)

/*
 * Map the P720T system PLD. It occupies two address spaces:
 * 0x10000000 and 0x10400000. We map both regions as one.
@@ -103,71 +106,34 @@ static void __init p720t_init_early(void)
	}
}

/*
 * LED controled by CPLD
 */
#if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS)
static void p720t_led_set(struct led_classdev *cdev,
			      enum led_brightness b)
{
	u8 reg = clps_readb(PDDR);

	if (b != LED_OFF)
		reg |= 0x1;
	else
		reg &= ~0x1;

	clps_writeb(reg, PDDR);
}

static enum led_brightness p720t_led_get(struct led_classdev *cdev)
static struct gpio_led p720t_gpio_leds[] = {
	{
	u8 reg = clps_readb(PDDR);
		.name			= "User LED",
		.default_trigger	= "heartbeat",
		.gpio			= GPIO_USERLED,
	},
};

	return (reg & 0x1) ? LED_FULL : LED_OFF;
}
static struct gpio_led_platform_data p720t_gpio_led_pdata __initdata = {
	.leds		= p720t_gpio_leds,
	.num_leds	= ARRAY_SIZE(p720t_gpio_leds),
};

static int __init p720t_leds_init(void)
static void __init p720t_init_late(void)
{

	struct led_classdev *cdev;
	int ret;

	if (!machine_is_p720t())
		return -ENODEV;

	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
	if (!cdev)
		return -ENOMEM;

	cdev->name = "p720t:0";
	cdev->brightness_set = p720t_led_set;
	cdev->brightness_get = p720t_led_get;
	cdev->default_trigger = "heartbeat";

	ret = led_classdev_register(NULL, cdev);
	if (ret	< 0) {
		kfree(cdev);
		return ret;
	}

	return 0;
	platform_device_register_data(&platform_bus, "leds-gpio", 0,
				      &p720t_gpio_led_pdata,
				      sizeof(p720t_gpio_led_pdata));
}

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

MACHINE_START(P720T, "ARM-Prospector720T")
	/* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
	.atag_offset	= 0x100,
	.fixup		= fixup_p720t,
	.init_early	= p720t_init_early,
	.map_io		= p720t_map_io,
	.init_early	= p720t_init_early,
	.init_irq	= clps711x_init_irq,
	.timer		= &clps711x_timer,
	.init_late	= p720t_init_late,
	.restart	= clps711x_restart,
MACHINE_END