kernel-brax3-ubuntu-touch/drivers/misc/mediatek/imgsensor/src-v4l2/adaptor-subdrv-ctrl.h
erascape f319b992b1 kernel-5.15: Initial import brax3 UT kernel
* halium configs enabled

Signed-off-by: erascape <erascape@proton.me>
2025-09-23 15:17:10 +00:00

177 lines
8.7 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2020 MediaTek Inc. */
#ifndef __ADAPTOR_SUBDRV_CTRL_H__
#define __ADAPTOR_SUBDRV_CTRL_H__
#include "adaptor-subdrv.h"
#define DRV_LOG(ctx, format, args...) do { \
struct v4l2_subdev *_sd = NULL; \
struct adaptor_ctx *_adaptor_ctx = NULL; \
if (ctx->i2c_client) \
_sd = i2c_get_clientdata(ctx->i2c_client); \
if (_sd) \
_adaptor_ctx = to_ctx(_sd); \
if (_adaptor_ctx && (_adaptor_ctx)->subdrv \
&& unlikely(*((_adaptor_ctx)->sensor_debug_flag))) { \
dev_info(_adaptor_ctx->dev, "[%s][%s] " format, \
(_adaptor_ctx)->subdrv->name, __func__, ##args); \
} \
} while (0)
#define DRV_LOGE(ctx, format, args...) do { \
struct v4l2_subdev *_sd = NULL; \
struct adaptor_ctx *_adaptor_ctx = NULL; \
if (ctx->i2c_client) \
_sd = i2c_get_clientdata(ctx->i2c_client); \
if (_sd) \
_adaptor_ctx = to_ctx(_sd); \
if (_adaptor_ctx && (_adaptor_ctx)->subdrv) { \
dev_info(_adaptor_ctx->dev, "[%s][%s] error: " format, \
(_adaptor_ctx)->subdrv->name, __func__, ##args); \
} \
} while (0)
#define DRV_LOG_MUST(ctx, format, args...) do { \
struct v4l2_subdev *_sd = NULL; \
struct adaptor_ctx *_adaptor_ctx = NULL; \
if (ctx->i2c_client) \
_sd = i2c_get_clientdata(ctx->i2c_client); \
if (_sd) \
_adaptor_ctx = to_ctx(_sd); \
if (_adaptor_ctx && (_adaptor_ctx)->subdrv) { \
dev_info(_adaptor_ctx->dev, "[%s][%s] " format, \
(_adaptor_ctx)->subdrv->name, __func__, ##args); \
} \
} while (0)
void check_current_scenario_id_bound(struct subdrv_ctx *ctx);
void i2c_table_write(struct subdrv_ctx *ctx, u16 *list, u32 len);
void commit_i2c_buffer(struct subdrv_ctx *ctx);
void set_i2c_buffer(struct subdrv_ctx *ctx, u16 reg, u16 val);
u16 i2c_read_eeprom(struct subdrv_ctx *ctx, u16 addr);
void get_pdaf_reg_setting(struct subdrv_ctx *ctx, u32 regNum, u16 *regDa);
void set_pdaf_reg_setting(struct subdrv_ctx *ctx, u32 regNum, u16 *regDa);
void set_mirror_flip(struct subdrv_ctx *ctx, u8 image_mirror);
bool probe_eeprom(struct subdrv_ctx *ctx);
void read_sensor_Cali(struct subdrv_ctx *ctx);
void write_sensor_Cali(struct subdrv_ctx *ctx);
void write_frame_length(struct subdrv_ctx *ctx, u32 fll);
void set_dummy(struct subdrv_ctx *ctx);
void set_frame_length(struct subdrv_ctx *ctx, u16 frame_length);
void set_max_framerate(struct subdrv_ctx *ctx, u16 framerate, bool min_framelength_en);
void set_max_framerate_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 framerate);
bool set_auto_flicker(struct subdrv_ctx *ctx, bool min_framelength_en);
void set_long_exposure(struct subdrv_ctx *ctx);
void set_shutter(struct subdrv_ctx *ctx, u32 shutter);
void set_shutter_frame_length(struct subdrv_ctx *ctx, u32 shutter, u32 frame_length);
void set_hdr_tri_shutter(struct subdrv_ctx *ctx, u64 *shutters, u16 exp_cnt);
void set_multi_shutter_frame_length(struct subdrv_ctx *ctx,
u32 *shutters, u16 shutter_cnt, u16 frame_length);
u16 gain2reg(u32 gain);
void set_gain(struct subdrv_ctx *ctx, u32 gain);
void set_hdr_tri_gain(struct subdrv_ctx *ctx, u64 *gains, u16 exp_cnt);
void set_multi_gain(struct subdrv_ctx *ctx, u32 *gains, u16 exp_cnt);
void set_multi_dig_gain(struct subdrv_ctx *ctx, u32 *gains, u16 exp_cnt);
void get_lens_driver_id(struct subdrv_ctx *ctx, u32 *lens_id);
void check_stream_off(struct subdrv_ctx *ctx);
void streaming_control(struct subdrv_ctx *ctx, bool enable);
void set_video_mode(struct subdrv_ctx *ctx, u16 framerate);
void set_auto_flicker_mode(struct subdrv_ctx *ctx, bool enable, u16 framerate);
void get_output_format_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u64 *sensor_output_dataformat);
void get_ana_gain_table(struct subdrv_ctx *ctx, u64 *size, void *data);
void get_gain_range_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u64 *min_gain, u64 *max_gain);
void get_base_gain_iso_and_step(struct subdrv_ctx *ctx,
u64 *min_gain_iso, u64 *gain_step, u64 *gain_type);
void get_dig_gain_range_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u64 *min_dgain, u64 *max_dgain);
void get_dig_gain_step(struct subdrv_ctx *ctx, u64 *gain_step);
void get_min_shutter_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id,
u64 *min_shutter, u64 *exposure_step);
void get_offset_to_start_of_exposure(struct subdrv_ctx *ctx, u32 *offset);
void get_pixel_clock_freq_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *pclk);
void get_period_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *period, u64 flag);
void get_period(struct subdrv_ctx *ctx,
u16 *line_length, u16 *frame_length);
void get_pixel_clock_freq(struct subdrv_ctx *ctx, u32 *pclk);
void get_default_framerate_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *framerate);
void get_fine_integ_line_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *fine_integ_line);
void set_test_pattern(struct subdrv_ctx *ctx, u32 mode);
void set_test_pattern_data(struct subdrv_ctx *ctx, struct mtk_test_pattern_data *data);
void get_test_pattern_checksum_value(struct subdrv_ctx *ctx, u32 *checksum);
void set_framerate(struct subdrv_ctx *ctx, u32 framerate);
void set_hdr(struct subdrv_ctx *ctx, u32 mode);
void get_crop_info(struct subdrv_ctx *ctx, enum SENSOR_SCENARIO_ID_ENUM scenario_id,
struct SENSOR_WINSIZE_INFO_STRUCT *wininfo);
void get_pdaf_info(struct subdrv_ctx *ctx, enum SENSOR_SCENARIO_ID_ENUM scenario_id,
struct SET_PD_BLOCK_INFO_T *pd_info);
void get_sensor_pdaf_capacity(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *pdaf_cap);
void extend_frame_length(struct subdrv_ctx *ctx, u32 ns);
void seamless_switch(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *ae_ctrl);
void get_seamless_scenarios(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *pScenarios);
void get_sensor_hdr_capacity(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *hdr_mode);
void get_stagger_target_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id,
enum IMGSENSOR_HDR_MODE_ENUM hdr_mode, u32 *pScenarios);
void get_frame_ctrl_info_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *margin);
void get_feature_get_4cell_data(struct subdrv_ctx *ctx, u16 type, char *data);
void get_stagger_max_exp_time(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id,
enum VC_FEATURE vc, u64 *exposure_max);
void get_temperature_value(struct subdrv_ctx *ctx, u32 *value);
void set_pdaf(struct subdrv_ctx *ctx, u16 mode);
void get_binning_type(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *binning_ratio);
void get_ae_frame_mode_for_le(struct subdrv_ctx *ctx, u32 *ae_frm_mode);
void get_ae_effective_frame_for_le(struct subdrv_ctx *ctx, u32 *ae_effective_frame);
void preload_eeprom_data(struct subdrv_ctx *ctx, u32 *is_read);
void get_mipi_pixel_rate(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *mipi_pixel_rate);
void get_sensor_rgbw_output_mode(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *rgbw_output_mode);
void get_readout_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u64 *readout_time);
void get_exposure_count_by_scenario(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id, u32 *scenario_exp_cnt);
int common_get_imgsensor_id(struct subdrv_ctx *ctx, u32 *sensor_id);
void subdrv_ctx_init(struct subdrv_ctx *ctx);
void sensor_init(struct subdrv_ctx *ctx);
int common_open(struct subdrv_ctx *ctx);
int common_get_info(struct subdrv_ctx *ctx,
enum MSDK_SCENARIO_ID_ENUM scenario_id,
MSDK_SENSOR_INFO_STRUCT *sensor_info,
MSDK_SENSOR_CONFIG_STRUCT *sensor_config_data);
int common_get_resolution(struct subdrv_ctx *ctx,
MSDK_SENSOR_RESOLUTION_INFO_STRUCT *sensor_resolution);
void update_mode_info(struct subdrv_ctx *ctx, enum SENSOR_SCENARIO_ID_ENUM scenario_id);
bool check_is_no_crop(struct subdrv_ctx *ctx, enum SENSOR_SCENARIO_ID_ENUM scenario_id);
int common_control(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id,
MSDK_SENSOR_EXPOSURE_WINDOW_STRUCT *image_window,
MSDK_SENSOR_CONFIG_STRUCT *sensor_config_data);
int common_feature_control(struct subdrv_ctx *ctx, MSDK_SENSOR_FEATURE_ENUM feature_id,
u8 *feature_para, u32 *feature_para_len);
int common_close(struct subdrv_ctx *ctx);
int common_get_frame_desc(struct subdrv_ctx *ctx,
int scenario_id, struct mtk_mbus_frame_desc *fd);
int common_get_temp(struct subdrv_ctx *ctx, int *temp);
int common_get_csi_param(struct subdrv_ctx *ctx,
enum SENSOR_SCENARIO_ID_ENUM scenario_id,
struct mtk_csi_param *csi_param);
int common_update_sof_cnt(struct subdrv_ctx *ctx, u32 sof_cnt);
#endif