From patchwork Mon Dec 5 05:19:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: shravan chippa X-Patchwork-Id: 13064137 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0FAD5C47089 for ; Mon, 5 Dec 2022 05:20:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231590AbiLEFT6 (ORCPT ); Mon, 5 Dec 2022 00:19:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231175AbiLEFTz (ORCPT ); Mon, 5 Dec 2022 00:19:55 -0500 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B7039FCD2; Sun, 4 Dec 2022 21:19:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1670217595; x=1701753595; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=97m/dDy4gUxTGV0oPsWMYrepMwx9K5cDv4BzNhP8KWE=; b=IAN5d1oEeRitONRjTADBrKCYfD3gqPHmOY9WunQo8a33/SiRsqQM7B7k Y4nggMk/gJvBL7cTkn7r7gVN3BG08qsEJDd5NevZ3OEDxTmb2w7t9ACwN rZh2/T7eYSnlC7nENMnt0n3JVq2rLF0yXzlpDsJk2OZlgun0qWb8GMZ2C ogvB6MNouqJ1dTziGdej0eML6GUQ9V6wYkN6Hb48OGvK5TvRCTqx0q+QB ctXuv67aiKmRba2/EPZv0ABU6IREmJXsxdIB+Xyon6TeJGJo92P9JZklM vSNpC2gNANV7hOpmWQV3+jxE21weddgux91IiK9KvntMew+UISoR3tmyu A==; X-IronPort-AV: E=Sophos;i="5.96,218,1665471600"; d="scan'208";a="186499742" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa4.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 04 Dec 2022 22:19:54 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Sun, 4 Dec 2022 22:19:53 -0700 Received: from microchip1-OptiPlex-9020.microchip.com (10.10.115.15) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Sun, 4 Dec 2022 22:19:51 -0700 From: shravan kumar To: , , CC: , , "Shravan Chippa" Subject: [PATCH v6 1/5] media: i2c: imx334: modify link frequency as for the configureation Date: Mon, 5 Dec 2022 10:49:32 +0530 Message-ID: <20221205051937.3897001-2-shravan.chippa@microchip.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221205051937.3897001-1-shravan.chippa@microchip.com> References: <20221205051937.3897001-1-shravan.chippa@microchip.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org From: Shravan Chippa Currently imx334 sensor driver is configured for 1782Mbps/lane for 3840x2160@60 resolution with reqired reg mode values but if we run the command "v4l2-ctl --all -d /dev/v4l-subdevX" it is showing incorrect link frequeny, This is because of the incorrect value of IMX334_LINK_FREQ witch is 891000000. it should be 1782000000. In general with the value of 891000000 link frequency it is not possible to configure 3840x2160@60 resolution. Fixes: 9746b11715c3 ("media: i2c: Add imx334 camera sensor driver") Signed-off-by: Shravan Chippa --- drivers/media/i2c/imx334.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index 7b0a9086447d..acc9f9f15e47 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -49,7 +49,7 @@ #define IMX334_INCLK_RATE 24000000 /* CSI2 HW configuration */ -#define IMX334_LINK_FREQ 891000000 +#define IMX334_LINK_FREQ 1782000000 #define IMX334_NUM_DATA_LANES 4 #define IMX334_REG_MIN 0x00 From patchwork Mon Dec 5 05:19:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: shravan chippa X-Patchwork-Id: 13064138 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2AD04C4321E for ; Mon, 5 Dec 2022 05:20:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231409AbiLEFUH (ORCPT ); Mon, 5 Dec 2022 00:20:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44454 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231598AbiLEFUB (ORCPT ); Mon, 5 Dec 2022 00:20:01 -0500 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4FD8AFCEA; Sun, 4 Dec 2022 21:19:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1670217599; x=1701753599; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=qsJvK2VpBu4Gb2ZvUzYx5074zsrdEggN0+SM/yXO0po=; b=edbBy1VEfC0r9nrKbEExqCo8Ll5HauQO/+sqcFXWGCzh8RsV7hkCB2l6 cv5AXkQUWBHfX9p5A2E2iIxBg4/FjQl5id2iWsUAmKhV+Wfhwbz8m6d5U 7YzhqPkSr8+OxMNhDuhj7BHC1HD8oypwZgoSxSi/zOeHsqm3slxyBNf2A dJ/SAbj67hd3LRO7eHLacMeSSG4UqgXfdoFtKvYWE7ogFKIRiAv8v9/iG R/XIi0M9SM/aDcP2ADOTeN3DzgSYkEjXHm8ioG7BHM5IG474jxbGUNJTh 3AdElTydz/ukCVUsdyd5zeQ8HgY8DpWoHABuTT4WvSbwEeN2n4js2PaT+ w==; X-IronPort-AV: E=Sophos;i="5.96,218,1665471600"; d="scan'208";a="202580518" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa1.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 04 Dec 2022 22:19:58 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Sun, 4 Dec 2022 22:19:57 -0700 Received: from microchip1-OptiPlex-9020.microchip.com (10.10.115.15) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Sun, 4 Dec 2022 22:19:55 -0700 From: shravan kumar To: , , CC: , , "Shravan Chippa" , Jacopo Mondi Subject: [PATCH v6 2/5] media: i2c: imx334: replace __v4l2_ctrl_s_ctrl to __v4l2_ctrl_modify_range Date: Mon, 5 Dec 2022 10:49:33 +0530 Message-ID: <20221205051937.3897001-3-shravan.chippa@microchip.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221205051937.3897001-1-shravan.chippa@microchip.com> References: <20221205051937.3897001-1-shravan.chippa@microchip.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org From: Shravan Chippa For evry mode we will get new set of values for hbalnk so use __v4l2_ctrl_modify_range() to support multi modes for hblank. The hblank value is readonly in the driver. because of this the function returns error if we try to change. so added dumy return case in imx334_set_ctrl function Suggested-by: Jacopo Mondi Signed-off-by: Shravan Chippa --- drivers/media/i2c/imx334.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index acc9f9f15e47..a742b60ea3b0 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -382,7 +382,8 @@ static int imx334_update_controls(struct imx334 *imx334, if (ret) return ret; - ret = __v4l2_ctrl_s_ctrl(imx334->hblank_ctrl, mode->hblank); + ret = __v4l2_ctrl_modify_range(imx334->hblank_ctrl, mode->hblank, + mode->hblank, 1, mode->hblank); if (ret) return ret; @@ -480,6 +481,9 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) pm_runtime_put(imx334->dev); + break; + case V4L2_CID_HBLANK: + ret = 0; break; default: dev_err(imx334->dev, "Invalid control %d", ctrl->id); From patchwork Mon Dec 5 05:19:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: shravan chippa X-Patchwork-Id: 13064139 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B7A8AC4321E for ; Mon, 5 Dec 2022 05:20:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231634AbiLEFUL (ORCPT ); Mon, 5 Dec 2022 00:20:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44562 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231594AbiLEFUG (ORCPT ); Mon, 5 Dec 2022 00:20:06 -0500 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2AB5D1007B; Sun, 4 Dec 2022 21:20:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1670217603; x=1701753603; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=J+Pa5idsEsF21ZZmOnUuVtv+9iQnHLggG8V2rnsPm0I=; b=w67Osr9oZiXmIeHQrJEKVbRR/gzyLkB8vFvW7fVCLisyMc5HkLQPah4M +Y71yJHG3h58VQOLhXvkk211Uh1kYnbCgj8Tvf7oEYURwYxicyAx2wkOr htybtDdrx4m2lpKx839TdlHGXdJkTberC0+iHSkfYC2gXI04GUkXO4FOy /JCZb9Pf/b8pSDOHnnJpvMWTvfx/BTgFg8YOleK5gdnaBRESA3BwrBBkM W/dOWkaMGr9eJnwQOGrTZWstV4io2Ap4dwftp+7Zg7YIUto0U+x+QgJTg /JVPzrFcReooUAWAni+fbvX6dVcK/ZIA2E7XEMe2QsN22GHFNWSkQ0QRF A==; X-IronPort-AV: E=Sophos;i="5.96,218,1665471600"; d="scan'208";a="186499749" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa4.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 04 Dec 2022 22:20:03 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Sun, 4 Dec 2022 22:20:02 -0700 Received: from microchip1-OptiPlex-9020.microchip.com (10.10.115.15) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Sun, 4 Dec 2022 22:19:59 -0700 From: shravan kumar To: , , CC: , , "Shravan Chippa" Subject: [PATCH v6 3/5] media: i2c: imx334: add missing reset values for mode 3840x2160_regs[] Date: Mon, 5 Dec 2022 10:49:34 +0530 Message-ID: <20221205051937.3897001-4-shravan.chippa@microchip.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221205051937.3897001-1-shravan.chippa@microchip.com> References: <20221205051937.3897001-1-shravan.chippa@microchip.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org From: Shravan Chippa There are some missing reset reg_mode values for the 3840x2160@60 resolution. The camera sensor still works in 3840x2160@60 resolution mode because of the register reset values. This is an issue when we change the modes dynamically. As an example, when we change the mode from 1920x1080@30 resolution to 3840x2160@60 resoultion then the mode values will be written to the registers from the array mode_3840x2160_regs[] which gives the wrong output which is incorrect resolution. So add the missing reset values to the mode_3840x2160_regs[]. Signed-off-by: Shravan Chippa --- drivers/media/i2c/imx334.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index a742b60ea3b0..1fa7e3711c3d 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -166,6 +166,7 @@ static const struct imx334_reg mode_3840x2160_regs[] = { {0x3288, 0x21}, {0x328a, 0x02}, {0x302c, 0x3c}, + {0x302d, 0x00}, {0x302e, 0x00}, {0x302f, 0x0f}, {0x3076, 0x70}, @@ -240,7 +241,26 @@ static const struct imx334_reg mode_3840x2160_regs[] = { {0x3794, 0x7a}, {0x3796, 0xa1}, {0x3e04, 0x0e}, + {0x319e, 0x00}, {0x3a00, 0x01}, + {0x3A18, 0xBF}, + {0x3A19, 0x00}, + {0x3A1A, 0x67}, + {0x3A1B, 0x00}, + {0x3A1C, 0x6F}, + {0x3A1D, 0x00}, + {0x3A1E, 0xD7}, + {0x3A1F, 0x01}, + {0x3A20, 0x6F}, + {0x3A21, 0x00}, + {0x3A22, 0xCF}, + {0x3A23, 0x00}, + {0x3A24, 0x6F}, + {0x3A25, 0x00}, + {0x3A26, 0xB7}, + {0x3A27, 0x00}, + {0x3A28, 0x5F}, + {0x3A29, 0x00}, }; /* Supported sensor mode configurations */ From patchwork Mon Dec 5 05:19:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: shravan chippa X-Patchwork-Id: 13064141 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8B5D3C4321E for ; Mon, 5 Dec 2022 05:20:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231721AbiLEFUn (ORCPT ); Mon, 5 Dec 2022 00:20:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44746 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231640AbiLEFU1 (ORCPT ); Mon, 5 Dec 2022 00:20:27 -0500 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1166513F68; Sun, 4 Dec 2022 21:20:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1670217612; x=1701753612; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Wu4RO1378kBKkb63nuW4X7ZIGJKZ+WVKDqs2LbdMyNE=; b=YzfSrxkCekw4/zl+BZBZk/rpXzyMgCDwPeoIF6BAJlvWP8T3UbMuzL0g EiILoqNcN5CT6dnb60BxQ7i/CC1CQohH1SPQg4dCz/6UpurBzaMldg6Xu r4hhxQkQo+ozWhAIX2zhzKlZS8vvL80IuuTgQWKMTpiKL1O0yt1dPR+7w M+4014MbuF5sW76BXwvsNmpv+MZ45lnsOjfX0/FPd0rh7h1GZM3ZLIEZW pcfWZHiHBKPQZ/eU71vl8nYPsE3b7/0LLNgxA9VZ5BixS8RxFmMAzaKHz Ig4omxBjaCbtsccYfCp4CQuMQEYoVq+cqQwId48i9PVO9EvcXeS8VbZCu Q==; X-IronPort-AV: E=Sophos;i="5.96,218,1665471600"; d="scan'208";a="202580532" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa1.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 04 Dec 2022 22:20:11 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Sun, 4 Dec 2022 22:20:11 -0700 Received: from microchip1-OptiPlex-9020.microchip.com (10.10.115.15) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Sun, 4 Dec 2022 22:20:08 -0700 From: shravan kumar To: , , CC: , , "Shravan Chippa" , Conor Dooley , Prakash Battu Subject: [PATCH v6 4/5] media: i2c: imx334: support lower bandwidth mode Date: Mon, 5 Dec 2022 10:49:36 +0530 Message-ID: <20221205051937.3897001-6-shravan.chippa@microchip.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221205051937.3897001-1-shravan.chippa@microchip.com> References: <20221205051937.3897001-1-shravan.chippa@microchip.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org From: Shravan Chippa Some platforms may not be capable of supporting the bandwidth required for 12 bit or 3840x2160@60 resolutions. Add support for dynamically selecting 10 bit and 1920x1080@30 resolutions while leaving the existing configuration as default CC: Conor Dooley Signed-off-by: Prakash Battu Signed-off-by: Shravan Chippa --- drivers/media/i2c/imx334.c | 301 +++++++++++++++++++++++++++++++++---- 1 file changed, 275 insertions(+), 26 deletions(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index 1fa7e3711c3d..d5b566085da9 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -79,7 +79,6 @@ struct imx334_reg_list { * struct imx334_mode - imx334 sensor mode structure * @width: Frame width * @height: Frame height - * @code: Format code * @hblank: Horizontal blanking in lines * @vblank: Vertical blanking in lines * @vblank_min: Minimal vertical blanking in lines @@ -91,7 +90,6 @@ struct imx334_reg_list { struct imx334_mode { u32 width; u32 height; - u32 code; u32 hblank; u32 vblank; u32 vblank_min; @@ -119,6 +117,7 @@ struct imx334_mode { * @vblank: Vertical blanking in lines * @cur_mode: Pointer to current selected sensor mode * @mutex: Mutex for serializing sensor controls + * @cur_code: current selected format code * @streaming: Flag indicating streaming state */ struct imx334 { @@ -140,6 +139,7 @@ struct imx334 { u32 vblank; const struct imx334_mode *cur_mode; struct mutex mutex; + u32 cur_code; bool streaming; }; @@ -147,6 +147,169 @@ static const s64 link_freq[] = { IMX334_LINK_FREQ, }; +/* Sensor mode registers */ +static const struct imx334_reg mode_1920x1080_regs[] = { + {0x3000, 0x01}, + {0x3018, 0x04}, + {0x3030, 0xCA}, + {0x3031, 0x08}, + {0x3032, 0x00}, + {0x3034, 0x4C}, + {0x3035, 0x04}, + {0x302C, 0xF0}, + {0x302D, 0x03}, + {0x302E, 0x80}, + {0x302F, 0x07}, + {0x3074, 0xCC}, + {0x3075, 0x02}, + {0x308E, 0xCD}, + {0x308F, 0x02}, + {0x3076, 0x38}, + {0x3077, 0x04}, + {0x3090, 0x38}, + {0x3091, 0x04}, + {0x3308, 0x38}, + {0x3309, 0x04}, + {0x30C6, 0x00}, + {0x30C7, 0x00}, + {0x30CE, 0x00}, + {0x30CF, 0x00}, + {0x30D8, 0x18}, + {0x30D9, 0x0A}, + {0x304C, 0x00}, + {0x304E, 0x00}, + {0x304F, 0x00}, + {0x3050, 0x00}, + {0x30B6, 0x00}, + {0x30B7, 0x00}, + {0x3116, 0x08}, + {0x3117, 0x00}, + {0x31A0, 0x20}, + {0x31A1, 0x0F}, + {0x300C, 0x3B}, + {0x300D, 0x29}, + {0x314C, 0x29}, + {0x314D, 0x01}, + {0x315A, 0x06}, + {0x3168, 0xA0}, + {0x316A, 0x7E}, + {0x319E, 0x02}, + {0x3199, 0x00}, + {0x319D, 0x00}, + {0x31DD, 0x03}, + {0x3300, 0x00}, + {0x341C, 0xFF}, + {0x341D, 0x01}, + {0x3A01, 0x03}, + {0x3A18, 0x7F}, + {0x3A19, 0x00}, + {0x3A1A, 0x37}, + {0x3A1B, 0x00}, + {0x3A1C, 0x37}, + {0x3A1D, 0x00}, + {0x3A1E, 0xF7}, + {0x3A1F, 0x00}, + {0x3A20, 0x3F}, + {0x3A21, 0x00}, + {0x3A20, 0x6F}, + {0x3A21, 0x00}, + {0x3A20, 0x3F}, + {0x3A21, 0x00}, + {0x3A20, 0x5F}, + {0x3A21, 0x00}, + {0x3A20, 0x2F}, + {0x3A21, 0x00}, + {0x3078, 0x02}, + {0x3079, 0x00}, + {0x307A, 0x00}, + {0x307B, 0x00}, + {0x3080, 0x02}, + {0x3081, 0x00}, + {0x3082, 0x00}, + {0x3083, 0x00}, + {0x3088, 0x02}, + {0x3094, 0x00}, + {0x3095, 0x00}, + {0x3096, 0x00}, + {0x309B, 0x02}, + {0x309C, 0x00}, + {0x309D, 0x00}, + {0x309E, 0x00}, + {0x30A4, 0x00}, + {0x30A5, 0x00}, + {0x3288, 0x21}, + {0x328A, 0x02}, + {0x3414, 0x05}, + {0x3416, 0x18}, + {0x35AC, 0x0E}, + {0x3648, 0x01}, + {0x364A, 0x04}, + {0x364C, 0x04}, + {0x3678, 0x01}, + {0x367C, 0x31}, + {0x367E, 0x31}, + {0x3708, 0x02}, + {0x3714, 0x01}, + {0x3715, 0x02}, + {0x3716, 0x02}, + {0x3717, 0x02}, + {0x371C, 0x3D}, + {0x371D, 0x3F}, + {0x372C, 0x00}, + {0x372D, 0x00}, + {0x372E, 0x46}, + {0x372F, 0x00}, + {0x3730, 0x89}, + {0x3731, 0x00}, + {0x3732, 0x08}, + {0x3733, 0x01}, + {0x3734, 0xFE}, + {0x3735, 0x05}, + {0x375D, 0x00}, + {0x375E, 0x00}, + {0x375F, 0x61}, + {0x3760, 0x06}, + {0x3768, 0x1B}, + {0x3769, 0x1B}, + {0x376A, 0x1A}, + {0x376B, 0x19}, + {0x376C, 0x18}, + {0x376D, 0x14}, + {0x376E, 0x0F}, + {0x3776, 0x00}, + {0x3777, 0x00}, + {0x3778, 0x46}, + {0x3779, 0x00}, + {0x377A, 0x08}, + {0x377B, 0x01}, + {0x377C, 0x45}, + {0x377D, 0x01}, + {0x377E, 0x23}, + {0x377F, 0x02}, + {0x3780, 0xD9}, + {0x3781, 0x03}, + {0x3782, 0xF5}, + {0x3783, 0x06}, + {0x3784, 0xA5}, + {0x3788, 0x0F}, + {0x378A, 0xD9}, + {0x378B, 0x03}, + {0x378C, 0xEB}, + {0x378D, 0x05}, + {0x378E, 0x87}, + {0x378F, 0x06}, + {0x3790, 0xF5}, + {0x3792, 0x43}, + {0x3794, 0x7A}, + {0x3796, 0xA1}, + {0x37B0, 0x37}, + {0x3E04, 0x0E}, + {0x30E8, 0x50}, + {0x30E9, 0x00}, + {0x3E04, 0x0E}, + {0x3002, 0x00}, +}; + /* Sensor mode registers */ static const struct imx334_reg mode_3840x2160_regs[] = { {0x3000, 0x01}, @@ -263,20 +426,53 @@ static const struct imx334_reg mode_3840x2160_regs[] = { {0x3A29, 0x00}, }; +static const struct imx334_reg raw10_framefmt_regs[] = { + {0x3050, 0x00}, + {0x319D, 0x00}, + {0x341C, 0xFF}, + {0x341D, 0x01}, +}; + +static const struct imx334_reg raw12_framefmt_regs[] = { + {0x3050, 0x01}, + {0x319D, 0x01}, + {0x341C, 0x47}, + {0x341D, 0x00}, +}; + +static const u32 imx334_mbus_codes[] = { + MEDIA_BUS_FMT_SRGGB12_1X12, + MEDIA_BUS_FMT_SRGGB10_1X10, +}; + /* Supported sensor mode configurations */ -static const struct imx334_mode supported_mode = { - .width = 3840, - .height = 2160, - .hblank = 560, - .vblank = 2340, - .vblank_min = 90, - .vblank_max = 132840, - .pclk = 594000000, - .link_freq_idx = 0, - .code = MEDIA_BUS_FMT_SRGGB12_1X12, - .reg_list = { - .num_of_regs = ARRAY_SIZE(mode_3840x2160_regs), - .regs = mode_3840x2160_regs, +static const struct imx334_mode supported_modes[] = { + { + .width = 3840, + .height = 2160, + .hblank = 560, + .vblank = 2340, + .vblank_min = 90, + .vblank_max = 132840, + .pclk = 594000000, + .link_freq_idx = 0, + .reg_list = { + .num_of_regs = ARRAY_SIZE(mode_3840x2160_regs), + .regs = mode_3840x2160_regs, + }, + }, { + .width = 1920, + .height = 1080, + .hblank = 280, + .vblank = 1170, + .vblank_min = 90, + .vblank_max = 132840, + .pclk = 74250000, + .link_freq_idx = 0, + .reg_list = { + .num_of_regs = ARRAY_SIZE(mode_1920x1080_regs), + .regs = mode_1920x1080_regs, + }, }, }; @@ -518,6 +714,23 @@ static const struct v4l2_ctrl_ops imx334_ctrl_ops = { .s_ctrl = imx334_set_ctrl, }; +static int imx334_get_format_code(struct imx334 *imx334, u32 code) +{ + unsigned int i; + + lockdep_assert_held(&imx334->mutex); + + for (i = 0; i < ARRAY_SIZE(imx334_mbus_codes); i++) { + if (imx334_mbus_codes[i] == code) + break; + } + + if (i >= ARRAY_SIZE(imx334_mbus_codes)) + i = 0; + + return imx334_mbus_codes[i]; +} + /** * imx334_enum_mbus_code() - Enumerate V4L2 sub-device mbus codes * @sd: pointer to imx334 V4L2 sub-device structure @@ -530,10 +743,10 @@ static int imx334_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_state *sd_state, struct v4l2_subdev_mbus_code_enum *code) { - if (code->index > 0) + if (code->index >= ARRAY_SIZE(imx334_mbus_codes)) return -EINVAL; - code->code = supported_mode.code; + code->code = imx334_mbus_codes[code->index]; return 0; } @@ -550,15 +763,22 @@ static int imx334_enum_frame_size(struct v4l2_subdev *sd, struct v4l2_subdev_state *sd_state, struct v4l2_subdev_frame_size_enum *fsize) { - if (fsize->index > 0) + struct imx334 *imx334 = to_imx334(sd); + unsigned int i; + u32 code; + + if (fsize->index >= ARRAY_SIZE(supported_modes)) return -EINVAL; - if (fsize->code != supported_mode.code) + mutex_lock(&imx334->mutex); + code = imx334_get_format_code(imx334, fsize->code); + mutex_unlock(&imx334->mutex); + if (fsize->code != code) return -EINVAL; - fsize->min_width = supported_mode.width; + fsize->min_width = supported_modes[fsize->index].width; fsize->max_width = fsize->min_width; - fsize->min_height = supported_mode.height; + fsize->min_height = supported_modes[fsize->index].height; fsize->max_height = fsize->min_height; return 0; @@ -577,7 +797,6 @@ static void imx334_fill_pad_format(struct imx334 *imx334, { fmt->format.width = mode->width; fmt->format.height = mode->height; - fmt->format.code = mode->code; fmt->format.field = V4L2_FIELD_NONE; fmt->format.colorspace = V4L2_COLORSPACE_RAW; fmt->format.ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT; @@ -633,7 +852,13 @@ static int imx334_set_pad_format(struct v4l2_subdev *sd, mutex_lock(&imx334->mutex); - mode = &supported_mode; + fmt->format.code = imx334_get_format_code(imx334, fmt->format.code); + + mode = v4l2_find_nearest_size(supported_modes, + ARRAY_SIZE(supported_modes), + width, height, + fmt->format.width, fmt->format.height); + imx334_fill_pad_format(imx334, mode, fmt); if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { @@ -641,7 +866,8 @@ static int imx334_set_pad_format(struct v4l2_subdev *sd, framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad); *framefmt = fmt->format; - } else { + } else if (imx334->cur_mode != mode || imx334->cur_code != fmt->format.code) { + imx334->cur_code = fmt->format.code; ret = imx334_update_controls(imx334, mode); if (!ret) imx334->cur_mode = mode; @@ -666,11 +892,26 @@ static int imx334_init_pad_cfg(struct v4l2_subdev *sd, struct v4l2_subdev_format fmt = { 0 }; fmt.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE; - imx334_fill_pad_format(imx334, &supported_mode, &fmt); + imx334_fill_pad_format(imx334, &supported_modes[0], &fmt); return imx334_set_pad_format(sd, sd_state, &fmt); } +static int imx334_set_framefmt(struct imx334 *imx334) +{ + switch (imx334->cur_code) { + case MEDIA_BUS_FMT_SRGGB10_1X10: + return imx334_write_regs(imx334, raw10_framefmt_regs, + ARRAY_SIZE(raw10_framefmt_regs)); + + case MEDIA_BUS_FMT_SRGGB12_1X12: + return imx334_write_regs(imx334, raw12_framefmt_regs, + ARRAY_SIZE(raw12_framefmt_regs)); + } + + return -EINVAL; +} + /** * imx334_start_streaming() - Start sensor stream * @imx334: pointer to imx334 device @@ -691,6 +932,13 @@ static int imx334_start_streaming(struct imx334 *imx334) return ret; } + ret = imx334_set_framefmt(imx334); + if (ret) { + dev_err(imx334->dev, "%s failed to set frame format: %d\n", + __func__, ret); + return ret; + } + /* Setup handler will write actual exposure and gain */ ret = __v4l2_ctrl_handler_setup(imx334->sd.ctrl_handler); if (ret) { @@ -1061,7 +1309,8 @@ static int imx334_probe(struct i2c_client *client) } /* Set default mode to max resolution */ - imx334->cur_mode = &supported_mode; + imx334->cur_mode = &supported_modes[0]; + imx334->cur_code = imx334_mbus_codes[0]; imx334->vblank = imx334->cur_mode->vblank; ret = imx334_init_controls(imx334); From patchwork Mon Dec 5 05:19:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: shravan chippa X-Patchwork-Id: 13064142 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE23EC47088 for ; Mon, 5 Dec 2022 05:20:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231388AbiLEFU5 (ORCPT ); Mon, 5 Dec 2022 00:20:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231690AbiLEFUa (ORCPT ); Mon, 5 Dec 2022 00:20:30 -0500 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3779B13F91; Sun, 4 Dec 2022 21:20:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1670217617; x=1701753617; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mXhoSw88V/7yBb8oczsmPuNJJvEtejt3CszxH0XbUxo=; b=Pix+f2m3QxHXoRZXM2Pna9AkTv1gjctfmYnRxgJXF77YzBHZsXiYWv98 hEyAys1SYP8jwhR+DvFr7Iuett4LZiqbjeTCWqlLyj/kwDLPwHkJsxJRL fXpsq/7bPNbdhu+FAr39wlkJCJgXmwRU3u2pwtQnobW/4fCAsj7M8OHo2 oR9BICMKJxkYmeW2FnH1prCq5cceb3nM2vXOPmksvSWAWEf/nSHj4JOvK /9Ava2vHS/8RZU+5j23o2Rydg0uS//L2JIDx3LHXPGDyxE7PWbp84JNG0 0i8EkV/qRkndwTJukNzIAzRwX3dxq9oJ13aLVt3tZWp37ADau6MAb2rpB w==; X-IronPort-AV: E=Sophos;i="5.96,218,1665471600"; d="scan'208";a="126455461" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa6.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 04 Dec 2022 22:20:15 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Sun, 4 Dec 2022 22:20:15 -0700 Received: from microchip1-OptiPlex-9020.microchip.com (10.10.115.15) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Sun, 4 Dec 2022 22:20:13 -0700 From: shravan kumar To: , , CC: , , "Shravan Chippa" , Sakari Ailus Subject: [PATCH v6 5/5] media: i2c: imx334: update pixel and link frequency Date: Mon, 5 Dec 2022 10:49:37 +0530 Message-ID: <20221205051937.3897001-7-shravan.chippa@microchip.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221205051937.3897001-1-shravan.chippa@microchip.com> References: <20221205051937.3897001-1-shravan.chippa@microchip.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org From: Shravan Chippa Update pixel_rate and link frequency for 1920x1080@30 while changing mode. Add dummy ctrl cases for pixel_rate and link frequency to avoid error while changing the modes dynamically Suggested-by: Sakari Ailus Signed-off-by: Shravan Chippa --- drivers/media/i2c/imx334.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index d5b566085da9..64ed77c4258c 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -50,6 +50,7 @@ /* CSI2 HW configuration */ #define IMX334_LINK_FREQ 1782000000 +#define IMX334_LINK_FREQ_891M 891000000 #define IMX334_NUM_DATA_LANES 4 #define IMX334_REG_MIN 0x00 @@ -145,6 +146,7 @@ struct imx334 { static const s64 link_freq[] = { IMX334_LINK_FREQ, + IMX334_LINK_FREQ_891M, }; /* Sensor mode registers */ @@ -468,7 +470,7 @@ static const struct imx334_mode supported_modes[] = { .vblank_min = 90, .vblank_max = 132840, .pclk = 74250000, - .link_freq_idx = 0, + .link_freq_idx = 1, .reg_list = { .num_of_regs = ARRAY_SIZE(mode_1920x1080_regs), .regs = mode_1920x1080_regs, @@ -598,6 +600,11 @@ static int imx334_update_controls(struct imx334 *imx334, if (ret) return ret; + ret = __v4l2_ctrl_modify_range(imx334->pclk_ctrl, mode->pclk, + mode->pclk, 1, mode->pclk); + if (ret) + return ret; + ret = __v4l2_ctrl_modify_range(imx334->hblank_ctrl, mode->hblank, mode->hblank, 1, mode->hblank); if (ret) @@ -698,6 +705,8 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) pm_runtime_put(imx334->dev); break; + case V4L2_CID_PIXEL_RATE: + case V4L2_CID_LINK_FREQ: case V4L2_CID_HBLANK: ret = 0; break;