Build fix for mercurial tree
PATCH 1/1 Build fix for mercurial tree
Fix backport tree compilations with kernels older than 2.6.33.
Compile tested only, with 2.6.32.4 kernel.
linux/drivers/media/IR/ir-core-priv.h +4 -0
@@ -28,7 +28,11 @@ struct ir_raw_handler {struct ir_raw_event_ctrl {struct work_struct rx_work;/* for the rx decoding workqueue */ +#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) +struct kfifo *kfifo;/* fifo for the pulse/space durations */ +#else struct kfifo kfifo;/* fifo for the pulse/space durations */ +#endif ktime_t last_event;/* when last event occurred */ enum raw_event_type last_type;/* last event type */ struct input_dev *input_dev;/* pointer to the parent input_dev */
linux/drivers/media/IR/ir-raw-event.c +25 -0
@@ -61,8 +61,13 @@ static void ir_raw_event_work(struct worstruct ir_raw_event_ctrl *raw = container_of(work, struct ir_raw_event_ctrl, rx_work); +#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) +while (kfifo_get (raw->kfifo, (void *)&ev,sizeof (ev)) ==sizeof (ev)) +RUN_DECODER (decode, raw->input_dev, ev); +#else while (kfifo_out (&raw->kfifo, &ev,sizeof (ev)) ==sizeof (ev))RUN_DECODER (decode, raw->input_dev, ev); +#endif }int ir_raw_event_register (struct input_dev *input_dev)
@@ -77,8 +82,15 @@ int ir_raw_event_register(struct input_d ir->raw->input_dev = input_dev;INIT_WORK (&ir->raw->rx_work, ir_raw_event_work); +#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) + ir->raw->kfifo =kfifo_alloc (sizeof (s64) *MAX_IR_EVENT_SIZE , +GFP_KERNEL ,NULL ); +if (ir->raw->kfifo ==NULL ) + rc = -ENOMEM ; +#else rc =kfifo_alloc (&ir->raw->kfifo,sizeof (s64) *MAX_IR_EVENT_SIZE ,GFP_KERNEL ); +#endif if (rc <0 ) {kfree (ir->raw); ir->raw =NULL ;
@@ -87,7 +99,11 @@ int ir_raw_event_register(struct input_d rc =RUN_DECODER (raw_register, input_dev);if (rc <0 ) { +#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) +kfifo_free (ir->raw->kfifo); +#else kfifo_free (&ir->raw->kfifo); +#endif kfree (ir->raw); ir->raw =NULL ;return rc;
@@ -106,7 +122,11 @@ void ir_raw_event_unregister(struct inpucancel_work_sync (&ir->raw->rx_work);RUN_DECODER (raw_unregister, input_dev); +#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) +kfifo_free (ir->raw->kfifo); +#else kfifo_free (&ir->raw->kfifo); +#endif kfree (ir->raw); ir->raw =NULL ; }
@@ -128,8 +148,13 @@ int ir_raw_event_store(struct input_devif (!ir->raw)return -EINVAL ; +#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) +if (kfifo_put (ir->raw->kfifo, (void *)ev,sizeof (*ev)) !=sizeof (*ev)) +return -ENOMEM ; +#else if (kfifo_in (&ir->raw->kfifo, ev,sizeof (*ev)) !=sizeof (*ev))return -ENOMEM ; +#endif return 0 ; }
Douglas Schilling Landgraf
AppliedQuoted 84 lines · Mauro Carvalho Chehab
Fix backport tree compilations with kernels older than 2.6.33.
Compile tested only, with 2.6.32.4 kernel.
Signed-off-by Mauro Carvalho Chehab <[email protected]>linux/drivers/media/IR/ir-core-priv.h +0
-0@@ -28,7 +28,11 @@ struct ir_raw_handler { struct ir_raw_event_ctrl {struct
work_structrx_work; /* for the rx decoding workqueue */linux/drivers/media/IR/ir-core-priv.h +3
-0+#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) + struct kfifo *kfifo; /* fifo for the pulse/space durations */ +#else struct kfifo kfifo; /* fifo for the pulse/space durations */ +#endif
ktime_tlast_event; /* when last event occurred */ enumraw_event_typelast_type; /* last event type */ structinput_dev*input_dev; /* pointer to the parentinput_dev*/linux/drivers/media/IR/ir-raw-event.c +0
-0@@ -61,8 +61,13 @@ static void ir_raw_event_work(struct worstruct
ir_raw_event_ctrl*raw =
container_of(work, structir_raw_event_ctrl,rx_work);linux/drivers/media/IR/ir-raw-event.c +4
-0+#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) + while (kfifo_get(raw->kfifo, (void *)&ev, sizeof(ev)) == sizeof(ev)) + RUN_DECODER(decode, raw->input_dev, ev); +#else while (
kfifo_out(&raw->kfifo, &ev, sizeof(ev))== sizeof(ev))RUN_DECODER(decode, raw->input_dev, ev); +#endif
}int
ir_raw_event_register(struct input_dev *input_dev)linux/drivers/media/IR/ir-raw-event.c +15
-0@@ -77,8 +82,15 @@ int ir_raw_event_register(struct input_d ir->raw->input_dev = input_dev; INIT_WORK(&ir->raw->rx_work, ir_raw_event_work); +#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) + ir->raw->kfifo = kfifo_alloc(sizeof(s64) * MAX_IR_EVENT_SIZE, + GFP_KERNEL, NULL); + if (ir->raw->kfifo == NULL) + rc = -ENOMEM; +#else rc = kfifo_alloc(&ir->raw->kfifo, sizeof(s64) * MAX_IR_EVENT_SIZE, GFP_KERNEL); +#endif if (rc < 0) { kfree(ir->raw); ir->raw = NULL;@@ -87,7 +99,11 @@ int ir_raw_event_register(struct input_d rc = RUN_DECODER(raw_register, input_dev); if (rc < 0) { +#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) + kfifo_free(ir->raw->kfifo); +#else kfifo_free(&ir->raw->kfifo); +#endif kfree(ir->raw); ir->raw = NULL; return rc;@@ -106,7 +122,11 @@ void ir_raw_event_unregister(struct inpu cancel_work_sync(&ir->raw->rx_work); RUN_DECODER(raw_unregister, input_dev); +#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) + kfifo_free(ir->raw->kfifo); +#else kfifo_free(&ir->raw->kfifo); +#endif kfree(ir->raw); ir->raw = NULL; }@@ -128,8 +148,13 @@ int ir_raw_event_store(struct input_dev if (!ir->raw) return -EINVAL;
linux/drivers/media/IR/ir-raw-event.c int ir_raw_event_store(struct input_dev · line 160
Quoted 10 lines
linux/drivers/media/IR/ir-raw-event.c +5
-0+#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,33 ) + if (kfifo_put(ir->raw->kfifo, (void *)ev, sizeof(*ev)) != sizeof(*ev)) + return -ENOMEM; +#else if (kfifo_in(&ir->raw->kfifo, ev, sizeof(*ev)) != sizeof(*ev)) return -ENOMEM; +#endif return 0; }
Applied, thanks.
Cheers
Douglas