V4L/DVB (7060): em28xx: remove has_tuner
has_tuner flag doesn't make much sense, since tuner_type=TUNER_ABSENT means the same thing. Having two ways to say that a tuner is not present is not nice, since it may lead to bad setups. In fact, with the previous code, if a device were using has_tuner=0, but the user forces a tuner, with modprobe option tuner=type, the modprobe option won't work. Also, tveeprom returns TUNER_ABSENT, when tuner is unknown or absent. So, with the previous logic, in this case, the driver should set has_tuner=0, or has_tuner=1 otherwise. Instead of adding several additional tests and setups, better just to remove .has_tuner. Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
72e04f720f
commit
ed086314f4
|
@ -78,7 +78,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.is_em2800 = 1,
|
.is_em2800 = 1,
|
||||||
.vchannels = 2,
|
.vchannels = 2,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.has_tuner = 1,
|
|
||||||
.decoder = EM28XX_SAA7113,
|
.decoder = EM28XX_SAA7113,
|
||||||
.input = { {
|
.input = { {
|
||||||
.type = EM28XX_VMUX_COMPOSITE1,
|
.type = EM28XX_VMUX_COMPOSITE1,
|
||||||
|
@ -93,13 +92,14 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
[EM2820_BOARD_UNKNOWN] = {
|
[EM2820_BOARD_UNKNOWN] = {
|
||||||
.name = "Unknown EM2750/28xx video grabber",
|
.name = "Unknown EM2750/28xx video grabber",
|
||||||
.is_em2800 = 0,
|
.is_em2800 = 0,
|
||||||
|
.tuner_type = TUNER_ABSENT,
|
||||||
},
|
},
|
||||||
[EM2820_BOARD_KWORLD_PVRTV2800RF] = {
|
[EM2820_BOARD_KWORLD_PVRTV2800RF] = {
|
||||||
.name = "Kworld PVR TV 2800 RF",
|
.name = "Kworld PVR TV 2800 RF",
|
||||||
.is_em2800 = 0,
|
.is_em2800 = 0,
|
||||||
.vchannels = 2,
|
.vchannels = 2,
|
||||||
|
.tuner_type = TUNER_TEMIC_PAL,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.has_tuner = 1,
|
|
||||||
.decoder = EM28XX_SAA7113,
|
.decoder = EM28XX_SAA7113,
|
||||||
.input = { {
|
.input = { {
|
||||||
.type = EM28XX_VMUX_COMPOSITE1,
|
.type = EM28XX_VMUX_COMPOSITE1,
|
||||||
|
@ -116,7 +116,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
|
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.has_tuner = 1,
|
|
||||||
.decoder = EM28XX_SAA7113,
|
.decoder = EM28XX_SAA7113,
|
||||||
.input = { {
|
.input = { {
|
||||||
.type = EM28XX_VMUX_TELEVISION,
|
.type = EM28XX_VMUX_TELEVISION,
|
||||||
|
@ -137,7 +136,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
|
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.has_tuner = 1,
|
|
||||||
.decoder = EM28XX_SAA7113,
|
.decoder = EM28XX_SAA7113,
|
||||||
.input = { {
|
.input = { {
|
||||||
.type = EM28XX_VMUX_TELEVISION,
|
.type = EM28XX_VMUX_TELEVISION,
|
||||||
|
@ -160,7 +158,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.tda9887_conf = TDA9887_PRESENT |
|
.tda9887_conf = TDA9887_PRESENT |
|
||||||
TDA9887_PORT1_ACTIVE|
|
TDA9887_PORT1_ACTIVE|
|
||||||
TDA9887_PORT2_ACTIVE,
|
TDA9887_PORT2_ACTIVE,
|
||||||
.has_tuner = 1,
|
|
||||||
.decoder = EM28XX_TVP5150,
|
.decoder = EM28XX_TVP5150,
|
||||||
.has_msp34xx = 1,
|
.has_msp34xx = 1,
|
||||||
/*FIXME: S-Video not tested */
|
/*FIXME: S-Video not tested */
|
||||||
|
@ -180,7 +177,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.tuner_type = TUNER_XC2028,
|
.tuner_type = TUNER_XC2028,
|
||||||
.has_tuner = 1,
|
|
||||||
.mts_firmware = 1,
|
.mts_firmware = 1,
|
||||||
.decoder = EM28XX_TVP5150,
|
.decoder = EM28XX_TVP5150,
|
||||||
.input = { {
|
.input = { {
|
||||||
|
@ -202,7 +198,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.tuner_type = TUNER_XC2028,
|
.tuner_type = TUNER_XC2028,
|
||||||
.has_tuner = 1,
|
|
||||||
.mts_firmware = 1,
|
.mts_firmware = 1,
|
||||||
.has_12mhz_i2s = 1,
|
.has_12mhz_i2s = 1,
|
||||||
.decoder = EM28XX_TVP5150,
|
.decoder = EM28XX_TVP5150,
|
||||||
|
@ -227,7 +222,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.name = "Terratec Hybrid XS",
|
.name = "Terratec Hybrid XS",
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.has_tuner = 1,
|
|
||||||
.tuner_type = TUNER_XC2028,
|
.tuner_type = TUNER_XC2028,
|
||||||
.decoder = EM28XX_TVP5150,
|
.decoder = EM28XX_TVP5150,
|
||||||
.input = { {
|
.input = { {
|
||||||
|
@ -251,7 +245,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.name = "Terratec Prodigy XS",
|
.name = "Terratec Prodigy XS",
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.has_tuner = 1,
|
|
||||||
.tuner_type = TUNER_XC2028,
|
.tuner_type = TUNER_XC2028,
|
||||||
.decoder = EM28XX_TVP5150,
|
.decoder = EM28XX_TVP5150,
|
||||||
.input = { {
|
.input = { {
|
||||||
|
@ -275,7 +268,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.tda9887_conf = TDA9887_PRESENT |
|
.tda9887_conf = TDA9887_PRESENT |
|
||||||
TDA9887_PORT1_ACTIVE |
|
TDA9887_PORT1_ACTIVE |
|
||||||
TDA9887_PORT2_ACTIVE,
|
TDA9887_PORT2_ACTIVE,
|
||||||
.has_tuner = 1,
|
|
||||||
.max_range_640_480 = 1,
|
.max_range_640_480 = 1,
|
||||||
|
|
||||||
.decoder = EM28XX_SAA7114,
|
.decoder = EM28XX_SAA7114,
|
||||||
|
@ -299,7 +291,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
|
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.has_tuner = 1,
|
|
||||||
.decoder = EM28XX_SAA7113,
|
.decoder = EM28XX_SAA7113,
|
||||||
.input = { {
|
.input = { {
|
||||||
.type = EM28XX_VMUX_TELEVISION,
|
.type = EM28XX_VMUX_TELEVISION,
|
||||||
|
@ -321,7 +312,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
|
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.has_tuner = 1,
|
|
||||||
.decoder = EM28XX_SAA7113,
|
.decoder = EM28XX_SAA7113,
|
||||||
.input = { {
|
.input = { {
|
||||||
.type = EM28XX_VMUX_TELEVISION,
|
.type = EM28XX_VMUX_TELEVISION,
|
||||||
|
@ -343,7 +333,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tuner_type = TUNER_PHILIPS_ATSC,
|
.tuner_type = TUNER_PHILIPS_ATSC,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.has_tuner = 1,
|
|
||||||
.decoder = EM28XX_SAA7113,
|
.decoder = EM28XX_SAA7113,
|
||||||
.input = { {
|
.input = { {
|
||||||
.type = EM28XX_VMUX_TELEVISION,
|
.type = EM28XX_VMUX_TELEVISION,
|
||||||
|
@ -362,7 +351,7 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
[EM2820_BOARD_PINNACLE_DVC_90] = {
|
[EM2820_BOARD_PINNACLE_DVC_90] = {
|
||||||
.name = "Pinnacle Dazzle DVC 90/DVC 100",
|
.name = "Pinnacle Dazzle DVC 90/DVC 100",
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.has_tuner = 0,
|
.tuner_type = TUNER_ABSENT,
|
||||||
.decoder = EM28XX_SAA7113,
|
.decoder = EM28XX_SAA7113,
|
||||||
.input = { {
|
.input = { {
|
||||||
.type = EM28XX_VMUX_COMPOSITE1,
|
.type = EM28XX_VMUX_COMPOSITE1,
|
||||||
|
@ -380,7 +369,6 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
|
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.has_tuner = 1,
|
|
||||||
.decoder = EM28XX_SAA7113,
|
.decoder = EM28XX_SAA7113,
|
||||||
.input = { {
|
.input = { {
|
||||||
.type = EM28XX_VMUX_TELEVISION,
|
.type = EM28XX_VMUX_TELEVISION,
|
||||||
|
@ -400,7 +388,7 @@ struct em28xx_board em28xx_boards[] = {
|
||||||
.name = "Pixelview Prolink PlayTV USB 2.0",
|
.name = "Pixelview Prolink PlayTV USB 2.0",
|
||||||
.vchannels = 3,
|
.vchannels = 3,
|
||||||
.tda9887_conf = TDA9887_PRESENT,
|
.tda9887_conf = TDA9887_PRESENT,
|
||||||
.has_tuner = 1,
|
.tuner_type = TUNER_YMEC_TVF_5533MF,
|
||||||
.decoder = EM28XX_SAA7113,
|
.decoder = EM28XX_SAA7113,
|
||||||
.input = { {
|
.input = { {
|
||||||
.type = EM28XX_VMUX_TELEVISION,
|
.type = EM28XX_VMUX_TELEVISION,
|
||||||
|
@ -551,7 +539,7 @@ static void em28xx_config_tuner(struct em28xx *dev)
|
||||||
struct tuner_setup tun_setup;
|
struct tuner_setup tun_setup;
|
||||||
struct v4l2_frequency f;
|
struct v4l2_frequency f;
|
||||||
|
|
||||||
if (!dev->has_tuner)
|
if (dev->tuner_type == TUNER_ABSENT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
|
tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
|
||||||
|
@ -668,7 +656,6 @@ static int em28xx_hint_board(struct em28xx *dev)
|
||||||
static void em28xx_set_model(struct em28xx *dev)
|
static void em28xx_set_model(struct em28xx *dev)
|
||||||
{
|
{
|
||||||
dev->is_em2800 = em28xx_boards[dev->model].is_em2800;
|
dev->is_em2800 = em28xx_boards[dev->model].is_em2800;
|
||||||
dev->has_tuner = em28xx_boards[dev->model].has_tuner;
|
|
||||||
dev->has_msp34xx = em28xx_boards[dev->model].has_msp34xx;
|
dev->has_msp34xx = em28xx_boards[dev->model].has_msp34xx;
|
||||||
dev->tda9887_conf = em28xx_boards[dev->model].tda9887_conf;
|
dev->tda9887_conf = em28xx_boards[dev->model].tda9887_conf;
|
||||||
dev->decoder = em28xx_boards[dev->model].decoder;
|
dev->decoder = em28xx_boards[dev->model].decoder;
|
||||||
|
@ -676,9 +663,6 @@ static void em28xx_set_model(struct em28xx *dev)
|
||||||
dev->analog_gpio = em28xx_boards[dev->model].analog_gpio;
|
dev->analog_gpio = em28xx_boards[dev->model].analog_gpio;
|
||||||
dev->has_12mhz_i2s = em28xx_boards[dev->model].has_12mhz_i2s;
|
dev->has_12mhz_i2s = em28xx_boards[dev->model].has_12mhz_i2s;
|
||||||
dev->max_range_640_480 = em28xx_boards[dev->model].max_range_640_480;
|
dev->max_range_640_480 = em28xx_boards[dev->model].max_range_640_480;
|
||||||
|
|
||||||
if (!em28xx_boards[dev->model].has_tuner)
|
|
||||||
dev->tuner_type = UNSET;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
@ -745,6 +729,7 @@ void em28xx_card_setup(struct em28xx *dev)
|
||||||
tveeprom_hauppauge_analog(&dev->i2c_client, &tv, dev->eedata);
|
tveeprom_hauppauge_analog(&dev->i2c_client, &tv, dev->eedata);
|
||||||
|
|
||||||
dev->tuner_type = tv.tuner_type;
|
dev->tuner_type = tv.tuner_type;
|
||||||
|
|
||||||
if (tv.audio_processor == AUDIO_CHIP_MSP34XX) {
|
if (tv.audio_processor == AUDIO_CHIP_MSP34XX) {
|
||||||
dev->i2s_speed = 2048000;
|
dev->i2s_speed = 2048000;
|
||||||
dev->has_msp34xx = 1;
|
dev->has_msp34xx = 1;
|
||||||
|
@ -777,7 +762,7 @@ void em28xx_card_setup(struct em28xx *dev)
|
||||||
request_module("saa7115");
|
request_module("saa7115");
|
||||||
if (dev->decoder == EM28XX_TVP5150)
|
if (dev->decoder == EM28XX_TVP5150)
|
||||||
request_module("tvp5150");
|
request_module("tvp5150");
|
||||||
if (dev->has_tuner)
|
if (dev->tuner_type != TUNER_ABSENT)
|
||||||
request_module("tuner");
|
request_module("tuner");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "em28xx.h"
|
#include "em28xx.h"
|
||||||
#include <media/v4l2-common.h>
|
#include <media/v4l2-common.h>
|
||||||
#include <media/msp3400.h>
|
#include <media/msp3400.h>
|
||||||
|
#include <media/tuner.h>
|
||||||
|
|
||||||
#define DRIVER_AUTHOR "Ludovico Cavedon <cavedon@sssup.it>, " \
|
#define DRIVER_AUTHOR "Ludovico Cavedon <cavedon@sssup.it>, " \
|
||||||
"Markus Rechberger <mrechberger@gmail.com>, " \
|
"Markus Rechberger <mrechberger@gmail.com>, " \
|
||||||
|
@ -928,7 +929,7 @@ static int vidioc_querycap(struct file *file, void *priv,
|
||||||
V4L2_CAP_AUDIO |
|
V4L2_CAP_AUDIO |
|
||||||
V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
|
V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
|
||||||
|
|
||||||
if (dev->has_tuner)
|
if (dev->tuner_type != TUNER_ABSENT)
|
||||||
cap->capabilities |= V4L2_CAP_TUNER;
|
cap->capabilities |= V4L2_CAP_TUNER;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1900,7 +1901,7 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
|
||||||
em28xx_errdev("cannot allocate video_device.\n");
|
em28xx_errdev("cannot allocate video_device.\n");
|
||||||
goto fail_unreg;
|
goto fail_unreg;
|
||||||
}
|
}
|
||||||
if (dev->has_tuner)
|
if (dev->tuner_type != TUNER_ABSENT)
|
||||||
dev->vdev->type |= VID_TYPE_TUNER;
|
dev->vdev->type |= VID_TYPE_TUNER;
|
||||||
|
|
||||||
/* register v4l2 video video_device */
|
/* register v4l2 video video_device */
|
||||||
|
|
|
@ -161,7 +161,6 @@ struct em28xx_board {
|
||||||
unsigned int tda9887_conf;
|
unsigned int tda9887_conf;
|
||||||
|
|
||||||
unsigned int is_em2800:1;
|
unsigned int is_em2800:1;
|
||||||
unsigned int has_tuner:1;
|
|
||||||
unsigned int has_msp34xx:1;
|
unsigned int has_msp34xx:1;
|
||||||
unsigned int mts_firmware:1;
|
unsigned int mts_firmware:1;
|
||||||
unsigned int has_12mhz_i2s:1;
|
unsigned int has_12mhz_i2s:1;
|
||||||
|
@ -226,7 +225,6 @@ struct em28xx {
|
||||||
int devno; /* marks the number of this device */
|
int devno; /* marks the number of this device */
|
||||||
unsigned int analog_gpio;
|
unsigned int analog_gpio;
|
||||||
unsigned int is_em2800:1;
|
unsigned int is_em2800:1;
|
||||||
unsigned int has_tuner:1;
|
|
||||||
unsigned int has_msp34xx:1;
|
unsigned int has_msp34xx:1;
|
||||||
unsigned int has_tda9887:1;
|
unsigned int has_tda9887:1;
|
||||||
unsigned int stream_on:1; /* Locks streams */
|
unsigned int stream_on:1; /* Locks streams */
|
||||||
|
|
Loading…
Reference in a new issue