hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Maxim Dual GMSL Deserializer driver API function declaration
 *
 * Copyright (c) 2023 Rockchip Electronics Co., Ltd.
 *
 * Author: Cai Wenzhong <cwz@rock-chips.com>
 */
 
#ifndef __MAXIM2C_API_H__
#define __MAXIM2C_API_H__
 
#include "maxim2c_i2c.h"
#include "maxim2c_link.h"
#include "maxim2c_video_pipe.h"
#include "maxim2c_mipi_txphy.h"
#include "maxim2c_remote.h"
#include "maxim2c_pattern.h"
#include "maxim2c_drv.h"
 
#define MAXIM2C_NAME            "maxim2c"
 
/* Maxim Deserializer Test Pattern */
#define MAXIM2C_TEST_PATTERN        0
 
/* Maxim Deserializer pwdn on/off enable */
#define MAXIM2C_LOCAL_DES_ON_OFF_EN    0
 
/* maxim2c i2c api */
int maxim2c_i2c_write_reg(struct i2c_client *client,
       u16 reg_addr, u16 reg_len, u16 val_len, u32 reg_val);
int maxim2c_i2c_read_reg(struct i2c_client *client,
       u16 reg_addr, u16 reg_len, u16 val_len, u32 *reg_val);
int maxim2c_i2c_update_reg(struct i2c_client *client,
       u16 reg_addr, u16 reg_len,
       u32 val_len, u32 val_mask, u32 reg_val);
 
int maxim2c_i2c_write_byte(struct i2c_client *client,
       u16 reg_addr, u16 reg_len, u8 reg_val);
int maxim2c_i2c_read_byte(struct i2c_client *client,
       u16 reg_addr, u16 reg_len, u8 *reg_val);
int maxim2c_i2c_update_byte(struct i2c_client *client,
       u16 reg_addr, u16 reg_len, u8 val_mask, u8 reg_val);
 
int maxim2c_i2c_write_array(struct i2c_client *client,
               const struct maxim2c_i2c_regval *regs);
int maxim2c_i2c_load_init_seq(struct device *dev,
       struct device_node *node, struct maxim2c_i2c_init_seq *init_seq);
int maxim2c_i2c_run_init_seq(struct i2c_client *client,
           struct maxim2c_i2c_init_seq *init_seq);
 
/* maxim2c link api */
u8 maxim2c_link_get_lock_state(maxim2c_t *maxim2c, u8 link_mask);
int maxim2c_link_oneshot_reset(maxim2c_t *maxim2c, u8 link_mask);
int maxim2c_link_mask_enable(maxim2c_t *maxim2c, u8 link_mask, bool enable);
int maxim2c_link_wait_linklock(maxim2c_t *maxim2c, u8 link_mask);
int maxim2c_link_select_remote_enable(maxim2c_t *maxim2c, u8 link_mask);
int maxim2c_link_select_remote_control(maxim2c_t *maxim2c, u8 link_mask);
int maxim2c_link_hw_init(maxim2c_t *maxim2c);
void maxim2c_link_data_init(maxim2c_t *maxim2c);
int maxim2c_link_parse_dt(maxim2c_t *maxim2c, struct device_node *of_node);
 
/* maxim2c video pipe api */
int maxim2c_video_pipe_hw_init(maxim2c_t *maxim2c);
int maxim2c_video_pipe_mask_enable(maxim2c_t *maxim2c, u8 video_pipe_mask, bool enable);
int maxim2c_video_pipe_linkid_enable(maxim2c_t *maxim2c, u8 link_id, bool enable);
void maxim2c_video_pipe_data_init(maxim2c_t *maxim2c);
int maxim2c_video_pipe_parse_dt(maxim2c_t *maxim2c, struct device_node *of_node);
 
/* maxim2c mipi txphy api */
int maxim2c_mipi_txphy_hw_init(maxim2c_t *maxim2c);
void maxim2c_mipi_txphy_data_init(maxim2c_t *maxim2c);
int maxim2c_mipi_txphy_parse_dt(maxim2c_t *maxim2c, struct device_node *of_node);
int maxim2c_mipi_txphy_enable(maxim2c_t *maxim2c, bool enable);
int maxim2c_dphy_dpll_predef_set(maxim2c_t *maxim2c, s64 link_freq_hz);
int maxim2c_mipi_csi_output(maxim2c_t *maxim2c, bool enable);
 
/* maxim2c remote api */
int maxim2c_remote_mfd_add_devices(maxim2c_t *maxim2c);
int maxim2c_remote_devices_init(maxim2c_t *maxim2c, u8 link_init_mask);
int maxim2c_remote_devices_deinit(maxim2c_t *maxim2c, u8 link_init_mask);
int maxim2c_remote_load_init_seq(maxim2c_remote_t *remote_device);
int maxim2c_remote_i2c_addr_select(maxim2c_remote_t *remote_device, u32 i2c_id);
int maxim2c_remote_i2c_client_init(maxim2c_remote_t *remote_device,
               struct i2c_client *des_client);
int maxim2c_remote_device_register(maxim2c_t *maxim2c,
               maxim2c_remote_t *remote_device);
 
/* maxim2c v4l2 subdev api */
int maxim2c_v4l2_subdev_init(maxim2c_t *maxim2c);
void maxim2c_v4l2_subdev_deinit(maxim2c_t *maxim2c);
 
/* maxim2c driver api */
int maxim2c_module_hw_init(maxim2c_t *maxim2c);
int maxim2c_hot_plug_detect_work_start(maxim2c_t *maxim2c);
 
/* maxim2c pattern api */
int maxim2c_pattern_hw_init(maxim2c_t *maxim2c);
int maxim2c_pattern_support_mode_init(maxim2c_t *maxim2c);
int maxim2c_pattern_data_init(maxim2c_t *maxim2c);
int maxim2c_pattern_enable(maxim2c_t *maxim2c, bool enable);
 
#endif /* __MAXIM2C_API_H__ */