#include <linux/i2c.h>
#include <linux/regmap.h>
#include <linux/slab.h>
+++++ +++#include <linux/of.h>
#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/pcm_params.h>
{
struct alc5623_platform_data *pdata;
struct alc5623_priv *alc5623;
+++++ +++ struct device_node *np;
unsigned int vid1, vid2;
int ret;
+++++ +++ u32 val32;
alc5623 = devm_kzalloc(&client->dev, sizeof(struct alc5623_priv),
GFP_KERNEL);
dev_err(&client->dev, "failed to read vendor ID1: %d\n", ret);
return ret;
}
-------- vid1 = ((vid1 & 0xff) << 8) | (vid1 >> 8);
ret = regmap_read(alc5623->regmap, ALC5623_VENDOR_ID2, &vid2);
if (ret < 0) {
dev_err(&client->dev, "failed to read vendor ID2: %d\n", ret);
return ret;
}
++++++++ vid2 >>= 8;
if ((vid1 != 0x10ec) || (vid2 != id->driver_data)) {
dev_err(&client->dev, "unknown or wrong codec\n");
if (pdata) {
alc5623->add_ctrl = pdata->add_ctrl;
alc5623->jack_det_ctrl = pdata->jack_det_ctrl;
+++++ +++ } else {
+++++ +++ if (client->dev.of_node) {
+++++ +++ np = client->dev.of_node;
+++++ +++ ret = of_property_read_u32(np, "add-ctrl", &val32);
+++++ +++ if (!ret)
+++++ +++ alc5623->add_ctrl = val32;
+++++ +++ ret = of_property_read_u32(np, "jack-det-ctrl", &val32);
+++++ +++ if (!ret)
+++++ +++ alc5623->jack_det_ctrl = val32;
+++++ +++ }
}
alc5623->id = vid2;
};
MODULE_DEVICE_TABLE(i2c, alc5623_i2c_table);
+++++ +++static const struct of_device_id alc5623_of_match[] = {
+++++ +++ { .compatible = "realtek,alc5623", },
+++++ +++ { }
+++++ +++};
+++++ +++MODULE_DEVICE_TABLE(of, alc5623_of_match);
+++++ +++
/* i2c codec control layer */
static struct i2c_driver alc5623_i2c_driver = {
.driver = {
.name = "alc562x-codec",
.owner = THIS_MODULE,
+++++ +++ .of_match_table = of_match_ptr(alc5623_of_match),
},
.probe = alc5623_i2c_probe,
.remove = alc5623_i2c_remove,
SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode),
SOC_ENUM("LHPF4 Mode", arizona_lhpf4_mode),
--------SOC_VALUE_ENUM("ISRC1 FSL", arizona_isrc_fsl[0]),
--------SOC_VALUE_ENUM("ISRC2 FSL", arizona_isrc_fsl[1]),
--------SOC_VALUE_ENUM("ISRC3 FSL", arizona_isrc_fsl[2]),
--------SOC_VALUE_ENUM("ISRC1 FSH", arizona_isrc_fsh[0]),
--------SOC_VALUE_ENUM("ISRC2 FSH", arizona_isrc_fsh[1]),
--------SOC_VALUE_ENUM("ISRC3 FSH", arizona_isrc_fsh[2]),
--------SOC_VALUE_ENUM("ASRC RATE 1", arizona_asrc_rate1),
++++++++SOC_ENUM("ISRC1 FSL", arizona_isrc_fsl[0]),
++++++++SOC_ENUM("ISRC2 FSL", arizona_isrc_fsl[1]),
++++++++SOC_ENUM("ISRC3 FSL", arizona_isrc_fsl[2]),
++++++++SOC_ENUM("ISRC1 FSH", arizona_isrc_fsh[0]),
++++++++SOC_ENUM("ISRC2 FSH", arizona_isrc_fsh[1]),
++++++++SOC_ENUM("ISRC3 FSH", arizona_isrc_fsh[2]),
++++++++SOC_ENUM("ASRC RATE 1", arizona_asrc_rate1),
ARIZONA_MIXER_CONTROLS("DSP1L", ARIZONA_DSP1LMIX_INPUT_1_SOURCE),
ARIZONA_MIXER_CONTROLS("DSP1R", ARIZONA_DSP1RMIX_INPUT_1_SOURCE),
SOC_SINGLE("HPOUT3 SC Protect Switch", ARIZONA_HP3_SHORT_CIRCUIT_CTRL,
ARIZONA_HP3_SC_ENA_SHIFT, 1, 0),
++++++ ++SOC_SINGLE("SPKDAT1 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_5L,
++++++ ++ ARIZONA_OUT5_OSR_SHIFT, 1, 0),
++++++ ++SOC_SINGLE("SPKDAT2 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_6L,
++++++ ++ ARIZONA_OUT6_OSR_SHIFT, 1, 0),
++++++ ++
SOC_DOUBLE_R("HPOUT1 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_1L,
ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_MUTE_SHIFT, 1, 1),
SOC_DOUBLE_R("HPOUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L,
wm5110_aec_loopback_values);
static const struct snd_kcontrol_new wm5110_aec_loopback_mux =
-------- SOC_DAPM_VALUE_ENUM("AEC Loopback", wm5110_aec_loopback);
++++++++ SOC_DAPM_ENUM("AEC Loopback", wm5110_aec_loopback);
static const struct snd_soc_dapm_widget wm5110_dapm_widgets[] = {
SND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1, ARIZONA_SYSCLK_ENA_SHIFT,
SND_SOC_DAPM_PGA("ISRC3DEC4", ARIZONA_ISRC_3_CTRL_3,
ARIZONA_ISRC3_DEC3_ENA_SHIFT, 0, NULL, 0),
--------SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1,
++++++++SND_SOC_DAPM_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1,
ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0,
&wm5110_aec_loopback_mux),
priv->core.arizona->dapm = &codec->dapm;
------- ret = snd_soc_codec_set_cache_io(codec, priv->core.arizona->regmap);
------- if (ret != 0)
------- return ret;
-------
arizona_init_spk(codec);
arizona_init_gpio(codec);
ARIZONA_DAC_DIGITAL_VOLUME_6R,
};
+++++++ static struct regmap *wm5110_get_regmap(struct device *dev)
+++++++ {
+++++++ struct wm5110_priv *priv = dev_get_drvdata(dev);
+++++++
+++++++ return priv->core.arizona->regmap;
+++++++ }
+++++++
static struct snd_soc_codec_driver soc_codec_dev_wm5110 = {
.probe = wm5110_codec_probe,
.remove = wm5110_codec_remove,
+++++++ .get_regmap = wm5110_get_regmap,
.idle_bias_off = true,