]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/media/video/tuner-simple.c
[PATCH] tuner-core.c improvments and Ymec Tvision TVF8533MF support
[karo-tx-linux.git] / drivers / media / video / tuner-simple.c
index 48c6ceff1dc265c39799ec15120c42e59c024735..f7305c8d53de2534dd4042c4ed938df929275622 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: tuner-simple.c,v 1.10 2005/03/08 08:38:00 kraxel Exp $
+ * $Id: tuner-simple.c,v 1.14 2005/05/30 02:02:47 mchehab Exp $
  *
  * i2c tv tuner chip device driver
  * controls all those simple 4-control-bytes style tuners.
@@ -212,6 +212,11 @@ static struct tunertype tuners[] = {
         { "Philips FQ1236A MK4", Philips, NTSC,
           16*160.00,16*442.00,0x01,0x02,0x04,0x8e,732 },
 
+       /* Should work for TVF8531MF, TVF8831MF, TVF8731MF */
+       { "Ymec TVision TVF-8531MF", Philips, NTSC,
+         16*160.00,16*454.00,0xa0,0x90,0x30,0x8e,732},
+       { "Ymec TVision TVF-5533MF", Philips, NTSC,
+         16*160.00,16*454.00,0x01,0x02,0x04,0x8e,732},
 };
 unsigned const int tuner_count = ARRAY_SIZE(tuners);
 
@@ -424,6 +429,13 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
        buffer[2] = tun->config;
 
        switch (t->type) {
+       case TUNER_YMEC_TVF_5533MF:
+
+               /*These values are empirically determinated */
+               div = (freq*122)/16 - 20;
+               buffer[2] = 0x88; /* could be also 0x80 */
+               buffer[3] = 0x19; /* could be also 0x10, 0x18, 0x99 */
+               break;
        case TUNER_PHILIPS_FM1216ME_MK3:
        case TUNER_PHILIPS_FM1236_MK3:
                buffer[3] = 0x19;
@@ -458,6 +470,20 @@ int default_tuner_init(struct i2c_client *c)
                   t->type, tuners[t->type].name);
        strlcpy(c->name, tuners[t->type].name, sizeof(c->name));
 
+       switch (t->type) {
+       case TUNER_YMEC_TVF_5533MF:
+               {
+                       struct tuner_addr tun_addr = { V4L2_TUNER_ANALOG_TV, 0xc2>>1 };
+
+                       if (c->driver->command) {
+                               c->driver->command(c, TUNER_SET_ADDR, &tun_addr);
+                       } else {
+                               tuner_warn("Couldn't set TV tuner I2C address to 0x%02x\n",tun_addr.addr<<1);
+                       }
+                       break;
+               }
+       }
+
        t->tv_freq    = default_set_tv_freq;
        t->radio_freq = default_set_radio_freq;
        t->has_signal = tuner_signal;