summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max.kellermann@gmail.com>2016-08-09 17:32:26 -0400
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2016-11-18 12:05:44 -0500
commit22a613e89825ea7a3984a968463cc6d425bd8856 (patch)
treeec1841642bf43f88cf9b89323315dfca7418d0d6
parent4d5030b69bb4880a760406a6d3d519f02b9351dc (diff)
[media] dvb_frontend: merge duplicate dvb_tuner_ops.release implementations
Most release callback functions are identical: free the "tuner_priv" and clear it. Let's eliminate some bloat by providing this simple implementation in the dvb_frontend library. Signed-off-by: Max Kellermann <max.kellermann@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
-rw-r--r--drivers/media/dvb-core/dvb_frontend.c9
-rw-r--r--drivers/media/dvb-core/dvb_frontend.h7
-rw-r--r--drivers/media/dvb-frontends/dib0070.c9
-rw-r--r--drivers/media/dvb-frontends/dib0090.c11
-rw-r--r--drivers/media/dvb-frontends/dvb-pll.c9
-rw-r--r--drivers/media/dvb-frontends/itd1000.c9
-rw-r--r--drivers/media/dvb-frontends/ix2505v.c12
-rw-r--r--drivers/media/dvb-frontends/stb6000.c9
-rw-r--r--drivers/media/dvb-frontends/stb6100.c14
-rw-r--r--drivers/media/dvb-frontends/stv6110.c9
-rw-r--r--drivers/media/dvb-frontends/stv6110x.c12
-rw-r--r--drivers/media/dvb-frontends/tda18271c2dd.c10
-rw-r--r--drivers/media/dvb-frontends/tda665x.c11
-rw-r--r--drivers/media/dvb-frontends/tda8261.c11
-rw-r--r--drivers/media/dvb-frontends/tda826x.c9
-rw-r--r--drivers/media/dvb-frontends/tua6100.c9
-rw-r--r--drivers/media/dvb-frontends/zl10036.c12
-rw-r--r--drivers/media/tuners/fc0011.c10
-rw-r--r--drivers/media/tuners/fc0012.c9
-rw-r--r--drivers/media/tuners/fc0013.c9
-rw-r--r--drivers/media/tuners/mc44s803.c12
-rw-r--r--drivers/media/tuners/mt2060.c9
-rw-r--r--drivers/media/tuners/mt20xx.c12
-rw-r--r--drivers/media/tuners/mt2266.c9
-rw-r--r--drivers/media/tuners/qt1010.c9
-rw-r--r--drivers/media/tuners/tda18218.c9
-rw-r--r--drivers/media/tuners/tda827x.c11
-rw-r--r--drivers/media/tuners/tea5761.c10
-rw-r--r--drivers/media/tuners/tea5767.c10
29 files changed, 46 insertions, 245 deletions
diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c
index cdb7048874c5..7c4a50b0b963 100644
--- a/drivers/media/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb-core/dvb_frontend.c
@@ -174,6 +174,15 @@ static bool has_get_frontend(struct dvb_frontend *fe)
174 return fe->ops.get_frontend != NULL; 174 return fe->ops.get_frontend != NULL;
175} 175}
176 176
177int
178dvb_tuner_simple_release(struct dvb_frontend *fe)
179{
180 kfree(fe->tuner_priv);
181 fe->tuner_priv = NULL;
182 return 0;
183}
184EXPORT_SYMBOL(dvb_tuner_simple_release);
185
177/* 186/*
178 * Due to DVBv3 API calls, a delivery system should be mapped into one of 187 * Due to DVBv3 API calls, a delivery system should be mapped into one of
179 * the 4 DVBv3 delivery systems (FE_QPSK, FE_QAM, FE_OFDM or FE_ATSC), 188 * the 4 DVBv3 delivery systems (FE_QPSK, FE_QAM, FE_OFDM or FE_ATSC),
diff --git a/drivers/media/dvb-core/dvb_frontend.h b/drivers/media/dvb-core/dvb_frontend.h
index fb6e84811504..6b675a833520 100644
--- a/drivers/media/dvb-core/dvb_frontend.h
+++ b/drivers/media/dvb-core/dvb_frontend.h
@@ -267,6 +267,13 @@ struct dvb_tuner_ops {
267}; 267};
268 268
269/** 269/**
270 * A common default implementation for dvb_tuner_ops.release. All it
271 * does is kfree() the tuner_priv and assign NULL to it.
272 */
273int
274dvb_tuner_simple_release(struct dvb_frontend *fe);
275
276/**
270 * struct analog_demod_info - Information struct for analog TV part of the demod 277 * struct analog_demod_info - Information struct for analog TV part of the demod
271 * 278 *
272 * @name: Name of the analog TV demodulator 279 * @name: Name of the analog TV demodulator
diff --git a/drivers/media/dvb-frontends/dib0070.c b/drivers/media/dvb-frontends/dib0070.c
index 016ad09a8754..d9f1bc2f778c 100644
--- a/drivers/media/dvb-frontends/dib0070.c
+++ b/drivers/media/dvb-frontends/dib0070.c
@@ -722,13 +722,6 @@ static int dib0070_get_frequency(struct dvb_frontend *fe, u32 *frequency)
722 return 0; 722 return 0;
723} 723}
724 724
725static int dib0070_release(struct dvb_frontend *fe)
726{
727 kfree(fe->tuner_priv);
728 fe->tuner_priv = NULL;
729 return 0;
730}
731
732static const struct dvb_tuner_ops dib0070_ops = { 725static const struct dvb_tuner_ops dib0070_ops = {
733 .info = { 726 .info = {
734 .name = "DiBcom DiB0070", 727 .name = "DiBcom DiB0070",
@@ -736,7 +729,7 @@ static const struct dvb_tuner_ops dib0070_ops = {
736 .frequency_max = 860000000, 729 .frequency_max = 860000000,
737 .frequency_step = 1000, 730 .frequency_step = 1000,
738 }, 731 },
739 .release = dib0070_release, 732 .release = dvb_tuner_simple_release,
740 733
741 .init = dib0070_wakeup, 734 .init = dib0070_wakeup,
742 .sleep = dib0070_sleep, 735 .sleep = dib0070_sleep,
diff --git a/drivers/media/dvb-frontends/dib0090.c b/drivers/media/dvb-frontends/dib0090.c
index 16200582f089..7b4bee5c8e34 100644
--- a/drivers/media/dvb-frontends/dib0090.c
+++ b/drivers/media/dvb-frontends/dib0090.c
@@ -2526,13 +2526,6 @@ static int dib0090_tune(struct dvb_frontend *fe)
2526 return ret; 2526 return ret;
2527} 2527}
2528 2528
2529static int dib0090_release(struct dvb_frontend *fe)
2530{
2531 kfree(fe->tuner_priv);
2532 fe->tuner_priv = NULL;
2533 return 0;
2534}
2535
2536enum frontend_tune_state dib0090_get_tune_state(struct dvb_frontend *fe) 2529enum frontend_tune_state dib0090_get_tune_state(struct dvb_frontend *fe)
2537{ 2530{
2538 struct dib0090_state *state = fe->tuner_priv; 2531 struct dib0090_state *state = fe->tuner_priv;
@@ -2594,7 +2587,7 @@ static const struct dvb_tuner_ops dib0090_ops = {
2594 .frequency_max = 860000000, 2587 .frequency_max = 860000000,
2595 .frequency_step = 1000, 2588 .frequency_step = 1000,
2596 }, 2589 },
2597 .release = dib0090_release, 2590 .release = dvb_tuner_simple_release,
2598 2591
2599 .init = dib0090_wakeup, 2592 .init = dib0090_wakeup,
2600 .sleep = dib0090_sleep, 2593 .sleep = dib0090_sleep,
@@ -2609,7 +2602,7 @@ static const struct dvb_tuner_ops dib0090_fw_ops = {
2609 .frequency_max = 860000000, 2602 .frequency_max = 860000000,
2610 .frequency_step = 1000, 2603 .frequency_step = 1000,
2611 }, 2604 },
2612 .release = dib0090_release, 2605 .release = dvb_tuner_simple_release,
2613 2606
2614 .init = NULL, 2607 .init = NULL,
2615 .sleep = NULL, 2608 .sleep = NULL,
diff --git a/drivers/media/dvb-frontends/dvb-pll.c b/drivers/media/dvb-frontends/dvb-pll.c
index b6d199196b83..56832d6f47ae 100644
--- a/drivers/media/dvb-frontends/dvb-pll.c
+++ b/drivers/media/dvb-frontends/dvb-pll.c
@@ -606,13 +606,6 @@ static int dvb_pll_configure(struct dvb_frontend *fe, u8 *buf,
606 return (div * desc->entries[i].stepsize) - desc->iffreq; 606 return (div * desc->entries[i].stepsize) - desc->iffreq;
607} 607}
608 608
609static int dvb_pll_release(struct dvb_frontend *fe)
610{
611 kfree(fe->tuner_priv);
612 fe->tuner_priv = NULL;
613 return 0;
614}
615
616static int dvb_pll_sleep(struct dvb_frontend *fe) 609static int dvb_pll_sleep(struct dvb_frontend *fe)
617{ 610{
618 struct dvb_pll_priv *priv = fe->tuner_priv; 611 struct dvb_pll_priv *priv = fe->tuner_priv;
@@ -745,7 +738,7 @@ static int dvb_pll_init(struct dvb_frontend *fe)
745} 738}
746 739
747static const struct dvb_tuner_ops dvb_pll_tuner_ops = { 740static const struct dvb_tuner_ops dvb_pll_tuner_ops = {
748 .release = dvb_pll_release, 741 .release = dvb_tuner_simple_release,
749 .sleep = dvb_pll_sleep, 742 .sleep = dvb_pll_sleep,
750 .init = dvb_pll_init, 743 .init = dvb_pll_init,
751 .set_params = dvb_pll_set_params, 744 .set_params = dvb_pll_set_params,
diff --git a/drivers/media/dvb-frontends/itd1000.c b/drivers/media/dvb-frontends/itd1000.c
index cadcae4cff89..d09f718f8119 100644
--- a/drivers/media/dvb-frontends/itd1000.c
+++ b/drivers/media/dvb-frontends/itd1000.c
@@ -348,13 +348,6 @@ static int itd1000_sleep(struct dvb_frontend *fe)
348 return 0; 348 return 0;
349} 349}
350 350
351static int itd1000_release(struct dvb_frontend *fe)
352{
353 kfree(fe->tuner_priv);
354 fe->tuner_priv = NULL;
355 return 0;
356}
357
358static const struct dvb_tuner_ops itd1000_tuner_ops = { 351static const struct dvb_tuner_ops itd1000_tuner_ops = {
359 .info = { 352 .info = {
360 .name = "Integrant ITD1000", 353 .name = "Integrant ITD1000",
@@ -363,7 +356,7 @@ static const struct dvb_tuner_ops itd1000_tuner_ops = {
363 .frequency_step = 125, /* kHz for QPSK frontends */ 356 .frequency_step = 125, /* kHz for QPSK frontends */
364 }, 357 },
365 358
366 .release = itd1000_release, 359 .release = dvb_tuner_simple_release,
367 360
368 .init = itd1000_init, 361 .init = itd1000_init,
369 .sleep = itd1000_sleep, 362 .sleep = itd1000_sleep,
diff --git a/drivers/media/dvb-frontends/ix2505v.c b/drivers/media/dvb-frontends/ix2505v.c
index 2826bbb36b73..7742a7a8cdbb 100644
--- a/drivers/media/dvb-frontends/ix2505v.c
+++ b/drivers/media/dvb-frontends/ix2505v.c
@@ -94,16 +94,6 @@ static int ix2505v_write(struct ix2505v_state *state, u8 buf[], u8 count)
94 return 0; 94 return 0;
95} 95}
96 96
97static int ix2505v_release(struct dvb_frontend *fe)
98{
99 struct ix2505v_state *state = fe->tuner_priv;
100
101 fe->tuner_priv = NULL;
102 kfree(state);
103
104 return 0;
105}
106
107/** 97/**
108 * Data write format of the Sharp IX2505V B0017 98 * Data write format of the Sharp IX2505V B0017
109 * 99 *
@@ -264,7 +254,7 @@ static const struct dvb_tuner_ops ix2505v_tuner_ops = {
264 .frequency_min = 950000, 254 .frequency_min = 950000,
265 .frequency_max = 2175000 255 .frequency_max = 2175000
266 }, 256 },
267 .release = ix2505v_release, 257 .release = dvb_tuner_simple_release,
268 .set_params = ix2505v_set_params, 258 .set_params = ix2505v_set_params,
269 .get_frequency = ix2505v_get_frequency, 259 .get_frequency = ix2505v_get_frequency,
270}; 260};
diff --git a/drivers/media/dvb-frontends/stb6000.c b/drivers/media/dvb-frontends/stb6000.c
index 73347d51f340..5252d485439e 100644
--- a/drivers/media/dvb-frontends/stb6000.c
+++ b/drivers/media/dvb-frontends/stb6000.c
@@ -41,13 +41,6 @@ struct stb6000_priv {
41 u32 frequency; 41 u32 frequency;
42}; 42};
43 43
44static int stb6000_release(struct dvb_frontend *fe)
45{
46 kfree(fe->tuner_priv);
47 fe->tuner_priv = NULL;
48 return 0;
49}
50
51static int stb6000_sleep(struct dvb_frontend *fe) 44static int stb6000_sleep(struct dvb_frontend *fe)
52{ 45{
53 struct stb6000_priv *priv = fe->tuner_priv; 46 struct stb6000_priv *priv = fe->tuner_priv;
@@ -192,7 +185,7 @@ static const struct dvb_tuner_ops stb6000_tuner_ops = {
192 .frequency_min = 950000, 185 .frequency_min = 950000,
193 .frequency_max = 2150000 186 .frequency_max = 2150000
194 }, 187 },
195 .release = stb6000_release, 188 .release = dvb_tuner_simple_release,
196 .sleep = stb6000_sleep, 189 .sleep = stb6000_sleep,
197 .set_params = stb6000_set_params, 190 .set_params = stb6000_set_params,
198 .get_frequency = stb6000_get_frequency, 191 .get_frequency = stb6000_get_frequency,
diff --git a/drivers/media/dvb-frontends/stb6100.c b/drivers/media/dvb-frontends/stb6100.c
index 5add1182c3ca..befd26bdfa0f 100644
--- a/drivers/media/dvb-frontends/stb6100.c
+++ b/drivers/media/dvb-frontends/stb6100.c
@@ -61,8 +61,6 @@ struct stb6100_lkup {
61 u8 reg; 61 u8 reg;
62}; 62};
63 63
64static int stb6100_release(struct dvb_frontend *fe);
65
66static const struct stb6100_lkup lkup[] = { 64static const struct stb6100_lkup lkup[] = {
67 { 0, 950000, 0x0a }, 65 { 0, 950000, 0x0a },
68 { 950000, 1000000, 0x0a }, 66 { 950000, 1000000, 0x0a },
@@ -536,7 +534,7 @@ static const struct dvb_tuner_ops stb6100_ops = {
536 .set_params = stb6100_set_params, 534 .set_params = stb6100_set_params,
537 .get_frequency = stb6100_get_frequency, 535 .get_frequency = stb6100_get_frequency,
538 .get_bandwidth = stb6100_get_bandwidth, 536 .get_bandwidth = stb6100_get_bandwidth,
539 .release = stb6100_release 537 .release = dvb_tuner_simple_release
540}; 538};
541 539
542struct dvb_frontend *stb6100_attach(struct dvb_frontend *fe, 540struct dvb_frontend *stb6100_attach(struct dvb_frontend *fe,
@@ -560,16 +558,6 @@ struct dvb_frontend *stb6100_attach(struct dvb_frontend *fe,
560 return fe; 558 return fe;
561} 559}
562 560
563static int stb6100_release(struct dvb_frontend *fe)
564{
565 struct stb6100_state *state = fe->tuner_priv;
566
567 fe->tuner_priv = NULL;
568 kfree(state);
569
570 return 0;
571}
572
573EXPORT_SYMBOL(stb6100_attach); 561EXPORT_SYMBOL(stb6100_attach);
574MODULE_PARM_DESC(verbose, "Set Verbosity level"); 562MODULE_PARM_DESC(verbose, "Set Verbosity level");
575 563
diff --git a/drivers/media/dvb-frontends/stv6110.c b/drivers/media/dvb-frontends/stv6110.c
index 66a5a7f2295c..d9a88adc4c10 100644
--- a/drivers/media/dvb-frontends/stv6110.c
+++ b/drivers/media/dvb-frontends/stv6110.c
@@ -59,13 +59,6 @@ static s32 abssub(s32 a, s32 b)
59 return b - a; 59 return b - a;
60}; 60};
61 61
62static int stv6110_release(struct dvb_frontend *fe)
63{
64 kfree(fe->tuner_priv);
65 fe->tuner_priv = NULL;
66 return 0;
67}
68
69static int stv6110_write_regs(struct dvb_frontend *fe, u8 buf[], 62static int stv6110_write_regs(struct dvb_frontend *fe, u8 buf[],
70 int start, int len) 63 int start, int len)
71{ 64{
@@ -390,7 +383,7 @@ static const struct dvb_tuner_ops stv6110_tuner_ops = {
390 .frequency_step = 1000, 383 .frequency_step = 1000,
391 }, 384 },
392 .init = stv6110_init, 385 .init = stv6110_init,
393 .release = stv6110_release, 386 .release = dvb_tuner_simple_release,
394 .sleep = stv6110_sleep, 387 .sleep = stv6110_sleep,
395 .set_params = stv6110_set_params, 388 .set_params = stv6110_set_params,
396 .get_frequency = stv6110_get_frequency, 389 .get_frequency = stv6110_get_frequency,
diff --git a/drivers/media/dvb-frontends/stv6110x.c b/drivers/media/dvb-frontends/stv6110x.c
index c611ad210b5c..70d5641453c2 100644
--- a/drivers/media/dvb-frontends/stv6110x.c
+++ b/drivers/media/dvb-frontends/stv6110x.c
@@ -335,16 +335,6 @@ static int stv6110x_get_status(struct dvb_frontend *fe, u32 *status)
335} 335}
336 336
337 337
338static int stv6110x_release(struct dvb_frontend *fe)
339{
340 struct stv6110x_state *stv6110x = fe->tuner_priv;
341
342 fe->tuner_priv = NULL;
343 kfree(stv6110x);
344
345 return 0;
346}
347
348static const struct dvb_tuner_ops stv6110x_ops = { 338static const struct dvb_tuner_ops stv6110x_ops = {
349 .info = { 339 .info = {
350 .name = "STV6110(A) Silicon Tuner", 340 .name = "STV6110(A) Silicon Tuner",
@@ -352,7 +342,7 @@ static const struct dvb_tuner_ops stv6110x_ops = {
352 .frequency_max = 2150000, 342 .frequency_max = 2150000,
353 .frequency_step = 0, 343 .frequency_step = 0,
354 }, 344 },
355 .release = stv6110x_release 345 .release = dvb_tuner_simple_release,
356}; 346};
357 347
358static const struct stv6110x_devctl stv6110x_ctl = { 348static const struct stv6110x_devctl stv6110x_ctl = {
diff --git a/drivers/media/dvb-frontends/tda18271c2dd.c b/drivers/media/dvb-frontends/tda18271c2dd.c
index bc247f9b553a..a324f30f7224 100644
--- a/drivers/media/dvb-frontends/tda18271c2dd.c
+++ b/drivers/media/dvb-frontends/tda18271c2dd.c
@@ -1126,14 +1126,6 @@ static int init(struct dvb_frontend *fe)
1126 return 0; 1126 return 0;
1127} 1127}
1128 1128
1129static int release(struct dvb_frontend *fe)
1130{
1131 kfree(fe->tuner_priv);
1132 fe->tuner_priv = NULL;
1133 return 0;
1134}
1135
1136
1137static int set_params(struct dvb_frontend *fe) 1129static int set_params(struct dvb_frontend *fe)
1138{ 1130{
1139 struct tda_state *state = fe->tuner_priv; 1131 struct tda_state *state = fe->tuner_priv;
@@ -1227,7 +1219,7 @@ static const struct dvb_tuner_ops tuner_ops = {
1227 .init = init, 1219 .init = init,
1228 .sleep = sleep, 1220 .sleep = sleep,
1229 .set_params = set_params, 1221 .set_params = set_params,
1230 .release = release, 1222 .release = dvb_tuner_simple_release,
1231 .get_if_frequency = get_if_frequency, 1223 .get_if_frequency = get_if_frequency,
1232 .get_bandwidth = get_bandwidth, 1224 .get_bandwidth = get_bandwidth,
1233}; 1225};
diff --git a/drivers/media/dvb-frontends/tda665x.c b/drivers/media/dvb-frontends/tda665x.c
index 7ca965987f40..39a1eb23ad04 100644
--- a/drivers/media/dvb-frontends/tda665x.c
+++ b/drivers/media/dvb-frontends/tda665x.c
@@ -197,20 +197,11 @@ static int tda665x_set_params(struct dvb_frontend *fe)
197 return 0; 197 return 0;
198} 198}
199 199
200static int tda665x_release(struct dvb_frontend *fe)
201{
202 struct tda665x_state *state = fe->tuner_priv;
203
204 fe->tuner_priv = NULL;
205 kfree(state);
206 return 0;
207}
208
209static const struct dvb_tuner_ops tda665x_ops = { 200static const struct dvb_tuner_ops tda665x_ops = {
210 .get_status = tda665x_get_status, 201 .get_status = tda665x_get_status,
211 .set_params = tda665x_set_params, 202 .set_params = tda665x_set_params,
212 .get_frequency = tda665x_get_frequency, 203 .get_frequency = tda665x_get_frequency,
213 .release = tda665x_release 204 .release = dvb_tuner_simple_release,
214}; 205};
215 206
216struct dvb_frontend *tda665x_attach(struct dvb_frontend *fe, 207struct dvb_frontend *tda665x_attach(struct dvb_frontend *fe,
diff --git a/drivers/media/dvb-frontends/tda8261.c b/drivers/media/dvb-frontends/tda8261.c
index e0df93191b9e..65f729ff27a9 100644
--- a/drivers/media/dvb-frontends/tda8261.c
+++ b/drivers/media/dvb-frontends/tda8261.c
@@ -152,15 +152,6 @@ static int tda8261_set_params(struct dvb_frontend *fe)
152 return 0; 152 return 0;
153} 153}
154 154
155static int tda8261_release(struct dvb_frontend *fe)
156{
157 struct tda8261_state *state = fe->tuner_priv;
158
159 fe->tuner_priv = NULL;
160 kfree(state);
161 return 0;
162}
163
164static const struct dvb_tuner_ops tda8261_ops = { 155static const struct dvb_tuner_ops tda8261_ops = {
165 156
166 .info = { 157 .info = {
@@ -173,7 +164,7 @@ static const struct dvb_tuner_ops tda8261_ops = {
173 .set_params = tda8261_set_params, 164 .set_params = tda8261_set_params,
174 .get_frequency = tda8261_get_frequency, 165 .get_frequency = tda8261_get_frequency,
175 .get_status = tda8261_get_status, 166 .get_status = tda8261_get_status,
176 .release = tda8261_release 167 .release = dvb_tuner_simple_release,
177}; 168};
178 169
179struct dvb_frontend *tda8261_attach(struct dvb_frontend *fe, 170struct dvb_frontend *tda8261_attach(struct dvb_frontend *fe,
diff --git a/drivers/media/dvb-frontends/tda826x.c b/drivers/media/dvb-frontends/tda826x.c
index 2ec671df1441..bf8946c2c04a 100644
--- a/drivers/media/dvb-frontends/tda826x.c
+++ b/drivers/media/dvb-frontends/tda826x.c
@@ -41,13 +41,6 @@ struct tda826x_priv {
41 u32 frequency; 41 u32 frequency;
42}; 42};
43 43
44static int tda826x_release(struct dvb_frontend *fe)
45{
46 kfree(fe->tuner_priv);
47 fe->tuner_priv = NULL;
48 return 0;
49}
50
51static int tda826x_sleep(struct dvb_frontend *fe) 44static int tda826x_sleep(struct dvb_frontend *fe)
52{ 45{
53 struct tda826x_priv *priv = fe->tuner_priv; 46 struct tda826x_priv *priv = fe->tuner_priv;
@@ -135,7 +128,7 @@ static const struct dvb_tuner_ops tda826x_tuner_ops = {
135 .frequency_min = 950000, 128 .frequency_min = 950000,
136 .frequency_max = 2175000 129 .frequency_max = 2175000
137 }, 130 },
138 .release = tda826x_release, 131 .release = dvb_tuner_simple_release,
139 .sleep = tda826x_sleep, 132 .sleep = tda826x_sleep,
140 .set_params = tda826x_set_params, 133 .set_params = tda826x_set_params,
141 .get_frequency = tda826x_get_frequency, 134 .get_frequency = tda826x_get_frequency,
diff --git a/drivers/media/dvb-frontends/tua6100.c b/drivers/media/dvb-frontends/tua6100.c
index 6da12b9e55eb..9e9a8ad7f37c 100644
--- a/drivers/media/dvb-frontends/tua6100.c
+++ b/drivers/media/dvb-frontends/tua6100.c
@@ -42,13 +42,6 @@ struct tua6100_priv {
42 u32 frequency; 42 u32 frequency;
43}; 43};
44 44
45static int tua6100_release(struct dvb_frontend *fe)
46{
47 kfree(fe->tuner_priv);
48 fe->tuner_priv = NULL;
49 return 0;
50}
51
52static int tua6100_sleep(struct dvb_frontend *fe) 45static int tua6100_sleep(struct dvb_frontend *fe)
53{ 46{
54 struct tua6100_priv *priv = fe->tuner_priv; 47 struct tua6100_priv *priv = fe->tuner_priv;
@@ -164,7 +157,7 @@ static const struct dvb_tuner_ops tua6100_tuner_ops = {
164 .frequency_max = 2150000, 157 .frequency_max = 2150000,
165 .frequency_step = 1000, 158 .frequency_step = 1000,
166 }, 159 },
167 .release = tua6100_release, 160 .release = dvb_tuner_simple_release,
168 .sleep = tua6100_sleep, 161 .sleep = tua6100_sleep,
169 .set_params = tua6100_set_params, 162 .set_params = tua6100_set_params,
170 .get_frequency = tua6100_get_frequency, 163 .get_frequency = tua6100_get_frequency,
diff --git a/drivers/media/dvb-frontends/zl10036.c b/drivers/media/dvb-frontends/zl10036.c
index df5d0fe24687..0116557c0f10 100644
--- a/drivers/media/dvb-frontends/zl10036.c
+++ b/drivers/media/dvb-frontends/zl10036.c
@@ -134,16 +134,6 @@ static int zl10036_write(struct zl10036_state *state, u8 buf[], u8 count)
134 return 0; 134 return 0;
135} 135}
136 136
137static int zl10036_release(struct dvb_frontend *fe)
138{
139 struct zl10036_state *state = fe->tuner_priv;
140
141 fe->tuner_priv = NULL;
142 kfree(state);
143
144 return 0;
145}
146
147static int zl10036_sleep(struct dvb_frontend *fe) 137static int zl10036_sleep(struct dvb_frontend *fe)
148{ 138{
149 struct zl10036_state *state = fe->tuner_priv; 139 struct zl10036_state *state = fe->tuner_priv;
@@ -453,7 +443,7 @@ static const struct dvb_tuner_ops zl10036_tuner_ops = {
453 .frequency_max = 2175000 443 .frequency_max = 2175000
454 }, 444 },
455 .init = zl10036_init, 445 .init = zl10036_init,
456 .release = zl10036_release, 446 .release = dvb_tuner_simple_release,
457 .sleep = zl10036_sleep, 447 .sleep = zl10036_sleep,
458 .set_params = zl10036_set_params, 448 .set_params = zl10036_set_params,
459 .get_frequency = zl10036_get_frequency, 449 .get_frequency = zl10036_get_frequency,
diff --git a/drivers/media/tuners/fc0011.c b/drivers/media/tuners/fc0011.c
index 2dda8d993c14..5e9e2e694f98 100644
--- a/drivers/media/tuners/fc0011.c
+++ b/drivers/media/tuners/fc0011.c
@@ -112,14 +112,6 @@ static int fc0011_readreg(struct fc0011_priv *priv, u8 reg, u8 *val)
112 return 0; 112 return 0;
113} 113}
114 114
115static int fc0011_release(struct dvb_frontend *fe)
116{
117 kfree(fe->tuner_priv);
118 fe->tuner_priv = NULL;
119
120 return 0;
121}
122
123static int fc0011_init(struct dvb_frontend *fe) 115static int fc0011_init(struct dvb_frontend *fe)
124{ 116{
125 struct fc0011_priv *priv = fe->tuner_priv; 117 struct fc0011_priv *priv = fe->tuner_priv;
@@ -483,7 +475,7 @@ static const struct dvb_tuner_ops fc0011_tuner_ops = {
483 .frequency_max = 1000000000, 475 .frequency_max = 1000000000,
484 }, 476 },
485 477
486 .release = fc0011_release, 478 .release = dvb_tuner_simple_release,
487 .init = fc0011_init, 479 .init = fc0011_init,
488 480
489 .set_params = fc0011_set_params, 481 .set_params = fc0011_set_params,
diff --git a/drivers/media/tuners/fc0012.c b/drivers/media/tuners/fc0012.c
index d74e92056810..7faff84e5ea8 100644
--- a/drivers/media/tuners/fc0012.c
+++ b/drivers/media/tuners/fc0012.c
@@ -55,13 +55,6 @@ static int fc0012_readreg(struct fc0012_priv *priv, u8 reg, u8 *val)
55 return 0; 55 return 0;
56} 56}
57 57
58static int fc0012_release(struct dvb_frontend *fe)
59{
60 kfree(fe->tuner_priv);
61 fe->tuner_priv = NULL;
62 return 0;
63}
64
65static int fc0012_init(struct dvb_frontend *fe) 58static int fc0012_init(struct dvb_frontend *fe)
66{ 59{
67 struct fc0012_priv *priv = fe->tuner_priv; 60 struct fc0012_priv *priv = fe->tuner_priv;
@@ -427,7 +420,7 @@ static const struct dvb_tuner_ops fc0012_tuner_ops = {
427 .frequency_step = 0, 420 .frequency_step = 0,
428 }, 421 },
429 422
430 .release = fc0012_release, 423 .release = dvb_tuner_simple_release,
431 424
432 .init = fc0012_init, 425 .init = fc0012_init,
433 426
diff --git a/drivers/media/tuners/fc0013.c b/drivers/media/tuners/fc0013.c
index 522690d97b42..b068b9702cf7 100644
--- a/drivers/media/tuners/fc0013.c
+++ b/drivers/media/tuners/fc0013.c
@@ -52,13 +52,6 @@ static int fc0013_readreg(struct fc0013_priv *priv, u8 reg, u8 *val)
52 return 0; 52 return 0;
53} 53}
54 54
55static int fc0013_release(struct dvb_frontend *fe)
56{
57 kfree(fe->tuner_priv);
58 fe->tuner_priv = NULL;
59 return 0;
60}
61
62static int fc0013_init(struct dvb_frontend *fe) 55static int fc0013_init(struct dvb_frontend *fe)
63{ 56{
64 struct fc0013_priv *priv = fe->tuner_priv; 57 struct fc0013_priv *priv = fe->tuner_priv;
@@ -586,7 +579,7 @@ static const struct dvb_tuner_ops fc0013_tuner_ops = {
586 .frequency_step = 0, 579 .frequency_step = 0,
587 }, 580 },
588 581
589 .release = fc0013_release, 582 .release = dvb_tuner_simple_release,
590 583
591 .init = fc0013_init, 584 .init = fc0013_init,
592 .sleep = fc0013_sleep, 585 .sleep = fc0013_sleep,
diff --git a/drivers/media/tuners/mc44s803.c b/drivers/media/tuners/mc44s803.c
index d5681669d3cd..86542cbd73fb 100644
--- a/drivers/media/tuners/mc44s803.c
+++ b/drivers/media/tuners/mc44s803.c
@@ -80,16 +80,6 @@ static int mc44s803_readreg(struct mc44s803_priv *priv, u8 reg, u32 *val)
80 return 0; 80 return 0;
81} 81}
82 82
83static int mc44s803_release(struct dvb_frontend *fe)
84{
85 struct mc44s803_priv *priv = fe->tuner_priv;
86
87 fe->tuner_priv = NULL;
88 kfree(priv);
89
90 return 0;
91}
92
93static int mc44s803_init(struct dvb_frontend *fe) 83static int mc44s803_init(struct dvb_frontend *fe)
94{ 84{
95 struct mc44s803_priv *priv = fe->tuner_priv; 85 struct mc44s803_priv *priv = fe->tuner_priv;
@@ -312,7 +302,7 @@ static const struct dvb_tuner_ops mc44s803_tuner_ops = {
312 .frequency_step = 100000, 302 .frequency_step = 100000,
313 }, 303 },
314 304
315 .release = mc44s803_release, 305 .release = dvb_tuner_simple_release,
316 .init = mc44s803_init, 306 .init = mc44s803_init,
317 .set_params = mc44s803_set_params, 307 .set_params = mc44s803_set_params,
318 .get_frequency = mc44s803_get_frequency, 308 .get_frequency = mc44s803_get_frequency,
diff --git a/drivers/media/tuners/mt2060.c b/drivers/media/tuners/mt2060.c
index b87b2549d58d..14e7b64360cb 100644
--- a/drivers/media/tuners/mt2060.c
+++ b/drivers/media/tuners/mt2060.c
@@ -332,13 +332,6 @@ static int mt2060_sleep(struct dvb_frontend *fe)
332 return ret; 332 return ret;
333} 333}
334 334
335static int mt2060_release(struct dvb_frontend *fe)
336{
337 kfree(fe->tuner_priv);
338 fe->tuner_priv = NULL;
339 return 0;
340}
341
342static const struct dvb_tuner_ops mt2060_tuner_ops = { 335static const struct dvb_tuner_ops mt2060_tuner_ops = {
343 .info = { 336 .info = {
344 .name = "Microtune MT2060", 337 .name = "Microtune MT2060",
@@ -347,7 +340,7 @@ static const struct dvb_tuner_ops mt2060_tuner_ops = {
347 .frequency_step = 50000, 340 .frequency_step = 50000,
348 }, 341 },
349 342
350 .release = mt2060_release, 343 .release = dvb_tuner_simple_release,
351 344
352 .init = mt2060_init, 345 .init = mt2060_init,
353 .sleep = mt2060_sleep, 346 .sleep = mt2060_sleep,
diff --git a/drivers/media/tuners/mt20xx.c b/drivers/media/tuners/mt20xx.c
index 29dadd171b31..4237d8f15919 100644
--- a/drivers/media/tuners/mt20xx.c
+++ b/drivers/media/tuners/mt20xx.c
@@ -49,14 +49,6 @@ struct microtune_priv {
49 u32 frequency; 49 u32 frequency;
50}; 50};
51 51
52static int microtune_release(struct dvb_frontend *fe)
53{
54 kfree(fe->tuner_priv);
55 fe->tuner_priv = NULL;
56
57 return 0;
58}
59
60static int microtune_get_frequency(struct dvb_frontend *fe, u32 *frequency) 52static int microtune_get_frequency(struct dvb_frontend *fe, u32 *frequency)
61{ 53{
62 struct microtune_priv *priv = fe->tuner_priv; 54 struct microtune_priv *priv = fe->tuner_priv;
@@ -365,7 +357,7 @@ static int mt2032_set_params(struct dvb_frontend *fe,
365 357
366static const struct dvb_tuner_ops mt2032_tuner_ops = { 358static const struct dvb_tuner_ops mt2032_tuner_ops = {
367 .set_analog_params = mt2032_set_params, 359 .set_analog_params = mt2032_set_params,
368 .release = microtune_release, 360 .release = dvb_tuner_simple_release,
369 .get_frequency = microtune_get_frequency, 361 .get_frequency = microtune_get_frequency,
370}; 362};
371 363
@@ -560,7 +552,7 @@ static int mt2050_set_params(struct dvb_frontend *fe,
560 552
561static const struct dvb_tuner_ops mt2050_tuner_ops = { 553static const struct dvb_tuner_ops mt2050_tuner_ops = {
562 .set_analog_params = mt2050_set_params, 554 .set_analog_params = mt2050_set_params,
563 .release = microtune_release, 555 .release = dvb_tuner_simple_release,
564 .get_frequency = microtune_get_frequency, 556 .get_frequency = microtune_get_frequency,
565}; 557};
566 558
diff --git a/drivers/media/tuners/mt2266.c b/drivers/media/tuners/mt2266.c
index bca4d75e42d4..35ea5e7975ac 100644
--- a/drivers/media/tuners/mt2266.c
+++ b/drivers/media/tuners/mt2266.c
@@ -296,13 +296,6 @@ static int mt2266_sleep(struct dvb_frontend *fe)
296 return 0; 296 return 0;
297} 297}
298 298
299static int mt2266_release(struct dvb_frontend *fe)
300{
301 kfree(fe->tuner_priv);
302 fe->tuner_priv = NULL;
303 return 0;
304}
305
306static const struct dvb_tuner_ops mt2266_tuner_ops = { 299static const struct dvb_tuner_ops mt2266_tuner_ops = {
307 .info = { 300 .info = {
308 .name = "Microtune MT2266", 301 .name = "Microtune MT2266",
@@ -310,7 +303,7 @@ static const struct dvb_tuner_ops mt2266_tuner_ops = {
310 .frequency_max = 862000000, 303 .frequency_max = 862000000,
311 .frequency_step = 50000, 304 .frequency_step = 50000,
312 }, 305 },
313 .release = mt2266_release, 306 .release = dvb_tuner_simple_release,
314 .init = mt2266_init, 307 .init = mt2266_init,
315 .sleep = mt2266_sleep, 308 .sleep = mt2266_sleep,
316 .set_params = mt2266_set_params, 309 .set_params = mt2266_set_params,
diff --git a/drivers/media/tuners/qt1010.c b/drivers/media/tuners/qt1010.c
index ae8cbece6d2b..5a1662aeeb87 100644
--- a/drivers/media/tuners/qt1010.c
+++ b/drivers/media/tuners/qt1010.c
@@ -377,13 +377,6 @@ static int qt1010_init(struct dvb_frontend *fe)
377 return qt1010_set_params(fe); 377 return qt1010_set_params(fe);
378} 378}
379 379
380static int qt1010_release(struct dvb_frontend *fe)
381{
382 kfree(fe->tuner_priv);
383 fe->tuner_priv = NULL;
384 return 0;
385}
386
387static int qt1010_get_frequency(struct dvb_frontend *fe, u32 *frequency) 380static int qt1010_get_frequency(struct dvb_frontend *fe, u32 *frequency)
388{ 381{
389 struct qt1010_priv *priv = fe->tuner_priv; 382 struct qt1010_priv *priv = fe->tuner_priv;
@@ -405,7 +398,7 @@ static const struct dvb_tuner_ops qt1010_tuner_ops = {
405 .frequency_step = QT1010_STEP, 398 .frequency_step = QT1010_STEP,
406 }, 399 },
407 400
408 .release = qt1010_release, 401 .release = dvb_tuner_simple_release,
409 .init = qt1010_init, 402 .init = qt1010_init,
410 /* TODO: implement sleep */ 403 /* TODO: implement sleep */
411 404
diff --git a/drivers/media/tuners/tda18218.c b/drivers/media/tuners/tda18218.c
index 9300e9361e3b..4d2916fb9953 100644
--- a/drivers/media/tuners/tda18218.c
+++ b/drivers/media/tuners/tda18218.c
@@ -265,13 +265,6 @@ static int tda18218_init(struct dvb_frontend *fe)
265 return ret; 265 return ret;
266} 266}
267 267
268static int tda18218_release(struct dvb_frontend *fe)
269{
270 kfree(fe->tuner_priv);
271 fe->tuner_priv = NULL;
272 return 0;
273}
274
275static const struct dvb_tuner_ops tda18218_tuner_ops = { 268static const struct dvb_tuner_ops tda18218_tuner_ops = {
276 .info = { 269 .info = {
277 .name = "NXP TDA18218", 270 .name = "NXP TDA18218",
@@ -281,7 +274,7 @@ static const struct dvb_tuner_ops tda18218_tuner_ops = {
281 .frequency_step = 1000, 274 .frequency_step = 1000,
282 }, 275 },
283 276
284 .release = tda18218_release, 277 .release = dvb_tuner_simple_release,
285 .init = tda18218_init, 278 .init = tda18218_init,
286 .sleep = tda18218_sleep, 279 .sleep = tda18218_sleep,
287 280
diff --git a/drivers/media/tuners/tda827x.c b/drivers/media/tuners/tda827x.c
index 5050ce9be423..4befb81f0c1a 100644
--- a/drivers/media/tuners/tda827x.c
+++ b/drivers/media/tuners/tda827x.c
@@ -767,13 +767,6 @@ static void tda827xa_agcf(struct dvb_frontend *fe)
767 767
768/* ------------------------------------------------------------------ */ 768/* ------------------------------------------------------------------ */
769 769
770static int tda827x_release(struct dvb_frontend *fe)
771{
772 kfree(fe->tuner_priv);
773 fe->tuner_priv = NULL;
774 return 0;
775}
776
777static int tda827x_get_frequency(struct dvb_frontend *fe, u32 *frequency) 770static int tda827x_get_frequency(struct dvb_frontend *fe, u32 *frequency)
778{ 771{
779 struct tda827x_priv *priv = fe->tuner_priv; 772 struct tda827x_priv *priv = fe->tuner_priv;
@@ -825,7 +818,7 @@ static const struct dvb_tuner_ops tda827xo_tuner_ops = {
825 .frequency_max = 860000000, 818 .frequency_max = 860000000,
826 .frequency_step = 250000 819 .frequency_step = 250000
827 }, 820 },
828 .release = tda827x_release, 821 .release = dvb_tuner_simple_release,
829 .init = tda827x_initial_init, 822 .init = tda827x_initial_init,
830 .sleep = tda827x_initial_sleep, 823 .sleep = tda827x_initial_sleep,
831 .set_params = tda827xo_set_params, 824 .set_params = tda827xo_set_params,
@@ -841,7 +834,7 @@ static const struct dvb_tuner_ops tda827xa_tuner_ops = {
841 .frequency_max = 906000000, 834 .frequency_max = 906000000,
842 .frequency_step = 62500 835 .frequency_step = 62500
843 }, 836 },
844 .release = tda827x_release, 837 .release = dvb_tuner_simple_release,
845 .init = tda827x_init, 838 .init = tda827x_init,
846 .sleep = tda827xa_sleep, 839 .sleep = tda827xa_sleep,
847 .set_params = tda827xa_set_params, 840 .set_params = tda827xa_set_params,
diff --git a/drivers/media/tuners/tea5761.c b/drivers/media/tuners/tea5761.c
index 12347aa95de3..82f25621d995 100644
--- a/drivers/media/tuners/tea5761.c
+++ b/drivers/media/tuners/tea5761.c
@@ -284,14 +284,6 @@ int tea5761_autodetection(struct i2c_adapter* i2c_adap, u8 i2c_addr)
284 return 0; 284 return 0;
285} 285}
286 286
287static int tea5761_release(struct dvb_frontend *fe)
288{
289 kfree(fe->tuner_priv);
290 fe->tuner_priv = NULL;
291
292 return 0;
293}
294
295static int tea5761_get_frequency(struct dvb_frontend *fe, u32 *frequency) 287static int tea5761_get_frequency(struct dvb_frontend *fe, u32 *frequency)
296{ 288{
297 struct tea5761_priv *priv = fe->tuner_priv; 289 struct tea5761_priv *priv = fe->tuner_priv;
@@ -305,7 +297,7 @@ static const struct dvb_tuner_ops tea5761_tuner_ops = {
305 }, 297 },
306 .set_analog_params = set_radio_freq, 298 .set_analog_params = set_radio_freq,
307 .sleep = set_radio_sleep, 299 .sleep = set_radio_sleep,
308 .release = tea5761_release, 300 .release = dvb_tuner_simple_release,
309 .get_frequency = tea5761_get_frequency, 301 .get_frequency = tea5761_get_frequency,
310 .get_status = tea5761_get_status, 302 .get_status = tea5761_get_status,
311 .get_rf_strength = tea5761_get_rf_strength, 303 .get_rf_strength = tea5761_get_rf_strength,
diff --git a/drivers/media/tuners/tea5767.c b/drivers/media/tuners/tea5767.c
index d62a6d6b1f42..a33c97de8b8a 100644
--- a/drivers/media/tuners/tea5767.c
+++ b/drivers/media/tuners/tea5767.c
@@ -401,14 +401,6 @@ int tea5767_autodetection(struct i2c_adapter* i2c_adap, u8 i2c_addr)
401 return 0; 401 return 0;
402} 402}
403 403
404static int tea5767_release(struct dvb_frontend *fe)
405{
406 kfree(fe->tuner_priv);
407 fe->tuner_priv = NULL;
408
409 return 0;
410}
411
412static int tea5767_get_frequency(struct dvb_frontend *fe, u32 *frequency) 404static int tea5767_get_frequency(struct dvb_frontend *fe, u32 *frequency)
413{ 405{
414 struct tea5767_priv *priv = fe->tuner_priv; 406 struct tea5767_priv *priv = fe->tuner_priv;
@@ -434,7 +426,7 @@ static const struct dvb_tuner_ops tea5767_tuner_ops = {
434 .set_analog_params = set_radio_freq, 426 .set_analog_params = set_radio_freq,
435 .set_config = tea5767_set_config, 427 .set_config = tea5767_set_config,
436 .sleep = tea5767_standby, 428 .sleep = tea5767_standby,
437 .release = tea5767_release, 429 .release = dvb_tuner_simple_release,
438 .get_frequency = tea5767_get_frequency, 430 .get_frequency = tea5767_get_frequency,
439 .get_status = tea5767_get_status, 431 .get_status = tea5767_get_status,
440 .get_rf_strength = tea5767_get_rf_strength, 432 .get_rf_strength = tea5767_get_rf_strength,