FILE
csi2.h
File preview with syntax highlighting.
linux-6.19.14/drivers/media/platform/raspberrypi/rp1-cfe/csi2.h
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * RP1 CSI-2 Driver 4 * 5 * Copyright (c) 2021-2024 Raspberry Pi Ltd. 6 * Copyright (c) 2023-2024 Ideas on Board Oy 7 */ 8 9#ifndef _RP1_CSI2_ 10#define _RP1_CSI2_ 11 12#include <linux/debugfs.h> 13#include <linux/io.h> 14#include <linux/types.h> 15#include <media/v4l2-device.h> 16#include <media/v4l2-subdev.h> 17 18#include "dphy.h" 19 20#define CSI2_NUM_CHANNELS 4 21 22#define CSI2_PAD_SINK 0 23#define CSI2_PAD_FIRST_SOURCE 1 24#define CSI2_PAD_NUM_SOURCES 4 25#define CSI2_NUM_PADS 5 26 27#define DISCARDS_TABLE_NUM_VCS 4 28 29enum csi2_mode { 30 CSI2_MODE_NORMAL = 0, 31 CSI2_MODE_REMAP = 1, 32 CSI2_MODE_COMPRESSED = 2, 33 CSI2_MODE_FE_STREAMING = 3, 34}; 35 36enum csi2_compression_mode { 37 CSI2_COMPRESSION_DELTA = 1, 38 CSI2_COMPRESSION_SIMPLE = 2, 39 CSI2_COMPRESSION_COMBINED = 3, 40}; 41 42enum discards_table_index { 43 DISCARDS_TABLE_OVERFLOW = 0, 44 DISCARDS_TABLE_LENGTH_LIMIT, 45 DISCARDS_TABLE_UNMATCHED, 46 DISCARDS_TABLE_INACTIVE, 47 DISCARDS_TABLE_NUM_ENTRIES, 48}; 49 50struct csi2_device { 51 /* Parent V4l2 device */ 52 struct v4l2_device *v4l2_dev; 53 54 void __iomem *base; 55 56 struct dphy_data dphy; 57 58 enum v4l2_mbus_type bus_type; 59 unsigned int bus_flags; 60 unsigned int num_lines[CSI2_NUM_CHANNELS]; 61 62 struct media_pad pad[CSI2_NUM_PADS]; 63 struct v4l2_subdev sd; 64 65 /* lock for csi2 errors counters */ 66 spinlock_t errors_lock; 67 u32 overflows; 68 u32 discards_table[DISCARDS_TABLE_NUM_VCS][DISCARDS_TABLE_NUM_ENTRIES]; 69 u32 discards_dt_table[DISCARDS_TABLE_NUM_ENTRIES]; 70}; 71 72void csi2_isr(struct csi2_device *csi2, bool *sof, bool *eof); 73void csi2_set_buffer(struct csi2_device *csi2, unsigned int channel, 74 dma_addr_t dmaaddr, unsigned int stride, 75 unsigned int size); 76void csi2_set_compression(struct csi2_device *csi2, unsigned int channel, 77 enum csi2_compression_mode mode, unsigned int shift, 78 unsigned int offset); 79void csi2_start_channel(struct csi2_device *csi2, unsigned int channel, 80 enum csi2_mode mode, bool auto_arm, 81 bool pack_bytes, unsigned int width, 82 unsigned int height, u8 vc, u8 dt); 83void csi2_stop_channel(struct csi2_device *csi2, unsigned int channel); 84void csi2_open_rx(struct csi2_device *csi2); 85void csi2_close_rx(struct csi2_device *csi2); 86int csi2_init(struct csi2_device *csi2, struct dentry *debugfs); 87void csi2_uninit(struct csi2_device *csi2); 88 89#endif
~/
Read-only file preview.