[media] tc358743: allow event subscription
This is useful to subscribe to HDMI hotplug events via the V4L2_CID_DV_RX_POWER_PRESENT control. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
d747b806ab
commit
1140f919f8
@ -40,6 +40,7 @@
|
|||||||
#include <media/v4l2-dv-timings.h>
|
#include <media/v4l2-dv-timings.h>
|
||||||
#include <media/v4l2-device.h>
|
#include <media/v4l2-device.h>
|
||||||
#include <media/v4l2-ctrls.h>
|
#include <media/v4l2-ctrls.h>
|
||||||
|
#include <media/v4l2-event.h>
|
||||||
#include <media/v4l2-of.h>
|
#include <media/v4l2-of.h>
|
||||||
#include <media/tc358743.h>
|
#include <media/tc358743.h>
|
||||||
|
|
||||||
@ -859,8 +860,7 @@ static void tc358743_format_change(struct v4l2_subdev *sd)
|
|||||||
&timings, false);
|
&timings, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
v4l2_subdev_notify(sd, V4L2_DEVICE_NOTIFY_EVENT,
|
v4l2_subdev_notify_event(sd, &tc358743_ev_fmt);
|
||||||
(void *)&tc358743_ev_fmt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tc358743_init_interrupts(struct v4l2_subdev *sd)
|
static void tc358743_init_interrupts(struct v4l2_subdev *sd)
|
||||||
@ -1317,6 +1317,19 @@ static irqreturn_t tc358743_irq_handler(int irq, void *dev_id)
|
|||||||
return handled ? IRQ_HANDLED : IRQ_NONE;
|
return handled ? IRQ_HANDLED : IRQ_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int tc358743_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh,
|
||||||
|
struct v4l2_event_subscription *sub)
|
||||||
|
{
|
||||||
|
switch (sub->type) {
|
||||||
|
case V4L2_EVENT_SOURCE_CHANGE:
|
||||||
|
return v4l2_src_change_event_subdev_subscribe(sd, fh, sub);
|
||||||
|
case V4L2_EVENT_CTRL:
|
||||||
|
return v4l2_ctrl_subdev_subscribe_event(sd, fh, sub);
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* --------------- VIDEO OPS --------------- */
|
/* --------------- VIDEO OPS --------------- */
|
||||||
|
|
||||||
static int tc358743_g_input_status(struct v4l2_subdev *sd, u32 *status)
|
static int tc358743_g_input_status(struct v4l2_subdev *sd, u32 *status)
|
||||||
@ -1604,6 +1617,8 @@ static const struct v4l2_subdev_core_ops tc358743_core_ops = {
|
|||||||
.s_register = tc358743_s_register,
|
.s_register = tc358743_s_register,
|
||||||
#endif
|
#endif
|
||||||
.interrupt_service_routine = tc358743_isr,
|
.interrupt_service_routine = tc358743_isr,
|
||||||
|
.subscribe_event = tc358743_subscribe_event,
|
||||||
|
.unsubscribe_event = v4l2_event_subdev_unsubscribe,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct v4l2_subdev_video_ops tc358743_video_ops = {
|
static const struct v4l2_subdev_video_ops tc358743_video_ops = {
|
||||||
|
Reference in New Issue
Block a user