~ubuntu-branches/debian/wheezy/linux-2.6/wheezy

« back to all changes in this revision

Viewing changes to drivers/input/input.c

  • Committer: Bazaar Package Importer
  • Author(s): Ben Hutchings, Ben Hutchings, Aurelien Jarno
  • Date: 2011-06-07 12:14:05 UTC
  • mfrom: (43.1.9 sid)
  • Revision ID: james.westby@ubuntu.com-20110607121405-i3h1rd7nrnd2b73h
Tags: 2.6.39-2
[ Ben Hutchings ]
* [x86] Enable BACKLIGHT_APPLE, replacing BACKLIGHT_MBP_NVIDIA
  (Closes: #627492)
* cgroups: Disable memory resource controller by default. Allow it
  to be enabled using kernel parameter 'cgroup_enable=memory'.
* rt2800usb: Enable support for more USB devices including
  Linksys WUSB600N (Closes: #596626) (this change was accidentally
  omitted from 2.6.39-1)
* [x86] Remove Celeron from list of processors supporting PAE. Most
  'Celeron M' models do not.
* Update debconf template translations:
  - Swedish (Martin Bagge) (Closes: #628932)
  - French (David Prévot) (Closes: #628191)
* aufs: Update for 2.6.39 (Closes: #627837)
* Add stable 2.6.39.1, including:
  - ext4: dont set PageUptodate in ext4_end_bio()
  - pata_cmd64x: fix boot crash on parisc (Closes: #622997, #622745)
  - ext3: Fix fs corruption when make_indexed_dir() fails
  - netfilter: nf_ct_sip: validate Content-Length in TCP SIP messages
  - sctp: fix race between sctp_bind_addr_free() and
    sctp_bind_addr_conflict()
  - sctp: fix memory leak of the ASCONF queue when free asoc
  - md/bitmap: fix saving of events_cleared and other state
  - cdc_acm: Fix oops when Droids MuIn LCD is connected
  - cx88: Fix conversion from BKL to fine-grained locks (Closes: #619827)
  - keys: Set cred->user_ns in key_replace_session_keyring (CVE-2011-2184)
  - tmpfs: fix race between truncate and writepage
  - nfs41: Correct offset for LAYOUTCOMMIT
  - xen/mmu: fix a race window causing leave_mm BUG()
  - ext4: fix possible use-after-free in ext4_remove_li_request()
  For the complete list of changes, see:
   http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.39.1
* Bump ABI to 2
* netfilter: Enable IP_SET, IP_SET_BITMAP_IP, IP_SET_BITMAP_IPMAC,
  IP_SET_BITMAP_PORT, IP_SET_HASH_IP, IP_SET_HASH_IPPORT,
  IP_SET_HASH_IPPORTIP, IP_SET_HASH_IPPORTNET, IP_SET_HASH_NET,
  IP_SET_HASH_NETPORT, IP_SET_LIST_SET, NETFILTER_XT_SET as modules
  (Closes: #629401)

[ Aurelien Jarno ]
* [mipsel/loongson-2f] Disable_SCSI_LPFC to workaround GCC ICE.

Show diffs side-by-side

added added

removed removed

Lines of Context:
791
791
        int retval;
792
792
 
793
793
        spin_lock_irqsave(&dev->event_lock, flags);
794
 
 
795
 
        if (dev->getkeycode) {
796
 
                /*
797
 
                 * Support for legacy drivers, that don't implement the new
798
 
                 * ioctls
799
 
                 */
800
 
                u32 scancode = ke->index;
801
 
 
802
 
                memcpy(ke->scancode, &scancode, sizeof(scancode));
803
 
                ke->len = sizeof(scancode);
804
 
                retval = dev->getkeycode(dev, scancode, &ke->keycode);
805
 
        } else {
806
 
                retval = dev->getkeycode_new(dev, ke);
807
 
        }
808
 
 
 
794
        retval = dev->getkeycode(dev, ke);
809
795
        spin_unlock_irqrestore(&dev->event_lock, flags);
 
796
 
810
797
        return retval;
811
798
}
812
799
EXPORT_SYMBOL(input_get_keycode);
831
818
 
832
819
        spin_lock_irqsave(&dev->event_lock, flags);
833
820
 
834
 
        if (dev->setkeycode) {
835
 
                /*
836
 
                 * Support for legacy drivers, that don't implement the new
837
 
                 * ioctls
838
 
                 */
839
 
                unsigned int scancode;
840
 
 
841
 
                retval = input_scancode_to_scalar(ke, &scancode);
842
 
                if (retval)
843
 
                        goto out;
844
 
 
845
 
                /*
846
 
                 * We need to know the old scancode, in order to generate a
847
 
                 * keyup effect, if the set operation happens successfully
848
 
                 */
849
 
                if (!dev->getkeycode) {
850
 
                        retval = -EINVAL;
851
 
                        goto out;
852
 
                }
853
 
 
854
 
                retval = dev->getkeycode(dev, scancode, &old_keycode);
855
 
                if (retval)
856
 
                        goto out;
857
 
 
858
 
                retval = dev->setkeycode(dev, scancode, ke->keycode);
859
 
        } else {
860
 
                retval = dev->setkeycode_new(dev, ke, &old_keycode);
861
 
        }
862
 
 
 
821
        retval = dev->setkeycode(dev, ke, &old_keycode);
863
822
        if (retval)
864
823
                goto out;
865
824
 
1787
1746
}
1788
1747
EXPORT_SYMBOL(input_set_capability);
1789
1748
 
 
1749
static unsigned int input_estimate_events_per_packet(struct input_dev *dev)
 
1750
{
 
1751
        int mt_slots;
 
1752
        int i;
 
1753
        unsigned int events;
 
1754
 
 
1755
        if (dev->mtsize) {
 
1756
                mt_slots = dev->mtsize;
 
1757
        } else if (test_bit(ABS_MT_TRACKING_ID, dev->absbit)) {
 
1758
                mt_slots = dev->absinfo[ABS_MT_TRACKING_ID].maximum -
 
1759
                           dev->absinfo[ABS_MT_TRACKING_ID].minimum + 1,
 
1760
                clamp(mt_slots, 2, 32);
 
1761
        } else if (test_bit(ABS_MT_POSITION_X, dev->absbit)) {
 
1762
                mt_slots = 2;
 
1763
        } else {
 
1764
                mt_slots = 0;
 
1765
        }
 
1766
 
 
1767
        events = mt_slots + 1; /* count SYN_MT_REPORT and SYN_REPORT */
 
1768
 
 
1769
        for (i = 0; i < ABS_CNT; i++) {
 
1770
                if (test_bit(i, dev->absbit)) {
 
1771
                        if (input_is_mt_axis(i))
 
1772
                                events += mt_slots;
 
1773
                        else
 
1774
                                events++;
 
1775
                }
 
1776
        }
 
1777
 
 
1778
        for (i = 0; i < REL_CNT; i++)
 
1779
                if (test_bit(i, dev->relbit))
 
1780
                        events++;
 
1781
 
 
1782
        return events;
 
1783
}
 
1784
 
1790
1785
#define INPUT_CLEANSE_BITMASK(dev, type, bits)                          \
1791
1786
        do {                                                            \
1792
1787
                if (!test_bit(EV_##type, dev->evbit))                   \
1834
1829
        /* Make sure that bitmasks not mentioned in dev->evbit are clean. */
1835
1830
        input_cleanse_bitmasks(dev);
1836
1831
 
 
1832
        if (!dev->hint_events_per_packet)
 
1833
                dev->hint_events_per_packet =
 
1834
                                input_estimate_events_per_packet(dev);
 
1835
 
1837
1836
        /*
1838
1837
         * If delay and period are pre-set by the driver, then autorepeating
1839
1838
         * is handled by the driver itself and we don't do it in input.c.
1846
1845
                dev->rep[REP_PERIOD] = 33;
1847
1846
        }
1848
1847
 
1849
 
        if (!dev->getkeycode && !dev->getkeycode_new)
1850
 
                dev->getkeycode_new = input_default_getkeycode;
 
1848
        if (!dev->getkeycode)
 
1849
                dev->getkeycode = input_default_getkeycode;
1851
1850
 
1852
 
        if (!dev->setkeycode && !dev->setkeycode_new)
1853
 
                dev->setkeycode_new = input_default_setkeycode;
 
1851
        if (!dev->setkeycode)
 
1852
                dev->setkeycode = input_default_setkeycode;
1854
1853
 
1855
1854
        dev_set_name(&dev->dev, "input%ld",
1856
1855
                     (unsigned long) atomic_inc_return(&input_no) - 1);