Commit 69e3235d authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab
Browse files

media: cec-pin: add 'received' callback



Drivers that use the CEC pin framework have no way of processing messages
themselves by providing the 'received' callback. This is present in
cec_ops, but not in cec_pin_ops.

Add support for this callback.

Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 65d270ac
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1279,6 +1279,15 @@ static void cec_pin_adap_free(struct cec_adapter *adap)
	kfree(pin);
}

static int cec_pin_received(struct cec_adapter *adap, struct cec_msg *msg)
{
	struct cec_pin *pin = adap->pin;

	if (pin->ops->received)
		return pin->ops->received(adap, msg);
	return -ENOMSG;
}

void cec_pin_changed(struct cec_adapter *adap, bool value)
{
	struct cec_pin *pin = adap->pin;
@@ -1301,6 +1310,7 @@ static const struct cec_adap_ops cec_pin_adap_ops = {
	.error_inj_parse_line = cec_pin_error_inj_parse_line,
	.error_inj_show = cec_pin_error_inj_show,
#endif
	.received = cec_pin_received,
};

struct cec_adapter *cec_pin_allocate_adapter(const struct cec_pin_ops *pin_ops,
+8 −2
Original line number Diff line number Diff line
@@ -29,8 +29,11 @@
 *		an error if negative. If NULL or -ENOTTY is returned,
 *		then this is not supported.
 *
 * These operations are used by the cec pin framework to manipulate
 * the CEC pin.
 * @received:	optional. High-level CEC message callback. Allows the driver
 *		to process CEC messages.
 *
 * These operations (except for the @received op) are used by the
 * cec pin framework to manipulate the CEC pin.
 */
struct cec_pin_ops {
	bool (*read)(struct cec_adapter *adap);
@@ -42,6 +45,9 @@ struct cec_pin_ops {
	void (*status)(struct cec_adapter *adap, struct seq_file *file);
	int  (*read_hpd)(struct cec_adapter *adap);
	int  (*read_5v)(struct cec_adapter *adap);

	/* High-level CEC message callback */
	int (*received)(struct cec_adapter *adap, struct cec_msg *msg);
};

/**