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