# HG changeset patch # User cnlawren@stokes.lordsutch.com # Date 1165129844 21600 # Node ID 5470a2466365ddf785552fd7716516d9fb7bfba3 # Parent 11d86a6c639c7fb1da39cc2ee74d8536517700bc # Parent 22d342266068b6c041ae313b2012c451cfcb540f Make ATSC tuning work on Pinnacle HD Pro Stick diff -r 11d86a6c639c -r 5470a2466365 linux/drivers/media/dvb/frontends/lgdt330x.c --- a/linux/drivers/media/dvb/frontends/lgdt330x.c Mon Nov 27 08:58:46 2006 +0100 +++ b/linux/drivers/media/dvb/frontends/lgdt330x.c Sun Dec 03 01:10:44 2006 -0600 @@ -304,10 +304,10 @@ static int lgdt330x_set_parameters(struc static u8 lgdt3303_8vsb_44_data[] = { 0x04, 0x00, 0x0d, 0x40, - 0x0e, 0x87, - 0x0f, 0x8e, - 0x10, 0x01, - 0x47, 0x8b }; + 0x0e, 0x87, + 0x0f, 0x8e, + 0x10, 0x01, + 0x47, 0x8b }; /* * Array of byte pairs
@@ -437,9 +437,6 @@ static int lgdt3302_read_status(struct d /* Test signal does not exist flag */ /* as well as the AGC lock flag. */ *status |= FE_HAS_SIGNAL; - } else { - /* Without a signal all other status bits are meaningless */ - return 0; } /* @@ -498,15 +495,6 @@ static int lgdt3303_read_status(struct d *status = 0; /* Reset status result */ - if (state->config->skip_status_check) { - *status |= FE_HAS_LOCK; - *status |= FE_HAS_VITERBI; - *status |= FE_HAS_SYNC; - *status |= FE_HAS_CARRIER; - *status |= FE_HAS_SIGNAL; - return 0; - } - /* lgdt3303 AGC status register */ err = i2c_read_demod_bytes(state, 0x58, buf, 1); if (err < 0) @@ -517,9 +505,6 @@ static int lgdt3303_read_status(struct d /* Test input signal does not exist flag */ /* as well as the AGC lock flag. */ *status |= FE_HAS_SIGNAL; - } else { - /* Without a signal all other status bits are meaningless */ - return 0; } /* Carrier Recovery Lock Status Register */ diff -r 11d86a6c639c -r 5470a2466365 linux/drivers/media/dvb/frontends/lgdt330x.h --- a/linux/drivers/media/dvb/frontends/lgdt330x.h Mon Nov 27 08:58:46 2006 +0100 +++ b/linux/drivers/media/dvb/frontends/lgdt330x.h Sun Dec 03 01:10:44 2006 -0600 @@ -50,10 +50,6 @@ struct lgdt330x_config /* Flip the polarity of the mpeg data transfer clock using alternate init data * This option applies ONLY to LGDT3303 - 0:disabled (default) 1:enabled */ int clock_polarity_flip; - - /* Always report a signal lock - Hack for devices that otherwise cannot - * detect signal status - 0:disabled (default) 1:enabled */ - int skip_status_check; }; #if defined(CONFIG_DVB_LGDT330X) || (defined(CONFIG_DVB_LGDT330X_MODULE) && defined(MODULE)) diff -r 11d86a6c639c -r 5470a2466365 linux/drivers/media/video/em28xx/Kconfig --- a/linux/drivers/media/video/em28xx/Kconfig Mon Nov 27 08:58:46 2006 +0100 +++ b/linux/drivers/media/video/em28xx/Kconfig Sun Dec 03 01:10:44 2006 -0600 @@ -54,6 +54,7 @@ config DVB_EM2880 select DVB_TUNER_MT2060 select DVB_MT352 select DVB_ZL10353 + select DVB_LGDT330X select VIDEO_EM28XX help Support for Empia em2880/em2870 DVB-T extension diff -r 11d86a6c639c -r 5470a2466365 linux/drivers/media/video/em28xx/em2880-dvb.c --- a/linux/drivers/media/video/em28xx/em2880-dvb.c Mon Nov 27 08:58:46 2006 +0100 +++ b/linux/drivers/media/video/em28xx/em2880-dvb.c Sun Dec 03 01:10:44 2006 -0600 @@ -574,7 +574,6 @@ static struct lgdt330x_config em2880_lgd static struct lgdt330x_config em2880_lgdt3303_dev = { .demod_address = 0x0e, .demod_chip = LGDT3303, - .skip_status_check = 1, }; static int em2880_dvb_init(struct em28xx *dev) @@ -634,6 +633,7 @@ static int em2880_dvb_init(struct em28xx } break; case EM2870_BOARD_PINNACLE_PCTV_HD_PRO: + case EM2883_BOARD_PINNACLE_PCTV_HD_PRO: { pointer=V4L2_TUNER_ATSC_TV; printk("em2880-dvb.c: VIDIOC_S_MODE\n"); diff -r 11d86a6c639c -r 5470a2466365 linux/drivers/media/video/em28xx/em28xx-i2c.c --- a/linux/drivers/media/video/em28xx/em28xx-i2c.c Mon Nov 27 08:58:46 2006 +0100 +++ b/linux/drivers/media/video/em28xx/em28xx-i2c.c Sun Dec 03 01:10:44 2006 -0600 @@ -122,6 +122,7 @@ static int em28xx_gpio_write(enum v4l2_t case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900: case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950: case EM2870_BOARD_PINNACLE_PCTV_HD_PRO: + case EM2883_BOARD_PINNACLE_PCTV_HD_PRO: gpio[0]=0x2d; gpio[1]=0x3d; gpio[2]=0x2e; @@ -207,6 +208,7 @@ static int em28xx_gpio_write(enum v4l2_t /* thanks for no specs here grr! -- Markus */ if (ptr==0 && (dev->model==EM2880_BOARD_TERRATEC_HYBRID_XS_FR || dev->model==EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950 || + dev->model==EM2883_BOARD_PINNACLE_PCTV_HD_PRO || dev->model==EM2870_BOARD_PINNACLE_PCTV_HD_PRO)){ ret = dev->em28xx_write_regs(dev,0x04,"\x04",1); msleep(10); @@ -592,6 +594,7 @@ static int em28xx_set_tuner(int check_ee case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900: case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950: case EM2870_BOARD_PINNACLE_PCTV_HD_PRO: + case EM2883_BOARD_PINNACLE_PCTV_HD_PRO: case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2: case EM2881_BOARD_DNT_DA2_HYBRID: case EM2881_BOARD_PINNACLE_HYBRID_PRO: diff -r 11d86a6c639c -r 5470a2466365 linux/drivers/media/video/xc3028-tuner.c --- a/linux/drivers/media/video/xc3028-tuner.c Mon Nov 27 08:58:46 2006 +0100 +++ b/linux/drivers/media/video/xc3028-tuner.c Sun Dec 03 01:10:44 2006 -0600 @@ -219,8 +219,8 @@ static struct _digital_standards{ {1, 0, 0 /* 8mhz */, "xc3028_DTV8_2633.i2c.fw" }, {1, 0, 1 /* 7mhz */, "xc3028_DTV7_2633.i2c.fw" }, /* 2 6mhz */ - {0, 1, 0 /* ???? */, "xc3028_DTV6_ATSC_2620.i2c.fw"}, - {0, 1, 1 /* ???? */, "xc3028_DTV6_ATSC_2620.i2c.fw"}, + {0, 1, 2 /* ???? */, "xc3028_DTV6_ATSC_2633.i2c.fw"}, + {0, 1, 2 /* ???? */, "xc3028_DTV6_ATSC_2620.i2c.fw"}, }; /* ---------------------------------------------------------------------- */ @@ -258,14 +258,19 @@ static int xc3028_set_freq(struct i2c_cl unsigned char chanbuf[4]; unsigned long frequency=0; unsigned long value; + int bandwidth = f->bandwidth; int rc; int i; - if(t->bandwidth!=f->bandwidth){ - switch(f->bandwidth){ + /* ATSC bandwidth should be 6 MHz */ + if(t->mode == V4L2_TUNER_ATSC_TV) + bandwidth = XC3028_BW6MHZ; + + if(t->bandwidth != bandwidth) { + switch(bandwidth){ case -1: /* analogue */ - t->bandwidth=f->bandwidth; + t->bandwidth=bandwidth; break; case XC3028_BW8MHZ: /* 8 MHz */ for(i=0;i