Commit 53f87022 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

V4L/DVB (13635): ir-core: Implement protocol table type reading

parent e93854da
Loading
Loading
Loading
Loading
+28 −2
Original line number Diff line number Diff line
@@ -22,10 +22,36 @@ unsigned long ir_core_dev_number;

static struct class *ir_input_class;

static DEVICE_ATTR(ir_protocol, S_IRUGO | S_IWUSR, NULL, NULL);

static ssize_t show_protocol(struct device *d,
			     struct device_attribute *mattr, char *buf)
{
	char *s;
	struct ir_input_dev *ir_dev = dev_get_drvdata(d);
	enum ir_type ir_type = ir_dev->rc_tab.ir_type;

	IR_dprintk(1, "Current protocol is %ld\n", ir_type);

	/* FIXME: doesn't support multiple protocols at the same time */
	if (ir_type == IR_TYPE_UNKNOWN)
		s = "Unknown";
	else if (ir_type == IR_TYPE_RC5)
		s = "RC-5";
	else if (ir_type == IR_TYPE_PD)
		s = "Pulse/distance";
	else if (ir_type == IR_TYPE_NEC)
		s = "NEC";
	else
		s = "Other";

	return sprintf(buf, "%s\n", s);
}

static DEVICE_ATTR(current_protocol, S_IRUGO | S_IWUSR,
		   show_protocol, NULL);

static struct attribute *ir_dev_attrs[] = {
	&dev_attr_ir_protocol.attr,
	&dev_attr_current_protocol.attr,
};

int ir_register_class(struct input_dev *input_dev)
+3 −1
Original line number Diff line number Diff line
@@ -44,9 +44,10 @@ struct ir_scancode_table {
struct ir_dev_props {
	unsigned long allowed_protos;
	void 		*priv;
	int (*change_protocol)(void *priv, unsigned long protocol);
	int (*change_protocol)(void *priv, enum ir_type ir_type);
};


struct ir_input_dev {
	struct input_dev		*dev;		/* Input device*/
	struct ir_scancode_table	rc_tab;		/* scan/key table */
@@ -55,6 +56,7 @@ struct ir_input_dev {
	struct device			*class_dev;	/* virtual class dev */
	const struct ir_dev_props	*props;		/* Device properties */
};
#define to_ir_input_dev(_attr) container_of(_attr, struct ir_input_dev, attr)

/* Routines from ir-keytable.c */