aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/cx23885/cx23885-input.c22
-rw-r--r--drivers/media/video/cx23885/cx23885.h19
2 files changed, 31 insertions, 10 deletions
diff --git a/drivers/media/video/cx23885/cx23885-input.c b/drivers/media/video/cx23885/cx23885-input.c
index 5de6ba98f7a8..c1abc35f9741 100644
--- a/drivers/media/video/cx23885/cx23885-input.c
+++ b/drivers/media/video/cx23885/cx23885-input.c
@@ -62,7 +62,7 @@ static inline unsigned int rc5_command(u32 rc5_baseband)
62 62
63static void cx23885_input_process_raw_rc5(struct cx23885_dev *dev) 63static void cx23885_input_process_raw_rc5(struct cx23885_dev *dev)
64{ 64{
65 struct card_ir *ir_input = dev->ir_input; 65 struct cx23885_ir_input *ir_input = dev->ir_input;
66 unsigned int code, command; 66 unsigned int code, command;
67 u32 rc5; 67 u32 rc5;
68 68
@@ -110,7 +110,7 @@ static void cx23885_input_next_pulse_width_rc5(struct cx23885_dev *dev,
110 u32 ns_pulse) 110 u32 ns_pulse)
111{ 111{
112 const int rc5_quarterbit_ns = 444444; /* 32 cycles/36 kHz/2 = 444 us */ 112 const int rc5_quarterbit_ns = 444444; /* 32 cycles/36 kHz/2 = 444 us */
113 struct card_ir *ir_input = dev->ir_input; 113 struct cx23885_ir_input *ir_input = dev->ir_input;
114 int i, level, quarterbits, halfbits; 114 int i, level, quarterbits, halfbits;
115 115
116 if (!ir_input->active) { 116 if (!ir_input->active) {
@@ -166,7 +166,7 @@ static void cx23885_input_next_pulse_width_rc5(struct cx23885_dev *dev,
166static void cx23885_input_process_pulse_widths_rc5(struct cx23885_dev *dev, 166static void cx23885_input_process_pulse_widths_rc5(struct cx23885_dev *dev,
167 bool add_eom) 167 bool add_eom)
168{ 168{
169 struct card_ir *ir_input = dev->ir_input; 169 struct cx23885_ir_input *ir_input = dev->ir_input;
170 struct ir_input_state *ir_input_state = &ir_input->ir; 170 struct ir_input_state *ir_input_state = &ir_input->ir;
171 171
172 u32 ns_pulse[RC5_HALF_BITS+1]; 172 u32 ns_pulse[RC5_HALF_BITS+1];
@@ -243,7 +243,7 @@ void cx23885_input_rx_work_handler(struct cx23885_dev *dev, u32 events)
243 243
244static void cx23885_input_ir_start(struct cx23885_dev *dev) 244static void cx23885_input_ir_start(struct cx23885_dev *dev)
245{ 245{
246 struct card_ir *ir_input = dev->ir_input; 246 struct cx23885_ir_input *ir_input = dev->ir_input;
247 struct ir_input_state *ir_input_state = &ir_input->ir; 247 struct ir_input_state *ir_input_state = &ir_input->ir;
248 struct v4l2_subdev_ir_parameters params; 248 struct v4l2_subdev_ir_parameters params;
249 249
@@ -303,7 +303,7 @@ static void cx23885_input_ir_start(struct cx23885_dev *dev)
303 303
304static void cx23885_input_ir_stop(struct cx23885_dev *dev) 304static void cx23885_input_ir_stop(struct cx23885_dev *dev)
305{ 305{
306 struct card_ir *ir_input = dev->ir_input; 306 struct cx23885_ir_input *ir_input = dev->ir_input;
307 struct v4l2_subdev_ir_parameters params; 307 struct v4l2_subdev_ir_parameters params;
308 308
309 if (dev->sd_ir == NULL) 309 if (dev->sd_ir == NULL)
@@ -338,7 +338,7 @@ static void cx23885_input_ir_stop(struct cx23885_dev *dev)
338 338
339int cx23885_input_init(struct cx23885_dev *dev) 339int cx23885_input_init(struct cx23885_dev *dev)
340{ 340{
341 struct card_ir *ir; 341 struct cx23885_ir_input *ir;
342 struct input_dev *input_dev; 342 struct input_dev *input_dev;
343 char *ir_codes = NULL; 343 char *ir_codes = NULL;
344 int ir_type, ir_addr, ir_start; 344 int ir_type, ir_addr, ir_start;
@@ -376,9 +376,9 @@ int cx23885_input_init(struct cx23885_dev *dev)
376 ir->start = ir_start; 376 ir->start = ir_start;
377 377
378 /* init input device */ 378 /* init input device */
379 snprintf(ir->name, sizeof(ir->name), "cx23885 IR (%s)", 379 ir->name = kasprintf(GFP_KERNEL, "cx23885 IR (%s)",
380 cx23885_boards[dev->board].name); 380 cx23885_boards[dev->board].name);
381 snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0", pci_name(dev->pci)); 381 ir->phys = kasprintf(GFP_KERNEL, "pci-%s/ir0", pci_name(dev->pci));
382 382
383 ret = ir_input_init(input_dev, &ir->ir, ir_type); 383 ret = ir_input_init(input_dev, &ir->ir, ir_type);
384 if (ret < 0) 384 if (ret < 0)
@@ -410,6 +410,8 @@ err_out_stop:
410 cx23885_input_ir_stop(dev); 410 cx23885_input_ir_stop(dev);
411 dev->ir_input = NULL; 411 dev->ir_input = NULL;
412err_out_free: 412err_out_free:
413 kfree(ir->phys);
414 kfree(ir->name);
413 kfree(ir); 415 kfree(ir);
414 return ret; 416 return ret;
415} 417}
@@ -422,6 +424,8 @@ void cx23885_input_fini(struct cx23885_dev *dev)
422 if (dev->ir_input == NULL) 424 if (dev->ir_input == NULL)
423 return; 425 return;
424 ir_input_unregister(dev->ir_input->dev); 426 ir_input_unregister(dev->ir_input->dev);
427 kfree(dev->ir_input->phys);
428 kfree(dev->ir_input->name);
425 kfree(dev->ir_input); 429 kfree(dev->ir_input);
426 dev->ir_input = NULL; 430 dev->ir_input = NULL;
427} 431}
diff --git a/drivers/media/video/cx23885/cx23885.h b/drivers/media/video/cx23885/cx23885.h
index 8d6a55e54ee7..25167dd22ab8 100644
--- a/drivers/media/video/cx23885/cx23885.h
+++ b/drivers/media/video/cx23885/cx23885.h
@@ -30,6 +30,7 @@
30#include <media/tveeprom.h> 30#include <media/tveeprom.h>
31#include <media/videobuf-dma-sg.h> 31#include <media/videobuf-dma-sg.h>
32#include <media/videobuf-dvb.h> 32#include <media/videobuf-dvb.h>
33#include <media/ir-common.h>
33 34
34#include "btcx-risc.h" 35#include "btcx-risc.h"
35#include "cx23885-reg.h" 36#include "cx23885-reg.h"
@@ -304,6 +305,22 @@ struct cx23885_tsport {
304 void *port_priv; 305 void *port_priv;
305}; 306};
306 307
308struct cx23885_ir_input {
309 struct input_dev *dev;
310 struct ir_input_state ir;
311 char *name;
312 char *phys;
313
314 int start;
315 int addr;
316 int rc5_key_timeout;
317 struct timer_list timer_keyup;
318 u32 last_rc5;
319 u32 last_bit;
320 u32 code;
321 int active;
322};
323
307struct cx23885_dev { 324struct cx23885_dev {
308 atomic_t refcount; 325 atomic_t refcount;
309 struct v4l2_device v4l2_dev; 326 struct v4l2_device v4l2_dev;
@@ -363,7 +380,7 @@ struct cx23885_dev {
363 struct work_struct ir_tx_work; 380 struct work_struct ir_tx_work;
364 unsigned long ir_tx_notifications; 381 unsigned long ir_tx_notifications;
365 382
366 struct card_ir *ir_input; 383 struct cx23885_ir_input *ir_input;
367 atomic_t ir_input_stopping; 384 atomic_t ir_input_stopping;
368 385
369 /* V4l */ 386 /* V4l */