Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=de956c1e0f89413a3837b642d592e2dff3e3eb78
Commit:     de956c1e0f89413a3837b642d592e2dff3e3eb78
Parent:     b8195946228c749702dfe5995b98516ea4b04cdc
Author:     Hartmut Hackmann <[EMAIL PROTECTED]>
AuthorDate: Fri Apr 27 12:31:12 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Fri Apr 27 15:43:31 2007 -0300

    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 <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/video/saa7134/saa7134-cards.c |    3 ++-
 drivers/media/video/saa7134/saa7134-i2c.c   |    2 ++
 drivers/media/video/saa7134/saa7134.h       |    1 +
 drivers/media/video/tuner-core.c            |   24 ++++++++++++++++--------
 include/media/tuner.h                       |    7 +++++++
 5 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/drivers/media/video/saa7134/saa7134-cards.c 
b/drivers/media/video/saa7134/saa7134-cards.c
index 89f3210..4399d13 100644
--- a/drivers/media/video/saa7134/saa7134-cards.c
+++ b/drivers/media/video/saa7134/saa7134-cards.c
@@ -2543,11 +2543,12 @@ struct saa7134_board saa7134_boards[] = {
                .name           = "Philips Tiger reference design",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_TDA8290,
+               .tuner_config   = 0,
                .radio_type     = UNSET,
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .mpeg           = SAA7134_MPEG_DVB,
-               .gpiomask       = 1 << 21,
+               .gpiomask       = 0x0200000,
                .inputs = {{
                        .name   = name_tv,
                        .vmux   = 1,
diff --git a/drivers/media/video/saa7134/saa7134-i2c.c 
b/drivers/media/video/saa7134/saa7134-i2c.c
index cce8da6..62c107e 100644
--- a/drivers/media/video/saa7134/saa7134-i2c.c
+++ b/drivers/media/video/saa7134/saa7134-i2c.c
@@ -370,6 +370,8 @@ static int attach_inform(struct i2c_client *client)
 
                tun_setup.type = tuner;
                tun_setup.addr = saa7134_boards[dev->board].tuner_addr;
+               tun_setup.config = saa7134_boards[dev->board].tuner_config;
+               tun_setup.gpio_func = (tuner_gpio_func_t) saa7134_set_gpio;
 
                if ((tun_setup.addr == ADDR_UNSET)||(tun_setup.addr == 
client->addr)) {
 
diff --git a/drivers/media/video/saa7134/saa7134.h 
b/drivers/media/video/saa7134/saa7134.h
index 7b5ae19..303c080 100644
--- a/drivers/media/video/saa7134/saa7134.h
+++ b/drivers/media/video/saa7134/saa7134.h
@@ -280,6 +280,7 @@ struct saa7134_board {
        unsigned char           radio_addr;
 
        unsigned int            tda9887_conf;
+       unsigned int            tuner_config;
 
        /* peripheral I/O */
        enum saa7134_video_out  video_out;
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c
index 15dbc6b..522ec1c 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)
 }
 
 static void set_type(struct i2c_client *c, unsigned int type,
-                    unsigned int new_mode_mask)
+                    unsigned int new_mode_mask, unsigned int new_config,
+                    tuner_gpio_func_t gpio_func)
 {
        struct tuner *t = i2c_get_clientdata(c);
        unsigned char buffer[4];
@@ -173,6 +174,11 @@ static void set_type(struct i2c_client *c, unsigned int 
type,
                microtune_init(c);
                break;
        case TUNER_PHILIPS_TDA8290:
+               t->config = new_config;
+               if (gpio_func != NULL) {
+                       tuner_dbg("Defining GPIO function\n");
+                       t->gpio_func = gpio_func;
+               }
                tda8290_init(c);
                break;
        case TUNER_TEA5767:
@@ -234,10 +240,11 @@ static void set_addr(struct i2c_client *c, struct 
tuner_setup *tun_setup)
 
        tuner_dbg("set addr for type %i\n", t->type);
 
-       if ( t->type == UNSET && ((tun_setup->addr == ADDR_UNSET &&
-               (t->mode_mask & tun_setup->mode_mask)) ||
-               tun_setup->addr == c->addr)) {
-                       set_type(c, tun_setup->type, tun_setup->mode_mask);
+       if ( (t->type == UNSET && ((tun_setup->addr == ADDR_UNSET) &&
+               (t->mode_mask & tun_setup->mode_mask))) ||
+               (tun_setup->addr == c->addr)) {
+                       set_type(c, tun_setup->type, tun_setup->mode_mask,
+                                tun_setup->config, tun_setup->gpio_func);
        }
 }
 
@@ -496,7 +503,7 @@ static int tuner_attach(struct i2c_adapter *adap, int addr, 
int kind)
 register_client:
        tuner_info("chip found @ 0x%x (%s)\n", addr << 1, adap->name);
        i2c_attach_client (&t->i2c);
-       set_type (&t->i2c,t->type, t->mode_mask);
+       set_type (&t->i2c,t->type, t->mode_mask, t->config, t->gpio_func);
        return 0;
 }
 
@@ -576,10 +583,11 @@ static int tuner_command(struct i2c_client *client, 
unsigned int cmd, void *arg)
        switch (cmd) {
        /* --- configuration --- */
        case TUNER_SET_TYPE_ADDR:
-               tuner_dbg ("Calling set_type_addr for type=%d, addr=0x%02x, 
mode=0x%02x\n",
+               tuner_dbg ("Calling set_type_addr for type=%d, addr=0x%02x, 
mode=0x%02x, config=0x%02x\n",
                                ((struct tuner_setup *)arg)->type,
                                ((struct tuner_setup *)arg)->addr,
-                               ((struct tuner_setup *)arg)->mode_mask);
+                               ((struct tuner_setup *)arg)->mode_mask,
+                               ((struct tuner_setup *)arg)->config);
 
                set_addr(client, (struct tuner_setup *)arg);
                break;
diff --git a/include/media/tuner.h b/include/media/tuner.h
index 99acf84..fe56712 100644
--- a/include/media/tuner.h
+++ b/include/media/tuner.h
@@ -173,10 +173,15 @@ enum tuner_mode {
    when the tuner is set to TV mode.
  */
 
+/* allows to access the GPIOs of the host (pci bridge) */
+typedef void (*tuner_gpio_func_t) (void *dev, int bit_no,int value);
+
 struct tuner_setup {
        unsigned short  addr;   /* I2C address */
        unsigned int    type;   /* Tuner type */
        unsigned int    mode_mask;  /* Allowed tuner modes */
+       unsigned int    config; /* configuraion for more complex tuners */
+       tuner_gpio_func_t gpio_func;
 };
 
 struct tuner {
@@ -210,6 +215,8 @@ struct tuner {
        unsigned char tda827x_addr;
        unsigned char tda827x_ver;
        unsigned int sgIF;
+       unsigned int config;
+       tuner_gpio_func_t gpio_func;
 
        /* function ptrs */
        void (*set_tv_freq)(struct i2c_client *c, unsigned int freq);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to