summaryrefslogtreecommitdiff
path: root/drivers/staging/media/imx/imx8-isi-core.h
diff options
context:
space:
mode:
authorGuoniu.zhou <guoniu.zhou@nxp.com>2019-10-25 10:00:38 +0800
committerGuoniu.zhou <guoniu.zhou@nxp.com>2019-12-02 15:37:03 +0800
commitf093fe32626a9a4486d0849c85723c8bd2db8cd8 (patch)
tree1789e7da5ab7eb9fbe9a0a9d991496b5471dc734 /drivers/staging/media/imx/imx8-isi-core.h
parentd8977ba09f7e4827cc4d68bc670b72da3fa3d06b (diff)
staging: media: imx: enable ISI for imx8mn platform
ISI is image sensor interface of imx8 family. It's reused in imx8mn platform. But they use different clock tree, so driver need to select the related clock operation for different platform. In order to solve the problem, driver define mxc_isi_dev_ops which used to control clock operation. Dispmix subsystem of imx8mn is consist of ISI, CSI, DSI and LCDIF modules. It use GPR to manage the reset and clock signal for all modules. We add a reset driver for dispmix reset function, so add related consumer of reset in ISI core driver. Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Diffstat (limited to 'drivers/staging/media/imx/imx8-isi-core.h')
-rw-r--r--drivers/staging/media/imx/imx8-isi-core.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/staging/media/imx/imx8-isi-core.h b/drivers/staging/media/imx/imx8-isi-core.h
index 24fbfbd9c3b9..44f2a25271ee 100644
--- a/drivers/staging/media/imx/imx8-isi-core.h
+++ b/drivers/staging/media/imx/imx8-isi-core.h
@@ -33,6 +33,8 @@
#include <media/v4l2-ctrls.h>
#include <media/videobuf2-core.h>
#include <media/videobuf2-dma-contig.h>
+#include <linux/regmap.h>
+#include <linux/reset.h>
#include "imx8-common.h"
@@ -41,6 +43,8 @@
#define MXC_ISI_M2M "mxc-isi-m2m"
#define MXC_MAX_PLANES 3
+struct mxc_isi_dev;
+
enum mxc_isi_out_fmt {
MXC_ISI_OUT_FMT_RGBA32 = 0x0,
MXC_ISI_OUT_FMT_ABGR32,
@@ -188,6 +192,7 @@ struct mxc_isi_buffer {
struct vb2_v4l2_buffer v4l2_buf;
struct list_head list;
struct frame_addr paddr;
+ enum mxc_isi_buf_id id;
bool discard;
};
@@ -223,6 +228,12 @@ struct mxc_isi_ctx {
struct v4l2_fh fh;
};
+struct mxc_isi_dev_ops {
+ int (*clk_get)(struct mxc_isi_dev *mxc_isi);
+ int (*clk_enable)(struct mxc_isi_dev *mxc_isi);
+ void (*clk_disable)(struct mxc_isi_dev *mxc_isi);
+};
+
struct mxc_isi_cap_dev {
struct v4l2_subdev sd;
struct video_device vdev;
@@ -265,8 +276,21 @@ struct mxc_isi_dev {
struct mxc_isi_m2m_dev *isi_m2m;
struct platform_device *pdev;
+
+ /* clk for imx8qxp/qm platform */
struct clk *clk;
+ /* clks for imx8mn platform */
+ struct clk *clk_disp_axi;
+ struct clk *clk_disp_apb;
+ struct clk *clk_root_disp_axi;
+ struct clk *clk_root_disp_apb;
+
+ const struct mxc_isi_dev_ops *ops;
+
+ struct reset_control *soft_resetn;
+ struct reset_control *clk_enable;
+
struct mutex lock;
spinlock_t slock;
@@ -285,6 +309,8 @@ struct mxc_isi_dev {
u32 pre_dec_x;
u32 pre_dec_y;
+ u32 status;
+
u32 interface[MAX_PORTS];
int id;