OSDN Git Service

[media] xc4000: get rid of hard-coded 8MHz firmware config
authorDevin Heitmueller <dheitmueller@kernellabs.com>
Mon, 5 Oct 2009 04:27:14 +0000 (01:27 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 27 Jul 2011 20:52:31 +0000 (17:52 -0300)
Remove a hack I had put in to force the firmware to be 8MHz, now setting
the firmware properly based on the target standard.

Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/common/tuners/xc4000.c

index b3b33d2..1263bfe 100644 (file)
@@ -174,25 +174,29 @@ struct XC_TV_STANDARD {
 };
 
 /* Tuner standards */
-#define MN_NTSC_PAL_BTSC       0
-#define MN_NTSC_PAL_A2         1
-#define MN_NTSC_PAL_EIAJ       2
-#define MN_NTSC_PAL_Mono       3
-#define BG_PAL_A2              4
-#define BG_PAL_NICAM           5
-#define BG_PAL_MONO            6
-#define I_PAL_NICAM            7
-#define I_PAL_NICAM_MONO       8
-#define DK_PAL_A2              9
-#define DK_PAL_NICAM           10
-#define DK_PAL_MONO            11
-#define DK_SECAM_A2DK1         12
-#define DK_SECAM_A2LDK3        13
-#define DK_SECAM_A2MONO        14
-#define L_SECAM_NICAM          15
-#define LC_SECAM_NICAM         16
-#define FM_Radio_INPUT2        21
-#define FM_Radio_INPUT1        22
+#define XC4000_MN_NTSC_PAL_BTSC                0
+#define XC4000_MN_NTSC_PAL_A2          1
+#define XC4000_MN_NTSC_PAL_EIAJ                2
+#define XC4000_MN_NTSC_PAL_Mono                3
+#define XC4000_BG_PAL_A2               4
+#define XC4000_BG_PAL_NICAM            5
+#define XC4000_BG_PAL_MONO             6
+#define XC4000_I_PAL_NICAM             7
+#define XC4000_I_PAL_NICAM_MONO                8
+#define XC4000_DK_PAL_A2               9
+#define XC4000_DK_PAL_NICAM            10
+#define XC4000_DK_PAL_MONO             11
+#define XC4000_DK_SECAM_A2DK1          12
+#define XC4000_DK_SECAM_A2LDK3                 13
+#define XC4000_DK_SECAM_A2MONO                 14
+#define XC4000_L_SECAM_NICAM           15
+#define XC4000_LC_SECAM_NICAM          16
+#define XC4000_DTV6                    17
+#define XC4000_DTV8                    18
+#define XC4000_DTV7_8                  19
+#define XC4000_DTV7                    20
+#define XC4000_FM_Radio_INPUT2                 21
+#define XC4000_FM_Radio_INPUT1         22
 
 /* WAS :
 static struct XC_TV_STANDARD XC4000_Standard[MAX_TV_STANDARD] = {
@@ -1205,15 +1209,11 @@ static int xc4000_set_params(struct dvb_frontend *fe,
        struct dvb_frontend_parameters *params)
 {
        struct xc4000_priv *priv = fe->tuner_priv;
+       unsigned int type;
        int ret;
 
        dprintk(1, "%s() frequency=%d (Hz)\n", __func__, params->frequency);
 
-       /* FIXME: setup proper parameters */
-       if (check_firmware(fe, DTV8, 0, priv->if_khz) != XC_RESULT_SUCCESS) {
-               return -EREMOTEIO;
-       }
-
        if (fe->ops.info.type == FE_ATSC) {
                dprintk(1, "%s() ATSC\n", __func__);
                switch (params->u.vsb.modulation) {
@@ -1223,7 +1223,8 @@ static int xc4000_set_params(struct dvb_frontend *fe,
                        priv->rf_mode = XC_RF_MODE_AIR;
                        priv->freq_hz = params->frequency - 1750000;
                        priv->bandwidth = BANDWIDTH_6_MHZ;
-                       priv->video_standard = DTV6;
+                       priv->video_standard = XC4000_DTV6;
+                       type = DTV6;
                        break;
                case QAM_64:
                case QAM_256:
@@ -1232,7 +1233,8 @@ static int xc4000_set_params(struct dvb_frontend *fe,
                        priv->rf_mode = XC_RF_MODE_CABLE;
                        priv->freq_hz = params->frequency - 1750000;
                        priv->bandwidth = BANDWIDTH_6_MHZ;
-                       priv->video_standard = DTV6;
+                       priv->video_standard = XC4000_DTV6;
+                       type = DTV6;
                        break;
                default:
                        return -EINVAL;
@@ -1242,16 +1244,19 @@ static int xc4000_set_params(struct dvb_frontend *fe,
                switch (params->u.ofdm.bandwidth) {
                case BANDWIDTH_6_MHZ:
                        priv->bandwidth = BANDWIDTH_6_MHZ;
-                       priv->video_standard = DTV6;
+                       priv->video_standard = XC4000_DTV6;
                        priv->freq_hz = params->frequency - 1750000;
+                       type = DTV6;
                        break;
                case BANDWIDTH_7_MHZ:
                        printk(KERN_ERR "xc4000 bandwidth 7MHz not supported\n");
+                       type = DTV7;
                        return -EINVAL;
                case BANDWIDTH_8_MHZ:
                        priv->bandwidth = BANDWIDTH_8_MHZ;
-                       priv->video_standard = DTV8;
+                       priv->video_standard = XC4000_DTV8;
                        priv->freq_hz = params->frequency - 2750000;
+                       type = DTV8;
                        break;
                default:
                        printk(KERN_ERR "xc4000 bandwidth not set!\n");
@@ -1266,6 +1271,11 @@ static int xc4000_set_params(struct dvb_frontend *fe,
        dprintk(1, "%s() frequency=%d (compensated)\n",
                __func__, priv->freq_hz);
 
+       /* Make sure the correct firmware type is loaded */
+       if (check_firmware(fe, type, 0, priv->if_khz) != XC_RESULT_SUCCESS) {
+               return -EREMOTEIO;
+       }
+
        ret = xc_SetSignalSource(priv, priv->rf_mode);
        if (ret != XC_RESULT_SUCCESS) {
                printk(KERN_ERR
@@ -1325,11 +1335,6 @@ static int xc4000_set_analog_params(struct dvb_frontend *fe,
        dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
                __func__, params->frequency);
 
-       /* FIXME: setup proper parameters */
-       if (check_firmware(fe, DTV8, 0, priv->if_khz) != XC_RESULT_SUCCESS) {
-               return -EREMOTEIO;
-       }
-
        /* Fix me: it could be air. */
        priv->rf_mode = params->mode;
        if (params->mode > XC_RF_MODE_CABLE)
@@ -1343,45 +1348,51 @@ static int xc4000_set_analog_params(struct dvb_frontend *fe,
         */
        if (params->std & V4L2_STD_MN) {
                /* default to BTSC audio standard */
-               priv->video_standard = MN_NTSC_PAL_BTSC;
+               priv->video_standard = XC4000_MN_NTSC_PAL_BTSC;
                goto tune_channel;
        }
 
        if (params->std & V4L2_STD_PAL_BG) {
                /* default to NICAM audio standard */
-               priv->video_standard = BG_PAL_NICAM;
+               priv->video_standard = XC4000_BG_PAL_NICAM;
                goto tune_channel;
        }
 
        if (params->std & V4L2_STD_PAL_I) {
                /* default to NICAM audio standard */
-               priv->video_standard = I_PAL_NICAM;
+               priv->video_standard = XC4000_I_PAL_NICAM;
                goto tune_channel;
        }
 
        if (params->std & V4L2_STD_PAL_DK) {
                /* default to NICAM audio standard */
-               priv->video_standard = DK_PAL_NICAM;
+               priv->video_standard = XC4000_DK_PAL_NICAM;
                goto tune_channel;
        }
 
        if (params->std & V4L2_STD_SECAM_DK) {
                /* default to A2 DK1 audio standard */
-               priv->video_standard = DK_SECAM_A2DK1;
+               priv->video_standard = XC4000_DK_SECAM_A2DK1;
                goto tune_channel;
        }
 
        if (params->std & V4L2_STD_SECAM_L) {
-               priv->video_standard = L_SECAM_NICAM;
+               priv->video_standard = XC4000_L_SECAM_NICAM;
                goto tune_channel;
        }
 
        if (params->std & V4L2_STD_SECAM_LC) {
-               priv->video_standard = LC_SECAM_NICAM;
+               priv->video_standard = XC4000_LC_SECAM_NICAM;
                goto tune_channel;
        }
 
 tune_channel:
+
+       /* FIXME - firmware type not being set properly */
+       if (check_firmware(fe, DTV8, 0, priv->if_khz) != XC_RESULT_SUCCESS) {
+               return -EREMOTEIO;
+       }
+
        ret = xc_SetSignalSource(priv, priv->rf_mode);
        if (ret != XC_RESULT_SUCCESS) {
                printk(KERN_ERR