/*
 * leds-s2mu106.h - Flash-led driver for Samsung S2MU106
 *
 * Copyright (C) 2018 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_S2MU106_FLASH_H__
#define __LEDS_S2MU106_FLASH_H__
#include <linux/leds.h>

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

#define FLED_EN 0

#define S2MU106_CH_MAX 3
#define S2MU106_FLASH_LIGHT_MAX 5

/* Interrupt register */
#define S2MU106_FLED_INT1	0x04
#define S2MU106_FLED_INT2	0x05

#define S2MU106_FLED_INT1_MASK	0x0B
#define S2MU106_FLED_INT2_MASK	0x0C

/* Status register */
#define S2MU106_FLED_STATUS1	0x14
#define S2MU106_FLED_STATUS2	0x15

/* Mask for status register */
#define S2MU106_CH1_FLASH_ON	MASK(1,7)
#define S2MU106_CH1_TORCH_ON	MASK(1,6)
#define S2MU106_CH2_FLASH_ON	MASK(1,5)
#define S2MU106_CH2_TORCH_ON	MASK(1,4)
#define S2MU106_CH3_FLASH_ON	MASK(1,3)
#define S2MU106_CH3_TORCH_ON	MASK(1,2)
#define S2MU106_FLED_ON_CHECK	MASK(6,2)

/* Channel control */
#define S2MU106_FLED_CH1_CTRL0	0x53
#define S2MU106_FLED_CH1_CTRL1	0x54
#define S2MU106_FLED_CH1_CTRL2	0x55

#define S2MU106_FLED_CH2_CTRL0	0x56
#define S2MU106_FLED_CH2_CTRL1	0x57
#define S2MU106_FLED_CH2_CTRL2	0x58

#define S2MU106_FLED_CH3_CTRL0	0x59
#define S2MU106_FLED_CH3_CTRL1	0x5A
#define S2MU106_FLED_CH3_CTRL2	0x5B

/* Mask for channel control register */
#define S2MU106_CHX_OPEN_PROT_EN	MASK(1,7)
#define S2MU106_CHX_SHORT_PROT_EN	MASK(1,6)
#define S2MU106_CHX_FLASH_IOUT	MASK(5,0)
#define S2MU106_CHX_TORCH_TMR_MODE	MASK(1,7)
#define S2MU106_CHX_DIS_TORCH_TMR	MASK(1,6)
#define S2MU106_CHX_FLASH_TMR_MODE	MASK(1,5)
#define S2MU106_CHX_TORCH_IOUT	MASK(5,0)
#define S2MU106_CHX_FLASH_TMR_DUR	MASK(4,4)
#define S2MU106_CHX_TORCH_TMR_DUR	MASK(4,0)

/* Mode control */
#define S2MU106_FLED_CTRL0	0x5C
#define S2MU106_FLED_CTRL1	0x5D
#define S2MU106_FLED_CTRL2	0x5E
#define S2MU106_FLED_CTRL3	0x5F
#define S2MU106_FLED_CTRL4	0x60
#define S2MU106_FLED_CTRL5	0x61
#define S2MU106_FLED_CTRL6	0x62
#define S2MU106_FLED_CTRL7	0x63
#define S2MU106_FLED_TEST3	0x66
#define S2MU106_FLED_TEST4	0x67

/* Mask for channel control register */
#define S2MU106_CHX_FLASH_FLED_EN	MASK(3,3)
#define S2MU106_CHX_TORCH_FLED_EN	MASK(3,0)
#define S2MU106_EN_FLED_PRE	MASK(1,5)
#define S2MU106_FLED_EN	0x5
#define S2MU106_FLED_GPIO_EN1		0x01
#define S2MU106_FLED_GPIO_EN2		0x02
#define S2MU106_FLED_GPIO_EN3		0x03
#define S2MU106_FLED_GPIO_EN4		0x04

/* Mask for Mode control register */
#define S2MU106_FLED_MODE	MASK(2,6)
#define S2MU106_EN_FLED_PRE	MASK(1,5)
#define S2MU106_FLED_SOFT_ON_TIME	MASK(3,1)
#define S2MU106_FLED_REG_RESET	MASK(1,0)
#define S2MU106_CHX_FLASH_FLED_EN	MASK(3,3)
#define S2MU106_CHX_TORCH_FLED_EN	MASK(3,0)
#define S2MU106_FLED_ADAPTIVE_MODE_EN	MASK(1,5)
#define S2MU106_SET_BOOST_VOUT_FLASH	MASK(5,0)
#define S2MU106_READ_BOOST_VOUT_FLASH	MASK(5,0)
#define S2MU106_F2C_LC_IBAT	MASK(6,0)
#define S2MU106_F2C_SYS_MIN_REG	MASK(3,0)

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

enum cam_flash_mode{
	CAM_FLASH_MODE_NONE=0,		//CAM2_FLASH_MODE_NONE=0,
	CAM_FLASH_MODE_OFF,		//CAM2_FLASH_MODE_OFF,
	CAM_FLASH_MODE_SINGLE,		//CAM2_FLASH_MODE_SINGLE,
	CAM_FLASH_MODE_TORCH,		//CAM2_FLASH_MODE_TORCH,
};

enum s2mu106_fled_mode {
	S2MU106_FLED_MODE_OFF,
	S2MU106_FLED_MODE_TORCH,
	S2MU106_FLED_MODE_FLASH,
	S2MU106_FLED_MODE_MOVIE,
	S2MU106_FLED_MODE_FACTORY,
	S2MU106_FLED_MODE_MAX,
};

struct s2mu106_fled_chan {
	int id;
	u32 curr;
	u32 timer;
	u8 mode;
};

struct s2mu106_fled_platform_data {
	struct s2mu106_fled_chan *channel;
	int chan_num;
	int flash_gpio;
	int torch_gpio;
	u32 default_current;
	u32 max_current;
	u8 default_mode;
	u32 default_timer;
	unsigned int flash_current;
	unsigned int torch_current;
	unsigned int preflash_current;
	unsigned int movie_current;
	unsigned int factory_current;
	unsigned int flashlight_current[S2MU106_FLASH_LIGHT_MAX];
};

struct s2mu106_fled_data {
	struct s2mu106_fled_platform_data *pdata;
	struct s2mu106_fled_chan channel[S2MU106_CH_MAX];
	struct led_classdev cdev;
	struct device *dev;

	int set_on_factory;
	int flash_gpio;
	int torch_gpio;
	int sysfs_input_data;
	int control_mode; /* 0 : I2C, 1 : GPIO */

	/* charger mode control */
	bool is_en_flash;
	struct power_supply *psy_chg;

	struct i2c_client *i2c;
	struct mutex lock;
	u32 default_current;
	unsigned int flash_current;
	unsigned int torch_current;
	unsigned int preflash_current;
	unsigned int movie_current;
	unsigned int factory_current;
	unsigned int flashlight_current[S2MU106_FLASH_LIGHT_MAX];
};

int s2mu106_fled_set_mode_ctrl(int chan, enum cam_flash_mode cam_mode);
int s2mu106_fled_set_curr(int chan, enum cam_flash_mode cam_mode, int curr);
int s2mu106_fled_get_curr(int chan, enum cam_flash_mode cam_mode);
int s2mu106_led_mode_ctrl(int state);
extern void s2mu106_fled_set_operation_mode(int val);
#endif
