aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx88
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
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')
-rw-r--r--drivers/media/video/cx88/cx88-cards.c27
-rw-r--r--drivers/media/video/cx88/cx88-input.c31
-rw-r--r--drivers/media/video/cx88/cx88.h1
3 files changed, 56 insertions, 3 deletions
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index 16cd6434f2b1..04ef1ccfb67f 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -1148,6 +1148,29 @@ struct cx88_board cx88_boards[] = {
1148 }}, 1148 }},
1149 .blackbird = 1, 1149 .blackbird = 1,
1150 }, 1150 },
1151 [CX88_BOARD_NPGTECH_REALTV] = {
1152 .name = "NPG Tech Real TV",
1153 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
1154 .radio_type = UNSET,
1155 .tuner_addr = ADDR_UNSET,
1156 .radio_addr = ADDR_UNSET,
1157 .input = {{
1158 .type = CX88_VMUX_TELEVISION,
1159 .vmux = 0,
1160 .gpio0 = 0x0788,
1161 },{
1162 .type = CX88_VMUX_COMPOSITE1,
1163 .vmux = 1,
1164 .gpio0 = 0x078b,
1165 },{
1166 .type = CX88_VMUX_SVIDEO,
1167 .vmux = 2,
1168 }},
1169 .radio = {
1170 .type = CX88_RADIO,
1171 .gpio0 = 0x074a,
1172 },
1173 },
1151}; 1174};
1152const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); 1175const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
1153 1176
@@ -1381,6 +1404,10 @@ struct cx88_subid cx88_subids[] = {
1381 .subvendor = 0x1554, 1404 .subvendor = 0x1554,
1382 .subdevice = 0x4813, 1405 .subdevice = 0x4813,
1383 .card = CX88_BOARD_PIXELVIEW_PLAYTV_P7000, 1406 .card = CX88_BOARD_PIXELVIEW_PLAYTV_P7000,
1407 },{
1408 .subvendor = 0x14f1,
1409 .subdevice = 0x0842,
1410 .card = CX88_BOARD_NPGTECH_REALTV,
1384 }, 1411 },
1385}; 1412};
1386const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); 1413const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids);
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) {
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h
index 663def46f67c..5df6e41852bd 100644
--- a/drivers/media/video/cx88/cx88.h
+++ b/drivers/media/video/cx88/cx88.h
@@ -192,6 +192,7 @@ extern struct sram_channel cx88_sram_channels[];
192#define CX88_BOARD_PCHDTV_HD5500 47 192#define CX88_BOARD_PCHDTV_HD5500 47
193#define CX88_BOARD_KWORLD_MCE200_DELUXE 48 193#define CX88_BOARD_KWORLD_MCE200_DELUXE 48
194#define CX88_BOARD_PIXELVIEW_PLAYTV_P7000 49 194#define CX88_BOARD_PIXELVIEW_PLAYTV_P7000 49
195#define CX88_BOARD_NPGTECH_REALTV 50
195 196
196enum cx88_itype { 197enum cx88_itype {
197 CX88_VMUX_COMPOSITE1 = 1, 198 CX88_VMUX_COMPOSITE1 = 1,