Norwood PCI TV Tuner (non-pro) support
- From: hermann pitton <hermann-pitton (at) arcor.de>
- Date: Wed, 29 Mar 2006 21:43:57 +0200
Am Samstag, den 25.03.2006, 22:19 -0800 schrieb Peter Naulls:
> Some people have been asking for this, and I've been sitting on it for a
> week although it's not perfect. In particular, the handling of the
> GPIOs for the remote is unusual and to work fully it needs (I believe)
> to also twiddle a bit in the GPIO to shut off audio when the device is
> closed - as it is, audio remains running.
>
> The tuner defintion I used seems to suggest it's for a PAL tuner,
> although it's an NTSC card, having been bought in the US for $20 at
> CompUSA.
>
> This is my first kernel patch in rather a long time and hacking drivers
> isn't my favourite kind of development, so be nice.
>
> Enjoy.
>
Hi Peter,
Do you get the UHF channels with tuner=43 and TNF5535MF?
It has a TexasInstruments SN761672A pll chip and I would expect LG API
and 0x08 instead of 0x04 MK3 API for the UHF bandswitch. Maybe I'm wrong.
Cheers,
Hermann
> diff -r 110e8e48f80b linux/drivers/media/common/ir-keymaps.c
> --- a/linux/drivers/media/common/ir-keymaps.c Sat Mar 25 15:56:07 2006 -0300
> +++ b/linux/drivers/media/common/ir-keymaps.c Sat Mar 25 22:18:03 2006 -0800
> (at) (at) -1477,3 +1477,52 (at) (at) IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR
>
> EXPORT_SYMBOL_GPL(ir_codes_hauppauge_new);
>
> +
> +/* Norwood Micro (non-Pro) TV Tuner
> + By Peter Naulls <peter (at) 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);
> +
> diff -r 110e8e48f80b linux/drivers/media/video/cx88/cx88-cards.c
> --- a/linux/drivers/media/video/cx88/cx88-cards.c Sat Mar 25 15:56:07 2006 -0300
> +++ b/linux/drivers/media/video/cx88/cx88-cards.c Sat Mar 25 22:18:03 2006 -0800
> (at) (at) -1107,6 +1107,26 (at) (at) struct cx88_board cx88_boards[] = {
> .dvb = 1,
> },
>
> + [CX88_BOARD_NORWOOD_MICRO] = {
> + .name = "Norwood Micro TV Tuner",
> + .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
> + .radio_type = UNSET,
> + .tuner_addr = ADDR_UNSET,
> + .radio_addr = ADDR_UNSET,
> + .input = {{
> + .type = CX88_VMUX_TELEVISION,
> + .vmux = 0,
> + .gpio0 = 0xbf61, /* internal decoder */
> + },{
> + .type = CX88_VMUX_COMPOSITE1,
> + .vmux = 1,
> + .gpio0 = 0xbf63,
> + },{
> + .type = CX88_VMUX_SVIDEO,
> + .vmux = 2,
> + .gpio0 = 0xbf63,
> + }},
> + },
> };
> const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
>
> diff -r 110e8e48f80b linux/drivers/media/video/cx88/cx88-core.c
> --- a/linux/drivers/media/video/cx88/cx88-core.c Sat Mar 25 15:56:07 2006 -0300
> +++ b/linux/drivers/media/video/cx88/cx88-core.c Sat Mar 25 22:18:03 2006 -0800
> (at) (at) -122,7 +122,7 (at) (at) static u32* cx88_risc_field(u32 *rp, str
> *(rp++)=cpu_to_le32(sg_dma_address(sg)+offset);
> offset+=bpl;
> } else {
> - /* scanline needs to be splitted */
> + /* scanline needs to be split */
> todo = bpl;
> *(rp++)=cpu_to_le32(RISC_WRITE|RISC_SOL|
> (sg_dma_len(sg)-offset));
> diff -r 110e8e48f80b linux/drivers/media/video/cx88/cx88-input.c
> --- a/linux/drivers/media/video/cx88/cx88-input.c Sat Mar 25 15:56:07 2006 -0300
> +++ b/linux/drivers/media/video/cx88/cx88-input.c Sat Mar 25 22:18:03 2006 -0800
> (at) (at) -90,7 +90,16 (at) (at) static void cx88_ir_handle_key(struct cx
> (gpio & ir->mask_keydown) ? " down" : "",
> (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);
> +
> + cx_write(MO_GP0_IO, 0x709);
> + 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 */
> if (gpio & ir->mask_keydown) {
> ir_input_keydown(ir->input, &ir->ir, data, data);
> (at) (at) -230,7 +239,14 (at) (at) int cx88_ir_init(struct cx88_core *core,
> ir_type = IR_TYPE_PD;
> ir->sampling = 0xff00; /* address */
> 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;
> + }
>
> if (NULL == ir_codes) {
> kfree(ir);
> diff -r 110e8e48f80b linux/drivers/media/video/cx88/cx88.h
> --- a/linux/drivers/media/video/cx88/cx88.h Sat Mar 25 15:56:07 2006 -0300
> +++ b/linux/drivers/media/video/cx88/cx88.h Sat Mar 25 22:18:03 2006 -0800
> (at) (at) -198,6 +198,7 (at) (at) extern struct sram_channel cx88_sram_cha
> #define CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL 44
> #define CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT 45
> #define CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID 46
> +#define CX88_BOARD_NORWOOD_MICRO 47
>
> enum cx88_itype {
> CX88_VMUX_COMPOSITE1 = 1,
> diff -r 110e8e48f80b linux/include/media/ir-common.h
> --- a/linux/include/media/ir-common.h Sat Mar 25 15:56:07 2006 -0300
> +++ b/linux/include/media/ir-common.h Sat Mar 25 22:18:03 2006 -0800
> (at) (at) -90,6 +90,7 (at) (at) extern IR_KEYTAB_TYPE ir_codes_winfast[I
> extern IR_KEYTAB_TYPE ir_codes_winfast[IR_KEYTAB_SIZE];
> extern IR_KEYTAB_TYPE ir_codes_pinnacle[IR_KEYTAB_SIZE];
> extern IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE];
> +extern IR_KEYTAB_TYPE ir_codes_norwood[IR_KEYTAB_SIZE];
>
> #endif
>
>
>
>
--
video4linux-list mailing list
Unsubscribe mailto:video4linux-list-request (at) redhat.com?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list