Loading sound/soc/codecs/arizona.c +18 −14 Original line number Diff line number Diff line Loading @@ -221,6 +221,8 @@ int arizona_init_spk(struct snd_soc_codec *codec) switch (arizona->type) { case WM8997: case CS47L24: case WM1831: break; default: ret = snd_soc_dapm_new_controls(dapm, &arizona_spkr, 1); Loading Loading @@ -1122,7 +1124,6 @@ int arizona_anc_ev(struct snd_soc_dapm_widget *w, int event) { struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); unsigned int mask = 0x3 << w->shift; unsigned int val; switch (event) { Loading @@ -1136,7 +1137,7 @@ int arizona_anc_ev(struct snd_soc_dapm_widget *w, return 0; } snd_soc_update_bits(codec, ARIZONA_CLOCK_CONTROL, mask, val); snd_soc_write(codec, ARIZONA_CLOCK_CONTROL, val); return 0; } Loading Loading @@ -2035,7 +2036,21 @@ static int arizona_calc_fratio(struct arizona_fll *fll, init_ratio, Fref, refdiv); while (div <= ARIZONA_FLL_MAX_REFDIV) { for (ratio = init_ratio; ratio <= ARIZONA_FLL_MAX_FRATIO; /* start from init_ratio because this may already give a * fractional N.K */ for (ratio = init_ratio; ratio > 0; ratio--) { if (target % (ratio * Fref)) { cfg->refdiv = refdiv; cfg->fratio = ratio - 1; arizona_fll_dbg(fll, "pseudo: found fref=%u refdiv=%d(%d) ratio=%d\n", Fref, refdiv, div, ratio); return ratio; } } for (ratio = init_ratio + 1; ratio <= ARIZONA_FLL_MAX_FRATIO; ratio++) { if ((ARIZONA_FLL_VCO_CORNER / 2) / (fll->vco_mult * ratio) < Fref) { Loading @@ -2061,17 +2076,6 @@ static int arizona_calc_fratio(struct arizona_fll *fll, } } for (ratio = init_ratio - 1; ratio > 0; ratio--) { if (target % (ratio * Fref)) { cfg->refdiv = refdiv; cfg->fratio = ratio - 1; arizona_fll_dbg(fll, "pseudo: found fref=%u refdiv=%d(%d) ratio=%d\n", Fref, refdiv, div, ratio); return ratio; } } div *= 2; Fref /= 2; refdiv++; Loading sound/soc/codecs/cs47l24.c +5 −0 Original line number Diff line number Diff line Loading @@ -1271,10 +1271,15 @@ static int cs47l24_probe(struct platform_device *pdev) static int cs47l24_remove(struct platform_device *pdev) { struct cs47l24_priv *cs47l24 = platform_get_drvdata(pdev); snd_soc_unregister_platform(&pdev->dev); snd_soc_unregister_codec(&pdev->dev); pm_runtime_disable(&pdev->dev); wm_adsp2_remove(&cs47l24->core.adsp[1]); wm_adsp2_remove(&cs47l24->core.adsp[2]); return 0; } Loading sound/soc/codecs/wm5102.c +4 −0 Original line number Diff line number Diff line Loading @@ -2093,10 +2093,14 @@ static int wm5102_probe(struct platform_device *pdev) static int wm5102_remove(struct platform_device *pdev) { struct wm5102_priv *wm5102 = platform_get_drvdata(pdev); snd_soc_unregister_platform(&pdev->dev); snd_soc_unregister_codec(&pdev->dev); pm_runtime_disable(&pdev->dev); wm_adsp2_remove(&wm5102->core.adsp[0]); return 0; } Loading sound/soc/codecs/wm5110.c +6 −0 Original line number Diff line number Diff line Loading @@ -2435,10 +2435,16 @@ static int wm5110_probe(struct platform_device *pdev) static int wm5110_remove(struct platform_device *pdev) { struct wm5110_priv *wm5110 = platform_get_drvdata(pdev); int i; snd_soc_unregister_platform(&pdev->dev); snd_soc_unregister_codec(&pdev->dev); pm_runtime_disable(&pdev->dev); for (i = 0; i < WM5110_NUM_ADSP; i++) wm_adsp2_remove(&wm5110->core.adsp[i]); return 0; } Loading sound/soc/codecs/wm_adsp.c +36 −16 Original line number Diff line number Diff line Loading @@ -1037,6 +1037,13 @@ static void wm_adsp_ctl_work(struct work_struct *work) kfree(ctl_work); } static void wm_adsp_free_ctl_blk(struct wm_coeff_ctl *ctl) { kfree(ctl->cache); kfree(ctl->name); kfree(ctl); } static int wm_adsp_create_control(struct wm_adsp *dsp, const struct wm_adsp_alg_region *alg_region, unsigned int offset, unsigned int len, Loading Loading @@ -1652,6 +1659,19 @@ static struct wm_adsp_alg_region *wm_adsp_create_region(struct wm_adsp *dsp, return alg_region; } static void wm_adsp_free_alg_regions(struct wm_adsp *dsp) { struct wm_adsp_alg_region *alg_region; while (!list_empty(&dsp->alg_regions)) { alg_region = list_first_entry(&dsp->alg_regions, struct wm_adsp_alg_region, list); list_del(&alg_region->list); kfree(alg_region); } } static int wm_adsp1_setup_algs(struct wm_adsp *dsp) { struct wmfw_adsp1_id_hdr adsp1_id; Loading Loading @@ -2082,7 +2102,6 @@ int wm_adsp1_event(struct snd_soc_dapm_widget *w, struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec); struct wm_adsp *dsp = &dsps[w->shift]; struct wm_adsp_alg_region *alg_region; struct wm_coeff_ctl *ctl; int ret; unsigned int val; Loading Loading @@ -2162,13 +2181,8 @@ int wm_adsp1_event(struct snd_soc_dapm_widget *w, list_for_each_entry(ctl, &dsp->ctl_list, list) ctl->enabled = 0; while (!list_empty(&dsp->alg_regions)) { alg_region = list_first_entry(&dsp->alg_regions, struct wm_adsp_alg_region, list); list_del(&alg_region->list); kfree(alg_region); } wm_adsp_free_alg_regions(dsp); break; default: Loading Loading @@ -2310,7 +2324,6 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w, struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec); struct wm_adsp *dsp = &dsps[w->shift]; struct wm_adsp_alg_region *alg_region; struct wm_coeff_ctl *ctl; int ret; Loading Loading @@ -2361,13 +2374,7 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w, list_for_each_entry(ctl, &dsp->ctl_list, list) ctl->enabled = 0; while (!list_empty(&dsp->alg_regions)) { alg_region = list_first_entry(&dsp->alg_regions, struct wm_adsp_alg_region, list); list_del(&alg_region->list); kfree(alg_region); } wm_adsp_free_alg_regions(dsp); if (wm_adsp_fw[dsp->fw].num_caps != 0) wm_adsp_buffer_free(dsp); Loading Loading @@ -2432,6 +2439,19 @@ int wm_adsp2_init(struct wm_adsp *dsp) } EXPORT_SYMBOL_GPL(wm_adsp2_init); void wm_adsp2_remove(struct wm_adsp *dsp) { struct wm_coeff_ctl *ctl; while (!list_empty(&dsp->ctl_list)) { ctl = list_first_entry(&dsp->ctl_list, struct wm_coeff_ctl, list); list_del(&ctl->list); wm_adsp_free_ctl_blk(ctl); } } EXPORT_SYMBOL_GPL(wm_adsp2_remove); int wm_adsp_compr_open(struct wm_adsp *dsp, struct snd_compr_stream *stream) { struct wm_adsp_compr *compr; Loading Loading
sound/soc/codecs/arizona.c +18 −14 Original line number Diff line number Diff line Loading @@ -221,6 +221,8 @@ int arizona_init_spk(struct snd_soc_codec *codec) switch (arizona->type) { case WM8997: case CS47L24: case WM1831: break; default: ret = snd_soc_dapm_new_controls(dapm, &arizona_spkr, 1); Loading Loading @@ -1122,7 +1124,6 @@ int arizona_anc_ev(struct snd_soc_dapm_widget *w, int event) { struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); unsigned int mask = 0x3 << w->shift; unsigned int val; switch (event) { Loading @@ -1136,7 +1137,7 @@ int arizona_anc_ev(struct snd_soc_dapm_widget *w, return 0; } snd_soc_update_bits(codec, ARIZONA_CLOCK_CONTROL, mask, val); snd_soc_write(codec, ARIZONA_CLOCK_CONTROL, val); return 0; } Loading Loading @@ -2035,7 +2036,21 @@ static int arizona_calc_fratio(struct arizona_fll *fll, init_ratio, Fref, refdiv); while (div <= ARIZONA_FLL_MAX_REFDIV) { for (ratio = init_ratio; ratio <= ARIZONA_FLL_MAX_FRATIO; /* start from init_ratio because this may already give a * fractional N.K */ for (ratio = init_ratio; ratio > 0; ratio--) { if (target % (ratio * Fref)) { cfg->refdiv = refdiv; cfg->fratio = ratio - 1; arizona_fll_dbg(fll, "pseudo: found fref=%u refdiv=%d(%d) ratio=%d\n", Fref, refdiv, div, ratio); return ratio; } } for (ratio = init_ratio + 1; ratio <= ARIZONA_FLL_MAX_FRATIO; ratio++) { if ((ARIZONA_FLL_VCO_CORNER / 2) / (fll->vco_mult * ratio) < Fref) { Loading @@ -2061,17 +2076,6 @@ static int arizona_calc_fratio(struct arizona_fll *fll, } } for (ratio = init_ratio - 1; ratio > 0; ratio--) { if (target % (ratio * Fref)) { cfg->refdiv = refdiv; cfg->fratio = ratio - 1; arizona_fll_dbg(fll, "pseudo: found fref=%u refdiv=%d(%d) ratio=%d\n", Fref, refdiv, div, ratio); return ratio; } } div *= 2; Fref /= 2; refdiv++; Loading
sound/soc/codecs/cs47l24.c +5 −0 Original line number Diff line number Diff line Loading @@ -1271,10 +1271,15 @@ static int cs47l24_probe(struct platform_device *pdev) static int cs47l24_remove(struct platform_device *pdev) { struct cs47l24_priv *cs47l24 = platform_get_drvdata(pdev); snd_soc_unregister_platform(&pdev->dev); snd_soc_unregister_codec(&pdev->dev); pm_runtime_disable(&pdev->dev); wm_adsp2_remove(&cs47l24->core.adsp[1]); wm_adsp2_remove(&cs47l24->core.adsp[2]); return 0; } Loading
sound/soc/codecs/wm5102.c +4 −0 Original line number Diff line number Diff line Loading @@ -2093,10 +2093,14 @@ static int wm5102_probe(struct platform_device *pdev) static int wm5102_remove(struct platform_device *pdev) { struct wm5102_priv *wm5102 = platform_get_drvdata(pdev); snd_soc_unregister_platform(&pdev->dev); snd_soc_unregister_codec(&pdev->dev); pm_runtime_disable(&pdev->dev); wm_adsp2_remove(&wm5102->core.adsp[0]); return 0; } Loading
sound/soc/codecs/wm5110.c +6 −0 Original line number Diff line number Diff line Loading @@ -2435,10 +2435,16 @@ static int wm5110_probe(struct platform_device *pdev) static int wm5110_remove(struct platform_device *pdev) { struct wm5110_priv *wm5110 = platform_get_drvdata(pdev); int i; snd_soc_unregister_platform(&pdev->dev); snd_soc_unregister_codec(&pdev->dev); pm_runtime_disable(&pdev->dev); for (i = 0; i < WM5110_NUM_ADSP; i++) wm_adsp2_remove(&wm5110->core.adsp[i]); return 0; } Loading
sound/soc/codecs/wm_adsp.c +36 −16 Original line number Diff line number Diff line Loading @@ -1037,6 +1037,13 @@ static void wm_adsp_ctl_work(struct work_struct *work) kfree(ctl_work); } static void wm_adsp_free_ctl_blk(struct wm_coeff_ctl *ctl) { kfree(ctl->cache); kfree(ctl->name); kfree(ctl); } static int wm_adsp_create_control(struct wm_adsp *dsp, const struct wm_adsp_alg_region *alg_region, unsigned int offset, unsigned int len, Loading Loading @@ -1652,6 +1659,19 @@ static struct wm_adsp_alg_region *wm_adsp_create_region(struct wm_adsp *dsp, return alg_region; } static void wm_adsp_free_alg_regions(struct wm_adsp *dsp) { struct wm_adsp_alg_region *alg_region; while (!list_empty(&dsp->alg_regions)) { alg_region = list_first_entry(&dsp->alg_regions, struct wm_adsp_alg_region, list); list_del(&alg_region->list); kfree(alg_region); } } static int wm_adsp1_setup_algs(struct wm_adsp *dsp) { struct wmfw_adsp1_id_hdr adsp1_id; Loading Loading @@ -2082,7 +2102,6 @@ int wm_adsp1_event(struct snd_soc_dapm_widget *w, struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec); struct wm_adsp *dsp = &dsps[w->shift]; struct wm_adsp_alg_region *alg_region; struct wm_coeff_ctl *ctl; int ret; unsigned int val; Loading Loading @@ -2162,13 +2181,8 @@ int wm_adsp1_event(struct snd_soc_dapm_widget *w, list_for_each_entry(ctl, &dsp->ctl_list, list) ctl->enabled = 0; while (!list_empty(&dsp->alg_regions)) { alg_region = list_first_entry(&dsp->alg_regions, struct wm_adsp_alg_region, list); list_del(&alg_region->list); kfree(alg_region); } wm_adsp_free_alg_regions(dsp); break; default: Loading Loading @@ -2310,7 +2324,6 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w, struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec); struct wm_adsp *dsp = &dsps[w->shift]; struct wm_adsp_alg_region *alg_region; struct wm_coeff_ctl *ctl; int ret; Loading Loading @@ -2361,13 +2374,7 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w, list_for_each_entry(ctl, &dsp->ctl_list, list) ctl->enabled = 0; while (!list_empty(&dsp->alg_regions)) { alg_region = list_first_entry(&dsp->alg_regions, struct wm_adsp_alg_region, list); list_del(&alg_region->list); kfree(alg_region); } wm_adsp_free_alg_regions(dsp); if (wm_adsp_fw[dsp->fw].num_caps != 0) wm_adsp_buffer_free(dsp); Loading Loading @@ -2432,6 +2439,19 @@ int wm_adsp2_init(struct wm_adsp *dsp) } EXPORT_SYMBOL_GPL(wm_adsp2_init); void wm_adsp2_remove(struct wm_adsp *dsp) { struct wm_coeff_ctl *ctl; while (!list_empty(&dsp->ctl_list)) { ctl = list_first_entry(&dsp->ctl_list, struct wm_coeff_ctl, list); list_del(&ctl->list); wm_adsp_free_ctl_blk(ctl); } } EXPORT_SYMBOL_GPL(wm_adsp2_remove); int wm_adsp_compr_open(struct wm_adsp *dsp, struct snd_compr_stream *stream) { struct wm_adsp_compr *compr; Loading