275 lines
7.1 KiB
C
275 lines
7.1 KiB
C
|
/*
|
||
|
* 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
|