Root/
1 | /* |
2 | * include/media/adp1653.h |
3 | * |
4 | * Copyright (C) 2008--2011 Nokia Corporation |
5 | * |
6 | * Contact: Sakari Ailus <sakari.ailus@iki.fi> |
7 | * |
8 | * Contributors: |
9 | * Sakari Ailus <sakari.ailus@iki.fi> |
10 | * Tuukka Toivonen <tuukkat76@gmail.com> |
11 | * |
12 | * This program is free software; you can redistribute it and/or |
13 | * modify it under the terms of the GNU General Public License |
14 | * version 2 as published by the Free Software Foundation. |
15 | * |
16 | * This program is distributed in the hope that it will be useful, but |
17 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
19 | * General Public License for more details. |
20 | * |
21 | * You should have received a copy of the GNU General Public License |
22 | * along with this program; if not, write to the Free Software |
23 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA |
24 | * 02110-1301 USA |
25 | * |
26 | */ |
27 | |
28 | #ifndef ADP1653_H |
29 | #define ADP1653_H |
30 | |
31 | #include <linux/i2c.h> |
32 | #include <linux/mutex.h> |
33 | #include <linux/videodev2.h> |
34 | #include <media/v4l2-ctrls.h> |
35 | #include <media/v4l2-subdev.h> |
36 | |
37 | #define ADP1653_NAME "adp1653" |
38 | #define ADP1653_I2C_ADDR (0x60 >> 1) |
39 | |
40 | /* Register definitions */ |
41 | #define ADP1653_REG_OUT_SEL 0x00 |
42 | #define ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN 0x01 |
43 | #define ADP1653_REG_OUT_SEL_HPLED_TORCH_MAX 0x0b |
44 | #define ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN 0x0c |
45 | #define ADP1653_REG_OUT_SEL_HPLED_FLASH_MAX 0x1f |
46 | #define ADP1653_REG_OUT_SEL_HPLED_SHIFT 3 |
47 | #define ADP1653_REG_OUT_SEL_ILED_MAX 0x07 |
48 | #define ADP1653_REG_OUT_SEL_ILED_SHIFT 0 |
49 | |
50 | #define ADP1653_REG_CONFIG 0x01 |
51 | #define ADP1653_REG_CONFIG_TMR_CFG (1 << 4) |
52 | #define ADP1653_REG_CONFIG_TMR_SET_MAX 0x0f |
53 | #define ADP1653_REG_CONFIG_TMR_SET_SHIFT 0 |
54 | |
55 | #define ADP1653_REG_SW_STROBE 0x02 |
56 | #define ADP1653_REG_SW_STROBE_SW_STROBE (1 << 0) |
57 | |
58 | #define ADP1653_REG_FAULT 0x03 |
59 | #define ADP1653_REG_FAULT_FLT_SCP (1 << 3) |
60 | #define ADP1653_REG_FAULT_FLT_OT (1 << 2) |
61 | #define ADP1653_REG_FAULT_FLT_TMR (1 << 1) |
62 | #define ADP1653_REG_FAULT_FLT_OV (1 << 0) |
63 | |
64 | #define ADP1653_INDICATOR_INTENSITY_MIN 0 |
65 | #define ADP1653_INDICATOR_INTENSITY_STEP 2500 |
66 | #define ADP1653_INDICATOR_INTENSITY_MAX \ |
67 | (ADP1653_REG_OUT_SEL_ILED_MAX * ADP1653_INDICATOR_INTENSITY_STEP) |
68 | #define ADP1653_INDICATOR_INTENSITY_uA_TO_REG(a) \ |
69 | ((a) / ADP1653_INDICATOR_INTENSITY_STEP) |
70 | #define ADP1653_INDICATOR_INTENSITY_REG_TO_uA(a) \ |
71 | ((a) * ADP1653_INDICATOR_INTENSITY_STEP) |
72 | |
73 | #define ADP1653_FLASH_INTENSITY_BASE 35 |
74 | #define ADP1653_FLASH_INTENSITY_STEP 15 |
75 | #define ADP1653_FLASH_INTENSITY_MIN \ |
76 | (ADP1653_FLASH_INTENSITY_BASE \ |
77 | + ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN * ADP1653_FLASH_INTENSITY_STEP) |
78 | #define ADP1653_FLASH_INTENSITY_MAX \ |
79 | (ADP1653_FLASH_INTENSITY_MIN + \ |
80 | (ADP1653_REG_OUT_SEL_HPLED_FLASH_MAX - \ |
81 | ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN + 1) * \ |
82 | ADP1653_FLASH_INTENSITY_STEP) |
83 | |
84 | #define ADP1653_FLASH_INTENSITY_mA_TO_REG(a) \ |
85 | ((a) < ADP1653_FLASH_INTENSITY_BASE ? 0 : \ |
86 | (((a) - ADP1653_FLASH_INTENSITY_BASE) / ADP1653_FLASH_INTENSITY_STEP)) |
87 | #define ADP1653_FLASH_INTENSITY_REG_TO_mA(a) \ |
88 | ((a) * ADP1653_FLASH_INTENSITY_STEP + ADP1653_FLASH_INTENSITY_BASE) |
89 | |
90 | #define ADP1653_TORCH_INTENSITY_MIN \ |
91 | (ADP1653_FLASH_INTENSITY_BASE \ |
92 | + ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN * ADP1653_FLASH_INTENSITY_STEP) |
93 | #define ADP1653_TORCH_INTENSITY_MAX \ |
94 | (ADP1653_TORCH_INTENSITY_MIN + \ |
95 | (ADP1653_REG_OUT_SEL_HPLED_TORCH_MAX - \ |
96 | ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN + 1) * \ |
97 | ADP1653_FLASH_INTENSITY_STEP) |
98 | |
99 | struct adp1653_platform_data { |
100 | int (*power)(struct v4l2_subdev *sd, int on); |
101 | |
102 | u32 max_flash_timeout; /* flash light timeout in us */ |
103 | u32 max_flash_intensity; /* led intensity, flash mode */ |
104 | u32 max_torch_intensity; /* led intensity, torch mode */ |
105 | u32 max_indicator_intensity; /* indicator led intensity */ |
106 | }; |
107 | |
108 | #define to_adp1653_flash(sd) container_of(sd, struct adp1653_flash, subdev) |
109 | |
110 | struct adp1653_flash { |
111 | struct v4l2_subdev subdev; |
112 | struct adp1653_platform_data *platform_data; |
113 | |
114 | struct v4l2_ctrl_handler ctrls; |
115 | struct v4l2_ctrl *led_mode; |
116 | struct v4l2_ctrl *flash_timeout; |
117 | struct v4l2_ctrl *flash_intensity; |
118 | struct v4l2_ctrl *torch_intensity; |
119 | struct v4l2_ctrl *indicator_intensity; |
120 | |
121 | struct mutex power_lock; |
122 | int power_count; |
123 | int fault; |
124 | }; |
125 | |
126 | #endif /* ADP1653_H */ |
127 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9