#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/pm.h>
#include <linux/i2c.h>
#include <linux/regmap.h>
#include <linux/clk.h>
#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <sound/soc.h>
#include <sound/initval.h>
#include <sound/tlv.h>
#include <linux/slab.h>
#include <asm/div64.h>
#include <sound/max98088.h>
#include "max98088.h"
enum max98088_type { … };
struct max98088_cdata { … };
struct max98088_priv { … };
static const struct reg_default max98088_reg[] = …;
static bool max98088_readable_register(struct device *dev, unsigned int reg)
{ … }
static bool max98088_writeable_register(struct device *dev, unsigned int reg)
{ … }
static bool max98088_volatile_register(struct device *dev, unsigned int reg)
{ … }
static const struct regmap_config max98088_regmap = …;
static void m98088_eq_band(struct snd_soc_component *component, unsigned int dai,
unsigned int band, u16 *coefs)
{ … }
static const char *max98088_exmode_texts[] = …;
static const unsigned int max98088_exmode_values[] = …;
static SOC_VALUE_ENUM_SINGLE_DECL(max98088_exmode_enum,
M98088_REG_41_SPKDHP, 0, 127,
max98088_exmode_texts,
max98088_exmode_values);
static const char *max98088_ex_thresh[] = …;
static SOC_ENUM_SINGLE_DECL(max98088_ex_thresh_enum,
M98088_REG_42_SPKDHP_THRESH, 0,
max98088_ex_thresh);
static const char *max98088_fltr_mode[] = …;
static SOC_ENUM_SINGLE_DECL(max98088_filter_mode_enum,
M98088_REG_18_DAI1_FILTERS, 7,
max98088_fltr_mode);
static const char *max98088_extmic_text[] = …;
static SOC_ENUM_SINGLE_DECL(max98088_extmic_enum,
M98088_REG_48_CFG_MIC, 0,
max98088_extmic_text);
static const struct snd_kcontrol_new max98088_extmic_mux = …;
static const char *max98088_dai1_fltr[] = …;
static SOC_ENUM_SINGLE_DECL(max98088_dai1_dac_filter_enum,
M98088_REG_18_DAI1_FILTERS, 0,
max98088_dai1_fltr);
static SOC_ENUM_SINGLE_DECL(max98088_dai1_adc_filter_enum,
M98088_REG_18_DAI1_FILTERS, 4,
max98088_dai1_fltr);
static int max98088_mic1pre_set(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{ … }
static int max98088_mic1pre_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{ … }
static int max98088_mic2pre_set(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{ … }
static int max98088_mic2pre_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{ … }
static const DECLARE_TLV_DB_RANGE(max98088_micboost_tlv,
0, 1, TLV_DB_SCALE_ITEM(0, 2000, 0),
2, 2, TLV_DB_SCALE_ITEM(3000, 0, 0)
);
static const DECLARE_TLV_DB_RANGE(max98088_hp_tlv,
0, 6, TLV_DB_SCALE_ITEM(-6700, 400, 0),
7, 14, TLV_DB_SCALE_ITEM(-4000, 300, 0),
15, 21, TLV_DB_SCALE_ITEM(-1700, 200, 0),
22, 27, TLV_DB_SCALE_ITEM(-400, 100, 0),
28, 31, TLV_DB_SCALE_ITEM(150, 50, 0)
);
static const DECLARE_TLV_DB_RANGE(max98088_spk_tlv,
0, 6, TLV_DB_SCALE_ITEM(-6200, 400, 0),
7, 14, TLV_DB_SCALE_ITEM(-3500, 300, 0),
15, 21, TLV_DB_SCALE_ITEM(-1200, 200, 0),
22, 27, TLV_DB_SCALE_ITEM(100, 100, 0),
28, 31, TLV_DB_SCALE_ITEM(650, 50, 0)
);
static const struct snd_kcontrol_new max98088_snd_controls[] = …;
static const struct snd_kcontrol_new max98088_left_speaker_mixer_controls[] = …;
static const struct snd_kcontrol_new max98088_right_speaker_mixer_controls[] = …;
static const struct snd_kcontrol_new max98088_left_hp_mixer_controls[] = …;
static const struct snd_kcontrol_new max98088_right_hp_mixer_controls[] = …;
static const struct snd_kcontrol_new max98088_left_rec_mixer_controls[] = …;
static const struct snd_kcontrol_new max98088_right_rec_mixer_controls[] = …;
static const struct snd_kcontrol_new max98088_left_ADC_mixer_controls[] = …;
static const struct snd_kcontrol_new max98088_right_ADC_mixer_controls[] = …;
static int max98088_mic_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event)
{ … }
static int max98088_line_pga(struct snd_soc_dapm_widget *w,
int event, int line, u8 channel)
{ … }
static int max98088_pga_ina1_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *k, int event)
{ … }
static int max98088_pga_ina2_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *k, int event)
{ … }
static int max98088_pga_inb1_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *k, int event)
{ … }
static int max98088_pga_inb2_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *k, int event)
{ … }
static const struct snd_soc_dapm_widget max98088_dapm_widgets[] = …;
static const struct snd_soc_dapm_route max98088_audio_map[] = …;
static const struct { … } rate_table[] = …;
static inline int rate_value(int rate, u8 *value)
{ … }
static int max98088_dai1_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai)
{ … }
static int max98088_dai2_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai)
{ … }
static int max98088_dai_set_sysclk(struct snd_soc_dai *dai,
int clk_id, unsigned int freq, int dir)
{ … }
static int max98088_dai1_set_fmt(struct snd_soc_dai *codec_dai,
unsigned int fmt)
{ … }
static int max98088_dai2_set_fmt(struct snd_soc_dai *codec_dai,
unsigned int fmt)
{ … }
static int max98088_dai1_mute(struct snd_soc_dai *codec_dai, int mute,
int direction)
{ … }
static int max98088_dai2_mute(struct snd_soc_dai *codec_dai, int mute,
int direction)
{ … }
static int max98088_set_bias_level(struct snd_soc_component *component,
enum snd_soc_bias_level level)
{ … }
#define MAX98088_RATES …
#define MAX98088_FORMATS …
static const struct snd_soc_dai_ops max98088_dai1_ops = …;
static const struct snd_soc_dai_ops max98088_dai2_ops = …;
static struct snd_soc_dai_driver max98088_dai[] = …;
static const char *eq_mode_name[] = …;
static int max98088_get_channel(struct snd_soc_component *component, const char *name)
{ … }
static void max98088_setup_eq1(struct snd_soc_component *component)
{ … }
static void max98088_setup_eq2(struct snd_soc_component *component)
{ … }
static int max98088_put_eq_enum(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{ … }
static int max98088_get_eq_enum(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{ … }
static void max98088_handle_eq_pdata(struct snd_soc_component *component)
{ … }
static void max98088_handle_pdata(struct snd_soc_component *component)
{ … }
static int max98088_probe(struct snd_soc_component *component)
{ … }
static void max98088_remove(struct snd_soc_component *component)
{ … }
static const struct snd_soc_component_driver soc_component_dev_max98088 = …;
static const struct i2c_device_id max98088_i2c_id[] = …;
MODULE_DEVICE_TABLE(i2c, max98088_i2c_id);
static int max98088_i2c_probe(struct i2c_client *i2c)
{ … }
#if defined(CONFIG_OF)
static const struct of_device_id max98088_of_match[] = …;
MODULE_DEVICE_TABLE(of, max98088_of_match);
#endif
static struct i2c_driver max98088_i2c_driver = …;
module_i2c_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;