linux/drivers/mfd/iqs62x.c

// SPDX-License-Identifier: GPL-2.0+
/*
 * Azoteq IQS620A/621/622/624/625 Multi-Function Sensors
 *
 * Copyright (C) 2019 Jeff LaBundy <[email protected]>
 *
 * These devices rely on application-specific register settings and calibration
 * data developed in and exported from a suite of GUIs offered by the vendor. A
 * separate tool converts the GUIs' ASCII-based output into a standard firmware
 * file parsed by the driver.
 *
 * Link to datasheets and GUIs: https://www.azoteq.com/
 *
 * Link to conversion tool: https://github.com/jlabundy/iqs62x-h2bin.git
 */

#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();