169 lines
4.2 KiB
C
Executable File
169 lines
4.2 KiB
C
Executable File
/*
|
|
* leds-ir-rt8547.h - Flash-led driver for RT8547
|
|
*
|
|
* Copyright (C) 2011 Samsung Electronics
|
|
* Sunggeun Yim <sunggeun.yim@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.
|
|
*/
|
|
|
|
#ifndef __LEDS_RT8547_H__
|
|
#define __LEDS_RT8547_H__
|
|
|
|
#include <linux/platform_device.h>
|
|
#include <linux/miscdevice.h>
|
|
#include <linux/fs.h>
|
|
#include <linux/delay.h>
|
|
|
|
#define rt8547_NAME "leds-rt8547"
|
|
|
|
#define RT8547_FLASH_CURRENT(mA) (((mA)-100)/50)
|
|
#define RT8547_MOVIE_CURRENT(mA) (((mA)-25)/25)
|
|
|
|
#define LED_ERROR(x, ...) printk(KERN_ERR "%s : " x, __func__, ##__VA_ARGS__)
|
|
#define LED_INFO(x, ...) printk(KERN_INFO "%s : " x, __func__, ##__VA_ARGS__)
|
|
#define LED_CHECK_ERR_GOTO(x, out, fmt, ...) \
|
|
if (unlikely((x) < 0)) { \
|
|
printk(KERN_ERR fmt, ##__VA_ARGS__); \
|
|
goto out; \
|
|
}
|
|
|
|
#define DT_READ_U32(node, key, value) do {\
|
|
pprop = key; \
|
|
temp = 0; \
|
|
if (of_property_read_u32((node), key, &temp)) \
|
|
pr_warn("%s: no property in the node.\n", pprop);\
|
|
(value) = temp; \
|
|
} while (0)
|
|
|
|
#define RT8547_ADDR_LVP_SETTING 0x1
|
|
#define RT8547_ADDR_FLASH_CURRENT_LEVEL_TIMEOUT_SETTING 0x2
|
|
#define RT8547_ADDR_CURRENT_SETTING 0x3
|
|
#define RT8547_ADDR_FLASH_TIMEOUT_SETTING 0x4
|
|
|
|
#define RT8547_SLAVE_ADDR 0x99
|
|
|
|
#define RT8547_SW_RESET 0x20
|
|
#define RT8547_TORCH_SELECT 0x10
|
|
#define RT8547_STROBE_SELECT 0x0f
|
|
|
|
#define T_SHORT 4 /* us */
|
|
#define T_LONG 60 /* us*/
|
|
#define T_SOD 10 /* us */
|
|
#define T_EOD 10 /* us */
|
|
|
|
/* LVP_SETTING */
|
|
enum rt8547_LVPsetting_t {
|
|
RT8547_3V = 0x0,
|
|
RT8547_3_1V,
|
|
RT8547_3_2V,
|
|
RT8547_3_3V,
|
|
RT8547_3_4V,
|
|
RT8547_3_5V,
|
|
RT8547_3_6V,
|
|
RT8547_3_7V,
|
|
RT8547_3_8V,
|
|
RT8547_MAX = 0xf,
|
|
};
|
|
/* FLASH_TIMEOUT_SETTING */
|
|
enum rt8547_timer_t {
|
|
RT8547_TIMER_64ms = 0x00,
|
|
RT8547_TIMER_96ms,
|
|
|
|
RT8547_TIMER_512ms = 0x0e,
|
|
RT8547_TIMER_544ms,
|
|
|
|
RT8547_TIMER_704ms = 0x14,
|
|
|
|
RT8547_TIMER_992ms = 0x1d,
|
|
RT8547_TIMER_1024ms,
|
|
|
|
RT8547_TIMER_1088ms = 0x20,
|
|
RT8547_TIMER_1120ms,
|
|
RT8547_TIMER_1152ms,
|
|
RT8547_TIMER_1184ms,
|
|
RT8547_TIMER_1216ms,
|
|
|
|
RT8547_TIMER_MAX = 0x3f,
|
|
};
|
|
/* MIN. CURRENT SETTING FOR TIMER OPERATING */
|
|
enum rt8547_timeout_current_t {
|
|
RT8547_TIMEOUT_CURRENT_100mA = 0x0,
|
|
RT8547_TIMEOUT_CURRENT_150mA,
|
|
RT8547_TIMEOUT_CURRENT_200mA,
|
|
RT8547_TIMEOUT_CURRENT_250mA,
|
|
RT8547_TIMEOUT_CURRENT_300mA,
|
|
RT8547_TIMEOUT_CURRENT_350mA,
|
|
RT8547_TIMEOUT_CURRENT_400mA = 0x7,
|
|
};
|
|
/* MOVIE CURRENT SETTING */
|
|
enum rt8547_movie_current_t {
|
|
RT8547_MOVIE_CURRENT_25mA = 0x0,
|
|
RT8547_MOVIE_CURRENT_50mA,
|
|
RT8547_MOVIE_CURRENT_75mA,
|
|
RT8547_MOVIE_CURRENT_100mA,
|
|
RT8547_MOVIE_CURRENT_125mA,
|
|
RT8547_MOVIE_CURRENT_150mA,
|
|
RT8547_MOVIE_CURRENT_175mA,
|
|
RT8547_MOVIE_CURRENT_200mA,
|
|
RT8547_MOVIE_CURRENT_225mA,
|
|
RT8547_MOVIE_CURRENT_250mA,
|
|
RT8547_MOVIE_CURRENT_275mA,
|
|
RT8547_MOVIE_CURRENT_300mA,
|
|
RT8547_MOVIE_CURRENT_325mA,
|
|
RT8547_MOVIE_CURRENT_350mA,
|
|
RT8547_MOVIE_CURRENT_375mA,
|
|
RT8547_MOVIE_CURRENT_400mA,
|
|
};
|
|
/* FLASH CURRENT SETTING */
|
|
enum rt8547_flash_current_t {
|
|
RT8547_FLASH_CURRENT_100mA = 0x00,
|
|
RT8547_FLASH_CURRENT_150mA,
|
|
RT8547_FLASH_CURRENT_200mA,
|
|
RT8547_FLASH_CURRENT_250mA,
|
|
|
|
RT8547_FLASH_CURRENT_900mA = 0x10,
|
|
RT8547_FLASH_CURRENT_950mA,
|
|
RT8547_FLASH_CURRENT_1000mA,
|
|
|
|
RT8547_FLASH_CURRENT_1200mA = 0x16,
|
|
RT8547_FLASH_CURRENT_1250mA,
|
|
RT8547_FLASH_CURRENT_1300mA,
|
|
RT8547_FLASH_CURRENT_1350mA,
|
|
RT8547_FLASH_CURRENT_1400mA,
|
|
RT8547_FLASH_CURRENT_1450mA,
|
|
RT8547_FLASH_CURRENT_1500mA,
|
|
RT8547_FLASH_CURRENT_1550mA,
|
|
RT8547_FLASH_CURRENT_1600mA,
|
|
RT8547_FLASH_CURRENT_MAX = 0x1f,
|
|
};
|
|
/* MOVIE/FLASH MODE CONTROL */
|
|
enum rt8547_mode_control_t {
|
|
RT8547_DISABLES_MOVIE_FLASH_MODE = 0x0,
|
|
RT8547_ENABLE_MOVIE_MODE,
|
|
RT8547_ENABLE_FLASH_MODE,
|
|
RT8547_ENABLE_PRE_FLASH_MODE,
|
|
};
|
|
|
|
struct rt8547_platform_data {
|
|
spinlock_t int_lock;
|
|
int sysfs_input_data;
|
|
int flash_control;
|
|
int flash_en;
|
|
struct workqueue_struct *wqueue;
|
|
enum rt8547_LVPsetting_t LVP_Voltage;
|
|
enum rt8547_timer_t flash_timeout;
|
|
enum rt8547_timeout_current_t timeout_current_value;
|
|
enum rt8547_flash_current_t flash_current_value;
|
|
enum rt8547_movie_current_t movie_current_value;
|
|
enum rt8547_movie_current_t factory_current_value;
|
|
enum rt8547_movie_current_t pre_current_value;
|
|
enum rt8547_mode_control_t mode_status;
|
|
};
|
|
|
|
extern int32_t rt8547_led_mode_ctrl(int state);
|
|
|
|
#endif
|