Lines Matching full:sd
27 static int subdev_fh_init(struct v4l2_subdev_fh *fh, struct v4l2_subdev *sd) in subdev_fh_init() argument
32 state = __v4l2_subdev_state_alloc(sd, "fh->state->lock", &key); in subdev_fh_init()
50 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_open() local
58 ret = subdev_fh_init(subdev_fh, sd); in subdev_open()
68 if (sd->v4l2_dev->mdev && sd->entity.graph_obj.mdev->dev) { in subdev_open()
71 owner = sd->entity.graph_obj.mdev->dev->driver->owner; in subdev_open()
79 if (sd->internal_ops && sd->internal_ops->open) { in subdev_open()
80 ret = sd->internal_ops->open(sd, subdev_fh); in subdev_open()
100 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_close() local
104 if (sd->internal_ops && sd->internal_ops->close) in subdev_close()
105 sd->internal_ops->close(sd, subdev_fh); in subdev_close()
136 static inline int check_pad(struct v4l2_subdev *sd, u32 pad) in check_pad() argument
139 if (sd->entity.num_pads) { in check_pad()
140 if (pad >= sd->entity.num_pads) in check_pad()
159 static inline int check_format(struct v4l2_subdev *sd, in check_format() argument
166 return check_which(format->which) ? : check_pad(sd, format->pad) ? : in check_format()
170 static int call_get_fmt(struct v4l2_subdev *sd, in call_get_fmt() argument
174 return check_format(sd, state, format) ? : in call_get_fmt()
175 sd->ops->pad->get_fmt(sd, state, format); in call_get_fmt()
178 static int call_set_fmt(struct v4l2_subdev *sd, in call_set_fmt() argument
182 return check_format(sd, state, format) ? : in call_set_fmt()
183 sd->ops->pad->set_fmt(sd, state, format); in call_set_fmt()
186 static int call_enum_mbus_code(struct v4l2_subdev *sd, in call_enum_mbus_code() argument
193 return check_which(code->which) ? : check_pad(sd, code->pad) ? : in call_enum_mbus_code()
195 sd->ops->pad->enum_mbus_code(sd, state, code); in call_enum_mbus_code()
198 static int call_enum_frame_size(struct v4l2_subdev *sd, in call_enum_frame_size() argument
205 return check_which(fse->which) ? : check_pad(sd, fse->pad) ? : in call_enum_frame_size()
207 sd->ops->pad->enum_frame_size(sd, state, fse); in call_enum_frame_size()
210 static inline int check_frame_interval(struct v4l2_subdev *sd, in check_frame_interval() argument
216 return check_pad(sd, fi->pad); in check_frame_interval()
219 static int call_g_frame_interval(struct v4l2_subdev *sd, in call_g_frame_interval() argument
222 return check_frame_interval(sd, fi) ? : in call_g_frame_interval()
223 sd->ops->video->g_frame_interval(sd, fi); in call_g_frame_interval()
226 static int call_s_frame_interval(struct v4l2_subdev *sd, in call_s_frame_interval() argument
229 return check_frame_interval(sd, fi) ? : in call_s_frame_interval()
230 sd->ops->video->s_frame_interval(sd, fi); in call_s_frame_interval()
233 static int call_enum_frame_interval(struct v4l2_subdev *sd, in call_enum_frame_interval() argument
240 return check_which(fie->which) ? : check_pad(sd, fie->pad) ? : in call_enum_frame_interval()
242 sd->ops->pad->enum_frame_interval(sd, state, fie); in call_enum_frame_interval()
245 static inline int check_selection(struct v4l2_subdev *sd, in check_selection() argument
252 return check_which(sel->which) ? : check_pad(sd, sel->pad) ? : in check_selection()
256 static int call_get_selection(struct v4l2_subdev *sd, in call_get_selection() argument
260 return check_selection(sd, state, sel) ? : in call_get_selection()
261 sd->ops->pad->get_selection(sd, state, sel); in call_get_selection()
264 static int call_set_selection(struct v4l2_subdev *sd, in call_set_selection() argument
268 return check_selection(sd, state, sel) ? : in call_set_selection()
269 sd->ops->pad->set_selection(sd, state, sel); in call_set_selection()
272 static inline int check_edid(struct v4l2_subdev *sd, in check_edid() argument
281 return check_pad(sd, edid->pad); in check_edid()
284 static int call_get_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid) in call_get_edid() argument
286 return check_edid(sd, edid) ? : sd->ops->pad->get_edid(sd, edid); in call_get_edid()
289 static int call_set_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid) in call_set_edid() argument
291 return check_edid(sd, edid) ? : sd->ops->pad->set_edid(sd, edid); in call_set_edid()
294 static int call_dv_timings_cap(struct v4l2_subdev *sd, in call_dv_timings_cap() argument
300 return check_pad(sd, cap->pad) ? : in call_dv_timings_cap()
301 sd->ops->pad->dv_timings_cap(sd, cap); in call_dv_timings_cap()
304 static int call_enum_dv_timings(struct v4l2_subdev *sd, in call_enum_dv_timings() argument
310 return check_pad(sd, dvt->pad) ? : in call_enum_dv_timings()
311 sd->ops->pad->enum_dv_timings(sd, dvt); in call_enum_dv_timings()
314 static int call_get_mbus_config(struct v4l2_subdev *sd, unsigned int pad, in call_get_mbus_config() argument
317 return check_pad(sd, pad) ? : in call_get_mbus_config()
318 sd->ops->pad->get_mbus_config(sd, pad, config); in call_get_mbus_config()
328 static int call_##f##_state(struct v4l2_subdev *sd, \
335 state = v4l2_subdev_lock_and_get_active_state(sd); \
336 ret = call_##f(sd, state, arg); \
345 static int call_##f##_state(struct v4l2_subdev *sd, \
349 return call_##f(sd, state, arg); \
391 subdev_ioctl_get_state(struct v4l2_subdev *sd, struct v4l2_subdev_fh *subdev_fh, in subdev_ioctl_get_state() argument
424 v4l2_subdev_get_unlocked_active_state(sd); in subdev_ioctl_get_state()
431 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_do_ioctl() local
484 vdev, sd->v4l2_dev->mdev, arg); in subdev_do_ioctl()
490 vdev, sd->v4l2_dev->mdev, arg); in subdev_do_ioctl()
496 vdev, sd->v4l2_dev->mdev, arg); in subdev_do_ioctl()
499 if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS)) in subdev_do_ioctl()
505 return v4l2_subdev_call(sd, core, subscribe_event, vfh, arg); in subdev_do_ioctl()
508 return v4l2_subdev_call(sd, core, unsubscribe_event, vfh, arg); in subdev_do_ioctl()
517 return v4l2_subdev_call(sd, core, g_register, p); in subdev_do_ioctl()
525 return v4l2_subdev_call(sd, core, s_register, p); in subdev_do_ioctl()
533 if (sd->ops->core && sd->ops->core->s_register) in subdev_do_ioctl()
535 if (sd->ops->core && sd->ops->core->g_register) in subdev_do_ioctl()
537 strscpy(p->name, sd->name, sizeof(p->name)); in subdev_do_ioctl()
546 sd->name); in subdev_do_ioctl()
547 ret = v4l2_subdev_call(sd, core, log_status); in subdev_do_ioctl()
549 sd->name); in subdev_do_ioctl()
558 return v4l2_subdev_call(sd, pad, get_fmt, state, format); in subdev_do_ioctl()
569 return v4l2_subdev_call(sd, pad, set_fmt, state, format); in subdev_do_ioctl()
583 sd, pad, get_selection, state, &sel); in subdev_do_ioctl()
605 sd, pad, set_selection, state, &sel); in subdev_do_ioctl()
616 return v4l2_subdev_call(sd, pad, enum_mbus_code, state, in subdev_do_ioctl()
624 return v4l2_subdev_call(sd, pad, enum_frame_size, state, in subdev_do_ioctl()
632 return v4l2_subdev_call(sd, video, g_frame_interval, arg); in subdev_do_ioctl()
642 return v4l2_subdev_call(sd, video, s_frame_interval, arg); in subdev_do_ioctl()
649 return v4l2_subdev_call(sd, pad, enum_frame_interval, state, in subdev_do_ioctl()
658 sd, pad, get_selection, state, sel); in subdev_do_ioctl()
669 sd, pad, set_selection, state, sel); in subdev_do_ioctl()
675 return v4l2_subdev_call(sd, pad, get_edid, edid); in subdev_do_ioctl()
681 return v4l2_subdev_call(sd, pad, set_edid, edid); in subdev_do_ioctl()
687 return v4l2_subdev_call(sd, pad, dv_timings_cap, cap); in subdev_do_ioctl()
693 return v4l2_subdev_call(sd, pad, enum_dv_timings, dvt); in subdev_do_ioctl()
697 return v4l2_subdev_call(sd, video, query_dv_timings, arg); in subdev_do_ioctl()
700 return v4l2_subdev_call(sd, video, g_dv_timings, arg); in subdev_do_ioctl()
706 return v4l2_subdev_call(sd, video, s_dv_timings, arg); in subdev_do_ioctl()
709 return v4l2_subdev_call(sd, video, g_std, arg); in subdev_do_ioctl()
717 return v4l2_subdev_call(sd, video, s_std, *std); in subdev_do_ioctl()
724 if (v4l2_subdev_call(sd, video, g_tvnorms, &id)) in subdev_do_ioctl()
731 return v4l2_subdev_call(sd, video, querystd, arg); in subdev_do_ioctl()
734 return v4l2_subdev_call(sd, core, ioctl, cmd, arg); in subdev_do_ioctl()
750 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_do_ioctl_lock() local
755 state = subdev_ioctl_get_state(sd, subdev_fh, cmd, arg); in subdev_do_ioctl_lock()
782 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_compat_ioctl32() local
784 return v4l2_subdev_call(sd, core, compat_ioctl32, cmd, arg); in subdev_compat_ioctl32()
807 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); in subdev_poll() local
810 if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS)) in subdev_poll()
838 struct v4l2_subdev *sd; in v4l2_subdev_get_fwnode_pad_1_to_1() local
843 sd = media_entity_to_v4l2_subdev(entity); in v4l2_subdev_get_fwnode_pad_1_to_1()
848 if (dev_fwnode(sd->dev) == fwnode) in v4l2_subdev_get_fwnode_pad_1_to_1()
855 int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd, in v4l2_subdev_link_validate_default() argument
864 dev_dbg(sd->entity.graph_obj.mdev->dev, in v4l2_subdev_link_validate_default()
872 dev_dbg(sd->entity.graph_obj.mdev->dev, in v4l2_subdev_link_validate_default()
880 dev_dbg(sd->entity.graph_obj.mdev->dev, in v4l2_subdev_link_validate_default()
893 dev_dbg(sd->entity.graph_obj.mdev->dev, in v4l2_subdev_link_validate_default()
903 dev_dbg(sd->entity.graph_obj.mdev->dev, in v4l2_subdev_link_validate_default()
917 struct v4l2_subdev *sd = in v4l2_subdev_link_validate_get_format() local
922 return v4l2_subdev_call_state_active(sd, pad, get_fmt, fmt); in v4l2_subdev_link_validate_get_format()
961 __v4l2_subdev_state_alloc(struct v4l2_subdev *sd, const char *lock_name, in __v4l2_subdev_state_alloc() argument
972 if (sd->state_lock) in __v4l2_subdev_state_alloc()
973 state->lock = sd->state_lock; in __v4l2_subdev_state_alloc()
977 if (sd->entity.num_pads) { in __v4l2_subdev_state_alloc()
978 state->pads = kvcalloc(sd->entity.num_pads, in __v4l2_subdev_state_alloc()
991 ret = v4l2_subdev_call(sd, pad, init_cfg, state); in __v4l2_subdev_state_alloc()
1021 int __v4l2_subdev_init_finalize(struct v4l2_subdev *sd, const char *name, in __v4l2_subdev_init_finalize() argument
1026 state = __v4l2_subdev_state_alloc(sd, name, key); in __v4l2_subdev_init_finalize()
1030 sd->active_state = state; in __v4l2_subdev_init_finalize()
1036 void v4l2_subdev_cleanup(struct v4l2_subdev *sd) in v4l2_subdev_cleanup() argument
1038 __v4l2_subdev_state_free(sd->active_state); in v4l2_subdev_cleanup()
1039 sd->active_state = NULL; in v4l2_subdev_cleanup()
1045 int v4l2_subdev_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, in v4l2_subdev_get_fmt() argument
1050 if (format->pad >= sd->entity.num_pads) in v4l2_subdev_get_fmt()
1053 fmt = v4l2_subdev_get_pad_format(sd, state, format->pad); in v4l2_subdev_get_fmt()
1067 void v4l2_subdev_init(struct v4l2_subdev *sd, const struct v4l2_subdev_ops *ops) in v4l2_subdev_init() argument
1069 INIT_LIST_HEAD(&sd->list); in v4l2_subdev_init()
1071 sd->ops = ops; in v4l2_subdev_init()
1072 sd->v4l2_dev = NULL; in v4l2_subdev_init()
1073 sd->flags = 0; in v4l2_subdev_init()
1074 sd->name[0] = '\0'; in v4l2_subdev_init()
1075 sd->grp_id = 0; in v4l2_subdev_init()
1076 sd->dev_priv = NULL; in v4l2_subdev_init()
1077 sd->host_priv = NULL; in v4l2_subdev_init()
1079 sd->entity.name = sd->name; in v4l2_subdev_init()
1080 sd->entity.obj_type = MEDIA_ENTITY_TYPE_V4L2_SUBDEV; in v4l2_subdev_init()
1081 sd->entity.function = MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN; in v4l2_subdev_init()
1086 void v4l2_subdev_notify_event(struct v4l2_subdev *sd, in v4l2_subdev_notify_event() argument
1089 v4l2_event_queue(sd->devnode, ev); in v4l2_subdev_notify_event()
1090 v4l2_subdev_notify(sd, V4L2_DEVICE_NOTIFY_EVENT, (void *)ev); in v4l2_subdev_notify_event()