]> git.karo-electronics.de Git - linux-beck.git/commitdiff
[media] cxd2820r: switch to .get_if_frequency()
authorAntti Palosaari <crope@iki.fi>
Sun, 13 Nov 2011 17:41:25 +0000 (14:41 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 24 Nov 2011 19:54:04 +0000 (17:54 -0200)
All tuners used with cxd2820r offers IF frequency so switch that.

Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-usb/anysee.c
drivers/media/dvb/frontends/cxd2820r.h
drivers/media/dvb/frontends/cxd2820r_c.c
drivers/media/dvb/frontends/cxd2820r_t.c
drivers/media/dvb/frontends/cxd2820r_t2.c
drivers/media/video/em28xx/em28xx-dvb.c

index c64eb56204dedc6c455fc013d56b3993260f834f..df46015d077a76e7533dcbbc42862afbf32255cc 100644 (file)
@@ -366,13 +366,6 @@ static struct isl6423_config anysee_isl6423_config = {
 static struct cxd2820r_config anysee_cxd2820r_config = {
        .i2c_address = 0x6d, /* (0xda >> 1) */
        .ts_mode = 0x38,
-       .if_dvbt_6 = 3550,
-       .if_dvbt_7 = 3700,
-       .if_dvbt_8 = 4150,
-       .if_dvbt2_6 = 3250,
-       .if_dvbt2_7 = 4000,
-       .if_dvbt2_8 = 4000,
-       .if_dvbc = 5000,
 };
 
 /*
index 03cab7b547fbac253331206de193848acc8b93a0..cf0f546aa1d1bdf94f47666692c0313cf69d6643 100644 (file)
@@ -63,19 +63,6 @@ struct cxd2820r_config {
         */
        bool spec_inv;
 
-       /* IFs for all used modes.
-        * Default: none, must set
-        * Values: <kHz>
-        */
-       u16 if_dvbt_6;
-       u16 if_dvbt_7;
-       u16 if_dvbt_8;
-       u16 if_dvbt2_5;
-       u16 if_dvbt2_6;
-       u16 if_dvbt2_7;
-       u16 if_dvbt2_8;
-       u16 if_dvbc;
-
        /* GPIOs for all used modes.
         * Default: none, disabled
         * Values: <see above>
index b85f5011e344623fc3a03fbfb10d09d8df59a54f..c4128773f2ee0d518e1333d9e9a00bf916479c29 100644 (file)
@@ -28,6 +28,7 @@ int cxd2820r_set_frontend_c(struct dvb_frontend *fe,
        struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret, i;
        u8 buf[2];
+       u32 if_freq;
        u16 if_ctl;
        u64 num;
        struct reg_val_mask tab[] = {
@@ -70,7 +71,17 @@ int cxd2820r_set_frontend_c(struct dvb_frontend *fe,
        priv->delivery_system = SYS_DVBC_ANNEX_AC;
        priv->ber_running = 0; /* tune stops BER counter */
 
-       num = priv->cfg.if_dvbc;
+       /* program IF frequency */
+       if (fe->ops.tuner_ops.get_if_frequency) {
+               ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
+               if (ret)
+                       goto error;
+       } else
+               if_freq = 0;
+
+       dbg("%s: if_freq=%d", __func__, if_freq);
+
+       num = if_freq / 1000; /* Hz => kHz */
        num *= 0x4000;
        if_ctl = cxd2820r_div_u64_round_closest(num, 41000);
        buf[0] = (if_ctl >> 8) & 0x3f;
index a04f9c810101652138b2685973c1969d3cdf9c31..86e17e65ddf34504219b5604304e62dbb2a8a138 100644 (file)
@@ -27,7 +27,7 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe,
        struct cxd2820r_priv *priv = fe->demodulator_priv;
        struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret, i;
-       u32 if_khz, if_ctl;
+       u32 if_freq, if_ctl;
        u64 num;
        u8 buf[3], bw_param;
        u8 bw_params1[][5] = {
@@ -80,17 +80,14 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe,
 
        switch (c->bandwidth_hz) {
        case 6000000:
-               if_khz = priv->cfg.if_dvbt_6;
                i = 0;
                bw_param = 2;
                break;
        case 7000000:
-               if_khz = priv->cfg.if_dvbt_7;
                i = 1;
                bw_param = 1;
                break;
        case 8000000:
-               if_khz = priv->cfg.if_dvbt_8;
                i = 2;
                bw_param = 0;
                break;
@@ -98,7 +95,17 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe,
                return -EINVAL;
        }
 
-       num = if_khz;
+       /* program IF frequency */
+       if (fe->ops.tuner_ops.get_if_frequency) {
+               ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
+               if (ret)
+                       goto error;
+       } else
+               if_freq = 0;
+
+       dbg("%s: if_freq=%d", __func__, if_freq);
+
+       num = if_freq / 1000; /* Hz => kHz */
        num *= 0x1000000;
        if_ctl = cxd2820r_div_u64_round_closest(num, 41000);
        buf[0] = ((if_ctl >> 16) & 0xff);
index 6548588309f7986ffc347e7c2915cc30fef0ec9c..8635b075f62db39a2785db76e73773e7dc227c7c 100644 (file)
@@ -27,7 +27,7 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,
        struct cxd2820r_priv *priv = fe->demodulator_priv;
        struct dtv_frontend_properties *c = &fe->dtv_property_cache;
        int ret, i;
-       u32 if_khz, if_ctl;
+       u32 if_freq, if_ctl;
        u64 num;
        u8 buf[3], bw_param;
        u8 bw_params1[][5] = {
@@ -93,22 +93,18 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,
 
        switch (c->bandwidth_hz) {
        case 5000000:
-               if_khz = priv->cfg.if_dvbt2_5;
                i = 0;
                bw_param = 3;
                break;
        case 6000000:
-               if_khz = priv->cfg.if_dvbt2_6;
                i = 1;
                bw_param = 2;
                break;
        case 7000000:
-               if_khz = priv->cfg.if_dvbt2_7;
                i = 2;
                bw_param = 1;
                break;
        case 8000000:
-               if_khz = priv->cfg.if_dvbt2_8;
                i = 3;
                bw_param = 0;
                break;
@@ -116,7 +112,17 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe,
                return -EINVAL;
        }
 
-       num = if_khz;
+       /* program IF frequency */
+       if (fe->ops.tuner_ops.get_if_frequency) {
+               ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
+               if (ret)
+                       goto error;
+       } else
+               if_freq = 0;
+
+       dbg("%s: if_freq=%d", __func__, if_freq);
+
+       num = if_freq / 1000; /* Hz => kHz */
        num *= 0x1000000;
        if_ctl = cxd2820r_div_u64_round_closest(num, 41000);
        buf[0] = ((if_ctl >> 16) & 0xff);
index ea2208e434a5b0a2608eadfee1d771bbea2ff5b3..eb41e255615c065cc6932509da6cf88aebdfa134 100644 (file)
@@ -500,13 +500,6 @@ static struct tda10023_config em28xx_tda10023_config = {
 static struct cxd2820r_config em28xx_cxd2820r_config = {
        .i2c_address = (0xd8 >> 1),
        .ts_mode = CXD2820R_TS_SERIAL,
-       .if_dvbt_6  = 3300,
-       .if_dvbt_7  = 3500,
-       .if_dvbt_8  = 4000,
-       .if_dvbt2_6 = 3300,
-       .if_dvbt2_7 = 3500,
-       .if_dvbt2_8 = 4000,
-       .if_dvbc    = 5000,
 
        /* enable LNA for DVB-T2 and DVB-C */
        .gpio_dvbt2[0] = CXD2820R_GPIO_E | CXD2820R_GPIO_O | CXD2820R_GPIO_L,