/*
 * Copyright (C) 2018 Synaptics Incorporated. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND
 * SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES,
 * INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY
 * INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR
 * CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE
 * OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND
 * BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF
 * COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT
 * DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY
 * TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS.
 */

#ifndef _LED_H_
#define _LED_H_

#include "board_config.h"

#ifdef LOAD_LED_CAL_DATA
#define MAX_LUT_COLOR 8
#define MAX_LED_NAME_LEN 15
#define MAX_COLOR_NAME_LEN 15

struct led_color {
	char name[MAX_COLOR_NAME_LEN + 1];
	unsigned char r;
	unsigned char g;
	unsigned char b;
	unsigned char brightness;
};

struct led_item {
	int color_count;
	char name[MAX_LED_NAME_LEN + 1];
	struct led_color color[MAX_LUT_COLOR];
};

typedef struct led_lut {
	/* used when parsing */
	int header_version;
	int led_index;
	int led_index_found;

	/* result */
	struct led_item led[NUM_LED];
	int validated;
} LED_LUT;

extern LED_LUT lut;
#endif

void detect_led_driver(int *led_driver_type);
void cold_boot_show_led_init_boot(int led_driver_type);
void cold_boot_show_led_done_boot();

#endif  // _LED_H_
