[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240902-imx290-avail-v3-2-b32a12799fed@skidata.com>
Date: Mon, 02 Sep 2024 17:57:27 +0200
From: bbara93@...il.com
To: Mauro Carvalho Chehab <mchehab@...nel.org>,
Manivannan Sadhasivam <manivannan.sadhasivam@...aro.org>,
Sakari Ailus <sakari.ailus@...ux.intel.com>
Cc: Hans de Goede <hdegoede@...hat.com>,
Laurent Pinchart <laurent.pinchart@...asonboard.com>,
Alexander Stein <alexander.stein@...tq-group.com>,
linux-media@...r.kernel.org, linux-kernel@...r.kernel.org,
Benjamin Bara <benjamin.bara@...data.com>
Subject: [PATCH v3 2/7] media: i2c: imx290: Define absolute control ranges
From: Benjamin Bara <benjamin.bara@...data.com>
For now, the driver activates the first mode (1080p) as current active
mode in probe(). This e.g. means that one cannot set VBLANK below 45
(vmax_min - height), although theoretically the minimum is 30 (720p
mode). Define the absolute possible/supported ranges to have them
available later.
Signed-off-by: Benjamin Bara <benjamin.bara@...data.com>
---
Changes since v2:
- new
---
drivers/media/i2c/imx290.c | 36 ++++++++++++++++++++++++++++++++----
1 file changed, 32 insertions(+), 4 deletions(-)
diff --git a/drivers/media/i2c/imx290.c b/drivers/media/i2c/imx290.c
index 1c97f9650eb4..466492bab600 100644
--- a/drivers/media/i2c/imx290.c
+++ b/drivers/media/i2c/imx290.c
@@ -499,6 +499,10 @@ static const struct imx290_clk_cfg imx290_720p_clock_config[] = {
};
/* Mode configs */
+#define WIDTH_720P 1280
+#define HEIGHT_720P 720
+#define MINIMUM_WIDTH WIDTH_720P
+#define MINIMUM_HEIGHT HEIGHT_720P
static const struct imx290_mode imx290_modes_2lanes[] = {
{
.width = 1920,
@@ -512,8 +516,8 @@ static const struct imx290_mode imx290_modes_2lanes[] = {
.clk_cfg = imx290_1080p_clock_config,
},
{
- .width = 1280,
- .height = 720,
+ .width = WIDTH_720P,
+ .height = HEIGHT_720P,
.hmax_min = 3300,
.vmax_min = 750,
.link_freq_index = FREQ_INDEX_720P,
@@ -537,8 +541,8 @@ static const struct imx290_mode imx290_modes_4lanes[] = {
.clk_cfg = imx290_1080p_clock_config,
},
{
- .width = 1280,
- .height = 720,
+ .width = WIDTH_720P,
+ .height = HEIGHT_720P,
.hmax_min = 3300,
.vmax_min = 750,
.link_freq_index = FREQ_INDEX_720P,
@@ -846,6 +850,30 @@ static const char * const imx290_test_pattern_menu[] = {
"000/555h Toggle Pattern",
};
+/* absolute supported control ranges */
+#define HBLANK_MAX (IMX290_HMAX_MAX - MINIMUM_WIDTH)
+#define VBLANK_MAX (IMX290_VMAX_MAX - MINIMUM_HEIGHT)
+static unsigned int imx290_get_blank_min(const struct imx290 *imx290, bool v)
+{
+ const struct imx290_mode *modes = imx290_modes_ptr(imx290);
+ unsigned int min = UINT_MAX;
+ int i;
+
+ for (i = 0; i < imx290_modes_num(imx290); i++) {
+ unsigned int tmp;
+
+ if (v)
+ tmp = modes[i].hmax_min - modes[i].width;
+ else
+ tmp = modes[i].vmax_min - modes[i].height;
+
+ if (tmp < min)
+ min = tmp;
+ }
+
+ return min;
+}
+
static void imx290_ctrl_update(struct imx290 *imx290,
const struct imx290_mode *mode)
{
--
2.46.0
Powered by blists - more mailing lists