V4L/DVB (10562): bttv: rework the way digital inputs are indicated
The code was using a muxsel value of -1U to indicate a digital input. A couple places in were checking of muxsel < 0 to detect this, which doesn't work of course because muxsel is unsigned and can't be negative. Only a couple cards had digital inputs and it was always the last one, so for the card database create a one bit field that indicates the last input is digital. On init, this is used to set a new field in the bttv struct to the digital input's number or UNSET for none. This makes it easier to check if the current input is digital. Signed-off-by: Trent Piepho <xyzzy@speakeasy.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
4c548d4b28
commit
5221e21e5e
@@ -633,8 +633,9 @@ struct tvcard bttv_tvcards[] = {
|
|||||||
.video_inputs = 3,
|
.video_inputs = 3,
|
||||||
/* .audio_inputs= 1, */
|
/* .audio_inputs= 1, */
|
||||||
.svhs = NO_SVHS,
|
.svhs = NO_SVHS,
|
||||||
|
.has_dig_in = 1,
|
||||||
.gpiomask = 7,
|
.gpiomask = 7,
|
||||||
.muxsel = { 2, 3, -1 },
|
.muxsel = { 2, 3, 0 }, /* input 2 is digital */
|
||||||
/* .digital_mode= DIGITAL_MODE_CAMERA, */
|
/* .digital_mode= DIGITAL_MODE_CAMERA, */
|
||||||
.gpiomux = { 0, 0, 0, 0 },
|
.gpiomux = { 0, 0, 0, 0 },
|
||||||
.no_msp34xx = 1,
|
.no_msp34xx = 1,
|
||||||
@@ -1069,8 +1070,9 @@ struct tvcard bttv_tvcards[] = {
|
|||||||
.video_inputs = 5,
|
.video_inputs = 5,
|
||||||
/* .audio_inputs= 1, */
|
/* .audio_inputs= 1, */
|
||||||
.svhs = 3,
|
.svhs = 3,
|
||||||
|
.has_dig_in = 1,
|
||||||
.gpiomask = 0xAA0000,
|
.gpiomask = 0xAA0000,
|
||||||
.muxsel = { 2, 3, 1, 1, -1 },
|
.muxsel = { 2, 3, 1, 1, 0 }, /* input 4 is digital */
|
||||||
/* .digital_mode= DIGITAL_MODE_CAMERA, */
|
/* .digital_mode= DIGITAL_MODE_CAMERA, */
|
||||||
.gpiomux = { 0x20000, 0, 0x80000, 0x80000 },
|
.gpiomux = { 0x20000, 0, 0x80000, 0x80000 },
|
||||||
.gpiomute = 0xa8000,
|
.gpiomute = 0xa8000,
|
||||||
@@ -2539,8 +2541,9 @@ struct tvcard bttv_tvcards[] = {
|
|||||||
.video_inputs = 5,
|
.video_inputs = 5,
|
||||||
/* .audio_inputs= 1, */
|
/* .audio_inputs= 1, */
|
||||||
.svhs = 3,
|
.svhs = 3,
|
||||||
|
.has_dig_in = 1,
|
||||||
.gpiomask = 0x01fe00,
|
.gpiomask = 0x01fe00,
|
||||||
.muxsel = { 2, 3, 1, 1, -1 },
|
.muxsel = { 2, 3, 1, 1, 0 }, /* in 4 is digital */
|
||||||
/* .digital_mode= DIGITAL_MODE_CAMERA, */
|
/* .digital_mode= DIGITAL_MODE_CAMERA, */
|
||||||
.gpiomux = { 0x00400, 0x10400, 0x04400, 0x80000 },
|
.gpiomux = { 0x00400, 0x10400, 0x04400, 0x80000 },
|
||||||
.gpiomute = 0x12400,
|
.gpiomute = 0x12400,
|
||||||
@@ -3417,6 +3420,8 @@ void __devinit bttv_init_card2(struct bttv *btv)
|
|||||||
bttv_call_i2c_clients(btv, TUNER_SET_CONFIG, &tda9887_cfg);
|
bttv_call_i2c_clients(btv, TUNER_SET_CONFIG, &tda9887_cfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
btv->dig = bttv_tvcards[btv->c.type].has_dig_in ?
|
||||||
|
bttv_tvcards[btv->c.type].video_inputs - 1 : UNSET;
|
||||||
btv->svhs = bttv_tvcards[btv->c.type].svhs == NO_SVHS ?
|
btv->svhs = bttv_tvcards[btv->c.type].svhs == NO_SVHS ?
|
||||||
UNSET : bttv_tvcards[btv->c.type].svhs;
|
UNSET : bttv_tvcards[btv->c.type].svhs;
|
||||||
if (svhs[btv->c.nr] != UNSET)
|
if (svhs[btv->c.nr] != UNSET)
|
||||||
|
@@ -1040,7 +1040,7 @@ static void bt848A_set_timing(struct bttv *btv)
|
|||||||
int table_idx = bttv_tvnorms[btv->tvnorm].sram;
|
int table_idx = bttv_tvnorms[btv->tvnorm].sram;
|
||||||
int fsc = bttv_tvnorms[btv->tvnorm].Fsc;
|
int fsc = bttv_tvnorms[btv->tvnorm].Fsc;
|
||||||
|
|
||||||
if (UNSET == bttv_tvcards[btv->c.type].muxsel[btv->input]) {
|
if (btv->input == btv->dig) {
|
||||||
dprintk("bttv%d: load digital timing table (table_idx=%d)\n",
|
dprintk("bttv%d: load digital timing table (table_idx=%d)\n",
|
||||||
btv->c.nr,table_idx);
|
btv->c.nr,table_idx);
|
||||||
|
|
||||||
|
@@ -341,7 +341,7 @@ bttv_calc_geo_old(struct bttv *btv, struct bttv_geometry *geo,
|
|||||||
int totalwidth = tvnorm->totalwidth;
|
int totalwidth = tvnorm->totalwidth;
|
||||||
int scaledtwidth = tvnorm->scaledtwidth;
|
int scaledtwidth = tvnorm->scaledtwidth;
|
||||||
|
|
||||||
if (bttv_tvcards[btv->c.type].muxsel[btv->input] < 0) {
|
if (btv->input == btv->dig) {
|
||||||
swidth = 720;
|
swidth = 720;
|
||||||
totalwidth = 858;
|
totalwidth = 858;
|
||||||
scaledtwidth = 858;
|
scaledtwidth = 858;
|
||||||
@@ -391,7 +391,7 @@ bttv_calc_geo (struct bttv * btv,
|
|||||||
&& crop->width == tvnorm->cropcap.defrect.width
|
&& crop->width == tvnorm->cropcap.defrect.width
|
||||||
&& crop->height == tvnorm->cropcap.defrect.height
|
&& crop->height == tvnorm->cropcap.defrect.height
|
||||||
&& width <= tvnorm->swidth /* see PAL-Nc et al */)
|
&& width <= tvnorm->swidth /* see PAL-Nc et al */)
|
||||||
|| bttv_tvcards[btv->c.type].muxsel[btv->input] < 0) {
|
|| btv->input == btv->dig) {
|
||||||
bttv_calc_geo_old(btv, geo, width, height,
|
bttv_calc_geo_old(btv, geo, width, height,
|
||||||
both_fields, tvnorm);
|
both_fields, tvnorm);
|
||||||
return;
|
return;
|
||||||
|
@@ -224,6 +224,10 @@ struct tvcard {
|
|||||||
u8 video_inputs; /* Number of inputs */
|
u8 video_inputs; /* Number of inputs */
|
||||||
unsigned int svhs:4; /* Which input is s-video */
|
unsigned int svhs:4; /* Which input is s-video */
|
||||||
#define NO_SVHS 15
|
#define NO_SVHS 15
|
||||||
|
unsigned int pll:2;
|
||||||
|
#define PLL_NONE 0
|
||||||
|
#define PLL_28 1
|
||||||
|
#define PLL_35 2
|
||||||
|
|
||||||
/* i2c audio flags */
|
/* i2c audio flags */
|
||||||
unsigned int no_msp34xx:1;
|
unsigned int no_msp34xx:1;
|
||||||
@@ -236,11 +240,8 @@ struct tvcard {
|
|||||||
unsigned int has_dvb:1;
|
unsigned int has_dvb:1;
|
||||||
unsigned int has_remote:1;
|
unsigned int has_remote:1;
|
||||||
unsigned int has_radio:1;
|
unsigned int has_radio:1;
|
||||||
|
unsigned int has_dig_in:1; /* Has digital input (always last input) */
|
||||||
unsigned int no_gpioirq:1;
|
unsigned int no_gpioirq:1;
|
||||||
unsigned int pll:2;
|
|
||||||
#define PLL_NONE 0
|
|
||||||
#define PLL_28 1
|
|
||||||
#define PLL_35 2
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct tvcard bttv_tvcards[];
|
extern struct tvcard bttv_tvcards[];
|
||||||
|
@@ -329,7 +329,7 @@ struct bttv {
|
|||||||
unsigned int cardid; /* pci subsystem id (bt878 based ones) */
|
unsigned int cardid; /* pci subsystem id (bt878 based ones) */
|
||||||
unsigned int tuner_type; /* tuner chip type */
|
unsigned int tuner_type; /* tuner chip type */
|
||||||
unsigned int tda9887_conf;
|
unsigned int tda9887_conf;
|
||||||
unsigned int svhs;
|
unsigned int svhs, dig;
|
||||||
struct bttv_pll_info pll;
|
struct bttv_pll_info pll;
|
||||||
int triton1;
|
int triton1;
|
||||||
int gpioirq;
|
int gpioirq;
|
||||||
|
Reference in New Issue
Block a user