1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Support for Medifield PNW Camera Imaging ISP subsystem.
4  *
5  * Copyright (c) 2010 Intel Corporation. All Rights Reserved.
6  */
7 #ifndef __ATOMISP_CSI2_H__
8 #define __ATOMISP_CSI2_H__
9 
10 #include <linux/gpio/consumer.h>
11 #include <linux/property.h>
12 
13 #include <media/v4l2-subdev.h>
14 #include <media/v4l2-ctrls.h>
15 
16 #include "../../include/linux/atomisp.h"
17 
18 #define CSI2_PAD_SINK		0
19 #define CSI2_PAD_SOURCE		1
20 #define CSI2_PADS_NUM		2
21 
22 #define CSI2_MAX_ACPI_GPIOS	2u
23 
24 struct acpi_device;
25 struct v4l2_device;
26 
27 struct atomisp_device;
28 struct atomisp_sub_device;
29 
30 struct atomisp_csi2_acpi_gpio_map {
31 	struct acpi_gpio_params params[CSI2_MAX_ACPI_GPIOS];
32 	struct acpi_gpio_mapping mapping[CSI2_MAX_ACPI_GPIOS + 1];
33 };
34 
35 struct atomisp_csi2_acpi_gpio_parsing_data {
36 	struct acpi_device *adev;
37 	struct atomisp_csi2_acpi_gpio_map *map;
38 	u32 settings[CSI2_MAX_ACPI_GPIOS];
39 	unsigned int settings_count;
40 	unsigned int res_count;
41 	unsigned int map_count;
42 };
43 
44 struct atomisp_mipi_csi2_device {
45 	struct v4l2_subdev subdev;
46 	struct media_pad pads[CSI2_PADS_NUM];
47 	struct v4l2_mbus_framefmt formats[CSI2_PADS_NUM];
48 
49 	struct v4l2_ctrl_handler ctrls;
50 	struct atomisp_device *isp;
51 };
52 
53 int atomisp_csi2_set_ffmt(struct v4l2_subdev *sd,
54 			  struct v4l2_subdev_state *sd_state,
55 			  unsigned int which, uint16_t pad,
56 			  struct v4l2_mbus_framefmt *ffmt);
57 int atomisp_mipi_csi2_init(struct atomisp_device *isp);
58 void atomisp_mipi_csi2_cleanup(struct atomisp_device *isp);
59 void atomisp_mipi_csi2_unregister_entities(
60     struct atomisp_mipi_csi2_device *csi2);
61 int atomisp_mipi_csi2_register_entities(struct atomisp_mipi_csi2_device *csi2,
62 					struct v4l2_device *vdev);
63 int atomisp_csi2_bridge_init(struct atomisp_device *isp);
64 int atomisp_csi2_bridge_parse_firmware(struct atomisp_device *isp);
65 
66 void atomisp_csi2_configure(struct atomisp_sub_device *asd);
67 
68 #endif /* __ATOMISP_CSI2_H__ */
69