* [PATCH 0/4] Add link frequency to bitmap helper
@ 2023-12-11 14:06 Sakari Ailus
2023-12-11 14:06 ` [PATCH 1/4] media: v4l: Add a helper for setting up link-frequencies control Sakari Ailus
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Sakari Ailus @ 2023-12-11 14:06 UTC (permalink / raw)
To: linux-media
Cc: laurent.pinchart, jacopo.mondi, Bingbu Cao, Tianshu Qiu, Hans Verkuil
Hi folks,
This set adds a little helper for sensor drivers to match link frequencies
from system firmware with those supported the driver and generate a bitmap
suitable for passing to the control framework.
Imx319, imx334 and imx355 drivers are converted to use the helper, too.
I've tested imx319 and imx355 drivers.
Sakari Ailus (4):
media: v4l: Add a helper for setting up link-frequencies control
media: imx334: Use v4l2_link_frequencies_to_bitmap helper
media: imx319: Use v4l2_link_frequencies_to_bitmap helper
media: imx355: Use v4l2_link_frequencies_to_bitmap helper
drivers/media/i2c/imx319.c | 53 +++++++--------------------
drivers/media/i2c/imx334.c | 41 +++++++--------------
drivers/media/i2c/imx355.c | 53 +++++++--------------------
drivers/media/v4l2-core/v4l2-common.c | 48 ++++++++++++++++++++++++
include/media/v4l2-common.h | 27 ++++++++++++++
5 files changed, 116 insertions(+), 106 deletions(-)
--
2.39.2
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/4] media: v4l: Add a helper for setting up link-frequencies control
2023-12-11 14:06 [PATCH 0/4] Add link frequency to bitmap helper Sakari Ailus
@ 2023-12-11 14:06 ` Sakari Ailus
2023-12-12 16:07 ` kernel test robot
2023-12-11 14:06 ` [PATCH 2/4] media: imx334: Use v4l2_link_frequencies_to_bitmap helper Sakari Ailus
` (2 subsequent siblings)
3 siblings, 1 reply; 9+ messages in thread
From: Sakari Ailus @ 2023-12-11 14:06 UTC (permalink / raw)
To: linux-media
Cc: laurent.pinchart, jacopo.mondi, Bingbu Cao, Tianshu Qiu, Hans Verkuil
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 | 48 +++++++++++++++++++++++++++
include/media/v4l2-common.h | 27 +++++++++++++++
2 files changed, 75 insertions(+)
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
index e9e7e70fa24e..63302009db5f 100644
--- a/drivers/media/v4l2-core/v4l2-common.c
+++ b/drivers/media/v4l2-core/v4l2-common.c
@@ -585,3 +585,51 @@ 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_frequencies_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 d278836fd9cb..adf997baf659 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -547,6 +547,33 @@ 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_frequencies_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_frequencies_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)
{
/*
--
2.39.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/4] media: imx334: Use v4l2_link_frequencies_to_bitmap helper
2023-12-11 14:06 [PATCH 0/4] Add link frequency to bitmap helper Sakari Ailus
2023-12-11 14:06 ` [PATCH 1/4] media: v4l: Add a helper for setting up link-frequencies control Sakari Ailus
@ 2023-12-11 14:06 ` Sakari Ailus
2023-12-11 20:37 ` kernel test robot
2023-12-11 14:06 ` [PATCH 3/4] media: imx319: " Sakari Ailus
2023-12-11 14:06 ` [PATCH 4/4] media: imx355: " Sakari Ailus
3 siblings, 1 reply; 9+ messages in thread
From: Sakari Ailus @ 2023-12-11 14:06 UTC (permalink / raw)
To: linux-media
Cc: laurent.pinchart, jacopo.mondi, Bingbu Cao, Tianshu Qiu, Hans Verkuil
Use the v4l2_link_frequencies_to_bitmap() helper to figure out which
driver-supported link frequencies can be used on a given system.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
drivers/media/i2c/imx334.c | 41 ++++++++++++--------------------------
1 file changed, 13 insertions(+), 28 deletions(-)
diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c
index 6725b3e2a73e..76b88bbcb40a 100644
--- a/drivers/media/i2c/imx334.c
+++ b/drivers/media/i2c/imx334.c
@@ -136,7 +136,7 @@ struct imx334_mode {
* @vblank: Vertical blanking in lines
* @cur_mode: Pointer to current selected sensor mode
* @mutex: Mutex for serializing sensor controls
- * @menu_skip_mask: Menu skip mask for link_freq_ctrl
+ * @link_freq_bitmap: Menu bitmap for link_freq_ctrl
* @cur_code: current selected format code
*/
struct imx334 {
@@ -158,7 +158,7 @@ struct imx334 {
u32 vblank;
const struct imx334_mode *cur_mode;
struct mutex mutex;
- unsigned long menu_skip_mask;
+ unsigned long link_freq_bitmap;
u32 cur_code;
};
@@ -954,9 +954,9 @@ static int imx334_init_state(struct v4l2_subdev *sd,
imx334_fill_pad_format(imx334, imx334->cur_mode, &fmt);
__v4l2_ctrl_modify_range(imx334->link_freq_ctrl, 0,
- __fls(imx334->menu_skip_mask),
- ~(imx334->menu_skip_mask),
- __ffs(imx334->menu_skip_mask));
+ __fls(imx334->link_freq_bitmap),
+ ~(imx334->link_freq_bitmap),
+ __ffs(imx334->link_freq_bitmap));
mutex_unlock(&imx334->mutex);
@@ -1157,26 +1157,11 @@ static int imx334_parse_hw_config(struct imx334 *imx334)
goto done_endpoint_free;
}
- if (!bus_cfg.nr_of_link_frequencies) {
- dev_err(imx334->dev, "no link frequencies defined");
- ret = -EINVAL;
- goto done_endpoint_free;
- }
-
- for (i = 0; i < bus_cfg.nr_of_link_frequencies; i++) {
- for (j = 0; j < ARRAY_SIZE(link_freq); j++) {
- if (bus_cfg.link_frequencies[i] == link_freq[j]) {
- set_bit(j, &imx334->menu_skip_mask);
- break;
- }
- }
-
- if (j == ARRAY_SIZE(link_freq)) {
- ret = dev_err_probe(imx334->dev, -EINVAL,
- "no supported link freq found\n");
- goto done_endpoint_free;
- }
- }
+ ret = v4l2_link_frequencies_to_bitmap(imx334->dev,
+ bus_cfg.link_frequencies,
+ bus_cfg.nr_of_link_frequencies,
+ link_freq, ARRAY_SIZE(link_freq),
+ &imx334->link_freq_bitmap);
done_endpoint_free:
v4l2_fwnode_endpoint_free(&bus_cfg);
@@ -1310,8 +1295,8 @@ static int imx334_init_controls(struct imx334 *imx334)
imx334->link_freq_ctrl = v4l2_ctrl_new_int_menu(ctrl_hdlr,
&imx334_ctrl_ops,
V4L2_CID_LINK_FREQ,
- __fls(imx334->menu_skip_mask),
- __ffs(imx334->menu_skip_mask),
+ __fls(imx334->link_freq_bitmap),
+ __ffs(imx334->link_freq_bitmap),
link_freq);
if (imx334->link_freq_ctrl)
@@ -1386,7 +1371,7 @@ static int imx334_probe(struct i2c_client *client)
}
/* Set default mode to max resolution */
- imx334->cur_mode = &supported_modes[__ffs(imx334->menu_skip_mask)];
+ imx334->cur_mode = &supported_modes[__ffs(imx334->link_freq_bitmap)];
imx334->cur_code = imx334_mbus_codes[0];
imx334->vblank = imx334->cur_mode->vblank;
--
2.39.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/4] media: imx319: Use v4l2_link_frequencies_to_bitmap helper
2023-12-11 14:06 [PATCH 0/4] Add link frequency to bitmap helper Sakari Ailus
2023-12-11 14:06 ` [PATCH 1/4] media: v4l: Add a helper for setting up link-frequencies control Sakari Ailus
2023-12-11 14:06 ` [PATCH 2/4] media: imx334: Use v4l2_link_frequencies_to_bitmap helper Sakari Ailus
@ 2023-12-11 14:06 ` Sakari Ailus
2023-12-13 2:16 ` Cao, Bingbu
2023-12-11 14:06 ` [PATCH 4/4] media: imx355: " Sakari Ailus
3 siblings, 1 reply; 9+ messages in thread
From: Sakari Ailus @ 2023-12-11 14:06 UTC (permalink / raw)
To: linux-media
Cc: laurent.pinchart, jacopo.mondi, Bingbu Cao, Tianshu Qiu, Hans Verkuil
Use the v4l2_link_frequencies_to_bitmap() helper to figure out which
driver-supported link frequencies can be used on a given system.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
drivers/media/i2c/imx319.c | 53 ++++++++++----------------------------
1 file changed, 14 insertions(+), 39 deletions(-)
diff --git a/drivers/media/i2c/imx319.c b/drivers/media/i2c/imx319.c
index e47eff672e0c..3fdda6f7d01a 100644
--- a/drivers/media/i2c/imx319.c
+++ b/drivers/media/i2c/imx319.c
@@ -70,7 +70,7 @@
#define IMX319_REG_ORIENTATION 0x0101
/* default link frequency and external clock */
-#define IMX319_LINK_FREQ_DEFAULT 482400000
+#define IMX319_LINK_FREQ_DEFAULT 482400000LL
#define IMX319_EXT_CLK 19200000
#define IMX319_LINK_FREQ_INDEX 0
@@ -107,8 +107,7 @@ struct imx319_mode {
struct imx319_hwcfg {
u32 ext_clk; /* sensor external clk */
- s64 *link_freqs; /* CSI-2 link frequencies */
- unsigned int nr_of_link_freqs;
+ unsigned long link_freq_bitmap;
};
struct imx319 {
@@ -129,7 +128,6 @@ struct imx319 {
const struct imx319_mode *cur_mode;
struct imx319_hwcfg *hwcfg;
- s64 link_def_freq; /* CSI-2 link default frequency */
/*
* Mutex for serialized access:
@@ -1654,7 +1652,10 @@ static const char * const imx319_test_pattern_menu[] = {
"Pseudorandom Sequence (PN9)",
};
-/* supported link frequencies */
+/*
+ * When adding more than the one below, make sure the disallowed ones will
+ * actually be disabled in the LINK_FREQ control.
+ */
static const s64 link_freq_menu_items[] = {
IMX319_LINK_FREQ_DEFAULT,
};
@@ -2058,7 +2059,7 @@ imx319_set_pad_format(struct v4l2_subdev *sd,
*framefmt = fmt->format;
} else {
imx319->cur_mode = mode;
- pixel_rate = imx319->link_def_freq * 2 * 4;
+ pixel_rate = IMX319_LINK_FREQ_DEFAULT * 2 * 4;
do_div(pixel_rate, 10);
__v4l2_ctrl_s_ctrl_int64(imx319->pixel_rate, pixel_rate);
/* Update limits and set FPS to default */
@@ -2255,7 +2256,7 @@ static int imx319_init_controls(struct imx319 *imx319)
imx319->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
/* pixel_rate = link_freq * 2 * nr_of_lanes / bits_per_sample */
- pixel_rate = imx319->link_def_freq * 2 * 4;
+ pixel_rate = IMX319_LINK_FREQ_DEFAULT * 2 * 4;
do_div(pixel_rate, 10);
/* By default, PIXEL_RATE is read only */
imx319->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &imx319_ctrl_ops,
@@ -2332,7 +2333,6 @@ static struct imx319_hwcfg *imx319_get_hwcfg(struct device *dev)
};
struct fwnode_handle *ep;
struct fwnode_handle *fwnode = dev_fwnode(dev);
- unsigned int i;
int ret;
if (!fwnode)
@@ -2364,24 +2364,14 @@ static struct imx319_hwcfg *imx319_get_hwcfg(struct device *dev)
goto out_err;
}
- dev_dbg(dev, "num of link freqs: %d", bus_cfg.nr_of_link_frequencies);
- if (!bus_cfg.nr_of_link_frequencies) {
- dev_warn(dev, "no link frequencies defined");
- goto out_err;
- }
-
- cfg->nr_of_link_freqs = bus_cfg.nr_of_link_frequencies;
- cfg->link_freqs = devm_kcalloc(dev,
- bus_cfg.nr_of_link_frequencies + 1,
- sizeof(*cfg->link_freqs), GFP_KERNEL);
- if (!cfg->link_freqs)
+ ret = v4l2_link_frequencies_to_bitmap(dev, bus_cfg.link_frequencies,
+ bus_cfg.nr_of_link_frequencies,
+ link_freq_menu_items,
+ ARRAY_SIZE(link_freq_menu_items),
+ &cfg->link_freq_bitmap);
+ if (ret)
goto out_err;
- for (i = 0; i < bus_cfg.nr_of_link_frequencies; i++) {
- cfg->link_freqs[i] = bus_cfg.link_frequencies[i];
- dev_dbg(dev, "link_freq[%d] = %lld", i, cfg->link_freqs[i]);
- }
-
v4l2_fwnode_endpoint_free(&bus_cfg);
fwnode_handle_put(ep);
return cfg;
@@ -2397,7 +2387,6 @@ static int imx319_probe(struct i2c_client *client)
struct imx319 *imx319;
bool full_power;
int ret;
- u32 i;
imx319 = devm_kzalloc(&client->dev, sizeof(*imx319), GFP_KERNEL);
if (!imx319)
@@ -2425,20 +2414,6 @@ static int imx319_probe(struct i2c_client *client)
goto error_probe;
}
- imx319->link_def_freq = link_freq_menu_items[IMX319_LINK_FREQ_INDEX];
- for (i = 0; i < imx319->hwcfg->nr_of_link_freqs; i++) {
- if (imx319->hwcfg->link_freqs[i] == imx319->link_def_freq) {
- dev_dbg(&client->dev, "link freq index %d matched", i);
- break;
- }
- }
-
- if (i == imx319->hwcfg->nr_of_link_freqs) {
- dev_err(&client->dev, "no link frequency supported");
- ret = -EINVAL;
- goto error_probe;
- }
-
/* Set default mode to max resolution */
imx319->cur_mode = &supported_modes[0];
--
2.39.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 4/4] media: imx355: Use v4l2_link_frequencies_to_bitmap helper
2023-12-11 14:06 [PATCH 0/4] Add link frequency to bitmap helper Sakari Ailus
` (2 preceding siblings ...)
2023-12-11 14:06 ` [PATCH 3/4] media: imx319: " Sakari Ailus
@ 2023-12-11 14:06 ` Sakari Ailus
3 siblings, 0 replies; 9+ messages in thread
From: Sakari Ailus @ 2023-12-11 14:06 UTC (permalink / raw)
To: linux-media
Cc: laurent.pinchart, jacopo.mondi, Bingbu Cao, Tianshu Qiu, Hans Verkuil
Use the v4l2_link_frequencies_to_bitmap() helper to figure out which
driver-supported link frequencies can be used on a given system.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
drivers/media/i2c/imx355.c | 53 ++++++++++----------------------------
1 file changed, 14 insertions(+), 39 deletions(-)
diff --git a/drivers/media/i2c/imx355.c b/drivers/media/i2c/imx355.c
index 8c995c58743a..51e3f3ae53da 100644
--- a/drivers/media/i2c/imx355.c
+++ b/drivers/media/i2c/imx355.c
@@ -56,7 +56,7 @@
#define IMX355_REG_ORIENTATION 0x0101
/* default link frequency and external clock */
-#define IMX355_LINK_FREQ_DEFAULT 360000000
+#define IMX355_LINK_FREQ_DEFAULT 360000000LL
#define IMX355_EXT_CLK 19200000
#define IMX355_LINK_FREQ_INDEX 0
@@ -93,8 +93,7 @@ struct imx355_mode {
struct imx355_hwcfg {
u32 ext_clk; /* sensor external clk */
- s64 *link_freqs; /* CSI-2 link frequencies */
- unsigned int nr_of_link_freqs;
+ unsigned long link_freq_bitmap;
};
struct imx355 {
@@ -115,7 +114,6 @@ struct imx355 {
const struct imx355_mode *cur_mode;
struct imx355_hwcfg *hwcfg;
- s64 link_def_freq; /* CSI-2 link default frequency */
/*
* Mutex for serialized access:
@@ -879,7 +877,10 @@ static const char * const imx355_test_pattern_menu[] = {
"Pseudorandom Sequence (PN9)",
};
-/* supported link frequencies */
+/*
+ * When adding more than the one below, make sure the disallowed ones will
+ * actually be disabled in the LINK_FREQ control.
+ */
static const s64 link_freq_menu_items[] = {
IMX355_LINK_FREQ_DEFAULT,
};
@@ -1356,7 +1357,7 @@ imx355_set_pad_format(struct v4l2_subdev *sd,
*framefmt = fmt->format;
} else {
imx355->cur_mode = mode;
- pixel_rate = imx355->link_def_freq * 2 * 4;
+ pixel_rate = IMX355_LINK_FREQ_DEFAULT * 2 * 4;
do_div(pixel_rate, 10);
__v4l2_ctrl_s_ctrl_int64(imx355->pixel_rate, pixel_rate);
/* Update limits and set FPS to default */
@@ -1543,7 +1544,7 @@ static int imx355_init_controls(struct imx355 *imx355)
imx355->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
/* pixel_rate = link_freq * 2 * nr_of_lanes / bits_per_sample */
- pixel_rate = imx355->link_def_freq * 2 * 4;
+ pixel_rate = IMX355_LINK_FREQ_DEFAULT * 2 * 4;
do_div(pixel_rate, 10);
/* By default, PIXEL_RATE is read only */
imx355->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &imx355_ctrl_ops,
@@ -1620,7 +1621,6 @@ static struct imx355_hwcfg *imx355_get_hwcfg(struct device *dev)
};
struct fwnode_handle *ep;
struct fwnode_handle *fwnode = dev_fwnode(dev);
- unsigned int i;
int ret;
if (!fwnode)
@@ -1652,24 +1652,14 @@ static struct imx355_hwcfg *imx355_get_hwcfg(struct device *dev)
goto out_err;
}
- dev_dbg(dev, "num of link freqs: %d", bus_cfg.nr_of_link_frequencies);
- if (!bus_cfg.nr_of_link_frequencies) {
- dev_warn(dev, "no link frequencies defined");
- goto out_err;
- }
-
- cfg->nr_of_link_freqs = bus_cfg.nr_of_link_frequencies;
- cfg->link_freqs = devm_kcalloc(dev,
- bus_cfg.nr_of_link_frequencies + 1,
- sizeof(*cfg->link_freqs), GFP_KERNEL);
- if (!cfg->link_freqs)
+ ret = v4l2_link_frequencies_to_bitmap(dev, bus_cfg.link_frequencies,
+ bus_cfg.nr_of_link_frequencies,
+ link_freq_menu_items,
+ ARRAY_SIZE(link_freq_menu_items),
+ &cfg->link_freq_bitmap);
+ if (ret)
goto out_err;
- for (i = 0; i < bus_cfg.nr_of_link_frequencies; i++) {
- cfg->link_freqs[i] = bus_cfg.link_frequencies[i];
- dev_dbg(dev, "link_freq[%d] = %lld", i, cfg->link_freqs[i]);
- }
-
v4l2_fwnode_endpoint_free(&bus_cfg);
fwnode_handle_put(ep);
return cfg;
@@ -1684,7 +1674,6 @@ static int imx355_probe(struct i2c_client *client)
{
struct imx355 *imx355;
int ret;
- u32 i;
imx355 = devm_kzalloc(&client->dev, sizeof(*imx355), GFP_KERNEL);
if (!imx355)
@@ -1709,20 +1698,6 @@ static int imx355_probe(struct i2c_client *client)
goto error_probe;
}
- imx355->link_def_freq = link_freq_menu_items[IMX355_LINK_FREQ_INDEX];
- for (i = 0; i < imx355->hwcfg->nr_of_link_freqs; i++) {
- if (imx355->hwcfg->link_freqs[i] == imx355->link_def_freq) {
- dev_dbg(&client->dev, "link freq index %d matched", i);
- break;
- }
- }
-
- if (i == imx355->hwcfg->nr_of_link_freqs) {
- dev_err(&client->dev, "no link frequency supported");
- ret = -EINVAL;
- goto error_probe;
- }
-
/* Set default mode to max resolution */
imx355->cur_mode = &supported_modes[0];
--
2.39.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/4] media: imx334: Use v4l2_link_frequencies_to_bitmap helper
2023-12-11 14:06 ` [PATCH 2/4] media: imx334: Use v4l2_link_frequencies_to_bitmap helper Sakari Ailus
@ 2023-12-11 20:37 ` kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2023-12-11 20:37 UTC (permalink / raw)
To: Sakari Ailus, linux-media
Cc: llvm, oe-kbuild-all, laurent.pinchart, jacopo.mondi, Bingbu Cao,
Tianshu Qiu, Hans Verkuil
Hi Sakari,
kernel test robot noticed the following build warnings:
[auto build test WARNING on media-tree/master]
[also build test WARNING on linuxtv-media-stage/master linus/master v6.7-rc5 next-20231211]
[cannot apply to sailus-media-tree/streams]
[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/20231211-220844
base: git://linuxtv.org/media_tree.git master
patch link: https://lore.kernel.org/r/20231211140658.366268-3-sakari.ailus%40linux.intel.com
patch subject: [PATCH 2/4] media: imx334: Use v4l2_link_frequencies_to_bitmap helper
config: x86_64-allyesconfig (https://download.01.org/0day-ci/archive/20231212/202312120434.56RvVcwQ-lkp@intel.com/config)
compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231212/202312120434.56RvVcwQ-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/202312120434.56RvVcwQ-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/media/i2c/imx334.c:1115:15: warning: unused variable 'i' [-Wunused-variable]
unsigned int i, j;
^
>> drivers/media/i2c/imx334.c:1115:18: warning: unused variable 'j' [-Wunused-variable]
unsigned int i, j;
^
2 warnings generated.
vim +/i +1115 drivers/media/i2c/imx334.c
9746b11715c394 Martina Krasteva 2021-02-03 1100
9746b11715c394 Martina Krasteva 2021-02-03 1101 /**
9746b11715c394 Martina Krasteva 2021-02-03 1102 * imx334_parse_hw_config() - Parse HW configuration and check if supported
9746b11715c394 Martina Krasteva 2021-02-03 1103 * @imx334: pointer to imx334 device
9746b11715c394 Martina Krasteva 2021-02-03 1104 *
9746b11715c394 Martina Krasteva 2021-02-03 1105 * Return: 0 if successful, error code otherwise.
9746b11715c394 Martina Krasteva 2021-02-03 1106 */
9746b11715c394 Martina Krasteva 2021-02-03 1107 static int imx334_parse_hw_config(struct imx334 *imx334)
9746b11715c394 Martina Krasteva 2021-02-03 1108 {
9746b11715c394 Martina Krasteva 2021-02-03 1109 struct fwnode_handle *fwnode = dev_fwnode(imx334->dev);
9746b11715c394 Martina Krasteva 2021-02-03 1110 struct v4l2_fwnode_endpoint bus_cfg = {
9746b11715c394 Martina Krasteva 2021-02-03 1111 .bus_type = V4L2_MBUS_CSI2_DPHY
9746b11715c394 Martina Krasteva 2021-02-03 1112 };
9746b11715c394 Martina Krasteva 2021-02-03 1113 struct fwnode_handle *ep;
9746b11715c394 Martina Krasteva 2021-02-03 1114 unsigned long rate;
e3269ea5148d39 Shravan Chippa 2023-04-14 @1115 unsigned int i, j;
9746b11715c394 Martina Krasteva 2021-02-03 1116 int ret;
9746b11715c394 Martina Krasteva 2021-02-03 1117
9746b11715c394 Martina Krasteva 2021-02-03 1118 if (!fwnode)
9746b11715c394 Martina Krasteva 2021-02-03 1119 return -ENXIO;
9746b11715c394 Martina Krasteva 2021-02-03 1120
9746b11715c394 Martina Krasteva 2021-02-03 1121 /* Request optional reset pin */
9746b11715c394 Martina Krasteva 2021-02-03 1122 imx334->reset_gpio = devm_gpiod_get_optional(imx334->dev, "reset",
9746b11715c394 Martina Krasteva 2021-02-03 1123 GPIOD_OUT_LOW);
9746b11715c394 Martina Krasteva 2021-02-03 1124 if (IS_ERR(imx334->reset_gpio)) {
c702e2f70275db Hans Verkuil 2021-02-08 1125 dev_err(imx334->dev, "failed to get reset gpio %ld",
c702e2f70275db Hans Verkuil 2021-02-08 1126 PTR_ERR(imx334->reset_gpio));
9746b11715c394 Martina Krasteva 2021-02-03 1127 return PTR_ERR(imx334->reset_gpio);
9746b11715c394 Martina Krasteva 2021-02-03 1128 }
9746b11715c394 Martina Krasteva 2021-02-03 1129
9746b11715c394 Martina Krasteva 2021-02-03 1130 /* Get sensor input clock */
9746b11715c394 Martina Krasteva 2021-02-03 1131 imx334->inclk = devm_clk_get(imx334->dev, NULL);
9746b11715c394 Martina Krasteva 2021-02-03 1132 if (IS_ERR(imx334->inclk)) {
9746b11715c394 Martina Krasteva 2021-02-03 1133 dev_err(imx334->dev, "could not get inclk");
9746b11715c394 Martina Krasteva 2021-02-03 1134 return PTR_ERR(imx334->inclk);
9746b11715c394 Martina Krasteva 2021-02-03 1135 }
9746b11715c394 Martina Krasteva 2021-02-03 1136
9746b11715c394 Martina Krasteva 2021-02-03 1137 rate = clk_get_rate(imx334->inclk);
9746b11715c394 Martina Krasteva 2021-02-03 1138 if (rate != IMX334_INCLK_RATE) {
9746b11715c394 Martina Krasteva 2021-02-03 1139 dev_err(imx334->dev, "inclk frequency mismatch");
9746b11715c394 Martina Krasteva 2021-02-03 1140 return -EINVAL;
9746b11715c394 Martina Krasteva 2021-02-03 1141 }
9746b11715c394 Martina Krasteva 2021-02-03 1142
9746b11715c394 Martina Krasteva 2021-02-03 1143 ep = fwnode_graph_get_next_endpoint(fwnode, NULL);
9746b11715c394 Martina Krasteva 2021-02-03 1144 if (!ep)
9746b11715c394 Martina Krasteva 2021-02-03 1145 return -ENXIO;
9746b11715c394 Martina Krasteva 2021-02-03 1146
9746b11715c394 Martina Krasteva 2021-02-03 1147 ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
9746b11715c394 Martina Krasteva 2021-02-03 1148 fwnode_handle_put(ep);
9746b11715c394 Martina Krasteva 2021-02-03 1149 if (ret)
9746b11715c394 Martina Krasteva 2021-02-03 1150 return ret;
9746b11715c394 Martina Krasteva 2021-02-03 1151
9746b11715c394 Martina Krasteva 2021-02-03 1152 if (bus_cfg.bus.mipi_csi2.num_data_lanes != IMX334_NUM_DATA_LANES) {
9746b11715c394 Martina Krasteva 2021-02-03 1153 dev_err(imx334->dev,
9746b11715c394 Martina Krasteva 2021-02-03 1154 "number of CSI2 data lanes %d is not supported",
9746b11715c394 Martina Krasteva 2021-02-03 1155 bus_cfg.bus.mipi_csi2.num_data_lanes);
9746b11715c394 Martina Krasteva 2021-02-03 1156 ret = -EINVAL;
9746b11715c394 Martina Krasteva 2021-02-03 1157 goto done_endpoint_free;
9746b11715c394 Martina Krasteva 2021-02-03 1158 }
9746b11715c394 Martina Krasteva 2021-02-03 1159
4b895656c4c2b2 Sakari Ailus 2023-12-11 1160 ret = v4l2_link_frequencies_to_bitmap(imx334->dev,
4b895656c4c2b2 Sakari Ailus 2023-12-11 1161 bus_cfg.link_frequencies,
4b895656c4c2b2 Sakari Ailus 2023-12-11 1162 bus_cfg.nr_of_link_frequencies,
4b895656c4c2b2 Sakari Ailus 2023-12-11 1163 link_freq, ARRAY_SIZE(link_freq),
4b895656c4c2b2 Sakari Ailus 2023-12-11 1164 &imx334->link_freq_bitmap);
9746b11715c394 Martina Krasteva 2021-02-03 1165
9746b11715c394 Martina Krasteva 2021-02-03 1166 done_endpoint_free:
9746b11715c394 Martina Krasteva 2021-02-03 1167 v4l2_fwnode_endpoint_free(&bus_cfg);
9746b11715c394 Martina Krasteva 2021-02-03 1168
9746b11715c394 Martina Krasteva 2021-02-03 1169 return ret;
9746b11715c394 Martina Krasteva 2021-02-03 1170 }
9746b11715c394 Martina Krasteva 2021-02-03 1171
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/4] media: v4l: Add a helper for setting up link-frequencies control
2023-12-11 14:06 ` [PATCH 1/4] media: v4l: Add a helper for setting up link-frequencies control Sakari Ailus
@ 2023-12-12 16:07 ` kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2023-12-12 16:07 UTC (permalink / raw)
To: Sakari Ailus, linux-media
Cc: oe-kbuild-all, laurent.pinchart, jacopo.mondi, Bingbu Cao,
Tianshu Qiu, Hans Verkuil
Hi Sakari,
kernel test robot noticed the following build warnings:
[auto build test WARNING on media-tree/master]
[also build test WARNING on linuxtv-media-stage/master sailus-media-tree/streams linus/master v6.7-rc5 next-20231212]
[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/20231211-220844
base: git://linuxtv.org/media_tree.git master
patch link: https://lore.kernel.org/r/20231211140658.366268-2-sakari.ailus%40linux.intel.com
patch subject: [PATCH 1/4] media: v4l: Add a helper for setting up link-frequencies control
reproduce: (https://download.01.org/0day-ci/archive/20231212/202312122344.1l0j6bV6-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/202312122344.1l0j6bV6-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> Documentation/driver-api/media/v4l2-common:6: ./include/media/v4l2-common.h:567: WARNING: Unexpected indentation.
>> Documentation/driver-api/media/v4l2-common:6: ./include/media/v4l2-common.h:568: WARNING: Block quote ends without a blank line; unexpected unindent.
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH 3/4] media: imx319: Use v4l2_link_frequencies_to_bitmap helper
2023-12-11 14:06 ` [PATCH 3/4] media: imx319: " Sakari Ailus
@ 2023-12-13 2:16 ` Cao, Bingbu
2023-12-13 9:51 ` Sakari Ailus
0 siblings, 1 reply; 9+ messages in thread
From: Cao, Bingbu @ 2023-12-13 2:16 UTC (permalink / raw)
To: Sakari Ailus, linux-media
Cc: laurent.pinchart, jacopo.mondi, Qiu, Tian Shu, Hans Verkuil
Sakari,
Thanks for the patch.
------------------------------------------------------------------------
BRs,
Bingbu Cao
>-----Original Message-----
>From: Sakari Ailus <sakari.ailus@linux.intel.com>
>Sent: Monday, December 11, 2023 10:07 PM
>To: linux-media@vger.kernel.org
>Cc: laurent.pinchart@ideasonboard.com; jacopo.mondi@ideasonboard.com; Cao,
>Bingbu <bingbu.cao@intel.com>; Qiu, Tian Shu <tian.shu.qiu@intel.com>; Hans
>Verkuil <hverkuil-cisco@xs4all.nl>
>Subject: [PATCH 3/4] media: imx319: Use v4l2_link_frequencies_to_bitmap
>helper
>
>Use the v4l2_link_frequencies_to_bitmap() helper to figure out which
>driver-supported link frequencies can be used on a given system.
>
>Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
>---
> drivers/media/i2c/imx319.c | 53 ++++++++++----------------------------
> 1 file changed, 14 insertions(+), 39 deletions(-)
>
>diff --git a/drivers/media/i2c/imx319.c b/drivers/media/i2c/imx319.c index
>e47eff672e0c..3fdda6f7d01a 100644
>--- a/drivers/media/i2c/imx319.c
>+++ b/drivers/media/i2c/imx319.c
>@@ -70,7 +70,7 @@
> #define IMX319_REG_ORIENTATION 0x0101
>
> /* default link frequency and external clock */
>-#define IMX319_LINK_FREQ_DEFAULT 482400000
>+#define IMX319_LINK_FREQ_DEFAULT 482400000LL
> #define IMX319_EXT_CLK 19200000
> #define IMX319_LINK_FREQ_INDEX 0
>
>@@ -107,8 +107,7 @@ struct imx319_mode {
>
> struct imx319_hwcfg {
> u32 ext_clk; /* sensor external clk */
>- s64 *link_freqs; /* CSI-2 link frequencies */
>- unsigned int nr_of_link_freqs;
>+ unsigned long link_freq_bitmap;
> };
>
> struct imx319 {
>@@ -129,7 +128,6 @@ struct imx319 {
> const struct imx319_mode *cur_mode;
>
> struct imx319_hwcfg *hwcfg;
>- s64 link_def_freq; /* CSI-2 link default frequency */
>
> /*
> * Mutex for serialized access:
>@@ -1654,7 +1652,10 @@ static const char * const imx319_test_pattern_menu[]
>= {
> "Pseudorandom Sequence (PN9)",
> };
>
>-/* supported link frequencies */
>+/*
>+ * When adding more than the one below, make sure the disallowed ones
>+will
>+ * actually be disabled in the LINK_FREQ control.
>+ */
> static const s64 link_freq_menu_items[] = {
> IMX319_LINK_FREQ_DEFAULT,
> };
>@@ -2058,7 +2059,7 @@ imx319_set_pad_format(struct v4l2_subdev *sd,
> *framefmt = fmt->format;
> } else {
> imx319->cur_mode = mode;
>- pixel_rate = imx319->link_def_freq * 2 * 4;
>+ pixel_rate = IMX319_LINK_FREQ_DEFAULT * 2 * 4;
> do_div(pixel_rate, 10);
> __v4l2_ctrl_s_ctrl_int64(imx319->pixel_rate, pixel_rate);
> /* Update limits and set FPS to default */ @@ -2255,7 +2256,7
>@@ static int imx319_init_controls(struct imx319 *imx319)
> imx319->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
>
> /* pixel_rate = link_freq * 2 * nr_of_lanes / bits_per_sample */
>- pixel_rate = imx319->link_def_freq * 2 * 4;
>+ pixel_rate = IMX319_LINK_FREQ_DEFAULT * 2 * 4;
> do_div(pixel_rate, 10);
> /* By default, PIXEL_RATE is read only */
> imx319->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &imx319_ctrl_ops,
>@@ -2332,7 +2333,6 @@ static struct imx319_hwcfg *imx319_get_hwcfg(struct
>device *dev)
> };
> struct fwnode_handle *ep;
> struct fwnode_handle *fwnode = dev_fwnode(dev);
>- unsigned int i;
> int ret;
>
> if (!fwnode)
>@@ -2364,24 +2364,14 @@ static struct imx319_hwcfg *imx319_get_hwcfg(struct
>device *dev)
> goto out_err;
> }
>
>- dev_dbg(dev, "num of link freqs: %d",
>bus_cfg.nr_of_link_frequencies);
>- if (!bus_cfg.nr_of_link_frequencies) {
>- dev_warn(dev, "no link frequencies defined");
>- goto out_err;
>- }
>-
>- cfg->nr_of_link_freqs = bus_cfg.nr_of_link_frequencies;
>- cfg->link_freqs = devm_kcalloc(dev,
>- bus_cfg.nr_of_link_frequencies + 1,
>- sizeof(*cfg->link_freqs), GFP_KERNEL);
>- if (!cfg->link_freqs)
>+ ret = v4l2_link_frequencies_to_bitmap(dev, bus_cfg.link_frequencies,
>+ bus_cfg.nr_of_link_frequencies,
>+ link_freq_menu_items,
>+ ARRAY_SIZE(link_freq_menu_items),
>+ &cfg->link_freq_bitmap);
>+ if (ret)
> goto out_err;
>
>- for (i = 0; i < bus_cfg.nr_of_link_frequencies; i++) {
>- cfg->link_freqs[i] = bus_cfg.link_frequencies[i];
>- dev_dbg(dev, "link_freq[%d] = %lld", i, cfg->link_freqs[i]);
>- }
>-
> v4l2_fwnode_endpoint_free(&bus_cfg);
> fwnode_handle_put(ep);
> return cfg;
>@@ -2397,7 +2387,6 @@ static int imx319_probe(struct i2c_client *client)
> struct imx319 *imx319;
> bool full_power;
> int ret;
>- u32 i;
>
> imx319 = devm_kzalloc(&client->dev, sizeof(*imx319), GFP_KERNEL);
> if (!imx319)
>@@ -2425,20 +2414,6 @@ static int imx319_probe(struct i2c_client *client)
> goto error_probe;
> }
>
>- imx319->link_def_freq = link_freq_menu_items[IMX319_LINK_FREQ_INDEX];
>- for (i = 0; i < imx319->hwcfg->nr_of_link_freqs; i++) {
>- if (imx319->hwcfg->link_freqs[i] == imx319->link_def_freq) {
>- dev_dbg(&client->dev, "link freq index %d matched", i);
>- break;
>- }
>- }
>-
>- if (i == imx319->hwcfg->nr_of_link_freqs) {
>- dev_err(&client->dev, "no link frequency supported");
>- ret = -EINVAL;
>- goto error_probe;
>- }
>-
Do we also need change the link frequency ctrl *max* value once we get
The bitmap?
> /* Set default mode to max resolution */
> imx319->cur_mode = &supported_modes[0];
>
>--
>2.39.2
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/4] media: imx319: Use v4l2_link_frequencies_to_bitmap helper
2023-12-13 2:16 ` Cao, Bingbu
@ 2023-12-13 9:51 ` Sakari Ailus
0 siblings, 0 replies; 9+ messages in thread
From: Sakari Ailus @ 2023-12-13 9:51 UTC (permalink / raw)
To: Cao, Bingbu
Cc: linux-media, laurent.pinchart, jacopo.mondi, Qiu, Tian Shu, Hans Verkuil
Hi Bingbu,
On Wed, Dec 13, 2023 at 02:16:31AM +0000, Cao, Bingbu wrote:
> Sakari,
>
> Thanks for the patch.
>
> ------------------------------------------------------------------------
> BRs,
> Bingbu Cao
>
> >-----Original Message-----
> >From: Sakari Ailus <sakari.ailus@linux.intel.com>
> >Sent: Monday, December 11, 2023 10:07 PM
> >To: linux-media@vger.kernel.org
> >Cc: laurent.pinchart@ideasonboard.com; jacopo.mondi@ideasonboard.com; Cao,
> >Bingbu <bingbu.cao@intel.com>; Qiu, Tian Shu <tian.shu.qiu@intel.com>; Hans
> >Verkuil <hverkuil-cisco@xs4all.nl>
> >Subject: [PATCH 3/4] media: imx319: Use v4l2_link_frequencies_to_bitmap
> >helper
> >
> >Use the v4l2_link_frequencies_to_bitmap() helper to figure out which
> >driver-supported link frequencies can be used on a given system.
> >
> >Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> >---
> > drivers/media/i2c/imx319.c | 53 ++++++++++----------------------------
> > 1 file changed, 14 insertions(+), 39 deletions(-)
> >
> >diff --git a/drivers/media/i2c/imx319.c b/drivers/media/i2c/imx319.c index
> >e47eff672e0c..3fdda6f7d01a 100644
> >--- a/drivers/media/i2c/imx319.c
> >+++ b/drivers/media/i2c/imx319.c
> >@@ -70,7 +70,7 @@
> > #define IMX319_REG_ORIENTATION 0x0101
> >
> > /* default link frequency and external clock */
> >-#define IMX319_LINK_FREQ_DEFAULT 482400000
> >+#define IMX319_LINK_FREQ_DEFAULT 482400000LL
> > #define IMX319_EXT_CLK 19200000
> > #define IMX319_LINK_FREQ_INDEX 0
> >
> >@@ -107,8 +107,7 @@ struct imx319_mode {
> >
> > struct imx319_hwcfg {
> > u32 ext_clk; /* sensor external clk */
> >- s64 *link_freqs; /* CSI-2 link frequencies */
> >- unsigned int nr_of_link_freqs;
> >+ unsigned long link_freq_bitmap;
> > };
> >
> > struct imx319 {
> >@@ -129,7 +128,6 @@ struct imx319 {
> > const struct imx319_mode *cur_mode;
> >
> > struct imx319_hwcfg *hwcfg;
> >- s64 link_def_freq; /* CSI-2 link default frequency */
> >
> > /*
> > * Mutex for serialized access:
> >@@ -1654,7 +1652,10 @@ static const char * const imx319_test_pattern_menu[]
> >= {
> > "Pseudorandom Sequence (PN9)",
> > };
> >
> >-/* supported link frequencies */
> >+/*
> >+ * When adding more than the one below, make sure the disallowed ones
> >+will
> >+ * actually be disabled in the LINK_FREQ control.
> >+ */
> > static const s64 link_freq_menu_items[] = {
> > IMX319_LINK_FREQ_DEFAULT,
> > };
> >@@ -2058,7 +2059,7 @@ imx319_set_pad_format(struct v4l2_subdev *sd,
> > *framefmt = fmt->format;
> > } else {
> > imx319->cur_mode = mode;
> >- pixel_rate = imx319->link_def_freq * 2 * 4;
> >+ pixel_rate = IMX319_LINK_FREQ_DEFAULT * 2 * 4;
> > do_div(pixel_rate, 10);
> > __v4l2_ctrl_s_ctrl_int64(imx319->pixel_rate, pixel_rate);
> > /* Update limits and set FPS to default */ @@ -2255,7 +2256,7
> >@@ static int imx319_init_controls(struct imx319 *imx319)
> > imx319->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
> >
> > /* pixel_rate = link_freq * 2 * nr_of_lanes / bits_per_sample */
> >- pixel_rate = imx319->link_def_freq * 2 * 4;
> >+ pixel_rate = IMX319_LINK_FREQ_DEFAULT * 2 * 4;
> > do_div(pixel_rate, 10);
> > /* By default, PIXEL_RATE is read only */
> > imx319->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &imx319_ctrl_ops,
> >@@ -2332,7 +2333,6 @@ static struct imx319_hwcfg *imx319_get_hwcfg(struct
> >device *dev)
> > };
> > struct fwnode_handle *ep;
> > struct fwnode_handle *fwnode = dev_fwnode(dev);
> >- unsigned int i;
> > int ret;
> >
> > if (!fwnode)
> >@@ -2364,24 +2364,14 @@ static struct imx319_hwcfg *imx319_get_hwcfg(struct
> >device *dev)
> > goto out_err;
> > }
> >
> >- dev_dbg(dev, "num of link freqs: %d",
> >bus_cfg.nr_of_link_frequencies);
> >- if (!bus_cfg.nr_of_link_frequencies) {
> >- dev_warn(dev, "no link frequencies defined");
> >- goto out_err;
> >- }
> >-
> >- cfg->nr_of_link_freqs = bus_cfg.nr_of_link_frequencies;
> >- cfg->link_freqs = devm_kcalloc(dev,
> >- bus_cfg.nr_of_link_frequencies + 1,
> >- sizeof(*cfg->link_freqs), GFP_KERNEL);
> >- if (!cfg->link_freqs)
> >+ ret = v4l2_link_frequencies_to_bitmap(dev, bus_cfg.link_frequencies,
> >+ bus_cfg.nr_of_link_frequencies,
> >+ link_freq_menu_items,
> >+ ARRAY_SIZE(link_freq_menu_items),
> >+ &cfg->link_freq_bitmap);
> >+ if (ret)
> > goto out_err;
> >
> >- for (i = 0; i < bus_cfg.nr_of_link_frequencies; i++) {
> >- cfg->link_freqs[i] = bus_cfg.link_frequencies[i];
> >- dev_dbg(dev, "link_freq[%d] = %lld", i, cfg->link_freqs[i]);
> >- }
> >-
> > v4l2_fwnode_endpoint_free(&bus_cfg);
> > fwnode_handle_put(ep);
> > return cfg;
> >@@ -2397,7 +2387,6 @@ static int imx319_probe(struct i2c_client *client)
> > struct imx319 *imx319;
> > bool full_power;
> > int ret;
> >- u32 i;
> >
> > imx319 = devm_kzalloc(&client->dev, sizeof(*imx319), GFP_KERNEL);
> > if (!imx319)
> >@@ -2425,20 +2414,6 @@ static int imx319_probe(struct i2c_client *client)
> > goto error_probe;
> > }
> >
> >- imx319->link_def_freq = link_freq_menu_items[IMX319_LINK_FREQ_INDEX];
> >- for (i = 0; i < imx319->hwcfg->nr_of_link_freqs; i++) {
> >- if (imx319->hwcfg->link_freqs[i] == imx319->link_def_freq) {
> >- dev_dbg(&client->dev, "link freq index %d matched", i);
> >- break;
> >- }
> >- }
> >-
> >- if (i == imx319->hwcfg->nr_of_link_freqs) {
> >- dev_err(&client->dev, "no link frequency supported");
> >- ret = -EINVAL;
> >- goto error_probe;
> >- }
> >-
>
> Do we also need change the link frequency ctrl *max* value once we get
> The bitmap?
The driver supports a single value, so in this case not. We also have a
mask of supported values so min and max are less critical. It would
actually be good to have a helper to set up the control correctly, too.
Unfortunately the function creating the control doesn't take a mask as
argument.
--
Sakari Ailus
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-12-13 9:51 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-11 14:06 [PATCH 0/4] Add link frequency to bitmap helper Sakari Ailus
2023-12-11 14:06 ` [PATCH 1/4] media: v4l: Add a helper for setting up link-frequencies control Sakari Ailus
2023-12-12 16:07 ` kernel test robot
2023-12-11 14:06 ` [PATCH 2/4] media: imx334: Use v4l2_link_frequencies_to_bitmap helper Sakari Ailus
2023-12-11 20:37 ` kernel test robot
2023-12-11 14:06 ` [PATCH 3/4] media: imx319: " Sakari Ailus
2023-12-13 2:16 ` Cao, Bingbu
2023-12-13 9:51 ` Sakari Ailus
2023-12-11 14:06 ` [PATCH 4/4] media: imx355: " Sakari Ailus
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).