diff options
Diffstat (limited to 'drivers/media/common')
-rw-r--r-- | drivers/media/common/tuners/tda9887.c | 9 | ||||
-rw-r--r-- | drivers/media/common/tuners/tea5761.c | 33 | ||||
-rw-r--r-- | drivers/media/common/tuners/tuner-types.c | 21 | ||||
-rw-r--r-- | drivers/media/common/tuners/tuner-xc2028.c | 16 | ||||
-rw-r--r-- | drivers/media/common/tuners/xc5000.c | 56 | ||||
-rw-r--r-- | drivers/media/common/tuners/xc5000.h | 1 |
6 files changed, 118 insertions, 18 deletions
diff --git a/drivers/media/common/tuners/tda9887.c b/drivers/media/common/tuners/tda9887.c index bf14bd79e2fc..cdb645d57438 100644 --- a/drivers/media/common/tuners/tda9887.c +++ b/drivers/media/common/tuners/tda9887.c | |||
@@ -36,6 +36,8 @@ struct tda9887_priv { | |||
36 | unsigned int mode; | 36 | unsigned int mode; |
37 | unsigned int audmode; | 37 | unsigned int audmode; |
38 | v4l2_std_id std; | 38 | v4l2_std_id std; |
39 | |||
40 | bool standby; | ||
39 | }; | 41 | }; |
40 | 42 | ||
41 | /* ---------------------------------------------------------------------- */ | 43 | /* ---------------------------------------------------------------------- */ |
@@ -568,7 +570,7 @@ static void tda9887_configure(struct dvb_frontend *fe) | |||
568 | tda9887_do_config(fe); | 570 | tda9887_do_config(fe); |
569 | tda9887_set_insmod(fe); | 571 | tda9887_set_insmod(fe); |
570 | 572 | ||
571 | if (priv->mode == T_STANDBY) | 573 | if (priv->standby) |
572 | priv->data[1] |= cForcedMuteAudioON; | 574 | priv->data[1] |= cForcedMuteAudioON; |
573 | 575 | ||
574 | tuner_dbg("writing: b=0x%02x c=0x%02x e=0x%02x\n", | 576 | tuner_dbg("writing: b=0x%02x c=0x%02x e=0x%02x\n", |
@@ -616,7 +618,7 @@ static void tda9887_standby(struct dvb_frontend *fe) | |||
616 | { | 618 | { |
617 | struct tda9887_priv *priv = fe->analog_demod_priv; | 619 | struct tda9887_priv *priv = fe->analog_demod_priv; |
618 | 620 | ||
619 | priv->mode = T_STANDBY; | 621 | priv->standby = true; |
620 | 622 | ||
621 | tda9887_configure(fe); | 623 | tda9887_configure(fe); |
622 | } | 624 | } |
@@ -626,6 +628,7 @@ static void tda9887_set_params(struct dvb_frontend *fe, | |||
626 | { | 628 | { |
627 | struct tda9887_priv *priv = fe->analog_demod_priv; | 629 | struct tda9887_priv *priv = fe->analog_demod_priv; |
628 | 630 | ||
631 | priv->standby = false; | ||
629 | priv->mode = params->mode; | 632 | priv->mode = params->mode; |
630 | priv->audmode = params->audmode; | 633 | priv->audmode = params->audmode; |
631 | priv->std = params->std; | 634 | priv->std = params->std; |
@@ -686,7 +689,7 @@ struct dvb_frontend *tda9887_attach(struct dvb_frontend *fe, | |||
686 | return NULL; | 689 | return NULL; |
687 | case 1: | 690 | case 1: |
688 | fe->analog_demod_priv = priv; | 691 | fe->analog_demod_priv = priv; |
689 | priv->mode = T_STANDBY; | 692 | priv->standby = true; |
690 | tuner_info("tda988[5/6/7] found\n"); | 693 | tuner_info("tda988[5/6/7] found\n"); |
691 | break; | 694 | break; |
692 | default: | 695 | default: |
diff --git a/drivers/media/common/tuners/tea5761.c b/drivers/media/common/tuners/tea5761.c index 925399dffbed..bf78cb9fc52c 100644 --- a/drivers/media/common/tuners/tea5761.c +++ b/drivers/media/common/tuners/tea5761.c | |||
@@ -23,6 +23,7 @@ struct tea5761_priv { | |||
23 | struct tuner_i2c_props i2c_props; | 23 | struct tuner_i2c_props i2c_props; |
24 | 24 | ||
25 | u32 frequency; | 25 | u32 frequency; |
26 | bool standby; | ||
26 | }; | 27 | }; |
27 | 28 | ||
28 | /*****************************************************************************/ | 29 | /*****************************************************************************/ |
@@ -135,18 +136,19 @@ static void tea5761_status_dump(unsigned char *buffer) | |||
135 | } | 136 | } |
136 | 137 | ||
137 | /* Freq should be specifyed at 62.5 Hz */ | 138 | /* Freq should be specifyed at 62.5 Hz */ |
138 | static int set_radio_freq(struct dvb_frontend *fe, | 139 | static int __set_radio_freq(struct dvb_frontend *fe, |
139 | struct analog_parameters *params) | 140 | unsigned int freq, |
141 | bool mono) | ||
140 | { | 142 | { |
141 | struct tea5761_priv *priv = fe->tuner_priv; | 143 | struct tea5761_priv *priv = fe->tuner_priv; |
142 | unsigned int frq = params->frequency; | 144 | unsigned int frq = freq; |
143 | unsigned char buffer[7] = {0, 0, 0, 0, 0, 0, 0 }; | 145 | unsigned char buffer[7] = {0, 0, 0, 0, 0, 0, 0 }; |
144 | unsigned div; | 146 | unsigned div; |
145 | int rc; | 147 | int rc; |
146 | 148 | ||
147 | tuner_dbg("radio freq counter %d\n", frq); | 149 | tuner_dbg("radio freq counter %d\n", frq); |
148 | 150 | ||
149 | if (params->mode == T_STANDBY) { | 151 | if (priv->standby) { |
150 | tuner_dbg("TEA5761 set to standby mode\n"); | 152 | tuner_dbg("TEA5761 set to standby mode\n"); |
151 | buffer[5] |= TEA5761_TNCTRL_MU; | 153 | buffer[5] |= TEA5761_TNCTRL_MU; |
152 | } else { | 154 | } else { |
@@ -154,7 +156,7 @@ static int set_radio_freq(struct dvb_frontend *fe, | |||
154 | } | 156 | } |
155 | 157 | ||
156 | 158 | ||
157 | if (params->audmode == V4L2_TUNER_MODE_MONO) { | 159 | if (mono) { |
158 | tuner_dbg("TEA5761 set to mono\n"); | 160 | tuner_dbg("TEA5761 set to mono\n"); |
159 | buffer[5] |= TEA5761_TNCTRL_MST; | 161 | buffer[5] |= TEA5761_TNCTRL_MST; |
160 | } else { | 162 | } else { |
@@ -176,6 +178,26 @@ static int set_radio_freq(struct dvb_frontend *fe, | |||
176 | return 0; | 178 | return 0; |
177 | } | 179 | } |
178 | 180 | ||
181 | static int set_radio_freq(struct dvb_frontend *fe, | ||
182 | struct analog_parameters *params) | ||
183 | { | ||
184 | struct tea5761_priv *priv = fe->analog_demod_priv; | ||
185 | |||
186 | priv->standby = false; | ||
187 | |||
188 | return __set_radio_freq(fe, params->frequency, | ||
189 | params->audmode == V4L2_TUNER_MODE_MONO); | ||
190 | } | ||
191 | |||
192 | static int set_radio_sleep(struct dvb_frontend *fe) | ||
193 | { | ||
194 | struct tea5761_priv *priv = fe->analog_demod_priv; | ||
195 | |||
196 | priv->standby = true; | ||
197 | |||
198 | return __set_radio_freq(fe, priv->frequency, false); | ||
199 | } | ||
200 | |||
179 | static int tea5761_read_status(struct dvb_frontend *fe, char *buffer) | 201 | static int tea5761_read_status(struct dvb_frontend *fe, char *buffer) |
180 | { | 202 | { |
181 | struct tea5761_priv *priv = fe->tuner_priv; | 203 | struct tea5761_priv *priv = fe->tuner_priv; |
@@ -284,6 +306,7 @@ static struct dvb_tuner_ops tea5761_tuner_ops = { | |||
284 | .name = "tea5761", // Philips TEA5761HN FM Radio | 306 | .name = "tea5761", // Philips TEA5761HN FM Radio |
285 | }, | 307 | }, |
286 | .set_analog_params = set_radio_freq, | 308 | .set_analog_params = set_radio_freq, |
309 | .sleep = set_radio_sleep, | ||
287 | .release = tea5761_release, | 310 | .release = tea5761_release, |
288 | .get_frequency = tea5761_get_frequency, | 311 | .get_frequency = tea5761_get_frequency, |
289 | .get_status = tea5761_get_status, | 312 | .get_status = tea5761_get_status, |
diff --git a/drivers/media/common/tuners/tuner-types.c b/drivers/media/common/tuners/tuner-types.c index 58a513bcd747..afba6dc5e080 100644 --- a/drivers/media/common/tuners/tuner-types.c +++ b/drivers/media/common/tuners/tuner-types.c | |||
@@ -971,6 +971,22 @@ static struct tuner_params tuner_tena_9533_di_params[] = { | |||
971 | }, | 971 | }, |
972 | }; | 972 | }; |
973 | 973 | ||
974 | /* ------------ TUNER_TENA_TNF_5337 - Tena tnf5337MFD STD M/N ------------ */ | ||
975 | |||
976 | static struct tuner_range tuner_tena_tnf_5337_ntsc_ranges[] = { | ||
977 | { 16 * 166.25 /*MHz*/, 0x86, 0x01, }, | ||
978 | { 16 * 466.25 /*MHz*/, 0x86, 0x02, }, | ||
979 | { 16 * 999.99 , 0x86, 0x08, }, | ||
980 | }; | ||
981 | |||
982 | static struct tuner_params tuner_tena_tnf_5337_params[] = { | ||
983 | { | ||
984 | .type = TUNER_PARAM_TYPE_NTSC, | ||
985 | .ranges = tuner_tena_tnf_5337_ntsc_ranges, | ||
986 | .count = ARRAY_SIZE(tuner_tena_tnf_5337_ntsc_ranges), | ||
987 | }, | ||
988 | }; | ||
989 | |||
974 | /* ------------ TUNER_PHILIPS_FMD1216ME(X)_MK3 - Philips PAL ------------ */ | 990 | /* ------------ TUNER_PHILIPS_FMD1216ME(X)_MK3 - Philips PAL ------------ */ |
975 | 991 | ||
976 | static struct tuner_range tuner_philips_fmd1216me_mk3_pal_ranges[] = { | 992 | static struct tuner_range tuner_philips_fmd1216me_mk3_pal_ranges[] = { |
@@ -1842,6 +1858,11 @@ struct tunertype tuners[] = { | |||
1842 | .params = tuner_philips_fq1236_mk5_params, | 1858 | .params = tuner_philips_fq1236_mk5_params, |
1843 | .count = ARRAY_SIZE(tuner_philips_fq1236_mk5_params), | 1859 | .count = ARRAY_SIZE(tuner_philips_fq1236_mk5_params), |
1844 | }, | 1860 | }, |
1861 | [TUNER_TENA_TNF_5337] = { /* Tena 5337 MFD */ | ||
1862 | .name = "Tena TNF5337 MFD", | ||
1863 | .params = tuner_tena_tnf_5337_params, | ||
1864 | .count = ARRAY_SIZE(tuner_tena_tnf_5337_params), | ||
1865 | }, | ||
1845 | }; | 1866 | }; |
1846 | EXPORT_SYMBOL(tuners); | 1867 | EXPORT_SYMBOL(tuners); |
1847 | 1868 | ||
diff --git a/drivers/media/common/tuners/tuner-xc2028.c b/drivers/media/common/tuners/tuner-xc2028.c index b6ce528e1889..16fba6b59616 100644 --- a/drivers/media/common/tuners/tuner-xc2028.c +++ b/drivers/media/common/tuners/tuner-xc2028.c | |||
@@ -685,7 +685,7 @@ static int check_firmware(struct dvb_frontend *fe, unsigned int type, | |||
685 | { | 685 | { |
686 | struct xc2028_data *priv = fe->tuner_priv; | 686 | struct xc2028_data *priv = fe->tuner_priv; |
687 | struct firmware_properties new_fw; | 687 | struct firmware_properties new_fw; |
688 | int rc = 0, is_retry = 0; | 688 | int rc = 0, retry_count = 0; |
689 | u16 version, hwmodel; | 689 | u16 version, hwmodel; |
690 | v4l2_std_id std0; | 690 | v4l2_std_id std0; |
691 | 691 | ||
@@ -855,9 +855,9 @@ read_not_reliable: | |||
855 | 855 | ||
856 | fail: | 856 | fail: |
857 | memset(&priv->cur_fw, 0, sizeof(priv->cur_fw)); | 857 | memset(&priv->cur_fw, 0, sizeof(priv->cur_fw)); |
858 | if (!is_retry) { | 858 | if (retry_count < 8) { |
859 | msleep(50); | 859 | msleep(50); |
860 | is_retry = 1; | 860 | retry_count++; |
861 | tuner_dbg("Retrying firmware load\n"); | 861 | tuner_dbg("Retrying firmware load\n"); |
862 | goto retry; | 862 | goto retry; |
863 | } | 863 | } |
@@ -907,7 +907,7 @@ ret: | |||
907 | #define DIV 15625 | 907 | #define DIV 15625 |
908 | 908 | ||
909 | static int generic_set_freq(struct dvb_frontend *fe, u32 freq /* in HZ */, | 909 | static int generic_set_freq(struct dvb_frontend *fe, u32 freq /* in HZ */, |
910 | enum tuner_mode new_mode, | 910 | enum v4l2_tuner_type new_type, |
911 | unsigned int type, | 911 | unsigned int type, |
912 | v4l2_std_id std, | 912 | v4l2_std_id std, |
913 | u16 int_freq) | 913 | u16 int_freq) |
@@ -933,7 +933,7 @@ static int generic_set_freq(struct dvb_frontend *fe, u32 freq /* in HZ */, | |||
933 | * that xc2028 will be in a safe state. | 933 | * that xc2028 will be in a safe state. |
934 | * Maybe this might also be needed for DTV. | 934 | * Maybe this might also be needed for DTV. |
935 | */ | 935 | */ |
936 | if (new_mode == T_ANALOG_TV) { | 936 | if (new_type == V4L2_TUNER_ANALOG_TV) { |
937 | rc = send_seq(priv, {0x00, 0x00}); | 937 | rc = send_seq(priv, {0x00, 0x00}); |
938 | 938 | ||
939 | /* Analog modes require offset = 0 */ | 939 | /* Analog modes require offset = 0 */ |
@@ -1054,7 +1054,7 @@ static int xc2028_set_analog_freq(struct dvb_frontend *fe, | |||
1054 | if (priv->ctrl.input1) | 1054 | if (priv->ctrl.input1) |
1055 | type |= INPUT1; | 1055 | type |= INPUT1; |
1056 | return generic_set_freq(fe, (625l * p->frequency) / 10, | 1056 | return generic_set_freq(fe, (625l * p->frequency) / 10, |
1057 | T_RADIO, type, 0, 0); | 1057 | V4L2_TUNER_RADIO, type, 0, 0); |
1058 | } | 1058 | } |
1059 | 1059 | ||
1060 | /* if std is not defined, choose one */ | 1060 | /* if std is not defined, choose one */ |
@@ -1069,7 +1069,7 @@ static int xc2028_set_analog_freq(struct dvb_frontend *fe, | |||
1069 | p->std |= parse_audio_std_option(); | 1069 | p->std |= parse_audio_std_option(); |
1070 | 1070 | ||
1071 | return generic_set_freq(fe, 62500l * p->frequency, | 1071 | return generic_set_freq(fe, 62500l * p->frequency, |
1072 | T_ANALOG_TV, type, p->std, 0); | 1072 | V4L2_TUNER_ANALOG_TV, type, p->std, 0); |
1073 | } | 1073 | } |
1074 | 1074 | ||
1075 | static int xc2028_set_params(struct dvb_frontend *fe, | 1075 | static int xc2028_set_params(struct dvb_frontend *fe, |
@@ -1174,7 +1174,7 @@ static int xc2028_set_params(struct dvb_frontend *fe, | |||
1174 | } | 1174 | } |
1175 | 1175 | ||
1176 | return generic_set_freq(fe, p->frequency, | 1176 | return generic_set_freq(fe, p->frequency, |
1177 | T_DIGITAL_TV, type, 0, demod); | 1177 | V4L2_TUNER_DIGITAL_TV, type, 0, demod); |
1178 | } | 1178 | } |
1179 | 1179 | ||
1180 | static int xc2028_sleep(struct dvb_frontend *fe) | 1180 | static int xc2028_sleep(struct dvb_frontend *fe) |
diff --git a/drivers/media/common/tuners/xc5000.c b/drivers/media/common/tuners/xc5000.c index 76ac5cd84af7..1e28f7dcb26b 100644 --- a/drivers/media/common/tuners/xc5000.c +++ b/drivers/media/common/tuners/xc5000.c | |||
@@ -65,7 +65,7 @@ struct xc5000_priv { | |||
65 | }; | 65 | }; |
66 | 66 | ||
67 | /* Misc Defines */ | 67 | /* Misc Defines */ |
68 | #define MAX_TV_STANDARD 23 | 68 | #define MAX_TV_STANDARD 24 |
69 | #define XC_MAX_I2C_WRITE_LENGTH 64 | 69 | #define XC_MAX_I2C_WRITE_LENGTH 64 |
70 | 70 | ||
71 | /* Signal Types */ | 71 | /* Signal Types */ |
@@ -92,6 +92,8 @@ struct xc5000_priv { | |||
92 | #define XREG_IF_OUT 0x05 | 92 | #define XREG_IF_OUT 0x05 |
93 | #define XREG_SEEK_MODE 0x07 | 93 | #define XREG_SEEK_MODE 0x07 |
94 | #define XREG_POWER_DOWN 0x0A /* Obsolete */ | 94 | #define XREG_POWER_DOWN 0x0A /* Obsolete */ |
95 | /* Set the output amplitude - SIF for analog, DTVP/DTVN for digital */ | ||
96 | #define XREG_OUTPUT_AMP 0x0B | ||
95 | #define XREG_SIGNALSOURCE 0x0D /* 0=Air, 1=Cable */ | 97 | #define XREG_SIGNALSOURCE 0x0D /* 0=Air, 1=Cable */ |
96 | #define XREG_SMOOTHEDCVBS 0x0E | 98 | #define XREG_SMOOTHEDCVBS 0x0E |
97 | #define XREG_XTALFREQ 0x0F | 99 | #define XREG_XTALFREQ 0x0F |
@@ -173,6 +175,7 @@ struct XC_TV_STANDARD { | |||
173 | #define DTV7 20 | 175 | #define DTV7 20 |
174 | #define FM_Radio_INPUT2 21 | 176 | #define FM_Radio_INPUT2 21 |
175 | #define FM_Radio_INPUT1 22 | 177 | #define FM_Radio_INPUT1 22 |
178 | #define FM_Radio_INPUT1_MONO 23 | ||
176 | 179 | ||
177 | static struct XC_TV_STANDARD XC5000_Standard[MAX_TV_STANDARD] = { | 180 | static struct XC_TV_STANDARD XC5000_Standard[MAX_TV_STANDARD] = { |
178 | {"M/N-NTSC/PAL-BTSC", 0x0400, 0x8020}, | 181 | {"M/N-NTSC/PAL-BTSC", 0x0400, 0x8020}, |
@@ -197,7 +200,8 @@ static struct XC_TV_STANDARD XC5000_Standard[MAX_TV_STANDARD] = { | |||
197 | {"DTV7/8", 0x00C0, 0x801B}, | 200 | {"DTV7/8", 0x00C0, 0x801B}, |
198 | {"DTV7", 0x00C0, 0x8007}, | 201 | {"DTV7", 0x00C0, 0x8007}, |
199 | {"FM Radio-INPUT2", 0x9802, 0x9002}, | 202 | {"FM Radio-INPUT2", 0x9802, 0x9002}, |
200 | {"FM Radio-INPUT1", 0x0208, 0x9002} | 203 | {"FM Radio-INPUT1", 0x0208, 0x9002}, |
204 | {"FM Radio-INPUT1_MONO", 0x0278, 0x9002} | ||
201 | }; | 205 | }; |
202 | 206 | ||
203 | static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe); | 207 | static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe); |
@@ -683,6 +687,24 @@ static int xc5000_set_params(struct dvb_frontend *fe, | |||
683 | return -EINVAL; | 687 | return -EINVAL; |
684 | } | 688 | } |
685 | priv->rf_mode = XC_RF_MODE_AIR; | 689 | priv->rf_mode = XC_RF_MODE_AIR; |
690 | } else if (fe->ops.info.type == FE_QAM) { | ||
691 | dprintk(1, "%s() QAM\n", __func__); | ||
692 | switch (params->u.qam.modulation) { | ||
693 | case QAM_16: | ||
694 | case QAM_32: | ||
695 | case QAM_64: | ||
696 | case QAM_128: | ||
697 | case QAM_256: | ||
698 | case QAM_AUTO: | ||
699 | dprintk(1, "%s() QAM modulation\n", __func__); | ||
700 | priv->bandwidth = BANDWIDTH_8_MHZ; | ||
701 | priv->video_standard = DTV7_8; | ||
702 | priv->freq_hz = params->frequency - 2750000; | ||
703 | priv->rf_mode = XC_RF_MODE_CABLE; | ||
704 | break; | ||
705 | default: | ||
706 | return -EINVAL; | ||
707 | } | ||
686 | } else { | 708 | } else { |
687 | printk(KERN_ERR "xc5000 modulation type not supported!\n"); | 709 | printk(KERN_ERR "xc5000 modulation type not supported!\n"); |
688 | return -EINVAL; | 710 | return -EINVAL; |
@@ -714,6 +736,8 @@ static int xc5000_set_params(struct dvb_frontend *fe, | |||
714 | return -EIO; | 736 | return -EIO; |
715 | } | 737 | } |
716 | 738 | ||
739 | xc_write_reg(priv, XREG_OUTPUT_AMP, 0x8a); | ||
740 | |||
717 | xc_tune_channel(priv, priv->freq_hz, XC_TUNE_DIGITAL); | 741 | xc_tune_channel(priv, priv->freq_hz, XC_TUNE_DIGITAL); |
718 | 742 | ||
719 | if (debug) | 743 | if (debug) |
@@ -818,6 +842,8 @@ tune_channel: | |||
818 | return -EREMOTEIO; | 842 | return -EREMOTEIO; |
819 | } | 843 | } |
820 | 844 | ||
845 | xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09); | ||
846 | |||
821 | xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG); | 847 | xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG); |
822 | 848 | ||
823 | if (debug) | 849 | if (debug) |
@@ -845,6 +871,8 @@ static int xc5000_set_radio_freq(struct dvb_frontend *fe, | |||
845 | radio_input = FM_Radio_INPUT1; | 871 | radio_input = FM_Radio_INPUT1; |
846 | else if (priv->radio_input == XC5000_RADIO_FM2) | 872 | else if (priv->radio_input == XC5000_RADIO_FM2) |
847 | radio_input = FM_Radio_INPUT2; | 873 | radio_input = FM_Radio_INPUT2; |
874 | else if (priv->radio_input == XC5000_RADIO_FM1_MONO) | ||
875 | radio_input = FM_Radio_INPUT1_MONO; | ||
848 | else { | 876 | else { |
849 | dprintk(1, "%s() unknown radio input %d\n", __func__, | 877 | dprintk(1, "%s() unknown radio input %d\n", __func__, |
850 | priv->radio_input); | 878 | priv->radio_input); |
@@ -871,6 +899,12 @@ static int xc5000_set_radio_freq(struct dvb_frontend *fe, | |||
871 | return -EREMOTEIO; | 899 | return -EREMOTEIO; |
872 | } | 900 | } |
873 | 901 | ||
902 | if ((priv->radio_input == XC5000_RADIO_FM1) || | ||
903 | (priv->radio_input == XC5000_RADIO_FM2)) | ||
904 | xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09); | ||
905 | else if (priv->radio_input == XC5000_RADIO_FM1_MONO) | ||
906 | xc_write_reg(priv, XREG_OUTPUT_AMP, 0x06); | ||
907 | |||
874 | xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG); | 908 | xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG); |
875 | 909 | ||
876 | return 0; | 910 | return 0; |
@@ -1021,6 +1055,23 @@ static int xc5000_release(struct dvb_frontend *fe) | |||
1021 | return 0; | 1055 | return 0; |
1022 | } | 1056 | } |
1023 | 1057 | ||
1058 | static int xc5000_set_config(struct dvb_frontend *fe, void *priv_cfg) | ||
1059 | { | ||
1060 | struct xc5000_priv *priv = fe->tuner_priv; | ||
1061 | struct xc5000_config *p = priv_cfg; | ||
1062 | |||
1063 | dprintk(1, "%s()\n", __func__); | ||
1064 | |||
1065 | if (p->if_khz) | ||
1066 | priv->if_khz = p->if_khz; | ||
1067 | |||
1068 | if (p->radio_input) | ||
1069 | priv->radio_input = p->radio_input; | ||
1070 | |||
1071 | return 0; | ||
1072 | } | ||
1073 | |||
1074 | |||
1024 | static const struct dvb_tuner_ops xc5000_tuner_ops = { | 1075 | static const struct dvb_tuner_ops xc5000_tuner_ops = { |
1025 | .info = { | 1076 | .info = { |
1026 | .name = "Xceive XC5000", | 1077 | .name = "Xceive XC5000", |
@@ -1033,6 +1084,7 @@ static const struct dvb_tuner_ops xc5000_tuner_ops = { | |||
1033 | .init = xc5000_init, | 1084 | .init = xc5000_init, |
1034 | .sleep = xc5000_sleep, | 1085 | .sleep = xc5000_sleep, |
1035 | 1086 | ||
1087 | .set_config = xc5000_set_config, | ||
1036 | .set_params = xc5000_set_params, | 1088 | .set_params = xc5000_set_params, |
1037 | .set_analog_params = xc5000_set_analog_params, | 1089 | .set_analog_params = xc5000_set_analog_params, |
1038 | .get_frequency = xc5000_get_frequency, | 1090 | .get_frequency = xc5000_get_frequency, |
diff --git a/drivers/media/common/tuners/xc5000.h b/drivers/media/common/tuners/xc5000.h index 3756e73649be..e2957451b532 100644 --- a/drivers/media/common/tuners/xc5000.h +++ b/drivers/media/common/tuners/xc5000.h | |||
@@ -40,6 +40,7 @@ struct xc5000_config { | |||
40 | #define XC5000_RADIO_NOT_CONFIGURED 0 | 40 | #define XC5000_RADIO_NOT_CONFIGURED 0 |
41 | #define XC5000_RADIO_FM1 1 | 41 | #define XC5000_RADIO_FM1 1 |
42 | #define XC5000_RADIO_FM2 2 | 42 | #define XC5000_RADIO_FM2 2 |
43 | #define XC5000_RADIO_FM1_MONO 3 | ||
43 | 44 | ||
44 | /* For each bridge framework, when it attaches either analog or digital, | 45 | /* For each bridge framework, when it attaches either analog or digital, |
45 | * it has to store a reference back to its _core equivalent structure, | 46 | * it has to store a reference back to its _core equivalent structure, |