forked from Minki/linux
V4L/DVB (4361): Cx88: add support for Norwood PCI TV Tuner (non-pro)
This patch adds support for Norwood PCI TV Tuner (non-pro) Signed-off-by: Peter Naulls <peter@chocky.org> Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
5dbaa2cb75
commit
d1009bd733
@ -52,3 +52,4 @@
|
|||||||
51 -> WinFast DTV2000 H [107d:665e]
|
51 -> WinFast DTV2000 H [107d:665e]
|
||||||
52 -> Geniatech DVB-S [14f1:0084]
|
52 -> Geniatech DVB-S [14f1:0084]
|
||||||
53 -> Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T [0070:1404]
|
53 -> Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T [0070:1404]
|
||||||
|
54 -> Norwood Micro TV Tuner
|
||||||
|
@ -1473,3 +1473,51 @@ IR_KEYTAB_TYPE ir_codes_npgtech[IR_KEYTAB_SIZE] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(ir_codes_npgtech);
|
EXPORT_SYMBOL_GPL(ir_codes_npgtech);
|
||||||
|
|
||||||
|
/* Norwood Micro (non-Pro) TV Tuner
|
||||||
|
By Peter Naulls <peter@chocky.org>
|
||||||
|
Key comments are the functions given in the manual */
|
||||||
|
IR_KEYTAB_TYPE ir_codes_norwood[IR_KEYTAB_SIZE] = {
|
||||||
|
/* Keys 0 to 9 */
|
||||||
|
[ 0x20 ] = KEY_0,
|
||||||
|
[ 0x21 ] = KEY_1,
|
||||||
|
[ 0x22 ] = KEY_2,
|
||||||
|
[ 0x23 ] = KEY_3,
|
||||||
|
[ 0x24 ] = KEY_4,
|
||||||
|
[ 0x25 ] = KEY_5,
|
||||||
|
[ 0x26 ] = KEY_6,
|
||||||
|
[ 0x27 ] = KEY_7,
|
||||||
|
[ 0x28 ] = KEY_8,
|
||||||
|
[ 0x29 ] = KEY_9,
|
||||||
|
|
||||||
|
[ 0x78 ] = KEY_TUNER, /* Video Source */
|
||||||
|
[ 0x2c ] = KEY_EXIT, /* Open/Close software */
|
||||||
|
[ 0x2a ] = KEY_SELECT, /* 2 Digit Select */
|
||||||
|
[ 0x69 ] = KEY_AGAIN, /* Recall */
|
||||||
|
|
||||||
|
[ 0x32 ] = KEY_BRIGHTNESSUP, /* Brightness increase */
|
||||||
|
[ 0x33 ] = KEY_BRIGHTNESSDOWN, /* Brightness decrease */
|
||||||
|
[ 0x6b ] = KEY_KPPLUS, /* (not named >>>>>) */
|
||||||
|
[ 0x6c ] = KEY_KPMINUS, /* (not named <<<<<) */
|
||||||
|
|
||||||
|
[ 0x2d ] = KEY_MUTE, /* Mute */
|
||||||
|
[ 0x30 ] = KEY_VOLUMEUP, /* Volume up */
|
||||||
|
[ 0x31 ] = KEY_VOLUMEDOWN, /* Volume down */
|
||||||
|
[ 0x60 ] = KEY_CHANNELUP, /* Channel up */
|
||||||
|
[ 0x61 ] = KEY_CHANNELDOWN, /* Channel down */
|
||||||
|
|
||||||
|
[ 0x3f ] = KEY_RECORD, /* Record */
|
||||||
|
[ 0x37 ] = KEY_PLAY, /* Play */
|
||||||
|
[ 0x36 ] = KEY_PAUSE, /* Pause */
|
||||||
|
[ 0x2b ] = KEY_STOP, /* Stop */
|
||||||
|
[ 0x67 ] = KEY_FASTFORWARD, /* Foward */
|
||||||
|
[ 0x66 ] = KEY_REWIND, /* Rewind */
|
||||||
|
[ 0x3e ] = KEY_SEARCH, /* Auto Scan */
|
||||||
|
[ 0x2e ] = KEY_CAMERA, /* Capture Video */
|
||||||
|
[ 0x6d ] = KEY_MENU, /* Show/Hide Control */
|
||||||
|
[ 0x2f ] = KEY_ZOOM, /* Full Screen */
|
||||||
|
[ 0x34 ] = KEY_RADIO, /* FM */
|
||||||
|
[ 0x65 ] = KEY_POWER, /* Computer power */
|
||||||
|
};
|
||||||
|
|
||||||
|
EXPORT_SYMBOL_GPL(ir_codes_norwood);
|
||||||
|
@ -1231,6 +1231,26 @@ struct cx88_board cx88_boards[] = {
|
|||||||
.gpio0 = 0x84bf,
|
.gpio0 = 0x84bf,
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
|
[CX88_BOARD_NORWOOD_MICRO] = {
|
||||||
|
.name = "Norwood Micro TV Tuner",
|
||||||
|
.tuner_type = TUNER_TNF_5335MF,
|
||||||
|
.radio_type = UNSET,
|
||||||
|
.tuner_addr = ADDR_UNSET,
|
||||||
|
.radio_addr = ADDR_UNSET,
|
||||||
|
.input = {{
|
||||||
|
.type = CX88_VMUX_TELEVISION,
|
||||||
|
.vmux = 0,
|
||||||
|
.gpio0 = 0x0709,
|
||||||
|
},{
|
||||||
|
.type = CX88_VMUX_COMPOSITE1,
|
||||||
|
.vmux = 1,
|
||||||
|
.gpio0 = 0x070b,
|
||||||
|
},{
|
||||||
|
.type = CX88_VMUX_SVIDEO,
|
||||||
|
.vmux = 2,
|
||||||
|
.gpio0 = 0x070b,
|
||||||
|
}},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
|
const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ static u32* cx88_risc_field(u32 *rp, struct scatterlist *sglist,
|
|||||||
*(rp++)=cpu_to_le32(sg_dma_address(sg)+offset);
|
*(rp++)=cpu_to_le32(sg_dma_address(sg)+offset);
|
||||||
offset+=bpl;
|
offset+=bpl;
|
||||||
} else {
|
} else {
|
||||||
/* scanline needs to be splitted */
|
/* scanline needs to be split */
|
||||||
todo = bpl;
|
todo = bpl;
|
||||||
*(rp++)=cpu_to_le32(RISC_WRITE|RISC_SOL|
|
*(rp++)=cpu_to_le32(RISC_WRITE|RISC_SOL|
|
||||||
(sg_dma_len(sg)-offset));
|
(sg_dma_len(sg)-offset));
|
||||||
|
@ -107,7 +107,15 @@ static void cx88_ir_handle_key(struct cx88_IR *ir)
|
|||||||
(gpio & ir->mask_keydown) ? " down" : "",
|
(gpio & ir->mask_keydown) ? " down" : "",
|
||||||
(gpio & ir->mask_keyup) ? " up" : "");
|
(gpio & ir->mask_keyup) ? " up" : "");
|
||||||
|
|
||||||
if (ir->mask_keydown) {
|
if (ir->core->board == CX88_BOARD_NORWOOD_MICRO) {
|
||||||
|
u32 gpio_key = cx_read(MO_GP0_IO);
|
||||||
|
|
||||||
|
data = (data << 4) | ((gpio_key & 0xf0) >> 4);
|
||||||
|
|
||||||
|
ir_input_keydown(ir->input, &ir->ir, data, data);
|
||||||
|
ir_input_nokey(ir->input, &ir->ir);
|
||||||
|
|
||||||
|
} else if (ir->mask_keydown) {
|
||||||
/* bit set on keydown */
|
/* bit set on keydown */
|
||||||
if (gpio & ir->mask_keydown) {
|
if (gpio & ir->mask_keydown) {
|
||||||
ir_input_keydown(ir->input, &ir->ir, data, data);
|
ir_input_keydown(ir->input, &ir->ir, data, data);
|
||||||
@ -248,6 +256,13 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
|
|||||||
ir_type = IR_TYPE_PD;
|
ir_type = IR_TYPE_PD;
|
||||||
ir->sampling = 0xff00; /* address */
|
ir->sampling = 0xff00; /* address */
|
||||||
break;
|
break;
|
||||||
|
case CX88_BOARD_NORWOOD_MICRO:
|
||||||
|
ir_codes = ir_codes_norwood;
|
||||||
|
ir->gpio_addr = MO_GP1_IO;
|
||||||
|
ir->mask_keycode = 0x0e;
|
||||||
|
ir->mask_keyup = 0x80;
|
||||||
|
ir->polling = 50; /* ms */
|
||||||
|
break;
|
||||||
case CX88_BOARD_NPGTECH_REALTV_TOP10FM:
|
case CX88_BOARD_NPGTECH_REALTV_TOP10FM:
|
||||||
ir_codes = ir_codes_npgtech;
|
ir_codes = ir_codes_npgtech;
|
||||||
ir->gpio_addr = MO_GP0_IO;
|
ir->gpio_addr = MO_GP0_IO;
|
||||||
|
@ -198,6 +198,7 @@ extern struct sram_channel cx88_sram_channels[];
|
|||||||
#define CX88_BOARD_WINFAST_DTV2000H 51
|
#define CX88_BOARD_WINFAST_DTV2000H 51
|
||||||
#define CX88_BOARD_GENIATECH_DVBS 52
|
#define CX88_BOARD_GENIATECH_DVBS 52
|
||||||
#define CX88_BOARD_HAUPPAUGE_HVR3000 53
|
#define CX88_BOARD_HAUPPAUGE_HVR3000 53
|
||||||
|
#define CX88_BOARD_NORWOOD_MICRO 54
|
||||||
|
|
||||||
enum cx88_itype {
|
enum cx88_itype {
|
||||||
CX88_VMUX_COMPOSITE1 = 1,
|
CX88_VMUX_COMPOSITE1 = 1,
|
||||||
|
@ -90,6 +90,7 @@ extern IR_KEYTAB_TYPE ir_codes_winfast[IR_KEYTAB_SIZE];
|
|||||||
extern IR_KEYTAB_TYPE ir_codes_pinnacle_color[IR_KEYTAB_SIZE];
|
extern IR_KEYTAB_TYPE ir_codes_pinnacle_color[IR_KEYTAB_SIZE];
|
||||||
extern IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE];
|
extern IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE];
|
||||||
extern IR_KEYTAB_TYPE ir_codes_npgtech[IR_KEYTAB_SIZE];
|
extern IR_KEYTAB_TYPE ir_codes_npgtech[IR_KEYTAB_SIZE];
|
||||||
|
extern IR_KEYTAB_TYPE ir_codes_norwood[IR_KEYTAB_SIZE];
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user