Message ID | 20240108075221.15757-2-sakari.ailus@linux.intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Add link frequency to bitmap helper | expand |
Hi Sakari, kernel test robot noticed the following build errors: [auto build test ERROR on media-tree/master] [also build test ERROR on linuxtv-media-stage/master sailus-media-tree/streams linus/master v6.7 next-20240108] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Sakari-Ailus/media-v4l-Add-a-helper-for-setting-up-link-frequencies-control/20240108-155716 base: git://linuxtv.org/media_tree.git master patch link: https://lore.kernel.org/r/20240108075221.15757-2-sakari.ailus%40linux.intel.com patch subject: [PATCH v2 1/4] media: v4l: Add a helper for setting up link-frequencies control config: x86_64-rhel-8.3-rust (https://download.01.org/0day-ci/archive/20240108/202401082245.yka9kMRc-lkp@intel.com/config) compiler: ClangBuiltLinux clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240108/202401082245.yka9kMRc-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202401082245.yka9kMRc-lkp@intel.com/ All errors (new ones prefixed by >>): >> drivers/media/v4l2-core/v4l2-common.c:634:19: error: use of undeclared identifier 'v4l2_link_frequencies_to_bitmap'; did you mean 'v4l2_link_freq_to_bitmap'? 634 | EXPORT_SYMBOL_GPL(v4l2_link_frequencies_to_bitmap); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | v4l2_link_freq_to_bitmap include/linux/export.h:87:48: note: expanded from macro 'EXPORT_SYMBOL_GPL' 87 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "GPL") | ^ include/linux/export.h:83:54: note: expanded from macro '_EXPORT_SYMBOL' 83 | #define _EXPORT_SYMBOL(sym, license) __EXPORT_SYMBOL(sym, license, "") | ^ include/linux/export.h:74:16: note: expanded from macro '__EXPORT_SYMBOL' 74 | extern typeof(sym) sym; \ | ^ drivers/media/v4l2-core/v4l2-common.c:589:5: note: 'v4l2_link_freq_to_bitmap' declared here 589 | int v4l2_link_freq_to_bitmap(struct device *dev, const u64 *fw_link_freqs, | ^ 1 error generated. vim +634 drivers/media/v4l2-core/v4l2-common.c 588 589 int v4l2_link_freq_to_bitmap(struct device *dev, const u64 *fw_link_freqs, 590 unsigned int num_of_fw_link_freqs, 591 const s64 *driver_link_freqs, 592 unsigned int num_of_driver_link_freqs, 593 unsigned long *bitmap) 594 { 595 unsigned int i; 596 597 *bitmap = 0; 598 599 if (!num_of_fw_link_freqs) { 600 dev_err(dev, "no link frequencies in firmware\n"); 601 return -ENODATA; 602 } 603 604 for (i = 0; i < num_of_fw_link_freqs; i++) { 605 unsigned int j; 606 607 for (j = 0; j < num_of_driver_link_freqs; j++) { 608 if (fw_link_freqs[i] != driver_link_freqs[j]) 609 continue; 610 611 dev_dbg(dev, "enabling link frequency %lld Hz\n", 612 driver_link_freqs[j]); 613 *bitmap |= BIT(j); 614 break; 615 } 616 } 617 618 if (!*bitmap) { 619 dev_err(dev, "no matching link frequencies found\n"); 620 621 dev_dbg(dev, "specified in firmware:\n"); 622 for (i = 0; i < num_of_fw_link_freqs; i++) 623 dev_dbg(dev, "\t%llu Hz\n", fw_link_freqs[i]); 624 625 dev_dbg(dev, "driver supported:\n"); 626 for (i = 0; i < num_of_driver_link_freqs; i++) 627 dev_dbg(dev, "\t%lld Hz\n", driver_link_freqs[i]); 628 629 return -ENOENT; 630 } 631 632 return 0; 633 } > 634 EXPORT_SYMBOL_GPL(v4l2_link_frequencies_to_bitmap);
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c index 273d83de2a87..353e94f52f5d 100644 --- a/drivers/media/v4l2-core/v4l2-common.c +++ b/drivers/media/v4l2-core/v4l2-common.c @@ -585,3 +585,50 @@ u32 v4l2_fraction_to_interval(u32 numerator, u32 denominator) return denominator ? numerator * multiplier / denominator : 0; } 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_frequencies_to_bitmap); diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h index acf5be24a5ca..cd2163f24f8a 100644 --- a/include/media/v4l2-common.h +++ b/include/media/v4l2-common.h @@ -547,6 +547,31 @@ void v4l2_simplify_fraction(u32 *numerator, u32 *denominator, unsigned int n_terms, unsigned int threshold); 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) { /*
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> --- drivers/media/v4l2-core/v4l2-common.c | 47 +++++++++++++++++++++++++++ include/media/v4l2-common.h | 25 ++++++++++++++ 2 files changed, 72 insertions(+)