aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2011-07-09 11:36:58 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-07-27 16:55:48 -0400
commit0fc55e81d3364e6535cacb10b5a579f8c62625b1 (patch)
tree28e84110be681bd247568f70a71a406254a54675
parent5e66b87840dd275eafa6b4135b174212dd7c0d75 (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.c8
-rw-r--r--drivers/media/dvb/frontends/drxk.h8
-rw-r--r--drivers/media/dvb/frontends/drxk_hard.c4
-rw-r--r--drivers/media/dvb/ngene/ngene-cards.c9
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
7extern struct dvb_frontend *drxk_attach(struct i2c_adapter *i2c, 7struct drxk_config {
8 u8 adr, 8 u8 adr;
9};
10
11extern 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
6344struct dvb_frontend *drxk_attach(struct i2c_adapter *i2c, u8 adr, 6344struct 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)
213static int demod_attach_drxk(struct ngene_channel *chan, 213static 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;