162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/*************************************************************************** 362306a36Sopenharmony_ci * Copyright (C) 2006-2010 by Marin Mitov * 462306a36Sopenharmony_ci * mitov@issp.bas.bg * 562306a36Sopenharmony_ci * * 662306a36Sopenharmony_ci * * 762306a36Sopenharmony_ci ***************************************************************************/ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci/* DT3155 header file */ 1062306a36Sopenharmony_ci#ifndef _DT3155_H_ 1162306a36Sopenharmony_ci#define _DT3155_H_ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <linux/pci.h> 1462306a36Sopenharmony_ci#include <linux/interrupt.h> 1562306a36Sopenharmony_ci#include <media/v4l2-device.h> 1662306a36Sopenharmony_ci#include <media/v4l2-dev.h> 1762306a36Sopenharmony_ci#include <media/videobuf2-v4l2.h> 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define DT3155_NAME "dt3155" 2062306a36Sopenharmony_ci#define DT3155_VER_MAJ 2 2162306a36Sopenharmony_ci#define DT3155_VER_MIN 0 2262306a36Sopenharmony_ci#define DT3155_VER_EXT 0 2362306a36Sopenharmony_ci#define DT3155_VERSION __stringify(DT3155_VER_MAJ) "." \ 2462306a36Sopenharmony_ci __stringify(DT3155_VER_MIN) "." \ 2562306a36Sopenharmony_ci __stringify(DT3155_VER_EXT) 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci/* DT3155 Base Register offsets (memory mapped) */ 2862306a36Sopenharmony_ci#define EVEN_DMA_START 0x00 2962306a36Sopenharmony_ci#define ODD_DMA_START 0x0C 3062306a36Sopenharmony_ci#define EVEN_DMA_STRIDE 0x18 3162306a36Sopenharmony_ci#define ODD_DMA_STRIDE 0x24 3262306a36Sopenharmony_ci#define EVEN_PIXEL_FMT 0x30 3362306a36Sopenharmony_ci#define ODD_PIXEL_FMT 0x34 3462306a36Sopenharmony_ci#define FIFO_TRIGGER 0x38 3562306a36Sopenharmony_ci#define XFER_MODE 0x3C 3662306a36Sopenharmony_ci#define CSR1 0x40 3762306a36Sopenharmony_ci#define RETRY_WAIT_CNT 0x44 3862306a36Sopenharmony_ci#define INT_CSR 0x48 3962306a36Sopenharmony_ci#define EVEN_FLD_MASK 0x4C 4062306a36Sopenharmony_ci#define ODD_FLD_MASK 0x50 4162306a36Sopenharmony_ci#define MASK_LENGTH 0x54 4262306a36Sopenharmony_ci#define FIFO_FLAG_CNT 0x58 4362306a36Sopenharmony_ci#define IIC_CLK_DUR 0x5C 4462306a36Sopenharmony_ci#define IIC_CSR1 0x60 4562306a36Sopenharmony_ci#define IIC_CSR2 0x64 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/* DT3155 Internal Registers indexes (i2c/IIC mapped) */ 4862306a36Sopenharmony_ci#define CSR2 0x10 4962306a36Sopenharmony_ci#define EVEN_CSR 0x11 5062306a36Sopenharmony_ci#define ODD_CSR 0x12 5162306a36Sopenharmony_ci#define CONFIG 0x13 5262306a36Sopenharmony_ci#define DT_ID 0x1F 5362306a36Sopenharmony_ci#define X_CLIP_START 0x20 5462306a36Sopenharmony_ci#define Y_CLIP_START 0x22 5562306a36Sopenharmony_ci#define X_CLIP_END 0x24 5662306a36Sopenharmony_ci#define Y_CLIP_END 0x26 5762306a36Sopenharmony_ci#define AD_ADDR 0x30 5862306a36Sopenharmony_ci#define AD_LUT 0x31 5962306a36Sopenharmony_ci#define AD_CMD 0x32 6062306a36Sopenharmony_ci#define DIG_OUT 0x40 6162306a36Sopenharmony_ci#define PM_LUT_ADDR 0x50 6262306a36Sopenharmony_ci#define PM_LUT_DATA 0x51 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci/* AD command register values */ 6562306a36Sopenharmony_ci#define AD_CMD_REG 0x00 6662306a36Sopenharmony_ci#define AD_POS_REF 0x01 6762306a36Sopenharmony_ci#define AD_NEG_REF 0x02 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci/* CSR1 bit masks */ 7062306a36Sopenharmony_ci#define RANGE_EN 0x00008000 7162306a36Sopenharmony_ci#define CRPT_DIS 0x00004000 7262306a36Sopenharmony_ci#define ADDR_ERR_ODD 0x00000800 7362306a36Sopenharmony_ci#define ADDR_ERR_EVEN 0x00000400 7462306a36Sopenharmony_ci#define FLD_CRPT_ODD 0x00000200 7562306a36Sopenharmony_ci#define FLD_CRPT_EVEN 0x00000100 7662306a36Sopenharmony_ci#define FIFO_EN 0x00000080 7762306a36Sopenharmony_ci#define SRST 0x00000040 7862306a36Sopenharmony_ci#define FLD_DN_ODD 0x00000020 7962306a36Sopenharmony_ci#define FLD_DN_EVEN 0x00000010 8062306a36Sopenharmony_ci/* These should not be used. 8162306a36Sopenharmony_ci * Use CAP_CONT_ODD/EVEN instead 8262306a36Sopenharmony_ci#define CAP_SNGL_ODD 0x00000008 8362306a36Sopenharmony_ci#define CAP_SNGL_EVEN 0x00000004 8462306a36Sopenharmony_ci*/ 8562306a36Sopenharmony_ci#define CAP_CONT_ODD 0x00000002 8662306a36Sopenharmony_ci#define CAP_CONT_EVEN 0x00000001 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci/* INT_CSR bit masks */ 8962306a36Sopenharmony_ci#define FLD_START_EN 0x00000400 9062306a36Sopenharmony_ci#define FLD_END_ODD_EN 0x00000200 9162306a36Sopenharmony_ci#define FLD_END_EVEN_EN 0x00000100 9262306a36Sopenharmony_ci#define FLD_START 0x00000004 9362306a36Sopenharmony_ci#define FLD_END_ODD 0x00000002 9462306a36Sopenharmony_ci#define FLD_END_EVEN 0x00000001 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci/* IIC_CSR1 bit masks */ 9762306a36Sopenharmony_ci#define DIRECT_ABORT 0x00000200 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci/* IIC_CSR2 bit masks */ 10062306a36Sopenharmony_ci#define NEW_CYCLE 0x01000000 10162306a36Sopenharmony_ci#define DIR_RD 0x00010000 10262306a36Sopenharmony_ci#define IIC_READ 0x01010000 10362306a36Sopenharmony_ci#define IIC_WRITE 0x01000000 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci/* CSR2 bit masks */ 10662306a36Sopenharmony_ci#define DISP_PASS 0x40 10762306a36Sopenharmony_ci#define BUSY_ODD 0x20 10862306a36Sopenharmony_ci#define BUSY_EVEN 0x10 10962306a36Sopenharmony_ci#define SYNC_PRESENT 0x08 11062306a36Sopenharmony_ci#define VT_50HZ 0x04 11162306a36Sopenharmony_ci#define SYNC_SNTL 0x02 11262306a36Sopenharmony_ci#define CHROM_FILT 0x01 11362306a36Sopenharmony_ci#define VT_60HZ 0x00 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci/* CSR_EVEN/ODD bit masks */ 11662306a36Sopenharmony_ci#define CSR_ERROR 0x04 11762306a36Sopenharmony_ci#define CSR_SNGL 0x02 11862306a36Sopenharmony_ci#define CSR_DONE 0x01 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci/* CONFIG bit masks */ 12162306a36Sopenharmony_ci#define PM_LUT_PGM 0x80 12262306a36Sopenharmony_ci#define PM_LUT_SEL 0x40 12362306a36Sopenharmony_ci#define CLIP_EN 0x20 12462306a36Sopenharmony_ci#define HSCALE_EN 0x10 12562306a36Sopenharmony_ci#define EXT_TRIG_UP 0x0C 12662306a36Sopenharmony_ci#define EXT_TRIG_DOWN 0x04 12762306a36Sopenharmony_ci#define ACQ_MODE_NEXT 0x02 12862306a36Sopenharmony_ci#define ACQ_MODE_ODD 0x01 12962306a36Sopenharmony_ci#define ACQ_MODE_EVEN 0x00 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci/* AD_CMD bit masks */ 13262306a36Sopenharmony_ci#define VIDEO_CNL_1 0x00 13362306a36Sopenharmony_ci#define VIDEO_CNL_2 0x40 13462306a36Sopenharmony_ci#define VIDEO_CNL_3 0x80 13562306a36Sopenharmony_ci#define VIDEO_CNL_4 0xC0 13662306a36Sopenharmony_ci#define SYNC_CNL_1 0x00 13762306a36Sopenharmony_ci#define SYNC_CNL_2 0x10 13862306a36Sopenharmony_ci#define SYNC_CNL_3 0x20 13962306a36Sopenharmony_ci#define SYNC_CNL_4 0x30 14062306a36Sopenharmony_ci#define SYNC_LVL_1 0x00 14162306a36Sopenharmony_ci#define SYNC_LVL_2 0x04 14262306a36Sopenharmony_ci#define SYNC_LVL_3 0x08 14362306a36Sopenharmony_ci#define SYNC_LVL_4 0x0C 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci/* DT3155 identificator */ 14662306a36Sopenharmony_ci#define DT3155_ID 0x20 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci/* per board private data structure */ 14962306a36Sopenharmony_ci/** 15062306a36Sopenharmony_ci * struct dt3155_priv - private data structure 15162306a36Sopenharmony_ci * 15262306a36Sopenharmony_ci * @v4l2_dev: v4l2_device structure 15362306a36Sopenharmony_ci * @vdev: video_device structure 15462306a36Sopenharmony_ci * @pdev: pointer to pci_dev structure 15562306a36Sopenharmony_ci * @vidq: vb2_queue structure 15662306a36Sopenharmony_ci * @curr_buf: pointer to curren buffer 15762306a36Sopenharmony_ci * @mux: mutex to protect the instance 15862306a36Sopenharmony_ci * @dmaq: queue for dma buffers 15962306a36Sopenharmony_ci * @lock: spinlock for dma queue 16062306a36Sopenharmony_ci * @std: input standard 16162306a36Sopenharmony_ci * @width: frame width 16262306a36Sopenharmony_ci * @height: frame height 16362306a36Sopenharmony_ci * @input: current input 16462306a36Sopenharmony_ci * @sequence: frame counter 16562306a36Sopenharmony_ci * @stats: statistics structure 16662306a36Sopenharmony_ci * @regs: local copy of mmio base register 16762306a36Sopenharmony_ci * @csr2: local copy of csr2 register 16862306a36Sopenharmony_ci * @config: local copy of config register 16962306a36Sopenharmony_ci */ 17062306a36Sopenharmony_cistruct dt3155_priv { 17162306a36Sopenharmony_ci struct v4l2_device v4l2_dev; 17262306a36Sopenharmony_ci struct video_device vdev; 17362306a36Sopenharmony_ci struct pci_dev *pdev; 17462306a36Sopenharmony_ci struct vb2_queue vidq; 17562306a36Sopenharmony_ci struct vb2_v4l2_buffer *curr_buf; 17662306a36Sopenharmony_ci struct mutex mux; 17762306a36Sopenharmony_ci struct list_head dmaq; 17862306a36Sopenharmony_ci spinlock_t lock; 17962306a36Sopenharmony_ci v4l2_std_id std; 18062306a36Sopenharmony_ci unsigned width, height; 18162306a36Sopenharmony_ci unsigned input; 18262306a36Sopenharmony_ci unsigned int sequence; 18362306a36Sopenharmony_ci void __iomem *regs; 18462306a36Sopenharmony_ci u8 csr2, config; 18562306a36Sopenharmony_ci}; 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci#endif /* _DT3155_H_ */ 188