media: qcom: camss: Flag CSID-lites to support more CSIDs
authorMatti Lehtimäki <matti.lehtimaki@gmail.com>
Thu, 23 Nov 2023 17:03:06 +0000 (17:03 +0000)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Thu, 7 Dec 2023 07:31:15 +0000 (08:31 +0100)
Some platforms such as SC7280 have 3 CSIDs and 2 CSID-lites but current
code has hardcoded 2 as the maximum number of CSIDs. Remove the hardcoded
maximum number of VFEs to handle all possible combinations of CSIDs and
CSID-lites.

Signed-off-by: Matti Lehtimäki <matti.lehtimaki@gmail.com>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/platform/qcom/camss/camss-csid-gen2.c
drivers/media/platform/qcom/camss/camss-csid.c
drivers/media/platform/qcom/camss/camss-csid.h
drivers/media/platform/qcom/camss/camss.c

index 05ff5fa8095a88f5bce7536db7b9650bf8585d22..b11de4797ccaef3ad0c4edb6d7ee7a90b62a58d4 100644 (file)
@@ -21,7 +21,6 @@
  * interface support. As a result of that it has an
  * alternate register layout.
  */
-#define IS_LITE                (csid->id >= 2 ? 1 : 0)
 
 #define CSID_HW_VERSION                0x0
 #define                HW_VERSION_STEPPING     0
 #define        CSID_CSI2_RX_IRQ_MASK   0x24
 #define CSID_CSI2_RX_IRQ_CLEAR 0x28
 
-#define CSID_CSI2_RDIN_IRQ_STATUS(rdi)         ((IS_LITE ? 0x30 : 0x40) \
+#define CSID_CSI2_RDIN_IRQ_STATUS(rdi)         ((csid_is_lite(csid) ? 0x30 : 0x40) \
                                                 + 0x10 * (rdi))
-#define CSID_CSI2_RDIN_IRQ_MASK(rdi)           ((IS_LITE ? 0x34 : 0x44) \
+#define CSID_CSI2_RDIN_IRQ_MASK(rdi)           ((csid_is_lite(csid) ? 0x34 : 0x44) \
                                                 + 0x10 * (rdi))
-#define CSID_CSI2_RDIN_IRQ_CLEAR(rdi)          ((IS_LITE ? 0x38 : 0x48) \
+#define CSID_CSI2_RDIN_IRQ_CLEAR(rdi)          ((csid_is_lite(csid) ? 0x38 : 0x48) \
                                                 + 0x10 * (rdi))
-#define CSID_CSI2_RDIN_IRQ_SET(rdi)            ((IS_LITE ? 0x3C : 0x4C) \
+#define CSID_CSI2_RDIN_IRQ_SET(rdi)            ((csid_is_lite(csid) ? 0x3C : 0x4C) \
                                                 + 0x10 * (rdi))
 
 #define CSID_TOP_IRQ_STATUS    0x70
@@ -73,7 +72,7 @@
 #define                        CGC_MODE_DYNAMIC_GATING         0
 #define                        CGC_MODE_ALWAYS_ON              1
 
-#define CSID_RDI_CFG0(rdi)                     ((IS_LITE ? 0x200 : 0x300) \
+#define CSID_RDI_CFG0(rdi)                     ((csid_is_lite(csid) ? 0x200 : 0x300) \
                                                 + 0x100 * (rdi))
 #define                RDI_CFG0_BYTE_CNTR_EN           0
 #define                RDI_CFG0_FORMAT_MEASURE_EN      1
 #define                RDI_CFG0_PACKING_FORMAT         30
 #define                RDI_CFG0_ENABLE                 31
 
-#define CSID_RDI_CFG1(rdi)                     ((IS_LITE ? 0x204 : 0x304)\
+#define CSID_RDI_CFG1(rdi)                     ((csid_is_lite(csid) ? 0x204 : 0x304)\
                                                + 0x100 * (rdi))
 #define                RDI_CFG1_TIMESTAMP_STB_SEL      0
 
-#define CSID_RDI_CTRL(rdi)                     ((IS_LITE ? 0x208 : 0x308)\
+#define CSID_RDI_CTRL(rdi)                     ((csid_is_lite(csid) ? 0x208 : 0x308)\
                                                + 0x100 * (rdi))
 #define                RDI_CTRL_HALT_CMD               0
 #define                        HALT_CMD_HALT_AT_FRAME_BOUNDARY         0
 #define                        HALT_CMD_RESUME_AT_FRAME_BOUNDARY       1
 #define                RDI_CTRL_HALT_MODE              2
 
-#define CSID_RDI_FRM_DROP_PATTERN(rdi)                 ((IS_LITE ? 0x20C : 0x30C)\
+#define CSID_RDI_FRM_DROP_PATTERN(rdi)                 ((csid_is_lite(csid) ? 0x20C : 0x30C)\
                                                        + 0x100 * (rdi))
-#define CSID_RDI_FRM_DROP_PERIOD(rdi)                  ((IS_LITE ? 0x210 : 0x310)\
+#define CSID_RDI_FRM_DROP_PERIOD(rdi)                  ((csid_is_lite(csid) ? 0x210 : 0x310)\
                                                        + 0x100 * (rdi))
-#define CSID_RDI_IRQ_SUBSAMPLE_PATTERN(rdi)            ((IS_LITE ? 0x214 : 0x314)\
+#define CSID_RDI_IRQ_SUBSAMPLE_PATTERN(rdi)            ((csid_is_lite(csid) ? 0x214 : 0x314)\
                                                        + 0x100 * (rdi))
-#define CSID_RDI_IRQ_SUBSAMPLE_PERIOD(rdi)             ((IS_LITE ? 0x218 : 0x318)\
+#define CSID_RDI_IRQ_SUBSAMPLE_PERIOD(rdi)             ((csid_is_lite(csid) ? 0x218 : 0x318)\
                                                        + 0x100 * (rdi))
-#define CSID_RDI_RPP_PIX_DROP_PATTERN(rdi)             ((IS_LITE ? 0x224 : 0x324)\
+#define CSID_RDI_RPP_PIX_DROP_PATTERN(rdi)             ((csid_is_lite(csid) ? 0x224 : 0x324)\
                                                        + 0x100 * (rdi))
-#define CSID_RDI_RPP_PIX_DROP_PERIOD(rdi)              ((IS_LITE ? 0x228 : 0x328)\
+#define CSID_RDI_RPP_PIX_DROP_PERIOD(rdi)              ((csid_is_lite(csid) ? 0x228 : 0x328)\
                                                        + 0x100 * (rdi))
-#define CSID_RDI_RPP_LINE_DROP_PATTERN(rdi)            ((IS_LITE ? 0x22C : 0x32C)\
+#define CSID_RDI_RPP_LINE_DROP_PATTERN(rdi)            ((csid_is_lite(csid) ? 0x22C : 0x32C)\
                                                        + 0x100 * (rdi))
-#define CSID_RDI_RPP_LINE_DROP_PERIOD(rdi)             ((IS_LITE ? 0x230 : 0x330)\
+#define CSID_RDI_RPP_LINE_DROP_PERIOD(rdi)             ((csid_is_lite(csid) ? 0x230 : 0x330)\
                                                        + 0x100 * (rdi))
 
 #define CSID_TPG_CTRL          0x600
index bbe253f7571f0afabbb9e8bb4816f31707059a05..eb27d69e89a16170aafb8468fc8a9b9bde3649f8 100644 (file)
@@ -896,3 +896,8 @@ void msm_csid_unregister_entity(struct csid_device *csid)
        media_entity_cleanup(&csid->subdev.entity);
        v4l2_ctrl_handler_free(&csid->ctrls);
 }
+
+inline bool csid_is_lite(struct csid_device *csid)
+{
+       return csid->camss->res->csid_res[csid->id].is_lite;
+}
index 30d94eb2eb041af772e72ac9e62d22086a185dcb..fddccb69da13a12d9735dd9acc079b00aea15ac0 100644 (file)
@@ -215,5 +215,12 @@ extern const struct csid_hw_ops csid_ops_4_1;
 extern const struct csid_hw_ops csid_ops_4_7;
 extern const struct csid_hw_ops csid_ops_gen2;
 
+/*
+ * csid_is_lite - Check if CSID is CSID lite.
+ * @csid: CSID Device
+ *
+ * Return whether CSID is CSID lite
+ */
+bool csid_is_lite(struct csid_device *csid);
 
 #endif /* QC_MSM_CAMSS_CSID_H */
index cdb9254cd8b463c1bb5da53152a8213c0a2dec6d..6fc291f40b3927ddfff57d5176ab67922d5058b7 100644 (file)
@@ -638,6 +638,7 @@ static const struct camss_subdev_resources csid_res_845[] = {
                                { 384000000 } },
                .reg = { "csid2" },
                .interrupt = { "csid2" },
+               .is_lite = true,
                .ops = &csid_ops_gen2
        }
 };
@@ -812,6 +813,7 @@ static const struct camss_subdev_resources csid_res_8250[] = {
                                { 0 } },
                .reg = { "csid2" },
                .interrupt = { "csid2" },
+               .is_lite = true,
                .ops = &csid_ops_gen2
        },
        /* CSID3 */
@@ -824,6 +826,7 @@ static const struct camss_subdev_resources csid_res_8250[] = {
                                { 0 } },
                .reg = { "csid3" },
                .interrupt = { "csid3" },
+               .is_lite = true,
                .ops = &csid_ops_gen2
        }
 };