blob: 2672314ad0b765d3f86d185b3db87c86464210a2 [file] [log] [blame]
/*
* s2mu106_haptic.h
* Samsung S2MU106 Fuel Gauge Header
*
* Copyright (C) 2018 Samsung Electronics, Inc.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef __S2MU106_HAPTIC_H
#define __S2MU106_HAPTIC_H __FILE__
#define S2MU106_REG_HAPTIC_INT 0x00
#define S2MU106_REG_HBST_INT 0x01
#define S2MU106_REG_HAPTIC_INT_MASK 0x02
#define S2MU106_REG_HBST_INT_MASK 0x03
#define S2MU106_REG_HBST_STATUS1 0x04
#define S2MU106_REG_PERI_TAR1 0x05
#define S2MU106_REG_PERI_TAR2 0x06
#define S2MU106_REG_DUTY_TAR1 0x07
#define S2MU106_REG_DUTY_TAR2 0x08
#define S2MU106_REG_HAPTIC_MODE 0x09
#define S2MU106_REG_OV_BK_OPTION 0x0A
#define S2MU106_REG_OV_WAVE_NUM 0x0B
#define S2MU106_REG_OV_AMP 0x0C
#define S2MU106_REG_PWM_CNT_NUM 0x10
#define S2MU106_REG_FILTERCOEF1 0x13
#define S2MU106_REG_FILTERCOEF2 0x14
#define S2MU106_REG_FILTERCOEF3 0x15
#define S2MU106_REG_IMPCONF1 0x16
#define S2MU106_REG_IMPCONF2 0x17
#define S2MU106_REG_IMPCONF3 0x18
#define S2MU106_REG_AMPCOEF1 0x19
#define S2MU106_REG_AMPCOEF2 0x1A
#define S2MU106_REG_AMPCOEF3 0x1B
#define S2MU106_REG_HT_OTP0 0x20
#define S2MU106_REG_HT_OTP2 0x22
#define S2MU106_REG_HT_OTP3 0x23
#define S2MU106_REG_HBST_CTRL0 0x2B
#define S2MU106_REG_HBST_CTRL1 0x2C
/* S2MU106_REG_HBST_CTRL1 */
#define HAPTIC_BOOST_VOLTAGE_MASK 0x3F
/* S2MU106_REG_HT_OTP0 */
#define HBST_OK_MASK_EN 0x02
/* S2MU106_REG_HT_OTP2 */
#define VCEN_SEL_MASK 0xC0
/* S2MU106_REG_HT_OTP3 */
#define VCENUP_TRIM_MASK 0x03
/* S2MU106_REG_HBST_CTRL0 */
#define SEL_HBST_HAPTIC_MASK 0x02
/* S2MU106_REG_OV_BK_OPTION */
#define LRA_MODE_SET_MASK 1 << 7
/* S2MU106_REG_HAPTIC_MODE */
#define LRA_MODE_EN 0x20
#define ERM_HDPWM_MODE_EN 0x41
#define ERM_MODE_ON 0x01
#define HAPTIC_MODE_OFF 0x00
enum s2mu106_haptic_operation_type {
S2MU106_HAPTIC_ERM_I2C,
S2MU106_HAPTIC_ERM_GPIO,
S2MU106_HAPTIC_LRA,
};
enum s2mu106_haptic_pulse_mode {
S2MU106_EXTERNAL_MODE,
S2MU106_INTERNAL_MODE,
};
struct s2mu106_haptic_boost {
/* haptic boost */
bool en;
bool automode;
int level;
};
struct s2mu106_haptic_platform_data {
u16 max_timeout;
u32 duty;
u32 period;
u32 max_duty;
u16 reg2;
int motor_en;
unsigned int pwm_id;
const char *vib_type;
u32 intensity;
/* haptic drive mode */
enum s2mu106_haptic_operation_type hap_mode;
/* haptic boost */
struct s2mu106_haptic_boost hbst;
void (*init_hw)(void);
};
#endif /* __S2MU106_HAPTIC_H */