summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorTrent Piepho <xyzzy@speakeasy.org>2009-01-28 16:32:59 -0800
committerTrent Piepho <xyzzy@speakeasy.org>2009-01-28 16:32:59 -0800
commite418d7277c31fd429d55fb0b1686c5b61bda06cb (patch)
tree1b66894d1fe66e67995e05feb6eebef0d92aa07c /linux
parentb4ac56eed1e1ef734166e5e63c7cd20e0523dac5 (diff)
downloadmediapointer-dvb-s2-e418d7277c31fd429d55fb0b1686c5b61bda06cb.tar.gz
mediapointer-dvb-s2-e418d7277c31fd429d55fb0b1686c5b61bda06cb.tar.bz2
bttv: rework the way digital inputs are indicated
From: Trent Piepho <xyzzy@speakeasy.org> 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. Priority: normal Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Diffstat (limited to 'linux')
-rw-r--r--linux/drivers/media/video/bt8xx/bttv-cards.c11
-rw-r--r--linux/drivers/media/video/bt8xx/bttv-driver.c2
-rw-r--r--linux/drivers/media/video/bt8xx/bttv-risc.c4
-rw-r--r--linux/drivers/media/video/bt8xx/bttv.h9
-rw-r--r--linux/drivers/media/video/bt8xx/bttvp.h2
5 files changed, 17 insertions, 11 deletions
diff --git a/linux/drivers/media/video/bt8xx/bttv-cards.c b/linux/drivers/media/video/bt8xx/bttv-cards.c
index c6cdf79e8..b5eb8fecc 100644
--- a/linux/drivers/media/video/bt8xx/bttv-cards.c
+++ b/linux/drivers/media/video/bt8xx/bttv-cards.c
@@ -639,8 +639,9 @@ struct tvcard bttv_tvcards[] = {
.video_inputs = 3,
/* .audio_inputs= 1, */
.svhs = NO_SVHS,
+ .has_dig_in = 1,
.gpiomask = 7,
- .muxsel = { 2, 3, -1 },
+ .muxsel = { 2, 3, 0 }, /* input 2 is digital */
/* .digital_mode= DIGITAL_MODE_CAMERA, */
.gpiomux = { 0, 0, 0, 0 },
.no_msp34xx = 1,
@@ -1080,8 +1081,9 @@ struct tvcard bttv_tvcards[] = {
.video_inputs = 5,
/* .audio_inputs= 1, */
.svhs = 3,
+ .has_dig_in = 1,
.gpiomask = 0xAA0000,
- .muxsel = { 2, 3, 1, 1, -1 },
+ .muxsel = { 2, 3, 1, 1, 0 }, /* input 4 is digital */
/* .digital_mode= DIGITAL_MODE_CAMERA, */
.gpiomux = { 0x20000, 0, 0x80000, 0x80000 },
.gpiomute = 0xa8000,
@@ -2562,8 +2564,9 @@ struct tvcard bttv_tvcards[] = {
.video_inputs = 5,
/* .audio_inputs= 1, */
.svhs = 3,
+ .has_dig_in = 1,
.gpiomask = 0x01fe00,
- .muxsel = { 2, 3, 1, 1, -1 },
+ .muxsel = { 2, 3, 1, 1, 0 }, /* in 4 is digital */
/* .digital_mode= DIGITAL_MODE_CAMERA, */
.gpiomux = { 0x00400, 0x10400, 0x04400, 0x80000 },
.gpiomute = 0x12400,
@@ -3455,6 +3458,8 @@ void __devinit bttv_init_card2(struct bttv *btv)
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 ?
UNSET : bttv_tvcards[btv->c.type].svhs;
if (svhs[btv->c.nr] != UNSET)
diff --git a/linux/drivers/media/video/bt8xx/bttv-driver.c b/linux/drivers/media/video/bt8xx/bttv-driver.c
index 53be29350..fb57f00bd 100644
--- a/linux/drivers/media/video/bt8xx/bttv-driver.c
+++ b/linux/drivers/media/video/bt8xx/bttv-driver.c
@@ -1058,7 +1058,7 @@ static void bt848A_set_timing(struct bttv *btv)
int table_idx = bttv_tvnorms[btv->tvnorm].sram;
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",
btv->c.nr,table_idx);
diff --git a/linux/drivers/media/video/bt8xx/bttv-risc.c b/linux/drivers/media/video/bt8xx/bttv-risc.c
index 310924f77..1b9a6ab62 100644
--- a/linux/drivers/media/video/bt8xx/bttv-risc.c
+++ b/linux/drivers/media/video/bt8xx/bttv-risc.c
@@ -341,7 +341,7 @@ bttv_calc_geo_old(struct bttv *btv, struct bttv_geometry *geo,
int totalwidth = tvnorm->totalwidth;
int scaledtwidth = tvnorm->scaledtwidth;
- if (bttv_tvcards[btv->c.type].muxsel[btv->input] < 0) {
+ if (btv->input == btv->dig) {
swidth = 720;
totalwidth = 858;
scaledtwidth = 858;
@@ -395,7 +395,7 @@ bttv_calc_geo (struct bttv * btv,
&& crop->width == tvnorm->cropcap.defrect.width
&& crop->height == tvnorm->cropcap.defrect.height
&& 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,
both_fields, tvnorm);
return;
diff --git a/linux/drivers/media/video/bt8xx/bttv.h b/linux/drivers/media/video/bt8xx/bttv.h
index 6ba19f45b..b6a753423 100644
--- a/linux/drivers/media/video/bt8xx/bttv.h
+++ b/linux/drivers/media/video/bt8xx/bttv.h
@@ -225,6 +225,10 @@ struct tvcard {
u8 video_inputs; /* Number of inputs */
unsigned int svhs:4; /* Which input is s-video */
#define NO_SVHS 15
+ unsigned int pll:2;
+#define PLL_NONE 0
+#define PLL_28 1
+#define PLL_35 2
/* i2c audio flags */
unsigned int no_msp34xx:1;
@@ -237,11 +241,8 @@ struct tvcard {
unsigned int has_dvb:1;
unsigned int has_remote: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 pll:2;
-#define PLL_NONE 0
-#define PLL_28 1
-#define PLL_35 2
};
extern struct tvcard bttv_tvcards[];
diff --git a/linux/drivers/media/video/bt8xx/bttvp.h b/linux/drivers/media/video/bt8xx/bttvp.h
index 71289d832..f888e0e59 100644
--- a/linux/drivers/media/video/bt8xx/bttvp.h
+++ b/linux/drivers/media/video/bt8xx/bttvp.h
@@ -331,7 +331,7 @@ struct bttv {
unsigned int cardid; /* pci subsystem id (bt878 based ones) */
unsigned int tuner_type; /* tuner chip type */
unsigned int tda9887_conf;
- unsigned int svhs;
+ unsigned int svhs, dig;
struct bttv_pll_info pll;
int triton1;
int gpioirq;