Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/media/i2c/adp1653.h
26283 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* include/media/i2c/adp1653.h
4
*
5
* Copyright (C) 2008--2011 Nokia Corporation
6
*
7
* Contact: Sakari Ailus <[email protected]>
8
*
9
* Contributors:
10
* Sakari Ailus <[email protected]>
11
* Tuukka Toivonen <[email protected]>
12
*/
13
14
#ifndef ADP1653_H
15
#define ADP1653_H
16
17
#include <linux/i2c.h>
18
#include <linux/mutex.h>
19
#include <linux/videodev2.h>
20
#include <media/v4l2-ctrls.h>
21
#include <media/v4l2-subdev.h>
22
23
#define ADP1653_NAME "adp1653"
24
#define ADP1653_I2C_ADDR (0x60 >> 1)
25
26
/* Register definitions */
27
#define ADP1653_REG_OUT_SEL 0x00
28
#define ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN 0x01
29
#define ADP1653_REG_OUT_SEL_HPLED_TORCH_MAX 0x0b
30
#define ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN 0x0c
31
#define ADP1653_REG_OUT_SEL_HPLED_FLASH_MAX 0x1f
32
#define ADP1653_REG_OUT_SEL_HPLED_SHIFT 3
33
#define ADP1653_REG_OUT_SEL_ILED_MAX 0x07
34
#define ADP1653_REG_OUT_SEL_ILED_SHIFT 0
35
36
#define ADP1653_REG_CONFIG 0x01
37
#define ADP1653_REG_CONFIG_TMR_CFG (1 << 4)
38
#define ADP1653_REG_CONFIG_TMR_SET_MAX 0x0f
39
#define ADP1653_REG_CONFIG_TMR_SET_SHIFT 0
40
41
#define ADP1653_REG_SW_STROBE 0x02
42
#define ADP1653_REG_SW_STROBE_SW_STROBE (1 << 0)
43
44
#define ADP1653_REG_FAULT 0x03
45
#define ADP1653_REG_FAULT_FLT_SCP (1 << 3)
46
#define ADP1653_REG_FAULT_FLT_OT (1 << 2)
47
#define ADP1653_REG_FAULT_FLT_TMR (1 << 1)
48
#define ADP1653_REG_FAULT_FLT_OV (1 << 0)
49
50
#define ADP1653_INDICATOR_INTENSITY_MIN 0
51
#define ADP1653_INDICATOR_INTENSITY_STEP 2500
52
#define ADP1653_INDICATOR_INTENSITY_MAX \
53
(ADP1653_REG_OUT_SEL_ILED_MAX * ADP1653_INDICATOR_INTENSITY_STEP)
54
#define ADP1653_INDICATOR_INTENSITY_uA_TO_REG(a) \
55
((a) / ADP1653_INDICATOR_INTENSITY_STEP)
56
#define ADP1653_INDICATOR_INTENSITY_REG_TO_uA(a) \
57
((a) * ADP1653_INDICATOR_INTENSITY_STEP)
58
59
#define ADP1653_FLASH_INTENSITY_BASE 35
60
#define ADP1653_FLASH_INTENSITY_STEP 15
61
#define ADP1653_FLASH_INTENSITY_MIN \
62
(ADP1653_FLASH_INTENSITY_BASE \
63
+ ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN * ADP1653_FLASH_INTENSITY_STEP)
64
#define ADP1653_FLASH_INTENSITY_MAX \
65
(ADP1653_FLASH_INTENSITY_MIN + \
66
(ADP1653_REG_OUT_SEL_HPLED_FLASH_MAX - \
67
ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN + 1) * \
68
ADP1653_FLASH_INTENSITY_STEP)
69
70
#define ADP1653_FLASH_INTENSITY_mA_TO_REG(a) \
71
((a) < ADP1653_FLASH_INTENSITY_BASE ? 0 : \
72
(((a) - ADP1653_FLASH_INTENSITY_BASE) / ADP1653_FLASH_INTENSITY_STEP))
73
#define ADP1653_FLASH_INTENSITY_REG_TO_mA(a) \
74
((a) * ADP1653_FLASH_INTENSITY_STEP + ADP1653_FLASH_INTENSITY_BASE)
75
76
#define ADP1653_TORCH_INTENSITY_MIN \
77
(ADP1653_FLASH_INTENSITY_BASE \
78
+ ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN * ADP1653_FLASH_INTENSITY_STEP)
79
#define ADP1653_TORCH_INTENSITY_MAX \
80
(ADP1653_TORCH_INTENSITY_MIN + \
81
(ADP1653_REG_OUT_SEL_HPLED_TORCH_MAX - \
82
ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN + 1) * \
83
ADP1653_FLASH_INTENSITY_STEP)
84
85
struct adp1653_platform_data {
86
int (*power)(struct v4l2_subdev *sd, int on);
87
88
u32 max_flash_timeout; /* flash light timeout in us */
89
u32 max_flash_intensity; /* led intensity, flash mode, mA */
90
u32 max_torch_intensity; /* led intensity, torch mode, mA */
91
u32 max_indicator_intensity; /* indicator led intensity, uA */
92
93
struct gpio_desc *enable_gpio; /* for device-tree based boot */
94
};
95
96
#define to_adp1653_flash(sd) container_of(sd, struct adp1653_flash, subdev)
97
98
struct adp1653_flash {
99
struct v4l2_subdev subdev;
100
struct adp1653_platform_data *platform_data;
101
102
struct v4l2_ctrl_handler ctrls;
103
struct v4l2_ctrl *led_mode;
104
struct v4l2_ctrl *flash_timeout;
105
struct v4l2_ctrl *flash_intensity;
106
struct v4l2_ctrl *torch_intensity;
107
struct v4l2_ctrl *indicator_intensity;
108
109
struct mutex power_lock;
110
int power_count;
111
int fault;
112
};
113
114
#endif /* ADP1653_H */
115
116