ASoC: rt5682: Fix the fast discharge for headset unplugging in soundwire mode
[linux-2.6-microblaze.git] / sound / soc / codecs / rt5682-sdw.c
index b49f1e1..e78ba3b 100644 (file)
@@ -269,7 +269,7 @@ static int rt5682_sdw_hw_free(struct snd_pcm_substream *substream,
        return 0;
 }
 
-static struct snd_soc_dai_ops rt5682_sdw_ops = {
+static const struct snd_soc_dai_ops rt5682_sdw_ops = {
        .hw_params      = rt5682_sdw_hw_params,
        .hw_free        = rt5682_sdw_hw_free,
        .set_sdw_stream = rt5682_set_sdw_stream,
@@ -462,7 +462,8 @@ static int rt5682_io_init(struct device *dev, struct sdw_slave *slave)
 
        regmap_update_bits(rt5682->regmap, RT5682_CBJ_CTRL_2,
                RT5682_EXT_JD_SRC, RT5682_EXT_JD_SRC_MANUAL);
-       regmap_write(rt5682->regmap, RT5682_CBJ_CTRL_1, 0xd042);
+       regmap_write(rt5682->regmap, RT5682_CBJ_CTRL_1, 0xd142);
+       regmap_update_bits(rt5682->regmap, RT5682_CBJ_CTRL_5, 0x0700, 0x0600);
        regmap_update_bits(rt5682->regmap, RT5682_CBJ_CTRL_3,
                RT5682_CBJ_IN_BUF_EN, RT5682_CBJ_IN_BUF_EN);
        regmap_update_bits(rt5682->regmap, RT5682_SAR_IL_CMD_1,
@@ -677,13 +678,13 @@ static int rt5682_interrupt_callback(struct sdw_slave *slave,
 
        if (status->control_port & 0x4) {
                mod_delayed_work(system_power_efficient_wq,
-                       &rt5682->jack_detect_work, msecs_to_jiffies(250));
+                       &rt5682->jack_detect_work, msecs_to_jiffies(rt5682->irq_work_delay_time));
        }
 
        return 0;
 }
 
-static struct sdw_slave_ops rt5682_slave_ops = {
+static const struct sdw_slave_ops rt5682_slave_ops = {
        .read_prop = rt5682_read_prop,
        .interrupt_callback = rt5682_interrupt_callback,
        .update_status = rt5682_update_status,