mirror of
https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
synced 2025-09-15 09:07:11 +10:00
media: v4l: Support passing media pad argument to v4l2_get_link_freq()
v4l2_get_link_freq() accepts a V4L2 control handler for now, but it needs to take struct media_pad argument in order to obtain the link frequency using get_mbus_config() pad op. Prepare for this by allowing struct media_pad as well. 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:
parent
4100f206c5
commit
15f0035bfd
@ -466,8 +466,8 @@ int v4l2_fill_pixfmt(struct v4l2_pix_format *pixfmt, u32 pixelformat,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(v4l2_fill_pixfmt);
|
EXPORT_SYMBOL_GPL(v4l2_fill_pixfmt);
|
||||||
|
|
||||||
s64 v4l2_get_link_freq(struct v4l2_ctrl_handler *handler, unsigned int mul,
|
s64 __v4l2_get_link_freq_ctrl(struct v4l2_ctrl_handler *handler,
|
||||||
unsigned int div)
|
unsigned int mul, unsigned int div)
|
||||||
{
|
{
|
||||||
struct v4l2_ctrl *ctrl;
|
struct v4l2_ctrl *ctrl;
|
||||||
s64 freq;
|
s64 freq;
|
||||||
@ -502,7 +502,22 @@ s64 v4l2_get_link_freq(struct v4l2_ctrl_handler *handler, unsigned int mul,
|
|||||||
|
|
||||||
return freq > 0 ? freq : -EINVAL;
|
return freq > 0 ? freq : -EINVAL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(v4l2_get_link_freq);
|
EXPORT_SYMBOL_GPL(__v4l2_get_link_freq_ctrl);
|
||||||
|
|
||||||
|
#ifdef CONFIG_MEDIA_CONTROLLER
|
||||||
|
s64 __v4l2_get_link_freq_pad(struct media_pad *pad, unsigned int mul,
|
||||||
|
unsigned int div)
|
||||||
|
{
|
||||||
|
struct v4l2_subdev *sd;
|
||||||
|
|
||||||
|
sd = media_entity_to_v4l2_subdev(pad->entity);
|
||||||
|
if (!sd)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
return __v4l2_get_link_freq_ctrl(sd->ctrl_handler, mul, div);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(__v4l2_get_link_freq_pad);
|
||||||
|
#endif /* CONFIG_MEDIA_CONTROLLER */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Simplify a fraction using a simple continued fraction decomposition. The
|
* Simplify a fraction using a simple continued fraction decomposition. The
|
||||||
|
@ -525,7 +525,8 @@ int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt, u32 pixelformat,
|
|||||||
/**
|
/**
|
||||||
* v4l2_get_link_freq - Get link rate from transmitter
|
* v4l2_get_link_freq - Get link rate from transmitter
|
||||||
*
|
*
|
||||||
* @handler: The transmitter's control handler
|
* @pad: The transmitter's media pad (or control handler for non-MC users or
|
||||||
|
* compatibility reasons, don't use in new code)
|
||||||
* @mul: The multiplier between pixel rate and link frequency. Bits per pixel on
|
* @mul: The multiplier between pixel rate and link frequency. Bits per pixel on
|
||||||
* D-PHY, samples per clock on parallel. 0 otherwise.
|
* D-PHY, samples per clock on parallel. 0 otherwise.
|
||||||
* @div: The divisor between pixel rate and link frequency. Number of data lanes
|
* @div: The divisor between pixel rate and link frequency. Number of data lanes
|
||||||
@ -541,8 +542,20 @@ int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt, u32 pixelformat,
|
|||||||
* * %-ENOENT: Link frequency or pixel rate control not found
|
* * %-ENOENT: Link frequency or pixel rate control not found
|
||||||
* * %-EINVAL: Invalid link frequency value
|
* * %-EINVAL: Invalid link frequency value
|
||||||
*/
|
*/
|
||||||
s64 v4l2_get_link_freq(struct v4l2_ctrl_handler *handler, unsigned int mul,
|
#ifdef CONFIG_MEDIA_CONTROLLER
|
||||||
unsigned int div);
|
#define v4l2_get_link_freq(pad, mul, div) \
|
||||||
|
_Generic(pad, \
|
||||||
|
struct media_pad *: __v4l2_get_link_freq_pad, \
|
||||||
|
struct v4l2_ctrl_handler *: __v4l2_get_link_freq_ctrl) \
|
||||||
|
(pad, mul, div)
|
||||||
|
s64 __v4l2_get_link_freq_pad(struct media_pad *pad, unsigned int mul,
|
||||||
|
unsigned int div);
|
||||||
|
#else
|
||||||
|
#define v4l2_get_link_freq(handler, mul, div) \
|
||||||
|
__v4l2_get_link_freq_ctrl(handler, mul, div)
|
||||||
|
#endif
|
||||||
|
s64 __v4l2_get_link_freq_ctrl(struct v4l2_ctrl_handler *handler,
|
||||||
|
unsigned int mul, unsigned int div);
|
||||||
|
|
||||||
void v4l2_simplify_fraction(u32 *numerator, u32 *denominator,
|
void v4l2_simplify_fraction(u32 *numerator, u32 *denominator,
|
||||||
unsigned int n_terms, unsigned int threshold);
|
unsigned int n_terms, unsigned int threshold);
|
||||||
|
Loading…
Reference in New Issue
Block a user