* [PATCH] kernel 2.6.24: Add support for Items ITV-301 Stereo TV Tuner
@ 2008-05-01 22:06 André AUZI
0 siblings, 0 replies; only message in thread
From: André AUZI @ 2008-05-01 22:06 UTC (permalink / raw)
To: video4linux-list
Changes include:
- addition of the keymap for the remote control: ir_codes_items_h338
- addition of the board: SAA7134_BOARD_ITEMS_ITV301
- minor adaptation to the debug logs for easier GPIO bit change
identification
Signed-off-by: Andre Auzi <aauzi@users.sourceforge.net>
diff -r 5e73425c1968 -r f091994a981b
linux/Documentation/video4linux/CARDLIST.saa7134
--- a/linux/Documentation/video4linux/CARDLIST.saa7134 Wed Apr 30
23:18:40 2008 -0300
+++ b/linux/Documentation/video4linux/CARDLIST.saa7134 Thu May 01
23:07:52 2008 +0200
@@ -141,3 +141,4 @@ 140 -> Avermedia DVB-S Pro A700
140 -> Avermedia DVB-S Pro A700 [1461:a7a1]
141 -> Avermedia DVB-S Hybrid+FM A700 [1461:a7a2]
142 -> Beholder BeholdTV H6 [5ace:6290]
+143 -> Items ITV-301 PCI Stero TV Tuner
diff -r 5e73425c1968 -r f091994a981b linux/drivers/media/common/ir-keymaps.c
--- a/linux/drivers/media/common/ir-keymaps.c Wed Apr 30 23:18:40
2008 -0300
+++ b/linux/drivers/media/common/ir-keymaps.c Thu May 01 23:07:52
2008 +0200
@@ -2251,3 +2251,98 @@ IR_KEYTAB_TYPE ir_codes_powercolor_real_
[0x25] = KEY_POWER, /* power */
};
EXPORT_SYMBOL_GPL(ir_codes_powercolor_real_angel);
+
+/* Andre Auzi <aauzi@users.sourceforge.net>
+ inspired by Michael Tokarev <mjt@tls.msk.ru> ir_codes_manli
+
+ Keytable is used by Items ITV-301 PCI TV Tuner (remote
+ control identification code, on the back of the device,
+ is H-338).
+
+ The "ascii-art picture" below (in comments, first row
+ is the keycode in hex, and subsequent row(s) shows
+ the button labels) helps to describe which keycodes are
+ assigned to the buttons.
+ */
+IR_KEYTAB_TYPE ir_codes_items_h338[IR_KEYTAB_SIZE] = {
+
+ /* 0x1c 0x12 *
+ * RADIO POWER *
+ * */
+ [0x1c] = KEY_RADIO, /*XXX*/
+ [0x12] = KEY_POWER,
+
+ /* 0x01 0x02 0x03 *
+ * 1 2 3 *
+ * *
+ * 0x04 0x05 0x06 *
+ * 4 5 6 *
+ * *
+ * 0x07 0x08 0x09 *
+ * 7 8 9 *
+ * */
+ [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,
+
+ /* 0x0a 0x00 0x17 *
+ * RECALL 0 PLUS *
+ * */
+ [0x0a] = KEY_LAST, /*XXX Recall Last for Recall */
+ [0x00] = KEY_0,
+ [0x17] = KEY_DIGITS, /*XXX for Plus */
+
+ /* 0x14 0x10 *
+ * OSD MODE */
+ [0x14] = KEY_MENU,
+ [0x10] = KEY_MODE,
+
+ /* 0x0b *
+ * Ch+ *
+ * *
+ * 0x18 0x16 0x0c *
+ * Vol- Ok Vol+ *
+ * *
+ * 0x015 *
+ * Ch- *
+ * */
+ [0x0b] = KEY_CHANNELUP,
+ [0x18] = KEY_VOLUMEDOWN,
+ [0x16] = KEY_OK,
+ [0x0c] = KEY_VOLUMEUP,
+ [0x15] = KEY_CHANNELDOWN,
+
+ /* 0x11 0x0d *
+ * OSD MODE *
+ * */
+ [0x11] = KEY_TV, /*XXX*/
+ [0x0d] = KEY_AUDIO, /*XXX there's no KEY_STEREO */
+
+ /* 0x0f 0x1b 0x1a *
+ * PREVIOUS NEXT *
+ * TIMESHIFT *
+ * *
+ * 0x0e 0x1f 0x1e *
+ * STOP PLAY PAUSE *
+ * */
+ [0x0f] = KEY_PREVIOUS,
+ [0x1b] = KEY_COFFEE, /*XXX there's no KEY_TIMESHIFTING */
+ [0x1a] = KEY_NEXT,
+ [0x0e] = KEY_STOP,
+ [0x1f] = KEY_PLAY,
+ [0x1e] = KEY_PAUSE,
+
+ /* 0x1d 0x13 0x19 *
+ * RECORD MUTE SNAPSHOT*
+ * */
+ [0x1d] = KEY_RECORD,
+ [0x13] = KEY_MUTE,
+ [0x19] = KEY_SYSRQ, /*XXX there's no KEY_SNAPSHOT */
+};
+EXPORT_SYMBOL_GPL(ir_codes_items_h338);
diff -r 5e73425c1968 -r f091994a981b
linux/drivers/media/video/saa7134/saa7134-cards.c
--- a/linux/drivers/media/video/saa7134/saa7134-cards.c Wed Apr 30
23:18:40 2008 -0300
+++ b/linux/drivers/media/video/saa7134/saa7134-cards.c Thu May 01
23:07:52 2008 +0200
@@ -4322,6 +4322,66 @@ struct saa7134_board saa7134_boards[] =
},
/* no DVB support for now */
/* .mpeg = SAA7134_MPEG_DVB, */
+ },
+ [SAA7134_BOARD_ITEMS_ITV301] = {
+ /* Andre Auzi <aauzi@users.sourceforge.net>
+ *
+ * INPUTS:
+ * vmux = 0, S-video input, bad synchronization, no color
+ * vmux = 1, composite input, OK
+ * tested with PAL DVD and SECAM VHS
+ * vmux = 2, S-video input, bad synchronization, no color
+ * vmux = 3, TV tuner, OK - tested in SECAM (france)
+ * vmux = 4, FM radio tuner, OK
+ * vmux = 5, no video signal
+ * vmux = 6, S-video input, bad synchronization, no color
+ * vmux = 7, S-video input, bad synchronization, no color
+ *
+ * amux = LINE2, tuner stereo input, OK
+ * amux = LINE1, jack stereo input, OK
+ *
+ * GPIO:
+ * bits[8-12] IR key code value (mask: 0x1F00)
+ * bit14 IR key pressed, active low (mask: 0x4000)
+ * bit15 (output) when set to zero, enables bit14's key pressed
+ * status and auto repeat (gpiomask: 0x8000)
+ *
+ * alsa mixing OK
+ * remote OK
+ * mpeg not tested
+ * teletext not tested
+ */
+ .name = "Items ITV-301 PCI Stero TV Tuner",
+ .audio_clock = 0x00187de7,
+ .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
+ .radio_type = UNSET,
+ .tuner_addr = ADDR_UNSET,
+ .radio_addr = ADDR_UNSET,
+ .tuner_config = 0,
+ .mpeg = SAA7134_MPEG_EMPRESS,
+ .tda9887_conf = (TDA9887_PRESENT
+ | TDA9887_INTERCARRIER
+ | TDA9887_PORT2_INACTIVE),
+ .gpiomask = 0x8000,
+ .inputs = {{
+ .name = name_tv,
+ .vmux = 3,
+ .amux = LINE2,
+ .tv = 1,
+ }, {
+ .name = name_comp1,
+ .vmux = 1,
+ .amux = LINE1,
+ }, {
+ .name = name_svideo,
+ .vmux = 0,
+ .amux = LINE1,
+ } },
+ .radio = {
+ .name = name_radio,
+ .vmux = 4,
+ .amux = LINE2,
+ },
},
};
@@ -5617,6 +5677,7 @@ int saa7134_board_init1(struct saa7134_d
case SAA7134_BOARD_BEHOLD_505FM:
case SAA7134_BOARD_BEHOLD_507_9FM:
case SAA7134_BOARD_GENIUS_TVGO_A11MCE:
+ case SAA7134_BOARD_ITEMS_ITV301:
dev->has_remote = SAA7134_REMOTE_GPIO;
break;
case SAA7134_BOARD_FLYDVBS_LR300:
diff -r 5e73425c1968 -r f091994a981b
linux/drivers/media/video/saa7134/saa7134-input.c
--- a/linux/drivers/media/video/saa7134/saa7134-input.c Wed Apr 30
23:18:40 2008 -0300
+++ b/linux/drivers/media/video/saa7134/saa7134-input.c Thu May 01
23:07:52 2008 +0200
@@ -85,14 +85,37 @@ static int build_key(struct saa7134_dev
gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
if (ir->polling) {
- if (ir->last_gpio == gpio)
+ /* limit observation to selected bits */
+ /* should (slightly) accelerate treatments of false positives */
+ /* ie. when gpio bits non-related to IR change */
+ u32 mask_selected = (ir->mask_keycode
+ | ir->mask_keydown
+ | ir->mask_keyup);
+ u32 changed = ir->last_gpio ^ gpio;
+
+ if ((changed & mask_selected) == 0) {
+ if (ir_debug && changed) {
+ data = ir_extract_bits(gpio, ir->mask_keycode);
+ dprintk("build_key gpio=0x%08x "
+ "mask=0x%08x data=0x%02x "
+ "changed=0x%08x\n",
+ gpio, ir->mask_keycode, data, changed);
+ ir->last_gpio = gpio;
+ }
+
+ /* count polls with same key state */
+ ir->last_count++;
return 0;
+ }
ir->last_gpio = gpio;
}
data = ir_extract_bits(gpio, ir->mask_keycode);
- dprintk("build_key gpio=0x%x mask=0x%x data=%d\n",
- gpio, ir->mask_keycode, data);
+ dprintk("build_key gpio=0x%08x mask=0x%08x data=0x%02x count=%d\n",
+ gpio, ir->mask_keycode, data, ir->last_count);
+
+ /* key state changed reset the poll counter */
+ ir->last_count = 0;
if (ir->polling) {
if ((ir->mask_keydown && (0 != (gpio & ir->mask_keydown))) ||
@@ -423,6 +446,18 @@ int saa7134_input_init1(struct saa7134_d
mask_keydown = 0xf00000;
polling = 50; /* ms */
break;
+ case SAA7134_BOARD_ITEMS_ITV301:
+ ir_codes = ir_codes_items_h338;
+ mask_keycode = 0x00001f00;
+ mask_keyup = 0x00004000;
+ polling = 12; /* ms : has to be fast enough to sample auto
+ * repeat sequences - Nyquist and Shannon
+ * said so (or something quite similar).
+ * We must trust them.
+ * Tuned to have at minimun one no change
+ * for each key state when auto repeat is
+ * active.
+ */
}
if (NULL == ir_codes) {
printk("%s: Oops: IR config error [card=%d]\n",
diff -r 5e73425c1968 -r f091994a981b
linux/drivers/media/video/saa7134/saa7134.h
--- a/linux/drivers/media/video/saa7134/saa7134.h Wed Apr 30 23:18:40
2008 -0300
+++ b/linux/drivers/media/video/saa7134/saa7134.h Thu May 01 23:07:52
2008 +0200
@@ -271,6 +271,7 @@ struct saa7134_format {
#define SAA7134_BOARD_AVERMEDIA_A700_PRO 140
#define SAA7134_BOARD_AVERMEDIA_A700_HYBRID 141
#define SAA7134_BOARD_BEHOLD_H6 142
+#define SAA7134_BOARD_ITEMS_ITV301 143
#define SAA7134_MAXBOARDS 8
diff -r 5e73425c1968 -r f091994a981b linux/include/media/ir-common.h
--- a/linux/include/media/ir-common.h Wed Apr 30 23:18:40 2008 -0300
+++ b/linux/include/media/ir-common.h Thu May 01 23:07:52 2008 +0200
@@ -26,8 +26,8 @@
#include <linux/input.h>
#include <linux/workqueue.h>
-#define IR_TYPE_RC5 1
-#define IR_TYPE_PD 2 /* Pulse distance encoded IR */
+#define IR_TYPE_RC5 1
+#define IR_TYPE_PD 2 /* Pulse distance encoded IR */
#define IR_TYPE_OTHER 99
#define IR_KEYTAB_TYPE u32
@@ -43,31 +43,32 @@
struct ir_input_state {
/* configuration */
- int ir_type;
- IR_KEYTAB_TYPE ir_codes[IR_KEYTAB_SIZE];
+ int ir_type;
+ IR_KEYTAB_TYPE ir_codes[IR_KEYTAB_SIZE];
/* key info */
- u32 ir_raw; /* raw data */
- u32 ir_key; /* ir key code */
- u32 keycode; /* linux key code */
- int keypressed; /* current state */
+ u32 ir_raw; /* raw data */
+ u32 ir_key; /* ir key code */
+ u32 keycode; /* linux key code */
+ int keypressed; /* current state */
};
/* this was saa7134_ir and bttv_ir, moved here for
* rc5 decoding. */
struct card_ir {
- struct input_dev *dev;
- struct ir_input_state ir;
- char name[32];
- char phys[32];
+ struct input_dev *dev;
+ struct ir_input_state ir;
+ char name[32];
+ char phys[32];
/* Usual gpio signalling */
- u32 mask_keycode;
- u32 mask_keydown;
- u32 mask_keyup;
- u32 polling;
- u32 last_gpio;
+ u32 mask_keycode;
+ u32 mask_keydown;
+ u32 mask_keyup;
+ u32 polling;
+ u32 last_gpio;
+ int last_count;
int shift_by;
int start; // What should RC5_START() be
int addr; // What RC5_ADDR() should be.
@@ -146,6 +147,7 @@ extern IR_KEYTAB_TYPE ir_codes_pinnacle_
extern IR_KEYTAB_TYPE ir_codes_pinnacle_pctv_hd[IR_KEYTAB_SIZE];
extern IR_KEYTAB_TYPE ir_codes_genius_tvgo_a11mce[IR_KEYTAB_SIZE];
extern IR_KEYTAB_TYPE ir_codes_powercolor_real_angel[IR_KEYTAB_SIZE];
+extern IR_KEYTAB_TYPE ir_codes_items_h338[IR_KEYTAB_SIZE];
#endif
--
video4linux-list mailing list
Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-05-01 22:07 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-01 22:06 [PATCH] kernel 2.6.24: Add support for Items ITV-301 Stereo TV Tuner André AUZI
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.