[i2c] [patch 2.6.21-rc3-git +i2c 1/4] remove i2c_client.driver
Jean Delvare
khali at linux-fr.org
Wed Mar 14 19:12:24 CET 2007
Hi David,
On Mon, 12 Mar 2007 10:39:25 -0800, David Brownell wrote:
> Remove some more (error prone) duplication in the i2c stack:
>
> i2c_client.driver == to_i2c_driver(i2c_client.dev.driver)
>
> The i2c_client.driver field should be removed, since the driver model
> field is more fundamental. This means that all legacy I2C drivers need
> to change the line which previously initialized that field ... making
> this a large patch.
> (...)
> NOTE: Not everything here has been test-built. Also, some parts of this
> could be merged before the actual removal of i2c_client.driver, helping
> create smaller patches: the parts that don't initialize either field,
> but need the driver for equality testing or its name for diagnostics.
Here are the additional changes I had to make to get my kernel to
compile again on i386:
Signed-off-by: Jean Delvare <khali at linux-fr.org>
---
drivers/media/video/bt8xx/bttv-driver.c | 6 +-
drivers/media/video/bt8xx/bttv-i2c.c | 8 +-
drivers/media/video/cafe_ccic.c | 7 +-
drivers/media/video/cx25840/cx25840-core.c | 2
drivers/media/video/cx88/cx88-i2c.c | 12 ++--
drivers/media/video/mxb.c | 93 +++++++++++++++++-----------
drivers/media/video/saa7134/saa6752hs.c | 4 +
drivers/media/video/saa7134/saa7134-i2c.c | 14 ++--
drivers/media/video/tda7432.c | 4 +
drivers/media/video/zoran_card.c | 6 +-
drivers/media/video/zoran_device.c | 13 +++-
drivers/media/video/zoran_driver.c | 14 ++--
drivers/rtc/rtc-ds1307.c | 2
13 files changed, 112 insertions(+), 73 deletions(-)
(The rtc-ds1307 driver should no longer need to be touched if ported to
the new model according to another post of yours.)
--- linux-2.6.21-rc3.orig/drivers/media/video/tda7432.c 2007-02-21 08:36:09.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/tda7432.c 2007-03-13 14:15:17.000000000 +0100
@@ -497,7 +497,9 @@ static struct i2c_driver driver = {
static struct i2c_client client_template =
{
.name = "tda7432",
- .driver = &driver,
+ .dev = {
+ .driver = &driver.driver,
+ },
};
static int __init tda7432_init(void)
--- linux-2.6.21-rc3.orig/drivers/media/video/mxb.c 2007-02-04 19:44:54.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/mxb.c 2007-03-13 14:51:57.000000000 +0100
@@ -331,62 +331,71 @@ static int mxb_init_done(struct saa7146_
int i = 0, err = 0;
struct tea6415c_multiplex vm;
+ struct i2c_driver *saa7111a_driver, *tuner_driver,
+ *tea6420_1_driver, *tea6420_2_driver,
+ *tea6415c_driver, *tda9840_driver;
+
+ saa7111a_driver = to_i2c_driver(mxb->saa7111a->dev.driver);
+ tuner_driver = to_i2c_driver(mxb->tuner->dev.driver);
+ tea6420_1_driver = to_i2c_driver(mxb->tea6420_1->dev.driver);
+ tea6420_2_driver = to_i2c_driver(mxb->tea6420_2->dev.driver);
+ tea6415c_driver = to_i2c_driver(mxb->tea6415c->dev.driver);
+ tda9840_driver = to_i2c_driver(mxb->tda9840->dev.driver);
/* select video mode in saa7111a */
i = VIDEO_MODE_PAL;
/* fixme: currently pointless: gets overwritten by configuration below */
- mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_NORM, &i);
+ saa7111a_driver->command(mxb->saa7111a,DECODER_SET_NORM, &i);
/* write configuration to saa7111a */
init.data = mxb_saa7111_init;
init.len = sizeof(mxb_saa7111_init);
- mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_INIT, &init);
+ saa7111a_driver->command(mxb->saa7111a,DECODER_INIT, &init);
/* select tuner-output on saa7111a */
i = 0;
- mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_INPUT, &i);
+ saa7111a_driver->command(mxb->saa7111a,DECODER_SET_INPUT, &i);
/* enable vbi bypass */
i = 1;
- mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_VBI_BYPASS, &i);
+ saa7111a_driver->command(mxb->saa7111a,DECODER_SET_VBI_BYPASS, &i);
/* select a tuner type */
tun_setup.mode_mask = T_ANALOG_TV;
tun_setup.addr = ADDR_UNSET;
tun_setup.type = TUNER_PHILIPS_PAL;
- mxb->tuner->driver->command(mxb->tuner,TUNER_SET_TYPE_ADDR, &tun_setup);
+ tuner_driver->command(mxb->tuner,TUNER_SET_TYPE_ADDR, &tun_setup);
/* tune in some frequency on tuner */
mxb->cur_freq.tuner = 0;
mxb->cur_freq.type = V4L2_TUNER_ANALOG_TV;
mxb->cur_freq.frequency = freq;
- mxb->tuner->driver->command(mxb->tuner, VIDIOC_S_FREQUENCY,
- &mxb->cur_freq);
+ tuner_driver->command(mxb->tuner, VIDIOC_S_FREQUENCY, &mxb->cur_freq);
/* set a default video standard */
- mxb->tuner->driver->command(mxb->tuner, VIDIOC_S_STD, &std);
+ tuner_driver->command(mxb->tuner, VIDIOC_S_STD, &std);
/* mute audio on tea6420s */
- mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[6][0]);
- mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[6][1]);
- mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_cd[6][0]);
- mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_cd[6][1]);
+ tea6420_1_driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[6][0]);
+ tea6420_2_driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[6][1]);
+ tea6420_1_driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_cd[6][0]);
+ tea6420_2_driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_cd[6][1]);
/* switch to tuner-channel on tea6415c*/
vm.out = 17;
vm.in = 3;
- mxb->tea6415c->driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm);
+ tea6415c_driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm);
/* select tuner-output on multicable on tea6415c*/
vm.in = 3;
vm.out = 13;
- mxb->tea6415c->driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm);
+ tea6415c_driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm);
/* the rest for mxb */
mxb->cur_input = 0;
mxb->cur_mute = 1;
mxb->cur_mode = V4L2_TUNER_MODE_STEREO;
- mxb->tda9840->driver->command(mxb->tda9840, TDA9840_SWITCH, &mxb->cur_mode);
+ tda9840_driver->command(mxb->tda9840, TDA9840_SWITCH, &mxb->cur_mode);
/* check if the saa7740 (aka 'sound arena module') is present
on the mxb. if so, we must initialize it. due to lack of
@@ -518,6 +527,16 @@ static int mxb_ioctl(struct saa7146_fh *
struct saa7146_dev *dev = fh->dev;
struct mxb* mxb = (struct mxb*)dev->ext_priv;
struct saa7146_vv *vv = dev->vv_data;
+ struct i2c_driver *saa7111a_driver, *tuner_driver,
+ *tea6420_1_driver, *tea6420_2_driver,
+ *tea6415c_driver, *tda9840_driver;
+
+ saa7111a_driver = to_i2c_driver(mxb->saa7111a->dev.driver);
+ tuner_driver = to_i2c_driver(mxb->tuner->dev.driver);
+ tea6420_1_driver = to_i2c_driver(mxb->tea6420_1->dev.driver);
+ tea6420_2_driver = to_i2c_driver(mxb->tea6420_2->dev.driver);
+ tea6415c_driver = to_i2c_driver(mxb->tea6415c->dev.driver);
+ tda9840_driver = to_i2c_driver(mxb->tda9840->dev.driver);
switch(cmd) {
case VIDIOC_ENUMINPUT:
@@ -596,11 +615,11 @@ static int mxb_ioctl(struct saa7146_fh *
mxb->cur_mute = vc->value;
if( 0 == vc->value ) {
/* switch the audio-source */
- mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[mxb->cur_input]][0]);
- mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[mxb->cur_input]][1]);
+ tea6420_1_driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[mxb->cur_input]][0]);
+ tea6420_2_driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[mxb->cur_input]][1]);
} else {
- mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[6][0]);
- mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[6][1]);
+ tea6420_1_driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[6][0]);
+ tea6420_2_driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[6][1]);
}
DEB_EE(("VIDIOC_S_CTRL, V4L2_CID_AUDIO_MUTE: %d.\n",vc->value));
break;
@@ -655,7 +674,7 @@ static int mxb_ioctl(struct saa7146_fh *
vm.in = 3;
vm.out = 17;
- if ( 0 != mxb->tea6415c->driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm)) {
+ if ( 0 != tea6415c_driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm)) {
printk("VIDIOC_S_INPUT: could not address tea6415c #1\n");
return -EFAULT;
}
@@ -692,7 +711,7 @@ static int mxb_ioctl(struct saa7146_fh *
case TUNER:
case AUX1:
{
- if ( 0 != mxb->tea6415c->driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm)) {
+ if ( 0 != tea6415c_driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm)) {
printk("VIDIOC_S_INPUT: could not address tea6415c #3\n");
return -EFAULT;
}
@@ -705,14 +724,14 @@ static int mxb_ioctl(struct saa7146_fh *
}
/* switch video in saa7111a */
- if ( 0 != mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_INPUT, &i)) {
+ if ( 0 != saa7111a_driver->command(mxb->saa7111a,DECODER_SET_INPUT, &i)) {
printk("VIDIOC_S_INPUT: could not address saa7111a #1.\n");
}
/* switch the audio-source only if necessary */
if( 0 == mxb->cur_mute ) {
- mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[input]][0]);
- mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[input]][1]);
+ tea6420_1_driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[input]][0]);
+ tea6420_2_driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[input]][1]);
}
return 0;
@@ -740,7 +759,7 @@ static int mxb_ioctl(struct saa7146_fh *
t->signal = 0xffff;
t->afc = 0;
- mxb->tda9840->driver->command(mxb->tda9840,TDA9840_DETECT, &byte);
+ tda9840_driver->command(mxb->tda9840,TDA9840_DETECT, &byte);
t->audmode = mxb->cur_mode;
if( byte < 0 ) {
@@ -816,7 +835,7 @@ static int mxb_ioctl(struct saa7146_fh *
}
}
- if( 0 != (result = mxb->tda9840->driver->command(mxb->tda9840, TDA9840_SWITCH, &byte))) {
+ if( 0 != (result = tda9840_driver->command(mxb->tda9840, TDA9840_SWITCH, &byte))) {
printk("VIDIOC_S_TUNER error. result:%d, byte:%d\n",result,byte);
}
@@ -855,7 +874,7 @@ static int mxb_ioctl(struct saa7146_fh *
DEB_EE(("VIDIOC_S_FREQUENCY: freq:0x%08x.\n", mxb->cur_freq.frequency));
/* tune in desired frequency */
- mxb->tuner->driver->command(mxb->tuner, VIDIOC_S_FREQUENCY, &mxb->cur_freq);
+ tuner_driver->command(mxb->tuner, VIDIOC_S_FREQUENCY, &mxb->cur_freq);
/* hack: changing the frequency should invalidate the vbi-counter (=> alevt) */
spin_lock(&dev->slock);
@@ -875,8 +894,8 @@ static int mxb_ioctl(struct saa7146_fh *
DEB_EE(("MXB_S_AUDIO_CD: i:%d.\n",i));
- mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_cd[i][0]);
- mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_cd[i][1]);
+ tea6420_1_driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_cd[i][0]);
+ tea6420_2_driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_cd[i][1]);
return 0;
}
@@ -890,8 +909,8 @@ static int mxb_ioctl(struct saa7146_fh *
}
DEB_EE(("MXB_S_AUDIO_LINE: i:%d.\n",i));
- mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[i][0]);
- mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[i][1]);
+ tea6420_1_driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[i][0]);
+ tea6420_2_driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[i][1]);
return 0;
}
@@ -929,6 +948,10 @@ static int std_callback(struct saa7146_d
struct mxb* mxb = (struct mxb*)dev->ext_priv;
int zero = 0;
int one = 1;
+ struct i2c_driver *saa7111a_driver, *tuner_driver;
+
+ saa7111a_driver = to_i2c_driver(mxb->saa7111a->dev.driver);
+ tuner_driver = to_i2c_driver(mxb->tuner->dev.driver);
if(V4L2_STD_PAL_I == std->id ) {
v4l2_std_id std = V4L2_STD_PAL_I;
@@ -936,16 +959,16 @@ static int std_callback(struct saa7146_d
/* set the 7146 gpio register -- I don't know what this does exactly */
saa7146_write(dev, GPIO_CTRL, 0x00404050);
/* unset the 7111 gpio register -- I don't know what this does exactly */
- mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_GPIO, &zero);
- mxb->tuner->driver->command(mxb->tuner, VIDIOC_S_STD, &std);
+ saa7111a_driver->command(mxb->saa7111a,DECODER_SET_GPIO, &zero);
+ tuner_driver->command(mxb->tuner, VIDIOC_S_STD, &std);
} else {
v4l2_std_id std = V4L2_STD_PAL_BG;
DEB_D(("VIDIOC_S_STD: setting mxb for PAL/NTSC/SECAM.\n"));
/* set the 7146 gpio register -- I don't know what this does exactly */
saa7146_write(dev, GPIO_CTRL, 0x00404050);
/* set the 7111 gpio register -- I don't know what this does exactly */
- mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_GPIO, &one);
- mxb->tuner->driver->command(mxb->tuner, VIDIOC_S_STD, &std);
+ saa7111a_driver->command(mxb->saa7111a,DECODER_SET_GPIO, &one);
+ tuner_driver->command(mxb->tuner, VIDIOC_S_STD, &std);
}
return 0;
}
--- linux-2.6.21-rc3.orig/drivers/media/video/zoran_card.c 2007-02-21 08:36:09.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/zoran_card.c 2007-03-13 14:28:44.000000000 +0100
@@ -759,7 +759,7 @@ zoran_i2c_client_register (struct i2c_cl
dprintk(2,
KERN_DEBUG "%s: i2c_client_register() - driver id = %d\n",
- ZR_DEVNAME(zr), client->driver->id);
+ ZR_DEVNAME(zr), to_i2c_driver(client->dev.driver)->id);
mutex_lock(&zr->resource_lock);
@@ -772,9 +772,9 @@ zoran_i2c_client_register (struct i2c_cl
goto clientreg_unlock_and_return;
}
- if (client->driver->id == zr->card.i2c_decoder)
+ if (to_i2c_driver(client->dev.driver)->id == zr->card.i2c_decoder)
zr->decoder = client;
- else if (client->driver->id == zr->card.i2c_encoder)
+ else if (to_i2c_driver(client->dev.driver)->id == zr->card.i2c_encoder)
zr->encoder = client;
else {
res = -ENODEV;
--- linux-2.6.21-rc3.orig/drivers/media/video/zoran_device.c 2007-02-04 19:44:54.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/zoran_device.c 2007-03-13 14:19:41.000000000 +0100
@@ -1753,9 +1753,12 @@ decoder_command (struct zoran *zr,
int cmd,
void *data)
{
+ struct i2c_driver *driver;
+
if (zr->decoder == NULL)
return -EIO;
+ driver = to_i2c_driver(zr->decoder->dev.driver);
if (zr->card.type == LML33 &&
(cmd == DECODER_SET_NORM || DECODER_SET_INPUT)) {
int res;
@@ -1763,13 +1766,12 @@ decoder_command (struct zoran *zr,
// Bt819 needs to reset its FIFO buffer using #FRST pin and
// LML33 card uses GPIO(7) for that.
GPIO(zr, 7, 0);
- res = zr->decoder->driver->command(zr->decoder, cmd, data);
+ res = driver->command(zr->decoder, cmd, data);
// Pull #FRST high.
GPIO(zr, 7, 1);
return res;
} else
- return zr->decoder->driver->command(zr->decoder, cmd,
- data);
+ return driver->command(zr->decoder, cmd, data);
}
int
@@ -1777,8 +1779,11 @@ encoder_command (struct zoran *zr,
int cmd,
void *data)
{
+ struct i2c_driver *driver;
+
if (zr->encoder == NULL)
return -1;
- return zr->encoder->driver->command(zr->encoder, cmd, data);
+ driver = to_i2c_driver(zr->encoder->dev.driver);
+ return driver->command(zr->encoder, cmd, data);
}
--- linux-2.6.21-rc3.orig/drivers/media/video/zoran_driver.c 2007-02-21 08:36:09.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/zoran_driver.c 2007-03-13 14:23:39.000000000 +0100
@@ -1311,7 +1311,7 @@ zoran_open (struct inode *inode,
res = -ENODEV;
goto open_unlock_and_return;
}
- if (!try_module_get(zr->decoder->driver->driver.owner)) {
+ if (!try_module_get(zr->decoder->dev.driver->owner)) {
dprintk(1,
KERN_ERR
"%s: failed to grab ownership of i2c decoder\n",
@@ -1321,13 +1321,13 @@ zoran_open (struct inode *inode,
goto open_unlock_and_return;
}
if (zr->encoder &&
- !try_module_get(zr->encoder->driver->driver.owner)) {
+ !try_module_get(zr->encoder->dev.driver->owner)) {
dprintk(1,
KERN_ERR
"%s: failed to grab ownership of i2c encoder\n",
ZR_DEVNAME(zr));
res = -EIO;
- module_put(zr->decoder->driver->driver.owner);
+ module_put(zr->decoder->dev.driver->owner);
module_put(THIS_MODULE);
goto open_unlock_and_return;
}
@@ -1392,9 +1392,9 @@ zoran_open (struct inode *inode,
open_unlock_and_return:
/* if we grabbed locks, release them accordingly */
if (have_module_locks) {
- module_put(zr->decoder->driver->driver.owner);
+ module_put(zr->decoder->dev.driver->owner);
if (zr->encoder) {
- module_put(zr->encoder->driver->driver.owner);
+ module_put(zr->encoder->dev.driver->owner);
}
module_put(THIS_MODULE);
}
@@ -1460,9 +1460,9 @@ zoran_close (struct inode *inode,
kfree(fh);
/* release locks on the i2c modules */
- module_put(zr->decoder->driver->driver.owner);
+ module_put(zr->decoder->dev.driver->owner);
if (zr->encoder) {
- module_put(zr->encoder->driver->driver.owner);
+ module_put(zr->encoder->dev.driver->owner);
}
module_put(THIS_MODULE);
--- linux-2.6.21-rc3.orig/drivers/media/video/bt8xx/bttv-driver.c 2007-02-28 09:48:20.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/bt8xx/bttv-driver.c 2007-03-13 14:59:40.000000000 +0100
@@ -1204,7 +1204,8 @@ audio_mux(struct bttv *btv, int input, i
break;
}
route.output = MSP_OUTPUT_DEFAULT;
- c->driver->command(c, VIDIOC_INT_S_AUDIO_ROUTING, &route);
+ to_i2c_driver(c->dev.driver)->command(c,
+ VIDIOC_INT_S_AUDIO_ROUTING, &route);
}
c = btv->i2c_tvaudio_client;
if (c) {
@@ -1212,7 +1213,8 @@ audio_mux(struct bttv *btv, int input, i
route.input = input;
route.output = 0;
- c->driver->command(c, VIDIOC_INT_S_AUDIO_ROUTING, &route);
+ to_i2c_driver(c->dev.driver)->command(c,
+ VIDIOC_INT_S_AUDIO_ROUTING, &route);
}
return 0;
}
--- linux-2.6.21-rc3.orig/drivers/media/video/bt8xx/bttv-i2c.c 2007-02-09 09:15:20.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/bt8xx/bttv-i2c.c 2007-03-13 15:05:48.000000000 +0100
@@ -307,14 +307,14 @@ static int attach_inform(struct i2c_clie
if (bttv_debug)
printk(KERN_DEBUG "bttv%d: %s i2c attach [addr=0x%x,client=%s]\n",
- btv->c.nr, client->driver->driver.name, client->addr,
+ btv->c.nr, client->dev.driver->name, client->addr,
client->name);
- if (!client->driver->command)
+ if (!to_i2c_driver(client->dev.driver)->command)
return 0;
- if (client->driver->id == I2C_DRIVERID_MSP3400)
+ if (to_i2c_driver(client->dev.driver)->id == I2C_DRIVERID_MSP3400)
btv->i2c_msp34xx_client = client;
- if (client->driver->id == I2C_DRIVERID_TVAUDIO)
+ if (to_i2c_driver(client->dev.driver)->id == I2C_DRIVERID_TVAUDIO)
btv->i2c_tvaudio_client = client;
if (btv->tuner_type != UNSET) {
struct tuner_setup tun_setup;
--- linux-2.6.21-rc3.orig/drivers/media/video/cafe_ccic.c 2007-03-08 07:31:02.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/cafe_ccic.c 2007-03-13 14:57:58.000000000 +0100
@@ -515,7 +515,7 @@ static int cafe_smbus_attach(struct i2c_
/*
* Don't talk to chips we don't recognize.
*/
- if (client->driver->id == I2C_DRIVERID_OV7670) {
+ if (to_i2c_driver(client->dev.driver)->id == I2C_DRIVERID_OV7670) {
cam->sensor = client;
return cafe_cam_init(cam);
}
@@ -798,9 +798,10 @@ static int __cafe_cam_cmd(struct cafe_ca
struct i2c_client *sc = cam->sensor;
int ret;
- if (sc == NULL || sc->driver == NULL || sc->driver->command == NULL)
+ if (sc == NULL || sc->dev.driver == NULL ||
+ to_i2c_driver(sc->dev.driver)->command == NULL)
return -EINVAL;
- ret = sc->driver->command(sc, cmd, arg);
+ ret = to_i2c_driver(sc->dev.driver)->command(sc, cmd, arg);
if (ret == -EPERM) /* Unsupported command */
return 0;
return ret;
--- linux-2.6.21-rc3.orig/drivers/media/video/cx25840/cx25840-core.c 2007-03-08 07:31:02.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/cx25840/cx25840-core.c 2007-03-13 15:12:35.000000000 +0100
@@ -863,7 +863,7 @@ static int cx25840_detect_client(struct
client = &state->c;
client->addr = address;
client->adapter = adapter;
- client->driver = &i2c_driver_cx25840;
+ client->dev.driver = &i2c_driver_cx25840.driver;
snprintf(client->name, sizeof(client->name) - 1, "cx25840");
v4l_dbg(1, cx25840_debug, client, "detecting cx25840 client on address 0x%x\n", address << 1);
--- linux-2.6.21-rc3.orig/drivers/media/video/cx88/cx88-i2c.c 2007-02-28 09:48:20.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/cx88/cx88-i2c.c 2007-03-13 15:16:42.000000000 +0100
@@ -101,10 +101,12 @@ static int attach_inform(struct i2c_clie
{
struct tuner_setup tun_setup;
struct cx88_core *core = i2c_get_adapdata(client->adapter);
+ struct i2c_driver *driver;
dprintk(1, "%s i2c attach [addr=0x%x,client=%s]\n",
- client->driver->driver.name, client->addr, client->name);
- if (!client->driver->command)
+ client->dev.driver->name, client->addr, client->name);
+ driver = to_i2c_driver(client->dev.driver);
+ if (!driver->command)
return 0;
if (core->radio_type != UNSET) {
@@ -113,7 +115,7 @@ static int attach_inform(struct i2c_clie
tun_setup.type = core->radio_type;
tun_setup.addr = core->radio_addr;
- client->driver->command (client, TUNER_SET_TYPE_ADDR, &tun_setup);
+ driver->command (client, TUNER_SET_TYPE_ADDR, &tun_setup);
}
}
if (core->tuner_type != UNSET) {
@@ -123,12 +125,12 @@ static int attach_inform(struct i2c_clie
tun_setup.type = core->tuner_type;
tun_setup.addr = core->tuner_addr;
- client->driver->command (client,TUNER_SET_TYPE_ADDR, &tun_setup);
+ driver->command (client, TUNER_SET_TYPE_ADDR, &tun_setup);
}
}
if (core->tda9887_conf)
- client->driver->command(client, TDA9887_SET_CONFIG, &core->tda9887_conf);
+ driver->command(client, TDA9887_SET_CONFIG, &core->tda9887_conf);
return 0;
}
--- linux-2.6.21-rc3.orig/drivers/media/video/saa7134/saa6752hs.c 2007-02-21 08:36:09.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/saa7134/saa6752hs.c 2007-03-13 15:35:44.000000000 +0100
@@ -818,7 +818,9 @@ static struct i2c_driver driver = {
static struct i2c_client client_template =
{
.name = "saa6752hs",
- .driver = &driver,
+ .dev = {
+ .driver = &driver.driver,
+ },
};
static int __init saa6752hs_init_module(void)
--- linux-2.6.21-rc3.orig/drivers/media/video/saa7134/saa7134-i2c.c 2007-02-28 09:48:20.000000000 +0100
+++ linux-2.6.21-rc3/drivers/media/video/saa7134/saa7134-i2c.c 2007-03-13 15:34:27.000000000 +0100
@@ -332,9 +332,10 @@ static int attach_inform(struct i2c_clie
int tuner = dev->tuner_type;
int conf = dev->tda9887_conf;
struct tuner_setup tun_setup;
+ struct i2c_driver *driver;
d1printk( "%s i2c attach [addr=0x%x,client=%s]\n",
- client->driver->driver.name, client->addr, client->name);
+ client->dev.driver->name, client->addr, client->name);
/* Am I an i2c remote control? */
@@ -345,13 +346,14 @@ static int attach_inform(struct i2c_clie
{
struct IR_i2c *ir = i2c_get_clientdata(client);
d1printk("%s i2c IR detected (%s).\n",
- client->driver->driver.name, ir->phys);
+ client->dev.driver->name, ir->phys);
saa7134_set_i2c_ir(dev,ir);
break;
}
}
- if (!client->driver->command)
+ driver = to_i2c_driver(client->dev.driver);
+ if (driver->command)
return 0;
if (saa7134_boards[dev->board].radio_type != UNSET) {
@@ -362,7 +364,7 @@ static int attach_inform(struct i2c_clie
if ((tun_setup.addr == ADDR_UNSET) || (tun_setup.addr == client->addr)) {
tun_setup.mode_mask = T_RADIO;
- client->driver->command(client, TUNER_SET_TYPE_ADDR, &tun_setup);
+ driver->command(client, TUNER_SET_TYPE_ADDR, &tun_setup);
}
}
@@ -375,11 +377,11 @@ static int attach_inform(struct i2c_clie
tun_setup.mode_mask = T_ANALOG_TV;
- client->driver->command(client,TUNER_SET_TYPE_ADDR, &tun_setup);
+ driver->command(client,TUNER_SET_TYPE_ADDR, &tun_setup);
}
}
- client->driver->command(client, TDA9887_SET_CONFIG, &conf);
+ driver->command(client, TDA9887_SET_CONFIG, &conf);
return 0;
}
--- linux-2.6.21-rc3.orig/drivers/rtc/rtc-ds1307.c 2007-02-04 19:44:54.000000000 +0100
+++ linux-2.6.21-rc3/drivers/rtc/rtc-ds1307.c 2007-03-13 15:37:19.000000000 +0100
@@ -201,7 +201,7 @@ ds1307_detect(struct i2c_adapter *adapte
client = &ds1307->client;
client->addr = address;
client->adapter = adapter;
- client->driver = &ds1307_driver;
+ client->dev.driver = &ds1307_driver.driver;
client->flags = 0;
i2c_set_clientdata(client, ds1307);
--
Jean Delvare
More information about the i2c
mailing list