License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[linux-block.git] / drivers / staging / media / atomisp / i2c / imx / dw9714.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
a49d2536
AC
2#ifndef __DW9714_H__
3#define __DW9714_H__
4
25016567 5#include "../../include/linux/atomisp_platform.h"
a49d2536
AC
6#include <linux/types.h>
7
8
9#define DW9714_VCM_ADDR 0x0c
10
11enum dw9714_tok_type {
12 DW9714_8BIT = 0x0001,
13 DW9714_16BIT = 0x0002,
14};
15
16struct dw9714_vcm_settings {
17 u16 code; /* bit[9:0]: Data[9:0] */
18 u8 t_src; /* bit[4:0]: T_SRC[4:0] */
19 u8 step_setting; /* bit[3:0]: S[3:0]/bit[5:4]: MCLK[1:0] */
20 bool update;
21};
22
23enum dw9714_vcm_mode {
24 DW9714_DIRECT = 0x1, /* direct control */
25 DW9714_LSC = 0x2, /* linear slope control */
26 DW9714_DLC = 0x3, /* dual level control */
27};
28
29/* dw9714 device structure */
30struct dw9714_device {
31 struct dw9714_vcm_settings vcm_settings;
32 struct timespec timestamp_t_focus_abs;
33 enum dw9714_vcm_mode vcm_mode;
34 s16 number_of_steps;
35 bool initialized; /* true if dw9714 is detected */
36 s32 focus; /* Current focus value */
37 struct timespec focus_time; /* Time when focus was last time set */
38 __u8 buffer[4]; /* Used for i2c transactions */
39 const struct camera_af_platform_data *platform_data;
40};
41
42#define DW9714_INVALID_CONFIG 0xffffffff
43#define DW9714_MAX_FOCUS_POS 1023
44#define DW9714_DEFAULT_FOCUS_POS 290
45
46
47/* MCLK[1:0] = 01 T_SRC[4:0] = 00001 S[3:0] = 0111 */
48#define DELAY_PER_STEP_NS 1000000
49#define DELAY_MAX_PER_STEP_NS (1000000 * 1023)
50
51#define DLC_ENABLE 1
52#define DLC_DISABLE 0
53#define VCM_PROTECTION_OFF 0xeca3
54#define VCM_PROTECTION_ON 0xdc51
55#define VCM_DEFAULT_S 0x0
56
57#define vcm_step_s(a) (u8)(a & 0xf)
58#define vcm_step_mclk(a) (u8)((a >> 4) & 0x3)
59#define vcm_dlc_mclk(dlc, mclk) (u16)((dlc << 3) | mclk | 0xa104)
60#define vcm_tsrc(tsrc) (u16)(tsrc << 3 | 0xf200)
61#define vcm_val(data, s) (u16)(data << 4 | s)
62#define DIRECT_VCM vcm_dlc_mclk(0, 0)
63
64#endif