90 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ */2/*3 * Copyright (c) 2011-2018 Magewell Electronics Co., Ltd. (Nanjing)4 * Author: Yong Deng <yong.deng@magewell.com>5 * Copyright 2021-2022 Bootlin6 * Author: Paul Kocialkowski <paul.kocialkowski@bootlin.com>7 */8 9#ifndef _SUN6I_CAPTURE_H_10#define _SUN6I_CAPTURE_H_11 12#include <media/v4l2-device.h>13 14#define SUN6I_CSI_CAPTURE_NAME "sun6i-csi-capture"15 16#define SUN6I_CSI_CAPTURE_WIDTH_MIN 3217#define SUN6I_CSI_CAPTURE_WIDTH_MAX 480018#define SUN6I_CSI_CAPTURE_HEIGHT_MIN 3219#define SUN6I_CSI_CAPTURE_HEIGHT_MAX 480020 21struct sun6i_csi_device;22 23struct sun6i_csi_capture_format {24 u32 pixelformat;25 u8 output_format_field;26 u8 output_format_frame;27 bool input_yuv_seq_invert;28 bool input_format_raw;29 u32 hsize_len_factor;30};31 32struct sun6i_csi_capture_format_match {33 u32 pixelformat;34 u32 mbus_code;35};36 37#undef current38struct sun6i_csi_capture_state {39 struct list_head queue;40 spinlock_t lock; /* Queue and buffers lock. */41 42 struct sun6i_csi_buffer *pending;43 struct sun6i_csi_buffer *current;44 struct sun6i_csi_buffer *complete;45 46 unsigned int sequence;47 bool streaming;48 bool setup;49};50 51struct sun6i_csi_capture {52 struct sun6i_csi_capture_state state;53 54 struct video_device video_dev;55 struct vb2_queue queue;56 struct mutex lock; /* Queue lock. */57 struct media_pad pad;58 59 struct v4l2_format format;60};61 62/* Helpers */63 64void sun6i_csi_capture_dimensions(struct sun6i_csi_device *csi_dev,65 unsigned int *width, unsigned int *height);66void sun6i_csi_capture_format(struct sun6i_csi_device *csi_dev,67 u32 *pixelformat, u32 *field);68 69/* Format */70 71const72struct sun6i_csi_capture_format *sun6i_csi_capture_format_find(u32 pixelformat);73 74/* Capture */75 76void sun6i_csi_capture_configure(struct sun6i_csi_device *csi_dev);77void sun6i_csi_capture_state_update(struct sun6i_csi_device *csi_dev);78 79/* State */80 81void sun6i_csi_capture_sync(struct sun6i_csi_device *csi_dev);82void sun6i_csi_capture_frame_done(struct sun6i_csi_device *csi_dev);83 84/* Capture */85 86int sun6i_csi_capture_setup(struct sun6i_csi_device *csi_dev);87void sun6i_csi_capture_cleanup(struct sun6i_csi_device *csi_dev);88 89#endif90