media: video: tegra: ov5640: move MCLK into sensor
[linux-3.10.git] / include / media / max77387.h
1 /*
2  * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
3
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms and conditions of the GNU General Public License,
6  * version 2, as published by the Free Software Foundation.
7
8  * This program is distributed in the hope it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
11  * more details.
12
13  * You should have received a copy of the GNU General Public License
14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15  */
16
17 #ifndef __MAX77387_H__
18 #define __MAX77387_H__
19
20 #include <media/nvc_torch.h>
21
22 struct max77387_power_rail {
23         /* to enable the module power */
24         struct regulator *vin;
25         /* to enable the host interface power */
26         struct regulator *vdd;
27 };
28
29 struct max77387_led_config {
30         u16 color_setting;
31         u16 flash_torch_ratio;  /* max flash to max torch ratio, in 1/1000 */
32         u16 granularity;        /* 1, 10, 100, ... to carry float settings */
33         u16 flash_levels;       /* calibrated flash levels < 32 */
34         /* this table contains the calibrated flash level - luminance pair */
35         struct nvc_torch_lumi_level_v1 *lumi_levels;
36 };
37
38 struct max77387_config {
39         u32 led_mask;           /* led(s) enabled, 1/2/3 - left/right/both */
40         bool synchronized_led;  /* if both leds enabled, consider as one. */
41         u16 flash_trigger_mode; /* 0, 3=flash is triggered via i2c interface.
42                                    1=high level on the flash_en pin will turn
43                                    the flash on.
44                                    2=high level on the torch_en pin will turn
45                                    the flash on.
46                                    4=high level on both torch_en and flash_en
47                                    pin will turn the flash on.
48                                    5=high level on the torch_en or flash_en pin
49                                    will turn the flash on. */
50         u16 flash_mode;         /* 1=one_shot_mode, flash is triggerred on the
51                                    rising edge of FLASHEN/TORCHEN/I2C_bit, and
52                                    terminated based on the flash safety timer
53                                    value.
54                                    0, 2=run for MAX timer, flash is triggerred
55                                    on the rising edge of FLASHEN/TORCHEN/I2C,
56                                    and terminated based on the falling edge of
57                                    FLASHEN/TORCHEN/I2C_bit and flash safety
58                                    timer value, whichever comes first.*/
59         u16 torch_trigger_mode; /* 0, 3=torch is triggered via i2c interface.
60                                    1=high level on the flash_en pin will turn
61                                    the torch on.
62                                    2=high level on the torch_en pin will turn
63                                    the torch on.
64                                    4=high level on both torch_en and flash_en
65                                    pin will turn the torch on.
66                                    5=high level on the torch_en or flash_en pin
67                                    will turn the torch on. */
68         u16 torch_mode;         /* 1=torch safety timer disabled, torch is
69                                    controlled solely by the FLASHEN/TORCHEN/I2C.
70                                    2=one_shot_mode, torch is triggerred on the
71                                    rising edge of FLASHEN/TORCHEN/I2C_bit, and
72                                    terminated based on the torch safety timer
73                                    setting.
74                                    0, 3=run MAX timer, torch is triggerred on
75                                    the rising edge of FLASHEN/TORCHEN/I2C_bit,
76                                    and terminated based on the falling edge of
77                                    FLASHEN/TORCHEN/ I2C_bit and torch safety
78                                    timer setting, whichever comes first.*/
79         u16 adaptive_mode;      /* 1=fix mode, 2=adaptive mode */
80         /* TX MASK settings */
81         u16 tx1_mask_mA;
82         u16 tx2_mask_mA;
83         /* flash/torch ramp settings */
84         u16 flash_rampup_uS;
85         u16 flash_rampdn_uS;
86         u16 torch_rampup_uS;
87         u16 torch_rampdn_uS;
88         /* default flash timer */
89         u16 def_ftimer;
90         /* LED configuration, two identical leds must be connected. */
91         u16 max_total_current_mA; /* Both leds' maximum peak current in mA */
92         u16 max_peak_current_mA; /* This led's maximum peak current in mA */
93         u16 max_torch_current_mA; /* This leds maximum torch current in mA */
94         u16 max_peak_duration_ms; /* the maximum duration max_peak_current_mA
95                                      can be applied */
96         u16 max_flash_threshold_mV;  /* low battery detection threshold.
97                                         2400mV ~ 3400mV. */
98         u16 max_flash_hysteresis_mV; /* low battery detection hysteresis.
99                                         100mV ~ 300mV */
100         u16 max_flash_lbdly_f_uS; /* Low battery delay timer for falling edge
101                                         detection. Adjustable from 256uS to
102                                         2048uS in 256uS steps. */
103         u16 max_flash_lbdly_r_uS; /* Low battery delay timer for raising edge
104                                         detection. Adjustable from 256uS to
105                                         2048uS in 256uS steps. */
106         struct max77387_led_config led_config[2];
107 };
108
109 struct max77387_platform_data {
110         struct max77387_config config;
111         unsigned cfg; /* use the NVC_CFG_ defines */
112         unsigned num; /* see implementation notes in driver */
113         unsigned sync; /* see implementation notes in driver */
114         const char *dev_name; /* see implementation notes in driver */
115         struct nvc_torch_pin_state pinstate; /* see notes in driver */
116         unsigned gpio_strobe; /* GPIO connected to the ACT signal */
117         struct edp_client edpc_config;
118
119         int (*poweron_callback)(struct max77387_power_rail *pw);
120         int (*poweroff_callback)(struct max77387_power_rail *pw);
121 };
122
123 #endif
124 /* __MAX77387_H__ */