]> www.infradead.org Git - linux.git/commitdiff
media: rkisp1: Add feature flags for BLS and compand
authorPaul Elder <paul.elder@ideasonboard.com>
Thu, 8 Aug 2024 20:41:04 +0000 (22:41 +0200)
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Wed, 14 Aug 2024 13:42:57 +0000 (16:42 +0300)
Add feature flags for the dedicated black level subtraction hardware
block and for the compand hardware block. The companding feature flag is
added on its own (as opposed to "the absence of BLS") because we will
need it later for when we add support for the companding block.

Skip BLS configuration when the BLS feature flag is unset, as devices
without the dedicated BLS block cannot configure a hardware block that
doesn't exist.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c

index a5207926157976ac90ccb27c807f3fe92677419d..ca952fd0829ba7d923ad42fec92840ccd422b6e5 100644 (file)
@@ -116,6 +116,8 @@ enum rkisp1_isp_pad {
  * @RKISP1_FEATURE_SELF_PATH: The ISP has a self path
  * @RKISP1_FEATURE_DUAL_CROP: The ISP has the dual crop block at the resizer input
  * @RKISP1_FEATURE_DMA_34BIT: The ISP uses 34-bit DMA addresses
+ * @RKISP1_FEATURE_BLS: The ISP has a dedicated BLS block
+ * @RKISP1_FEATURE_COMPAND: The ISP has a companding block
  *
  * The ISP features are stored in a bitmask in &rkisp1_info.features and allow
  * the driver to implement support for features present in some ISP versions
@@ -127,6 +129,8 @@ enum rkisp1_feature {
        RKISP1_FEATURE_SELF_PATH = BIT(2),
        RKISP1_FEATURE_DUAL_CROP = BIT(3),
        RKISP1_FEATURE_DMA_34BIT = BIT(4),
+       RKISP1_FEATURE_BLS = BIT(5),
+       RKISP1_FEATURE_COMPAND = BIT(6),
 };
 
 #define rkisp1_has_feature(rkisp1, feature) \
index 0535ce57e86230c30b9a06f6b3fd6848b675523b..dd114ab77800f8bdff64a1c97b587fd8959b5237 100644 (file)
@@ -509,7 +509,8 @@ static const struct rkisp1_info px30_isp_info = {
        .isp_ver = RKISP1_V12,
        .features = RKISP1_FEATURE_MIPI_CSI2
                  | RKISP1_FEATURE_SELF_PATH
-                 | RKISP1_FEATURE_DUAL_CROP,
+                 | RKISP1_FEATURE_DUAL_CROP
+                 | RKISP1_FEATURE_BLS,
        .max_width = 3264,
        .max_height = 2448,
 };
@@ -532,7 +533,8 @@ static const struct rkisp1_info rk3399_isp_info = {
        .isp_ver = RKISP1_V10,
        .features = RKISP1_FEATURE_MIPI_CSI2
                  | RKISP1_FEATURE_SELF_PATH
-                 | RKISP1_FEATURE_DUAL_CROP,
+                 | RKISP1_FEATURE_DUAL_CROP
+                 | RKISP1_FEATURE_BLS,
        .max_width = 4416,
        .max_height = 3312,
 };
@@ -554,7 +556,8 @@ static const struct rkisp1_info imx8mp_isp_info = {
        .isr_size = ARRAY_SIZE(imx8mp_isp_isrs),
        .isp_ver = RKISP1_V_IMX8MP,
        .features = RKISP1_FEATURE_MAIN_STRIDE
-                 | RKISP1_FEATURE_DMA_34BIT,
+                 | RKISP1_FEATURE_DMA_34BIT
+                 | RKISP1_FEATURE_COMPAND,
        .max_width = 4096,
        .max_height = 3072,
 };
index 095f0189941e4c22859c330f28fc7c1c5b3a1a94..9cbbc6adef3921b507fd0327f9aa6fd7d198ee78 100644 (file)
@@ -1268,6 +1268,12 @@ rkisp1_isp_isr_other_config(struct rkisp1_params *params,
        module_cfg_update = new_params->module_cfg_update;
        module_ens = new_params->module_ens;
 
+       if (!rkisp1_has_feature(params->rkisp1, BLS)) {
+               module_en_update &= ~RKISP1_CIF_ISP_MODULE_BLS;
+               module_cfg_update &= ~RKISP1_CIF_ISP_MODULE_BLS;
+               module_ens &= ~RKISP1_CIF_ISP_MODULE_BLS;
+       }
+
        /* update dpc config */
        if (module_cfg_update & RKISP1_CIF_ISP_MODULE_DPCC)
                rkisp1_dpcc_config(params,
@@ -1862,6 +1868,7 @@ static const struct rkisp1_ext_params_handler {
                .size           = sizeof(struct rkisp1_ext_params_bls_config),
                .handler        = rkisp1_ext_params_bls,
                .group          = RKISP1_EXT_PARAMS_BLOCK_GROUP_OTHERS,
+               .features       = RKISP1_FEATURE_BLS,
        },
        [RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC] = {
                .size           = sizeof(struct rkisp1_ext_params_dpcc_config),