Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[pandora-kernel.git] / drivers / media / IR / imon.c
index 0391c3b..bc11806 100644 (file)
@@ -158,7 +158,8 @@ static const struct file_operations vfd_fops = {
        .owner          = THIS_MODULE,
        .open           = &display_open,
        .write          = &vfd_write,
-       .release        = &display_close
+       .release        = &display_close,
+       .llseek         = noop_llseek,
 };
 
 /* lcd character device file operations */
@@ -166,7 +167,8 @@ static const struct file_operations lcd_fops = {
        .owner          = THIS_MODULE,
        .open           = &display_open,
        .write          = &lcd_write,
-       .release        = &display_close
+       .release        = &display_close,
+       .llseek         = noop_llseek,
 };
 
 enum {
@@ -315,7 +317,7 @@ MODULE_DEVICE_TABLE(usb, imon_usb_id_table);
 
 static bool debug;
 module_param(debug, bool, S_IRUGO | S_IWUSR);
-MODULE_PARM_DESC(debug, "Debug messages: 0=no, 1=yes(default: no)");
+MODULE_PARM_DESC(debug, "Debug messages: 0=no, 1=yes (default: no)");
 
 /* lcd, vfd, vga or none? should be auto-detected, but can be overridden... */
 static int display_type;
@@ -784,7 +786,7 @@ static struct attribute *imon_display_sysfs_entries[] = {
        NULL
 };
 
-static struct attribute_group imon_display_attribute_group = {
+static struct attribute_group imon_display_attr_group = {
        .attrs = imon_display_sysfs_entries
 };
 
@@ -793,7 +795,7 @@ static struct attribute *imon_rf_sysfs_entries[] = {
        NULL
 };
 
-static struct attribute_group imon_rf_attribute_group = {
+static struct attribute_group imon_rf_attr_group = {
        .attrs = imon_rf_sysfs_entries
 };
 
@@ -1004,7 +1006,7 @@ int imon_ir_change_protocol(void *priv, u64 ir_type)
        case IR_TYPE_UNKNOWN:
        case IR_TYPE_OTHER:
                dev_dbg(dev, "Configuring IR receiver for iMON protocol\n");
-               if (pad_stabilize)
+               if (pad_stabilize && !nomouse)
                        pad_mouse = true;
                else {
                        dev_dbg(dev, "PAD stabilize functionality disabled\n");
@@ -1016,7 +1018,7 @@ int imon_ir_change_protocol(void *priv, u64 ir_type)
        default:
                dev_warn(dev, "Unsupported IR protocol specified, overriding "
                         "to iMON IR protocol\n");
-               if (pad_stabilize)
+               if (pad_stabilize && !nomouse)
                        pad_mouse = true;
                else {
                        dev_dbg(dev, "PAD stabilize functionality disabled\n");
@@ -1477,7 +1479,7 @@ static void imon_incoming_packet(struct imon_context *ictx,
        bool norelease = false;
        int i;
        u64 scancode;
-       struct input_dev *idev = NULL;
+       struct input_dev *rdev = NULL;
        struct ir_input_dev *irdev = NULL;
        int press_type = 0;
        int msec;
@@ -1485,8 +1487,8 @@ static void imon_incoming_packet(struct imon_context *ictx,
        static struct timeval prev_time = { 0, 0 };
        u8 ktype;
 
-       idev = ictx->idev;
-       irdev = input_get_drvdata(idev);
+       rdev = ictx->rdev;
+       irdev = input_get_drvdata(rdev);
 
        /* filter out junk data on the older 0xffdc imon devices */
        if ((buf[0] == 0xff) && (buf[1] == 0xff) && (buf[2] == 0xff))
@@ -1570,8 +1572,7 @@ static void imon_incoming_packet(struct imon_context *ictx,
                if (press_type == 0)
                        ir_keyup(irdev);
                else {
-                       ir_keydown(ictx->rdev, ictx->rc_scancode,
-                                  ictx->rc_toggle);
+                       ir_keydown(rdev, ictx->rc_scancode, ictx->rc_toggle);
                        spin_lock_irqsave(&ictx->kc_lock, flags);
                        ictx->last_keycode = ictx->kc;
                        spin_unlock_irqrestore(&ictx->kc_lock, flags);
@@ -1587,7 +1588,7 @@ static void imon_incoming_packet(struct imon_context *ictx,
                do_gettimeofday(&t);
                msec = tv2int(&t, &prev_time);
                prev_time = t;
-               if (msec < idev->rep[REP_DELAY]) {
+               if (msec < ictx->idev->rep[REP_DELAY]) {
                        spin_unlock_irqrestore(&ictx->kc_lock, flags);
                        return;
                }
@@ -1596,12 +1597,12 @@ static void imon_incoming_packet(struct imon_context *ictx,
 
        spin_unlock_irqrestore(&ictx->kc_lock, flags);
 
-       input_report_key(idev, kc, press_type);
-       input_sync(idev);
+       input_report_key(ictx->idev, kc, press_type);
+       input_sync(ictx->idev);
 
        /* panel keys don't generate a release */
-       input_report_key(idev, kc, 0);
-       input_sync(idev);
+       input_report_key(ictx->idev, kc, 0);
+       input_sync(ictx->idev);
 
        ictx->last_keycode = kc;
 
@@ -2239,8 +2240,7 @@ static void imon_init_display(struct imon_context *ictx,
        dev_dbg(ictx->dev, "Registering iMON display with sysfs\n");
 
        /* set up sysfs entry for built-in clock */
-       ret = sysfs_create_group(&intf->dev.kobj,
-                                &imon_display_attribute_group);
+       ret = sysfs_create_group(&intf->dev.kobj, &imon_display_attr_group);
        if (ret)
                dev_err(ictx->dev, "Could not create display sysfs "
                        "entries(%d)", ret);
@@ -2313,7 +2313,7 @@ static int __devinit imon_probe(struct usb_interface *interface,
        if (ifnum == 0) {
                if (product == 0xffdc && ictx->rf_device) {
                        sysfs_err = sysfs_create_group(&interface->dev.kobj,
-                                                      &imon_rf_attribute_group);
+                                                      &imon_rf_attr_group);
                        if (sysfs_err)
                                pr_err("Could not create RF sysfs entries(%d)\n",
                                       sysfs_err);
@@ -2323,14 +2323,6 @@ static int __devinit imon_probe(struct usb_interface *interface,
                        imon_init_display(ictx, interface);
        }
 
-       /* set IR protocol/remote type */
-       ret = imon_ir_change_protocol(ictx, ictx->ir_type);
-       if (ret) {
-               dev_warn(dev, "%s: failed to set IR protocol, falling back "
-                        "to standard iMON protocol mode\n", __func__);
-               ictx->ir_type = IR_TYPE_OTHER;
-       }
-
        dev_info(dev, "iMON device (%04x:%04x, intf%d) on "
                 "usb<%d:%d> initialized\n", vendor, product, ifnum,
                 usbdev->bus->busnum, usbdev->devnum);
@@ -2369,10 +2361,8 @@ static void __devexit imon_disconnect(struct usb_interface *interface)
         * sysfs_remove_group is safe to call even if sysfs_create_group
         * hasn't been called
         */
-       sysfs_remove_group(&interface->dev.kobj,
-                          &imon_display_attribute_group);
-       sysfs_remove_group(&interface->dev.kobj,
-                          &imon_rf_attribute_group);
+       sysfs_remove_group(&interface->dev.kobj, &imon_display_attr_group);
+       sysfs_remove_group(&interface->dev.kobj, &imon_rf_attr_group);
 
        usb_set_intfdata(interface, NULL);