V4L/DVB: cx23885: Convert from struct card_ir to struct cx23885_ir_input for IR Rx

Move from the generic, shared card_ir state structure to a cx23885 driver
specific IR state structure in anticipation of moving to the new IR pulse
decoders in the IR core.

Fix up the card name truncation in the dmesg log while we're at it,
by avoiding using fixed length string storage in our new IR state
structure.

Signed-off-by: Andy Walls <awalls@md.metrocast.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
diff --git a/drivers/media/video/cx23885/cx23885-input.c b/drivers/media/video/cx23885/cx23885-input.c
index 5de6ba9..c1abc35 100644
--- a/drivers/media/video/cx23885/cx23885-input.c
+++ b/drivers/media/video/cx23885/cx23885-input.c
@@ -62,7 +62,7 @@
 
 static void cx23885_input_process_raw_rc5(struct cx23885_dev *dev)
 {
-	struct card_ir *ir_input = dev->ir_input;
+	struct cx23885_ir_input *ir_input = dev->ir_input;
 	unsigned int code, command;
 	u32 rc5;
 
@@ -110,7 +110,7 @@
 					       u32 ns_pulse)
 {
 	const int rc5_quarterbit_ns = 444444; /* 32 cycles/36 kHz/2 = 444 us */
-	struct card_ir *ir_input = dev->ir_input;
+	struct cx23885_ir_input *ir_input = dev->ir_input;
 	int i, level, quarterbits, halfbits;
 
 	if (!ir_input->active) {
@@ -166,7 +166,7 @@
 static void cx23885_input_process_pulse_widths_rc5(struct cx23885_dev *dev,
 						   bool add_eom)
 {
-	struct card_ir *ir_input = dev->ir_input;
+	struct cx23885_ir_input *ir_input = dev->ir_input;
 	struct ir_input_state *ir_input_state = &ir_input->ir;
 
 	u32 ns_pulse[RC5_HALF_BITS+1];
@@ -243,7 +243,7 @@
 
 static void cx23885_input_ir_start(struct cx23885_dev *dev)
 {
-	struct card_ir *ir_input = dev->ir_input;
+	struct cx23885_ir_input *ir_input = dev->ir_input;
 	struct ir_input_state *ir_input_state = &ir_input->ir;
 	struct v4l2_subdev_ir_parameters params;
 
@@ -303,7 +303,7 @@
 
 static void cx23885_input_ir_stop(struct cx23885_dev *dev)
 {
-	struct card_ir *ir_input = dev->ir_input;
+	struct cx23885_ir_input *ir_input = dev->ir_input;
 	struct v4l2_subdev_ir_parameters params;
 
 	if (dev->sd_ir == NULL)
@@ -338,7 +338,7 @@
 
 int cx23885_input_init(struct cx23885_dev *dev)
 {
-	struct card_ir *ir;
+	struct cx23885_ir_input *ir;
 	struct input_dev *input_dev;
 	char *ir_codes = NULL;
 	int ir_type, ir_addr, ir_start;
@@ -376,9 +376,9 @@
 	ir->start = ir_start;
 
 	/* init input device */
-	snprintf(ir->name, sizeof(ir->name), "cx23885 IR (%s)",
-		 cx23885_boards[dev->board].name);
-	snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0", pci_name(dev->pci));
+	ir->name = kasprintf(GFP_KERNEL, "cx23885 IR (%s)",
+			     cx23885_boards[dev->board].name);
+	ir->phys = kasprintf(GFP_KERNEL, "pci-%s/ir0", pci_name(dev->pci));
 
 	ret = ir_input_init(input_dev, &ir->ir, ir_type);
 	if (ret < 0)
@@ -410,6 +410,8 @@
 	cx23885_input_ir_stop(dev);
 	dev->ir_input = NULL;
 err_out_free:
+	kfree(ir->phys);
+	kfree(ir->name);
 	kfree(ir);
 	return ret;
 }
@@ -422,6 +424,8 @@
 	if (dev->ir_input == NULL)
 		return;
 	ir_input_unregister(dev->ir_input->dev);
+	kfree(dev->ir_input->phys);
+	kfree(dev->ir_input->name);
 	kfree(dev->ir_input);
 	dev->ir_input = NULL;
 }
diff --git a/drivers/media/video/cx23885/cx23885.h b/drivers/media/video/cx23885/cx23885.h
index 8d6a55e..25167dd 100644
--- a/drivers/media/video/cx23885/cx23885.h
+++ b/drivers/media/video/cx23885/cx23885.h
@@ -30,6 +30,7 @@
 #include <media/tveeprom.h>
 #include <media/videobuf-dma-sg.h>
 #include <media/videobuf-dvb.h>
+#include <media/ir-common.h>
 
 #include "btcx-risc.h"
 #include "cx23885-reg.h"
@@ -304,6 +305,22 @@
 	void                       *port_priv;
 };
 
+struct cx23885_ir_input {
+	struct input_dev	*dev;
+	struct ir_input_state	ir;
+	char			*name;
+	char			*phys;
+
+	int			start;
+	int			addr;
+	int			rc5_key_timeout;
+	struct timer_list	timer_keyup;
+	u32			last_rc5;
+	u32			last_bit;
+	u32			code;
+	int			active;
+};
+
 struct cx23885_dev {
 	atomic_t                   refcount;
 	struct v4l2_device 	   v4l2_dev;
@@ -363,7 +380,7 @@
 	struct work_struct	   ir_tx_work;
 	unsigned long		   ir_tx_notifications;
 
-	struct card_ir		   *ir_input;
+	struct cx23885_ir_input	   *ir_input;
 	atomic_t		   ir_input_stopping;
 
 	/* V4l */