media: v4l: Add a helper for obtaining the link frequency
Add a helper for obtaining the link frequency from transmitter drivers. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
9d0a79e55a
commit
1b888b3ceb
2 changed files with 54 additions and 0 deletions
|
@ -441,3 +441,36 @@ int v4l2_fill_pixfmt(struct v4l2_pix_format *pixfmt, u32 pixelformat,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(v4l2_fill_pixfmt);
|
EXPORT_SYMBOL_GPL(v4l2_fill_pixfmt);
|
||||||
|
|
||||||
|
s64 v4l2_get_link_rate(struct v4l2_ctrl_handler *handler, unsigned int mul,
|
||||||
|
unsigned int div)
|
||||||
|
{
|
||||||
|
struct v4l2_ctrl *ctrl;
|
||||||
|
s64 freq;
|
||||||
|
|
||||||
|
ctrl = v4l2_ctrl_find(handler, V4L2_CID_LINK_FREQ);
|
||||||
|
if (ctrl) {
|
||||||
|
struct v4l2_querymenu qm = { .id = V4L2_CID_LINK_FREQ };
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
qm.index = v4l2_ctrl_g_ctrl(ctrl);
|
||||||
|
|
||||||
|
ret = v4l2_querymenu(handler, &qm);
|
||||||
|
if (ret)
|
||||||
|
return -ENOENT;
|
||||||
|
|
||||||
|
freq = qm.value;
|
||||||
|
} else {
|
||||||
|
if (!mul || !div)
|
||||||
|
return -ENOENT;
|
||||||
|
|
||||||
|
ctrl = v4l2_ctrl_find(handler, V4L2_CID_PIXEL_RATE);
|
||||||
|
if (!ctrl)
|
||||||
|
return -ENOENT;
|
||||||
|
|
||||||
|
freq = div_u64(v4l2_ctrl_g_ctrl_int64(ctrl) * mul, div);
|
||||||
|
}
|
||||||
|
|
||||||
|
return freq > 0 ? freq : -EINVAL;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(v4l2_get_link_rate);
|
||||||
|
|
|
@ -519,6 +519,27 @@ int v4l2_fill_pixfmt(struct v4l2_pix_format *pixfmt, u32 pixelformat,
|
||||||
int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt, u32 pixelformat,
|
int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt, u32 pixelformat,
|
||||||
u32 width, u32 height);
|
u32 width, u32 height);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* v4l2_get_link_rate - Get link rate from transmitter
|
||||||
|
*
|
||||||
|
* @handler: The transmitter's control handler
|
||||||
|
* @mul: The multiplier between pixel rate and link frequency. Bits per pixel on
|
||||||
|
* D-PHY, samples per clock on parallel. 0 otherwise.
|
||||||
|
* @div: The divisor between pixel rate and link frequency. Number of data lanes
|
||||||
|
* times two on D-PHY, 1 on parallel. 0 otherwise.
|
||||||
|
*
|
||||||
|
* This function is intended for obtaining the link frequency from the
|
||||||
|
* transmitter sub-devices. It returns the link rate, either from the
|
||||||
|
* V4L2_CID_LINK_FREQ control implemented by the transmitter, or value
|
||||||
|
* calculated based on the V4L2_CID_PIXEL_RATE implemented by the transmitter.
|
||||||
|
*
|
||||||
|
* Returns link frequency on success, otherwise a negative error code:
|
||||||
|
* -ENOENT: Link frequency or pixel rate control not found
|
||||||
|
* -EINVAL: Invalid link frequency value
|
||||||
|
*/
|
||||||
|
s64 v4l2_get_link_rate(struct v4l2_ctrl_handler *handler, unsigned int mul,
|
||||||
|
unsigned int div);
|
||||||
|
|
||||||
static inline u64 v4l2_buffer_get_timestamp(const struct v4l2_buffer *buf)
|
static inline u64 v4l2_buffer_get_timestamp(const struct v4l2_buffer *buf)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue