113 lines
2.8 KiB
C
113 lines
2.8 KiB
C
/*
|
|
* 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 */
|