/*
 * Copyright 2011-2015 Maxim Integrated Products
 *
 *  This program is free software; you can redistribute  it and/or modify it
 *  under  the terms of  the GNU General  Public License as published by the
 *  Free Software Foundation;  either version 2 of the  License, or (at your
 *  option) any later version.
 */

#ifndef __SOUND_MAXIM_DSM_H__
#define __SOUND_MAXIM_DSM_H__

#define DSM_RX_PORT_ID	0x4000
#define DSM_TX_PORT_ID	(DSM_RX_PORT_ID + 1)

#define AFE_MODULE_ID_DSM_RX				0x10001062
#define AFE_MODULE_ID_DSM_TX				0x0FF1020B

#define AFE_PARAM_ID_ENABLE_DSM_RX_ENABLE	0x10001063
#define AFE_PARAM_ID_ENABLE_DSM_RX_ALL		0x10001064
#define AFE_PARAM_ID_ENABLE_DSM_RX_ALL_R	0x10001065
#define AFE_PARAM_ID_ENABLE_DSM_TX_ENABLE	0x10001063
#define AFE_PARAM_ID_ENABLE_DSM_TX_ALL		0x10001064
#define AFE_PARAM_ID_ENABLE_DSM_TX_ALL_R	0x10001065

#define DSM_ID_FILTER_GET_AFE_PARAMS		0x00000000
#define DSM_ID_FILTER_SET_AFE_CNTRLS		0x00000001
#define DSM_ID_FILTER_GET_LOG_AFE_PARAMS	0x00000002

#define FLAG_WRITE_ALL						0xabefcdab
#define FLAG_WRITE_CAL_FROM_FILE			0xffff0000
#define FLAG_WRITE_ONOFF_ONLY				0xcdababef
#define FLAG_WRITE_RDC_CAL_ONLY				0xca00ca00
#define FLAG_WRITE_FEATURE_ONLY				0xfea0fea0

#define RESERVED_ADDR_COUNT		0xFF
#define START_ADDR_FOR_LSI		0x2A004C
#define END_ADDR_FOR_LSI		0x2A0380

#define AFE_PORT_ID_START		0x1000
#define AFE_PORT_ID_END			0x400d

#define PARAM_DSM_5_0_MAX 						185
#define PARAM_DSM_5_0_ABOX_WRITE_CB				0xDAAD
#define PARAM_DSM_5_0_ABOX_GET_LOGGING			1000

#define DSM_4_0_LSI_STEREO_OFFSET				410

#define DSM_API_SETGET_ENABLE 				   	1
#define DSM_API_SETGET_COILTEMP_THRESHOLD 		2
#define DSM_API_SETGET_XCL_THRESHOLD 		  	3
#define DSM_API_SETGET_LIMITERS_RELTIME 	  	4
#define DSM_API_SETGET_MAKEUP_GAIN 			  	5
#define DSM_API_SETGET_RDC_AT_ROOMTEMP		  	6
#define DSM_API_SETGET_COLDTEMP 				8
#define DSM_API_SETGET_PITONE_GAIN 				9
#define DSM_API_SETGET_LFX_GAIN 				12
#define DSM_API_GET_ADAPTIVE_DC_RES 			18
#define DSM_API_SETGET_ENABLE_RDC_CAL 			25
#define DSM_API_SETGET_PILOT_ENABLE 			28
#define DSM_API_SETGET_WRITE_FLAG 				63
#define DSM_API_SETGET_ENABLE_SMART_PT			104
#define DSM_API_SETGET_POWER_MEASUREMENT 		136

enum maxdsm_version {
	VERSION_3_0 = 30,
	VERSION_3_5_A = 35,
	VERSION_3_5_B,
	VERSION_4_0_A = 40,
	VERSION_4_0_B = 41,
	VERSION_5_0_C,
	VERSION_4_0_A_S = 50,
	VERSION_MAX,
};

enum maxdsm_platform_type {
	PLATFORM_TYPE_A = 0,
	PLATFORM_TYPE_B = 1,
	PLATFORM_TYPE_C,
	PLATFORM_TYPE_MAX,
};

enum maxdsm_ioctl_cmds {
	MAXDSM_IOCTL_GET_VERSION = 1000,
	MAXDSM_IOCTL_SET_VERSION,
	MAXDSM_IOCTL_GET_PARAM,
	MAXDSM_IOCTL_SET_PARAM,
	MAXDSM_IOCTL_GET_ALL_PARAMS,
	MAXDSM_IOCTL_SET_ALL_PARAMS,
	MAXDSM_IOCTL_GET_CAL_DATA,
	MAXDSM_IOCTL_SET_CAL_DATA,
	MAXDSM_IOCTL_GET_PLATFORM_TYPE,
	MAXDSM_IOCTL_SET_PLATFORM_TYPE,
	MAXDSM_IOCTL_GET_RX_PORT_ID,
	MAXDSM_IOCTL_SET_RX_PORT_ID,
	MAXDSM_IOCTL_GET_TX_PORT_ID,
	MAXDSM_IOCTL_SET_TX_PORT_ID,
};

enum maxdsm_ignore_param {
	MAXDSM_IGNORE_MASK_VOICE_COIL = 1U << 0,
	MAXDSM_IGNORE_MASK_AMBIENT_TEMP = 1U << 1,
	MAXDSM_IGNORE_MASK_ALL	= 1U << 16,
};

enum maxdsm_offset {
	PARAM_OFFSET_PLATFORM,
	PARAM_OFFSET_PORT_ID,
	PARAM_OFFSET_RX_MOD_ID,
	PARAM_OFFSET_TX_MOD_ID,
	PARAM_OFFSET_FILTER_SET,
	PARAM_OFFSET_VERSION,
	PARAM_OFFSET_MAX,
};

enum maxdsm_3_0_params {
	PARAM_RDC,
	PARAM_RDC_SZ,
	PARAM_VOICE_COIL_TEMP,
	PARAM_VOICE_COIL_TEMP_SZ,
	PARAM_Q,
	PARAM_Q_SZ,
	PARAM_FRES,
	PARAM_FRES_SZ,
	PARAM_EXCURSION,
	PARAM_EXCURSION_SZ,
	PARAM_VOICE_COIL,
	PARAM_VOICE_COIL_SZ,
	PARAM_RELEASE_TIME,
	PARAM_RELEASE_TIME_SZ,
	PARAM_THERMAL_LIMIT,
	PARAM_THERMAL_LIMIT_SZ,
	PARAM_EXCUR_LIMIT,
	PARAM_EXCUR_LIMIT_SZ,
	PARAM_ONOFF,
	PARAM_ONOFF_SZ,
	PARAM_STATIC_GAIN,
	PARAM_STATIC_GAIN_SZ,
	PARAM_LFX_GAIN,
	PARAM_LFX_GAIN_SZ,
	PARAM_PILOT_GAIN,
	PARAM_PILOT_GAIN_SZ,
	PARAM_WRITE_FLAG,
	PARAM_WRITE_FLAG_SZ,
	PARAM_FEATURE_SET,
	PARAM_FEATURE_SET_SZ,
	PARAM_SMOOTH_VOLT,
	PARAM_SMOOTH_VOLT_SZ,
	PARAM_HPF_CUTOFF,
	PARAM_HPF_CUTOFF_SZ,
	PARAM_LEAD_R,
	PARAM_LEAD_R_SZ,
	PARAM_RMS_SMOO_FAC,
	PARAM_RMS_SMOO_FAC_SZ,
	PARAM_CLIP_LIMIT,
	PARAM_CLIP_LIMIT_SZ,
	PARAM_THERMAL_COEF,
	PARAM_THERMAL_COEF_SZ,
	PARAM_QSPK,
	PARAM_QSPK_SZ,
	PARAM_EXCUR_LOG_THRESH,
	PARAM_EXCUR_LOG_THRESH_SZ,
	PARAM_TEMP_LOG_THRESH,
	PARAM_TEMP_LOG_THRESH_SZ,
	PARAM_RES_FREQ,
	PARAM_RES_FREQ_SZ,
	PARAM_RES_FREQ_GUARD_BAND,
	PARAM_RES_FREQ_GUARD_BAND_SZ,
	PARAM_DSM_3_0_MAX,
};

enum maxdsm_3_5_params {
	PARAM_AMBIENT_TEMP = PARAM_DSM_3_0_MAX,
	PARAM_AMBIENT_TEMP_SZ,
	PARAM_STL_ATTACK_TIME,
	PARAM_STL_ATTACK_TIME_SZ,
	PARAM_STL_RELEASE_TIME,
	PARAM_STL_RELEASE_TIME_SZ,
	PARAM_ADMITTANCE_A1,
	PARAM_ADMITTANCE_A1_SZ,
	PARAM_ADMITTANCE_A2,
	PARAM_ADMITTANCE_A2_SZ,
	PARAM_ADMITTANCE_B0,
	PARAM_ADMITTANCE_B0_SZ,
	PARAM_ADMITTANCE_B1,
	PARAM_ADMITTANCE_B1_SZ,
	PARAM_ADMITTANCE_B2,
	PARAM_ADMITTANCE_B2_SZ,
	PARAM_TCH1,
	PARAM_TCH1_SZ,
	PARAM_RTH1,
	PARAM_RTH1_SZ,
	PARAM_TCH2,
	PARAM_TCH2_SZ,
	PARAM_RTH2,
	PARAM_RTH2_SZ,
	PARAM_STL_ATTENUATION_GAIN,
	PARAM_STL_ATTENUATION_GAIN_SZ,
	PARAM_SPT_RAMP_DOWN_FRAMES,
	PARAM_SPT_RAMP_DOWN_FRAMES_SZ,
	PARAM_SPT_THRESHOLD,
	PARAM_SPT_THRESHOLD_SZ,
	PARAM_T_HORIZON,
	PARAM_T_HORIZON_SZ,
	PARAM_LFX_ADMITTANCE_A1,
	PARAM_LFX_ADMITTANCE_A1_SZ,
	PARAM_LFX_ADMITTANCE_A2,
	PARAM_LFX_ADMITTANCE_A2_SZ,
	PARAM_LFX_ADMITTANCE_B0,
	PARAM_LFX_ADMITTANCE_B0_SZ,
	PARAM_LFX_ADMITTANCE_B1,
	PARAM_LFX_ADMITTANCE_B1_SZ,
	PARAM_LFX_ADMITTANCE_B2,
	PARAM_LFX_ADMITTANCE_B2_SZ,
	PARAM_DSM_3_5_MAX,
};

enum maxdsm_4_0_params {
	PARAM_X_MAX = PARAM_DSM_3_5_MAX,
	PARAM_X_MAX_SZ,
	PARAM_SPK_FS,
	PARAM_SPK_FS_SZ,
	PARAM_Q_GUARD_BAND,
	PARAM_Q_GUARD_BAND_SZ,
	PARAM_STIMPEDMODEL_COEFFS_A1,
	PARAM_STIMPEDMODEL_COEFFS_A1_SZ,
	PARAM_STIMPEDMODEL_COEFFS_A2,
	PARAM_STIMPEDMODEL_COEFFS_A2_SZ,
	PARAM_STIMPEDMODEL_COEFFS_B0,
	PARAM_STIMPEDMODEL_COEFFS_B0_SZ,
	PARAM_STIMPEDMODEL_COEFFS_B1,
	PARAM_STIMPEDMODEL_COEFFS_B1_SZ,
	PARAM_STIMPEDMODEL_COEFFS_B2,
	PARAM_STIMPEDMODEL_COEFFS_B2_SZ,
	PARAM_STIMPEDMODEL_FLAG,
	PARAM_STIMPEDMODEL_FLAG_SZ,
	PARAM_Q_NOTCH,
	PARAM_Q_NOTCH_SZ,
	PARAM_POWER_MEASUREMENT,
	PARAM_POWER_MEASUREMENT_SZ,
	PARAM_DSM_4_0_MAX,
};

enum maxdsm_3_0_params_a {
	PARAM_A_VOICE_COIL_TEMP,
	PARAM_A_VOICE_COIL_TEMP_SZ,
	PARAM_A_EXCURSION,
	PARAM_A_EXCURSION_SZ,
	PARAM_A_RDC,
	PARAM_A_RDC_SZ,
	PARAM_A_Q_LO,
	PARAM_A_Q_LO_SZ,
	PARAM_A_Q_HI,
	PARAM_A_Q_HI_SZ,
	PARAM_A_FRES_LO,
	PARAM_A_FRES_LO_SZ,
	PARAM_A_FRES_HI,
	PARAM_A_FRES_HI_SZ,
	PARAM_A_EXCUR_LIMIT,
	PARAM_A_EXCUR_LIMIT_SZ,
	PARAM_A_VOICE_COIL,
	PARAM_A_VOICE_COIL_SZ,
	PARAM_A_THERMAL_LIMIT,
	PARAM_A_THERMAL_LIMIT_SZ,
	PARAM_A_RELEASE_TIME,
	PARAM_A_RELEASE_TIME_SZ,
	PARAM_A_ONOFF,
	PARAM_A_ONOFF_SZ,
	PARAM_A_STATIC_GAIN,
	PARAM_A_STATIC_GAIN_SZ,
	PARAM_A_LFX_GAIN,
	PARAM_A_LFX_GAIN_SZ,
	PARAM_A_PILOT_GAIN,
	PARAM_A_PILOT_GAIN_SZ,
	PARAM_A_FEATURE_SET,
	PARAM_A_FEATURE_SET_SZ,
	PARAM_A_SMOOTH_VOLT,
	PARAM_A_SMOOTH_VOLT_SZ,
	PARAM_A_HPF_CUTOFF,
	PARAM_A_HPF_CUTOFF_SZ,
	PARAM_A_LEAD_R,
	PARAM_A_LEAD_R_SZ,
	PARAM_A_RMS_SMOO_FAC,
	PARAM_A_RMS_SMOO_FAC_SZ,
	PARAM_A_CLIP_LIMIT,
	PARAM_A_CLIP_LIMIT_SZ,
	PARAM_A_THERMAL_COEF,
	PARAM_A_THERMAL_COEF_SZ,
	PARAM_A_QSPK,
	PARAM_A_QSPK_SZ,
	PARAM_A_EXCUR_LOG_THRESH,
	PARAM_A_EXCUR_LOG_THRESH_SZ,
	PARAM_A_TEMP_LOG_THRESH,
	PARAM_A_TEMP_LOG_THRESH_SZ,
	PARAM_A_RES_FREQ,
	PARAM_A_RES_FREQ_SZ,
	PARAM_A_RES_FREQ_GUARD_BAND,
	PARAM_A_RES_FREQ_GUARD_BAND_SZ,
	PARAM_A_DSM_3_0_MAX,
};

enum maxdsm_3_5_params_a {
	PARAM_A_AMBIENT_TEMP = PARAM_A_DSM_3_0_MAX,
	PARAM_A_AMBIENT_TEMP_SZ,
	PARAM_A_ADMITTANCE_A1,
	PARAM_A_ADMITTANCE_A1_SZ,
	PARAM_A_ADMITTANCE_A2,
	PARAM_A_ADMITTANCE_A2_SZ,
	PARAM_A_ADMITTANCE_B0,
	PARAM_A_ADMITTANCE_B0_SZ,
	PARAM_A_ADMITTANCE_B1,
	PARAM_A_ADMITTANCE_B1_SZ,
	PARAM_A_ADMITTANCE_B2,
	PARAM_A_ADMITTANCE_B2_SZ,
	PARAM_A_RTH1_HI,
	PARAM_A_RTH1_HI_SZ,
	PARAM_A_RTH1_LO,
	PARAM_A_RTH1_LO_SZ,
	PARAM_A_RTH2_HI,
	PARAM_A_RTH2_HI_SZ,
	PARAM_A_RTH2_LO,
	PARAM_A_RTH2_LO_SZ,
	PARAM_A_STL_ATENGAIN_HI,
	PARAM_A_STL_ATENGAIN_HI_SZ,
	PARAM_A_STL_ATENGAIN_LO,
	PARAM_A_STL_ATENGAIN_LO_SZ,
	PARAM_A_SPT_RAMP_DOWN_FRAMES,
	PARAM_A_SPT_RAMP_DOWN_FRAMES_SZ,
	PARAM_A_SPT_THRESHOLD_HI,
	PARAM_A_SPT_THRESHOLD_HI_SZ,
	PARAM_A_SPT_THRESHOLD_LO,
	PARAM_A_SPT_THRESHOLD_LO_SZ,
	PARAM_A_T_HORIZON,
	PARAM_A_T_HORIZON_SZ,
	PARAM_A_LFX_ADMITTANCE_A1,
	PARAM_A_LFX_ADMITTANCE_A1_SZ,
	PARAM_A_LFX_ADMITTANCE_A2,
	PARAM_A_LFX_ADMITTANCE_A2_SZ,
	PARAM_A_LFX_ADMITTANCE_B0,
	PARAM_A_LFX_ADMITTANCE_B0_SZ,
	PARAM_A_LFX_ADMITTANCE_B1,
	PARAM_A_LFX_ADMITTANCE_B1_SZ,
	PARAM_A_LFX_ADMITTANCE_B2,
	PARAM_A_LFX_ADMITTANCE_B2_SZ,
	PARAM_A_ALGORITHM_X_MAX,
	PARAM_A_ALGORITHM_X_MAX_SZ,
	PARAM_A_DSM_3_5_MAX,
};

enum maxdsm_4_0_params_a {
	PARAM_A_STL_TCTH1_HI = PARAM_A_DSM_3_5_MAX,
	PARAM_A_STL_TCTH1_HI_SZ,
	PARAM_A_STL_TCTH1_LO,
	PARAM_A_STL_TCTH1_LO_SZ,
	PARAM_A_STL_TCTH2_HI,
	PARAM_A_STL_TCTH2_HI_SZ,
	PARAM_A_STL_TCTH2_LO,
	PARAM_A_STL_TCTH2_LO_SZ,
	PARAM_A_STL_ATTACK_HI,
	PARAM_A_STL_ATTACK_HI_SZ,
	PARAM_A_STL_ATTACK_LO,
	PARAM_A_STL_ATTACK_LO_SZ,
	PARAM_A_STL_RELEASE_HI,
	PARAM_A_STL_RELEASE_HI_SZ,
	PARAM_A_STL_RELEASE_LO,
	PARAM_A_STL_RELEASE_LO_SZ,
	PARAM_A_STL_SPK_FS,
	PARAM_A_STL_SPK_FS_SZ,
	PARAM_A_Q_GUARD_BAND_HI,
	PARAM_A_Q_GUARD_BAND_HI_SZ,
	PARAM_A_Q_GUARD_BAND_LO,
	PARAM_A_Q_GUARD_BAND_LO_SZ,
	PARAM_A_STIMPEDMODEL_COEFFS_A1_HI,
	PARAM_A_STIMPEDMODEL_COEFFS_A1_HI_SZ,
	PARAM_A_STIMPEDMODEL_COEFFS_A1_LO,
	PARAM_A_STIMPEDMODEL_COEFFS_A1_LO_SZ,
	PARAM_A_STIMPEDMODEL_COEFFS_A2_HI,
	PARAM_A_STIMPEDMODEL_COEFFS_A2_HI_SZ,
	PARAM_A_STIMPEDMODEL_COEFFS_A2_LO,
	PARAM_A_STIMPEDMODEL_COEFFS_A2_LO_SZ,
	PARAM_A_STIMPEDMODEL_COEFFS_B0_HI,
	PARAM_A_STIMPEDMODEL_COEFFS_B0_HI_SZ,
	PARAM_A_STIMPEDMODEL_COEFFS_B0_LO,
	PARAM_A_STIMPEDMODEL_COEFFS_B0_LO_SZ,
	PARAM_A_STIMPEDMODEL_COEFFS_B1_HI,
	PARAM_A_STIMPEDMODEL_COEFFS_B1_HI_SZ,
	PARAM_A_STIMPEDMODEL_COEFFS_B1_LO,
	PARAM_A_STIMPEDMODEL_COEFFS_B1_LO_SZ,
	PARAM_A_STIMPEDMODEL_COEFFS_B2_HI,
	PARAM_A_STIMPEDMODEL_COEFFS_B2_HI_SZ,
	PARAM_A_STIMPEDMODEL_COEFFS_B2_LO,
	PARAM_A_STIMPEDMODEL_COEFFS_B2_LO_SZ,
	PARAM_A_STIMPEDMODEL_FLAG,
	PARAM_A_STIMPEDMODEL_FLAG_SZ,
	PARAM_A_Q_NOTCH_HI,
	PARAM_A_Q_NOTCH_HI_SZ,
	PARAM_A_Q_NOTCH_LO,
	PARAM_A_Q_NOTCH_LO_SZ,
	PARAM_A_POWER_MEASUREMENT,
	PARAM_A_POWER_MEASUREMENT_SZ,
	PARAM_A_MAINSPKHFCOMP,
	PARAM_A_MAINSPKHFCOMP_SZ,
	PARAM_A_EARPIECELEVEL,
	PARAM_A_EARPIECELEVEL_SZ,
	PARAM_A_XOVER_FREQ,
	PARAM_A_XOVER_FREQ_SZ,
	PARAM_A_STEREO_MODE_CONF,
	PARAM_A_STEREO_MODE_CONF_SZ,
	PARAM_A_DSM_4_0_MAX,
};

enum {
	WRITE_PROTECT,
	LOG_AVAILABLE,
	VERSION_INFO,
	LAST_2_SEC_TEMP,
	LAST_2_SEC_EXCUR,
	RESERVED_1,
	SEQUENCE_OF_TEMP,
	SEQUENCE_OF_EXCUR,
	LAST_2_SEC_RDC,
	LAST_2_SEC_FREQ,
	RESERVED_2,
	RESERVED_3,
	AFTER_2_SEC_TEMP_TEMP,
	AFTER_2_SEC_EXCUR_TEMP,
	AFTER_2_SEC_TEMP_EXCUR,
	AFTER_2_SEC_EXCUR_EXCUR,
	AFTER_2_SEC_RDC_TEMP,
	AFTER_2_SEC_FREQ_TEMP,
	AFTER_2_SEC_RDC_EXCUR,
	AFTER_2_SEC_FREQ_EXCUR,
	MAX_LOG_BUFFER_POS,
};

struct param_info {
	int id;
	uint32_t addr;
	int size;
	int type;
	int val;
};

struct param_set_data {
	int name;
	uint32_t addr;
	uint32_t value;
	uint32_t wflag;
};

struct maxim_dsm {
	struct regmap *regmap;
	uint32_t *param;
	uint32_t param_size;
	uint32_t platform_type;
	uint32_t rx_port_id;
	uint32_t tx_port_id;
	uint32_t rx_mod_id;
	uint32_t tx_mod_id;
	uint32_t filter_set;
	uint32_t version;
	uint32_t *binfo;
	uint32_t registered;
	uint32_t update_cal;
	uint32_t ignore_mask;
	uint32_t spk_state;
	uint32_t sub_reg;
};

#ifdef CONFIG_SND_SOC_MAXIM_DSM
#define USE_DSM_UPDATE_CAL
#define USE_DSM_LOG
#define USE_DSM_DEBUG

#ifdef USE_DSM_LOG
enum {
	SPK_EXCURSION_MAX,
	SPK_TEMP_MAX,
	SPK_EXCURSION_OVERCNT,
	SPK_TEMP_OVERCNT,
};
#endif

#endif /* CONFIG_SND_SOC_MAXIM_DSM */

int maxdsm_init(void);
void maxdsm_deinit(void);

uint32_t maxdsm_get_platform_type(void);
uint32_t maxdsm_get_version(void);
uint32_t maxdsm_is_stereo(void);
int maxdsm_set_feature_en(int on);
int maxdsm_set_rdc_temp(int rdc, int temp);
int maxdsm_set_dsm_onoff_status(int on);
uint32_t maxdsm_get_dcresistance(void);
int maxdsm_set_cal_mode(int on);

int maxdsm_update_info(uint32_t *pinfo);
void maxdsm_update_sub_reg(uint32_t sub_reg);
int maxdsm_get_rx_port_id(void);
int maxdsm_get_tx_port_id(void);
int maxdsm_get_rx_mod_id(void);
int maxdsm_get_tx_mod_id(void);
void maxdsm_set_regmap(struct regmap *regmap);

int maxdsm_update_feature_en_adc(int apply);

int maxdsm_get_spk_state(void);
void maxdsm_set_spk_state(int state);
int maxdsm_set_pilot_signal_state(int on);
uint32_t maxdsm_get_power_measurement(void);
void maxdsm_set_stereo_mode_configuration(unsigned int);

#ifdef USE_DSM_LOG
struct maxim_dsm_log_max_values {
	int excursion_max;
	int coil_temp_max;
	int excursion_overcnt;
	int coil_temp_overcnt;
	char dsm_timestamp[32];
};

#define LOG_BUFFER_ARRAY_SIZE 10

/* BUFSIZE must be 4 bytes allignment*/
#define BEFORE_BUFSIZE (4+(LOG_BUFFER_ARRAY_SIZE*2))
#define AFTER_BUFSIZE (LOG_BUFFER_ARRAY_SIZE*4)
#define LOGMAX_BUFSIZE 4

int maxdsm_get_dump_status(void);
void maxdsm_update_param(void);
void maxdsm_log_update(const void *byte_log_array,
		const void *int_log_array,
		const void *after_prob_byte_log_array,
		const void *after_prob_int_log_array,
		const void *int_log_max_array);
ssize_t maxdsm_log_prepare(char *buf);
void maxdsm_log_max_prepare(struct maxim_dsm_log_max_values *values);
void maxdsm_log_max_refresh(int values);
void maxdsm_cal_update(const void *byte_log_array,
		const void *int_log_array,
		const void *after_prob_byte_log_array,
		const void *after_prob_int_log_array,
		const void *int_log_max_array);
#else
static inline void maxdsm_log_update(const void *byte_log_array,
  const void *int_log_array,
  const void *after_prob_byte_log_array,
  const void *after_prob_int_log_array,
  const void *int_log_max_array) {}
/* BUFSIZE must be 4 bytes allignment*/
#define BEFORE_BUFSIZE 0
#define AFTER_BUFSIZE 0
#define LOGMAX_BUFSIZE 0
#endif /* USE_DSM_LOG */

#ifdef USE_DSM_UPDATE_CAL
int maxdsm_cal_avail(void);
int maxdsm_update_caldata(int on);
ssize_t maxdsm_cal_prepare(char *buf);
#endif

#endif /* __SOUND_MAXIM_DSM_H__ */
