Bug 10067

Summary: TUNER_TDA8290=y, VIDEO_DEV=n build error
Product: v4l-dvb Reporter: Adrian Bunk (bunk)
Component: v4l-otherAssignee: Mauro Carvalho Chehab (mchehab)
Status: CLOSED CODE_FIX    
Severity: normal CC: bunk, mkrufky, toralf.foerster
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 2.6.25-rc2-git Subsystem:
Regression: Yes Bisected commit-id:
Bug Depends on:    
Bug Blocks: 9832    

Description Adrian Bunk 2008-02-22 10:36:05 UTC
Subject         : TUNER_TDA8290=y, VIDEO_DEV=n build error
Submitter       : Toralf Förster <toralf.foerster@gmx.de>
References      : http://lkml.org/lkml/2008/2/19/262
Caused-By       : Michael Krufky <mkrufky@linuxtv.org>
                  commit 746d9732dbd5b95c3ba36230e2814fa2c391a311
                  commit 5bea1cd3871351d70cc7624af138f8aa68b7be77
Comment 1 Michael Krufky 2008-03-01 17:28:56 UTC
"make mrproper && cp <oldconfig> .config && make oldconfig && make"

wouldn't this be better:

"cp <oldconfig> .config && make mrproper && make oldconfig && make"  ?


TUNER_TDA8290 selects DVB_TDA827X and DVB_TDA18271, but DVB_CORE is not selected.

The Kconfig submenu that contains DVB_TDA827X and DVB_TDA18271 is inside of an "if DVB_CAPTURE_DRIVERS && DVB_CORE" block.  DVB_CORE is not selected -- maybe this is why the tda827x and tda18271 were not built?  (even though they do not actually depend on dvb-core)
Comment 2 Michael Krufky 2008-03-01 17:31:52 UTC
even though those modules weren't built, it's strange that we see the "undefined reference" warnings.....  tda827x.h and tda18271.h contain static inlines to be used (rather than the attach functions) when these modules are not selected.
Comment 3 Adrian Bunk 2008-03-01 23:57:46 UTC
(In reply to comment #1)
> "make mrproper && cp <oldconfig> .config && make oldconfig && make"
> 
> wouldn't this be better:
> 
> "cp <oldconfig> .config && make mrproper && make oldconfig && make"  ?
>...

mrproper deletes the .config
Comment 4 Adrian Bunk 2008-03-02 00:01:41 UTC
(In reply to comment #2)
> even though those modules weren't built, it's strange that we see the
> "undefined reference" warnings.....  tda827x.h and tda18271.h contain static
> inlines to be used (rather than the attach functions) when these modules are
> not selected.

The static inlines in tda827x.h and tda18271.h would only be used if the DVB_TDA827X and DVB_TDA18271 kconfig options weren't enabled.
Comment 5 Rafael J. Wysocki 2008-04-02 15:37:19 UTC
Adrian, what's the status of this bug?
Comment 6 Adrian Bunk 2008-04-02 15:53:32 UTC
still present with 2.6.25-rc8
Comment 7 Mauro Carvalho Chehab 2008-04-03 01:10:32 UTC
The issue here seems to be that 
CONFIG_DVB_TDA827X=y
CONFIG_DVB_TDA18271=y
But CONFIG_DVB_CORE is not set.

One possible fix would be to do:

config TUNER_TDA8290
        tristate "TDA 8290/8295 + 8275(a)/18271 tuner combo"
        depends on I2C
        select DVB_TDA827X if DVB_CORE
        select DVB_TDA18271 if DVB_CORE
        default m if VIDEO_TUNER_CUSTOMIZE

Not sure, however, if tda8290 will keep working with this config.
Maybe we should, instead, do:
config TUNER_TDA8290
        depends on I2C && DVB_CORE
Comment 8 Michael Krufky 2008-04-03 05:33:02 UTC
This does not solve the issue -- it makes it worse.

DVB_TDA827X and DVB_TDA18271 are both drivers for hybrid tuners.

TUNER_TDA8290 is a driver for an analog IF demodulator.

A user may have an analog-only setup, with DVB_CORE disabled.  This user may still need TUNER_TDA8290 and DVB_TDA827X and/or DVB_TDA18271 for their tuner support.

This problem came up a few weeks ago, and we agreed that the first step in solving this issue is to move all of the analog *and* digital tuners into a common "tuner" directory, before restructuring the kconfig menus for this feature.

We don't have time for that type of change in 2.6.25 -- let's think about this for 2.6.26

We should ignore this for now -- this is not a new issue.  Similar issues exist in 2.6.24 that have never been reported.
Comment 9 Mauro Carvalho Chehab 2008-04-03 06:18:15 UTC
The right solution is to move all tuners to a common dir. However, we should fix this regression for 2.6.25.

The problem here is that you're compiling fine all stuff under drivers/media/video. However, as tda827x and tda18271 are inside drivers/media/dvb, they aren't compiled.

A very simple solution, yet functional, is to make kernel compile tda*, with a patch like:

diff --git a/drivers/media/Makefile b/drivers/media/Makefile
index 8cf9135..7b8bb69 100644
--- a/drivers/media/Makefile
+++ b/drivers/media/Makefile
@@ -6,3 +6,6 @@ obj-y := common/
 obj-y += video/
 obj-$(CONFIG_VIDEO_DEV) += radio/
 obj-$(CONFIG_DVB_CORE)  += dvb/
+ifeq ($(CONFIG_DVB_CORE),)
+  obj-$(CONFIG_VIDEO_TUNER)  += dvb/frontends/
+endif


I think this is a good workaround to solve the issue, while we don't move common stuff to drivers/media/common.

With the above patch and the offended .config, the drivers are now compiled:

make drivers/media/

  CHK     include/linux/version.h
  CHK     include/linux/utsrelease.h
  CALL    scripts/checksyscalls.sh
  CC      drivers/media/dvb/frontends/tda827x.o
  CC      drivers/media/dvb/frontends/tda18271-tables.o
  CC      drivers/media/dvb/frontends/tda18271-common.o
  CC      drivers/media/dvb/frontends/tda18271-fe.o
  LD      drivers/media/dvb/frontends/tda18271.o
  LD      drivers/media/dvb/frontends/built-in.o
  LD      drivers/media/built-in.o
Comment 10 Michael Krufky 2008-04-03 07:28:03 UTC
Please note: this is *not* a regression -- a similar issue existed in 2.6.24.  Meanwhile, if we can alleviate this problem now with minimal impact, then I'm all for it.

As for Mauro's suggestion:

--- a/drivers/media/Makefile
+++ b/drivers/media/Makefile
@@ -6,3 +6,6 @@ obj-y := common/
 obj-y += video/
 obj-$(CONFIG_VIDEO_DEV) += radio/
 obj-$(CONFIG_DVB_CORE)  += dvb/
+ifeq ($(CONFIG_DVB_CORE),)
+  obj-$(CONFIG_VIDEO_TUNER)  += dvb/frontends/
+endif

This change is fine with me, as an interim solution.  But, does it actually resolve the issue described by this problem ticket?
Comment 11 Mauro Carvalho Chehab 2008-04-03 11:11:07 UTC
On a full compilation with Toralf .config, compilation and linkedition went fine. I'll try to test other compilations later today.
Comment 12 Michael Krufky 2008-04-03 12:21:38 UTC
This interim solution looks good.

Let's merge it for 2.6.25.