xref: /OK3568_Linux_fs/kernel/drivers/video/rockchip/vehicle/vehicle_ad.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Rockchip Vehicle driver
4  *
5  * Copyright (C) 2022 Rockchip Electronics Co., Ltd.
6  */
7 #ifndef __VEHICLE_AD_COMMON_H
8 #define __VEHICLE_AD_COMMON_H
9 #include <linux/i2c.h>
10 #include "vehicle_cfg.h"
11 #include <linux/rk-camera-module.h>
12 
13 enum vehicle_ad_fix_format {
14 	AD_FIX_FORMAT_AUTO_DETECT = 0,
15 	AD_FIX_FORMAT_PAL = 1,
16 	AD_FIX_FORMAT_NTSC = 2,
17 	AD_FIX_FORMAT_720P_50FPS = 3,
18 	AD_FIX_FORMAT_720P_30FPS = 4,
19 	AD_FIX_FORMAT_720P_25FPS = 5,
20 	AD_FIX_FORMAT_1080P_30FPS = 6,
21 	AD_FIX_FORMAT_1080P_25FPS = 7,
22 };
23 
24 struct vehicle_camera_device_defrect {
25 	unsigned int width;
26 	unsigned int height;
27 	unsigned int crop_x;
28 	unsigned int crop_y;
29 	unsigned int crop_width;
30 	unsigned int crop_height;
31 	const char *interface;
32 };
33 
34 struct vehicle_state_check_work {
35 	struct workqueue_struct *state_check_wq;
36 	struct delayed_work work;
37 };
38 
39 struct vehicle_ad_dev {
40 	struct device *dev;
41 	struct i2c_adapter *adapter;
42 	const char *ad_name;
43 	int resolution;
44 	int mclk_rate;
45 	int ad_chl;
46 	int i2c_chl;
47 	int i2c_add;
48 //	int i2c_rate;
49 	int powerdown;
50 	int pwdn_active;
51 	int power;
52 	int pwr_active;
53 	int reset;
54 	int rst_active;
55 	int cvstd;
56 	int cvstd_irq_flag;
57 	int irq;
58 	int fix_format;
59 	struct vehicle_camera_device_defrect defrects[4];
60 	struct vehicle_state_check_work	state_check_work;
61 	struct vehicle_cfg cfg;
62 	int cif_error_last_line;
63 	u32 channel_reso[PAD_MAX];
64 	u8 detect_status;
65 	u8 last_detect_status;
66 	int drop_frames;
67 };
68 
69 int vehicle_generic_sensor_write(struct vehicle_ad_dev *ad, char reg, char *pval);
70 int vehicle_sensor_write(struct vehicle_ad_dev *ad, u8 reg, u8 val);
71 int vehicle_generic_sensor_read(struct vehicle_ad_dev *ad, char reg);
72 int vehicle_sensor_read(struct vehicle_ad_dev *ad, u8 reg, u8 *val);
73 int vehicle_parse_sensor(struct vehicle_ad_dev *ad);
74 void vehicle_ad_channel_set(struct vehicle_ad_dev *ad, int channel);
75 
76 int vehicle_ad_init(struct vehicle_ad_dev *ad);
77 int vehicle_ad_deinit(void);
78 int vehicle_ad_stream(struct vehicle_ad_dev *ad, int val);
79 struct vehicle_cfg *vehicle_ad_get_vehicle_cfg(void);
80 void vehicle_ad_check_cif_error(struct vehicle_ad_dev *ad, int last_line);
81 int vehicle_to_v4l2_drv_init(void);
82 
83 #endif
84