blob: eb34440ec8b263a302cd87c63f899157199ff6b5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
/* include/linux/leds/rt5033_fled.h
* Header of Richtek RT5033 Flash LED Driver
*
* Copyright (C) 2013 Richtek Technology Corp.
* Author: Patrick Chang <patrick_chang@richtek.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; either version 2
* of the License, or (at your option) any later version.
*/
#ifndef LINUX_LEDS_RT5033_FLED_H
#define LINUX_LEDS_RT5033_FLED_H
#include <linux/kernel.h>
#include "rtfled.h"
#define RT5033_STROBE_CURRENT(mA) (((mA - 50) / 25) & 0x1f)
#define RT5033_TIMEOUT_LEVEL(mA) (((mA - 50) / 25) & 0x07)
#define RT5033_STROBE_TIMEOUT(ms) (((ms - 64) / 32) & 0x3f)
#define RT5033_TORCH_CURRENT(mA) (((mA * 10 - 125) / 125) & 0x0f)
#define RT5033_LV_PROTECTION(mV) (((mV - 3000) / 100) & 0x07)
#define RT5033_MID_REGULATION_LEVEL(mV) (((mV - 3625) / 25) & 0x3f)
typedef struct rt5033_fled_platform_data {
unsigned int fled1_en : 1;
unsigned int fled2_en : 1;
unsigned int fled_mid_track_alive : 1;
unsigned int fled_mid_auto_track_en : 1;
unsigned int fled_timeout_current_level;
unsigned int fled_strobe_current;
unsigned int fled_strobe_timeout;
unsigned int fled_torch_current;
unsigned int fled_lv_protection;
unsigned int fled_mid_level;
} rt5033_fled_platform_data_t;
#define RT5033_FLED_RESET 0x21
#define RT5033_FLED_FUNCTION1 0x21
#define RT5033_FLED_FUNCTION2 0x22
#define RT5033_FLED_STROBE_CONTROL1 0x23
#define RT5033_FLED_STROBE_CONTROL2 0x24
#define RT5033_FLED_CONTROL1 0x25
#define RT5033_FLED_CONTROL2 0x26
#define RT5033_FLED_CONTROL3 0x27
#define RT5033_FLED_CONTROL4 0x28
#define RT5033_FLED_CONTROL5 0x29
#define RT5033_CHG_FLED_CTRL 0x67
extern int32_t rt5033_charger_notification(struct rt_fled_info *info, int32_t attach);
extern int32_t rt5033_boost_notification(struct rt_fled_info *info, int32_t on);
extern void rt5033_fled_lock(struct rt_fled_info *fled_info);
extern void rt5033_fled_unlock(struct rt_fled_info *fled_info);
#ifdef CONFIG_FLED_RT5033_EXT_GPIO
/* If you are using external GPIO to control torch and flash led,
* you must call rt5033_fled_srobe_critial_section_lock() for camera shot,
* and call rt5033_fled_srobe_critial_section_unlock() after camera mode.
* example code :
* struct camera_chip* chip;
* if (chip->fled_info == NULL)
* chip->fled_info = rt_fled_get_info_by_name(NULL);
* if (chip->fled_info)
* rt5033_fled_srobe_critial_section_lock(chip->fled_info);
* ...
* ... camera opertion
* ...
* ... when finished camera operation
* if (chip->fled_info)
* rt5033_fled_srobe_critial_section_unlock(chip->fled_info);
*/
extern void rt5033_fled_strobe_critial_section_lock(struct rt_fled_info *fled_info);
extern void rt5033_fled_strobe_critial_section_unlock(struct rt_fled_info *fled_info);
extern int32_t rt5033_fled_enable(struct rt_fled_info *fled_info, int enable);
#endif /* CONFIG_FLED_RT5033_EXT_GPIO */
#endif /* LINUX_LEDS_RT5033_FLED_H */
|