* [bug-report] unconditionally calling cxd2820r_get_tuner_i2c_adapter() from em28xx-dvb.c creates a hard module dependency
@ 2011-06-01 9:45 Bjørn Mork
2011-06-01 9:49 ` Antti Palosaari
0 siblings, 1 reply; 9+ messages in thread
From: Bjørn Mork @ 2011-06-01 9:45 UTC (permalink / raw)
To: Antti Palosaari; +Cc: Steve Kerrison, linux-media
Hello,
I noticed this warning
WARNING: "cxd2820r_get_tuner_i2c_adapter" [/usr/local/src/git/linux-2.6/drivers/media/video/em28xx/em28xx-dvb.ko] undefined!
while building the driver in 2.6.32 with backported 290e support. This
warning does not appear with 3.0.0-rc1, but the call still does cause a
hard dependency on cxd2820r even if you build with CONFIG_MEDIA_ATTACH=y:
bjorn@canardo:/usr/local/src/git/linux-2.6$ modinfo drivers/media/video/em28xx/em28xx-dvb.ko
filename: drivers/media/video/em28xx/em28xx-dvb.ko
license: GPL
author: Mauro Carvalho Chehab <mchehab@infradead.org>
description: driver for em28xx based DVB cards
depends: cxd2820r,dvb-core,em28xx,usbcore
vermagic: 3.0.0-rc1+ SMP mod_unload modversions
parm: debug:enable debug messages [dvb] (int)
parm: adapter_nr:DVB adapter numbers (array of short)
I assume this is unwanted. As you can see, cxd2820r is the only
frontend dependency....
Don't know the proper fix. My naïve quick-fix was just to move struct
cxd2820r_priv into cxd2820r.h and making the function static inlined.
However, I do see that you may not want the struct in cxd2820r.h. But I
trust that you have a brilliant solution to the problem :-)
Thanks for your great work on the cxd2820r driver and nanostick T2 290e
support!
Bjørn
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [bug-report] unconditionally calling cxd2820r_get_tuner_i2c_adapter() from em28xx-dvb.c creates a hard module dependency
2011-06-01 9:45 [bug-report] unconditionally calling cxd2820r_get_tuner_i2c_adapter() from em28xx-dvb.c creates a hard module dependency Bjørn Mork
@ 2011-06-01 9:49 ` Antti Palosaari
2011-06-01 10:31 ` Bjørn Mork
2011-06-01 10:53 ` Bjørn Mork
0 siblings, 2 replies; 9+ messages in thread
From: Antti Palosaari @ 2011-06-01 9:49 UTC (permalink / raw)
To: Bjørn Mork; +Cc: Steve Kerrison, linux-media
On 06/01/2011 12:45 PM, Bjørn Mork wrote:
> Don't know the proper fix. My naïve quick-fix was just to move struct
> cxd2820r_priv into cxd2820r.h and making the function static inlined.
> However, I do see that you may not want the struct in cxd2820r.h. But I
> trust that you have a brilliant solution to the problem :-)
Actually I don't have any idea about that. Help is welcome.
regards
Antti
--
http://palosaari.fi/
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [bug-report] unconditionally calling cxd2820r_get_tuner_i2c_adapter() from em28xx-dvb.c creates a hard module dependency
2011-06-01 9:49 ` Antti Palosaari
@ 2011-06-01 10:31 ` Bjørn Mork
2011-06-01 10:53 ` Bjørn Mork
1 sibling, 0 replies; 9+ messages in thread
From: Bjørn Mork @ 2011-06-01 10:31 UTC (permalink / raw)
To: linux-media
[-- Attachment #1: Type: text/plain, Size: 921 bytes --]
Antti Palosaari <crope@iki.fi> writes:
> On 06/01/2011 12:45 PM, Bjørn Mork wrote:
>> Don't know the proper fix. My naïve quick-fix was just to move struct
>> cxd2820r_priv into cxd2820r.h and making the function static inlined.
>> However, I do see that you may not want the struct in cxd2820r.h. But I
>> trust that you have a brilliant solution to the problem :-)
>
> Actually I don't have any idea about that. Help is welcome.
Well, my straight forward approach is attached if you find that useful.
I removed the whole function call, since it was only ever called from
one place. But that is your call.
I assume the fancy solution involves symbol trickery ala what
dvb_attach() does. You do of course know that the symbol is available
at the point where em28xx-dvb calls it, as the cxd2820r_attach() must
have succeeded. So "all" you need to do is to prevent the module tools
from being too smart.
Bjørn
[-- Attachment #2: 0001-em28xx-dvb-avoid-unwanted-dependency-on-cxd2820r.patch --]
[-- Type: text/x-diff, Size: 4469 bytes --]
>From 857331b809fca1003056dbc0f01f917e792981db Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
Date: Tue, 31 May 2011 15:16:39 +0200
Subject: [PATCH] em28xx-dvb: avoid unwanted dependency on cxd2820r
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Calling cxd2820r_get_tuner_i2c_adapter() creates a dependency on cxd2820r
even if CONFIG_MEDIA_ATTACH is set. Avoid this
Signed-off-by: Bjørn Mork <bjorn@mork.no>
---
drivers/media/dvb/frontends/cxd2820r.h | 27 +++++++++++++++++----------
drivers/media/dvb/frontends/cxd2820r_core.c | 7 -------
drivers/media/dvb/frontends/cxd2820r_priv.h | 18 ------------------
drivers/media/video/em28xx/em28xx-dvb.c | 4 ++--
4 files changed, 19 insertions(+), 37 deletions(-)
diff --git a/drivers/media/dvb/frontends/cxd2820r.h b/drivers/media/dvb/frontends/cxd2820r.h
index ad17845..e0eeea8 100644
--- a/drivers/media/dvb/frontends/cxd2820r.h
+++ b/drivers/media/dvb/frontends/cxd2820r.h
@@ -85,6 +85,23 @@ struct cxd2820r_config {
u8 gpio_dvbc[3];
};
+struct cxd2820r_priv {
+ struct i2c_adapter *i2c;
+ struct dvb_frontend fe[2];
+ struct cxd2820r_config cfg;
+ struct i2c_adapter tuner_i2c_adapter;
+
+ struct mutex fe_lock; /* FE lock */
+ int active_fe:2; /* FE lock, -1=NONE, 0=DVB-T/T2, 1=DVB-C */
+
+ int ber_running:1;
+
+ u8 bank[2];
+ u8 gpio[3];
+
+ fe_delivery_system_t delivery_system;
+ int last_tune_failed:1; /* for switch between T and T2 tune */
+};
#if defined(CONFIG_DVB_CXD2820R) || \
(defined(CONFIG_DVB_CXD2820R_MODULE) && defined(MODULE))
@@ -93,9 +110,6 @@ extern struct dvb_frontend *cxd2820r_attach(
struct i2c_adapter *i2c,
struct dvb_frontend *fe
);
-extern struct i2c_adapter *cxd2820r_get_tuner_i2c_adapter(
- struct dvb_frontend *fe
-);
#else
static inline struct dvb_frontend *cxd2820r_attach(
const struct cxd2820r_config *config,
@@ -106,13 +120,6 @@ static inline struct dvb_frontend *cxd2820r_attach(
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
return NULL;
}
-static inline struct i2c_adapter *cxd2820r_get_tuner_i2c_adapter(
- struct dvb_frontend *fe
-)
-{
- return NULL;
-}
-
#endif
#endif /* CXD2820R_H */
diff --git a/drivers/media/dvb/frontends/cxd2820r_core.c b/drivers/media/dvb/frontends/cxd2820r_core.c
index 0779f69..48e0265 100644
--- a/drivers/media/dvb/frontends/cxd2820r_core.c
+++ b/drivers/media/dvb/frontends/cxd2820r_core.c
@@ -771,13 +771,6 @@ static struct i2c_algorithm cxd2820r_tuner_i2c_algo = {
.functionality = cxd2820r_tuner_i2c_func,
};
-struct i2c_adapter *cxd2820r_get_tuner_i2c_adapter(struct dvb_frontend *fe)
-{
- struct cxd2820r_priv *priv = fe->demodulator_priv;
- return &priv->tuner_i2c_adapter;
-}
-EXPORT_SYMBOL(cxd2820r_get_tuner_i2c_adapter);
-
static struct dvb_frontend_ops cxd2820r_ops[2];
struct dvb_frontend *cxd2820r_attach(const struct cxd2820r_config *cfg,
diff --git a/drivers/media/dvb/frontends/cxd2820r_priv.h b/drivers/media/dvb/frontends/cxd2820r_priv.h
index 25adbee..5adeccd 100644
--- a/drivers/media/dvb/frontends/cxd2820r_priv.h
+++ b/drivers/media/dvb/frontends/cxd2820r_priv.h
@@ -46,24 +46,6 @@ struct reg_val_mask {
u8 mask;
};
-struct cxd2820r_priv {
- struct i2c_adapter *i2c;
- struct dvb_frontend fe[2];
- struct cxd2820r_config cfg;
- struct i2c_adapter tuner_i2c_adapter;
-
- struct mutex fe_lock; /* FE lock */
- int active_fe:2; /* FE lock, -1=NONE, 0=DVB-T/T2, 1=DVB-C */
-
- int ber_running:1;
-
- u8 bank[2];
- u8 gpio[3];
-
- fe_delivery_system_t delivery_system;
- int last_tune_failed:1; /* for switch between T and T2 tune */
-};
-
/* cxd2820r_core.c */
extern int cxd2820r_debug;
diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c
index 7904ca4..e723c61 100644
--- a/drivers/media/video/em28xx/em28xx-dvb.c
+++ b/drivers/media/video/em28xx/em28xx-dvb.c
@@ -668,8 +668,8 @@ static int dvb_init(struct em28xx *dev)
dvb->fe[0] = dvb_attach(cxd2820r_attach,
&em28xx_cxd2820r_config, &dev->i2c_adap, NULL);
if (dvb->fe[0]) {
- struct i2c_adapter *i2c_tuner;
- i2c_tuner = cxd2820r_get_tuner_i2c_adapter(dvb->fe[0]);
+ struct cxd2820r_priv *priv = dvb->fe[0]->demodulator_priv;
+ struct i2c_adapter *i2c_tuner = &priv->tuner_i2c_adapter;
/* FE 0 attach tuner */
if (!dvb_attach(tda18271_attach, dvb->fe[0], 0x60,
i2c_tuner, &em28xx_cxd2820r_tda18271_config)) {
--
1.7.2.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [bug-report] unconditionally calling cxd2820r_get_tuner_i2c_adapter() from em28xx-dvb.c creates a hard module dependency
2011-06-01 9:49 ` Antti Palosaari
2011-06-01 10:31 ` Bjørn Mork
@ 2011-06-01 10:53 ` Bjørn Mork
2011-06-01 17:18 ` Bjørn Mork
1 sibling, 1 reply; 9+ messages in thread
From: Bjørn Mork @ 2011-06-01 10:53 UTC (permalink / raw)
To: Antti Palosaari; +Cc: Steve Kerrison, linux-media
[-- Attachment #1: Type: text/plain, Size: 238 bytes --]
Another possible solution... This is my last one, I promise :-)
I looked at dvb_attach() and realized that you can ab^H^Hreuse it. This
makes the patch tiny, and allow you to continue hiding
struct cxd2820r_priv.
Bjørn
[-- Attachment #2: 0001-em28xx-dvb-Use-dvb_attach-to-call-cxd2820r_get_tuner.patch --]
[-- Type: text/x-diff, Size: 1461 bytes --]
>From b570bbad12c1d164ed92c6711a1775db29c4c0a7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
Date: Wed, 1 Jun 2011 12:48:25 +0200
Subject: [PATCH] em28xx-dvb: Use dvb_attach to call cxd2820r_get_tuner_i2c_adapter()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This avoids a hard module dependency on cxd2820r. Even though we
don't really attach anything in this call, we can stil reuse
dvb_attach since the called function is expected to return a
pointer.
Signed-off-by: Bjørn Mork <bjorn@mork.no>
---
drivers/media/video/em28xx/em28xx-dvb.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c
index 7904ca4..d994592 100644
--- a/drivers/media/video/em28xx/em28xx-dvb.c
+++ b/drivers/media/video/em28xx/em28xx-dvb.c
@@ -669,7 +669,8 @@ static int dvb_init(struct em28xx *dev)
&em28xx_cxd2820r_config, &dev->i2c_adap, NULL);
if (dvb->fe[0]) {
struct i2c_adapter *i2c_tuner;
- i2c_tuner = cxd2820r_get_tuner_i2c_adapter(dvb->fe[0]);
+ /* we don't really attach i2c_tuner. Just reusing the symbol logic */
+ i2c_tuner = dvb_attach(cxd2820r_get_tuner_i2c_adapter, dvb->fe[0]);
/* FE 0 attach tuner */
if (!dvb_attach(tda18271_attach, dvb->fe[0], 0x60,
i2c_tuner, &em28xx_cxd2820r_tda18271_config)) {
--
1.7.2.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [bug-report] unconditionally calling cxd2820r_get_tuner_i2c_adapter() from em28xx-dvb.c creates a hard module dependency
2011-06-01 10:53 ` Bjørn Mork
@ 2011-06-01 17:18 ` Bjørn Mork
2011-06-03 12:21 ` Antti Palosaari
0 siblings, 1 reply; 9+ messages in thread
From: Bjørn Mork @ 2011-06-01 17:18 UTC (permalink / raw)
To: Antti Palosaari; +Cc: Steve Kerrison, linux-media
Bjørn Mork <bjorn@mork.no> writes:
> diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c
> index 7904ca4..d994592 100644
> --- a/drivers/media/video/em28xx/em28xx-dvb.c
> +++ b/drivers/media/video/em28xx/em28xx-dvb.c
> @@ -669,7 +669,8 @@ static int dvb_init(struct em28xx *dev)
> &em28xx_cxd2820r_config, &dev->i2c_adap, NULL);
> if (dvb->fe[0]) {
> struct i2c_adapter *i2c_tuner;
> - i2c_tuner = cxd2820r_get_tuner_i2c_adapter(dvb->fe[0]);
> + /* we don't really attach i2c_tuner. Just reusing the symbol logic */
> + i2c_tuner = dvb_attach(cxd2820r_get_tuner_i2c_adapter, dvb->fe[0]);
Except that this really messes up the reference count, and need to have
a matching symbol_put... So you should probably code it with
symbol_request()/symbol_put() if you want to go this way instead of
the dvb_attach shortcut .
Bjørn
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [bug-report] unconditionally calling cxd2820r_get_tuner_i2c_adapter() from em28xx-dvb.c creates a hard module dependency
2011-06-01 17:18 ` Bjørn Mork
@ 2011-06-03 12:21 ` Antti Palosaari
2011-06-03 12:50 ` Bjørn Mork
0 siblings, 1 reply; 9+ messages in thread
From: Antti Palosaari @ 2011-06-03 12:21 UTC (permalink / raw)
To: Bjørn Mork; +Cc: Steve Kerrison, linux-media
On 06/01/2011 08:18 PM, Bjørn Mork wrote:
> Bjørn Mork<bjorn@mork.no> writes:
>
>> diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c
>> index 7904ca4..d994592 100644
>> --- a/drivers/media/video/em28xx/em28xx-dvb.c
>> +++ b/drivers/media/video/em28xx/em28xx-dvb.c
>> @@ -669,7 +669,8 @@ static int dvb_init(struct em28xx *dev)
>> &em28xx_cxd2820r_config,&dev->i2c_adap, NULL);
>> if (dvb->fe[0]) {
>> struct i2c_adapter *i2c_tuner;
>> - i2c_tuner = cxd2820r_get_tuner_i2c_adapter(dvb->fe[0]);
>> + /* we don't really attach i2c_tuner. Just reusing the symbol logic */
>> + i2c_tuner = dvb_attach(cxd2820r_get_tuner_i2c_adapter, dvb->fe[0]);
>
> Except that this really messes up the reference count, and need to have
> a matching symbol_put... So you should probably code it with
> symbol_request()/symbol_put() if you want to go this way instead of
> the dvb_attach shortcut .
There is some other FEs having also I2C adapter, I wonder how those
handle this situation. I looked example from cx24123 and s5h1420
drivers, both used by flexcop.
Did you see what is magic used those devices?
best regards,
Antti
--
http://palosaari.fi/
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [bug-report] unconditionally calling cxd2820r_get_tuner_i2c_adapter() from em28xx-dvb.c creates a hard module dependency
2011-06-03 12:21 ` Antti Palosaari
@ 2011-06-03 12:50 ` Bjørn Mork
2011-06-03 12:59 ` Antti Palosaari
0 siblings, 1 reply; 9+ messages in thread
From: Bjørn Mork @ 2011-06-03 12:50 UTC (permalink / raw)
To: Antti Palosaari; +Cc: Steve Kerrison, linux-media
Antti Palosaari <crope@iki.fi> writes:
> There is some other FEs having also I2C adapter, I wonder how those
> handle this situation. I looked example from cx24123 and s5h1420
> drivers, both used by flexcop.
>
> Did you see what is magic used those devices?
None. They have the same problem, creating hard module dependencies
even if they use dvb_attach() and CONFIG_MEDIA_ATTACH is set:
bjorn@canardo:~$ modinfo b2c2-flexcop
filename: /lib/modules/2.6.32-5-amd64/kernel/drivers/media/dvb/b2c2/b2c2-flexcop.ko
license: GPL
description: B2C2 FlexcopII/II(b)/III digital TV receiver chip
author: Patrick Boettcher <patrick.boettcher@desy.de
depends: s5h1420,dvb-core,cx24113,cx24123,i2c-core
vermagic: 2.6.32-5-amd64 SMP mod_unload modversions
parm: debug:set debug level (1=info,2=tuner,4=i2c,8=ts,16=sram,32=reg (|-able)). (debugging is not enabled) (int)
parm: adapter_nr:DVB adapter numbers (array of short)
This probably means that a generic i2c_tuner wrapper, similar to
dvb_attach, would be useful.
Bjørn
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [bug-report] unconditionally calling cxd2820r_get_tuner_i2c_adapter() from em28xx-dvb.c creates a hard module dependency
2011-06-03 12:50 ` Bjørn Mork
@ 2011-06-03 12:59 ` Antti Palosaari
2011-06-03 13:20 ` Bjørn Mork
0 siblings, 1 reply; 9+ messages in thread
From: Antti Palosaari @ 2011-06-03 12:59 UTC (permalink / raw)
To: Bjørn Mork; +Cc: Steve Kerrison, linux-media
On 06/03/2011 03:50 PM, Bjørn Mork wrote:
> Antti Palosaari<crope@iki.fi> writes:
>
>> There is some other FEs having also I2C adapter, I wonder how those
>> handle this situation. I looked example from cx24123 and s5h1420
>> drivers, both used by flexcop.
>>
>> Did you see what is magic used those devices?
>
> None. They have the same problem, creating hard module dependencies
> even if they use dvb_attach() and CONFIG_MEDIA_ATTACH is set:
>
> bjorn@canardo:~$ modinfo b2c2-flexcop
> filename: /lib/modules/2.6.32-5-amd64/kernel/drivers/media/dvb/b2c2/b2c2-flexcop.ko
> license: GPL
> description: B2C2 FlexcopII/II(b)/III digital TV receiver chip
> author: Patrick Boettcher<patrick.boettcher@desy.de
> depends: s5h1420,dvb-core,cx24113,cx24123,i2c-core
> vermagic: 2.6.32-5-amd64 SMP mod_unload modversions
> parm: debug:set debug level (1=info,2=tuner,4=i2c,8=ts,16=sram,32=reg (|-able)). (debugging is not enabled) (int)
> parm: adapter_nr:DVB adapter numbers (array of short)
>
>
>
> This probably means that a generic i2c_tuner wrapper, similar to
> dvb_attach, would be useful.
For the cxd2820r it is also possible to return I2C adapter as pointer
from dvb_attach like pointer to FE0 is carried for FE1 dvb_attach. What
you think about that?
regards,
Antti
--
http://palosaari.fi/
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [bug-report] unconditionally calling cxd2820r_get_tuner_i2c_adapter() from em28xx-dvb.c creates a hard module dependency
2011-06-03 12:59 ` Antti Palosaari
@ 2011-06-03 13:20 ` Bjørn Mork
0 siblings, 0 replies; 9+ messages in thread
From: Bjørn Mork @ 2011-06-03 13:20 UTC (permalink / raw)
To: Antti Palosaari; +Cc: Steve Kerrison, linux-media
Antti Palosaari <crope@iki.fi> writes:
> On 06/03/2011 03:50 PM, Bjørn Mork wrote:
>
>> This probably means that a generic i2c_tuner wrapper, similar to
>> dvb_attach, would be useful.
>
> For the cxd2820r it is also possible to return I2C adapter as pointer
> from dvb_attach like pointer to FE0 is carried for FE1
> dvb_attach. What you think about that?
I don't feel competent to answer that at all. It does seem like
overloading an existing interface, but it might be OK.
I just grepped a bit around for EXPORT_SYMBOL of anything except
foo_attach, and found that there are a few frontend drivers which
exports multiple symbols:
bjorn@canardo:/usr/local/src/git/linux-2.6$ grep EXPORT_SYMBOL drivers/media/dvb/frontends/*.c|grep -v _attach
drivers/media/dvb/frontends/cx24113.c:EXPORT_SYMBOL(cx24113_agc_callback);
drivers/media/dvb/frontends/cx24123.c:EXPORT_SYMBOL(cx24123_get_tuner_i2c_adapter);
drivers/media/dvb/frontends/cxd2820r_core.c:EXPORT_SYMBOL(cxd2820r_get_tuner_i2c_adapter);
drivers/media/dvb/frontends/dib0070.c:EXPORT_SYMBOL(dib0070_ctrl_agc_filter);
drivers/media/dvb/frontends/dib0070.c:EXPORT_SYMBOL(dib0070_get_rf_output);
drivers/media/dvb/frontends/dib0070.c:EXPORT_SYMBOL(dib0070_set_rf_output);
drivers/media/dvb/frontends/dib0070.c:EXPORT_SYMBOL(dib0070_wbd_offset);
drivers/media/dvb/frontends/dib0090.c:EXPORT_SYMBOL(dib0090_dcc_freq);
drivers/media/dvb/frontends/dib0090.c:EXPORT_SYMBOL(dib0090_pwm_gain_reset);
drivers/media/dvb/frontends/dib0090.c:EXPORT_SYMBOL(dib0090_gain_control);
drivers/media/dvb/frontends/dib0090.c:EXPORT_SYMBOL(dib0090_get_current_gain);
drivers/media/dvb/frontends/dib0090.c:EXPORT_SYMBOL(dib0090_get_wbd_offset);
drivers/media/dvb/frontends/dib0090.c:EXPORT_SYMBOL(dib0090_get_tune_state);
drivers/media/dvb/frontends/dib0090.c:EXPORT_SYMBOL(dib0090_set_tune_state);
drivers/media/dvb/frontends/dib0090.c:EXPORT_SYMBOL(dib0090_register);
drivers/media/dvb/frontends/dib0090.c:EXPORT_SYMBOL(dib0090_fw_register);
drivers/media/dvb/frontends/dib3000mc.c:EXPORT_SYMBOL(dib3000mc_get_tuner_i2c_master);
drivers/media/dvb/frontends/dib3000mc.c:EXPORT_SYMBOL(dib3000mc_pid_control);
drivers/media/dvb/frontends/dib3000mc.c:EXPORT_SYMBOL(dib3000mc_pid_parse);
drivers/media/dvb/frontends/dib3000mc.c:EXPORT_SYMBOL(dib3000mc_set_config);
drivers/media/dvb/frontends/dib3000mc.c:EXPORT_SYMBOL(dib3000mc_i2c_enumeration);
drivers/media/dvb/frontends/dib7000m.c:EXPORT_SYMBOL(dib7000m_get_i2c_master);
drivers/media/dvb/frontends/dib7000m.c:EXPORT_SYMBOL(dib7000m_pid_filter_ctrl);
drivers/media/dvb/frontends/dib7000m.c:EXPORT_SYMBOL(dib7000m_pid_filter);
drivers/media/dvb/frontends/dib7000m.c:EXPORT_SYMBOL(dib7000m_i2c_enumeration);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7000p_set_wbd_ref);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7000p_update_pll);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7000p_set_gpio);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7000p_ctrl_timf);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7000pc_detection);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7000p_get_i2c_master);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7000p_pid_filter_ctrl);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7000p_pid_filter);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7000p_i2c_enumeration);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7090_get_i2c_tuner);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7090_tuner_sleep);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7090_agc_restart);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7090_get_adc_power);
drivers/media/dvb/frontends/dib7000p.c:EXPORT_SYMBOL(dib7090_slave_reset);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_set_wbd_ref);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_set_gpio);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_pwm_agc_reset);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_get_adc_power);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_get_tune_state);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_set_tune_state);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_set_slave_frontend);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_remove_slave_frontend);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_get_slave_frontend);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_i2c_enumeration);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_get_i2c_master);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_pid_filter_ctrl);
drivers/media/dvb/frontends/dib8000.c:EXPORT_SYMBOL(dib8000_pid_filter);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_fw_set_component_bus_speed);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_get_tuner_interface);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_get_component_bus_interface);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_get_i2c_master);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_set_i2c_adapter);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_set_gpio);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_fw_pid_filter_ctrl);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_fw_pid_filter);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_firmware_post_pll_init);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_i2c_enumeration);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_set_slave_frontend);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_remove_slave_frontend);
drivers/media/dvb/frontends/dib9000.c:EXPORT_SYMBOL(dib9000_get_slave_frontend);
drivers/media/dvb/frontends/dibx000_common.c:EXPORT_SYMBOL(dibx000_i2c_set_speed);
drivers/media/dvb/frontends/dibx000_common.c:EXPORT_SYMBOL(dibx000_get_i2c_adapter);
drivers/media/dvb/frontends/dibx000_common.c:EXPORT_SYMBOL(dibx000_reset_i2c_master);
drivers/media/dvb/frontends/dibx000_common.c:EXPORT_SYMBOL(dibx000_init_i2c_master);
drivers/media/dvb/frontends/dibx000_common.c:EXPORT_SYMBOL(dibx000_exit_i2c_master);
drivers/media/dvb/frontends/dibx000_common.c:EXPORT_SYMBOL(systime);
drivers/media/dvb/frontends/drxd_hard.c:EXPORT_SYMBOL(drxd_config_i2c);
drivers/media/dvb/frontends/s5h1420.c:EXPORT_SYMBOL(s5h1420_get_tuner_i2c_adapter);
drivers/media/dvb/frontends/stv090x.c:EXPORT_SYMBOL(stv090x_set_gpio);
Which does show up as hard dependencies on your typical Debian
installation (which does set CONFIG_MEDIA_ATTACH):
bjorn@nemi:~$ modinfo -F depends dvb-usb-dib0700
dib8000,dvb-usb,i2c-core,dib0070,dib3000mc,usbcore,dib7000p,dib7000m
So it looks like this problem is much more widespread than I initially
thought, and it may therefore be perfectly OK to do what you did.
However, the em28xx-dvb driver can be used with a large number of
frontends and we certainly don't want them all as hard dependencies.
I think it's time for someone with authority to state what is acceptable
and what is not, with regard to frontends, tuners, dvb_attach(),
EXPORT_SYMBOL and CONFIG_MEDIA_ATTACH.
For all I know, this may already be documented somewhere. If so, please
point me there.
Bjørn
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-06-03 13:20 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-01 9:45 [bug-report] unconditionally calling cxd2820r_get_tuner_i2c_adapter() from em28xx-dvb.c creates a hard module dependency Bjørn Mork
2011-06-01 9:49 ` Antti Palosaari
2011-06-01 10:31 ` Bjørn Mork
2011-06-01 10:53 ` Bjørn Mork
2011-06-01 17:18 ` Bjørn Mork
2011-06-03 12:21 ` Antti Palosaari
2011-06-03 12:50 ` Bjørn Mork
2011-06-03 12:59 ` Antti Palosaari
2011-06-03 13:20 ` Bjørn Mork
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.