media: v4l: Support obtaining link frequency via get_mbus_config

Add link_freq field to struct v4l2_mbus_config in order to pass the link
frequency to the receiving sub-device.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
This commit is contained in:
Sakari Ailus 2024-04-29 11:44:22 +03:00 committed by Hans Verkuil
parent 15f0035bfd
commit 9849b9fead
2 changed files with 15 additions and 2 deletions

View File

@ -508,12 +508,23 @@ EXPORT_SYMBOL_GPL(__v4l2_get_link_freq_ctrl);
s64 __v4l2_get_link_freq_pad(struct media_pad *pad, unsigned int mul, s64 __v4l2_get_link_freq_pad(struct media_pad *pad, unsigned int mul,
unsigned int div) unsigned int div)
{ {
struct v4l2_mbus_config mbus_config = {};
struct v4l2_subdev *sd; struct v4l2_subdev *sd;
int ret;
sd = media_entity_to_v4l2_subdev(pad->entity); sd = media_entity_to_v4l2_subdev(pad->entity);
if (!sd) ret = v4l2_subdev_call(sd, pad, get_mbus_config, pad->index,
return -ENODEV; &mbus_config);
if (ret < 0 && ret != -ENOIOCTLCMD)
return ret;
if (mbus_config.link_freq)
return mbus_config.link_freq;
/*
* Fall back to using the link frequency control if the media bus config
* doesn't provide a link frequency.
*/
return __v4l2_get_link_freq_ctrl(sd->ctrl_handler, mul, div); return __v4l2_get_link_freq_ctrl(sd->ctrl_handler, mul, div);
} }
EXPORT_SYMBOL_GPL(__v4l2_get_link_freq_pad); EXPORT_SYMBOL_GPL(__v4l2_get_link_freq_pad);

View File

@ -169,6 +169,7 @@ enum v4l2_mbus_type {
/** /**
* struct v4l2_mbus_config - media bus configuration * struct v4l2_mbus_config - media bus configuration
* @type: interface type * @type: interface type
* @link_freq: The link frequency. See also V4L2_CID_LINK_FREQ control.
* @bus: bus configuration data structure * @bus: bus configuration data structure
* @bus.parallel: embedded &struct v4l2_mbus_config_parallel. * @bus.parallel: embedded &struct v4l2_mbus_config_parallel.
* Used if the bus is parallel or BT.656. * Used if the bus is parallel or BT.656.
@ -183,6 +184,7 @@ enum v4l2_mbus_type {
*/ */
struct v4l2_mbus_config { struct v4l2_mbus_config {
enum v4l2_mbus_type type; enum v4l2_mbus_type type;
u64 link_freq;
union { union {
struct v4l2_mbus_config_parallel parallel; struct v4l2_mbus_config_parallel parallel;
struct v4l2_mbus_config_mipi_csi1 mipi_csi1; struct v4l2_mbus_config_mipi_csi1 mipi_csi1;