Skip to contentSkip to conversation

videodev: Unknown symbol i2c_unregister_device (in kernels older than 2.6.26)

DISCUSSION Matt Doran 5 participants 9 messages May 24, 2009 – Jun 3, 2009 1 message not in the archive Media (V4L/DVB)

lore
Share & tools
lore

Matt Doran

author
#0 lore raw

Hi there,

I tried using the latest v4l code on an Mythtv box running 2.6.20, but the v4l videodev module fails to load with the following warnings:

videodev: Unknown symbol i2c_unregister_device
v4l2_common: Unknown symbol v4l2_device_register_subdev

It seems the "i2c_unregister_device" function was added in 2.6.26. References to this function in v4l2-common.c are enclosed in an ifdef like:

   #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)

However in "v4l2_device_unregister()" in v4l2-device.c, there is a reference to "i2c_unregister_device" without any ifdefs. I am running a pretty old kernel, but I'd guess anyone running 2.6.25 or earlier will have this problem. It seems this code was added by Mauro 3 weeks ago in this rev:

http://linuxtv.org/hg/v4l-dvb/rev/87afa7a4ccdf

I also had some other compile problems, but don't have all the details (sorry!). I had to disable the following drivers to get it to compile:

* CONFIG_VIDEO_PVRUSB2
* CONFIG_VIDEO_THS7303
* CONFIG_VIDEO_ADV7343
* CONFIG_DVB_SIANO_SMS1XXX

Regards,
Matt

#1 lore raw
Quoted 30 lines · Matt Doran

Hi there,

I tried using the latest v4l code on an Mythtv box running 2.6.20, but the v4l videodev module fails to load with the following warnings:

videodev: Unknown symbol i2c_unregister_device
v4l2_common: Unknown symbol v4l2_device_register_subdev

It seems the "i2c_unregister_device" function was added in 2.6.26. References to this function in v4l2-common.c are enclosed in an ifdef like:

   #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)

However in "v4l2_device_unregister()" in v4l2-device.c, there is a
reference to "i2c_unregister_device" without any ifdefs. I am
running a pretty old kernel, but I'd guess anyone running 2.6.25 or
earlier will have this problem. It seems this code was added by
Mauro 3 weeks ago in this rev:

   http://linuxtv.org/hg/v4l-dvb/rev/87afa7a4ccdf

I also had some other compile problems, but don't have all the details (sorry!). I had to disable the following drivers to get it to compile:

Quoted 9 lines

* CONFIG_VIDEO_PVRUSB2
* CONFIG_VIDEO_THS7303
* CONFIG_VIDEO_ADV7343
* CONFIG_DVB_SIANO_SMS1XXX

Regards,
Matt

Matt, I checked out v4l-dvb today and am using it under 2.6.24 and so far so good. When did the error appear -- when you were trying to load the module?

I have been seeing the errors compiling adv7343.c and ths7303.c under 2.6.24 as well. Andy Walls and Chaithrika Subrahmanya had written patches for those two modules respectively, but there were some comments during the review of the patches, so I think they are still being worked on.

David

author
#2 lore raw
Quoted 11 lines · David Ward
Quoted 8 lines · Matt Doran

Hi there,

I tried using the latest v4l code on an Mythtv box running 2.6.20, but the v4l videodev module fails to load with the following warnings:

videodev: Unknown symbol i2c_unregister_device
v4l2_common: Unknown symbol v4l2_device_register_subdev

Matt, I checked out v4l-dvb today and am using it under 2.6.24 and so far so good. When did the error appear -- when you were trying to load the module?

The error appeared when trying to load the module at boot time for my saa7134 based tuner card. This card would no longer work after installing the latest v4l code, however another tuner card continued to work. Maybe because this the saa7134 card is an I2C based card and the other is USB based?? (but this is all a bit over my head).

I basically just commented out the "i2c_unregister_device" function in v4l2-device.c, recompiled and everything started working. :) I don't know the implication of removing this, so I didn't submit a patch ... I thought I'd leave that to the experts.

Quoted 2 lines

I have been seeing the errors compiling adv7343.c and ths7303.c under 2.6.24 as well. Andy Walls and Chaithrika Subrahmanya had written patches for those two modules respectively, but there were some comments during the review of the patches, so I think they are still being worked on.

Great, thanks for letting me know. It's not a showstopper, but it's a pain repeatedly going through the reconfigure/compile/error loop each time you encounter a new compiler error. :) I'm just not game to upgrade the kernel on my mythtv box ... it took a long time to get stable, and I don't want to go there again. :P I'm recompiling v4l because I added a new tuner card.

Matt

#3 lore raw
In reply to David Ward
Quoted 41 lines · David Ward
Quoted 30 lines · Matt Doran

Hi there,

I tried using the latest v4l code on an Mythtv box running 2.6.20, but the v4l videodev module fails to load with the following warnings:

videodev: Unknown symbol i2c_unregister_device
v4l2_common: Unknown symbol v4l2_device_register_subdev

It seems the "i2c_unregister_device" function was added in 2.6.26. References to this function in v4l2-common.c are enclosed in an ifdef like:

   #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)

However in "v4l2_device_unregister()" in v4l2-device.c, there is a
reference to "i2c_unregister_device" without any ifdefs. I am
running a pretty old kernel, but I'd guess anyone running 2.6.25 or
earlier will have this problem. It seems this code was added by
Mauro 3 weeks ago in this rev:

   http://linuxtv.org/hg/v4l-dvb/rev/87afa7a4ccdf

I also had some other compile problems, but don't have all the details (sorry!). I had to disable the following drivers to get it to compile:

Quoted 9 lines

* CONFIG_VIDEO_PVRUSB2
* CONFIG_VIDEO_THS7303
* CONFIG_VIDEO_ADV7343
* CONFIG_DVB_SIANO_SMS1XXX

Regards,
Matt

Quoted 8 lines

Matt, I checked out v4l-dvb today and am using it under 2.6.24 and so far so good. When did the error appear -- when you were trying to load the module?

I have been seeing the errors compiling adv7343.c and ths7303.c under 2.6.24 as well. Andy Walls and Chaithrika Subrahmanya had written patches for those two modules respectively, but there were some comments during the review of the patches, so I think they are still being worked on.

Well, just to manage expectations: I am not working on this. I do not advise waiting for something from me. ;)

As an end user, you work-around is to use "make menuconfig" (or whatever) as Matt did: disable the modules that aren't compiling on older kernels.

If it really bugs you (it would bug me), please submit a tested patch against:

v4l-dvb/v4l/versions.txt

to disable compilations of the offending drivers for older kernels.

Backward compatability fixes are not going to be appealing work for anyone, especially if you're not actually using the problem drivers.

Regards,
Andy

Quoted 1 line

David

author
#4 lore raw
Quoted 32 lines · Andy Walls
Quoted 24 lines · David Ward
Quoted 22 lines · Matt Doran

Hi there,

I tried using the latest v4l code on an Mythtv box running 2.6.20, but the v4l videodev module fails to load with the following warnings:

videodev: Unknown symbol i2c_unregister_device
v4l2_common: Unknown symbol v4l2_device_register_subdev

It seems the "i2c_unregister_device" function was added in 2.6.26. References to this function in v4l2-common.c are enclosed in an ifdef like:

   #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)

However in "v4l2_device_unregister()" in v4l2-device.c, there is a
reference to "i2c_unregister_device" without any ifdefs. I am
running a pretty old kernel, but I'd guess anyone running 2.6.25 or
earlier will have this problem. It seems this code was added by
Mauro 3 weeks ago in this rev:

Quoted 5 lines
Quoted 3 lines
   http://linuxtv.org/hg/v4l-dvb/rev/87afa7a4ccdf

I have been seeing the errors compiling adv7343.c and ths7303.c under 2.6.24 as well. Andy Walls and Chaithrika Subrahmanya had written patches for those two modules respectively, but there were some comments during the review of the patches, so I think they are still being worked on.

Quoted 9 lines

Well, just to manage expectations: I am not working on this. I do not advise waiting for something from me. ;)

As an end user, you work-around is to use "make menuconfig" (or whatever) as Matt did: disable the modules that aren't compiling on older kernels.

I agree, but the main problem I raise is the use of "i2c_unregister_device" in the main v4l module on Linux kernels that don't support it.

Regards,
Matt

#5 lore raw
In reply to Matt Doran

Em Mon, 25 May 2009 09:10:17 +1000
Matt Doran <[email protected]> escreveu:

Quoted 15 lines

Hi there,

I tried using the latest v4l code on an Mythtv box running 2.6.20, but the v4l videodev module fails to load with the following warnings:

videodev: Unknown symbol i2c_unregister_device
v4l2_common: Unknown symbol v4l2_device_register_subdev

It seems the "i2c_unregister_device" function was added in 2.6.26. References to this function in v4l2-common.c are enclosed in an ifdef like:

    #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)
Quoted 7 lines

However in "v4l2_device_unregister()" in v4l2-device.c, there is a
reference to "i2c_unregister_device" without any ifdefs. I am running
a pretty old kernel, but I'd guess anyone running 2.6.25 or earlier will
have this problem. It seems this code was added by Mauro 3 weeks ago
in this rev:

    http://linuxtv.org/hg/v4l-dvb/rev/87afa7a4ccdf

I've just applied a patch at the tree that should fix this issue. It adds several tests and the code, but, hopefully, it should be possible even to use the IR's with kernels starting from 2.6.16.

Cheers,
Mauro

#6 lore raw
Quoted 24 lines · Mauro Carvalho Chehab

Em Mon, 25 May 2009 09:10:17 +1000
Matt Doran <[email protected]> escreveu:

Quoted 21 lines

Hi there,

I tried using the latest v4l code on an Mythtv box running 2.6.20, but the v4l videodev module fails to load with the following warnings:

videodev: Unknown symbol i2c_unregister_device
v4l2_common: Unknown symbol v4l2_device_register_subdev

It seems the "i2c_unregister_device" function was added in 2.6.26. References to this function in v4l2-common.c are enclosed in an ifdef like:

    #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)

However in "v4l2_device_unregister()" in v4l2-device.c, there is a
reference to "i2c_unregister_device" without any ifdefs. I am running
a pretty old kernel, but I'd guess anyone running 2.6.25 or earlier will
have this problem. It seems this code was added by Mauro 3 weeks ago
in this rev:

Quoted 5 lines
Quoted 1 line
    http://linuxtv.org/hg/v4l-dvb/rev/87afa7a4ccdf

I've just applied a patch at the tree that should fix this issue. It adds several tests and the code, but, hopefully, it should be possible even to use the IR's with kernels starting from 2.6.16.

Hi Mauro,
If you are referring to my recent patch, it needs a modification to be like other places in drivers/media/video. Patch below applies on top of the previous one.

---
From: Randy Dunlap <[email protected]>

Fix v4l2-device usage of i2c_unregister_device() and handle the case of CONFIG_I2C=m & CONFIG_MEDIA_VIDEO=y.

---
 drivers/media/video/v4l2-device.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/video/v4l2-device.c +1 -1
@@ -85,7 +85,7 @@ void v4l2_device_unregister(struct v4l2_
 	/* Unregister subdevs */
 	list_for_each_entry_safe(sd, next, &v4l2_dev->subdevs, list) {
 		v4l2_device_unregister_subdev(sd);
-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+#if defined(CONFIG_I2C) || (defined(CONFIG_I2C_MODULE) && defined(MODULE))
 		if (sd->flags & V4L2_SUBDEV_FL_IS_I2C) {
 			struct i2c_client *client = v4l2_get_subdevdata(sd);
 
Signature · 3 lines
~Randy
LPC 2009, Sept. 23-25, Portland, Oregon
http://linuxplumbersconf.org/2009/
author
#7 lore raw
In reply to Mauro Carvalho Chehab
Quoted 17 lines · Mauro Carvalho Chehab

Em Mon, 25 May 2009 09:10:17 +1000
Matt Doran <[email protected]> escreveu:

Quoted 13 lines

Hi there,

I tried using the latest v4l code on an Mythtv box running 2.6.20, but the v4l videodev module fails to load with the following warnings:

videodev: Unknown symbol i2c_unregister_device
v4l2_common: Unknown symbol v4l2_device_register_subdev

It seems the "i2c_unregister_device" function was added in 2.6.26. References to this function in v4l2-common.c are enclosed in an ifdef like:

    #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)
Quoted 11 lines
Quoted 4 lines

However in "v4l2_device_unregister()" in v4l2-device.c, there is a reference to "i2c_unregister_device" without any ifdefs. I am running a pretty old kernel, but I'd guess anyone running 2.6.25 or earlier will have this problem. It seems this code was added by Mauro 3 weeks ago in this rev:

    http://linuxtv.org/hg/v4l-dvb/rev/87afa7a4ccdf

I've just applied a patch at the tree that should fix this issue. It adds several tests and the code, but, hopefully, it should be possible even to use the IR's with kernels starting from 2.6.16.

Thanks Mauro.

I've recompiled all drivers without compile error and I've been using everything for a few days now and it all works great.

Thanks again!
Matt

A message that is not in the archive (sent off-list or not yet received): [email protected]

#9 lore raw

Em Wed, 03 Jun 2009 21:50:21 +1000
Matt Doran <[email protected]> escreveu:

Quoted 19 lines
Quoted 9 lines · Mauro Carvalho Chehab

Em Mon, 25 May 2009 09:10:17 +1000
Matt Doran <[email protected]> escreveu:

Quoted 5 lines

Hi there,

I tried using the latest v4l code on an Mythtv box running 2.6.20, but the v4l videodev module fails to load with the following warnings:

Quoted 9 lines
Quoted 3 lines

videodev: Unknown symbol i2c_unregister_device
v4l2_common: Unknown symbol v4l2_device_register_subdev

I've just applied a patch at the tree that should fix this issue. It adds several tests and the code, but, hopefully, it should be possible even to use the IR's with kernels starting from 2.6.16.

Quoted 4 lines

Thanks Mauro.

I've recompiled all drivers without compile error and I've been using everything for a few days now and it all works great.

Great!

Quoted 2 lines

Thanks again!

Anytime.

Cheers,
Mauro