diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-07-09 11:36:58 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-07-27 16:55:48 -0400 |
commit | 0fc55e81d3364e6535cacb10b5a579f8c62625b1 (patch) | |
tree | 28e84110be681bd247568f70a71a406254a54675 | |
parent | 5e66b87840dd275eafa6b4135b174212dd7c0d75 (diff) |
[media] drxk: Move I2C address into a config structure
Currently, the only parameter to be configured is the I2C
address. However, Terratec H5 logs shows that it needs a different
setting for some things, and it has its own firmware.
So, move the addr into a config structure, in order to allow adding
the required configuration bits.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r-- | drivers/media/dvb/ddbridge/ddbridge-core.c | 8 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/drxk.h | 8 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/drxk_hard.c | 4 | ||||
-rw-r--r-- | drivers/media/dvb/ngene/ngene-cards.c | 9 |
4 files changed, 20 insertions, 9 deletions
diff --git a/drivers/media/dvb/ddbridge/ddbridge-core.c b/drivers/media/dvb/ddbridge/ddbridge-core.c index def03d482dc0..573d540f213e 100644 --- a/drivers/media/dvb/ddbridge/ddbridge-core.c +++ b/drivers/media/dvb/ddbridge/ddbridge-core.c | |||
@@ -574,10 +574,12 @@ static int demod_attach_drxk(struct ddb_input *input) | |||
574 | { | 574 | { |
575 | struct i2c_adapter *i2c = &input->port->i2c->adap; | 575 | struct i2c_adapter *i2c = &input->port->i2c->adap; |
576 | struct dvb_frontend *fe; | 576 | struct dvb_frontend *fe; |
577 | struct drxk_config config; | ||
577 | 578 | ||
578 | fe = input->fe = dvb_attach(drxk_attach, | 579 | memset(&config, 0, sizeof(config)); |
579 | i2c, 0x29 + (input->nr&1), | 580 | config.adr = 0x29 + (input->nr & 1); |
580 | &input->fe2); | 581 | |
582 | fe = input->fe = dvb_attach(drxk_attach, &config, i2c, &input->fe2); | ||
581 | if (!input->fe) { | 583 | if (!input->fe) { |
582 | printk(KERN_ERR "No DRXK found!\n"); | 584 | printk(KERN_ERR "No DRXK found!\n"); |
583 | return -ENODEV; | 585 | return -ENODEV; |
diff --git a/drivers/media/dvb/frontends/drxk.h b/drivers/media/dvb/frontends/drxk.h index d1c133e065ff..a7b295f82a86 100644 --- a/drivers/media/dvb/frontends/drxk.h +++ b/drivers/media/dvb/frontends/drxk.h | |||
@@ -4,7 +4,11 @@ | |||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <linux/i2c.h> | 5 | #include <linux/i2c.h> |
6 | 6 | ||
7 | extern struct dvb_frontend *drxk_attach(struct i2c_adapter *i2c, | 7 | struct drxk_config { |
8 | u8 adr, | 8 | u8 adr; |
9 | }; | ||
10 | |||
11 | extern struct dvb_frontend *drxk_attach(const struct drxk_config *config, | ||
12 | struct i2c_adapter *i2c, | ||
9 | struct dvb_frontend **fe_t); | 13 | struct dvb_frontend **fe_t); |
10 | #endif | 14 | #endif |
diff --git a/drivers/media/dvb/frontends/drxk_hard.c b/drivers/media/dvb/frontends/drxk_hard.c index 8b2e06ea5c08..d351e6a630fc 100644 --- a/drivers/media/dvb/frontends/drxk_hard.c +++ b/drivers/media/dvb/frontends/drxk_hard.c | |||
@@ -6341,10 +6341,12 @@ static struct dvb_frontend_ops drxk_t_ops = { | |||
6341 | .read_ucblocks = drxk_read_ucblocks, | 6341 | .read_ucblocks = drxk_read_ucblocks, |
6342 | }; | 6342 | }; |
6343 | 6343 | ||
6344 | struct dvb_frontend *drxk_attach(struct i2c_adapter *i2c, u8 adr, | 6344 | struct dvb_frontend *drxk_attach(const struct drxk_config *config, |
6345 | struct i2c_adapter *i2c, | ||
6345 | struct dvb_frontend **fe_t) | 6346 | struct dvb_frontend **fe_t) |
6346 | { | 6347 | { |
6347 | struct drxk_state *state = NULL; | 6348 | struct drxk_state *state = NULL; |
6349 | u8 adr = config->adr; | ||
6348 | 6350 | ||
6349 | dprintk(1, "\n"); | 6351 | dprintk(1, "\n"); |
6350 | state = kzalloc(sizeof(struct drxk_state), GFP_KERNEL); | 6352 | state = kzalloc(sizeof(struct drxk_state), GFP_KERNEL); |
diff --git a/drivers/media/dvb/ngene/ngene-cards.c b/drivers/media/dvb/ngene/ngene-cards.c index 9f72dd8e9fbd..056419228363 100644 --- a/drivers/media/dvb/ngene/ngene-cards.c +++ b/drivers/media/dvb/ngene/ngene-cards.c | |||
@@ -213,9 +213,12 @@ static int port_has_drxk(struct i2c_adapter *i2c, int port) | |||
213 | static int demod_attach_drxk(struct ngene_channel *chan, | 213 | static int demod_attach_drxk(struct ngene_channel *chan, |
214 | struct i2c_adapter *i2c) | 214 | struct i2c_adapter *i2c) |
215 | { | 215 | { |
216 | chan->fe = dvb_attach(drxk_attach, | 216 | struct drxk_config config; |
217 | i2c, 0x29 + (chan->number^2), | 217 | |
218 | &chan->fe2); | 218 | memset(&config, 0, sizeof(config)); |
219 | config.adr = 0x29 + (chan->number ^ 2); | ||
220 | |||
221 | chan->fe = dvb_attach(drxk_attach, &config, i2c, &chan->fe2); | ||
219 | if (!chan->fe) { | 222 | if (!chan->fe) { |
220 | printk(KERN_ERR "No DRXK found!\n"); | 223 | printk(KERN_ERR "No DRXK found!\n"); |
221 | return -ENODEV; | 224 | return -ENODEV; |