blob: 034097c0916e220cc2ba9d7006f068b86eb0d9eb [file] [log] [blame]
/*
* leds-S2MPB02.h - Flash-led driver for Samsung S2MPB02
*
* Copyright (C) 2014 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.
*
* This driver is based on leds-max77804.h
*/
#ifndef __LEDS_S2MPB02_H__
#define __LEDS_S2MPB02_H__
#define S2MPB02_FLASH_TORCH_CURRENT_MAX 0xF
#define S2MPB02_TIMEOUT_MAX 0xF
/* S2MPB02_LV_SEL_VOUT */
#define S2MPB02_LV_SEL_VOUT_MASK 0x07
#define S2MPB02_LV_SEL_VOLT(voltage) \
((voltage) <= 2700 ? 0x00 : \
((voltage) <= 3400 ? ((voltage) - 2900) / 100 : 0x07))
#define S2MPB02_FLASH_MASK 0xF0
#define S2MPB02_TORCH_MASK 0x0F
#define S2MPB02_FLED_ENABLE 1
#define S2MPB02_FLED_DISABLE 0
#define S2MPB02_FLED_ENABLE_SHIFT 7
#define S2MPB02_FLED_FLASH_MODE 0
#define S2MPB02_FLED_TORCH_MODE 1
#define S2MPB02_FLED_MODE_SHIFT 6
#define S2MPB02_FLED_FLASH_TORCH_OFF 0x00
#define S2MPB02_FLED_FLASH_ON 0x80
#define S2MPB02_FLED_TORCH_ON 0xC0
#define S2MPB02_FLED_ENABLE_MODE_MASK 0xC0
#define S2MPB02_FLED_CTRL1_LV_EN_MASK 0x08
#define S2MPB02_FLED_CTRL1_LV_ENABLE 1
#define S2MPB02_FLED_CTRL1_LV_DISABLE 0
enum s2mpb02_led_id {
S2MPB02_FLASH_LED_1,
S2MPB02_TORCH_LED_1,
S2MPB02_LED_MAX,
};
enum s2mpb02_flash_current {
S2MPB02_FLASH_OUT_I_100MA = 1,
S2MPB02_FLASH_OUT_I_200MA,
S2MPB02_FLASH_OUT_I_300MA,
S2MPB02_FLASH_OUT_I_400MA,
S2MPB02_FLASH_OUT_I_500MA,
S2MPB02_FLASH_OUT_I_600MA,
S2MPB02_FLASH_OUT_I_700MA,
S2MPB02_FLASH_OUT_I_800MA,
S2MPB02_FLASH_OUT_I_900MA,
S2MPB02_FLASH_OUT_I_1000MA,
S2MPB02_FLASH_OUT_I_1100MA,
S2MPB02_FLASH_OUT_I_1200MA,
S2MPB02_FLASH_OUT_I_1300MA,
S2MPB02_FLASH_OUT_I_1400MA,
S2MPB02_FLASH_OUT_I_1500MA,
S2MPB02_FLASH_OUT_I_MAX,
};
enum s2mpb02_torch_current {
S2MPB02_TORCH_OUT_I_20MA = 1,
S2MPB02_TORCH_OUT_I_40MA,
S2MPB02_TORCH_OUT_I_60MA,
S2MPB02_TORCH_OUT_I_80MA,
S2MPB02_TORCH_OUT_I_100MA,
S2MPB02_TORCH_OUT_I_120MA,
S2MPB02_TORCH_OUT_I_140MA,
S2MPB02_TORCH_OUT_I_160MA,
S2MPB02_TORCH_OUT_I_180MA,
S2MPB02_TORCH_OUT_I_200MA,
S2MPB02_TORCH_OUT_I_220MA,
S2MPB02_TORCH_OUT_I_240MA,
S2MPB02_TORCH_OUT_I_260MA,
S2MPB02_TORCH_OUT_I_280MA,
S2MPB02_TORCH_OUT_I_300MA,
S2MPB02_TORCH_OUT_I_MAX,
};
enum s2mpb02_flash_timeout {
S2MPB02_FLASH_TIMEOUT_62P5MS,
S2MPB02_FLASH_TIMEOUT_125MS,
S2MPB02_FLASH_TIMEOUT_187P5MS,
S2MPB02_FLASH_TIMEOUT_250MS,
S2MPB02_FLASH_TIMEOUT_312P5MS,
S2MPB02_FLASH_TIMEOUT_375MS,
S2MPB02_FLASH_TIMEOUT_437P5MS,
S2MPB02_FLASH_TIMEOUT_500MS,
S2MPB02_FLASH_TIMEOUT_562P5MS,
S2MPB02_FLASH_TIMEOUT_625MS,
S2MPB02_FLASH_TIMEOUT_687P5MS,
S2MPB02_FLASH_TIMEOUT_750MS,
S2MPB02_FLASH_TIMEOUT_812P5MS,
S2MPB02_FLASH_TIMEOUT_875MS,
S2MPB02_FLASH_TIMEOUT_937P5MS,
S2MPB02_FLASH_TIMEOUT_1000MS,
S2MPB02_FLASH_TIMEOUT_MAX,
};
enum s2mpb02_torch_timeout {
S2MPB02_TORCH_TIMEOUT_1S,
S2MPB02_TORCH_TIMEOUT_2S,
S2MPB02_TORCH_TIMEOUT_3S,
S2MPB02_TORCH_TIMEOUT_4S,
S2MPB02_TORCH_TIMEOUT_5S,
S2MPB02_TORCH_TIMEOUT_6S,
S2MPB02_TORCH_TIMEOUT_7S,
S2MPB02_TORCH_TIMEOUT_8S,
S2MPB02_TORCH_TIMEOUT_9S,
S2MPB02_TORCH_TIMEOUT_10S,
S2MPB02_TORCH_TIMEOUT_11S,
S2MPB02_TORCH_TIMEOUT_12S,
S2MPB02_TORCH_TIMEOUT_13S,
S2MPB02_TORCH_TIMEOUT_14S,
S2MPB02_TORCH_TIMEOUT_15S,
S2MPB02_TORCH_TIMEOUT_16S,
S2MPB02_TORCH_TIMEOUT_MAX,
};
struct s2mpb02_led {
const char *name;
int id;
int brightness;
int timeout;
};
struct s2mpb02_led_platform_data {
int num_leds;
struct s2mpb02_led leds[S2MPB02_LED_MAX];
};
#endif