Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b7754d74d20b701603eacf587a92ec6f71a302e1
Commit:     b7754d74d20b701603eacf587a92ec6f71a302e1
Parent:     4919c49278b3299c1373912dec9c3d9cf27ec56d
Author:     Trent Piepho <[EMAIL PROTECTED]>
AuthorDate: Tue May 8 18:05:16 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Wed Jul 18 14:23:29 2007 -0300

    V4L/DVB (5636): Integrate all users of the fmd1216 tuner with dvb-pll
    
    Enhance the dvb-pll definition of the fmd1216 tuner by adding an init 
sequence
    and a sleep sequence.
    
    The init sequence sets the AGC control register to 0xa0, selecting the fast
    time constant and 112 dBuV take-over point.  This the recommended value for
    DVB-T operation.
    
    The sleep sequence sets bit P4 (which is believed to turn the analog
    demodulator on), turns off the tuning voltage, and sets the AGC control
    register to 0x60 (external AGC voltage, the recommended value for analog
    operation).
    
    The existing dvb-pll users in the cx88 driver, listed below, will gain these
    init and sleep sequences.
    
    CX88_BOARD_HAUPPAUGE_HVR1100    Hauppauge WinTV-HVR1100 DVB-T/Hybrid
    CX88_BOARD_HAUPPAUGE_HVR1100LP  Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low 
Profi
    CX88_BOARD_WINFAST_DTV2000H     WinFast DTV2000 H
    CX88_BOARD_HAUPPAUGE_HVR3000    Hauppauge WinTV-HVR3000 TriMode 
Analog/DVB-S/DV
    CX88_BOARD_HAUPPAUGE_HVR1300    Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG 
Encod
    
    This non-dvb-pll user in the cx88 driver should only gain the sleep 
sequence,
    as it already had an equivalent init sequence.  The non-dvb-pll code for 
this
    user is removed.
    
    X88_BOARD_DNTV_LIVE_DVB_T_PRO   digitalnow DNTV Live! DVB-T Pro
    
    In these saa7134 driver, these non-dvb-pll users are converted to use 
dvb-pll:
    
    SAA7134_BOARD_MD7134                    Medion 7134
    SAA7134_BOARD_ASUS_EUROPA2_HYBRID       Asus Europa2 OEM
    
    The saa7134 functions philips_fmd1216_tuner_init(),
    philips_fmd1216_tuner_sleep(), and philips_fmd1216_tuner_set_params() are
    deleted and the dvb-pll versions are used.
    
    This should result in equivalent sleep, init, and tuning sequences being 
sent
    to the tuner.
    
    For the cxusb driver, only one board is effected:
    
    USB_PID_MEDION_MD95700              Medion MD95700
    
    This board used dvb_usb_tuner_init_i2c() and dvb_usb_tuner_set_params_i2c()
    for init and tuning, respectively.  These functions are effectively the same
    as the dvb-pll versions.  They call a tuner pass control function defined at
    the dvb-usb level, but this does not matter, as this card does not have a
    tuner pass control function (only the dib3000mb does).  This board will gain
    the sleep sequence, while init and tuning should be unchanged.
    
    Signed-off-by: Trent Piepho <[EMAIL PROTECTED]>
    Signed-off-by: Michael Krufky <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/dvb/dvb-usb/cxusb.c         |   10 +--
 drivers/media/dvb/frontends/dvb-pll.c     |    8 ++
 drivers/media/video/cx88/cx88-dvb.c       |   61 +------------
 drivers/media/video/saa7134/saa7134-dvb.c |  140 +---------------------------
 4 files changed, 17 insertions(+), 202 deletions(-)

diff --git a/drivers/media/dvb/dvb-usb/cxusb.c 
b/drivers/media/dvb/dvb-usb/cxusb.c
index bac2ae3..88aeb25 100644
--- a/drivers/media/dvb/dvb-usb/cxusb.c
+++ b/drivers/media/dvb/dvb-usb/cxusb.c
@@ -354,14 +354,8 @@ static struct mt352_config cxusb_mt352_config = {
 /* Callbacks for DVB USB */
 static int cxusb_fmd1216me_tuner_attach(struct dvb_usb_adapter *adap)
 {
-       u8 bpll[4] = { 0x0b, 0xdc, 0x9c, 0xa0 };
-       adap->pll_addr = 0x61;
-       memcpy(adap->pll_init, bpll, 4);
-       adap->pll_desc = &dvb_pll_fmd1216me;
-
-       adap->fe->ops.tuner_ops.init = dvb_usb_tuner_init_i2c;
-       adap->fe->ops.tuner_ops.set_params = dvb_usb_tuner_set_params_i2c;
-
+       dvb_attach(dvb_pll_attach, adap->fe, 0x61, &adap->dev->i2c_adap,
+                  &dvb_pll_fmd1216me);
        return 0;
 }
 
diff --git a/drivers/media/dvb/frontends/dvb-pll.c 
b/drivers/media/dvb/frontends/dvb-pll.c
index fc440b1..9fb4dec 100644
--- a/drivers/media/dvb/frontends/dvb-pll.c
+++ b/drivers/media/dvb/frontends/dvb-pll.c
@@ -38,6 +38,12 @@
        0x50 = AGC Take over point = 103 dBuV */
 static u8 tua603x_agc103[] = { 2, 0x80|0x40|0x18|0x06|0x01, 0x00|0x50 };
 
+/*     0x04 = 166.67 kHz divider
+
+       0x80 = AGC Time constant 50ms Iagc = 9 uA
+       0x20 = AGC Take over point = 112 dBuV */
+static u8 tua603x_agc112[] = { 2, 0x80|0x40|0x18|0x04|0x01, 0x80|0x20 };
+
 struct dvb_pll_desc dvb_pll_thomson_dtt7579 = {
        .name  = "Thomson dtt7579",
        .min   = 177000000,
@@ -285,6 +291,8 @@ struct dvb_pll_desc dvb_pll_fmd1216me = {
        .max = 858000000,
        .iffreq= 36125000,
        .set   = fmd1216me_bw,
+       .initdata = tua603x_agc112,
+       .sleepdata = (u8[]){ 4, 0x9c, 0x60, 0x85, 0x54 },
        .count = 7,
        .entries = {
                { 143870000, 166667, 0xbc, 0x41 },
diff --git a/drivers/media/video/cx88/cx88-dvb.c 
b/drivers/media/video/cx88/cx88-dvb.c
index 420c25f..affec46 100644
--- a/drivers/media/video/cx88/cx88-dvb.c
+++ b/drivers/media/video/cx88/cx88-dvb.c
@@ -221,62 +221,6 @@ static int dntv_live_dvbt_pro_demod_init(struct 
dvb_frontend* fe)
        return 0;
 }
 
-static int philips_fmd1216_pll_init(struct dvb_frontend *fe)
-{
-       struct cx8802_dev *dev= fe->dvb->priv;
-
-       /* this message is to set up ATC and ALC */
-       static u8 fmd1216_init[] = { 0x0b, 0xdc, 0x9c, 0xa0 };
-       struct i2c_msg msg =
-               { .addr = dev->core->pll_addr, .flags = 0,
-                 .buf = fmd1216_init, .len = sizeof(fmd1216_init) };
-       int err;
-
-       if (fe->ops.i2c_gate_ctrl)
-               fe->ops.i2c_gate_ctrl(fe, 1);
-       if ((err = i2c_transfer(&dev->core->i2c_adap, &msg, 1)) != 1) {
-               if (err < 0)
-                       return err;
-               else
-                       return -EREMOTEIO;
-       }
-
-       return 0;
-}
-
-static int dntv_live_dvbt_pro_tuner_set_params(struct dvb_frontend* fe,
-                                              struct dvb_frontend_parameters* 
params)
-{
-       struct cx8802_dev *dev= fe->dvb->priv;
-       u8 buf[4];
-       struct i2c_msg msg =
-               { .addr = dev->core->pll_addr, .flags = 0,
-                 .buf = buf, .len = 4 };
-       int err;
-
-       /* Switch PLL to DVB mode */
-       err = philips_fmd1216_pll_init(fe);
-       if (err)
-               return err;
-
-       /* Tune PLL */
-       dvb_pll_configure(dev->core->pll_desc, buf, params);
-       if (fe->ops.i2c_gate_ctrl)
-               fe->ops.i2c_gate_ctrl(fe, 1);
-       if ((err = i2c_transfer(&dev->core->i2c_adap, &msg, 1)) != 1) {
-
-               printk(KERN_WARNING "cx88-dvb: %s error "
-                      "(addr %02x <- %02x, err = %i)\n",
-                      __FUNCTION__, dev->core->pll_addr, buf[0], err);
-               if (err < 0)
-                       return err;
-               else
-                       return -EREMOTEIO;
-       }
-
-       return 0;
-}
-
 static struct mt352_config dntv_live_dvbt_pro_config = {
        .demod_address = 0x0f,
        .no_tuner      = 1,
@@ -531,12 +475,11 @@ static int dvb_register(struct cx8802_dev *dev)
                break;
        case CX88_BOARD_DNTV_LIVE_DVB_T_PRO:
 #if defined(CONFIG_VIDEO_CX88_VP3054) || 
(defined(CONFIG_VIDEO_CX88_VP3054_MODULE) && defined(MODULE))
-               dev->core->pll_addr = 0x61;
-               dev->core->pll_desc = &dvb_pll_fmd1216me;
                dev->dvb.frontend = dvb_attach(mt352_attach, 
&dntv_live_dvbt_pro_config,
                        &((struct vp3054_i2c_state *)dev->card_priv)->adap);
                if (dev->dvb.frontend != NULL) {
-                       dev->dvb.frontend->ops.tuner_ops.set_params = 
dntv_live_dvbt_pro_tuner_set_params;
+                       dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,
+                                  &dev->core->i2c_adap, &dvb_pll_fmd1216me);
                }
 #else
                printk("%s: built without vp3054 support\n", dev->core->name);
diff --git a/drivers/media/video/saa7134/saa7134-dvb.c 
b/drivers/media/video/saa7134/saa7134-dvb.c
index 0d66add..3a28b4c 100644
--- a/drivers/media/video/saa7134/saa7134-dvb.c
+++ b/drivers/media/video/saa7134/saa7134-dvb.c
@@ -432,135 +432,6 @@ static struct tda1004x_config philips_europa_config = {
 
 /* ------------------------------------------------------------------ */
 
-static int philips_fmd1216_tuner_init(struct dvb_frontend *fe)
-{
-       struct saa7134_dev *dev = fe->dvb->priv;
-       struct tda1004x_state *state = fe->demodulator_priv;
-       u8 addr = state->config->tuner_address;
-       /* this message is to set up ATC and ALC */
-       static u8 fmd1216_init[] = { 0x0b, 0xdc, 0x9c, 0xa0 };
-       struct i2c_msg tuner_msg = {.addr = addr,.flags = 0,.buf = 
fmd1216_init,.len = sizeof(fmd1216_init) };
-
-       if (fe->ops.i2c_gate_ctrl)
-               fe->ops.i2c_gate_ctrl(fe, 1);
-       if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)
-               return -EIO;
-       msleep(1);
-
-       return 0;
-}
-
-static int philips_fmd1216_tuner_sleep(struct dvb_frontend *fe)
-{
-       struct saa7134_dev *dev = fe->dvb->priv;
-       struct tda1004x_state *state = fe->demodulator_priv;
-       u8 addr = state->config->tuner_address;
-       /* this message actually turns the tuner back to analog mode */
-       u8 fmd1216_init[] = { 0x0b, 0xdc, 0x9c, 0x60 };
-       struct i2c_msg tuner_msg = {.addr = addr,.flags = 0,.buf = 
fmd1216_init,.len = sizeof(fmd1216_init) };
-
-       if (fe->ops.i2c_gate_ctrl)
-               fe->ops.i2c_gate_ctrl(fe, 1);
-       i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
-       msleep(1);
-       fmd1216_init[2] = 0x86;
-       fmd1216_init[3] = 0x54;
-       if (fe->ops.i2c_gate_ctrl)
-               fe->ops.i2c_gate_ctrl(fe, 1);
-       i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
-       msleep(1);
-       return 0;
-}
-
-static int philips_fmd1216_tuner_set_params(struct dvb_frontend *fe, struct 
dvb_frontend_parameters *params)
-{
-       struct saa7134_dev *dev = fe->dvb->priv;
-       struct tda1004x_state *state = fe->demodulator_priv;
-       u8 addr = state->config->tuner_address;
-       u8 tuner_buf[4];
-       struct i2c_msg tuner_msg = {.addr = addr,.flags = 0,.buf = 
tuner_buf,.len =
-                       sizeof(tuner_buf) };
-       int tuner_frequency = 0;
-       int divider = 0;
-       u8 band, mode, cp;
-
-       /* determine charge pump */
-       tuner_frequency = params->frequency + 36130000;
-       if (tuner_frequency < 87000000)
-               return -EINVAL;
-       /* low band */
-       else if (tuner_frequency < 180000000) {
-               band = 1;
-               mode = 7;
-               cp   = 0;
-       } else if (tuner_frequency < 195000000) {
-               band = 1;
-               mode = 6;
-               cp   = 1;
-       /* mid band     */
-       } else if (tuner_frequency < 366000000) {
-               if (params->u.ofdm.bandwidth == BANDWIDTH_8_MHZ) {
-                       band = 10;
-               } else {
-                       band = 2;
-               }
-               mode = 7;
-               cp   = 0;
-       } else if (tuner_frequency < 478000000) {
-               if (params->u.ofdm.bandwidth == BANDWIDTH_8_MHZ) {
-                       band = 10;
-               } else {
-                       band = 2;
-               }
-               mode = 6;
-               cp   = 1;
-       /* high band */
-       } else if (tuner_frequency < 662000000) {
-               if (params->u.ofdm.bandwidth == BANDWIDTH_8_MHZ) {
-                       band = 12;
-               } else {
-                       band = 4;
-               }
-               mode = 7;
-               cp   = 0;
-       } else if (tuner_frequency < 840000000) {
-               if (params->u.ofdm.bandwidth == BANDWIDTH_8_MHZ) {
-                       band = 12;
-               } else {
-                       band = 4;
-               }
-               mode = 6;
-               cp   = 1;
-       } else {
-               if (params->u.ofdm.bandwidth == BANDWIDTH_8_MHZ) {
-                       band = 12;
-               } else {
-                       band = 4;
-               }
-               mode = 7;
-               cp   = 1;
-
-       }
-       /* calculate divisor */
-       /* ((36166000 + Finput) / 166666) rounded! */
-       divider = (tuner_frequency + 83333) / 166667;
-
-       /* setup tuner buffer */
-       tuner_buf[0] = (divider >> 8) & 0x7f;
-       tuner_buf[1] = divider & 0xff;
-       tuner_buf[2] = 0x80 | (cp << 6) | (mode  << 3) | 4;
-       tuner_buf[3] = 0x40 | band;
-
-       if (fe->ops.i2c_gate_ctrl)
-               fe->ops.i2c_gate_ctrl(fe, 1);
-       if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1) {
-               wprintk("could not write to tuner at addr: 0x%02x\n",
-                       addr << 1);
-               return -EIO;
-       }
-       return 0;
-}
-
 static struct tda1004x_config medion_cardbus = {
        .demod_address = 0x08,
        .invert        = 1,
@@ -992,9 +863,8 @@ static int dvb_init(struct saa7134_dev *dev)
                                               &medion_cardbus,
                                               &dev->i2c_adap);
                if (dev->dvb.frontend) {
-                       dev->dvb.frontend->ops.tuner_ops.init = 
philips_fmd1216_tuner_init;
-                       dev->dvb.frontend->ops.tuner_ops.sleep = 
philips_fmd1216_tuner_sleep;
-                       dev->dvb.frontend->ops.tuner_ops.set_params = 
philips_fmd1216_tuner_set_params;
+                       dvb_attach(dvb_pll_attach, dev->dvb.frontend, 
medion_cardbus.tuner_address,
+                                  &dev->i2c_adap, &dvb_pll_fmd1216me);
                }
                break;
        case SAA7134_BOARD_PHILIPS_TOUGH:
@@ -1123,9 +993,9 @@ static int dvb_init(struct saa7134_dev *dev)
                if (dev->dvb.frontend) {
                        dev->original_demod_sleep = 
dev->dvb.frontend->ops.sleep;
                        dev->dvb.frontend->ops.sleep = 
philips_europa_demod_sleep;
-                       dev->dvb.frontend->ops.tuner_ops.init = 
philips_fmd1216_tuner_init;
-                       dev->dvb.frontend->ops.tuner_ops.sleep = 
philips_fmd1216_tuner_sleep;
-                       dev->dvb.frontend->ops.tuner_ops.set_params = 
philips_fmd1216_tuner_set_params;
+
+                       dvb_attach(dvb_pll_attach, dev->dvb.frontend, 
medion_cardbus.tuner_address,
+                                  &dev->i2c_adap, &dvb_pll_fmd1216me);
                }
                break;
        case SAA7134_BOARD_VIDEOMATE_DVBT_200A:
-
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