diff options
Diffstat (limited to 'sound/soc/codecs/sn95031.c')
| -rw-r--r-- | sound/soc/codecs/sn95031.c | 77 | 
1 files changed, 40 insertions, 37 deletions
diff --git a/sound/soc/codecs/sn95031.c b/sound/soc/codecs/sn95031.c index dba26e63844..42dff26b3a2 100644 --- a/sound/soc/codecs/sn95031.c +++ b/sound/soc/codecs/sn95031.c @@ -164,30 +164,28 @@ static unsigned int sn95031_get_mic_bias(struct snd_soc_codec *codec)  }  /*end - adc helper functions */ -static inline unsigned int sn95031_read(struct snd_soc_codec *codec, -			unsigned int reg) +static int sn95031_read(void *ctx, unsigned int reg, unsigned int *val)  {  	u8 value = 0;  	int ret;  	ret = intel_scu_ipc_ioread8(reg, &value); -	if (ret) -		pr_err("read of %x failed, err %d\n", reg, ret); -	return value; +	if (ret == 0) +		*val = value; +	return ret;  } -static inline int sn95031_write(struct snd_soc_codec *codec, -			unsigned int reg, unsigned int value) +static int sn95031_write(void *ctx, unsigned int reg, unsigned int value)  { -	int ret; - -	ret = intel_scu_ipc_iowrite8(reg, value); -	if (ret) -		pr_err("write of %x failed, err %d\n", reg, ret); -	return ret; +	return intel_scu_ipc_iowrite8(reg, value);  } +static const struct regmap_config sn95031_regmap = { +	.reg_read = sn95031_read, +	.reg_write = sn95031_write, +}; +  static int sn95031_set_vaud_bias(struct snd_soc_codec *codec,  		enum snd_soc_bias_level level)  { @@ -314,14 +312,14 @@ static int sn95031_dmic56_event(struct snd_soc_dapm_widget *w,  /* mux controls */  static const char *sn95031_mic_texts[] = { "AMIC", "LineIn" }; -static const struct soc_enum sn95031_micl_enum = -	SOC_ENUM_SINGLE(SN95031_ADCCONFIG, 1, 2, sn95031_mic_texts); +static SOC_ENUM_SINGLE_DECL(sn95031_micl_enum, +			    SN95031_ADCCONFIG, 1, sn95031_mic_texts);  static const struct snd_kcontrol_new sn95031_micl_mux_control =  	SOC_DAPM_ENUM("Route", sn95031_micl_enum); -static const struct soc_enum sn95031_micr_enum = -	SOC_ENUM_SINGLE(SN95031_ADCCONFIG, 3, 2, sn95031_mic_texts); +static SOC_ENUM_SINGLE_DECL(sn95031_micr_enum, +			    SN95031_ADCCONFIG, 3, sn95031_mic_texts);  static const struct snd_kcontrol_new sn95031_micr_mux_control =  	SOC_DAPM_ENUM("Route", sn95031_micr_enum); @@ -330,26 +328,26 @@ static const char *sn95031_input_texts[] = {	"DMIC1", "DMIC2", "DMIC3",  						"DMIC4", "DMIC5", "DMIC6",  						"ADC Left", "ADC Right" }; -static const struct soc_enum sn95031_input1_enum = -	SOC_ENUM_SINGLE(SN95031_AUDIOMUX12, 0, 8, sn95031_input_texts); +static SOC_ENUM_SINGLE_DECL(sn95031_input1_enum, +			    SN95031_AUDIOMUX12, 0, sn95031_input_texts);  static const struct snd_kcontrol_new sn95031_input1_mux_control =  	SOC_DAPM_ENUM("Route", sn95031_input1_enum); -static const struct soc_enum sn95031_input2_enum = -	SOC_ENUM_SINGLE(SN95031_AUDIOMUX12, 4, 8, sn95031_input_texts); +static SOC_ENUM_SINGLE_DECL(sn95031_input2_enum, +			    SN95031_AUDIOMUX12, 4, sn95031_input_texts);  static const struct snd_kcontrol_new sn95031_input2_mux_control =  	SOC_DAPM_ENUM("Route", sn95031_input2_enum); -static const struct soc_enum sn95031_input3_enum = -	SOC_ENUM_SINGLE(SN95031_AUDIOMUX34, 0, 8, sn95031_input_texts); +static SOC_ENUM_SINGLE_DECL(sn95031_input3_enum, +			    SN95031_AUDIOMUX34, 0, sn95031_input_texts);  static const struct snd_kcontrol_new sn95031_input3_mux_control =  	SOC_DAPM_ENUM("Route", sn95031_input3_enum); -static const struct soc_enum sn95031_input4_enum = -	SOC_ENUM_SINGLE(SN95031_AUDIOMUX34, 4, 8, sn95031_input_texts); +static SOC_ENUM_SINGLE_DECL(sn95031_input4_enum, +			    SN95031_AUDIOMUX34, 4, sn95031_input_texts);  static const struct snd_kcontrol_new sn95031_input4_mux_control =  	SOC_DAPM_ENUM("Route", sn95031_input4_enum); @@ -361,19 +359,19 @@ static const char *sn95031_micmode_text[] = {"Single Ended", "Differential"};  /* 0dB to 30dB in 10dB steps */  static const DECLARE_TLV_DB_SCALE(mic_tlv, 0, 10, 0); -static const struct soc_enum sn95031_micmode1_enum = -	SOC_ENUM_SINGLE(SN95031_MICAMP1, 1, 2, sn95031_micmode_text); -static const struct soc_enum sn95031_micmode2_enum = -	SOC_ENUM_SINGLE(SN95031_MICAMP2, 1, 2, sn95031_micmode_text); +static SOC_ENUM_SINGLE_DECL(sn95031_micmode1_enum, +			    SN95031_MICAMP1, 1, sn95031_micmode_text); +static SOC_ENUM_SINGLE_DECL(sn95031_micmode2_enum, +			    SN95031_MICAMP2, 1, sn95031_micmode_text);  static const char *sn95031_dmic_cfg_text[] = {"GPO", "DMIC"}; -static const struct soc_enum sn95031_dmic12_cfg_enum = -	SOC_ENUM_SINGLE(SN95031_DMICMUX, 0, 2, sn95031_dmic_cfg_text); -static const struct soc_enum sn95031_dmic34_cfg_enum = -	SOC_ENUM_SINGLE(SN95031_DMICMUX, 1, 2, sn95031_dmic_cfg_text); -static const struct soc_enum sn95031_dmic56_cfg_enum = -	SOC_ENUM_SINGLE(SN95031_DMICMUX, 2, 2, sn95031_dmic_cfg_text); +static SOC_ENUM_SINGLE_DECL(sn95031_dmic12_cfg_enum, +			    SN95031_DMICMUX, 0, sn95031_dmic_cfg_text); +static SOC_ENUM_SINGLE_DECL(sn95031_dmic34_cfg_enum, +			    SN95031_DMICMUX, 1, sn95031_dmic_cfg_text); +static SOC_ENUM_SINGLE_DECL(sn95031_dmic56_cfg_enum, +			    SN95031_DMICMUX, 2, sn95031_dmic_cfg_text);  static const struct snd_kcontrol_new sn95031_snd_controls[] = {  	SOC_ENUM("Mic1Mode Capture Route", sn95031_micmode1_enum), @@ -886,8 +884,6 @@ static int sn95031_codec_remove(struct snd_soc_codec *codec)  static struct snd_soc_codec_driver sn95031_codec = {  	.probe		= sn95031_codec_probe,  	.remove		= sn95031_codec_remove, -	.read		= sn95031_read, -	.write		= sn95031_write,  	.set_bias_level	= sn95031_set_vaud_bias,  	.idle_bias_off	= true,  	.dapm_widgets	= sn95031_dapm_widgets, @@ -898,7 +894,14 @@ static struct snd_soc_codec_driver sn95031_codec = {  static int sn95031_device_probe(struct platform_device *pdev)  { +	struct regmap *regmap; +  	pr_debug("codec device probe called for %s\n", dev_name(&pdev->dev)); + +	regmap = devm_regmap_init(&pdev->dev, NULL, NULL, &sn95031_regmap); +	if (IS_ERR(regmap)) +		return PTR_ERR(regmap); +  	return snd_soc_register_codec(&pdev->dev, &sn95031_codec,  			sn95031_dais, ARRAY_SIZE(sn95031_dais));  }  | 
