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 22/34] media: camss: csid: Add support for 8x96
Date: Wed, 25 Jul 2018 19:38:31 +0300	[thread overview]
Message-ID: <1532536723-19062-23-git-send-email-todor.tomov@linaro.org> (raw)
In-Reply-To: <1532536723-19062-1-git-send-email-todor.tomov@linaro.org>

CSID hardware modules on 8x16 and 8x96 are similar. There is no
need to duplicate the code by adding separate versions. Just
update the register macros to return the correct register
addresses.

Signed-off-by: Todor Tomov <todor.tomov@linaro.org>
---
 drivers/media/platform/qcom/camss/camss-csid.c | 60 ++++++++++++++++----------
 1 file changed, 37 insertions(+), 23 deletions(-)

diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c
index 3ba087f..915835e 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -27,21 +27,26 @@
 #define CAMSS_CSID_HW_VERSION		0x0
 #define CAMSS_CSID_CORE_CTRL_0		0x004
 #define CAMSS_CSID_CORE_CTRL_1		0x008
-#define CAMSS_CSID_RST_CMD		0x00c
-#define CAMSS_CSID_CID_LUT_VC_n(n)	(0x010 + 0x4 * (n))
-#define CAMSS_CSID_CID_n_CFG(n)		(0x020 + 0x4 * (n))
-#define CAMSS_CSID_IRQ_CLEAR_CMD	0x060
-#define CAMSS_CSID_IRQ_MASK		0x064
-#define CAMSS_CSID_IRQ_STATUS		0x068
-#define CAMSS_CSID_TG_CTRL		0x0a0
+#define CAMSS_CSID_RST_CMD(v)		((v) == CAMSS_8x16 ? 0x00c : 0x010)
+#define CAMSS_CSID_CID_LUT_VC_n(v, n)	\
+			(((v) == CAMSS_8x16 ? 0x010 : 0x014) + 0x4 * (n))
+#define CAMSS_CSID_CID_n_CFG(v, n)	\
+			(((v) == CAMSS_8x16 ? 0x020 : 0x024) + 0x4 * (n))
+#define CAMSS_CSID_IRQ_CLEAR_CMD(v)	((v) == CAMSS_8x16 ? 0x060 : 0x064)
+#define CAMSS_CSID_IRQ_MASK(v)		((v) == CAMSS_8x16 ? 0x064 : 0x068)
+#define CAMSS_CSID_IRQ_STATUS(v)	((v) == CAMSS_8x16 ? 0x068 : 0x06c)
+#define CAMSS_CSID_TG_CTRL(v)		((v) == CAMSS_8x16 ? 0x0a0 : 0x0a8)
 #define CAMSS_CSID_TG_CTRL_DISABLE	0xa06436
 #define CAMSS_CSID_TG_CTRL_ENABLE	0xa06437
-#define CAMSS_CSID_TG_VC_CFG		0x0a4
+#define CAMSS_CSID_TG_VC_CFG(v)		((v) == CAMSS_8x16 ? 0x0a4 : 0x0ac)
 #define CAMSS_CSID_TG_VC_CFG_H_BLANKING		0x3ff
 #define CAMSS_CSID_TG_VC_CFG_V_BLANKING		0x7f
-#define CAMSS_CSID_TG_DT_n_CGG_0(n)	(0x0ac + 0xc * (n))
-#define CAMSS_CSID_TG_DT_n_CGG_1(n)	(0x0b0 + 0xc * (n))
-#define CAMSS_CSID_TG_DT_n_CGG_2(n)	(0x0b4 + 0xc * (n))
+#define CAMSS_CSID_TG_DT_n_CGG_0(v, n)	\
+			(((v) == CAMSS_8x16 ? 0x0ac : 0x0b4) + 0xc * (n))
+#define CAMSS_CSID_TG_DT_n_CGG_1(v, n)	\
+			(((v) == CAMSS_8x16 ? 0x0b0 : 0x0b8) + 0xc * (n))
+#define CAMSS_CSID_TG_DT_n_CGG_2(v, n)	\
+			(((v) == CAMSS_8x16 ? 0x0b4 : 0x0bc) + 0xc * (n))
 
 #define DATA_TYPE_EMBEDDED_DATA_8BIT	0x12
 #define DATA_TYPE_YUV422_8BIT		0x1e
@@ -203,10 +208,11 @@ static const struct csid_fmts *csid_get_fmt_entry(u32 code)
 static irqreturn_t csid_isr(int irq, void *dev)
 {
 	struct csid_device *csid = dev;
+	enum camss_version ver = csid->camss->version;
 	u32 value;
 
-	value = readl_relaxed(csid->base + CAMSS_CSID_IRQ_STATUS);
-	writel_relaxed(value, csid->base + CAMSS_CSID_IRQ_CLEAR_CMD);
+	value = readl_relaxed(csid->base + CAMSS_CSID_IRQ_STATUS(ver));
+	writel_relaxed(value, csid->base + CAMSS_CSID_IRQ_CLEAR_CMD(ver));
 
 	if ((value >> 11) & 0x1)
 		complete(&csid->reset_complete);
@@ -289,7 +295,8 @@ static int csid_reset(struct csid_device *csid)
 
 	reinit_completion(&csid->reset_complete);
 
-	writel_relaxed(0x7fff, csid->base + CAMSS_CSID_RST_CMD);
+	writel_relaxed(0x7fff, csid->base +
+		       CAMSS_CSID_RST_CMD(csid->camss->version));
 
 	time = wait_for_completion_timeout(&csid->reset_complete,
 		msecs_to_jiffies(CSID_RESET_TIMEOUT_MS));
@@ -377,6 +384,7 @@ static int csid_set_stream(struct v4l2_subdev *sd, int enable)
 {
 	struct csid_device *csid = v4l2_get_subdevdata(sd);
 	struct csid_testgen_config *tg = &csid->testgen;
+	enum camss_version ver = csid->camss->version;
 	u32 val;
 
 	if (enable) {
@@ -409,13 +417,14 @@ static int csid_set_stream(struct v4l2_subdev *sd, int enable)
 			/* 1:0 VC */
 			val = ((CAMSS_CSID_TG_VC_CFG_V_BLANKING & 0xff) << 24) |
 			      ((CAMSS_CSID_TG_VC_CFG_H_BLANKING & 0x7ff) << 13);
-			writel_relaxed(val, csid->base + CAMSS_CSID_TG_VC_CFG);
+			writel_relaxed(val, csid->base +
+				       CAMSS_CSID_TG_VC_CFG(ver));
 
 			/* 28:16 bytes per lines, 12:0 num of lines */
 			val = ((num_bytes_per_line & 0x1fff) << 16) |
 			      (num_lines & 0x1fff);
 			writel_relaxed(val, csid->base +
-				       CAMSS_CSID_TG_DT_n_CGG_0(0));
+				       CAMSS_CSID_TG_DT_n_CGG_0(ver, 0));
 
 			dt = csid_get_fmt_entry(
 				csid->fmt[MSM_CSID_PAD_SRC].code)->data_type;
@@ -423,12 +432,12 @@ static int csid_set_stream(struct v4l2_subdev *sd, int enable)
 			/* 5:0 data type */
 			val = dt;
 			writel_relaxed(val, csid->base +
-				       CAMSS_CSID_TG_DT_n_CGG_1(0));
+				       CAMSS_CSID_TG_DT_n_CGG_1(ver, 0));
 
 			/* 2:0 output test pattern */
 			val = tg->payload_mode;
 			writel_relaxed(val, csid->base +
-				       CAMSS_CSID_TG_DT_n_CGG_2(0));
+				       CAMSS_CSID_TG_DT_n_CGG_2(ver, 0));
 
 			df = csid_get_fmt_entry(
 				csid->fmt[MSM_CSID_PAD_SRC].code)->decode_format;
@@ -457,22 +466,27 @@ static int csid_set_stream(struct v4l2_subdev *sd, int enable)
 
 		dt_shift = (cid % 4) * 8;
 
-		val = readl_relaxed(csid->base + CAMSS_CSID_CID_LUT_VC_n(vc));
+		val = readl_relaxed(csid->base +
+				    CAMSS_CSID_CID_LUT_VC_n(ver, vc));
 		val &= ~(0xff << dt_shift);
 		val |= dt << dt_shift;
-		writel_relaxed(val, csid->base + CAMSS_CSID_CID_LUT_VC_n(vc));
+		writel_relaxed(val, csid->base +
+			       CAMSS_CSID_CID_LUT_VC_n(ver, vc));
 
 		val = (df << 4) | 0x3;
-		writel_relaxed(val, csid->base + CAMSS_CSID_CID_n_CFG(cid));
+		writel_relaxed(val, csid->base +
+			       CAMSS_CSID_CID_n_CFG(ver, cid));
 
 		if (tg->enabled) {
 			val = CAMSS_CSID_TG_CTRL_ENABLE;
-			writel_relaxed(val, csid->base + CAMSS_CSID_TG_CTRL);
+			writel_relaxed(val, csid->base +
+				       CAMSS_CSID_TG_CTRL(ver));
 		}
 	} else {
 		if (tg->enabled) {
 			val = CAMSS_CSID_TG_CTRL_DISABLE;
-			writel_relaxed(val, csid->base + CAMSS_CSID_TG_CTRL);
+			writel_relaxed(val, csid->base +
+				       CAMSS_CSID_TG_CTRL(ver));
 		}
 	}
 
-- 
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 ` Todor Tomov [this message]
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 ` [PATCH v4 32/34] media: camss: Add support for 10-bit grayscale formats Todor Tomov
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-23-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