luckfox-pico-sdk/sysdrv/source/kernel/drivers/media/i2c/techpoint/techpoint_common.h
luckfox-eng29 8f34c2760d project:build.sh: Added fastboot support; custom modifications to U-Boot and kernel implemented using patches.
project:cfg:BoardConfig_IPC: Added fastboot BoardConfig file and firmware post-scripts, distinguishing between
the BoardConfigs for Luckfox Pico Pro and Luckfox Pico Max. project:app: Added fastboot_client and rk_smart_door
for quick boot applications; updated rkipc app to adapt to the latest media library. media:samples: Added more
usage examples. media:rockit: Fixed bugs; removed support for retrieving data frames from VPSS. media:isp:
Updated rkaiq library and related tools to support connection to RKISP_Tuner. sysdrv:Makefile: Added support for
compiling drv_ko on Luckfox Pico Ultra W using Ubuntu; added support for custom root filesystem.
sysdrv:tools:board: Updated Buildroot optional mirror sources, updated some software versions, and stored device
tree files and configuration files that undergo multiple modifications for U-Boot and kernel separately.
sysdrv:source:mcu: Used RISC-V MCU SDK with RT-Thread system, mainly for initializing camera AE during quick
boot. sysdrv:source:uboot: Added support for fastboot; added high baud rate DDR bin for serial firmware upgrades.
sysdrv:source:kernel: Upgraded to version 5.10.160; increased NPU frequency for RV1106G3; added support for
fastboot.

Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
2024-10-14 09:47:04 +08:00

145 lines
3.1 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Techpoint Lib
*
* Copyright (C) 2023 Rockchip Electronics Co., Ltd.
*/
#ifndef _TECHPOINT_COMMON_H
#define _TECHPOINT_COMMON_H
#include <linux/clk.h>
#include <linux/device.h>
#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
#include <linux/regulator/consumer.h>
#include <linux/sysfs.h>
#include <linux/slab.h>
#include <linux/version.h>
#include <linux/rk-camera-module.h>
#include <media/media-entity.h>
#include <media/v4l2-async.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-subdev.h>
#include <linux/pinctrl/consumer.h>
#include <linux/rk-preisp.h>
#include <linux/sched.h>
#include <linux/kthread.h>
#include <linux/of.h>
#include <linux/of_graph.h>
#define DRIVER_VERSION KERNEL_VERSION(0, 0x01, 0x0)
#define TECHPOINT_CAMERA_XVCLK_FREQ "xvclk_freq"
#define TECHPOINT_TEST_PATTERN 0
#define DEF_1080P 1
#define TECHPOINT_SHARING_POWER 1
#define INPUT_STATUS_REG 0x01
#define PAGE_REG 0x40
#define CHIP_ID_H_REG 0xFE
#define CHIP_ID_L_REG 0xFF
#define INPUT_STATUS_MASK 0x80
enum techpoint_chips {
CHIP_UNKNOWN = 0,
CHIP_TP2855,
CHIP_TP2815,
CHIP_TP9930,
CHIP_TP9950,
CHIP_TP9951,
};
enum techpoint_input_type {
TECHPOINT_MIPI = 0,
TECHPOINT_DVP_BT1120,
TECHPOINT_DVP_BT565,
};
enum techpoint_support_reso {
TECHPOINT_S_RESO_720P_25 = 0,
TECHPOINT_S_RESO_1080P_25,
TECHPOINT_S_RESO_720P_30,
TECHPOINT_S_RESO_1080P_30,
TECHPOINT_S_RESO_SD,
TECHPOINT_S_RESO_PAL,
TECHPOINT_S_RESO_NTSC,
TECHPOINT_S_RESO_NUMS,
};
struct techpoint_video_modes {
u32 bus_fmt;
u32 width;
u32 height;
struct v4l2_fract max_fps;
u32 bpp;
u32 lane;
s64 link_freq_value;
u32 vc[PAD_MAX];
const struct regval *common_reg_list;
int common_reg_size;
enum techpoint_support_reso channel_reso[PAD_MAX];
};
/* Audio output port formats */
enum techpoint_audfmts {
AUDFMT_I2S = 0,
AUDFMT_DSP,
};
struct techpoint_audio {
enum techpoint_audfmts audfmt;
int mclk_fs;
int cascade_num;
int cascade_order;
int slave_num;
struct techpoint *slave_tp[3];
};
struct techpoint {
struct device dev;
struct i2c_client *client;
struct clk *xvclk;
struct gpio_desc *reset_gpio;
struct gpio_desc *power_gpio;
struct pinctrl *pinctrl;
struct pinctrl_state *pins_sleep;
struct pinctrl_state *pins_default;
struct media_pad pad[PAD_MAX];
struct v4l2_subdev subdev;
struct v4l2_ctrl *pixel_rate_ctrl;
struct v4l2_ctrl *link_freq_ctrl;
struct v4l2_ctrl_handler ctrl_handler;
struct mutex mutex;
struct regulator_bulk_data *supplies;
u32 xvclk_freq_value;
struct techpoint_audio *audio_in;
struct techpoint_audio *audio_out;
int i2c_idx;
u32 data_lanes;
enum techpoint_chips chip_id;
struct techpoint_video_modes *video_modes;
struct techpoint_video_modes *cur_video_mode;
u32 video_modes_num;
enum techpoint_input_type input_type;
u32 module_index;
const char *module_facing;
const char *module_name;
const char *len_name;
bool power_on;
bool streaming;
bool do_reset;
u8 detect_status[PAD_MAX];
struct task_struct *detect_thread;
};
#endif // _TECHPOINT_COMMON_H