Lines Matching full:pad
43 * restricts the total number of streams in a pad, although the stream ID is
160 static inline int check_pad(struct v4l2_subdev *sd, u32 pad) in check_pad() argument
164 if (pad >= sd->entity.num_pads) in check_pad()
169 /* allow pad 0 on subdevices not registered as media entities */ in check_pad()
170 if (pad > 0) in check_pad()
176 u32 which, u32 pad, u32 stream) in check_state() argument
180 if (!v4l2_subdev_state_get_format(state, pad, stream)) in check_state()
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()
213 sd->ops->pad->get_fmt(sd, state, format); in call_get_fmt()
221 sd->ops->pad->set_fmt(sd, state, format); in call_set_fmt()
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()
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()
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()
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()
276 sd->ops->pad->get_selection(sd, state, sel); in call_get_selection()
284 sd->ops->pad->set_selection(sd, state, sel); in call_set_selection()
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()
303 sd->ops->pad->get_frame_interval(sd, state, fi); in call_get_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()
359 return check_pad(sd, edid->pad); in check_edid()
364 return check_edid(sd, edid) ? : sd->ops->pad->get_edid(sd, edid); in call_get_edid()
369 return check_edid(sd, edid) ? : sd->ops->pad->set_edid(sd, edid); in call_set_edid()
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()
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()
439 * Create state-management wrapper for pad ops dealing with subdev state. The
501 .pad = &v4l2_subdev_call_pad_wrappers,
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()
734 sel.pad = crop->pad; in subdev_do_ioctl()
738 sd, pad, get_selection, state, &sel); in subdev_do_ioctl()
758 sel.pad = crop->pad; 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()
983 return v4l2_subdev_call(sd, pad, set_routing, state, in subdev_do_ioctl()
1195 v4l2_subdev_link_validate_get_format(struct media_pad *pad, u32 stream, in v4l2_subdev_link_validate_get_format() argument
1203 if (!is_media_entity_v4l2_subdev(pad->entity)) { in v4l2_subdev_link_validate_get_format()
1204 WARN(pad->entity->function != MEDIA_ENT_F_IO_V4L, in v4l2_subdev_link_validate_get_format()
1206 pad->entity->function, pad->entity->name); in v4l2_subdev_link_validate_get_format()
1211 sd = media_entity_to_v4l2_subdev(pad->entity); in v4l2_subdev_link_validate_get_format()
1214 fmt->pad = pad->index; 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()
1232 static void __v4l2_link_validate_get_streams(struct media_pad *pad, in __v4l2_link_validate_get_streams() argument
1240 subdev = media_entity_to_v4l2_subdev(pad->entity); in __v4l2_link_validate_get_streams()
1256 if (pad->flags & MEDIA_PAD_FL_SOURCE) { in __v4l2_link_validate_get_streams()
1264 if (route_pad != pad->index) in __v4l2_link_validate_get_streams()
1276 static void v4l2_link_validate_get_streams(struct media_pad *pad, in v4l2_link_validate_get_streams() argument
1280 struct v4l2_subdev *subdev = media_entity_to_v4l2_subdev(pad->entity); in v4l2_link_validate_get_streams()
1289 __v4l2_link_validate_get_streams(pad, streams_mask, states_locked); in v4l2_link_validate_get_streams()
1360 ret = v4l2_subdev_call(sink_subdev, pad, link_validate, link, in v4l2_subdev_link_validate_locked()
1469 /* Drivers that support streams do not need the legacy pad config */ in __v4l2_subdev_state_alloc()
1555 unsigned int pad, u32 stream) in __v4l2_subdev_state_get_format() argument
1567 if (pad >= state->sd->entity.num_pads) in __v4l2_subdev_state_get_format()
1570 return &state->pads[pad].format; in __v4l2_subdev_state_get_format()
1578 if (stream_configs->configs[i].pad == pad && in __v4l2_subdev_state_get_format()
1588 __v4l2_subdev_state_get_crop(struct v4l2_subdev_state *state, unsigned int pad, in __v4l2_subdev_state_get_crop() argument
1601 if (pad >= state->sd->entity.num_pads) in __v4l2_subdev_state_get_crop()
1604 return &state->pads[pad].crop; in __v4l2_subdev_state_get_crop()
1612 if (stream_configs->configs[i].pad == pad && in __v4l2_subdev_state_get_crop()
1623 unsigned int pad, u32 stream) in __v4l2_subdev_state_get_compose() argument
1635 if (pad >= state->sd->entity.num_pads) in __v4l2_subdev_state_get_compose()
1638 return &state->pads[pad].compose; in __v4l2_subdev_state_get_compose()
1646 if (stream_configs->configs[i].pad == pad && in __v4l2_subdev_state_get_compose()
1657 unsigned int pad, u32 stream) in __v4l2_subdev_state_get_interval() argument
1671 if (pad >= state->sd->entity.num_pads) in __v4l2_subdev_state_get_interval()
1674 return &state->pads[pad].interval; in __v4l2_subdev_state_get_interval()
1682 if (stream_configs->configs[i].pad == pad && in __v4l2_subdev_state_get_interval()
1719 * Fill in the 'pad' and stream' value for each item in the array from in v4l2_subdev_init_stream_configs()
1725 new_configs.configs[idx].pad = route->sink_pad; in v4l2_subdev_init_stream_configs()
1730 new_configs.configs[idx].pad = route->source_pad; in v4l2_subdev_init_stream_configs()
1747 fmt = v4l2_subdev_state_get_format(state, format->pad, format->stream); in v4l2_subdev_get_fmt()
1763 interval = v4l2_subdev_state_get_interval(state, fi->pad, fi->stream); in v4l2_subdev_get_frame_interval()
1854 u32 pad, u32 stream, u32 *other_pad, in v4l2_subdev_routing_find_opposite_end() argument
1862 if (route->source_pad == pad && in v4l2_subdev_routing_find_opposite_end()
1871 if (route->sink_pad == pad && route->sink_stream == stream) { in v4l2_subdev_routing_find_opposite_end()
1886 u32 pad, u32 stream) in v4l2_subdev_state_get_opposite_stream_format() argument
1892 pad, stream, in v4l2_subdev_state_get_opposite_stream_format()
1949 /* Validate the sink and source pad numbers. */ 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()
1959 dev_dbg(sd->dev, "route %u source (%u) is not a source pad\n", in v4l2_subdev_routing_validate()
1966 * sink pad must be routed to a single source pad. in v4l2_subdev_routing_validate()
1980 * source pad must originate from a single sink pad. in v4l2_subdev_routing_validate()
1995 * a single stream in a sink pad. in v4l2_subdev_routing_validate()
2000 "route %u attempts to multiplex on %s pad %u\n", in v4l2_subdev_routing_validate()
2009 * be only a single stream in a source pad. in v4l2_subdev_routing_validate()
2014 "route %u attempts to multiplex on %s pad %u\n", 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
2074 * The subdev doesn't implement pad-based stream enable, fall back 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()
2083 if (i != pad && sd->entity.pads[i].flags & MEDIA_PAD_FL_SOURCE) in v4l2_subdev_enable_streams_fallback()
2089 streams_mask, sd->entity.name, pad); in v4l2_subdev_enable_streams_fallback()
2105 int v4l2_subdev_enable_streams(struct v4l2_subdev *sd, u32 pad, in v4l2_subdev_enable_streams() argument
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()
2136 if (cfg->pad != pad || !(streams_mask & BIT_ULL(cfg->stream))) 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()
2156 dev_dbg(dev, "enable streams %u:%#llx\n", pad, streams_mask); in v4l2_subdev_enable_streams()
2159 ret = v4l2_subdev_call(sd, pad, enable_streams, state, pad, in v4l2_subdev_enable_streams()
2162 dev_dbg(dev, "enable streams %u:%#llx failed: %d\n", pad, in v4l2_subdev_enable_streams()
2172 if (cfg->pad == pad && (streams_mask & BIT_ULL(cfg->stream))) 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
2191 * If the subdev doesn't implement pad-based stream enable, fall back 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()
2200 if (i != pad && sd->entity.pads[i].flags & MEDIA_PAD_FL_SOURCE) in v4l2_subdev_disable_streams_fallback()
2206 streams_mask, sd->entity.name, pad); in v4l2_subdev_disable_streams_fallback()
2222 int v4l2_subdev_disable_streams(struct v4l2_subdev *sd, u32 pad, in v4l2_subdev_disable_streams() argument
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()
2253 if (cfg->pad != pad || !(streams_mask & BIT_ULL(cfg->stream))) 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()
2273 dev_dbg(dev, "disable streams %u:%#llx\n", pad, streams_mask); in v4l2_subdev_disable_streams()
2276 ret = v4l2_subdev_call(sd, pad, disable_streams, state, pad, in v4l2_subdev_disable_streams()
2279 dev_dbg(dev, "disable streams %u:%#llx failed: %d\n", pad, in v4l2_subdev_disable_streams()
2289 if (cfg->pad == pad && (streams_mask & BIT_ULL(cfg->stream))) in v4l2_subdev_disable_streams()
2304 struct media_pad *pad; in v4l2_subdev_s_stream_helper() local
2309 * Find the source pad. This helper is meant for subdevs that have a in v4l2_subdev_s_stream_helper()
2310 * single source pad, so failures shouldn't happen, but catch them in v4l2_subdev_s_stream_helper()
2313 media_entity_for_each_pad(&sd->entity, pad) { in v4l2_subdev_s_stream_helper()
2314 if (pad->flags & MEDIA_PAD_FL_SOURCE) { in v4l2_subdev_s_stream_helper()
2315 pad_index = pad->index; in v4l2_subdev_s_stream_helper()
2324 * As there's a single source pad, just collect all the source streams. in v4l2_subdev_s_stream_helper()