Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
adp1653.h
Go to the documentation of this file.
1 /*
2  * include/media/adp1653.h
3  *
4  * Copyright (C) 2008--2011 Nokia Corporation
5  *
6  * Contact: Sakari Ailus <[email protected]>
7  *
8  * Contributors:
9  * Sakari Ailus <[email protected]>
10  * Tuukka Toivonen <[email protected]>
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 
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 
113 
120 
123  int fault;
124 };
125 
126 #endif /* ADP1653_H */