1f5fbb83fSMauro Carvalho Chehab /* SPDX-License-Identifier: GPL-2.0 */
2ad85094bSMauro Carvalho Chehab /*
3ad85094bSMauro Carvalho Chehab  * Support for AD5823 VCM.
4ad85094bSMauro Carvalho Chehab  *
5ad85094bSMauro Carvalho Chehab  * Copyright (c) 2013 Intel Corporation. All Rights Reserved.
6ad85094bSMauro Carvalho Chehab  *
7ad85094bSMauro Carvalho Chehab  * This program is free software; you can redistribute it and/or
8ad85094bSMauro Carvalho Chehab  * modify it under the terms of the GNU General Public License version
9ad85094bSMauro Carvalho Chehab  * 2 as published by the Free Software Foundation.
10ad85094bSMauro Carvalho Chehab  *
11ad85094bSMauro Carvalho Chehab  * This program is distributed in the hope that it will be useful,
12ad85094bSMauro Carvalho Chehab  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13ad85094bSMauro Carvalho Chehab  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14ad85094bSMauro Carvalho Chehab  * GNU General Public License for more details.
15ad85094bSMauro Carvalho Chehab  *
16ad85094bSMauro Carvalho Chehab  *
17ad85094bSMauro Carvalho Chehab  */
18ad85094bSMauro Carvalho Chehab 
19ad85094bSMauro Carvalho Chehab #ifndef __AD5823_H__
20ad85094bSMauro Carvalho Chehab #define __AD5823_H__
21ad85094bSMauro Carvalho Chehab 
22ad85094bSMauro Carvalho Chehab #include <linux/types.h>
23ad85094bSMauro Carvalho Chehab 
24ad85094bSMauro Carvalho Chehab #define AD5823_VCM_ADDR	0x0c
25ad85094bSMauro Carvalho Chehab 
26ad85094bSMauro Carvalho Chehab #define AD5823_REG_RESET		0x01
27ad85094bSMauro Carvalho Chehab #define AD5823_REG_MODE			0x02
28ad85094bSMauro Carvalho Chehab #define AD5823_REG_VCM_MOVE_TIME	0x03
29ad85094bSMauro Carvalho Chehab #define AD5823_REG_VCM_CODE_MSB		0x04
30ad85094bSMauro Carvalho Chehab #define AD5823_REG_VCM_CODE_LSB		0x05
31ad85094bSMauro Carvalho Chehab #define AD5823_REG_VCM_THRESHOLD_MSB	0x06
32ad85094bSMauro Carvalho Chehab #define AD5823_REG_VCM_THRESHOLD_LSB	0x07
33ad85094bSMauro Carvalho Chehab 
34ad85094bSMauro Carvalho Chehab #define AD5823_REG_LENGTH		0x1
35ad85094bSMauro Carvalho Chehab 
36ad85094bSMauro Carvalho Chehab #define AD5823_RING_CTRL_ENABLE		0x04
37ad85094bSMauro Carvalho Chehab #define AD5823_RING_CTRL_DISABLE	0x00
38ad85094bSMauro Carvalho Chehab 
39ad85094bSMauro Carvalho Chehab #define AD5823_RESONANCE_PERIOD		100000
40ad85094bSMauro Carvalho Chehab #define AD5823_RESONANCE_COEF		512
41ad85094bSMauro Carvalho Chehab #define AD5823_HIGH_FREQ_RANGE		0x80
42ad85094bSMauro Carvalho Chehab 
43ad85094bSMauro Carvalho Chehab #define VCM_CODE_MSB_MASK		0xfc
44ad85094bSMauro Carvalho Chehab #define AD5823_INIT_FOCUS_POS           350
45ad85094bSMauro Carvalho Chehab 
46ad85094bSMauro Carvalho Chehab enum ad5823_tok_type {
47ad85094bSMauro Carvalho Chehab 	AD5823_8BIT  = 0x1,
48ad85094bSMauro Carvalho Chehab 	AD5823_16BIT = 0x2,
49ad85094bSMauro Carvalho Chehab };
50ad85094bSMauro Carvalho Chehab 
51ad85094bSMauro Carvalho Chehab enum ad5823_vcm_mode {
52ad85094bSMauro Carvalho Chehab 	AD5823_ARC_RES0 = 0x0,	/* Actuator response control RES1 */
53ad85094bSMauro Carvalho Chehab 	AD5823_ARC_RES1 = 0x1,	/* Actuator response control RES0.5 */
54ad85094bSMauro Carvalho Chehab 	AD5823_ARC_RES2 = 0x2,	/* Actuator response control RES2 */
55ad85094bSMauro Carvalho Chehab 	AD5823_ESRC = 0x3,	/* Enhanced slew rate control */
56ad85094bSMauro Carvalho Chehab 	AD5823_DIRECT = 0x4,	/* Direct control */
57ad85094bSMauro Carvalho Chehab };
58ad85094bSMauro Carvalho Chehab 
59ad85094bSMauro Carvalho Chehab #define AD5823_INVALID_CONFIG	0xffffffff
60ad85094bSMauro Carvalho Chehab #define AD5823_MAX_FOCUS_POS	1023
61ad85094bSMauro Carvalho Chehab #define DELAY_PER_STEP_NS	1000000
62ad85094bSMauro Carvalho Chehab #define DELAY_MAX_PER_STEP_NS	(1000000 * 1023)
63ad85094bSMauro Carvalho Chehab #endif
64