/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright (c) 2015 Google, Inc
 * Written by Simon Glass <sjg@chromium.org>
 */

#ifndef __LED_H
#define __LED_H

/**
 * struct led_uc_plat - Platform data the uclass stores about each device
 *
 * @label:	LED label
 */
struct led_uc_plat {
	const char *label;
};

/**
 * struct led_uc_priv - Private data the uclass stores about each device
 *
 * @period_ms:	Flash period in milliseconds
 */
struct led_uc_priv {
	int period_ms;
};

enum led_state_t {
	LEDST_OFF = 0,
	LEDST_ON = 1,
	LEDST_TOGGLE,
#ifdef CONFIG_LED_BLINK
	LEDST_BLINK,
#endif
#ifdef CONFIG_AML_LED_PWM
	LEDST_SET_BRIGHTNESS,
	LEDST_GET_BRIGHTNESS,
#endif

	LEDST_COUNT,
};

struct led_ops {
	/**
	 * set_state() - set the state of an LED
	 *
	 * @dev:	LED device to change
	 * @state:	LED state to set
	 * @return 0 if OK, -ve on error
	 */
	int (*set_state)(struct udevice *dev, enum led_state_t state);

	/**
	 * led_get_state() - get the state of an LED
	 *
	 * @dev:	LED device to change
	 * @return LED state led_state_t, or -ve on error
	 */
	enum led_state_t (*get_state)(struct udevice *dev);

#ifdef CONFIG_LED_BLINK
	/**
	 * led_set_period() - set the blink period of an LED
	 *
	 * Thie records the period if supported, or returns -ENOSYS if not.
	 * To start the LED blinking, use set_state().
	 *
	 * @dev:	LED device to change
	 * @period_ms:	LED blink period in milliseconds
	 * @return 0 if OK, -ve on error
	 */
	int (*set_period)(struct udevice *dev, int period_ms);
#endif
#ifdef CONFIG_AML_LED_PWM
	/**
	 * set_brightness() - set the brightness of an LED
	 *
	 *
	 * @dev:	LED device to change
	 * @brightness:	LED brightness
	 * @return 0 if OK, -ve on error
	 */
	int (*set_brightness)(struct udevice *dev, int brightness);
	/**
	 * get_brightness() - get the brightness of an LED
	 *
	 * Thie records the period if supported, or returns -ENOSYS if not.
	 * To start the LED blinking, use set_state().
	 *
	 * @dev:	LED device to change
	 * @return brightness
	 */
	int (*get_brightness)(struct udevice *dev);
#endif
};

#define led_get_ops(dev)	((struct led_ops *)(dev)->driver->ops)

/**
 * led_get_by_label() - Find an LED device by label
 *
 * @label:	LED label to look up
 * @devp:	Returns the associated device, if found
 * @return 0 if found, -ENODEV if not found, other -ve on error
 */
int led_get_by_label(const char *label, struct udevice **devp);

/**
 * led_set_state() - set the state of an LED
 *
 * @dev:	LED device to change
 * @state:	LED state to set
 * @return 0 if OK, -ve on error
 */
int led_set_state(struct udevice *dev, enum led_state_t state);

/**
 * led_get_state() - get the state of an LED
 *
 * @dev:	LED device to change
 * @return LED state led_state_t, or -ve on error
 */
enum led_state_t led_get_state(struct udevice *dev);

/**
 * led_set_period() - set the blink period of an LED
 *
 * @dev:	LED device to change
 * @period_ms:	LED blink period in milliseconds
 * @return 0 if OK, -ve on error
 */
int led_set_period(struct udevice *dev, int period_ms);

/**
 * led_default_state() - set the default state for all the LED
 *
 * This enables all leds which have default state.
 * see Documentation/devicetree/bindings/leds/common.txt
 *
 */
int led_default_state(void);

#ifdef CONFIG_AML_LED_PWM
/**
 * set_brightness() - set the brightness of an LED
 *
 * Thie records the period if supported, or returns -ENOSYS if not.
 * To start the LED blinking, use set_state().
 *
 * @dev:	LED device to change
 * @period_ms:	LED blink period in milliseconds
 * @return 0 if OK, -ve on error
 */
int led_set_brightness(struct udevice *dev, int brightness);
/**
 * get_brightness() - get the brightness of an LED
 *
 * Thie records the period if supported, or returns -ENOSYS if not.
 * To start the LED blinking, use set_state().
 *
 * @dev:	LED device to change
 * @period_ms:	LED blink period in milliseconds
 * @return 0 if OK, -ve on error
 */
int led_get_brightness(struct udevice *dev);
#endif
#endif
