diff options
author | Sakari Ailus <sakari.ailus@iki.fi> | 2011-05-05 14:39:25 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-07-27 16:55:39 -0400 |
commit | 13abadad177074b84f6697639e1d4f64a55b1773 (patch) | |
tree | 007a906c959474d2ced1848ad2a4c791a8b5f1ca /include | |
parent | 7ba85fa4fdbbe800e92a937ca567120ef32fe49f (diff) |
[media] adp1653: Add driver for LED flash controller
This patch adds the driver for the adp1653 LED flash controller. This
controller supports a high power led in flash and torch modes and an
indicator light, sometimes also called privacy light.
The adp1653 is used on the Nokia N900.
Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi>
Signed-off-by: Tuukka Toivonen <tuukkat76@gmail.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: David Cohen <dacohen@gmail.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/media/adp1653.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/include/media/adp1653.h b/include/media/adp1653.h new file mode 100644 index 000000000000..50a1af88aed0 --- /dev/null +++ b/include/media/adp1653.h | |||
@@ -0,0 +1,126 @@ | |||
1 | /* | ||
2 | * include/media/adp1653.h | ||
3 | * | ||
4 | * Copyright (C) 2008--2011 Nokia Corporation | ||
5 | * | ||
6 | * Contact: Sakari Ailus <sakari.ailus@maxwell.research.nokia.com> | ||
7 | * | ||
8 | * Contributors: | ||
9 | * Sakari Ailus <sakari.ailus@maxwell.research.nokia.com> | ||
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 */ | ||