lkml.org 
[lkml]   [2011]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH 1/4] input: Set default events per packet.
    Hi Jeff,

    > Calculate a default based on the number of ABS axes, REL axes,
    > and MT slots for the device during input device registration.
    >
    > Signed-off-by: jeffbrown@android.com
    > ---
    > drivers/input/input.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
    > 1 files changed, 46 insertions(+), 0 deletions(-)
    >
    > diff --git a/drivers/input/input.c b/drivers/input/input.c
    > index d6e8bd8..c27292b 100644
    > --- a/drivers/input/input.c
    > +++ b/drivers/input/input.c
    > @@ -1746,6 +1746,49 @@ void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int
    > }
    > EXPORT_SYMBOL(input_set_capability);
    >
    > +static inline bool is_mt_axis(int axis)
    > +{
    > + return axis == ABS_MT_SLOT ||
    > + (axis >= ABS_MT_FIRST && axis <= ABS_MT_LAST);
    > +}

    It would be great to get this inline into input/mt.h instead.

    > +static void input_set_default_events_per_packet(struct input_dev *dev)
    > +{
    > + int mt_slots;
    > + int i;
    > + int events;
    > +
    > + if (dev->hint_events_per_packet)
    > + return;
    > +
    > + if (dev->mtsize)
    > + mt_slots = dev->mtsize;
    > + else if (test_bit(ABS_MT_TRACKING_ID, dev->absbit))
    > + mt_slots = dev->absinfo[ABS_MT_TRACKING_ID].maximum -
    > + dev->absinfo[ABS_MT_TRACKING_ID].minimum + 1;

    This one is a bit iffy - the tracking id is not limited like this in
    mainline, looks like android usage. A test againts some arbitrary max
    should do it.

    > + else if (test_bit(ABS_MT_POSITION_X, dev->absbit))
    > + mt_slots = 2;
    > + else
    > + mt_slots = 0;
    > +
    > + events = mt_slots + 1; /* count SYN_MT_REPORT and SYN_REPORT */
    > +
    > + for (i = 0; i < ABS_CNT; i++) {
    > + if (test_bit(i, dev->absbit)) {
    > + if (is_mt_axis(i))
    > + events += mt_slots;
    > + else
    > + events++;
    > + }
    > + }
    > +
    > + for (i = 0; i < REL_CNT; i++)
    > + if (test_bit(i, dev->relbit))
    > + events++;
    > +
    > + input_set_events_per_packet(dev, events);
    > +}
    > +
    > #define INPUT_CLEANSE_BITMASK(dev, type, bits) \
    > do { \
    > if (!test_bit(EV_##type, dev->evbit)) \
    > @@ -1784,6 +1827,9 @@ int input_register_device(struct input_dev *dev)
    > const char *path;
    > int error;
    >
    > + /* Use a larger default input buffer for MT devices */
    > + input_set_default_events_per_packet(dev);
    > +
    > /* Every input device generates EV_SYN/SYN_REPORT events. */
    > __set_bit(EV_SYN, dev->evbit);
    >
    > --
    > 1.7.0.4

    Thanks,
    Henrik


    \
     
     \ /
      Last update: 2011-03-25 09:19    [W:0.024 / U:4.592 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site