summaryrefslogtreecommitdiff
path: root/drivers/media/platform/imx8/mxc-jpeg.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/platform/imx8/mxc-jpeg.h')
-rw-r--r--drivers/media/platform/imx8/mxc-jpeg.h141
1 files changed, 141 insertions, 0 deletions
diff --git a/drivers/media/platform/imx8/mxc-jpeg.h b/drivers/media/platform/imx8/mxc-jpeg.h
new file mode 100644
index 000000000000..d2eb0521321d
--- /dev/null
+++ b/drivers/media/platform/imx8/mxc-jpeg.h
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2018 NXP
+ */
+/*
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+#include <media/v4l2-ctrls.h>
+#include <media/v4l2-device.h>
+#include <media/v4l2-fh.h>
+
+#ifndef _MXC_JPEG_CORE_H
+#define _MXC_JPEG_CORE_H
+
+#define MXC_JPEG_M2M_NAME "mxc-jpeg"
+#define MXC_JPEG_NAME "mxc-jpeg"
+#define MXC_IN_FORMAT 0
+#define MXC_OUT_FORMAT 1
+#define MXC_JPEG_INIT 0
+#define MXC_JPEG_RUNNING 1
+#define MXC_JPEG_FMT_TYPE_ENC 0
+#define MXC_JPEG_FMT_TYPE_RAW 1
+#define MXC_JPEG_NUM_FORMATS 4
+#define MXC_JPEG_MIN_HEIGHT 0x8
+#define MXC_JPEG_MIN_WIDTH 0x8
+#define MXC_JPEG_MAX_HEIGHT 0x2000
+#define MXC_JPEG_MAX_WIDTH 0x2000
+#define MXC_JPEG_DEFAULT_SIZEIMAGE 10000
+#define MXC_JPEG_ENC_CONF 1
+#define MXC_JPEG_ENC_DONE 0
+#define SOF0 0xC0
+#define SOF2 0xC2
+#define MXC_JPEG_ENC_CONF_DONE 1
+
+
+/**
+ * struct jpeg_fmt - driver's internal color format data
+ * @name: format description
+ * @fourcc: fourcc code, 0 if not applicable
+ * @depth: number of bits per pixel
+ * @colplanes: number of color planes (1 for packed formats)
+ * @h_align: horizontal alignment order (align to 2^h_align)
+ * @v_align: vertical alignment order (align to 2^v_align)
+ * @flags: flags describing format applicability
+ */
+struct mxc_jpeg_fmt {
+ char *name;
+ u32 fourcc;
+ int depth;
+ int colplanes;
+ int memplanes;
+ int h_align;
+ int v_align;
+ int subsampling;
+ u32 flags;
+};
+struct mxc_jpeg_desc {
+ u32 next_descpt_ptr;
+ u32 buf_base0;
+ u32 buf_base1;
+ u32 line_pitch;
+ u32 stm_bufbase;
+ u32 stm_bufsize;
+ u32 imgsize;
+ u32 stm_ctrl;
+} __packed;
+
+struct mxc_jpeg_q_data {
+ struct mxc_jpeg_fmt *fmt;
+ u32 sizeimage[1];
+ u32 bytesperline[2];
+ int w;
+ int h;
+ u32 stride;
+};
+struct mxc_jpeg_ctx {
+ struct mxc_jpeg_dev *mxc_jpeg;
+ struct mxc_jpeg_q_data out_q;
+ struct mxc_jpeg_q_data cap_q;
+ struct v4l2_rect crop_rect;
+ unsigned long state;
+ struct v4l2_fh fh;
+ unsigned int mode;
+ unsigned int enc_state;
+ unsigned int aborting;
+};
+
+struct mxc_jpeg_slot_data {
+ int used;
+ struct mxc_jpeg_desc *desc; // enc/dec descriptor
+ struct mxc_jpeg_desc *cfg_desc; // configuration descriptor
+ void *cfg_stream_vaddr; // configuration bitstream virtual address
+ int flags;
+ dma_addr_t desc_handle;
+ dma_addr_t cfg_desc_handle; // configuration descriptor dma address
+ dma_addr_t cfg_stream_handle; // configuration bitstream dma address
+};
+
+struct mxc_jpeg_dev {
+ spinlock_t hw_lock;
+ unsigned int mode;
+ struct mutex lock;
+ bool enc;
+ bool dec;
+ struct clk *clk_ipg;
+ struct clk *clk_per;
+ struct platform_device *pdev;
+ struct device *dev;
+ void __iomem *base_reg;
+ void __iomem *enc_reg;
+ struct v4l2_device v4l2_dev;
+ struct v4l2_m2m_dev *m2m_dev;
+ struct video_device *dec_vdev;
+ unsigned int irq;
+ int id;
+
+ struct mxc_jpeg_slot_data slot_data[MXC_MAX_SLOTS];
+};
+
+/* JPEG Start Of Frame marker fields*/
+struct mxc_jpeg_sof_comp {
+ u8 id; /*component id*/
+ u8 v :4; /* vertical sampling*/
+ u8 h :4; /* horizontal sampling*/
+ u8 quantization_table_no;
+} __packed;
+
+struct mxc_jpeg_sof {
+ u16 length;
+ u8 precision;
+ u16 height, width;
+ u8 components_no;
+ struct mxc_jpeg_sof_comp comp[3];
+} __packed;
+
+#endif