The patch number 9750 was added via Mauro Carvalho Chehab <[EMAIL PROTECTED]>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        [EMAIL PROTECTED]

------

From: Mauro Carvalho Chehab  <[EMAIL PROTECTED]>
fix boards for kernels with algo_control


changeset 4ecae6da8244 removed algo_control from i2c drivers. However,
on older kernels, a dummy function to implement algo_control is required,
otherwise, an OOPS is generated.

This patch adds a backport for all i2c drivers that defines an
i2c_algorithm, except for cafe_ccic, since OLPC hardware only works
for kernels newer than 2.6.19.

Some of the backported drivers would need also extra changes to work with
older kernels, as specified on v4l/versions.txt. Yet, I decided to add
the backport for those drivers also, since the lack of algo_control doesn't
generate any compilation error, but it is enough to break the driver. So,
better to all for all boards than to allow compiling a kernel backported that
just generates OOPS.

Priority: normal

Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>


---

 linux/drivers/media/common/saa7146_i2c.c                |    3 +
 linux/drivers/media/dvb/b2c2/flexcop-i2c.c              |    3 +
 linux/drivers/media/dvb/dm1105/dm1105.c                 |    3 +
 linux/drivers/media/dvb/dvb-usb/af9005.c                |    3 +
 linux/drivers/media/dvb/dvb-usb/af9015.c                |    3 +
 linux/drivers/media/dvb/dvb-usb/anysee.c                |    3 +
 linux/drivers/media/dvb/dvb-usb/au6610.c                |    3 +
 linux/drivers/media/dvb/dvb-usb/cxusb.c                 |    3 +
 linux/drivers/media/dvb/dvb-usb/dib0700_core.c          |    3 +
 linux/drivers/media/dvb/dvb-usb/dibusb-common.c         |    3 +
 linux/drivers/media/dvb/dvb-usb/digitv.c                |    3 +
 linux/drivers/media/dvb/dvb-usb/dtv5100.c               |    3 +
 linux/drivers/media/dvb/dvb-usb/dw2102.c                |   12 ++++++
 linux/drivers/media/dvb/dvb-usb/gl861.c                 |    3 +
 linux/drivers/media/dvb/dvb-usb/m920x.c                 |    3 +
 linux/drivers/media/dvb/dvb-usb/opera1.c                |    3 +
 linux/drivers/media/dvb/dvb-usb/ttusb2.c                |    3 +
 linux/drivers/media/dvb/frontends/cx24123.c             |    4 ++
 linux/drivers/media/dvb/frontends/dibx000_common.c      |    4 ++
 linux/drivers/media/dvb/frontends/s5h1420.c             |    4 ++
 linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c |    3 +
 linux/drivers/media/video/au0828/au0828-i2c.c           |    3 +
 linux/drivers/media/video/bt8xx/bttv-i2c.c              |    3 +
 linux/drivers/media/video/cx23885/cx23885-i2c.c         |    3 +
 linux/drivers/media/video/em28xx/em28xx-i2c.c           |    3 +
 linux/drivers/media/video/ivtv/ivtv-i2c.c               |    3 +
 linux/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c    |    3 +
 linux/drivers/media/video/saa7134/saa7134-i2c.c         |    3 +
 linux/drivers/media/video/usbvision/usbvision-i2c.c     |    3 +
 linux/drivers/media/video/w9968cf.c                     |    3 +
 v4l/compat.h                                            |   12 ++++++
 v4l/scripts/gentree.pl                                  |    1 
 v4l/scripts/make_config_compat.pl                       |   20 ++++++++++
 33 files changed, 135 insertions(+)

diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/common/saa7146_i2c.c
--- a/linux/drivers/media/common/saa7146_i2c.c  Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/common/saa7146_i2c.c  Tue Nov 25 09:07:00 2008 -0200
@@ -406,6 +406,9 @@ static struct i2c_algorithm saa7146_algo
 static struct i2c_algorithm saa7146_algo = {
        .master_xfer    = saa7146_i2c_xfer,
        .functionality  = saa7146_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter 
*i2c_adapter, u32 bitrate)
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/b2c2/flexcop-i2c.c
--- a/linux/drivers/media/dvb/b2c2/flexcop-i2c.c        Mon Nov 24 13:56:06 
2008 +0100
+++ b/linux/drivers/media/dvb/b2c2/flexcop-i2c.c        Tue Nov 25 09:07:00 
2008 -0200
@@ -205,6 +205,9 @@ static struct i2c_algorithm flexcop_algo
 static struct i2c_algorithm flexcop_algo = {
        .master_xfer    = flexcop_master_xfer,
        .functionality  = flexcop_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 int flexcop_i2c_init(struct flexcop_device *fc)
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dm1105/dm1105.c
--- a/linux/drivers/media/dvb/dm1105/dm1105.c   Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dm1105/dm1105.c   Tue Nov 25 09:07:00 2008 -0200
@@ -330,6 +330,9 @@ static struct i2c_algorithm dm1105_algo 
 static struct i2c_algorithm dm1105_algo = {
        .master_xfer   = dm1105_i2c_xfer,
        .functionality = functionality,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static inline struct dm1105dvb *feed_to_dm1105dvb(struct dvb_demux_feed *feed)
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/af9005.c
--- a/linux/drivers/media/dvb/dvb-usb/af9005.c  Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/af9005.c  Tue Nov 25 09:07:00 2008 -0200
@@ -500,6 +500,9 @@ static struct i2c_algorithm af9005_i2c_a
 static struct i2c_algorithm af9005_i2c_algo = {
        .master_xfer = af9005_i2c_xfer,
        .functionality = af9005_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 int af9005_send_command(struct dvb_usb_device *d, u8 command, u8 * wbuf,
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/af9015.c
--- a/linux/drivers/media/dvb/dvb-usb/af9015.c  Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/af9015.c  Tue Nov 25 09:07:00 2008 -0200
@@ -318,6 +318,9 @@ static struct i2c_algorithm af9015_i2c_a
 static struct i2c_algorithm af9015_i2c_algo = {
        .master_xfer = af9015_i2c_xfer,
        .functionality = af9015_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static int af9015_do_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit, u8 op)
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/anysee.c
--- a/linux/drivers/media/dvb/dvb-usb/anysee.c  Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/anysee.c  Tue Nov 25 09:07:00 2008 -0200
@@ -199,6 +199,9 @@ static struct i2c_algorithm anysee_i2c_a
 static struct i2c_algorithm anysee_i2c_algo = {
        .master_xfer   = anysee_master_xfer,
        .functionality = anysee_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static int anysee_mt352_demod_init(struct dvb_frontend *fe)
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/au6610.c
--- a/linux/drivers/media/dvb/dvb-usb/au6610.c  Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/au6610.c  Tue Nov 25 09:07:00 2008 -0200
@@ -119,6 +119,9 @@ static struct i2c_algorithm au6610_i2c_a
 static struct i2c_algorithm au6610_i2c_algo = {
        .master_xfer   = au6610_i2c_xfer,
        .functionality = au6610_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 /* Callbacks for DVB USB */
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/cxusb.c
--- a/linux/drivers/media/dvb/dvb-usb/cxusb.c   Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/cxusb.c   Tue Nov 25 09:07:00 2008 -0200
@@ -213,6 +213,9 @@ static struct i2c_algorithm cxusb_i2c_al
 static struct i2c_algorithm cxusb_i2c_algo = {
        .master_xfer   = cxusb_i2c_xfer,
        .functionality = cxusb_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static int cxusb_power_ctrl(struct dvb_usb_device *d, int onoff)
diff -r ef952708012b -r 5bfadacec8a2 
linux/drivers/media/dvb/dvb-usb/dib0700_core.c
--- a/linux/drivers/media/dvb/dvb-usb/dib0700_core.c    Mon Nov 24 13:56:06 
2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/dib0700_core.c    Tue Nov 25 09:07:00 
2008 -0200
@@ -252,6 +252,9 @@ struct i2c_algorithm dib0700_i2c_algo = 
 struct i2c_algorithm dib0700_i2c_algo = {
        .master_xfer   = dib0700_i2c_xfer,
        .functionality = dib0700_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 int dib0700_identify_state(struct usb_device *udev, struct 
dvb_usb_device_properties *props,
diff -r ef952708012b -r 5bfadacec8a2 
linux/drivers/media/dvb/dvb-usb/dibusb-common.c
--- a/linux/drivers/media/dvb/dvb-usb/dibusb-common.c   Mon Nov 24 13:56:06 
2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/dibusb-common.c   Tue Nov 25 09:07:00 
2008 -0200
@@ -155,6 +155,9 @@ struct i2c_algorithm dibusb_i2c_algo = {
 struct i2c_algorithm dibusb_i2c_algo = {
        .master_xfer   = dibusb_i2c_xfer,
        .functionality = dibusb_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 EXPORT_SYMBOL(dibusb_i2c_algo);
 
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/digitv.c
--- a/linux/drivers/media/dvb/dvb-usb/digitv.c  Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/digitv.c  Tue Nov 25 09:07:00 2008 -0200
@@ -83,6 +83,9 @@ static struct i2c_algorithm digitv_i2c_a
 static struct i2c_algorithm digitv_i2c_algo = {
        .master_xfer   = digitv_i2c_xfer,
        .functionality = digitv_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 /* Callbacks for DVB USB */
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/dtv5100.c
--- a/linux/drivers/media/dvb/dvb-usb/dtv5100.c Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/dtv5100.c Tue Nov 25 09:07:00 2008 -0200
@@ -104,6 +104,9 @@ static struct i2c_algorithm dtv5100_i2c_
 static struct i2c_algorithm dtv5100_i2c_algo = {
        .master_xfer   = dtv5100_i2c_xfer,
        .functionality = dtv5100_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 /* Callbacks for DVB USB */
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/dw2102.c
--- a/linux/drivers/media/dvb/dvb-usb/dw2102.c  Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/dw2102.c  Tue Nov 25 09:07:00 2008 -0200
@@ -368,21 +368,33 @@ static struct i2c_algorithm dw2102_i2c_a
 static struct i2c_algorithm dw2102_i2c_algo = {
        .master_xfer = dw2102_i2c_transfer,
        .functionality = dw210x_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static struct i2c_algorithm dw2102_serit_i2c_algo = {
        .master_xfer = dw2102_serit_i2c_transfer,
        .functionality = dw210x_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static struct i2c_algorithm dw2102_earda_i2c_algo = {
        .master_xfer = dw2102_earda_i2c_transfer,
        .functionality = dw210x_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static struct i2c_algorithm dw2104_i2c_algo = {
        .master_xfer = dw2104_i2c_transfer,
        .functionality = dw210x_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static int dw210x_read_mac_address(struct dvb_usb_device *d, u8 mac[6])
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/gl861.c
--- a/linux/drivers/media/dvb/dvb-usb/gl861.c   Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/gl861.c   Tue Nov 25 09:07:00 2008 -0200
@@ -91,6 +91,9 @@ static struct i2c_algorithm gl861_i2c_al
 static struct i2c_algorithm gl861_i2c_algo = {
        .master_xfer   = gl861_i2c_xfer,
        .functionality = gl861_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 /* Callbacks for DVB USB */
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/m920x.c
--- a/linux/drivers/media/dvb/dvb-usb/m920x.c   Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/m920x.c   Tue Nov 25 09:07:00 2008 -0200
@@ -256,6 +256,9 @@ static struct i2c_algorithm m920x_i2c_al
 static struct i2c_algorithm m920x_i2c_algo = {
        .master_xfer   = m920x_i2c_xfer,
        .functionality = m920x_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 /* pid filter */
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/opera1.c
--- a/linux/drivers/media/dvb/dvb-usb/opera1.c  Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/opera1.c  Tue Nov 25 09:07:00 2008 -0200
@@ -167,6 +167,9 @@ static struct i2c_algorithm opera1_i2c_a
 static struct i2c_algorithm opera1_i2c_algo = {
        .master_xfer = opera1_i2c_xfer,
        .functionality = opera1_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static int opera1_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t 
voltage)
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/dvb-usb/ttusb2.c
--- a/linux/drivers/media/dvb/dvb-usb/ttusb2.c  Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/ttusb2.c  Tue Nov 25 09:07:00 2008 -0200
@@ -124,6 +124,9 @@ static struct i2c_algorithm ttusb2_i2c_a
 static struct i2c_algorithm ttusb2_i2c_algo = {
        .master_xfer   = ttusb2_i2c_xfer,
        .functionality = ttusb2_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 /* Callbacks for DVB USB */
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/frontends/cx24123.c
--- a/linux/drivers/media/dvb/frontends/cx24123.c       Mon Nov 24 13:56:06 
2008 +0100
+++ b/linux/drivers/media/dvb/frontends/cx24123.c       Tue Nov 25 09:07:00 
2008 -0200
@@ -29,6 +29,7 @@
 
 #include "dvb_frontend.h"
 #include "cx24123.h"
+#include "compat.h"
 
 #define XTAL 10111000
 
@@ -1065,6 +1066,9 @@ static struct i2c_algorithm cx24123_tune
 static struct i2c_algorithm cx24123_tuner_i2c_algo = {
        .master_xfer   = cx24123_tuner_i2c_tuner_xfer,
        .functionality = cx24123_tuner_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 struct i2c_adapter *
diff -r ef952708012b -r 5bfadacec8a2 
linux/drivers/media/dvb/frontends/dibx000_common.c
--- a/linux/drivers/media/dvb/frontends/dibx000_common.c        Mon Nov 24 
13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/frontends/dibx000_common.c        Tue Nov 25 
09:07:00 2008 -0200
@@ -1,6 +1,7 @@
 #include <linux/i2c.h>
 
 #include "dibx000_common.h"
+#include "compat.h"
 
 static int debug;
 module_param(debug, int, 0644);
@@ -107,6 +108,9 @@ static struct i2c_algorithm dibx000_i2c_
 static struct i2c_algorithm dibx000_i2c_gated_tuner_algo = {
        .master_xfer   = dibx000_i2c_gated_tuner_xfer,
        .functionality = dibx000_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 struct i2c_adapter * dibx000_get_i2c_adapter(struct dibx000_i2c_master *mst, 
enum dibx000_i2c_interface intf, int gating)
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/dvb/frontends/s5h1420.c
--- a/linux/drivers/media/dvb/frontends/s5h1420.c       Mon Nov 24 13:56:06 
2008 +0100
+++ b/linux/drivers/media/dvb/frontends/s5h1420.c       Tue Nov 25 09:07:00 
2008 -0200
@@ -37,6 +37,7 @@
 #include "dvb_frontend.h"
 #include "s5h1420.h"
 #include "s5h1420_priv.h"
+#include "compat.h"
 
 #define TONE_FREQ 22000
 
@@ -904,6 +905,9 @@ static struct i2c_algorithm s5h1420_tune
 static struct i2c_algorithm s5h1420_tuner_i2c_algo = {
        .master_xfer   = s5h1420_tuner_i2c_tuner_xfer,
        .functionality = s5h1420_tuner_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 struct i2c_adapter *s5h1420_get_tuner_i2c_adapter(struct dvb_frontend *fe)
diff -r ef952708012b -r 5bfadacec8a2 
linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
--- a/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c   Mon Nov 24 
13:56:06 2008 +0100
+++ b/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c   Tue Nov 25 
09:07:00 2008 -0200
@@ -1657,6 +1657,9 @@ static struct i2c_algorithm ttusb_dec_al
 static struct i2c_algorithm ttusb_dec_algo = {
        .master_xfer    = master_xfer,
        .functionality  = functionality,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static int ttusb_probe(struct usb_interface *intf, const struct usb_device_id 
*id)
diff -r ef952708012b -r 5bfadacec8a2 
linux/drivers/media/video/au0828/au0828-i2c.c
--- a/linux/drivers/media/video/au0828/au0828-i2c.c     Mon Nov 24 13:56:06 
2008 +0100
+++ b/linux/drivers/media/video/au0828/au0828-i2c.c     Tue Nov 25 09:07:00 
2008 -0200
@@ -301,6 +301,9 @@ static struct i2c_algorithm au0828_i2c_a
 static struct i2c_algorithm au0828_i2c_algo_template = {
        .master_xfer    = i2c_xfer,
        .functionality  = au0828_functionality,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 /* ----------------------------------------------------------------------- */
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/video/bt8xx/bttv-i2c.c
--- a/linux/drivers/media/video/bt8xx/bttv-i2c.c        Mon Nov 24 13:56:06 
2008 +0100
+++ b/linux/drivers/media/video/bt8xx/bttv-i2c.c        Tue Nov 25 09:07:00 
2008 -0200
@@ -260,6 +260,9 @@ static const struct i2c_algorithm bttv_a
 static const struct i2c_algorithm bttv_algo = {
        .master_xfer   = bttv_i2c_xfer,
        .functionality = functionality,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 /* ----------------------------------------------------------------------- */
diff -r ef952708012b -r 5bfadacec8a2 
linux/drivers/media/video/cx23885/cx23885-i2c.c
--- a/linux/drivers/media/video/cx23885/cx23885-i2c.c   Mon Nov 24 13:56:06 
2008 +0100
+++ b/linux/drivers/media/video/cx23885/cx23885-i2c.c   Tue Nov 25 09:07:00 
2008 -0200
@@ -353,6 +353,9 @@ static struct i2c_algorithm cx23885_i2c_
 static struct i2c_algorithm cx23885_i2c_algo_template = {
        .master_xfer    = i2c_xfer,
        .functionality  = cx23885_functionality,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 /* ----------------------------------------------------------------------- */
diff -r ef952708012b -r 5bfadacec8a2 
linux/drivers/media/video/em28xx/em28xx-i2c.c
--- a/linux/drivers/media/video/em28xx/em28xx-i2c.c     Mon Nov 24 13:56:06 
2008 +0100
+++ b/linux/drivers/media/video/em28xx/em28xx-i2c.c     Tue Nov 25 09:07:00 
2008 -0200
@@ -521,6 +521,9 @@ static struct i2c_algorithm em28xx_algo 
 static struct i2c_algorithm em28xx_algo = {
        .master_xfer   = em28xx_i2c_xfer,
        .functionality = functionality,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static struct i2c_adapter em28xx_adap_template = {
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/video/ivtv/ivtv-i2c.c
--- a/linux/drivers/media/video/ivtv/ivtv-i2c.c Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/video/ivtv/ivtv-i2c.c Tue Nov 25 09:07:00 2008 -0200
@@ -550,6 +550,9 @@ static struct i2c_algorithm ivtv_algo = 
 static struct i2c_algorithm ivtv_algo = {
        .master_xfer   = ivtv_xfer,
        .functionality = ivtv_functionality,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 /* template for our-bit banger */
diff -r ef952708012b -r 5bfadacec8a2 
linux/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c
--- a/linux/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c      Mon Nov 24 
13:56:06 2008 +0100
+++ b/linux/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c      Tue Nov 25 
09:07:00 2008 -0200
@@ -1013,6 +1013,9 @@ static struct i2c_algorithm pvr2_i2c_alg
 static struct i2c_algorithm pvr2_i2c_algo_template = {
        .master_xfer   = pvr2_i2c_xfer,
        .functionality = pvr2_i2c_functionality,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static struct i2c_adapter pvr2_i2c_adap_template = {
diff -r ef952708012b -r 5bfadacec8a2 
linux/drivers/media/video/saa7134/saa7134-i2c.c
--- a/linux/drivers/media/video/saa7134/saa7134-i2c.c   Mon Nov 24 13:56:06 
2008 +0100
+++ b/linux/drivers/media/video/saa7134/saa7134-i2c.c   Tue Nov 25 09:07:00 
2008 -0200
@@ -358,6 +358,9 @@ static struct i2c_algorithm saa7134_algo
 static struct i2c_algorithm saa7134_algo = {
        .master_xfer   = saa7134_i2c_xfer,
        .functionality = functionality,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 static struct i2c_adapter saa7134_adap_template = {
diff -r ef952708012b -r 5bfadacec8a2 
linux/drivers/media/video/usbvision/usbvision-i2c.c
--- a/linux/drivers/media/video/usbvision/usbvision-i2c.c       Mon Nov 24 
13:56:06 2008 +0100
+++ b/linux/drivers/media/video/usbvision/usbvision-i2c.c       Tue Nov 25 
09:07:00 2008 -0200
@@ -198,6 +198,9 @@ static struct i2c_algorithm usbvision_al
        .master_xfer   = usbvision_i2c_xfer,
        .smbus_xfer    = NULL,
        .functionality = functionality,
+#ifdef NEED_ALGO_CONTROL
+       .algo_control = dummy_algo_control,
+#endif
 };
 
 
diff -r ef952708012b -r 5bfadacec8a2 linux/drivers/media/video/w9968cf.c
--- a/linux/drivers/media/video/w9968cf.c       Mon Nov 24 13:56:06 2008 +0100
+++ b/linux/drivers/media/video/w9968cf.c       Tue Nov 25 09:07:00 2008 -0200
@@ -1557,6 +1557,9 @@ static int w9968cf_i2c_init(struct w9968
        static struct i2c_algorithm algo = {
                .smbus_xfer =    w9968cf_i2c_smbus_xfer,
                .functionality = w9968cf_i2c_func,
+#ifdef NEED_ALGO_CONTROL
+               .algo_control = dummy_algo_control,
+#endif
        };
 
        static struct i2c_adapter adap = {
diff -r ef952708012b -r 5bfadacec8a2 v4l/compat.h
--- a/v4l/compat.h      Mon Nov 24 13:56:06 2008 +0100
+++ b/v4l/compat.h      Tue Nov 25 09:07:00 2008 -0200
@@ -25,6 +25,10 @@
 /* To allow alsa code to work */
 #ifdef NEED_SOUND_DRIVER_H
 #include <sound/driver.h>
+#endif
+
+#ifdef NEED_ALGO_CONTROL
+#include <linux/i2c.h>
 #endif
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
@@ -231,6 +235,14 @@ static inline int list_is_singular(const
                                             ( x ) ) )
 #endif
 
+#ifdef NEED_ALGO_CONTROL
+static inline int dummy_algo_control(struct i2c_adapter *adapter,
+                            unsigned int cmd, unsigned long arg)
+{
+       return 0;
+}
+#endif
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
 #define div64_u64(a,b) div64_64(a,b)
 
diff -r ef952708012b -r 5bfadacec8a2 v4l/scripts/gentree.pl
--- a/v4l/scripts/gentree.pl    Mon Nov 24 13:56:06 2008 +0100
+++ b/v4l/scripts/gentree.pl    Tue Nov 25 09:07:00 2008 -0200
@@ -74,6 +74,7 @@ my %defs = (
        'NEED_SOUND_DRIVER_H' => 0,
        'TTUSB_KERNEL' => 1,
        'NO_PCM_LOCK' => 0,
+       'NEED_ALGO_CONTROL' => 0,
 );
 
 #################################################################
diff -r ef952708012b -r 5bfadacec8a2 v4l/scripts/make_config_compat.pl
--- a/v4l/scripts/make_config_compat.pl Mon Nov 24 13:56:06 2008 +0100
+++ b/v4l/scripts/make_config_compat.pl Tue Nov 25 09:07:00 2008 -0200
@@ -174,6 +174,25 @@ sub check_pcm_lock()
 
        if ($need_compat) {
                $out.= "\n#define NO_PCM_LOCK 1\n";
+       }
+       close INNET;
+}
+
+sub check_algo_control()
+{
+       my $file = "$kdir/include/linux/i2c.h";
+       my $need_compat = 0;
+
+       open INNET, "<$file" or die "File not found: $file";
+       while (<INNET>) {
+               if (m/algo_control/) {
+                       $need_compat = 1;
+                       last;
+               }
+       }
+
+       if ($need_compat) {
+               $out.= "\n#define NEED_ALGO_CONTROL 1\n";
        }
        close INNET;
 }
@@ -189,6 +208,7 @@ sub check_other_dependencies()
        check_clamp();
        check_proc_create();
        check_pcm_lock();
+       check_algo_control();
 }
 
 # Do the basic rules


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/5bfadacec8a2c8cda44daaadcc89e1af971b0e2b

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to