/**
- * handle_event() - Decode one NEC pulse or space
+ * ir_nec_decode() - Decode one NEC pulse or space
* @input_dev: the struct input_dev descriptor of the device
* @ev: event array with type/duration of pulse/space
*
* This function returns -EINVAL if the pulse violates the state machine
*/
-static int handle_event(struct input_dev *input_dev,
- struct ir_raw_event *ev)
+static int ir_nec_decode(struct input_dev *input_dev,
+ struct ir_raw_event *ev)
{
struct decoder_data *data;
struct ir_input_dev *ir_dev = input_get_drvdata(input_dev);
return -EINVAL;
}
-/**
- * ir_nec_decode() - Decodes all NEC pulsecodes on a given array
- * @input_dev: the struct input_dev descriptor of the device
- * @evs: event array with type/duration of pulse/space
- * @len: length of the array
- * This function returns the number of decoded pulses
- */
-static int ir_nec_decode(struct input_dev *input_dev,
- struct ir_raw_event *evs,
- int len)
-{
- struct ir_input_dev *ir_dev = input_get_drvdata(input_dev);
- struct decoder_data *data;
- int pos = 0;
- int rc = 0;
-
- data = get_decoder_data(ir_dev);
- if (!data || !data->enabled)
- return 0;
-
- for (pos = 0; pos < len; pos++)
- handle_event(input_dev, &evs[pos]);
-
- return rc;
-}
-
static int ir_nec_register(struct input_dev *input_dev)
{
struct ir_input_dev *ir_dev = input_get_drvdata(input_dev);
{
struct ir_input_dev *ir = input_get_drvdata(input_dev);
int rc;
- struct ir_raw_event *evs;
+ struct ir_raw_event ev;
int len, i;
/*
* Store the events into a temporary buffer. This allows calling more than
* one decoder to deal with the received data
*/
- len = kfifo_len(&ir->raw->kfifo) / sizeof(*evs);
+ len = kfifo_len(&ir->raw->kfifo) / sizeof(ev);
if (!len)
return 0;
- evs = kmalloc(len * sizeof(*evs), GFP_ATOMIC);
for (i = 0; i < len; i++) {
- rc = kfifo_out(&ir->raw->kfifo, &evs[i], sizeof(*evs));
- if (rc != sizeof(*evs)) {
+ rc = kfifo_out(&ir->raw->kfifo, &ev, sizeof(ev));
+ if (rc != sizeof(ev)) {
IR_dprintk(1, "overflow error: received %d instead of %zd\n",
- rc, sizeof(*evs));
+ rc, sizeof(ev));
return -EINVAL;
}
IR_dprintk(2, "event type %d, time before event: %07luus\n",
- evs[i].type, (evs[i].delta.tv_nsec + 500) / 1000);
+ ev.type, (ev.delta.tv_nsec + 500) / 1000);
+ rc = RUN_DECODER(decode, input_dev, &ev);
}
/*
* Call all ir decoders. This allows decoding the same event with
- * more than one protocol handler. It returns the number of keystrokes
- * sent to the event interface
+ * more than one protocol handler.
*/
- rc = RUN_DECODER(decode, input_dev, evs, len);
-
- kfree(evs);
return rc;
}
*
* This function returns -EINVAL if the pulse violates the state machine
*/
-static int handle_event(struct input_dev *input_dev,
+static int ir_rc5_decode(struct input_dev *input_dev,
struct ir_raw_event *ev)
{
struct decoder_data *data;
return -EINVAL;
}
-/**
- * ir_rc5_decode() - Decodes all RC-5 pulsecodes on a given array
- * @input_dev: the struct input_dev descriptor of the device
- * @evs: event array with type/duration of pulse/space
- * @len: length of the array
- * This function returns the number of decoded pulses
- */
-static int ir_rc5_decode(struct input_dev *input_dev,
- struct ir_raw_event *evs,
- int len)
-{
- struct ir_input_dev *ir_dev = input_get_drvdata(input_dev);
- struct decoder_data *data;
- int pos = 0;
- int rc = 0;
-
- data = get_decoder_data(ir_dev);
- if (!data || !data->enabled)
- return 0;
-
- for (pos = 0; pos < len; pos++)
- handle_event(input_dev, &evs[pos]);
-
- return rc;
-}
-
static int ir_rc5_register(struct input_dev *input_dev)
{
struct ir_input_dev *ir_dev = input_get_drvdata(input_dev);
struct list_head list;
int (*decode)(struct input_dev *input_dev,
- struct ir_raw_event *evs,
- int len);
+ struct ir_raw_event *ev);
int (*raw_register)(struct input_dev *input_dev);
int (*raw_unregister)(struct input_dev *input_dev);
};