/*
 * leds-s2mu106.h - Flash-led driver for Samsung S2MU106
 *
 * Copyright (C) 2020 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,
	CAM_FLASH_MODE_OFF,
	CAM_FLASH_MODE_SINGLE,
	CAM_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);
void s2mu106_fled_set_operation_mode(int val);
#endif
