Linux Audio

Check our new training course

Loading...
 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 Bootlin
 6 * Author: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
 7 */
 8
 9#ifndef _SUN6I_CSI_H_
10#define _SUN6I_CSI_H_
11
12#include <media/v4l2-device.h>
13#include <media/videobuf2-v4l2.h>
14
15#include "sun6i_csi_bridge.h"
16#include "sun6i_csi_capture.h"
17
18#define SUN6I_CSI_NAME		"sun6i-csi"
19#define SUN6I_CSI_DESCRIPTION	"Allwinner A31 CSI Device"
20
21enum sun6i_csi_port {
22	SUN6I_CSI_PORT_PARALLEL		= 0,
23	SUN6I_CSI_PORT_MIPI_CSI2	= 1,
24	SUN6I_CSI_PORT_ISP		= 2,
25};
26
27struct sun6i_csi_buffer {
28	struct vb2_v4l2_buffer		v4l2_buffer;
29	struct list_head		list;
30};
31
32struct sun6i_csi_v4l2 {
33	struct v4l2_device		v4l2_dev;
34	struct media_device		media_dev;
35};
36
37struct sun6i_csi_device {
38	struct device			*dev;
39	struct v4l2_device		*v4l2_dev;
40	struct media_device		*media_dev;
41
42	struct sun6i_csi_v4l2		v4l2;
43	struct sun6i_csi_bridge		bridge;
44	struct sun6i_csi_capture	capture;
45
46	struct regmap			*regmap;
47	struct clk			*clock_mod;
48	struct clk			*clock_ram;
49	struct reset_control		*reset;
50
51	bool				isp_available;
52};
53
54struct sun6i_csi_variant {
55	unsigned long	clock_mod_rate;
56};
57
58/* ISP */
59
60int sun6i_csi_isp_complete(struct sun6i_csi_device *csi_dev,
61			   struct v4l2_device *v4l2_dev);
62
63#endif