aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx88/cx88-input.c
diff options
context:
space:
mode:
authorRicardo Cerqueira <v4l@cerqueira.org>2006-05-22 06:44:02 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2006-06-25 01:00:37 -0400
commit680543c5d2756ad3496f8ef197ba8825b78d6840 (patch)
treeb3ce796bbb5855351194a2850467dd79198483aa /drivers/media/video/cx88/cx88-input.c
parentd6144028af6b151018c50c160e794a4d7f686333 (diff)
V4L/DVB (4038): New cx88 card #50: NPG Tech RealTV
Added support for a new cx88 card, including it's remote Signed-off-by: Ricardo Cerqueira <v4l@cerqueira.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/cx88/cx88-input.c')
-rw-r--r--drivers/media/video/cx88/cx88-input.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/drivers/media/video/cx88/cx88-input.c b/drivers/media/video/cx88/cx88-input.c
index 78a63b7dd380..4bd86c4fd1b2 100644
--- a/drivers/media/video/cx88/cx88-input.c
+++ b/drivers/media/video/cx88/cx88-input.c
@@ -70,14 +70,33 @@ MODULE_PARM_DESC(ir_debug, "enable debug messages [IR]");
70static void cx88_ir_handle_key(struct cx88_IR *ir) 70static void cx88_ir_handle_key(struct cx88_IR *ir)
71{ 71{
72 struct cx88_core *core = ir->core; 72 struct cx88_core *core = ir->core;
73 u32 gpio, data; 73 u32 gpio, data, auxgpio;
74 74
75 /* read gpio value */ 75 /* read gpio value */
76 gpio = cx_read(ir->gpio_addr); 76 gpio = cx_read(ir->gpio_addr);
77 if (core->board == CX88_BOARD_NPGTECH_REALTV) {
78 /* This board apparently uses a combination of 2 GPIO
79 to represent the keys. Additionally, the second GPIO
80 can be used for parity.
81
82 Example:
83
84 for key "5"
85 gpio = 0x758, auxgpio = 0xe5 or 0xf5
86 for key "Power"
87 gpio = 0x758, auxgpio = 0xed or 0xfd
88 */
89
90 auxgpio = cx_read(MO_GP1_IO);
91 /* Take out the parity part */
92 gpio+=(auxgpio & 0xef);
93 } else
94 auxgpio = gpio;
95
77 if (ir->polling) { 96 if (ir->polling) {
78 if (ir->last_gpio == gpio) 97 if (ir->last_gpio == auxgpio)
79 return; 98 return;
80 ir->last_gpio = gpio; 99 ir->last_gpio = auxgpio;
81 } 100 }
82 101
83 /* extract data */ 102 /* extract data */
@@ -228,6 +247,12 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
228 ir_type = IR_TYPE_PD; 247 ir_type = IR_TYPE_PD;
229 ir->sampling = 0xff00; /* address */ 248 ir->sampling = 0xff00; /* address */
230 break; 249 break;
250 case CX88_BOARD_NPGTECH_REALTV:
251 ir_codes = ir_codes_npgtech;
252 ir->gpio_addr = MO_GP0_IO;
253 ir->mask_keycode = 0xfa;
254 ir->polling = 50; /* ms */
255 break;
231 } 256 }
232 257
233 if (NULL == ir_codes) { 258 if (NULL == ir_codes) {