Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41ef7c1e authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Linus Torvalds
Browse files

[PATCH] v4l: CX88 Update



- Removed unused structures.
- Removed BTTV version check.
- Some debug structs moved to their own .c file and converted to static
- Comment changed to express better when attach_inform is running
- set_freq removed from set_mode at tuner-core.c.
- I2C cleanups and converged to a basic reference structure.
- Rename tuner structures fields.
- It calls VIDIOC_G_FREQUENCY to get tuner freq from tuner.
- added missing contrast offset value, set to 0.
- Let Kconfig decide whether to include frontend-specific code.

Signed-Off-By: default avatarNickolay V. Shmyrev <nshmyrev@yandex.ru>
Signed-off-by: default avatarMichael Krufky <mkrufky@m1k.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent fa9846a8
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -690,11 +690,9 @@ static void blackbird_codec_settings(struct cx8802_dev *dev)
	int bitrate_mode = 1;
	int bitrate = 7500000;
	int bitrate_peak = 7500000;
#if 1
	bitrate_mode = BLACKBIRD_VIDEO_CBR;
	bitrate = 4000*1024;
	bitrate_peak = 4000*1024;
#endif

	/* assign stream type */
	blackbird_api_cmd(dev, BLACKBIRD_API_SET_STREAM_TYPE, 1, 0, BLACKBIRD_STREAM_PROGRAM);
@@ -810,9 +808,6 @@ static int blackbird_initialize_codec(struct cx8802_dev *dev)
	cx_write(MO_VBOS_CONTROL, 0x84A00); /* no 656 mode, 8-bit pixels, disable VBI */
	cx_clear(MO_OUTPUT_FORMAT, 0x0008); /* Normal Y-limits to let the mpeg encoder sync */

#if 0 /* FIXME */
	set_scale(dev, 720, 480, V4L2_FIELD_INTERLACED);
#endif
	blackbird_codec_settings(dev);
	msleep(1);

+1 −47
Original line number Diff line number Diff line
/*
 * $Id: cx88-core.c,v 1.31 2005/06/22 22:58:04 mchehab Exp $
 * $Id: cx88-core.c,v 1.33 2005/07/07 14:17:47 mchehab Exp $
 *
 * device driver for Conexant 2388x based TV cards
 * driver core
@@ -470,25 +470,6 @@ int cx88_risc_decode(u32 risc)
	return incr[risc >> 28] ? incr[risc >> 28] : 1;
}

#if 0 /* currently unused, but useful for debugging */
void cx88_risc_disasm(struct cx88_core *core,
		      struct btcx_riscmem *risc)
{
	unsigned int i,j,n;

	printk("%s: risc disasm: %p [dma=0x%08lx]\n",
	       core->name, risc->cpu, (unsigned long)risc->dma);
	for (i = 0; i < (risc->size >> 2); i += n) {
		printk("%s:   %04d: ", core->name, i);
		n = cx88_risc_decode(risc->cpu[i]);
		for (j = 1; j < n; j++)
			printk("%s:   %04d: 0x%08x [ arg #%d ]\n",
			       core->name, i+j, risc->cpu[i+j], j);
		if (risc->cpu[i] == RISC_JUMP)
			break;
	}
}
#endif

void cx88_sram_channel_dump(struct cx88_core *core,
			    struct sram_channel *ch)
@@ -545,30 +526,12 @@ void cx88_sram_channel_dump(struct cx88_core *core,
	       core->name,cx_read(ch->cnt2_reg));
}

/* Used only on cx88-core */
static char *cx88_pci_irqs[32] = {
	"vid", "aud", "ts", "vip", "hst", "5", "6", "tm1",
	"src_dma", "dst_dma", "risc_rd_err", "risc_wr_err",
	"brdg_err", "src_dma_err", "dst_dma_err", "ipb_dma_err",
	"i2c", "i2c_rack", "ir_smp", "gpio0", "gpio1"
};
/* Used only on cx88-video */
char *cx88_vid_irqs[32] = {
	"y_risci1", "u_risci1", "v_risci1", "vbi_risc1",
	"y_risci2", "u_risci2", "v_risci2", "vbi_risc2",
	"y_oflow",  "u_oflow",  "v_oflow",  "vbi_oflow",
	"y_sync",   "u_sync",   "v_sync",   "vbi_sync",
	"opc_err",  "par_err",  "rip_err",  "pci_abort",
};
/* Used only on cx88-mpeg */
char *cx88_mpeg_irqs[32] = {
	"ts_risci1", NULL, NULL, NULL,
	"ts_risci2", NULL, NULL, NULL,
	"ts_oflow",  NULL, NULL, NULL,
	"ts_sync",   NULL, NULL, NULL,
	"opc_err", "par_err", "rip_err", "pci_abort",
	"ts_err?",
};

void cx88_print_irqbits(char *name, char *tag, char **strings,
			u32 bits, u32 mask)
@@ -618,16 +581,11 @@ void cx88_wakeup(struct cx88_core *core,
			break;
		buf = list_entry(q->active.next,
				 struct cx88_buffer, vb.queue);
#if 0
		if (buf->count > count)
			break;
#else
		/* count comes from the hw and is is 16bit wide --
		 * this trick handles wrap-arounds correctly for
		 * up to 32767 buffers in flight... */
		if ((s16) (count - buf->count) < 0)
			break;
#endif
		do_gettimeofday(&buf->vb.ts);
		dprintk(2,"[%p/%d] wakeup reg=%d buf=%d\n",buf,buf->vb.i,
			count, buf->count);
@@ -955,12 +913,10 @@ int cx88_set_tvnorm(struct cx88_core *core, struct cx88_tvnorm *norm)
		norm->cxiformat, cx_read(MO_INPUT_FORMAT) & 0x0f);
	cx_andor(MO_INPUT_FORMAT, 0xf, norm->cxiformat);

#if 1
	// FIXME: as-is from DScaler
	dprintk(1,"set_tvnorm: MO_OUTPUT_FORMAT 0x%08x [old=0x%08x]\n",
		norm->cxoformat, cx_read(MO_OUTPUT_FORMAT));
	cx_write(MO_OUTPUT_FORMAT, norm->cxoformat);
#endif

	// MO_SCONV_REG = adc clock / video dec clock * 2^17
	tmp64  = adc_clock * (u64)(1 << 17);
@@ -1219,8 +1175,6 @@ void cx88_core_put(struct cx88_core *core, struct pci_dev *pci)
/* ------------------------------------------------------------------ */

EXPORT_SYMBOL(cx88_print_ioctl);
EXPORT_SYMBOL(cx88_vid_irqs);
EXPORT_SYMBOL(cx88_mpeg_irqs);
EXPORT_SYMBOL(cx88_print_irqbits);

EXPORT_SYMBOL(cx88_core_irq);
+19 −17
Original line number Diff line number Diff line
/*
 * $Id: cx88-dvb.c,v 1.39 2005/07/02 20:00:46 mkrufky Exp $
 * $Id: cx88-dvb.c,v 1.41 2005/07/04 19:35:05 mkrufky Exp $
 *
 * device driver for Conexant 2388x based TV cards
 * MPEG Transport Stream (DVB) routines
@@ -30,22 +30,20 @@
#include <linux/file.h>
#include <linux/suspend.h>

/* these three frontends need merging via linuxtv cvs ... */
#define HAVE_CX22702 1
#define HAVE_OR51132 1
#define HAVE_LGDT3302 1

#include "cx88.h"
#include "dvb-pll.h"

#if CONFIG_DVB_MT352
# include "mt352.h"
# include "mt352_priv.h"
#if HAVE_CX22702
#endif
#if CONFIG_DVB_CX22702
# include "cx22702.h"
#endif
#if HAVE_OR51132
#if CONFIG_DVB_OR51132
# include "or51132.h"
#endif
#if HAVE_LGDT3302
#if CONFIG_DVB_LGDT3302
# include "lgdt3302.h"
#endif

@@ -104,6 +102,7 @@ static struct videobuf_queue_ops dvb_qops = {

/* ------------------------------------------------------------------ */

#if CONFIG_DVB_MT352
static int dvico_fusionhdtv_demod_init(struct dvb_frontend* fe)
{
	static u8 clock_config []  = { CLOCK_CTL,  0x38, 0x39 };
@@ -171,8 +170,9 @@ static struct mt352_config dntv_live_dvbt_config = {
	.demod_init    = dntv_live_dvbt_demod_init,
	.pll_set       = mt352_pll_set,
};
#endif

#if HAVE_CX22702
#if CONFIG_DVB_CX22702
static struct cx22702_config connexant_refboard_config = {
	.demod_address = 0x43,
	.pll_address   = 0x60,
@@ -186,7 +186,7 @@ static struct cx22702_config hauppauge_novat_config = {
};
#endif

#if HAVE_OR51132
#if CONFIG_DVB_OR51132
static int or51132_set_ts_param(struct dvb_frontend* fe,
				int is_punctured)
{
@@ -203,7 +203,7 @@ static struct or51132_config pchdtv_hd3000 = {
};
#endif

#if HAVE_LGDT3302
#if CONFIG_DVB_LGDT3302
static int lgdt3302_set_ts_param(struct dvb_frontend* fe, int is_punctured)
{
	struct cx8802_dev *dev= fe->dvb->priv;
@@ -237,7 +237,7 @@ static int dvb_register(struct cx8802_dev *dev)

	/* init frontend */
	switch (dev->core->board) {
#if HAVE_CX22702
#if CONFIG_DVB_CX22702
	case CX88_BOARD_HAUPPAUGE_DVB_T1:
		dev->dvb.frontend = cx22702_attach(&hauppauge_novat_config,
						   &dev->core->i2c_adap);
@@ -248,6 +248,7 @@ static int dvb_register(struct cx8802_dev *dev)
						   &dev->core->i2c_adap);
		break;
#endif
#if CONFIG_DVB_MT352
	case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1:
		dev->core->pll_addr = 0x61;
		dev->core->pll_desc = &dvb_pll_lg_z201;
@@ -268,13 +269,14 @@ static int dvb_register(struct cx8802_dev *dev)
		dev->dvb.frontend = mt352_attach(&dntv_live_dvbt_config,
						 &dev->core->i2c_adap);
		break;
#if HAVE_OR51132
#endif
#if CONFIG_DVB_OR51132
	case CX88_BOARD_PCHDTV_HD3000:
		dev->dvb.frontend = or51132_attach(&pchdtv_hd3000,
						 &dev->core->i2c_adap);
		break;
#endif
#if HAVE_LGDT3302
#if CONFIG_DVB_LGDT3302
	case CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q:
		dev->ts_gen_cntrl = 0x08;
		{
+19 −12
Original line number Diff line number Diff line
/*
    $Id: cx88-i2c.c,v 1.24 2005/06/17 18:46:23 mkrufky Exp $
    $Id: cx88-i2c.c,v 1.28 2005/07/05 17:37:35 nsh Exp $

    cx88-i2c.c  --  all the i2c code is here

@@ -91,25 +91,32 @@ static int cx8800_bit_getsda(void *data)

static int attach_inform(struct i2c_client *client)
{
        struct tuner_addr tun_addr;
        struct tuner_setup tun_setup;
	struct cx88_core *core = i2c_get_adapdata(client->adapter);

	dprintk(1, "i2c attach [addr=0x%x,client=%s]\n",
		client->addr, i2c_clientname(client));
	dprintk(1, "%s i2c attach [addr=0x%x,client=%s]\n",
		client->driver->name,client->addr,i2c_clientname(client));
	if (!client->driver->command)
		return 0;

        if (core->radio_type != UNSET) {
                tun_addr.v4l2_tuner = V4L2_TUNER_RADIO;
                tun_addr.type = core->radio_type;
                tun_addr.addr = core->radio_addr;
                client->driver->command(client,TUNER_SET_TYPE_ADDR, &tun_addr);
		if ((core->radio_addr==ADDR_UNSET)||(core->radio_addr==client->addr)) {
			tun_setup.mode_mask = T_RADIO;
			tun_setup.type = core->radio_type;
			tun_setup.addr = core->radio_addr;

			client->driver->command (client, TUNER_SET_TYPE_ADDR, &tun_setup);
		}
        }
        if (core->tuner_type != UNSET) {
                tun_addr.v4l2_tuner = V4L2_TUNER_ANALOG_TV;
                tun_addr.type = core->tuner_type;
                tun_addr.addr = core->tuner_addr;
                client->driver->command(client,TUNER_SET_TYPE_ADDR, &tun_addr);
		if ((core->tuner_addr==ADDR_UNSET)||(core->tuner_addr==client->addr)) {

			tun_setup.mode_mask = T_ANALOG_TV;
			tun_setup.type = core->tuner_type;
			tun_setup.addr = core->tuner_addr;

			client->driver->command (client,TUNER_SET_TYPE_ADDR, &tun_setup);
		}
        }

	if (core->tda9887_conf)
+227 −221
Original line number Diff line number Diff line
/*
 * $Id: cx88-input.c,v 1.13 2005/06/13 16:07:46 nsh Exp $
 * $Id: cx88-input.c,v 1.15 2005/07/07 13:58:38 mchehab Exp $
 *
 * Device driver for GPIO attached remote control interfaces
 * on Conexant 2388x based TV/DVB cards.
@@ -38,97 +38,100 @@

/* DigitalNow DNTV Live DVB-T Remote */
static IR_KEYTAB_TYPE ir_codes_dntv_live_dvb_t[IR_KEYTAB_SIZE] = {
	[ 0x00 ] = KEY_ESC,         // 'go up a level?'
	[ 0x01 ] = KEY_KP1,         // '1'
	[ 0x02 ] = KEY_KP2,         // '2'
	[ 0x03 ] = KEY_KP3,         // '3'
	[ 0x04 ] = KEY_KP4,         // '4'
	[ 0x05 ] = KEY_KP5,         // '5'
	[ 0x06 ] = KEY_KP6,         // '6'
	[ 0x07 ] = KEY_KP7,         // '7'
	[ 0x08 ] = KEY_KP8,         // '8'
	[ 0x09 ] = KEY_KP9,         // '9'
	[ 0x0a ] = KEY_KP0,         // '0'
	[ 0x0b ] = KEY_TUNER,       // 'tv/fm'
	[ 0x0c ] = KEY_SEARCH,      // 'scan'
	[ 0x0d ] = KEY_STOP,        // 'stop'
	[ 0x0e ] = KEY_PAUSE,       // 'pause'
	[ 0x0f ] = KEY_LIST,        // 'source'

	[ 0x10 ] = KEY_MUTE,        // 'mute'
	[ 0x11 ] = KEY_REWIND,      // 'backward <<'
	[ 0x12 ] = KEY_POWER,       // 'power'
	[ 0x13 ] = KEY_S,           // 'snap'
	[ 0x14 ] = KEY_AUDIO,       // 'stereo'
	[ 0x15 ] = KEY_CLEAR,       // 'reset'
	[ 0x16 ] = KEY_PLAY,        // 'play'
	[ 0x17 ] = KEY_ENTER,       // 'enter'
	[ 0x18 ] = KEY_ZOOM,        // 'full screen'
	[ 0x19 ] = KEY_FASTFORWARD, // 'forward >>'
	[ 0x1a ] = KEY_CHANNELUP,   // 'channel +'
	[ 0x1b ] = KEY_VOLUMEUP,    // 'volume +'
	[ 0x1c ] = KEY_INFO,        // 'preview'
	[ 0x1d ] = KEY_RECORD,      // 'record'
	[ 0x1e ] = KEY_CHANNELDOWN, // 'channel -'
	[ 0x1f ] = KEY_VOLUMEDOWN,  // 'volume -'
	[0x00] = KEY_ESC,		/* 'go up a level?' */
	/* Keys 0 to 9 */
	[0x0a] = KEY_KP0,
	[0x01] = KEY_KP1,
	[0x02] = KEY_KP2,
	[0x03] = KEY_KP3,
	[0x04] = KEY_KP4,
	[0x05] = KEY_KP5,
	[0x06] = KEY_KP6,
	[0x07] = KEY_KP7,
	[0x08] = KEY_KP8,
	[0x09] = KEY_KP9,

	[0x0b] = KEY_TUNER,		/* tv/fm */
	[0x0c] = KEY_SEARCH,		/* scan */
	[0x0d] = KEY_STOP,
	[0x0e] = KEY_PAUSE,
	[0x0f] = KEY_LIST,		/* source */

	[0x10] = KEY_MUTE,
	[0x11] = KEY_REWIND,		/* backward << */
	[0x12] = KEY_POWER,
	[0x13] = KEY_S,			/* snap */
	[0x14] = KEY_AUDIO,		/* stereo */
	[0x15] = KEY_CLEAR,		/* reset */
	[0x16] = KEY_PLAY,
	[0x17] = KEY_ENTER,
	[0x18] = KEY_ZOOM,		/* full screen */
	[0x19] = KEY_FASTFORWARD,	/* forward >> */
	[0x1a] = KEY_CHANNELUP,
	[0x1b] = KEY_VOLUMEUP,
	[0x1c] = KEY_INFO,		/* preview */
	[0x1d] = KEY_RECORD,		/* record */
	[0x1e] = KEY_CHANNELDOWN,
	[0x1f] = KEY_VOLUMEDOWN,
};

/* ---------------------------------------------------------------------- */

/* IO-DATA BCTV7E Remote */
static IR_KEYTAB_TYPE ir_codes_iodata_bctv7e[IR_KEYTAB_SIZE] = {
	[ 0x40 ] = KEY_TV,              // TV
	[ 0x20 ] = KEY_RADIO,           // FM
	[ 0x60 ] = KEY_EPG,             // EPG
	[ 0x00 ] = KEY_POWER,           // power

	[ 0x50 ] = KEY_KP1,             // 1
	[ 0x30 ] = KEY_KP2,             // 2
	[ 0x70 ] = KEY_KP3,             // 3
	[ 0x10 ] = KEY_L,               // Live

	[ 0x48 ] = KEY_KP4,             // 4
	[ 0x28 ] = KEY_KP5,             // 5
	[ 0x68 ] = KEY_KP6,             // 6
	[ 0x08 ] = KEY_T,               // Time Shift

	[ 0x58 ] = KEY_KP7,             // 7
	[ 0x38 ] = KEY_KP8,             // 8
	[ 0x78 ] = KEY_KP9,             // 9
	[ 0x18 ] = KEY_PLAYPAUSE,       // Play

	[ 0x44 ] = KEY_KP0,             // 10
	[ 0x24 ] = KEY_ENTER,           // 11
	[ 0x64 ] = KEY_ESC,             // 12
	[ 0x04 ] = KEY_M,               // Multi

	[ 0x54 ] = KEY_VIDEO,           // VIDEO
	[ 0x34 ] = KEY_CHANNELUP,       // channel +
	[ 0x74 ] = KEY_VOLUMEUP,        // volume +
	[ 0x14 ] = KEY_MUTE,            // Mute

	[ 0x4c ] = KEY_S,               // SVIDEO
	[ 0x2c ] = KEY_CHANNELDOWN,     // channel -
	[ 0x6c ] = KEY_VOLUMEDOWN,      // volume -
	[ 0x0c ] = KEY_ZOOM,            // Zoom

	[ 0x5c ] = KEY_PAUSE,           // pause
	[ 0x3c ] = KEY_C,               // || (red)
	[ 0x7c ] = KEY_RECORD,          // recording
	[ 0x1c ] = KEY_STOP,            // stop

	[ 0x41 ] = KEY_REWIND,          // backward <<
	[ 0x21 ] = KEY_PLAY,            // play
	[ 0x61 ] = KEY_FASTFORWARD,     // forward >>
	[ 0x01 ] = KEY_NEXT,            // skip >|
	[0x40] = KEY_TV,
	[0x20] = KEY_RADIO,		/* FM */
	[0x60] = KEY_EPG,
	[0x00] = KEY_POWER,

	/* Keys 0 to 9 */
	[0x44] = KEY_KP0,		/* 10 */
	[0x50] = KEY_KP1,
	[0x30] = KEY_KP2,
	[0x70] = KEY_KP3,
	[0x48] = KEY_KP4,
	[0x28] = KEY_KP5,
	[0x68] = KEY_KP6,
	[0x58] = KEY_KP7,
	[0x38] = KEY_KP8,
	[0x78] = KEY_KP9,

	[0x10] = KEY_L,			/* Live */
	[0x08] = KEY_T,			/* Time Shift */

	[0x18] = KEY_PLAYPAUSE,		/* Play */

	[0x24] = KEY_ENTER,		/* 11 */
	[0x64] = KEY_ESC,		/* 12 */
	[0x04] = KEY_M,			/* Multi */

	[0x54] = KEY_VIDEO,
	[0x34] = KEY_CHANNELUP,
	[0x74] = KEY_VOLUMEUP,
	[0x14] = KEY_MUTE,

	[0x4c] = KEY_S,			/* SVIDEO */
	[0x2c] = KEY_CHANNELDOWN,
	[0x6c] = KEY_VOLUMEDOWN,
	[0x0c] = KEY_ZOOM,

	[0x5c] = KEY_PAUSE,
	[0x3c] = KEY_C,			/* || (red) */
	[0x7c] = KEY_RECORD,		/* recording */
	[0x1c] = KEY_STOP,

	[0x41] = KEY_REWIND,		/* backward << */
	[0x21] = KEY_PLAY,
	[0x61] = KEY_FASTFORWARD,	/* forward >> */
	[0x01] = KEY_NEXT,		/* skip >| */
};

/* ---------------------------------------------------------------------- */

/* ADS Tech Instant TV DVB-T PCI Remote */
static IR_KEYTAB_TYPE ir_codes_adstech_dvb_t_pci[IR_KEYTAB_SIZE] = {
	[ 0x5b ] = KEY_POWER,
	[ 0x5f ] = KEY_MUTE,
	/* Keys 0 to 9 */
	[0x4d] = KEY_0,
	[0x57] = KEY_1,
	[0x4f] = KEY_2,
	[0x53] = KEY_3,
@@ -138,16 +141,18 @@ static IR_KEYTAB_TYPE ir_codes_adstech_dvb_t_pci[IR_KEYTAB_SIZE] = {
	[0x54] = KEY_7,
	[0x4c] = KEY_8,
	[0x5c] = KEY_9,
	[ 0x4d ] = KEY_0,

	[0x5b] = KEY_POWER,
	[0x5f] = KEY_MUTE,
	[0x55] = KEY_GOTO,
	[0x5d] = KEY_SEARCH,
	[ 0x17 ] = KEY_EPG,             // Guide
	[0x17] = KEY_EPG,		/* Guide */
	[0x1f] = KEY_MENU,
	[0x0f] = KEY_UP,
	[0x46] = KEY_DOWN,
	[0x16] = KEY_LEFT,
	[0x1e] = KEY_RIGHT,
	[ 0x0e ] = KEY_SELECT,          // Enter
	[0x0e] = KEY_SELECT,		/* Enter */
	[0x5a] = KEY_INFO,
	[0x52] = KEY_EXIT,
	[0x59] = KEY_PREVIOUS,
@@ -157,16 +162,16 @@ static IR_KEYTAB_TYPE ir_codes_adstech_dvb_t_pci[IR_KEYTAB_SIZE] = {
	[0x44] = KEY_PLAYPAUSE,
	[0x07] = KEY_STOP,
	[0x1b] = KEY_RECORD,
	[ 0x13 ] = KEY_TUNER,           // Live
	[0x13] = KEY_TUNER,		/* Live */
	[0x0a] = KEY_A,
	[0x12] = KEY_B,
	[ 0x03 ] = KEY_PROG1,           // 1
	[ 0x01 ] = KEY_PROG2,           // 2
	[ 0x00 ] = KEY_PROG3,           // 3
	[0x03] = KEY_PROG1,		/* 1 */
	[0x01] = KEY_PROG2,		/* 2 */
	[0x00] = KEY_PROG3,		/* 3 */
	[0x06] = KEY_DVD,
	[ 0x48 ] = KEY_AUX,             // Photo
	[0x48] = KEY_AUX,		/* Photo */
	[0x40] = KEY_VIDEO,
	[ 0x19 ] = KEY_AUDIO,           // Music
	[0x19] = KEY_AUDIO,		/* Music */
	[0x0b] = KEY_CHANNELUP,
	[0x08] = KEY_CHANNELDOWN,
	[0x15] = KEY_VOLUMEUP,
@@ -177,30 +182,32 @@ static IR_KEYTAB_TYPE ir_codes_adstech_dvb_t_pci[IR_KEYTAB_SIZE] = {

/* MSI TV@nywhere remote */
static IR_KEYTAB_TYPE ir_codes_msi_tvanywhere[IR_KEYTAB_SIZE] = {
       [ 0x00 ] = KEY_0,           /* '0' */
       [ 0x01 ] = KEY_1,           /* '1' */
       [ 0x02 ] = KEY_2,           /* '2' */
       [ 0x03 ] = KEY_3,           /* '3' */
       [ 0x04 ] = KEY_4,           /* '4' */
       [ 0x05 ] = KEY_5,           /* '5' */
       [ 0x06 ] = KEY_6,           /* '6' */
       [ 0x07 ] = KEY_7,           /* '7' */
       [ 0x08 ] = KEY_8,           /* '8' */
       [ 0x09 ] = KEY_9,           /* '9' */
       [ 0x0c ] = KEY_MUTE,        /* 'Mute' */
       [ 0x0f ] = KEY_SCREEN,      /* 'Full Screen' */
       [ 0x10 ] = KEY_F,           /* 'Funtion' */
       [ 0x11 ] = KEY_T,           /* 'Time shift' */
       [ 0x12 ] = KEY_POWER,       /* 'Power' */
       [ 0x13 ] = KEY_MEDIA,       /* 'MTS' */
       [ 0x14 ] = KEY_SLOW,        /* 'Slow' */
       [ 0x16 ] = KEY_REWIND,      /* 'backward <<' */
       [ 0x17 ] = KEY_ENTER,       /* 'Return' */
       [ 0x18 ] = KEY_FASTFORWARD, /* 'forward >>' */
       [ 0x1a ] = KEY_CHANNELUP,   /* 'Channel+' */
       [ 0x1b ] = KEY_VOLUMEUP,    /* 'Volume+' */
       [ 0x1e ] = KEY_CHANNELDOWN, /* 'Channel-' */
       [ 0x1f ] = KEY_VOLUMEDOWN,  /* 'Volume-' */
	/* Keys 0 to 9 */
	[0x00] = KEY_0,
	[0x01] = KEY_1,
	[0x02] = KEY_2,
	[0x03] = KEY_3,
	[0x04] = KEY_4,
	[0x05] = KEY_5,
	[0x06] = KEY_6,
	[0x07] = KEY_7,
	[0x08] = KEY_8,
	[0x09] = KEY_9,

	[0x0c] = KEY_MUTE,
	[0x0f] = KEY_SCREEN,		/* Full Screen */
	[0x10] = KEY_F,			/* Funtion */
	[0x11] = KEY_T,			/* Time shift */
	[0x12] = KEY_POWER,
	[0x13] = KEY_MEDIA,		/* MTS */
	[0x14] = KEY_SLOW,
	[0x16] = KEY_REWIND,		/* backward << */
	[0x17] = KEY_ENTER,		/* Return */
	[0x18] = KEY_FASTFORWARD,	/* forward >> */
	[0x1a] = KEY_CHANNELUP,
	[0x1b] = KEY_VOLUMEUP,
	[0x1e] = KEY_CHANNELDOWN,
	[0x1f] = KEY_VOLUMEDOWN,
};

/* ---------------------------------------------------------------------- */
@@ -320,7 +327,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
		ir->gpio_addr = MO_GP1_IO;
		ir->mask_keycode = 0x1f;
		ir->mask_keyup = 0x60;
		ir->polling      = 50; // ms
		ir->polling = 50; /* ms */
		break;
	case CX88_BOARD_HAUPPAUGE:
	case CX88_BOARD_HAUPPAUGE_DVB_T1:
@@ -333,35 +340,35 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
		ir->gpio_addr = MO_GP0_IO;
		ir->mask_keycode = 0x8f8;
		ir->mask_keyup = 0x100;
		ir->polling      = 1; // ms
		ir->polling = 1; /* ms */
		break;
	case CX88_BOARD_IODATA_GVBCTV7E:
		ir_codes = ir_codes_iodata_bctv7e;
		ir->gpio_addr = MO_GP0_IO;
		ir->mask_keycode = 0xfd;
		ir->mask_keydown = 0x02;
		ir->polling      = 5; // ms
		ir->polling = 5; /* ms */
		break;
	case CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO:
		ir_codes = ir_codes_pixelview;
		ir->gpio_addr = MO_GP1_IO;
		ir->mask_keycode = 0x1f;
		ir->mask_keyup = 0x80;
		ir->polling      = 1; // ms
		ir->polling = 1; /* ms */
		break;
	case CX88_BOARD_ADSTECH_DVB_T_PCI:
		ir_codes = ir_codes_adstech_dvb_t_pci;
		ir->gpio_addr = MO_GP1_IO;
		ir->mask_keycode = 0xbf;
		ir->mask_keyup = 0x40;
		ir->polling      = 50; // ms
		ir->polling = 50; /* ms */
		break;
	case CX88_BOARD_MSI_TVANYWHERE_MASTER:
		ir_codes = ir_codes_msi_tvanywhere;
		ir->gpio_addr = MO_GP1_IO;
		ir->mask_keycode = 0x1f;
		ir->mask_keyup = 0x40;
                ir->polling      = 1;
		ir->polling = 1; /* ms */
		break;
	}

@@ -373,8 +380,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
	/* init input device */
	snprintf(ir->name, sizeof(ir->name), "cx88 IR (%s)",
		 cx88_boards[core->board].name);
	snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0",
		 pci_name(pci));
	snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0", pci_name(pci));

	ir_input_init(&ir->input, &ir->ir, ir_type, ir_codes);
	ir->input.name = ir->name;
@@ -401,9 +407,9 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
		schedule_work(&ir->work);
	}
	if (ir->sampling) {
		core->pci_irqmask |= (1<<18);   // IR_SMP_INT
		cx_write(MO_DDS_IO, 0xa80a80);  // 4 kHz sample rate
		cx_write(MO_DDSCFG_IO,   0x5);  // enable
		core->pci_irqmask |= (1 << 18);	/* IR_SMP_INT */
		cx_write(MO_DDS_IO, 0xa80a80);	/* 4 kHz sample rate */
		cx_write(MO_DDSCFG_IO, 0x5);	/* enable */
	}

	/* all done */
Loading