V4L/DVB (7431): tda18271: allow device-specific configuration of IF level
authorMichael Krufky <mkrufky@linuxtv.org>
Tue, 22 Apr 2008 17:46:21 +0000 (14:46 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Thu, 24 Apr 2008 17:07:54 +0000 (14:07 -0300)
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/frontends/tda18271-fe.c
drivers/media/dvb/frontends/tda18271-tables.c
drivers/media/dvb/frontends/tda18271.h
drivers/media/video/cx23885/cx23885-dvb.c

index 2bbf277f5cfc080914cd3c03754607014cbe1b7e..b5a422ef4ff63f81c7b1adfd847b95be744b4746 100644 (file)
@@ -55,13 +55,13 @@ static int tda18271_channel_configuration(struct dvb_frontend *fe,
 
        /* update IF output level & IF notch frequency */
        regs[R_EP4]  &= ~0x1c; /* clear if level bits */
+       regs[R_EP4]  |= (map->if_lvl << 2);
 
        switch (priv->mode) {
        case TDA18271_ANALOG:
                regs[R_MPD]  &= ~0x80; /* IF notch = 0 */
                break;
        case TDA18271_DIGITAL:
-               regs[R_EP4]  |= 0x04; /* IF level = 1 */
                regs[R_MPD]  |= 0x80; /* IF notch = 1 */
                break;
        }
index b402abd15bb2511776b396e332f6bd9d6505a218..342fb31b64c47f5921a9cfe108f754dc1a81f427 100644 (file)
@@ -1187,65 +1187,65 @@ fail:
 /*---------------------------------------------------------------------*/
 
 static struct tda18271_std_map tda18271c1_std_map = {
-       .fm_radio = { .if_freq = 1250, .fm_rfn = 1, .agc_mode = 3, .std = 0 },
-               /* EP3[4:0] 0x18 */
-       .atv_b    = { .if_freq = 6750, .fm_rfn = 0, .agc_mode = 1, .std = 6 },
-               /* EP3[4:0] 0x0e */
-       .atv_dk   = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7 },
-               /* EP3[4:0] 0x0f */
-       .atv_gh   = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7 },
-               /* EP3[4:0] 0x0f */
-       .atv_i    = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7 },
-               /* EP3[4:0] 0x0f */
-       .atv_l    = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7 },
-               /* EP3[4:0] 0x0f */
-       .atv_lc   = { .if_freq = 1250, .fm_rfn = 0, .agc_mode = 1, .std = 7 },
-               /* EP3[4:0] 0x0f */
-       .atv_mn   = { .if_freq = 5750, .fm_rfn = 0, .agc_mode = 1, .std = 5 },
-               /* EP3[4:0] 0x0d */
-       .atsc_6   = { .if_freq = 3250, .fm_rfn = 0, .agc_mode = 3, .std = 4 },
-               /* EP3[4:0] 0x1c */
-       .dvbt_6   = { .if_freq = 3300, .fm_rfn = 0, .agc_mode = 3, .std = 4 },
-               /* EP3[4:0] 0x1c */
-       .dvbt_7   = { .if_freq = 3800, .fm_rfn = 0, .agc_mode = 3, .std = 5 },
-               /* EP3[4:0] 0x1d */
-       .dvbt_8   = { .if_freq = 4300, .fm_rfn = 0, .agc_mode = 3, .std = 6 },
-               /* EP3[4:0] 0x1e */
-       .qam_6    = { .if_freq = 4000, .fm_rfn = 0, .agc_mode = 3, .std = 5 },
-               /* EP3[4:0] 0x1d */
-       .qam_8    = { .if_freq = 5000, .fm_rfn = 0, .agc_mode = 3, .std = 7 },
-               /* EP3[4:0] 0x1f */
+       .fm_radio = { .if_freq = 1250, .fm_rfn = 1, .if_lvl = 0,
+                     .agc_mode = 3, .std = 0 }, /* EP3[4:0] 0x18 */
+       .atv_b    = { .if_freq = 6750, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 6 }, /* EP3[4:0] 0x0e */
+       .atv_dk   = { .if_freq = 7750, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 7 }, /* EP3[4:0] 0x0f */
+       .atv_gh   = { .if_freq = 7750, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 7 }, /* EP3[4:0] 0x0f */
+       .atv_i    = { .if_freq = 7750, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 7 }, /* EP3[4:0] 0x0f */
+       .atv_l    = { .if_freq = 7750, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 7 }, /* EP3[4:0] 0x0f */
+       .atv_lc   = { .if_freq = 1250, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 7 }, /* EP3[4:0] 0x0f */
+       .atv_mn   = { .if_freq = 5750, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 5 }, /* EP3[4:0] 0x0d */
+       .atsc_6   = { .if_freq = 3250, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 4 }, /* EP3[4:0] 0x1c */
+       .dvbt_6   = { .if_freq = 3300, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 4 }, /* EP3[4:0] 0x1c */
+       .dvbt_7   = { .if_freq = 3800, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 5 }, /* EP3[4:0] 0x1d */
+       .dvbt_8   = { .if_freq = 4300, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 6 }, /* EP3[4:0] 0x1e */
+       .qam_6    = { .if_freq = 4000, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 5 }, /* EP3[4:0] 0x1d */
+       .qam_8    = { .if_freq = 5000, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 7 }, /* EP3[4:0] 0x1f */
 };
 
 static struct tda18271_std_map tda18271c2_std_map = {
-       .fm_radio = { .if_freq = 1250, .fm_rfn = 1, .agc_mode = 3, .std = 0 },
-               /* EP3[4:0] 0x18 */
-       .atv_b    = { .if_freq = 6000, .fm_rfn = 0, .agc_mode = 1, .std = 5 },
-               /* EP3[4:0] 0x0d */
-       .atv_dk   = { .if_freq = 6900, .fm_rfn = 0, .agc_mode = 1, .std = 6 },
-               /* EP3[4:0] 0x0e */
-       .atv_gh   = { .if_freq = 7100, .fm_rfn = 0, .agc_mode = 1, .std = 6 },
-               /* EP3[4:0] 0x0e */
-       .atv_i    = { .if_freq = 7250, .fm_rfn = 0, .agc_mode = 1, .std = 6 },
-               /* EP3[4:0] 0x0e */
-       .atv_l    = { .if_freq = 6900, .fm_rfn = 0, .agc_mode = 1, .std = 6 },
-               /* EP3[4:0] 0x0e */
-       .atv_lc   = { .if_freq = 1250, .fm_rfn = 0, .agc_mode = 1, .std = 6 },
-               /* EP3[4:0] 0x0e */
-       .atv_mn   = { .if_freq = 5400, .fm_rfn = 0, .agc_mode = 1, .std = 4 },
-               /* EP3[4:0] 0x0c */
-       .atsc_6   = { .if_freq = 3250, .fm_rfn = 0, .agc_mode = 3, .std = 4 },
-               /* EP3[4:0] 0x1c */
-       .dvbt_6   = { .if_freq = 3300, .fm_rfn = 0, .agc_mode = 3, .std = 4 },
-               /* EP3[4:0] 0x1c */
-       .dvbt_7   = { .if_freq = 3500, .fm_rfn = 0, .agc_mode = 3, .std = 4 },
-               /* EP3[4:0] 0x1c */
-       .dvbt_8   = { .if_freq = 4000, .fm_rfn = 0, .agc_mode = 3, .std = 5 },
-               /* EP3[4:0] 0x1d */
-       .qam_6    = { .if_freq = 4000, .fm_rfn = 0, .agc_mode = 3, .std = 5 },
-               /* EP3[4:0] 0x1d */
-       .qam_8    = { .if_freq = 5000, .fm_rfn = 0, .agc_mode = 3, .std = 7 },
-               /* EP3[4:0] 0x1f */
+       .fm_radio = { .if_freq = 1250, .fm_rfn = 1, .if_lvl = 0,
+                     .agc_mode = 3, .std = 0 }, /* EP3[4:0] 0x18 */
+       .atv_b    = { .if_freq = 6000, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 5 }, /* EP3[4:0] 0x0d */
+       .atv_dk   = { .if_freq = 6900, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 6 }, /* EP3[4:0] 0x0e */
+       .atv_gh   = { .if_freq = 7100, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 6 }, /* EP3[4:0] 0x0e */
+       .atv_i    = { .if_freq = 7250, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 6 }, /* EP3[4:0] 0x0e */
+       .atv_l    = { .if_freq = 6900, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 6 }, /* EP3[4:0] 0x0e */
+       .atv_lc   = { .if_freq = 1250, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 6 }, /* EP3[4:0] 0x0e */
+       .atv_mn   = { .if_freq = 5400, .fm_rfn = 0, .if_lvl = 0,
+                     .agc_mode = 1, .std = 4 }, /* EP3[4:0] 0x0c */
+       .atsc_6   = { .if_freq = 3250, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 4 }, /* EP3[4:0] 0x1c */
+       .dvbt_6   = { .if_freq = 3300, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 4 }, /* EP3[4:0] 0x1c */
+       .dvbt_7   = { .if_freq = 3500, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 4 }, /* EP3[4:0] 0x1c */
+       .dvbt_8   = { .if_freq = 4000, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 5 }, /* EP3[4:0] 0x1d */
+       .qam_6    = { .if_freq = 4000, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 5 }, /* EP3[4:0] 0x1d */
+       .qam_8    = { .if_freq = 5000, .fm_rfn = 0, .if_lvl = 1,
+                     .agc_mode = 3, .std = 7 }, /* EP3[4:0] 0x1f */
 };
 
 /*---------------------------------------------------------------------*/
index 3a743b0f0e8b7137c183426b33e7cf22bf099407..60d63ba285f843c9570a441a5d62a706ef20e029 100644 (file)
@@ -33,6 +33,8 @@ struct tda18271_std_map_item {
        unsigned int std:3;
        /* EP4[7] */
        unsigned int fm_rfn:1;
+       /* EP4[4:2] */
+       unsigned int if_lvl:3;
 };
 
 struct tda18271_std_map {
index 42e6bdd25354126da37284a7f87a724107b9004c..417a30c7a04dd72772df6ecc51fce16fd51c6575 100644 (file)
@@ -165,8 +165,8 @@ static struct tda829x_config tda829x_no_probe = {
 };
 
 static struct tda18271_std_map hauppauge_tda18271_std_map = {
-       .atsc_6   = { .if_freq = 5380, .agc_mode = 3, .std = 3 },
-       .qam_6    = { .if_freq = 4000, .agc_mode = 3, .std = 0 },
+       .atsc_6   = { .if_freq = 5380, .if_lvl = 6, .agc_mode = 3, .std = 3 },
+       .qam_6    = { .if_freq = 4000, .if_lvl = 6, .agc_mode = 3, .std = 0 },
 };
 
 static struct tda18271_config hauppauge_tda18271_config = {