The patch
ASoC: wm8985: replace codec to component
has been applied to the asoc tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks, Mark
From cbc23b742464357c25eef77f63ed86d24a12ff27 Mon Sep 17 00:00:00 2001
From: Kuninori Morimoto kuninori.morimoto.gx@renesas.com Date: Mon, 29 Jan 2018 03:06:06 +0000 Subject: [PATCH] ASoC: wm8985: replace codec to component
Now we can replace Codec to Component. Let's do it.
Note: xxx_codec_xxx() -> xxx_component_xxx() .idle_bias_off = 0 -> .idle_bias_on = 1 .ignore_pmdown_time = 0 -> .use_pmdown_time = 1 - -> .endianness = 1 - -> .non_legacy_dai_naming = 1
Signed-off-by: Kuninori Morimoto kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown broonie@kernel.org --- sound/soc/codecs/wm8985.c | 201 ++++++++++++++++++++++------------------------ 1 file changed, 94 insertions(+), 107 deletions(-)
diff --git a/sound/soc/codecs/wm8985.c b/sound/soc/codecs/wm8985.c index 05344f974ff3..18b342ca4f8e 100644 --- a/sound/soc/codecs/wm8985.c +++ b/sound/soc/codecs/wm8985.c @@ -564,10 +564,10 @@ static const struct snd_soc_dapm_route wm8985_aux_dapm_routes[] = { { "Left Boost Mixer", "AUXL Volume", "AUXL" }, };
-static int wm8985_add_widgets(struct snd_soc_codec *codec) +static int wm8985_add_widgets(struct snd_soc_component *component) { - struct wm8985_priv *wm8985 = snd_soc_codec_get_drvdata(codec); - struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec); + struct wm8985_priv *wm8985 = snd_soc_component_get_drvdata(component); + struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
switch (wm8985->dev_type) { case WM8758: @@ -576,7 +576,7 @@ static int wm8985_add_widgets(struct snd_soc_codec *codec) break;
case WM8985: - snd_soc_add_codec_controls(codec, wm8985_specific_snd_controls, + snd_soc_add_component_controls(component, wm8985_specific_snd_controls, ARRAY_SIZE(wm8985_specific_snd_controls));
snd_soc_dapm_new_controls(dapm, wm8985_dapm_widgets, @@ -592,10 +592,10 @@ static int wm8985_add_widgets(struct snd_soc_codec *codec) static int eqmode_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { - struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); + struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); unsigned int reg;
- reg = snd_soc_read(codec, WM8985_EQ1_LOW_SHELF); + reg = snd_soc_component_read32(component, WM8985_EQ1_LOW_SHELF); if (reg & WM8985_EQ3DMODE) ucontrol->value.enumerated.item[0] = 1; else @@ -607,7 +607,7 @@ static int eqmode_get(struct snd_kcontrol *kcontrol, static int eqmode_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { - struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); + struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); unsigned int regpwr2, regpwr3; unsigned int reg_eq;
@@ -615,7 +615,7 @@ static int eqmode_put(struct snd_kcontrol *kcontrol, && ucontrol->value.enumerated.item[0] != 1) return -EINVAL;
- reg_eq = snd_soc_read(codec, WM8985_EQ1_LOW_SHELF); + reg_eq = snd_soc_component_read32(component, WM8985_EQ1_LOW_SHELF); switch ((reg_eq & WM8985_EQ3DMODE) >> WM8985_EQ3DMODE_SHIFT) { case 0: if (!ucontrol->value.enumerated.item[0]) @@ -627,46 +627,46 @@ static int eqmode_put(struct snd_kcontrol *kcontrol, break; }
- regpwr2 = snd_soc_read(codec, WM8985_POWER_MANAGEMENT_2); - regpwr3 = snd_soc_read(codec, WM8985_POWER_MANAGEMENT_3); + regpwr2 = snd_soc_component_read32(component, WM8985_POWER_MANAGEMENT_2); + regpwr3 = snd_soc_component_read32(component, WM8985_POWER_MANAGEMENT_3); /* disable the DACs and ADCs */ - snd_soc_update_bits(codec, WM8985_POWER_MANAGEMENT_2, + snd_soc_component_update_bits(component, WM8985_POWER_MANAGEMENT_2, WM8985_ADCENR_MASK | WM8985_ADCENL_MASK, 0); - snd_soc_update_bits(codec, WM8985_POWER_MANAGEMENT_3, + snd_soc_component_update_bits(component, WM8985_POWER_MANAGEMENT_3, WM8985_DACENR_MASK | WM8985_DACENL_MASK, 0); - snd_soc_update_bits(codec, WM8985_ADDITIONAL_CONTROL, + snd_soc_component_update_bits(component, WM8985_ADDITIONAL_CONTROL, WM8985_M128ENB_MASK, WM8985_M128ENB); /* set the desired eqmode */ - snd_soc_update_bits(codec, WM8985_EQ1_LOW_SHELF, + snd_soc_component_update_bits(component, WM8985_EQ1_LOW_SHELF, WM8985_EQ3DMODE_MASK, ucontrol->value.enumerated.item[0] << WM8985_EQ3DMODE_SHIFT); /* restore DAC/ADC configuration */ - snd_soc_write(codec, WM8985_POWER_MANAGEMENT_2, regpwr2); - snd_soc_write(codec, WM8985_POWER_MANAGEMENT_3, regpwr3); + snd_soc_component_write(component, WM8985_POWER_MANAGEMENT_2, regpwr2); + snd_soc_component_write(component, WM8985_POWER_MANAGEMENT_3, regpwr3); return 0; }
-static int wm8985_reset(struct snd_soc_codec *codec) +static int wm8985_reset(struct snd_soc_component *component) { - return snd_soc_write(codec, WM8985_SOFTWARE_RESET, 0x0); + return snd_soc_component_write(component, WM8985_SOFTWARE_RESET, 0x0); }
static int wm8985_dac_mute(struct snd_soc_dai *dai, int mute) { - struct snd_soc_codec *codec = dai->codec; + struct snd_soc_component *component = dai->component;
- return snd_soc_update_bits(codec, WM8985_DAC_CONTROL, + return snd_soc_component_update_bits(component, WM8985_DAC_CONTROL, WM8985_SOFTMUTE_MASK, !!mute << WM8985_SOFTMUTE_SHIFT); }
static int wm8985_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) { - struct snd_soc_codec *codec; + struct snd_soc_component *component; u16 format, master, bcp, lrp;
- codec = dai->codec; + component = dai->component;
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { case SND_SOC_DAIFMT_I2S: @@ -687,7 +687,7 @@ static int wm8985_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) return -EINVAL; }
- snd_soc_update_bits(codec, WM8985_AUDIO_INTERFACE, + snd_soc_component_update_bits(component, WM8985_AUDIO_INTERFACE, WM8985_FMT_MASK, format << WM8985_FMT_SHIFT);
switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { @@ -702,7 +702,7 @@ static int wm8985_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) return -EINVAL; }
- snd_soc_update_bits(codec, WM8985_CLOCK_GEN_CONTROL, + snd_soc_component_update_bits(component, WM8985_CLOCK_GEN_CONTROL, WM8985_MS_MASK, master << WM8985_MS_SHIFT);
/* frame inversion is not valid for dsp modes */ @@ -739,9 +739,9 @@ static int wm8985_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) return -EINVAL; }
- snd_soc_update_bits(codec, WM8985_AUDIO_INTERFACE, + snd_soc_component_update_bits(component, WM8985_AUDIO_INTERFACE, WM8985_LRP_MASK, lrp << WM8985_LRP_SHIFT); - snd_soc_update_bits(codec, WM8985_AUDIO_INTERFACE, + snd_soc_component_update_bits(component, WM8985_AUDIO_INTERFACE, WM8985_BCP_MASK, bcp << WM8985_BCP_SHIFT); return 0; } @@ -751,14 +751,14 @@ static int wm8985_hw_params(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { int i; - struct snd_soc_codec *codec; + struct snd_soc_component *component; struct wm8985_priv *wm8985; u16 blen, srate_idx; unsigned int tmp; int srate_best;
- codec = dai->codec; - wm8985 = snd_soc_codec_get_drvdata(codec); + component = dai->component; + wm8985 = snd_soc_component_get_drvdata(component);
wm8985->bclk = snd_soc_params_to_bclk(params); if ((int)wm8985->bclk < 0) @@ -783,7 +783,7 @@ static int wm8985_hw_params(struct snd_pcm_substream *substream, return -EINVAL; }
- snd_soc_update_bits(codec, WM8985_AUDIO_INTERFACE, + snd_soc_component_update_bits(component, WM8985_AUDIO_INTERFACE, WM8985_WL_MASK, blen << WM8985_WL_SHIFT);
/* @@ -800,7 +800,7 @@ static int wm8985_hw_params(struct snd_pcm_substream *substream, }
dev_dbg(dai->dev, "Selected SRATE = %d\n", srates[srate_idx]); - snd_soc_update_bits(codec, WM8985_ADDITIONAL_CONTROL, + snd_soc_component_update_bits(component, WM8985_ADDITIONAL_CONTROL, WM8985_SR_MASK, srate_idx << WM8985_SR_SHIFT);
dev_dbg(dai->dev, "Target BCLK = %uHz\n", wm8985->bclk); @@ -819,7 +819,7 @@ static int wm8985_hw_params(struct snd_pcm_substream *substream, }
dev_dbg(dai->dev, "MCLK ratio = %dfs\n", fs_ratios[i].ratio); - snd_soc_update_bits(codec, WM8985_CLOCK_GEN_CONTROL, + snd_soc_component_update_bits(component, WM8985_CLOCK_GEN_CONTROL, WM8985_MCLKDIV_MASK, i << WM8985_MCLKDIV_SHIFT);
/* select the appropriate bclk divider */ @@ -835,7 +835,7 @@ static int wm8985_hw_params(struct snd_pcm_substream *substream, }
dev_dbg(dai->dev, "BCLK div = %d\n", i); - snd_soc_update_bits(codec, WM8985_CLOCK_GEN_CONTROL, + snd_soc_component_update_bits(component, WM8985_CLOCK_GEN_CONTROL, WM8985_BCLKDIV_MASK, i << WM8985_BCLKDIV_SHIFT); return 0; } @@ -887,13 +887,13 @@ static int wm8985_set_pll(struct snd_soc_dai *dai, int pll_id, unsigned int freq_out) { int ret; - struct snd_soc_codec *codec; + struct snd_soc_component *component; struct pll_div pll_div;
- codec = dai->codec; + component = dai->component; if (!freq_in || !freq_out) { /* disable the PLL */ - snd_soc_update_bits(codec, WM8985_POWER_MANAGEMENT_1, + snd_soc_component_update_bits(component, WM8985_POWER_MANAGEMENT_1, WM8985_PLLEN_MASK, 0); } else { ret = pll_factors(&pll_div, freq_out * 4 * 2, freq_in); @@ -901,18 +901,18 @@ static int wm8985_set_pll(struct snd_soc_dai *dai, int pll_id, return ret;
/* set PLLN and PRESCALE */ - snd_soc_write(codec, WM8985_PLL_N, + snd_soc_component_write(component, WM8985_PLL_N, (pll_div.div2 << WM8985_PLL_PRESCALE_SHIFT) | pll_div.n); /* set PLLK */ - snd_soc_write(codec, WM8985_PLL_K_3, pll_div.k & 0x1ff); - snd_soc_write(codec, WM8985_PLL_K_2, (pll_div.k >> 9) & 0x1ff); - snd_soc_write(codec, WM8985_PLL_K_1, (pll_div.k >> 18)); + snd_soc_component_write(component, WM8985_PLL_K_3, pll_div.k & 0x1ff); + snd_soc_component_write(component, WM8985_PLL_K_2, (pll_div.k >> 9) & 0x1ff); + snd_soc_component_write(component, WM8985_PLL_K_1, (pll_div.k >> 18)); /* set the source of the clock to be the PLL */ - snd_soc_update_bits(codec, WM8985_CLOCK_GEN_CONTROL, + snd_soc_component_update_bits(component, WM8985_CLOCK_GEN_CONTROL, WM8985_CLKSEL_MASK, WM8985_CLKSEL); /* enable the PLL */ - snd_soc_update_bits(codec, WM8985_POWER_MANAGEMENT_1, + snd_soc_component_update_bits(component, WM8985_POWER_MANAGEMENT_1, WM8985_PLLEN_MASK, WM8985_PLLEN); } return 0; @@ -921,21 +921,21 @@ static int wm8985_set_pll(struct snd_soc_dai *dai, int pll_id, static int wm8985_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int freq, int dir) { - struct snd_soc_codec *codec; + struct snd_soc_component *component; struct wm8985_priv *wm8985;
- codec = dai->codec; - wm8985 = snd_soc_codec_get_drvdata(codec); + component = dai->component; + wm8985 = snd_soc_component_get_drvdata(component);
switch (clk_id) { case WM8985_CLKSRC_MCLK: - snd_soc_update_bits(codec, WM8985_CLOCK_GEN_CONTROL, + snd_soc_component_update_bits(component, WM8985_CLOCK_GEN_CONTROL, WM8985_CLKSEL_MASK, 0); - snd_soc_update_bits(codec, WM8985_POWER_MANAGEMENT_1, + snd_soc_component_update_bits(component, WM8985_POWER_MANAGEMENT_1, WM8985_PLLEN_MASK, 0); break; case WM8985_CLKSRC_PLL: - snd_soc_update_bits(codec, WM8985_CLOCK_GEN_CONTROL, + snd_soc_component_update_bits(component, WM8985_CLOCK_GEN_CONTROL, WM8985_CLKSEL_MASK, WM8985_CLKSEL); break; default: @@ -947,27 +947,27 @@ static int wm8985_set_sysclk(struct snd_soc_dai *dai, return 0; }
-static int wm8985_set_bias_level(struct snd_soc_codec *codec, +static int wm8985_set_bias_level(struct snd_soc_component *component, enum snd_soc_bias_level level) { int ret; struct wm8985_priv *wm8985;
- wm8985 = snd_soc_codec_get_drvdata(codec); + wm8985 = snd_soc_component_get_drvdata(component); switch (level) { case SND_SOC_BIAS_ON: case SND_SOC_BIAS_PREPARE: /* VMID at 75k */ - snd_soc_update_bits(codec, WM8985_POWER_MANAGEMENT_1, + snd_soc_component_update_bits(component, WM8985_POWER_MANAGEMENT_1, WM8985_VMIDSEL_MASK, 1 << WM8985_VMIDSEL_SHIFT); break; case SND_SOC_BIAS_STANDBY: - if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF) { + if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) { ret = regulator_bulk_enable(ARRAY_SIZE(wm8985->supplies), wm8985->supplies); if (ret) { - dev_err(codec->dev, + dev_err(component->dev, "Failed to enable supplies: %d\n", ret); return ret; @@ -976,45 +976,45 @@ static int wm8985_set_bias_level(struct snd_soc_codec *codec, regcache_sync(wm8985->regmap);
/* enable anti-pop features */ - snd_soc_update_bits(codec, WM8985_OUT4_TO_ADC, + snd_soc_component_update_bits(component, WM8985_OUT4_TO_ADC, WM8985_POBCTRL_MASK, WM8985_POBCTRL); /* enable thermal shutdown */ - snd_soc_update_bits(codec, WM8985_OUTPUT_CTRL0, + snd_soc_component_update_bits(component, WM8985_OUTPUT_CTRL0, WM8985_TSDEN_MASK, WM8985_TSDEN); - snd_soc_update_bits(codec, WM8985_OUTPUT_CTRL0, + snd_soc_component_update_bits(component, WM8985_OUTPUT_CTRL0, WM8985_TSOPCTRL_MASK, WM8985_TSOPCTRL); /* enable BIASEN */ - snd_soc_update_bits(codec, WM8985_POWER_MANAGEMENT_1, + snd_soc_component_update_bits(component, WM8985_POWER_MANAGEMENT_1, WM8985_BIASEN_MASK, WM8985_BIASEN); /* VMID at 75k */ - snd_soc_update_bits(codec, WM8985_POWER_MANAGEMENT_1, + snd_soc_component_update_bits(component, WM8985_POWER_MANAGEMENT_1, WM8985_VMIDSEL_MASK, 1 << WM8985_VMIDSEL_SHIFT); msleep(500); /* disable anti-pop features */ - snd_soc_update_bits(codec, WM8985_OUT4_TO_ADC, + snd_soc_component_update_bits(component, WM8985_OUT4_TO_ADC, WM8985_POBCTRL_MASK, 0); } /* VMID at 300k */ - snd_soc_update_bits(codec, WM8985_POWER_MANAGEMENT_1, + snd_soc_component_update_bits(component, WM8985_POWER_MANAGEMENT_1, WM8985_VMIDSEL_MASK, 2 << WM8985_VMIDSEL_SHIFT); break; case SND_SOC_BIAS_OFF: /* disable thermal shutdown */ - snd_soc_update_bits(codec, WM8985_OUTPUT_CTRL0, + snd_soc_component_update_bits(component, WM8985_OUTPUT_CTRL0, WM8985_TSOPCTRL_MASK, 0); - snd_soc_update_bits(codec, WM8985_OUTPUT_CTRL0, + snd_soc_component_update_bits(component, WM8985_OUTPUT_CTRL0, WM8985_TSDEN_MASK, 0); /* disable VMIDSEL and BIASEN */ - snd_soc_update_bits(codec, WM8985_POWER_MANAGEMENT_1, + snd_soc_component_update_bits(component, WM8985_POWER_MANAGEMENT_1, WM8985_VMIDSEL_MASK | WM8985_BIASEN_MASK, 0); - snd_soc_write(codec, WM8985_POWER_MANAGEMENT_1, 0); - snd_soc_write(codec, WM8985_POWER_MANAGEMENT_2, 0); - snd_soc_write(codec, WM8985_POWER_MANAGEMENT_3, 0); + snd_soc_component_write(component, WM8985_POWER_MANAGEMENT_1, 0); + snd_soc_component_write(component, WM8985_POWER_MANAGEMENT_2, 0); + snd_soc_component_write(component, WM8985_POWER_MANAGEMENT_3, 0);
regcache_mark_dirty(wm8985->regmap);
@@ -1026,46 +1026,46 @@ static int wm8985_set_bias_level(struct snd_soc_codec *codec, return 0; }
-static int wm8985_probe(struct snd_soc_codec *codec) +static int wm8985_probe(struct snd_soc_component *component) { size_t i; struct wm8985_priv *wm8985; int ret;
- wm8985 = snd_soc_codec_get_drvdata(codec); + wm8985 = snd_soc_component_get_drvdata(component);
for (i = 0; i < ARRAY_SIZE(wm8985->supplies); i++) wm8985->supplies[i].supply = wm8985_supply_names[i];
- ret = devm_regulator_bulk_get(codec->dev, ARRAY_SIZE(wm8985->supplies), + ret = devm_regulator_bulk_get(component->dev, ARRAY_SIZE(wm8985->supplies), wm8985->supplies); if (ret) { - dev_err(codec->dev, "Failed to request supplies: %d\n", ret); + dev_err(component->dev, "Failed to request supplies: %d\n", ret); return ret; }
ret = regulator_bulk_enable(ARRAY_SIZE(wm8985->supplies), wm8985->supplies); if (ret) { - dev_err(codec->dev, "Failed to enable supplies: %d\n", ret); + dev_err(component->dev, "Failed to enable supplies: %d\n", ret); return ret; }
- ret = wm8985_reset(codec); + ret = wm8985_reset(component); if (ret < 0) { - dev_err(codec->dev, "Failed to issue reset: %d\n", ret); + dev_err(component->dev, "Failed to issue reset: %d\n", ret); goto err_reg_enable; }
/* latch volume update bits */ for (i = 0; i < ARRAY_SIZE(volume_update_regs); ++i) - snd_soc_update_bits(codec, volume_update_regs[i], + snd_soc_component_update_bits(component, volume_update_regs[i], 0x100, 0x100); /* enable BIASCUT */ - snd_soc_update_bits(codec, WM8985_BIAS_CTRL, WM8985_BIASCUT, + snd_soc_component_update_bits(component, WM8985_BIAS_CTRL, WM8985_BIASCUT, WM8985_BIASCUT);
- wm8985_add_widgets(codec); + wm8985_add_widgets(component);
return 0;
@@ -1105,19 +1105,20 @@ static struct snd_soc_dai_driver wm8985_dai = { .symmetric_rates = 1 };
-static const struct snd_soc_codec_driver soc_codec_dev_wm8985 = { - .probe = wm8985_probe, - .set_bias_level = wm8985_set_bias_level, - .suspend_bias_off = true, - - .component_driver = { - .controls = wm8985_common_snd_controls, - .num_controls = ARRAY_SIZE(wm8985_common_snd_controls), - .dapm_widgets = wm8985_common_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(wm8985_common_dapm_widgets), - .dapm_routes = wm8985_common_dapm_routes, - .num_dapm_routes = ARRAY_SIZE(wm8985_common_dapm_routes), - }, +static const struct snd_soc_component_driver soc_component_dev_wm8985 = { + .probe = wm8985_probe, + .set_bias_level = wm8985_set_bias_level, + .controls = wm8985_common_snd_controls, + .num_controls = ARRAY_SIZE(wm8985_common_snd_controls), + .dapm_widgets = wm8985_common_dapm_widgets, + .num_dapm_widgets = ARRAY_SIZE(wm8985_common_dapm_widgets), + .dapm_routes = wm8985_common_dapm_routes, + .num_dapm_routes = ARRAY_SIZE(wm8985_common_dapm_routes), + .suspend_bias_off = 1, + .idle_bias_on = 1, + .use_pmdown_time = 1, + .endianness = 1, + .non_legacy_dai_naming = 1, };
static const struct regmap_config wm8985_regmap = { @@ -1154,23 +1155,16 @@ static int wm8985_spi_probe(struct spi_device *spi) return ret; }
- ret = snd_soc_register_codec(&spi->dev, - &soc_codec_dev_wm8985, &wm8985_dai, 1); + ret = devm_snd_soc_register_component(&spi->dev, + &soc_component_dev_wm8985, &wm8985_dai, 1); return ret; }
-static int wm8985_spi_remove(struct spi_device *spi) -{ - snd_soc_unregister_codec(&spi->dev); - return 0; -} - static struct spi_driver wm8985_spi_driver = { .driver = { .name = "wm8985", }, .probe = wm8985_spi_probe, - .remove = wm8985_spi_remove }; #endif
@@ -1197,17 +1191,11 @@ static int wm8985_i2c_probe(struct i2c_client *i2c, return ret; }
- ret = snd_soc_register_codec(&i2c->dev, - &soc_codec_dev_wm8985, &wm8985_dai, 1); + ret = devm_snd_soc_register_component(&i2c->dev, + &soc_component_dev_wm8985, &wm8985_dai, 1); return ret; }
-static int wm8985_i2c_remove(struct i2c_client *i2c) -{ - snd_soc_unregister_codec(&i2c->dev); - return 0; -} - static const struct i2c_device_id wm8985_i2c_id[] = { { "wm8985", WM8985 }, { "wm8758", WM8758 }, @@ -1220,7 +1208,6 @@ static struct i2c_driver wm8985_i2c_driver = { .name = "wm8985", }, .probe = wm8985_i2c_probe, - .remove = wm8985_i2c_remove, .id_table = wm8985_i2c_id }; #endif