]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/media/video/cx23885/cx23885-input.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / media / video / cx23885 / cx23885-input.c
index bb61870b8d6ed39d25c11aa676b55bd0a94dc235..199b9964bbe5ab27776b9dd2f9d2d59dd96c9a2b 100644 (file)
@@ -35,9 +35,8 @@
  *  02110-1301, USA.
  */
 
-#include <linux/input.h>
 #include <linux/slab.h>
-#include <media/ir-core.h>
+#include <media/rc-core.h>
 #include <media/v4l2-subdev.h>
 
 #include "cx23885.h"
@@ -62,16 +61,16 @@ static void cx23885_input_process_measurements(struct cx23885_dev *dev,
                count = num / sizeof(struct ir_raw_event);
 
                for (i = 0; i < count; i++) {
-                       ir_raw_event_store(kernel_ir->inp_dev,
+                       ir_raw_event_store(kernel_ir->rc,
                                           &ir_core_event[i]);
                        handle = true;
                }
        } while (num != 0);
 
        if (overrun)
-               ir_raw_event_reset(kernel_ir->inp_dev);
+               ir_raw_event_reset(kernel_ir->rc);
        else if (handle)
-               ir_raw_event_handle(kernel_ir->inp_dev);
+               ir_raw_event_handle(kernel_ir->rc);
 }
 
 void cx23885_input_rx_work_handler(struct cx23885_dev *dev, u32 events)
@@ -197,9 +196,9 @@ static int cx23885_input_ir_start(struct cx23885_dev *dev)
        return 0;
 }
 
-static int cx23885_input_ir_open(void *priv)
+static int cx23885_input_ir_open(struct rc_dev *rc)
 {
-       struct cx23885_kernel_ir *kernel_ir = priv;
+       struct cx23885_kernel_ir *kernel_ir = rc->priv;
 
        if (kernel_ir->cx == NULL)
                return -ENODEV;
@@ -230,13 +229,11 @@ static void cx23885_input_ir_stop(struct cx23885_dev *dev)
                v4l2_subdev_call(dev->sd_ir, ir, rx_s_parameters, &params);
                v4l2_subdev_call(dev->sd_ir, ir, rx_g_parameters, &params);
        }
-
-       flush_scheduled_work();
 }
 
-static void cx23885_input_ir_close(void *priv)
+static void cx23885_input_ir_close(struct rc_dev *rc)
 {
-       struct cx23885_kernel_ir *kernel_ir = priv;
+       struct cx23885_kernel_ir *kernel_ir = rc->priv;
 
        if (kernel_ir->cx != NULL)
                cx23885_input_ir_stop(kernel_ir->cx);
@@ -245,9 +242,7 @@ static void cx23885_input_ir_close(void *priv)
 int cx23885_input_init(struct cx23885_dev *dev)
 {
        struct cx23885_kernel_ir *kernel_ir;
-       struct input_dev *inp_dev;
-       struct ir_dev_props *props;
-
+       struct rc_dev *rc;
        char *rc_map;
        enum rc_driver_type driver_type;
        unsigned long allowed_protos;
@@ -267,14 +262,14 @@ int cx23885_input_init(struct cx23885_dev *dev)
        case CX23885_BOARD_HAUPPAUGE_HVR1250:
                /* Integrated CX2388[58] IR controller */
                driver_type = RC_DRIVER_IR_RAW;
-               allowed_protos = IR_TYPE_ALL;
+               allowed_protos = RC_TYPE_ALL;
                /* The grey Hauppauge RC-5 remote */
                rc_map = RC_MAP_RC5_HAUPPAUGE_NEW;
                break;
        case CX23885_BOARD_TEVII_S470:
                /* Integrated CX23885 IR controller */
                driver_type = RC_DRIVER_IR_RAW;
-               allowed_protos = IR_TYPE_ALL;
+               allowed_protos = RC_TYPE_ALL;
                /* A guess at the remote */
                rc_map = RC_MAP_TEVII_NEC;
                break;
@@ -294,37 +289,36 @@ int cx23885_input_init(struct cx23885_dev *dev)
                                    pci_name(dev->pci));
 
        /* input device */
-       inp_dev = input_allocate_device();
-       if (inp_dev == NULL) {
+       rc = rc_allocate_device();
+       if (!rc) {
                ret = -ENOMEM;
                goto err_out_free;
        }
 
-       kernel_ir->inp_dev = inp_dev;
-       inp_dev->name = kernel_ir->name;
-       inp_dev->phys = kernel_ir->phys;
-       inp_dev->id.bustype = BUS_PCI;
-       inp_dev->id.version = 1;
+       kernel_ir->rc = rc;
+       rc->input_name = kernel_ir->name;
+       rc->input_phys = kernel_ir->phys;
+       rc->input_id.bustype = BUS_PCI;
+       rc->input_id.version = 1;
        if (dev->pci->subsystem_vendor) {
-               inp_dev->id.vendor  = dev->pci->subsystem_vendor;
-               inp_dev->id.product = dev->pci->subsystem_device;
+               rc->input_id.vendor  = dev->pci->subsystem_vendor;
+               rc->input_id.product = dev->pci->subsystem_device;
        } else {
-               inp_dev->id.vendor  = dev->pci->vendor;
-               inp_dev->id.product = dev->pci->device;
+               rc->input_id.vendor  = dev->pci->vendor;
+               rc->input_id.product = dev->pci->device;
        }
-       inp_dev->dev.parent = &dev->pci->dev;
-
-       /* kernel ir device properties */
-       props = &kernel_ir->props;
-       props->driver_type = driver_type;
-       props->allowed_protos = allowed_protos;
-       props->priv = kernel_ir;
-       props->open = cx23885_input_ir_open;
-       props->close = cx23885_input_ir_close;
+       rc->dev.parent = &dev->pci->dev;
+       rc->driver_type = driver_type;
+       rc->allowed_protos = allowed_protos;
+       rc->priv = kernel_ir;
+       rc->open = cx23885_input_ir_open;
+       rc->close = cx23885_input_ir_close;
+       rc->map_name = rc_map;
+       rc->driver_name = MODULE_NAME;
 
        /* Go */
        dev->kernel_ir = kernel_ir;
-       ret = ir_input_register(inp_dev, rc_map, props, MODULE_NAME);
+       ret = rc_register_device(rc);
        if (ret)
                goto err_out_stop;
 
@@ -333,7 +327,7 @@ int cx23885_input_init(struct cx23885_dev *dev)
 err_out_stop:
        cx23885_input_ir_stop(dev);
        dev->kernel_ir = NULL;
-       /* TODO: double check clean-up of kernel_ir->inp_dev */
+       rc_free_device(rc);
 err_out_free:
        kfree(kernel_ir->phys);
        kfree(kernel_ir->name);
@@ -348,7 +342,7 @@ void cx23885_input_fini(struct cx23885_dev *dev)
 
        if (dev->kernel_ir == NULL)
                return;
-       ir_input_unregister(dev->kernel_ir->inp_dev);
+       rc_unregister_device(dev->kernel_ir->rc);
        kfree(dev->kernel_ir->phys);
        kfree(dev->kernel_ir->name);
        kfree(dev->kernel_ir);