#include <linux/completion.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/err.h>
#include <linux/firmware.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/mfd/core.h>
#include <linux/mfd/iqs62x.h>
#include <linux/module.h>
#include <linux/notifier.h>
#include <linux/of.h>
#include <linux/property.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include <asm/unaligned.h>
#define IQS62X_PROD_NUM …
#define IQS62X_SYS_FLAGS …
#define IQS620_HALL_FLAGS …
#define IQS621_HALL_FLAGS …
#define IQS622_HALL_FLAGS …
#define IQS624_INTERVAL_NUM …
#define IQS625_INTERVAL_NUM …
#define IQS622_PROX_SETTINGS_4 …
#define IQS620_PROX_SETTINGS_4 …
#define IQS620_PROX_SETTINGS_4_SAR_EN …
#define IQS621_ALS_CAL_DIV_LUX …
#define IQS621_ALS_CAL_DIV_IR …
#define IQS620_TEMP_CAL_MULT …
#define IQS620_TEMP_CAL_DIV …
#define IQS620_TEMP_CAL_OFFS …
#define IQS62X_SYS_SETTINGS …
#define IQS62X_SYS_SETTINGS_ACK_RESET …
#define IQS62X_SYS_SETTINGS_EVENT_MODE …
#define IQS62X_SYS_SETTINGS_CLK_DIV …
#define IQS62X_SYS_SETTINGS_COMM_ATI …
#define IQS62X_SYS_SETTINGS_REDO_ATI …
#define IQS62X_PWR_SETTINGS …
#define IQS62X_PWR_SETTINGS_DIS_AUTO …
#define IQS62X_PWR_SETTINGS_PWR_MODE_MASK …
#define IQS62X_PWR_SETTINGS_PWR_MODE_HALT …
#define IQS62X_PWR_SETTINGS_PWR_MODE_NORM …
#define IQS62X_OTP_CMD …
#define IQS62X_OTP_CMD_FG3 …
#define IQS62X_OTP_DATA …
#define IQS62X_MAX_REG …
#define IQS62X_HALL_CAL_MASK …
#define IQS62X_FW_REC_TYPE_INFO …
#define IQS62X_FW_REC_TYPE_PROD …
#define IQS62X_FW_REC_TYPE_HALL …
#define IQS62X_FW_REC_TYPE_MASK …
#define IQS62X_FW_REC_TYPE_DATA …
#define IQS62X_ATI_STARTUP_MS …
#define IQS62X_FILT_SETTLE_MS …
struct iqs62x_fw_rec { … } __packed;
struct iqs62x_fw_blk { … };
struct iqs62x_info { … } __packed;
static int iqs62x_dev_init(struct iqs62x_core *iqs62x)
{ … }
static int iqs62x_firmware_parse(struct iqs62x_core *iqs62x,
const struct firmware *fw)
{ … }
const struct iqs62x_event_desc iqs62x_events[IQS62X_NUM_EVENTS] = …;
EXPORT_SYMBOL_GPL(…);
static irqreturn_t iqs62x_irq(int irq, void *context)
{ … }
static void iqs62x_firmware_load(const struct firmware *fw, void *context)
{ … }
static const struct mfd_cell iqs620at_sub_devs[] = …;
static const struct mfd_cell iqs620a_sub_devs[] = …;
static const struct mfd_cell iqs621_sub_devs[] = …;
static const struct mfd_cell iqs622_sub_devs[] = …;
static const struct mfd_cell iqs624_sub_devs[] = …;
static const struct mfd_cell iqs625_sub_devs[] = …;
static const u8 iqs620at_cal_regs[] = …;
static const u8 iqs621_cal_regs[] = …;
static const enum iqs62x_event_reg iqs620a_event_regs[][IQS62X_EVENT_SIZE] = …;
static const enum iqs62x_event_reg iqs621_event_regs[][IQS62X_EVENT_SIZE] = …;
static const enum iqs62x_event_reg iqs622_event_regs[][IQS62X_EVENT_SIZE] = …;
static const enum iqs62x_event_reg iqs624_event_regs[][IQS62X_EVENT_SIZE] = …;
static const enum iqs62x_event_reg iqs625_event_regs[][IQS62X_EVENT_SIZE] = …;
static const struct iqs62x_dev_desc iqs62x_devs[] = …;
static const struct regmap_config iqs62x_regmap_config = …;
static int iqs62x_probe(struct i2c_client *client)
{ … }
static void iqs62x_remove(struct i2c_client *client)
{ … }
static int __maybe_unused iqs62x_suspend(struct device *dev)
{ … }
static int __maybe_unused iqs62x_resume(struct device *dev)
{ … }
static SIMPLE_DEV_PM_OPS(iqs62x_pm, iqs62x_suspend, iqs62x_resume);
static const struct of_device_id iqs62x_of_match[] = …;
MODULE_DEVICE_TABLE(of, iqs62x_of_match);
static struct i2c_driver iqs62x_i2c_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;