// SPDX-License-Identifier: GPL-2.0-only
/*
 * Driver for the LED found on the EBSA110 machine
 * Based on Versatile and RealView machine LED code
 *
 * 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 <asm/mach-types.h>

#include "core.h"

#if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS)
static void ebsa110_led_set(struct led_classdev *cdev,
			      enum led_brightness b)
{
	u8 reg = __raw_readb(SOFT_BASE);

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

	__raw_writeb(reg, SOFT_BASE);
}

static enum led_brightness ebsa110_led_get(struct led_classdev *cdev)
{
	u8 reg = __raw_readb(SOFT_BASE);

	return (reg & 0x80) ? LED_FULL : LED_OFF;
}

static int __init ebsa110_leds_init(void)
{

	struct led_classdev *cdev;
	int ret;

	if (!machine_is_ebsa110())
		return -ENODEV;

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

	cdev->name = "ebsa110:0";
	cdev->brightness_set = ebsa110_led_set;
	cdev->brightness_get = ebsa110_led_get;
	cdev->default_trigger = "heartbeat";

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

	return 0;
}

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