diff --git a/drivers/media/platform/rockchip/isp/isp_rockit.c b/drivers/media/platform/rockchip/isp/isp_rockit.c index 0ba72aad0c73..d97cc27976ee 100644 --- a/drivers/media/platform/rockchip/isp/isp_rockit.c +++ b/drivers/media/platform/rockchip/isp/isp_rockit.c @@ -657,3 +657,37 @@ int rkisp_rockit_get_ispdev(char **name) return 0; } EXPORT_SYMBOL(rkisp_rockit_get_ispdev); + +int rkisp_rockit_get_isp_mode(const char *name) +{ + struct rkisp_device *ispdev = NULL; + int i, ret = -EINVAL; + + if (rockit_cfg == NULL) + goto end; + + for (i = 0; i < rockit_cfg->isp_num; i++) { + if (!strcmp(rockit_cfg->rkisp_dev_cfg[i].isp_name, name)) { + ispdev = rockit_cfg->rkisp_dev_cfg[i].isp_dev; + break; + } + } + if (!ispdev) + goto end; + + if (ispdev->is_pre_on) { + if (IS_HDR_RDBK(ispdev->rd_mode)) + ret = RKISP_FAST_OFFLINE; + else + ret = RKISP_FAST_ONLINE; + } else { + if (IS_HDR_RDBK(ispdev->rd_mode)) + ret = RKISP_NORMAL_OFFLINE; + else + ret = RKISP_NORMAL_ONLINE; + } + +end: + return ret; +} +EXPORT_SYMBOL(rkisp_rockit_get_isp_mode); diff --git a/include/soc/rockchip/rockchip_rockit.h b/include/soc/rockchip/rockchip_rockit.h index 212351b0cf6b..9d3a34b0c8d8 100644 --- a/include/soc/rockchip/rockchip_rockit.h +++ b/include/soc/rockchip/rockchip_rockit.h @@ -14,6 +14,13 @@ #define ROCKIT_VICAP_NUM_MAX 6 +enum { + RKISP_NORMAL_ONLINE, + RKISP_NORMAL_OFFLINE, + RKISP_FAST_ONLINE, + RKISP_FAST_OFFLINE, +}; + enum function_cmd { ROCKIT_BUF_QUE, ROCKIT_MPIBUF_DONE @@ -116,6 +123,7 @@ struct rockit_rkcif_cfg { void *rkisp_rockit_function_register(void *function, int cmd); int rkisp_rockit_get_ispdev(char **name); +int rkisp_rockit_get_isp_mode(const char *name); int rkisp_rockit_buf_queue(struct rockit_cfg *input_rockit_cfg); int rkisp_rockit_pause_stream(struct rockit_cfg *input_rockit_cfg); int rkisp_rockit_resume_stream(struct rockit_cfg *input_rockit_cfg); @@ -137,6 +145,7 @@ int rkcif_rockit_pause_stream(struct rockit_rkcif_cfg *input_rockit_cfg); static inline void *rkisp_rockit_function_register(void *function, int cmd) { return NULL; } static inline int rkisp_rockit_get_ispdev(char **name) { return -EINVAL; } +static inline int rkisp_rockit_get_isp_mode(const char *name) { return -EINVAL; } static inline int rkisp_rockit_buf_queue(struct rockit_cfg *input_rockit_cfg) { return -EINVAL;