android_kernel_samsung_hero.../include/linux/leds-s2mpb02.h
2016-08-17 16:41:52 +08:00

143 lines
3.5 KiB
C

/*
* leds-S2MPB02.h - Flash-led driver for Samsung S2MPB02
*
* Copyright (C) 2014 Samsung Electronics
* XXX <xxx@samsung.com>
*
* 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_FLED_CHANNEL_1 /* GPIOs connected to FLASH_EN1, TORCH_EN1 */
//#define S2MPB02_FLED_CHANNEL_2 /* GPIOs connected to FLASH_EN2, TORCH_EN2 */
#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(mV) \
((mV) <= 2900 ? 0x00 : \
((mV) <= 3600 ? ((mV) - 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_ENABLE_MODE_MASK 0xC0
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;
const char *default_trigger; /* Trigger to use */
};
struct s2mpb02_led_platform_data {
int num_leds;
struct s2mpb02_led leds[S2MPB02_LED_MAX];
};
extern int s2mpb02_led_en(int mode, int onoff);
#endif