media: v4l: Add a helper for setting up link-frequencies control
Add a helper for obtaining supported link frequencies in form most drivers need them. The result is a bitmap of supported controls. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
45db5c214c
commit
a68e88e2cf
2 changed files with 72 additions and 0 deletions
|
@ -585,3 +585,50 @@ u32 v4l2_fraction_to_interval(u32 numerator, u32 denominator)
|
||||||
return denominator ? numerator * multiplier / denominator : 0;
|
return denominator ? numerator * multiplier / denominator : 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(v4l2_fraction_to_interval);
|
EXPORT_SYMBOL_GPL(v4l2_fraction_to_interval);
|
||||||
|
|
||||||
|
int v4l2_link_freq_to_bitmap(struct device *dev, const u64 *fw_link_freqs,
|
||||||
|
unsigned int num_of_fw_link_freqs,
|
||||||
|
const s64 *driver_link_freqs,
|
||||||
|
unsigned int num_of_driver_link_freqs,
|
||||||
|
unsigned long *bitmap)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
*bitmap = 0;
|
||||||
|
|
||||||
|
if (!num_of_fw_link_freqs) {
|
||||||
|
dev_err(dev, "no link frequencies in firmware\n");
|
||||||
|
return -ENODATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < num_of_fw_link_freqs; i++) {
|
||||||
|
unsigned int j;
|
||||||
|
|
||||||
|
for (j = 0; j < num_of_driver_link_freqs; j++) {
|
||||||
|
if (fw_link_freqs[i] != driver_link_freqs[j])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
dev_dbg(dev, "enabling link frequency %lld Hz\n",
|
||||||
|
driver_link_freqs[j]);
|
||||||
|
*bitmap |= BIT(j);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!*bitmap) {
|
||||||
|
dev_err(dev, "no matching link frequencies found\n");
|
||||||
|
|
||||||
|
dev_dbg(dev, "specified in firmware:\n");
|
||||||
|
for (i = 0; i < num_of_fw_link_freqs; i++)
|
||||||
|
dev_dbg(dev, "\t%llu Hz\n", fw_link_freqs[i]);
|
||||||
|
|
||||||
|
dev_dbg(dev, "driver supported:\n");
|
||||||
|
for (i = 0; i < num_of_driver_link_freqs; i++)
|
||||||
|
dev_dbg(dev, "\t%lld Hz\n", driver_link_freqs[i]);
|
||||||
|
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(v4l2_link_freq_to_bitmap);
|
||||||
|
|
|
@ -547,6 +547,31 @@ void v4l2_simplify_fraction(u32 *numerator, u32 *denominator,
|
||||||
unsigned int n_terms, unsigned int threshold);
|
unsigned int n_terms, unsigned int threshold);
|
||||||
u32 v4l2_fraction_to_interval(u32 numerator, u32 denominator);
|
u32 v4l2_fraction_to_interval(u32 numerator, u32 denominator);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* v4l2_link_freq_to_bitmap - Figure out platform-supported link frequencies
|
||||||
|
* @dev: The struct device
|
||||||
|
* @fw_link_freqs: Array of link frequencies from firmware
|
||||||
|
* @num_of_fw_link_freqs: Number of entries in @fw_link_freqs
|
||||||
|
* @driver_link_freqs: Array of link frequencies supported by the driver
|
||||||
|
* @num_of_driver_link_freqs: Number of entries in @driver_link_freqs
|
||||||
|
* @bitmap: Bitmap of driver-supported link frequencies found in @fw_link_freqs
|
||||||
|
*
|
||||||
|
* This function checks which driver-supported link frequencies are enabled in
|
||||||
|
* system firmware and sets the corresponding bits in @bitmap (after first
|
||||||
|
* zeroing it).
|
||||||
|
*
|
||||||
|
* Return values:
|
||||||
|
* 0: Success
|
||||||
|
* -ENOENT: No match found between driver-supported link frequencies and
|
||||||
|
* those available in firmware.
|
||||||
|
* -ENODATA: No link frequencies were specified in firmware.
|
||||||
|
*/
|
||||||
|
int v4l2_link_freq_to_bitmap(struct device *dev, const u64 *fw_link_freqs,
|
||||||
|
unsigned int num_of_fw_link_freqs,
|
||||||
|
const s64 *driver_link_freqs,
|
||||||
|
unsigned int num_of_driver_link_freqs,
|
||||||
|
unsigned long *bitmap);
|
||||||
|
|
||||||
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…
Reference in a new issue