Linux Media Controller development
 help / color / mirror / Atom feed
From: Todor Tomov <todor.tomov@linaro.org>
To: mchehab@kernel.org, sakari.ailus@linux.intel.com,
	hans.verkuil@cisco.com,
	laurent.pinchart+renesas@ideasonboard.com,
	linux-media@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Todor Tomov <todor.tomov@linaro.org>
Subject: [PATCH v4 32/34] media: camss: Add support for 10-bit grayscale formats
Date: Wed, 25 Jul 2018 19:38:41 +0300	[thread overview]
Message-ID: <1532536723-19062-33-git-send-email-todor.tomov@linaro.org> (raw)
In-Reply-To: <1532536723-19062-1-git-send-email-todor.tomov@linaro.org>

Add support for 10-bit packed V4L2_PIX_FMT_Y10P (on 8x16 and 8x96)
and unpacked V4L2_PIX_FMT_Y10 (on 8x96 only) pixel formats.

Signed-off-by: Todor Tomov <todor.tomov@linaro.org>
---
 drivers/media/platform/qcom/camss/camss-csid.c   | 50 +++++++++++++++++++-----
 drivers/media/platform/qcom/camss/camss-csiphy.c |  2 +
 drivers/media/platform/qcom/camss/camss-ispif.c  |  6 ++-
 drivers/media/platform/qcom/camss/camss-vfe.c    |  3 ++
 drivers/media/platform/qcom/camss/camss-video.c  |  6 +++
 5 files changed, 56 insertions(+), 11 deletions(-)

diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c
index 472884d..6e141af 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -193,7 +193,14 @@ static const struct csid_format csid_formats_8x16[] = {
 		DECODE_FORMAT_UNCOMPRESSED_12_BIT,
 		12,
 		1,
-	}
+	},
+	{
+		MEDIA_BUS_FMT_Y10_1X10,
+		DATA_TYPE_RAW_10BIT,
+		DECODE_FORMAT_UNCOMPRESSED_10_BIT,
+		10,
+		1,
+	},
 };
 
 static const struct csid_format csid_formats_8x96[] = {
@@ -336,7 +343,14 @@ static const struct csid_format csid_formats_8x96[] = {
 		DECODE_FORMAT_UNCOMPRESSED_14_BIT,
 		14,
 		1,
-	}
+	},
+	{
+		MEDIA_BUS_FMT_Y10_1X10,
+		DATA_TYPE_RAW_10BIT,
+		DECODE_FORMAT_UNCOMPRESSED_10_BIT,
+		10,
+		1,
+	},
 };
 
 static u32 csid_find_code(u32 *code, unsigned int n_code,
@@ -379,6 +393,16 @@ static u32 csid_src_pad_code(struct csid_device *csid, u32 sink_code,
 			return csid_find_code(src_code, ARRAY_SIZE(src_code),
 					      index, src_req_code);
 		}
+		case MEDIA_BUS_FMT_Y10_1X10:
+		{
+			u32 src_code[] = {
+				MEDIA_BUS_FMT_Y10_1X10,
+				MEDIA_BUS_FMT_Y10_2X8_PADHI_LE,
+			};
+
+			return csid_find_code(src_code, ARRAY_SIZE(src_code),
+					      index, src_req_code);
+		}
 		default:
 			if (index > 0)
 				return 0;
@@ -689,15 +713,21 @@ static int csid_set_stream(struct v4l2_subdev *sd, int enable)
 		val |= CAMSS_CSID_CID_n_CFG_RDI_EN;
 		val |= df << CAMSS_CSID_CID_n_CFG_DECODE_FORMAT_SHIFT;
 		val |= CAMSS_CSID_CID_n_CFG_RDI_MODE_RAW_DUMP;
-		if (csid->camss->version == CAMSS_8x96 &&
-			csid->fmt[MSM_CSID_PAD_SINK].code ==
-					MEDIA_BUS_FMT_SBGGR10_1X10 &&
-			csid->fmt[MSM_CSID_PAD_SRC].code ==
-					MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_LE) {
-			val |= CAMSS_CSID_CID_n_CFG_RDI_MODE_PLAIN_PACKING;
-			val |= CAMSS_CSID_CID_n_CFG_PLAIN_FORMAT_16;
-			val |= CAMSS_CSID_CID_n_CFG_PLAIN_ALIGNMENT_LSB;
+
+		if (csid->camss->version == CAMSS_8x96) {
+			u32 sink_code = csid->fmt[MSM_CSID_PAD_SINK].code;
+			u32 src_code = csid->fmt[MSM_CSID_PAD_SRC].code;
+
+			if ((sink_code == MEDIA_BUS_FMT_SBGGR10_1X10 &&
+			     src_code == MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_LE) ||
+			    (sink_code == MEDIA_BUS_FMT_Y10_1X10 &&
+			     src_code == MEDIA_BUS_FMT_Y10_2X8_PADHI_LE)) {
+				val |= CAMSS_CSID_CID_n_CFG_RDI_MODE_PLAIN_PACKING;
+				val |= CAMSS_CSID_CID_n_CFG_PLAIN_FORMAT_16;
+				val |= CAMSS_CSID_CID_n_CFG_PLAIN_ALIGNMENT_LSB;
+			}
 		}
+
 		writel_relaxed(val, csid->base +
 			       CAMSS_CSID_CID_n_CFG(ver, cid));
 
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c
index cae3e8b..4559f3b 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
@@ -45,6 +45,7 @@ static const struct csiphy_format csiphy_formats_8x16[] = {
 	{ MEDIA_BUS_FMT_SGBRG12_1X12, 12 },
 	{ MEDIA_BUS_FMT_SGRBG12_1X12, 12 },
 	{ MEDIA_BUS_FMT_SRGGB12_1X12, 12 },
+	{ MEDIA_BUS_FMT_Y10_1X10, 10 },
 };
 
 static const struct csiphy_format csiphy_formats_8x96[] = {
@@ -68,6 +69,7 @@ static const struct csiphy_format csiphy_formats_8x96[] = {
 	{ MEDIA_BUS_FMT_SGBRG14_1X14, 14 },
 	{ MEDIA_BUS_FMT_SGRBG14_1X14, 14 },
 	{ MEDIA_BUS_FMT_SRGGB14_1X14, 14 },
+	{ MEDIA_BUS_FMT_Y10_1X10, 10 },
 };
 
 /*
diff --git a/drivers/media/platform/qcom/camss/camss-ispif.c b/drivers/media/platform/qcom/camss/camss-ispif.c
index 3e2f341..7f26902 100644
--- a/drivers/media/platform/qcom/camss/camss-ispif.c
+++ b/drivers/media/platform/qcom/camss/camss-ispif.c
@@ -120,6 +120,7 @@ static const u32 ispif_formats_8x16[] = {
 	MEDIA_BUS_FMT_SGBRG12_1X12,
 	MEDIA_BUS_FMT_SGRBG12_1X12,
 	MEDIA_BUS_FMT_SRGGB12_1X12,
+	MEDIA_BUS_FMT_Y10_1X10,
 };
 
 static const u32 ispif_formats_8x96[] = {
@@ -144,6 +145,8 @@ static const u32 ispif_formats_8x96[] = {
 	MEDIA_BUS_FMT_SGBRG14_1X14,
 	MEDIA_BUS_FMT_SGRBG14_1X14,
 	MEDIA_BUS_FMT_SRGGB14_1X14,
+	MEDIA_BUS_FMT_Y10_1X10,
+	MEDIA_BUS_FMT_Y10_2X8_PADHI_LE,
 };
 
 /*
@@ -692,7 +695,8 @@ static void ispif_config_pack(struct ispif_device *ispif, u32 code,
 {
 	u32 addr, val;
 
-	if (code != MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_LE)
+	if (code != MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_LE &&
+	    code != MEDIA_BUS_FMT_Y10_2X8_PADHI_LE)
 		return;
 
 	switch (intf) {
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c
index 9675309..ed6a557 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -67,6 +67,7 @@ static const struct vfe_format formats_rdi_8x16[] = {
 	{ MEDIA_BUS_FMT_SGBRG12_1X12, 12 },
 	{ MEDIA_BUS_FMT_SGRBG12_1X12, 12 },
 	{ MEDIA_BUS_FMT_SRGGB12_1X12, 12 },
+	{ MEDIA_BUS_FMT_Y10_1X10, 10 },
 };
 
 static const struct vfe_format formats_pix_8x16[] = {
@@ -98,6 +99,8 @@ static const struct vfe_format formats_rdi_8x96[] = {
 	{ MEDIA_BUS_FMT_SGBRG14_1X14, 14 },
 	{ MEDIA_BUS_FMT_SGRBG14_1X14, 14 },
 	{ MEDIA_BUS_FMT_SRGGB14_1X14, 14 },
+	{ MEDIA_BUS_FMT_Y10_1X10, 10 },
+	{ MEDIA_BUS_FMT_Y10_2X8_PADHI_LE, 16 },
 };
 
 static const struct vfe_format formats_pix_8x96[] = {
diff --git a/drivers/media/platform/qcom/camss/camss-video.c b/drivers/media/platform/qcom/camss/camss-video.c
index 2e19bc8..c9bb0d0 100644
--- a/drivers/media/platform/qcom/camss/camss-video.c
+++ b/drivers/media/platform/qcom/camss/camss-video.c
@@ -74,6 +74,8 @@ static const struct camss_format_info formats_rdi_8x16[] = {
 	  { { 1, 1 } }, { { 1, 1 } }, { 12 } },
 	{ MEDIA_BUS_FMT_SRGGB12_1X12, V4L2_PIX_FMT_SRGGB12P, 1,
 	  { { 1, 1 } }, { { 1, 1 } }, { 12 } },
+	{ MEDIA_BUS_FMT_Y10_1X10, V4L2_PIX_FMT_Y10P, 1,
+	  { { 1, 1 } }, { { 1, 1 } }, { 10 } },
 };
 
 static const struct camss_format_info formats_rdi_8x96[] = {
@@ -119,6 +121,10 @@ static const struct camss_format_info formats_rdi_8x96[] = {
 	  { { 1, 1 } }, { { 1, 1 } }, { 14 } },
 	{ MEDIA_BUS_FMT_SRGGB14_1X14, V4L2_PIX_FMT_SRGGB14P, 1,
 	  { { 1, 1 } }, { { 1, 1 } }, { 14 } },
+	{ MEDIA_BUS_FMT_Y10_1X10, V4L2_PIX_FMT_Y10P, 1,
+	  { { 1, 1 } }, { { 1, 1 } }, { 10 } },
+	{ MEDIA_BUS_FMT_Y10_2X8_PADHI_LE, V4L2_PIX_FMT_Y10, 1,
+	  { { 1, 1 } }, { { 1, 1 } }, { 16 } },
 };
 
 static const struct camss_format_info formats_pix_8x16[] = {
-- 
2.7.4

  parent reply	other threads:[~2018-07-25 17:51 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-25 16:38 [PATCH v4 00/34] Qualcomm Camera Subsystem driver - 8x96 support Todor Tomov
2018-07-25 16:38 ` [PATCH v4 01/34] doc-rst: Add packed Bayer raw14 pixel formats Todor Tomov
2018-07-25 16:38 ` [PATCH v4 02/34] media: v4l: Add new 2X8 10-bit grayscale media bus code Todor Tomov
2018-07-25 16:38 ` [PATCH v4 03/34] media: v4l: Add new 10-bit packed grayscale format Todor Tomov
2018-07-25 16:38 ` [PATCH v4 04/34] media: Rename CAMSS driver path Todor Tomov
2018-07-25 16:38 ` [PATCH v4 05/34] media: camss: Use SPDX license headers Todor Tomov
2018-07-25 16:38 ` [PATCH v4 06/34] media: camss: Fix OF node usage Todor Tomov
2018-07-25 16:38 ` [PATCH v4 07/34] media: camss: csiphy: Ensure clock mux config is done before the rest Todor Tomov
2018-07-25 16:38 ` [PATCH v4 08/34] media: dt-bindings: media: qcom,camss: Unify the clock names Todor Tomov
2018-07-30 22:29   ` Rob Herring
2018-07-25 16:38 ` [PATCH v4 09/34] media: camss: " Todor Tomov
2018-07-25 16:38 ` [PATCH v4 10/34] media: camss: csiphy: Update settle count calculation Todor Tomov
2018-07-25 16:38 ` [PATCH v4 11/34] media: camss: csid: Configure data type and decode format properly Todor Tomov
2018-07-25 16:38 ` [PATCH v4 12/34] media: camss: vfe: Fix to_vfe() macro member name Todor Tomov
2018-07-25 16:38 ` [PATCH v4 13/34] media: camss: vfe: Get line pointer as container of video_out Todor Tomov
2018-07-25 16:38 ` [PATCH v4 14/34] media: camss: vfe: Do not disable CAMIF when clearing its status Todor Tomov
2018-07-25 16:38 ` [PATCH v4 15/34] media: dt-bindings: media: qcom,camss: Fix whitespaces Todor Tomov
2018-07-25 16:38 ` [PATCH v4 16/34] media: dt-bindings: media: qcom,camss: Add 8996 bindings Todor Tomov
2018-07-25 16:38 ` [PATCH v4 17/34] media: camss: Add 8x96 resources Todor Tomov
2018-07-25 16:38 ` [PATCH v4 18/34] media: camss: Add basic runtime PM support Todor Tomov
2018-07-25 16:38 ` [PATCH v4 19/34] media: camss: csiphy: Split to hardware dependent and independent parts Todor Tomov
2018-07-25 16:38 ` [PATCH v4 20/34] media: camss: csiphy: Unify lane handling Todor Tomov
2018-07-25 16:38 ` [PATCH v4 21/34] media: camss: csiphy: Add support for 8x96 Todor Tomov
2018-07-25 16:38 ` [PATCH v4 22/34] media: camss: csid: " Todor Tomov
2018-07-25 16:38 ` [PATCH v4 23/34] media: camss: ispif: " Todor Tomov
2018-07-25 16:38 ` [PATCH v4 24/34] media: camss: vfe: Split to hardware dependent and independent parts Todor Tomov
2018-07-25 16:38 ` [PATCH v4 25/34] media: camss: vfe: Add support for 8x96 Todor Tomov
2018-07-25 16:38 ` [PATCH v4 26/34] media: camss: Format configuration per hardware version Todor Tomov
2018-07-25 16:38 ` [PATCH v4 27/34] media: camss: vfe: Different format support on source pad Todor Tomov
2018-07-25 16:38 ` [PATCH v4 28/34] media: camss: vfe: Add support for UYVY output from VFE on 8x96 Todor Tomov
2018-07-25 16:38 ` [PATCH v4 29/34] media: camss: csid: Different format support on source pad Todor Tomov
2018-07-25 16:38 ` [PATCH v4 30/34] media: camss: csid: MIPI10 to Plain16 format conversion Todor Tomov
2018-07-25 16:38 ` [PATCH v4 31/34] media: camss: Add support for RAW MIPI14 on 8x96 Todor Tomov
2018-07-25 16:38 ` Todor Tomov [this message]
2018-07-25 16:38 ` [PATCH v4 33/34] media: doc: media/v4l-drivers: Update Qualcomm CAMSS driver document for 8x96 Todor Tomov
2018-07-25 16:38 ` [PATCH v4 34/34] media: camss: csid: Add support for events triggered by user controls Todor Tomov
2018-07-26 12:40 ` [PATCH v4 00/34] Qualcomm Camera Subsystem driver - 8x96 support Sakari Ailus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1532536723-19062-33-git-send-email-todor.tomov@linaro.org \
    --to=todor.tomov@linaro.org \
    --cc=hans.verkuil@cisco.com \
    --cc=laurent.pinchart+renesas@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=sakari.ailus@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox