Commit 1140f919 authored by Philipp Zabel's avatar Philipp Zabel Committed by Mauro Carvalho Chehab

[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: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent d747b806
...@@ -40,6 +40,7 @@ ...@@ -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) ...@@ -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) ...@@ -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 = { ...@@ -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 = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment