diff options
author | Lars-Peter Clausen <lars@metafoo.de> | 2015-03-30 15:04:51 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-04-01 16:28:10 -0400 |
commit | cd5d822688f3b32af286a76f7078dfe49c716282 (patch) | |
tree | 592a754811d8133fb283cd5faef6da5c12c94c75 | |
parent | 37660b6daf6d28bb2206c95ec75c8063f2db1606 (diff) |
ASoC: wm8350: Move delayed work struct from DAPM context to driver state
The wm8350 driver is the last driver that still uses the delayed_work field
from the snd_soc_dapm_context struct. Moving this over to the driver's
private data struct will allow us to remove the field from the DAPM context,
which will drastically reduce its size.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/codecs/wm8350.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c index c81a9eab3e3e..c65e5a75fc1a 100644 --- a/sound/soc/codecs/wm8350.c +++ b/sound/soc/codecs/wm8350.c | |||
@@ -69,14 +69,14 @@ struct wm8350_data { | |||
69 | struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)]; | 69 | struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)]; |
70 | int fll_freq_out; | 70 | int fll_freq_out; |
71 | int fll_freq_in; | 71 | int fll_freq_in; |
72 | struct delayed_work pga_work; | ||
72 | }; | 73 | }; |
73 | 74 | ||
74 | /* | 75 | /* |
75 | * Ramp OUT1 PGA volume to minimise pops at stream startup and shutdown. | 76 | * Ramp OUT1 PGA volume to minimise pops at stream startup and shutdown. |
76 | */ | 77 | */ |
77 | static inline int wm8350_out1_ramp_step(struct snd_soc_codec *codec) | 78 | static inline int wm8350_out1_ramp_step(struct wm8350_data *wm8350_data) |
78 | { | 79 | { |
79 | struct wm8350_data *wm8350_data = snd_soc_codec_get_drvdata(codec); | ||
80 | struct wm8350_output *out1 = &wm8350_data->out1; | 80 | struct wm8350_output *out1 = &wm8350_data->out1; |
81 | struct wm8350 *wm8350 = wm8350_data->wm8350; | 81 | struct wm8350 *wm8350 = wm8350_data->wm8350; |
82 | int left_complete = 0, right_complete = 0; | 82 | int left_complete = 0, right_complete = 0; |
@@ -140,9 +140,8 @@ static inline int wm8350_out1_ramp_step(struct snd_soc_codec *codec) | |||
140 | /* | 140 | /* |
141 | * Ramp OUT2 PGA volume to minimise pops at stream startup and shutdown. | 141 | * Ramp OUT2 PGA volume to minimise pops at stream startup and shutdown. |
142 | */ | 142 | */ |
143 | static inline int wm8350_out2_ramp_step(struct snd_soc_codec *codec) | 143 | static inline int wm8350_out2_ramp_step(struct wm8350_data *wm8350_data) |
144 | { | 144 | { |
145 | struct wm8350_data *wm8350_data = snd_soc_codec_get_drvdata(codec); | ||
146 | struct wm8350_output *out2 = &wm8350_data->out2; | 145 | struct wm8350_output *out2 = &wm8350_data->out2; |
147 | struct wm8350 *wm8350 = wm8350_data->wm8350; | 146 | struct wm8350 *wm8350 = wm8350_data->wm8350; |
148 | int left_complete = 0, right_complete = 0; | 147 | int left_complete = 0, right_complete = 0; |
@@ -210,10 +209,8 @@ static inline int wm8350_out2_ramp_step(struct snd_soc_codec *codec) | |||
210 | */ | 209 | */ |
211 | static void wm8350_pga_work(struct work_struct *work) | 210 | static void wm8350_pga_work(struct work_struct *work) |
212 | { | 211 | { |
213 | struct snd_soc_dapm_context *dapm = | 212 | struct wm8350_data *wm8350_data = |
214 | container_of(work, struct snd_soc_dapm_context, delayed_work.work); | 213 | container_of(work, struct wm8350_data, pga_work.work); |
215 | struct snd_soc_codec *codec = snd_soc_dapm_to_codec(dapm); | ||
216 | struct wm8350_data *wm8350_data = snd_soc_codec_get_drvdata(codec); | ||
217 | struct wm8350_output *out1 = &wm8350_data->out1, | 214 | struct wm8350_output *out1 = &wm8350_data->out1, |
218 | *out2 = &wm8350_data->out2; | 215 | *out2 = &wm8350_data->out2; |
219 | int i, out1_complete, out2_complete; | 216 | int i, out1_complete, out2_complete; |
@@ -226,9 +223,9 @@ static void wm8350_pga_work(struct work_struct *work) | |||
226 | for (i = 0; i <= 63; i++) { | 223 | for (i = 0; i <= 63; i++) { |
227 | out1_complete = 1, out2_complete = 1; | 224 | out1_complete = 1, out2_complete = 1; |
228 | if (out1->ramp != WM8350_RAMP_NONE) | 225 | if (out1->ramp != WM8350_RAMP_NONE) |
229 | out1_complete = wm8350_out1_ramp_step(codec); | 226 | out1_complete = wm8350_out1_ramp_step(wm8350_data); |
230 | if (out2->ramp != WM8350_RAMP_NONE) | 227 | if (out2->ramp != WM8350_RAMP_NONE) |
231 | out2_complete = wm8350_out2_ramp_step(codec); | 228 | out2_complete = wm8350_out2_ramp_step(wm8350_data); |
232 | 229 | ||
233 | /* ramp finished ? */ | 230 | /* ramp finished ? */ |
234 | if (out1_complete && out2_complete) | 231 | if (out1_complete && out2_complete) |
@@ -283,7 +280,7 @@ static int pga_event(struct snd_soc_dapm_widget *w, | |||
283 | out->ramp = WM8350_RAMP_UP; | 280 | out->ramp = WM8350_RAMP_UP; |
284 | out->active = 1; | 281 | out->active = 1; |
285 | 282 | ||
286 | schedule_delayed_work(&codec->dapm.delayed_work, | 283 | schedule_delayed_work(&wm8350_data->pga_work, |
287 | msecs_to_jiffies(1)); | 284 | msecs_to_jiffies(1)); |
288 | break; | 285 | break; |
289 | 286 | ||
@@ -291,7 +288,7 @@ static int pga_event(struct snd_soc_dapm_widget *w, | |||
291 | out->ramp = WM8350_RAMP_DOWN; | 288 | out->ramp = WM8350_RAMP_DOWN; |
292 | out->active = 0; | 289 | out->active = 0; |
293 | 290 | ||
294 | schedule_delayed_work(&codec->dapm.delayed_work, | 291 | schedule_delayed_work(&wm8350_data->pga_work, |
295 | msecs_to_jiffies(1)); | 292 | msecs_to_jiffies(1)); |
296 | break; | 293 | break; |
297 | } | 294 | } |
@@ -1492,7 +1489,7 @@ static int wm8350_codec_probe(struct snd_soc_codec *codec) | |||
1492 | /* Put the codec into reset if it wasn't already */ | 1489 | /* Put the codec into reset if it wasn't already */ |
1493 | wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA); | 1490 | wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA); |
1494 | 1491 | ||
1495 | INIT_DELAYED_WORK(&codec->dapm.delayed_work, wm8350_pga_work); | 1492 | INIT_DELAYED_WORK(&priv->pga_work, wm8350_pga_work); |
1496 | INIT_DELAYED_WORK(&priv->hpl.work, wm8350_hpl_work); | 1493 | INIT_DELAYED_WORK(&priv->hpl.work, wm8350_hpl_work); |
1497 | INIT_DELAYED_WORK(&priv->hpr.work, wm8350_hpr_work); | 1494 | INIT_DELAYED_WORK(&priv->hpr.work, wm8350_hpr_work); |
1498 | 1495 | ||
@@ -1578,7 +1575,7 @@ static int wm8350_codec_remove(struct snd_soc_codec *codec) | |||
1578 | 1575 | ||
1579 | /* if there was any work waiting then we run it now and | 1576 | /* if there was any work waiting then we run it now and |
1580 | * wait for its completion */ | 1577 | * wait for its completion */ |
1581 | flush_delayed_work(&codec->dapm.delayed_work); | 1578 | flush_delayed_work(&priv->pga_work); |
1582 | 1579 | ||
1583 | wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA); | 1580 | wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA); |
1584 | 1581 | ||