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