Lines Matching full:sd

51 static int subdev_fh_init(struct v4l2_subdev_fh *fh, struct v4l2_subdev *sd)  in subdev_fh_init()  argument
56 state = __v4l2_subdev_state_alloc(sd, "fh->state->lock", &key); in subdev_fh_init()
74 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_open() local
82 ret = subdev_fh_init(subdev_fh, sd); in subdev_open()
92 if (sd->v4l2_dev->mdev && sd->entity.graph_obj.mdev->dev) { in subdev_open()
95 owner = sd->entity.graph_obj.mdev->dev->driver->owner; in subdev_open()
103 if (sd->internal_ops && sd->internal_ops->open) { in subdev_open()
104 ret = sd->internal_ops->open(sd, subdev_fh); in subdev_open()
124 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_close() local
128 if (sd->internal_ops && sd->internal_ops->close) in subdev_close()
129 sd->internal_ops->close(sd, subdev_fh); in subdev_close()
160 static inline int check_pad(struct v4l2_subdev *sd, u32 pad) in check_pad() argument
163 if (sd->entity.num_pads) { in check_pad()
164 if (pad >= sd->entity.num_pads) in check_pad()
175 static int check_state(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, in check_state() argument
178 if (sd->flags & V4L2_SUBDEV_FL_STREAMS) { in check_state()
197 static inline int check_format(struct v4l2_subdev *sd, in check_format() argument
204 return check_which(format->which) ? : check_pad(sd, format->pad) ? : in check_format()
205 check_state(sd, state, format->which, format->pad, format->stream); in check_format()
208 static int call_get_fmt(struct v4l2_subdev *sd, in call_get_fmt() argument
212 return check_format(sd, state, format) ? : in call_get_fmt()
213 sd->ops->pad->get_fmt(sd, state, format); in call_get_fmt()
216 static int call_set_fmt(struct v4l2_subdev *sd, in call_set_fmt() argument
220 return check_format(sd, state, format) ? : in call_set_fmt()
221 sd->ops->pad->set_fmt(sd, state, format); in call_set_fmt()
224 static int call_enum_mbus_code(struct v4l2_subdev *sd, in call_enum_mbus_code() argument
231 return check_which(code->which) ? : check_pad(sd, code->pad) ? : in call_enum_mbus_code()
232 check_state(sd, state, code->which, code->pad, code->stream) ? : in call_enum_mbus_code()
233 sd->ops->pad->enum_mbus_code(sd, state, code); in call_enum_mbus_code()
236 static int call_enum_frame_size(struct v4l2_subdev *sd, in call_enum_frame_size() argument
243 return check_which(fse->which) ? : check_pad(sd, fse->pad) ? : in call_enum_frame_size()
244 check_state(sd, state, fse->which, fse->pad, fse->stream) ? : in call_enum_frame_size()
245 sd->ops->pad->enum_frame_size(sd, state, fse); in call_enum_frame_size()
248 static int call_enum_frame_interval(struct v4l2_subdev *sd, in call_enum_frame_interval() argument
255 return check_which(fie->which) ? : check_pad(sd, fie->pad) ? : in call_enum_frame_interval()
256 check_state(sd, state, fie->which, fie->pad, fie->stream) ? : in call_enum_frame_interval()
257 sd->ops->pad->enum_frame_interval(sd, state, fie); in call_enum_frame_interval()
260 static inline int check_selection(struct v4l2_subdev *sd, in check_selection() argument
267 return check_which(sel->which) ? : check_pad(sd, sel->pad) ? : in check_selection()
268 check_state(sd, state, sel->which, sel->pad, sel->stream); in check_selection()
271 static int call_get_selection(struct v4l2_subdev *sd, in call_get_selection() argument
275 return check_selection(sd, state, sel) ? : in call_get_selection()
276 sd->ops->pad->get_selection(sd, state, sel); in call_get_selection()
279 static int call_set_selection(struct v4l2_subdev *sd, in call_set_selection() argument
283 return check_selection(sd, state, sel) ? : in call_set_selection()
284 sd->ops->pad->set_selection(sd, state, sel); in call_set_selection()
287 static inline int check_frame_interval(struct v4l2_subdev *sd, in check_frame_interval() argument
294 return check_which(fi->which) ? : check_pad(sd, fi->pad) ? : in check_frame_interval()
295 check_state(sd, state, fi->which, fi->pad, fi->stream); in check_frame_interval()
298 static int call_get_frame_interval(struct v4l2_subdev *sd, in call_get_frame_interval() argument
302 return check_frame_interval(sd, state, fi) ? : in call_get_frame_interval()
303 sd->ops->pad->get_frame_interval(sd, state, fi); in call_get_frame_interval()
306 static int call_set_frame_interval(struct v4l2_subdev *sd, in call_set_frame_interval() argument
310 return check_frame_interval(sd, state, fi) ? : in call_set_frame_interval()
311 sd->ops->pad->set_frame_interval(sd, state, fi); in call_set_frame_interval()
314 static int call_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad, in call_get_frame_desc() argument
322 ret = sd->ops->pad->get_frame_desc(sd, pad, fd); in call_get_frame_desc()
326 dev_dbg(sd->dev, "Frame descriptor on pad %u, type %s\n", pad, in call_get_frame_desc()
341 dev_dbg(sd->dev, in call_get_frame_desc()
350 static inline int check_edid(struct v4l2_subdev *sd, in check_edid() argument
359 return check_pad(sd, edid->pad); in check_edid()
362 static int call_get_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid) in call_get_edid() argument
364 return check_edid(sd, edid) ? : sd->ops->pad->get_edid(sd, edid); in call_get_edid()
367 static int call_set_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid) in call_set_edid() argument
369 return check_edid(sd, edid) ? : sd->ops->pad->set_edid(sd, edid); in call_set_edid()
372 static int call_dv_timings_cap(struct v4l2_subdev *sd, in call_dv_timings_cap() argument
378 return check_pad(sd, cap->pad) ? : in call_dv_timings_cap()
379 sd->ops->pad->dv_timings_cap(sd, cap); in call_dv_timings_cap()
382 static int call_enum_dv_timings(struct v4l2_subdev *sd, in call_enum_dv_timings() argument
388 return check_pad(sd, dvt->pad) ? : in call_enum_dv_timings()
389 sd->ops->pad->enum_dv_timings(sd, dvt); in call_enum_dv_timings()
392 static int call_get_mbus_config(struct v4l2_subdev *sd, unsigned int pad, in call_get_mbus_config() argument
395 return check_pad(sd, pad) ? : in call_get_mbus_config()
396 sd->ops->pad->get_mbus_config(sd, pad, config); in call_get_mbus_config()
399 static int call_s_stream(struct v4l2_subdev *sd, int enable) in call_s_stream() argument
412 if (WARN_ON(!!sd->enabled_streams == !!enable)) in call_s_stream()
416 if (!IS_ERR_OR_NULL(sd->privacy_led)) { in call_s_stream()
418 led_set_brightness(sd->privacy_led, in call_s_stream()
419 sd->privacy_led->max_brightness); in call_s_stream()
421 led_set_brightness(sd->privacy_led, 0); in call_s_stream()
424 ret = sd->ops->video->s_stream(sd, enable); in call_s_stream()
427 dev_warn(sd->dev, "disabling streaming failed (%d)\n", ret); in call_s_stream()
432 sd->enabled_streams = enable ? BIT(0) : 0; in call_s_stream()
444 static int call_##f##_state(struct v4l2_subdev *sd, \
451 state = v4l2_subdev_lock_and_get_active_state(sd); \
452 ret = call_##f(sd, state, arg); \
461 static int call_##f##_state(struct v4l2_subdev *sd, \
465 return call_##f(sd, state, arg); \
509 subdev_ioctl_get_state(struct v4l2_subdev *sd, struct v4l2_subdev_fh *subdev_fh, in subdev_ioctl_get_state() argument
557 v4l2_subdev_get_unlocked_active_state(sd); in subdev_ioctl_get_state()
564 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_do_ioctl() local
568 bool streams_subdev = sd->flags & V4L2_SUBDEV_FL_STREAMS; in subdev_do_ioctl()
630 vdev, sd->v4l2_dev->mdev, arg); in subdev_do_ioctl()
636 vdev, sd->v4l2_dev->mdev, arg); in subdev_do_ioctl()
642 vdev, sd->v4l2_dev->mdev, arg); in subdev_do_ioctl()
645 if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS)) in subdev_do_ioctl()
651 return v4l2_subdev_call(sd, core, subscribe_event, vfh, arg); in subdev_do_ioctl()
654 return v4l2_subdev_call(sd, core, unsubscribe_event, vfh, arg); in subdev_do_ioctl()
663 return v4l2_subdev_call(sd, core, g_register, p); in subdev_do_ioctl()
671 return v4l2_subdev_call(sd, core, s_register, p); in subdev_do_ioctl()
679 if (sd->ops->core && sd->ops->core->s_register) in subdev_do_ioctl()
681 if (sd->ops->core && sd->ops->core->g_register) in subdev_do_ioctl()
683 strscpy(p->name, sd->name, sizeof(p->name)); in subdev_do_ioctl()
692 sd->name); in subdev_do_ioctl()
693 ret = v4l2_subdev_call(sd, core, log_status); in subdev_do_ioctl()
695 sd->name); in subdev_do_ioctl()
707 return v4l2_subdev_call(sd, pad, get_fmt, state, format); in subdev_do_ioctl()
721 return v4l2_subdev_call(sd, pad, set_fmt, state, format); in subdev_do_ioctl()
738 sd, pad, get_selection, state, &sel); in subdev_do_ioctl()
763 sd, pad, set_selection, state, &sel); in subdev_do_ioctl()
777 return v4l2_subdev_call(sd, pad, enum_mbus_code, state, in subdev_do_ioctl()
788 return v4l2_subdev_call(sd, pad, enum_frame_size, state, in subdev_do_ioctl()
799 return v4l2_subdev_call(sd, pad, get_frame_interval, state, fi); in subdev_do_ioctl()
812 return v4l2_subdev_call(sd, pad, set_frame_interval, state, fi); in subdev_do_ioctl()
822 return v4l2_subdev_call(sd, pad, enum_frame_interval, state, in subdev_do_ioctl()
834 sd, pad, get_selection, state, sel); in subdev_do_ioctl()
848 sd, pad, set_selection, state, sel); in subdev_do_ioctl()
854 return v4l2_subdev_call(sd, pad, get_edid, edid); in subdev_do_ioctl()
860 return v4l2_subdev_call(sd, pad, set_edid, edid); in subdev_do_ioctl()
866 return v4l2_subdev_call(sd, pad, dv_timings_cap, cap); in subdev_do_ioctl()
872 return v4l2_subdev_call(sd, pad, enum_dv_timings, dvt); in subdev_do_ioctl()
876 return v4l2_subdev_call(sd, video, query_dv_timings, arg); in subdev_do_ioctl()
879 return v4l2_subdev_call(sd, video, g_dv_timings, arg); in subdev_do_ioctl()
885 return v4l2_subdev_call(sd, video, s_dv_timings, arg); in subdev_do_ioctl()
888 return v4l2_subdev_call(sd, video, g_std, arg); in subdev_do_ioctl()
896 return v4l2_subdev_call(sd, video, s_std, *std); in subdev_do_ioctl()
903 if (v4l2_subdev_call(sd, video, g_tvnorms, &id)) in subdev_do_ioctl()
910 return v4l2_subdev_call(sd, video, querystd, arg); in subdev_do_ioctl()
919 if (!(sd->flags & V4L2_SUBDEV_FL_STREAMS)) in subdev_do_ioctl()
949 if (!(sd->flags & V4L2_SUBDEV_FL_STREAMS)) in subdev_do_ioctl()
959 const struct media_pad *pads = sd->entity.pads; in subdev_do_ioctl()
965 if (route->sink_pad >= sd->entity.num_pads) in subdev_do_ioctl()
972 if (route->source_pad >= sd->entity.num_pads) in subdev_do_ioctl()
983 return v4l2_subdev_call(sd, pad, set_routing, state, in subdev_do_ioctl()
1016 return v4l2_subdev_call(sd, core, ioctl, cmd, arg); in subdev_do_ioctl()
1032 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_do_ioctl_lock() local
1037 state = subdev_ioctl_get_state(sd, subdev_fh, cmd, arg); in subdev_do_ioctl_lock()
1064 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_compat_ioctl32() local
1066 return v4l2_subdev_call(sd, core, compat_ioctl32, cmd, arg); in subdev_compat_ioctl32()
1089 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_poll() local
1092 if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS)) in subdev_poll()
1120 struct v4l2_subdev *sd; in v4l2_subdev_get_fwnode_pad_1_to_1() local
1125 sd = media_entity_to_v4l2_subdev(entity); in v4l2_subdev_get_fwnode_pad_1_to_1()
1130 if (device_match_fwnode(sd->dev, fwnode)) in v4l2_subdev_get_fwnode_pad_1_to_1()
1137 int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd, in v4l2_subdev_link_validate_default() argument
1146 dev_dbg(sd->entity.graph_obj.mdev->dev, in v4l2_subdev_link_validate_default()
1154 dev_dbg(sd->entity.graph_obj.mdev->dev, in v4l2_subdev_link_validate_default()
1162 dev_dbg(sd->entity.graph_obj.mdev->dev, in v4l2_subdev_link_validate_default()
1175 dev_dbg(sd->entity.graph_obj.mdev->dev, in v4l2_subdev_link_validate_default()
1185 dev_dbg(sd->entity.graph_obj.mdev->dev, in v4l2_subdev_link_validate_default()
1200 struct v4l2_subdev *sd; in v4l2_subdev_link_validate_get_format() local
1211 sd = media_entity_to_v4l2_subdev(pad->entity); in v4l2_subdev_link_validate_get_format()
1218 state = v4l2_subdev_get_locked_active_state(sd); in v4l2_subdev_link_validate_get_format()
1220 state = v4l2_subdev_lock_and_get_active_state(sd); in v4l2_subdev_link_validate_get_format()
1222 ret = v4l2_subdev_call(sd, pad, get_fmt, state, fmt); in v4l2_subdev_link_validate_get_format()
1422 struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity); in v4l2_subdev_has_pad_interdep() local
1427 state = v4l2_subdev_lock_and_get_active_state(sd); in v4l2_subdev_has_pad_interdep()
1451 __v4l2_subdev_state_alloc(struct v4l2_subdev *sd, const char *lock_name, in __v4l2_subdev_state_alloc() argument
1462 if (sd->state_lock) in __v4l2_subdev_state_alloc()
1463 state->lock = sd->state_lock; in __v4l2_subdev_state_alloc()
1467 state->sd = sd; in __v4l2_subdev_state_alloc()
1470 if (!(sd->flags & V4L2_SUBDEV_FL_STREAMS) && sd->entity.num_pads) { in __v4l2_subdev_state_alloc()
1471 state->pads = kvcalloc(sd->entity.num_pads, in __v4l2_subdev_state_alloc()
1479 if (sd->internal_ops && sd->internal_ops->init_state) { in __v4l2_subdev_state_alloc()
1485 ret = sd->internal_ops->init_state(sd, state); in __v4l2_subdev_state_alloc()
1518 int __v4l2_subdev_init_finalize(struct v4l2_subdev *sd, const char *name, in __v4l2_subdev_init_finalize() argument
1523 state = __v4l2_subdev_state_alloc(sd, name, key); in __v4l2_subdev_init_finalize()
1527 sd->active_state = state; in __v4l2_subdev_init_finalize()
1533 void v4l2_subdev_cleanup(struct v4l2_subdev *sd) in v4l2_subdev_cleanup() argument
1537 __v4l2_subdev_state_free(sd->active_state); in v4l2_subdev_cleanup()
1538 sd->active_state = NULL; in v4l2_subdev_cleanup()
1541 if (!sd->async_subdev_endpoint_list.next) in v4l2_subdev_cleanup()
1544 list_for_each_entry_safe(ase, ase_tmp, &sd->async_subdev_endpoint_list, in v4l2_subdev_cleanup()
1567 if (pad >= state->sd->entity.num_pads) in __v4l2_subdev_state_get_format()
1601 if (pad >= state->sd->entity.num_pads) in __v4l2_subdev_state_get_crop()
1635 if (pad >= state->sd->entity.num_pads) in __v4l2_subdev_state_get_compose()
1671 if (pad >= state->sd->entity.num_pads) in __v4l2_subdev_state_get_interval()
1742 int v4l2_subdev_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, in v4l2_subdev_get_fmt() argument
1757 int v4l2_subdev_get_frame_interval(struct v4l2_subdev *sd, in v4l2_subdev_get_frame_interval() argument
1773 int v4l2_subdev_set_routing(struct v4l2_subdev *sd, in v4l2_subdev_set_routing() argument
1831 int v4l2_subdev_set_routing_with_fmt(struct v4l2_subdev *sd, in v4l2_subdev_set_routing_with_fmt() argument
1840 ret = v4l2_subdev_set_routing(sd, state, routing); in v4l2_subdev_set_routing_with_fmt()
1927 int v4l2_subdev_routing_validate(struct v4l2_subdev *sd, in v4l2_subdev_routing_validate() argument
1937 remote_pads = kcalloc(sd->entity.num_pads, sizeof(*remote_pads), in v4l2_subdev_routing_validate()
1942 for (i = 0; i < sd->entity.num_pads; ++i) in v4l2_subdev_routing_validate()
1950 if (route->sink_pad >= sd->entity.num_pads || in v4l2_subdev_routing_validate()
1951 !(sd->entity.pads[route->sink_pad].flags & MEDIA_PAD_FL_SINK)) { in v4l2_subdev_routing_validate()
1952 dev_dbg(sd->dev, "route %u sink (%u) is not a sink pad\n", in v4l2_subdev_routing_validate()
1957 if (route->source_pad >= sd->entity.num_pads || in v4l2_subdev_routing_validate()
1958 !(sd->entity.pads[route->source_pad].flags & MEDIA_PAD_FL_SOURCE)) { in v4l2_subdev_routing_validate()
1959 dev_dbg(sd->dev, "route %u source (%u) is not a source pad\n", in v4l2_subdev_routing_validate()
1971 dev_dbg(sd->dev, in v4l2_subdev_routing_validate()
1985 dev_dbg(sd->dev, in v4l2_subdev_routing_validate()
1999 dev_dbg(sd->dev, in v4l2_subdev_routing_validate()
2013 dev_dbg(sd->dev, in v4l2_subdev_routing_validate()
2035 dev_dbg(sd->dev, in v4l2_subdev_routing_validate()
2049 dev_dbg(sd->dev, in v4l2_subdev_routing_validate()
2066 static int v4l2_subdev_enable_streams_fallback(struct v4l2_subdev *sd, u32 pad, in v4l2_subdev_enable_streams_fallback() argument
2069 struct device *dev = sd->entity.graph_obj.mdev->dev; in v4l2_subdev_enable_streams_fallback()
2076 * have a single source pad, as sd->enabled_streams is global to the in v4l2_subdev_enable_streams_fallback()
2079 if (!(sd->entity.pads[pad].flags & MEDIA_PAD_FL_SOURCE)) in v4l2_subdev_enable_streams_fallback()
2082 for (i = 0; i < sd->entity.num_pads; ++i) { in v4l2_subdev_enable_streams_fallback()
2083 if (i != pad && sd->entity.pads[i].flags & MEDIA_PAD_FL_SOURCE) in v4l2_subdev_enable_streams_fallback()
2087 if (sd->enabled_streams & streams_mask) { in v4l2_subdev_enable_streams_fallback()
2089 streams_mask, sd->entity.name, pad); in v4l2_subdev_enable_streams_fallback()
2094 if (!sd->enabled_streams) { in v4l2_subdev_enable_streams_fallback()
2095 ret = v4l2_subdev_call(sd, video, s_stream, 1); in v4l2_subdev_enable_streams_fallback()
2100 sd->enabled_streams |= streams_mask; in v4l2_subdev_enable_streams_fallback()
2105 int v4l2_subdev_enable_streams(struct v4l2_subdev *sd, u32 pad, in v4l2_subdev_enable_streams() argument
2108 struct device *dev = sd->entity.graph_obj.mdev->dev; in v4l2_subdev_enable_streams()
2115 if (pad >= sd->entity.num_pads) in v4l2_subdev_enable_streams()
2122 if (!sd->ops->pad || !sd->ops->pad->enable_streams) in v4l2_subdev_enable_streams()
2123 return v4l2_subdev_enable_streams_fallback(sd, pad, in v4l2_subdev_enable_streams()
2126 state = v4l2_subdev_lock_and_get_active_state(sd); in v4l2_subdev_enable_streams()
2143 cfg->stream, sd->entity.name, pad); in v4l2_subdev_enable_streams()
2151 streams_mask & ~found_streams, sd->entity.name, pad); in v4l2_subdev_enable_streams()
2159 ret = v4l2_subdev_call(sd, pad, enable_streams, state, pad, in v4l2_subdev_enable_streams()
2183 static int v4l2_subdev_disable_streams_fallback(struct v4l2_subdev *sd, u32 pad, in v4l2_subdev_disable_streams_fallback() argument
2186 struct device *dev = sd->entity.graph_obj.mdev->dev; in v4l2_subdev_disable_streams_fallback()
2193 * have a single source pad, as sd->enabled_streams is global to the in v4l2_subdev_disable_streams_fallback()
2196 if (!(sd->entity.pads[pad].flags & MEDIA_PAD_FL_SOURCE)) in v4l2_subdev_disable_streams_fallback()
2199 for (i = 0; i < sd->entity.num_pads; ++i) { in v4l2_subdev_disable_streams_fallback()
2200 if (i != pad && sd->entity.pads[i].flags & MEDIA_PAD_FL_SOURCE) in v4l2_subdev_disable_streams_fallback()
2204 if ((sd->enabled_streams & streams_mask) != streams_mask) { in v4l2_subdev_disable_streams_fallback()
2206 streams_mask, sd->entity.name, pad); in v4l2_subdev_disable_streams_fallback()
2211 if (!(sd->enabled_streams & ~streams_mask)) { in v4l2_subdev_disable_streams_fallback()
2212 ret = v4l2_subdev_call(sd, video, s_stream, 0); in v4l2_subdev_disable_streams_fallback()
2217 sd->enabled_streams &= ~streams_mask; in v4l2_subdev_disable_streams_fallback()
2222 int v4l2_subdev_disable_streams(struct v4l2_subdev *sd, u32 pad, in v4l2_subdev_disable_streams() argument
2225 struct device *dev = sd->entity.graph_obj.mdev->dev; in v4l2_subdev_disable_streams()
2232 if (pad >= sd->entity.num_pads) in v4l2_subdev_disable_streams()
2239 if (!sd->ops->pad || !sd->ops->pad->disable_streams) in v4l2_subdev_disable_streams()
2240 return v4l2_subdev_disable_streams_fallback(sd, pad, in v4l2_subdev_disable_streams()
2243 state = v4l2_subdev_lock_and_get_active_state(sd); in v4l2_subdev_disable_streams()
2260 cfg->stream, sd->entity.name, pad); in v4l2_subdev_disable_streams()
2268 streams_mask & ~found_streams, sd->entity.name, pad); in v4l2_subdev_disable_streams()
2276 ret = v4l2_subdev_call(sd, pad, disable_streams, state, pad, in v4l2_subdev_disable_streams()
2300 int v4l2_subdev_s_stream_helper(struct v4l2_subdev *sd, int enable) in v4l2_subdev_s_stream_helper() argument
2313 media_entity_for_each_pad(&sd->entity, pad) { in v4l2_subdev_s_stream_helper()
2326 state = v4l2_subdev_lock_and_get_active_state(sd); in v4l2_subdev_s_stream_helper()
2334 return v4l2_subdev_enable_streams(sd, pad_index, source_mask); in v4l2_subdev_s_stream_helper()
2336 return v4l2_subdev_disable_streams(sd, pad_index, source_mask); in v4l2_subdev_s_stream_helper()
2344 void v4l2_subdev_init(struct v4l2_subdev *sd, const struct v4l2_subdev_ops *ops) in v4l2_subdev_init() argument
2346 INIT_LIST_HEAD(&sd->list); in v4l2_subdev_init()
2348 sd->ops = ops; in v4l2_subdev_init()
2349 sd->v4l2_dev = NULL; in v4l2_subdev_init()
2350 sd->flags = 0; in v4l2_subdev_init()
2351 sd->name[0] = '\0'; in v4l2_subdev_init()
2352 sd->grp_id = 0; in v4l2_subdev_init()
2353 sd->dev_priv = NULL; in v4l2_subdev_init()
2354 sd->host_priv = NULL; in v4l2_subdev_init()
2355 sd->privacy_led = NULL; in v4l2_subdev_init()
2356 INIT_LIST_HEAD(&sd->async_subdev_endpoint_list); in v4l2_subdev_init()
2358 sd->entity.name = sd->name; in v4l2_subdev_init()
2359 sd->entity.obj_type = MEDIA_ENTITY_TYPE_V4L2_SUBDEV; in v4l2_subdev_init()
2360 sd->entity.function = MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN; in v4l2_subdev_init()
2365 void v4l2_subdev_notify_event(struct v4l2_subdev *sd, in v4l2_subdev_notify_event() argument
2368 v4l2_event_queue(sd->devnode, ev); in v4l2_subdev_notify_event()
2369 v4l2_subdev_notify(sd, V4L2_DEVICE_NOTIFY_EVENT, (void *)ev); in v4l2_subdev_notify_event()
2373 int v4l2_subdev_get_privacy_led(struct v4l2_subdev *sd) in v4l2_subdev_get_privacy_led() argument
2376 sd->privacy_led = led_get(sd->dev, "privacy-led"); in v4l2_subdev_get_privacy_led()
2377 if (IS_ERR(sd->privacy_led) && PTR_ERR(sd->privacy_led) != -ENOENT) in v4l2_subdev_get_privacy_led()
2378 return dev_err_probe(sd->dev, PTR_ERR(sd->privacy_led), in v4l2_subdev_get_privacy_led()
2381 if (!IS_ERR_OR_NULL(sd->privacy_led)) { in v4l2_subdev_get_privacy_led()
2382 mutex_lock(&sd->privacy_led->led_access); in v4l2_subdev_get_privacy_led()
2383 led_sysfs_disable(sd->privacy_led); in v4l2_subdev_get_privacy_led()
2384 led_trigger_remove(sd->privacy_led); in v4l2_subdev_get_privacy_led()
2385 led_set_brightness(sd->privacy_led, 0); in v4l2_subdev_get_privacy_led()
2386 mutex_unlock(&sd->privacy_led->led_access); in v4l2_subdev_get_privacy_led()
2393 void v4l2_subdev_put_privacy_led(struct v4l2_subdev *sd) in v4l2_subdev_put_privacy_led() argument
2396 if (!IS_ERR_OR_NULL(sd->privacy_led)) { in v4l2_subdev_put_privacy_led()
2397 mutex_lock(&sd->privacy_led->led_access); in v4l2_subdev_put_privacy_led()
2398 led_sysfs_enable(sd->privacy_led); in v4l2_subdev_put_privacy_led()
2399 mutex_unlock(&sd->privacy_led->led_access); in v4l2_subdev_put_privacy_led()
2400 led_put(sd->privacy_led); in v4l2_subdev_put_privacy_led()