video: tegra: dtv: Move swizzling into ioctl
[linux-3.10.git] / include / media / as364x.h
1 /*
2  * Copyright (c) 2012-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 __AS364X_H__
18 #define __AS364X_H__
19
20 #include <media/nvc_torch.h>
21
22 enum {
23         AS3643,
24         AS3647,
25         AS3648,
26         AS364X_NUM,
27 };
28
29 struct as364x_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 as364x_config {
39         u32 led_mask; /* which led(s) enabled, 1/2/3 - left/right/both */
40         bool synchronized_led;  /* if both leds enabled, consider as one. */
41         bool use_tx_mask; /* enable TXMASK */
42
43         u16 I_limit_mA; /* AS3647/AS3648: 2000, 2500, 3000, 3500 mA
44                          * AS3643: 1000, 1500, 2000, 2500 mA for the coil*/
45         u16 txmasked_current_mA; /* 57,113,...847, roughly 56.47 mA steps */
46         u16 vin_low_v_run_mV; /* 0xffff=off, 3000, 3070, 3140, 3220, 3300,
47                                 3338, 3470 mV battery limit for dynamic flash
48                                  reduction */
49         u16 vin_low_v_mV; /* 0xffff=off, 3000, 3070, 3140, 3220, 3300, 3338,
50                                 3470mV battery limit for flash denial */
51         u8 strobe_type; /* 1=edge, 2=level, 3=i2c */
52         u8 inct_pwm; /* pwm duty cycle for indicator or low current mode */
53         bool freq_switch_on;
54         /* balance the current sinks for unmatched LED forward valtages */
55         bool load_balance_on;
56         bool led_off_when_vin_low; /* if 0 txmask current is used */
57         bool boost_mode; /* all LED current are increased by 11% */
58         /* LED configuration, two identical leds must be connected. */
59         u16 max_total_current_mA; /* Both leds' maximum peak current in mA */
60         u16 max_peak_current_mA; /* This led's maximum peak current in mA */
61         u16 max_peak_duration_ms; /* the maximum duration max_peak_current_mA
62                                      can be applied */
63         u16 max_sustained_current_mA; /* This leds maximum sustained current
64                                          in mA */
65         u16 min_current_mA; /* This leds minimum current in mA, desired
66                                values smaller than this will be realised
67                                using PWM. */
68         u8 def_ftimer; /* default flash timer setting 0 ~ 255, 2ms ~ 1280mS */
69         struct as364x_led_config led_config[2];
70 };
71
72 struct as364x_power_rail {
73         struct regulator *v_in;
74         struct regulator *v_i2c;
75 };
76
77 struct as364x_platform_data {
78         struct as364x_config config;
79         u32 type; /* flash device type, refer to as364x_type */
80         unsigned cfg; /* use the NVC_CFG_ defines */
81         unsigned num; /* see implementation notes in driver */
82         const char *dev_name; /* see implementation notes in driver */
83         struct nvc_torch_pin_state pinstate; /* see notes in driver */
84         unsigned gpio_strobe; /* GPIO connected to the ACT signal */
85         bool strobe_low_act; /* strobe state active low */
86
87         int (*power_on_callback)(struct as364x_power_rail *pw);
88         int (*power_off_callback)(struct as364x_power_rail *pw);
89 };
90
91 #endif
92 /* __AS364X_H__ */