#include <linux/bitfield.h>
#include <linux/bitops.h>
#include <linux/err.h>
#include <linux/i2c.h>
#include <linux/input.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/pwm.h>
#include <linux/regmap.h>
#include <linux/workqueue.h>
#include <linux/uaccess.h>
#define DA7280_IRQ_EVENT1 …
#define DA7280_IRQ_EVENT_WARNING_DIAG …
#define DA7280_IRQ_EVENT_SEQ_DIAG …
#define DA7280_IRQ_STATUS1 …
#define DA7280_IRQ_MASK1 …
#define DA7280_FRQ_LRA_PER_H …
#define DA7280_FRQ_LRA_PER_L …
#define DA7280_ACTUATOR1 …
#define DA7280_ACTUATOR2 …
#define DA7280_ACTUATOR3 …
#define DA7280_CALIB_V2I_H …
#define DA7280_CALIB_V2I_L …
#define DA7280_TOP_CFG1 …
#define DA7280_TOP_CFG2 …
#define DA7280_TOP_CFG4 …
#define DA7280_TOP_INT_CFG1 …
#define DA7280_TOP_CTL1 …
#define DA7280_TOP_CTL2 …
#define DA7280_SEQ_CTL2 …
#define DA7280_GPI_0_CTL …
#define DA7280_GPI_1_CTL …
#define DA7280_GPI_2_CTL …
#define DA7280_MEM_CTL1 …
#define DA7280_MEM_CTL2 …
#define DA7280_TOP_CFG5 …
#define DA7280_IRQ_MASK2 …
#define DA7280_SNP_MEM_99 …
#define DA7280_E_SEQ_CONTINUE_MASK …
#define DA7280_E_UVLO_MASK …
#define DA7280_E_SEQ_DONE_MASK …
#define DA7280_E_OVERTEMP_CRIT_MASK …
#define DA7280_E_SEQ_FAULT_MASK …
#define DA7280_E_WARNING_MASK …
#define DA7280_E_ACTUATOR_FAULT_MASK …
#define DA7280_E_OC_FAULT_MASK …
#define DA7280_E_OVERTEMP_WARN_MASK …
#define DA7280_E_MEM_TYPE_MASK …
#define DA7280_E_LIM_DRIVE_ACC_MASK …
#define DA7280_E_LIM_DRIVE_MASK …
#define DA7280_E_PWM_FAULT_MASK …
#define DA7280_E_MEM_FAULT_MASK …
#define DA7280_E_SEQ_ID_FAULT_MASK …
#define DA7280_STA_SEQ_CONTINUE_MASK …
#define DA7280_STA_UVLO_VBAT_OK_MASK …
#define DA7280_STA_SEQ_DONE_MASK …
#define DA7280_STA_OVERTEMP_CRIT_MASK …
#define DA7280_STA_SEQ_FAULT_MASK …
#define DA7280_STA_WARNING_MASK …
#define DA7280_STA_ACTUATOR_MASK …
#define DA7280_STA_OC_MASK …
#define DA7280_SEQ_CONTINUE_M_MASK …
#define DA7280_E_UVLO_M_MASK …
#define DA7280_SEQ_DONE_M_MASK …
#define DA7280_OVERTEMP_CRIT_M_MASK …
#define DA7280_SEQ_FAULT_M_MASK …
#define DA7280_WARNING_M_MASK …
#define DA7280_ACTUATOR_M_MASK …
#define DA7280_OC_M_MASK …
#define DA7280_IMAX_MASK …
#define DA7280_AMP_PID_EN_MASK …
#define DA7280_RAPID_STOP_EN_MASK …
#define DA7280_ACCELERATION_EN_MASK …
#define DA7280_FREQ_TRACK_EN_MASK …
#define DA7280_BEMF_SENSE_EN_MASK …
#define DA7280_ACTUATOR_TYPE_MASK …
#define DA7280_FULL_BRAKE_THR_MASK …
#define DA7280_MEM_DATA_SIGNED_MASK …
#define DA7280_TST_CALIB_IMPEDANCE_DIS_MASK …
#define DA7280_V2I_FACTOR_FREEZE_MASK …
#define DA7280_BEMF_FAULT_LIM_MASK …
#define DA7280_OPERATION_MODE_MASK …
#define DA7280_STANDBY_EN_MASK …
#define DA7280_SEQ_START_MASK …
#define DA7280_PS_SEQ_ID_MASK …
#define DA7280_PS_SEQ_LOOP_MASK …
#define DA7280_GPI0_POLARITY_MASK …
#define DA7280_GPI0_MODE_MASK …
#define DA7280_GPI0_SEQUENCE_ID_MASK …
#define DA7280_GPI1_POLARITY_MASK …
#define DA7280_GPI1_MODE_MASK …
#define DA7280_GPI1_SEQUENCE_ID_MASK …
#define DA7280_GPI2_POLARITY_MASK …
#define DA7280_GPI2_MODE_MASK …
#define DA7280_GPI2_SEQUENCE_ID_MASK …
#define DA7280_WAV_MEM_LOCK_MASK …
#define DA7280_V2I_FACTOR_OFFSET_EN_MASK …
#define DA7280_ADC_SAT_M_MASK …
#define DA7280_VOLTAGE_RATE_MAX …
#define DA7280_VOLTAGE_RATE_STEP …
#define DA7280_NOMMAX_DFT …
#define DA7280_ABSMAX_DFT …
#define DA7280_IMPD_MAX …
#define DA7280_IMPD_DEFAULT …
#define DA7280_IMAX_DEFAULT …
#define DA7280_IMAX_STEP …
#define DA7280_IMAX_LIMIT …
#define DA7280_RESONT_FREQH_DFT …
#define DA7280_RESONT_FREQL_DFT …
#define DA7280_MIN_RESONAT_FREQ_HZ …
#define DA7280_MAX_RESONAT_FREQ_HZ …
#define DA7280_SEQ_ID_MAX …
#define DA7280_SEQ_LOOP_MAX …
#define DA7280_GPI_SEQ_ID_DFT …
#define DA7280_GPI_SEQ_ID_MAX …
#define DA7280_SNP_MEM_SIZE …
#define DA7280_SNP_MEM_MAX …
#define DA7280_IRQ_NUM …
#define DA7280_SKIP_INIT …
#define DA7280_FF_EFFECT_COUNT_MAX …
#define DA7280_MAX_MAGNITUDE_SHIFT …
enum da7280_haptic_dev_t { … };
enum da7280_op_mode { … };
#define DA7280_FF_CONSTANT_DRO …
#define DA7280_FF_PERIODIC_PWM …
#define DA7280_FF_PERIODIC_RTWM …
#define DA7280_FF_PERIODIC_ETWM …
#define DA7280_FF_PERIODIC_MODE …
#define DA7280_FF_CONSTANT_MODE …
enum da7280_custom_effect_param { … };
enum da7280_custom_gpi_effect_param { … };
struct da7280_gpi_ctl { … };
struct da7280_haptic { … };
static bool da7280_volatile_register(struct device *dev, unsigned int reg)
{ … }
static const struct regmap_config da7280_haptic_regmap_config = …;
static int da7280_haptic_mem_update(struct da7280_haptic *haptics)
{ … }
static int da7280_haptic_set_pwm(struct da7280_haptic *haptics, bool enabled)
{ … }
static void da7280_haptic_activate(struct da7280_haptic *haptics)
{ … }
static void da7280_haptic_deactivate(struct da7280_haptic *haptics)
{ … }
static void da7280_haptic_work(struct work_struct *work)
{ … }
static int da7280_haptics_upload_effect(struct input_dev *dev,
struct ff_effect *effect,
struct ff_effect *old)
{ … }
static int da7280_haptics_playback(struct input_dev *dev,
int effect_id, int val)
{ … }
static int da7280_haptic_start(struct da7280_haptic *haptics)
{ … }
static void da7280_haptic_stop(struct da7280_haptic *haptics)
{ … }
static int da7280_haptic_open(struct input_dev *dev)
{ … }
static void da7280_haptic_close(struct input_dev *dev)
{ … }
static u8 da7280_haptic_of_mode_str(struct device *dev,
const char *str)
{ … }
static u8 da7280_haptic_of_gpi_mode_str(struct device *dev,
const char *str)
{ … }
static u8 da7280_haptic_of_gpi_pol_str(struct device *dev,
const char *str)
{ … }
static u8 da7280_haptic_of_volt_rating_set(u32 val)
{ … }
static void da7280_parse_properties(struct device *dev,
struct da7280_haptic *haptics)
{ … }
static irqreturn_t da7280_irq_handler(int irq, void *data)
{ … }
static int da7280_init(struct da7280_haptic *haptics)
{ … }
static int da7280_probe(struct i2c_client *client)
{ … }
static int da7280_suspend(struct device *dev)
{ … }
static int da7280_resume(struct device *dev)
{ … }
#ifdef CONFIG_OF
static const struct of_device_id da7280_of_match[] = …;
MODULE_DEVICE_TABLE(of, da7280_of_match);
#endif
static const struct i2c_device_id da7280_i2c_id[] = …;
MODULE_DEVICE_TABLE(i2c, da7280_i2c_id);
static DEFINE_SIMPLE_DEV_PM_OPS(da7280_pm_ops, da7280_suspend, da7280_resume);
static struct i2c_driver da7280_driver = …;
module_i2c_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;