81 lines
2.3 KiB
C
81 lines
2.3 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||
|
/* Copyright (C) 2013--2024 Intel Corporation */
|
||
|
|
||
|
#ifndef IPU6_ISYS_CSI2_H
|
||
|
#define IPU6_ISYS_CSI2_H
|
||
|
|
||
|
#include <linux/container_of.h>
|
||
|
|
||
|
#include "ipu6-isys-subdev.h"
|
||
|
#include "ipu6-isys-video.h"
|
||
|
|
||
|
struct media_entity;
|
||
|
struct v4l2_mbus_frame_desc_entry;
|
||
|
|
||
|
struct ipu6_isys_video;
|
||
|
struct ipu6_isys;
|
||
|
struct ipu6_isys_csi2_pdata;
|
||
|
struct ipu6_isys_stream;
|
||
|
|
||
|
#define NR_OF_CSI2_VC 16
|
||
|
#define INVALID_VC_ID -1
|
||
|
#define NR_OF_CSI2_SINK_PADS 1
|
||
|
#define CSI2_PAD_SINK 0
|
||
|
#define NR_OF_CSI2_SRC_PADS 8
|
||
|
#define CSI2_PAD_SRC 1
|
||
|
#define NR_OF_CSI2_PADS (NR_OF_CSI2_SINK_PADS + NR_OF_CSI2_SRC_PADS)
|
||
|
|
||
|
#define CSI2_CSI_RX_DLY_CNT_TERMEN_CLANE_A 0
|
||
|
#define CSI2_CSI_RX_DLY_CNT_TERMEN_CLANE_B 0
|
||
|
#define CSI2_CSI_RX_DLY_CNT_SETTLE_CLANE_A 95
|
||
|
#define CSI2_CSI_RX_DLY_CNT_SETTLE_CLANE_B -8
|
||
|
|
||
|
#define CSI2_CSI_RX_DLY_CNT_TERMEN_DLANE_A 0
|
||
|
#define CSI2_CSI_RX_DLY_CNT_TERMEN_DLANE_B 0
|
||
|
#define CSI2_CSI_RX_DLY_CNT_SETTLE_DLANE_A 85
|
||
|
#define CSI2_CSI_RX_DLY_CNT_SETTLE_DLANE_B -2
|
||
|
|
||
|
struct ipu6_isys_csi2 {
|
||
|
struct ipu6_isys_subdev asd;
|
||
|
struct ipu6_isys_csi2_pdata *pdata;
|
||
|
struct ipu6_isys *isys;
|
||
|
struct ipu6_isys_video av[NR_OF_CSI2_SRC_PADS];
|
||
|
|
||
|
void __iomem *base;
|
||
|
u32 receiver_errors;
|
||
|
unsigned int nlanes;
|
||
|
unsigned int port;
|
||
|
};
|
||
|
|
||
|
struct ipu6_isys_csi2_timing {
|
||
|
u32 ctermen;
|
||
|
u32 csettle;
|
||
|
u32 dtermen;
|
||
|
u32 dsettle;
|
||
|
};
|
||
|
|
||
|
struct ipu6_csi2_error {
|
||
|
const char *error_string;
|
||
|
bool is_info_only;
|
||
|
};
|
||
|
|
||
|
#define ipu6_isys_subdev_to_csi2(__sd) \
|
||
|
container_of(__sd, struct ipu6_isys_csi2, asd)
|
||
|
|
||
|
#define to_ipu6_isys_csi2(__asd) container_of(__asd, struct ipu6_isys_csi2, asd)
|
||
|
|
||
|
s64 ipu6_isys_csi2_get_link_freq(struct ipu6_isys_csi2 *csi2);
|
||
|
int ipu6_isys_csi2_init(struct ipu6_isys_csi2 *csi2, struct ipu6_isys *isys,
|
||
|
void __iomem *base, unsigned int index);
|
||
|
void ipu6_isys_csi2_cleanup(struct ipu6_isys_csi2 *csi2);
|
||
|
void ipu6_isys_csi2_sof_event_by_stream(struct ipu6_isys_stream *stream);
|
||
|
void ipu6_isys_csi2_eof_event_by_stream(struct ipu6_isys_stream *stream);
|
||
|
void ipu6_isys_register_errors(struct ipu6_isys_csi2 *csi2);
|
||
|
void ipu6_isys_csi2_error(struct ipu6_isys_csi2 *csi2);
|
||
|
int ipu6_isys_csi2_get_remote_desc(u32 source_stream,
|
||
|
struct ipu6_isys_csi2 *csi2,
|
||
|
struct media_entity *source_entity,
|
||
|
struct v4l2_mbus_frame_desc_entry *entry);
|
||
|
|
||
|
#endif /* IPU6_ISYS_CSI2_H */
|