aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/tuner-core.c
diff options
context:
space:
mode:
authorHartmut Hackmann <hartmut.hackmann@t-online.de>2007-04-27 11:31:12 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2007-04-27 14:43:31 -0400
commitde956c1e0f89413a3837b642d592e2dff3e3eb78 (patch)
tree71f803d3854d497e63dbe728695250b16c0e0b18 /drivers/media/video/tuner-core.c
parentb8195946228c749702dfe5995b98516ea4b04cdc (diff)
V4L/DVB (5313): Added a config entry and a gpio function pointer to tuner struct
These entries mainly are to support configurations of the tda827x silicon tuner with a preamplifier. The values can be set throgh the attach inform or through the extended TUNER_SET_TYPE_ADDR client call. The function pointer will only be updated if the parameter is not NULL. Since a typecast is necessary to set the pointer, i added a typedef for this pointer (tuner_gpio_func_t) in tuner.h Signed-off-by: Hartmut Hackmann <hartmut.hackmann@t-online.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/tuner-core.c')
-rw-r--r--drivers/media/video/tuner-core.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c
index 15dbc6bf42a7..522ec1c35b8c 100644
--- a/drivers/media/video/tuner-core.c
+++ b/drivers/media/video/tuner-core.c
@@ -144,7 +144,8 @@ static void set_freq(struct i2c_client *c, unsigned long freq)
144} 144}
145 145
146static void set_type(struct i2c_client *c, unsigned int type, 146static void set_type(struct i2c_client *c, unsigned int type,
147 unsigned int new_mode_mask) 147 unsigned int new_mode_mask, unsigned int new_config,
148 tuner_gpio_func_t gpio_func)
148{ 149{
149 struct tuner *t = i2c_get_clientdata(c); 150 struct tuner *t = i2c_get_clientdata(c);
150 unsigned char buffer[4]; 151 unsigned char buffer[4];
@@ -173,6 +174,11 @@ static void set_type(struct i2c_client *c, unsigned int type,
173 microtune_init(c); 174 microtune_init(c);
174 break; 175 break;
175 case TUNER_PHILIPS_TDA8290: 176 case TUNER_PHILIPS_TDA8290:
177 t->config = new_config;
178 if (gpio_func != NULL) {
179 tuner_dbg("Defining GPIO function\n");
180 t->gpio_func = gpio_func;
181 }
176 tda8290_init(c); 182 tda8290_init(c);
177 break; 183 break;
178 case TUNER_TEA5767: 184 case TUNER_TEA5767:
@@ -234,10 +240,11 @@ static void set_addr(struct i2c_client *c, struct tuner_setup *tun_setup)
234 240
235 tuner_dbg("set addr for type %i\n", t->type); 241 tuner_dbg("set addr for type %i\n", t->type);
236 242
237 if ( t->type == UNSET && ((tun_setup->addr == ADDR_UNSET && 243 if ( (t->type == UNSET && ((tun_setup->addr == ADDR_UNSET) &&
238 (t->mode_mask & tun_setup->mode_mask)) || 244 (t->mode_mask & tun_setup->mode_mask))) ||
239 tun_setup->addr == c->addr)) { 245 (tun_setup->addr == c->addr)) {
240 set_type(c, tun_setup->type, tun_setup->mode_mask); 246 set_type(c, tun_setup->type, tun_setup->mode_mask,
247 tun_setup->config, tun_setup->gpio_func);
241 } 248 }
242} 249}
243 250
@@ -496,7 +503,7 @@ static int tuner_attach(struct i2c_adapter *adap, int addr, int kind)
496register_client: 503register_client:
497 tuner_info("chip found @ 0x%x (%s)\n", addr << 1, adap->name); 504 tuner_info("chip found @ 0x%x (%s)\n", addr << 1, adap->name);
498 i2c_attach_client (&t->i2c); 505 i2c_attach_client (&t->i2c);
499 set_type (&t->i2c,t->type, t->mode_mask); 506 set_type (&t->i2c,t->type, t->mode_mask, t->config, t->gpio_func);
500 return 0; 507 return 0;
501} 508}
502 509
@@ -576,10 +583,11 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
576 switch (cmd) { 583 switch (cmd) {
577 /* --- configuration --- */ 584 /* --- configuration --- */
578 case TUNER_SET_TYPE_ADDR: 585 case TUNER_SET_TYPE_ADDR:
579 tuner_dbg ("Calling set_type_addr for type=%d, addr=0x%02x, mode=0x%02x\n", 586 tuner_dbg ("Calling set_type_addr for type=%d, addr=0x%02x, mode=0x%02x, config=0x%02x\n",
580 ((struct tuner_setup *)arg)->type, 587 ((struct tuner_setup *)arg)->type,
581 ((struct tuner_setup *)arg)->addr, 588 ((struct tuner_setup *)arg)->addr,
582 ((struct tuner_setup *)arg)->mode_mask); 589 ((struct tuner_setup *)arg)->mode_mask,
590 ((struct tuner_setup *)arg)->config);
583 591
584 set_addr(client, (struct tuner_setup *)arg); 592 set_addr(client, (struct tuner_setup *)arg);
585 break; 593 break;