blob: 543605115f6170f3d577822e3efbe23bba57389d [file] [log] [blame]
/*
* Platform data for MAX98506
*
* Copyright 2013-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_MAX98506_PDATA_H__
#define __SOUND_MAX98506_PDATA_H__
#include <sound/maxim_dsm.h>
#define MAX98506_I2C_ADDR 0x62
#define MAX98506_I2C_ADDR_S (MAX98506_I2C_ADDR >> 1)
/* MAX98506 volume step */
enum volume_step {
MAX98506_VSTEP_0 = 0,
MAX98506_VSTEP_1,
MAX98506_VSTEP_2,
MAX98506_VSTEP_3,
MAX98506_VSTEP_4,
MAX98506_VSTEP_5,
MAX98506_VSTEP_6,
MAX98506_VSTEP_7,
MAX98506_VSTEP_8,
MAX98506_VSTEP_9,
MAX98506_VSTEP_10,
MAX98506_VSTEP_11,
MAX98506_VSTEP_12,
MAX98506_VSTEP_13,
MAX98506_VSTEP_14,
MAX98506_VSTEP_15,
MAX98506_VSTEP_MAX,
};
/* MAX98506 one stop mode */
enum one_stop_mode {
MAX98506_OSM_MONO_L = 0,
MAX98506_OSM_MONO_R,
MAX98506_OSM_RCV_L,
MAX98506_OSM_RCV_R,
MAX98506_OSM_STEREO,
MAX98506_OSM_STEREO_MODE2,
MAX98506_OSM_MAX,
};
#ifdef CONFIG_SND_SOC_MAXIM_DSM_CAL
extern struct class *g_class;
#else
struct class *g_class;
#endif /* CONFIG_SND_SOC_MAXIM_DSM_CAL */
struct max98506_volume_step_info {
int length;
int vol_step;
int adc_thres;
unsigned int boost_step[MAX98506_VSTEP_MAX];
bool adc_status;
};
struct max98506_pc_active {
u32 capture_active;
u32 playback_active:1;
};
#ifdef CONFIG_SND_SOC_MAXIM_DSM
#define MAX98506_PINFO_SZ PARAM_OFFSET_MAX
#else
#define MAX98506_PINFO_SZ 6
#endif /* CONFIG_SND_SOC_MAXIM_DSM */
struct max98506_pdata {
int sysclk;
u32 spk_gain;
u32 vmon_slot;
bool i2c_pull_up;
#ifdef USE_MAX98506_IRQ
int irq;
#endif /* USE_MAX98506_IRQ */
uint32_t pinfo[MAX98506_PINFO_SZ];
const uint32_t *reg_arr;
uint32_t reg_arr_len;
int sub_reg;
int interleave;
int osm;
uint32_t boostv;
uint32_t rev_id;
bool nodsm;
};
#endif /* __SOUND_MAX98506_PDATA_H__ */