/*
 * leds-s2mu205.h - Flash-led driver for Samsung S2MU205
 *
 * Copyright (C) 2019 Samsung Electronics
 *
 * 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.
 *
 */
#ifndef __LEDS_S2MU205_H__
#define __LEDS_S2MU205_H__

#ifdef CONFIG_MUIC_NOTIFIER
#include <linux/muic/muic.h>
#include <linux/muic/muic_notifier.h>
#endif /* CONFIG_MUIC_NOTIFIER */

#define MASK(width, shift)		(((0x1 << (width)) - 1) << shift)
#define S2MU205_FLASH_LIGHT_MAX 5

/* Interrupt register */
#define S2MU205_FLED_INT1		0x04
#define S2MU205_FLED_INT2		0x05

#define S2MU205_FLED_INT1_MASK		0x0C
#define S2MU205_FLED_INT2_MASK		0x0D

/* Status register */
#define S2MU205_FLED_STATUS		0x3F

/* Mask for status register */
#define S2MU205_CH1_FLASH_ON		MASK(1,7)
#define S2MU205_CH1_TORCH_ON		MASK(1,6)

#define S2MU205_CH2_FLASH_ON		MASK(1,5)
#define S2MU205_CH2_TORCH_ON		MASK(1,4)

#define S2MU205_DHC_DET_ON		MASK(1,3)

/* Channel control */
#define S2MU205_FLED_CH1_CTRL0		0x40
#define S2MU205_FLED_CH1_CTRL1		0x41
#define S2MU205_FLED_CH1_CTRL2		0x42
#define S2MU205_FLED_CH1_CTRL3		0x43

#define S2MU205_FLED_CH2_CTRL0		0x44
#define S2MU205_FLED_CH2_CTRL1		0x45
#define S2MU205_FLED_CH2_CTRL2		0x46
#define S2MU205_FLED_CH2_CTRL3		0x47

/* Mask for channel control register */
#define S2MU205_CHX_OPEN_PROT_EN	MASK(1,7)
#define S2MU205_CHX_SHORT_PROT_EN	MASK(1,6)
#define S2MU205_CHX_FLASH_IOUT		MASK(5,0)
#define S2MU205_CHX_TORCH_IOUT		MASK(5,0)
#define S2MU205_CHX_FLASH_TMR_MODE	MASK(1,7)
#define S2MU205_CHX_TORCH_TMR_MODE	MASK(1,7)
#define S2MU205_CHX_FLASH_TMR_DUR	MASK(4,0)
#define S2MU205_CHX_TORCH_TMR_DUR	MASK(4,0)
#define S2MU205_CHX_DIS_TORCH_TMR	MASK(1,6)

/* Mode control */
#define S2MU205_FLED_CTRL0		0x48
#define S2MU205_FLED_CTRL1		0x49
#define S2MU205_FLED_CTRL2		0x4A
#define S2MU205_FLED_CTRL3		0x4B

#define S2MU205_FLED_TEST0		0x4C
#define S2MU205_FLED_TEST1		0x4D
#define S2MU205_FLED_TEST2		0x4E

/* Mask for channel control register */
#define S2MU205_FLED_CTRL0_MASK		MASK(8,0)
#define S2MU205_CH1_FLASH_FLED_EN	MASK(2,6)
#define S2MU205_CH1_TORCH_FLED_EN	MASK(2,4)

#define S2MU205_CH2_FLASH_FLED_EN	MASK(2,2)
#define S2MU205_CH2_TORCH_FLED_EN	MASK(2,0)

/* Mask for Mode control register */
#define S2MU205_TORCH_OFF		0x00
#define S2MU205_FLASH_OFF		0x00

#define S2MU205_CH1_TORCH_ON_I2C	MASK(2,4)
#define S2MU205_CH2_TORCH_ON_I2C	MASK(2,0)
#define S2MU205_CH1_TORCH_ON_GPIO	MASK(1,5)
#define S2MU205_CH2_TORCH_ON_GPIO	MASK(1,1)

#define S2MU205_CH1_FLASH_ON_I2C	MASK(2,6)
#define S2MU205_CH2_FLASH_ON_I2C	MASK(2,2)
#define S2MU205_CH1_FLASH_ON_GPIO	MASK(1,6)
#define S2MU205_CH2_FLASH_ON_GPIO	MASK(1,2)

#define S2MU205_CHGIN_ENGH		MASK(1,7)
#define S2MU205_FLED_BOOST_EN		MASK(1,6)
#define S2MU205_FLED_REG_RESET		MASK(1,5)
#define S2MU205_FLED_SOFT_ON_TIME	MASK(2,3)
#define S2MU205_ADAPTIVE_MODE_EN	MASK(1,2)
#define S2MU205_EN_CHANNEL_SHARE	MASK(1,1)
#define S2MU205_BOOST_VOUT_FLASH	MASK(6,0)
#define S2MU205_ADAP_BOOST_VOUT_FLASH	MASK(6,0)

/* Factory mode variable */
#define S2MU205_FACTORY			1
#define S2MU205_NORMAL			0

/* LED control variable */
#define S2MU205_LED_NUM			2
#define LED_TURN_OFF 			-1
#define S2MU205_FLED_DEBUG

enum s2mu205_led_id {
	S2MU205_OFF,
	S2MU205_FLASH_LED = 0,
	S2MU205_TORCH_LED,
	S2MU205_LED_MAX,
};

enum s2mu205_flash_current {
	S2MU205_FLASH_OUT_I_25MA,
	S2MU205_FLASH_OUT_I_50MA,
	S2MU205_FLASH_OUT_I_75MA,
	S2MU205_FLASH_OUT_I_100MA,
	S2MU205_FLASH_OUT_I_125MA,
	S2MU205_FLASH_OUT_I_150MA,
	S2MU205_FLASH_OUT_I_175MA,
	S2MU205_FLASH_OUT_I_200MA,
	S2MU205_FLASH_OUT_I_225MA,
	S2MU205_FLASH_OUT_I_250MA,
	S2MU205_FLASH_OUT_I_275MA,
	S2MU205_FLASH_OUT_I_300MA,
	S2MU205_FLASH_OUT_I_325MA,
	S2MU205_FLASH_OUT_I_350MA,
	S2MU205_FLASH_OUT_I_375MA,
	S2MU205_FLASH_OUT_I_400MA,
	S2MU205_FLASH_OUT_I_450MA,
	S2MU205_FLASH_OUT_I_500MA,
	S2MU205_FLASH_OUT_I_550MA,
	S2MU205_FLASH_OUT_I_600MA,
	S2MU205_FLASH_OUT_I_650MA,
	S2MU205_FLASH_OUT_I_700MA,
	S2MU205_FLASH_OUT_I_755MA,
	S2MU205_FLASH_OUT_I_800MA,
	S2MU205_FLASH_OUT_I_850MA,
	S2MU205_FLASH_OUT_I_900MA,
	S2MU205_FLASH_OUT_I_950MA,
	S2MU205_FLASH_OUT_I_1000MA,
	S2MU205_FLASH_OUT_I_1050MA,
	S2MU205_FLASH_OUT_I_1100MA,
	S2MU205_FLASH_OUT_I_1150MA,
	S2MU205_FLASH_OUT_I_1200MA,
};

enum s2mu205_torch_current {
	S2MU205_TORCH_OUT_I_10MA,
	S2MU205_TORCH_OUT_I_20MA,
	S2MU205_TORCH_OUT_I_30MA,
	S2MU205_TORCH_OUT_I_40MA,
	S2MU205_TORCH_OUT_I_50MA,
	S2MU205_TORCH_OUT_I_60MA,
	S2MU205_TORCH_OUT_I_70MA,
	S2MU205_TORCH_OUT_I_80MA,
	S2MU205_TORCH_OUT_I_90MA,
	S2MU205_TORCH_OUT_I_100MA,
	S2MU205_TORCH_OUT_I_110MA,
	S2MU205_TORCH_OUT_I_120MA,
	S2MU205_TORCH_OUT_I_130MA,
	S2MU205_TORCH_OUT_I_140MA,
	S2MU205_TORCH_OUT_I_150MA,
	S2MU205_TORCH_OUT_I_160MA,
	S2MU205_TORCH_OUT_I_170MA,
	S2MU205_TORCH_OUT_I_180MA,
	S2MU205_TORCH_OUT_I_190MA,
	S2MU205_TORCH_OUT_I_200MA,
	S2MU205_TORCH_OUT_I_210MA,
	S2MU205_TORCH_OUT_I_220MA,
	S2MU205_TORCH_OUT_I_230MA,
	S2MU205_TORCH_OUT_I_240MA,
	S2MU205_TORCH_OUT_I_250MA,
	S2MU205_TORCH_OUT_I_260MA,
	S2MU205_TORCH_OUT_I_270MA,
	S2MU205_TORCH_OUT_I_280MA,
	S2MU205_TORCH_OUT_I_290MA,
	S2MU205_TORCH_OUT_I_300MA,
	S2MU205_TORCH_OUT_I_310MA,
	S2MU205_TORCH_OUT_I_320MA,
};

enum s2mu205_flash_timeout {
	S2MU205_FLASH_TIMEOUT_62MS,
	S2MU205_FLASH_TIMEOUT_124MS,
	S2MU205_FLASH_TIMEOUT_186MS,
	S2MU205_FLASH_TIMEOUT_248MS,
	S2MU205_FLASH_TIMEOUT_310MS,
	S2MU205_FLASH_TIMEOUT_372MS,
	S2MU205_FLASH_TIMEOUT_434MS,
	S2MU205_FLASH_TIMEOUT_496MS,
	S2MU205_FLASH_TIMEOUT_558MS,
	S2MU205_FLASH_TIMEOUT_620MS,
	S2MU205_FLASH_TIMEOUT_682MS,
	S2MU205_FLASH_TIMEOUT_744MS,
	S2MU205_FLASH_TIMEOUT_806MS,
	S2MU205_FLASH_TIMEOUT_868MS,
	S2MU205_FLASH_TIMEOUT_930MS,
	S2MU205_FLASH_TIMEOUT_992MS,
};


enum s2mu205_torch_timeout {
	S2MU205_TORCH_TIMEOUT_262MS,
	S2MU205_TORCH_TIMEOUT_524MS,
	S2MU205_TORCH_TIMEOUT_768MS,
	S2MU205_TORCH_TIMEOUT_1048MS,
	S2MU205_TORCH_TIMEOUT_1572MS,
	S2MU205_TORCH_TIMEOUT_2096MS,
	S2MU205_TORCH_TIMEOUT_2620MS,
	S2MU205_TORCH_TIMEOUT_3144MS,
	S2MU205_TORCH_TIMEOUT_4192MS,
	S2MU205_TORCH_TIMEOUT_5242MS,
	S2MU205_TORCH_TIMEOUT_6291MS,
	S2MU205_TORCH_TIMEOUT_7340MS,
	S2MU205_TORCH_TIMEOUT_9437MS,
	S2MU205_TORCH_TIMEOUT_11534MS,
	S2MU205_TORCH_TIMEOUT_13631MS,
	S2MU205_TORCH_TIMEOUT_15728MS,
};

/* FLED operating mode enable */
enum operating_mode {
	AUTO_MODE = 0,
	BOOST_MODE,
	TA_MODE,
	SYS_MODE,
};

enum s2mu205_fled_mode {
	S2MU205_FLED_MODE_OFF = 0,
	S2MU205_FLED_MODE_PREFLASH,
	S2MU205_FLED_MODE_FLASH,
	S2MU205_FLED_MODE_MOVIE,
};

enum s2mu205_fled_select {
	S2MU205_FLED_OFF = 0,
	S2MU205_FLED_CH1,	/* FLED1 */
	S2MU205_FLED_CH2,	/* FLED2 */
};

struct s2mu205_led {
	const char *name;
	u32 id;
	int brightness;
	int timeout;
	int max_brightness;
};

struct s2mu205_fled_platform_data {
	int num_leds;
	struct s2mu205_led leds[S2MU205_LED_MAX];
	int torch_pin;
	int flash_pin;
	unsigned int flash_brightness;
	unsigned int preflash_brightness;
	unsigned int movie_brightness;
	unsigned int torch_brightness;
	unsigned int factory_brightness;
	unsigned int flashlight_brightness[S2MU205_FLASH_LIGHT_MAX];
};

void s2mu205_led_dump_reg(void);
int s2mu205_led_mode_ctrl(int mode);
extern void s2mu205_set_operation_mode(int value);
#endif
