162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * camss-csiphy-3ph-1-0.c
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Qualcomm MSM Camera Subsystem - CSIPHY Module 3phase v1.0
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
862306a36Sopenharmony_ci * Copyright (C) 2016-2018 Linaro Ltd.
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include "camss.h"
1262306a36Sopenharmony_ci#include "camss-csiphy.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include <linux/delay.h>
1562306a36Sopenharmony_ci#include <linux/interrupt.h>
1662306a36Sopenharmony_ci#include <linux/io.h>
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG1(n)			(0x000 + 0x100 * (n))
1962306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG1_SWI_REC_DLY_PRG	(BIT(7) | BIT(6))
2062306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG2(n)			(0x004 + 0x100 * (n))
2162306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG2_LP_REC_EN_INT	BIT(3)
2262306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG3(n)			(0x008 + 0x100 * (n))
2362306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG4(n)			(0x00c + 0x100 * (n))
2462306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG4_T_HS_CLK_MISS	0xa4
2562306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG4_T_HS_CLK_MISS_660	0xa5
2662306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG5(n)			(0x010 + 0x100 * (n))
2762306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG5_T_HS_DTERM		0x02
2862306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG5_HS_REC_EQ_FQ_INT	0x50
2962306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_TEST_IMP(n)		(0x01c + 0x100 * (n))
3062306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_TEST_IMP_HS_TERM_IMP	0xa
3162306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_MISC1(n)			(0x028 + 0x100 * (n))
3262306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_MISC1_IS_CLKLANE		BIT(2)
3362306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG6(n)			(0x02c + 0x100 * (n))
3462306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG6_SWI_FORCE_INIT_EXIT	BIT(0)
3562306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG7(n)			(0x030 + 0x100 * (n))
3662306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG7_SWI_T_INIT		0x2
3762306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG8(n)			(0x034 + 0x100 * (n))
3862306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG8_SWI_SKIP_WAKEUP	BIT(0)
3962306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG8_SKEW_FILTER_ENABLE	BIT(1)
4062306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG9(n)			(0x038 + 0x100 * (n))
4162306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CFG9_SWI_T_WAKEUP	0x1
4262306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CSI_LANE_CTRL15(n)	(0x03c + 0x100 * (n))
4362306a36Sopenharmony_ci#define CSIPHY_3PH_LNn_CSI_LANE_CTRL15_SWI_SOT_SYMBOL	0xb8
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci#define CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(n)	(0x800 + 0x4 * (n))
4662306a36Sopenharmony_ci#define CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE	BIT(7)
4762306a36Sopenharmony_ci#define CSIPHY_3PH_CMN_CSI_COMMON_CTRL6_COMMON_PWRDN_B	BIT(0)
4862306a36Sopenharmony_ci#define CSIPHY_3PH_CMN_CSI_COMMON_CTRL6_SHOW_REV_ID	BIT(1)
4962306a36Sopenharmony_ci#define CSIPHY_3PH_CMN_CSI_COMMON_STATUSn(n)	(0x8b0 + 0x4 * (n))
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci#define CSIPHY_DEFAULT_PARAMS            0
5262306a36Sopenharmony_ci#define CSIPHY_LANE_ENABLE               1
5362306a36Sopenharmony_ci#define CSIPHY_SETTLE_CNT_LOWER_BYTE     2
5462306a36Sopenharmony_ci#define CSIPHY_SETTLE_CNT_HIGHER_BYTE    3
5562306a36Sopenharmony_ci#define CSIPHY_DNP_PARAMS                4
5662306a36Sopenharmony_ci#define CSIPHY_2PH_REGS                  5
5762306a36Sopenharmony_ci#define CSIPHY_3PH_REGS                  6
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cistruct csiphy_reg_t {
6062306a36Sopenharmony_ci	s32 reg_addr;
6162306a36Sopenharmony_ci	s32 reg_data;
6262306a36Sopenharmony_ci	s32 delay;
6362306a36Sopenharmony_ci	u32 csiphy_param_type;
6462306a36Sopenharmony_ci};
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci/* GEN2 1.0 2PH */
6762306a36Sopenharmony_cistatic const struct
6862306a36Sopenharmony_cicsiphy_reg_t lane_regs_sdm845[5][14] = {
6962306a36Sopenharmony_ci	{
7062306a36Sopenharmony_ci		{0x0004, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
7162306a36Sopenharmony_ci		{0x002C, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
7262306a36Sopenharmony_ci		{0x0034, 0x0F, 0x00, CSIPHY_DEFAULT_PARAMS},
7362306a36Sopenharmony_ci		{0x001C, 0x0A, 0x00, CSIPHY_DEFAULT_PARAMS},
7462306a36Sopenharmony_ci		{0x0014, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS},
7562306a36Sopenharmony_ci		{0x0028, 0x00, 0x00, CSIPHY_DNP_PARAMS},
7662306a36Sopenharmony_ci		{0x003C, 0xB8, 0x00, CSIPHY_DEFAULT_PARAMS},
7762306a36Sopenharmony_ci		{0x0000, 0x91, 0x00, CSIPHY_DEFAULT_PARAMS},
7862306a36Sopenharmony_ci		{0x0008, 0x00, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE},
7962306a36Sopenharmony_ci		{0x000c, 0x00, 0x00, CSIPHY_DNP_PARAMS},
8062306a36Sopenharmony_ci		{0x0010, 0x52, 0x00, CSIPHY_DEFAULT_PARAMS},
8162306a36Sopenharmony_ci		{0x0038, 0xFE, 0x00, CSIPHY_DEFAULT_PARAMS},
8262306a36Sopenharmony_ci		{0x0060, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
8362306a36Sopenharmony_ci		{0x0064, 0x7F, 0x00, CSIPHY_DEFAULT_PARAMS},
8462306a36Sopenharmony_ci	},
8562306a36Sopenharmony_ci	{
8662306a36Sopenharmony_ci		{0x0704, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
8762306a36Sopenharmony_ci		{0x072C, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
8862306a36Sopenharmony_ci		{0x0734, 0x0F, 0x00, CSIPHY_DEFAULT_PARAMS},
8962306a36Sopenharmony_ci		{0x071C, 0x0A, 0x00, CSIPHY_DEFAULT_PARAMS},
9062306a36Sopenharmony_ci		{0x0714, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS},
9162306a36Sopenharmony_ci		{0x0728, 0x04, 0x00, CSIPHY_DEFAULT_PARAMS},
9262306a36Sopenharmony_ci		{0x073C, 0xB8, 0x00, CSIPHY_DEFAULT_PARAMS},
9362306a36Sopenharmony_ci		{0x0700, 0x80, 0x00, CSIPHY_DEFAULT_PARAMS},
9462306a36Sopenharmony_ci		{0x0708, 0x14, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE},
9562306a36Sopenharmony_ci		{0x070C, 0xA5, 0x00, CSIPHY_DEFAULT_PARAMS},
9662306a36Sopenharmony_ci		{0x0710, 0x52, 0x00, CSIPHY_DEFAULT_PARAMS},
9762306a36Sopenharmony_ci		{0x0738, 0x1F, 0x00, CSIPHY_DEFAULT_PARAMS},
9862306a36Sopenharmony_ci		{0x0760, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
9962306a36Sopenharmony_ci		{0x0764, 0x7F, 0x00, CSIPHY_DEFAULT_PARAMS},
10062306a36Sopenharmony_ci	},
10162306a36Sopenharmony_ci	{
10262306a36Sopenharmony_ci		{0x0204, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
10362306a36Sopenharmony_ci		{0x022C, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
10462306a36Sopenharmony_ci		{0x0234, 0x0F, 0x00, CSIPHY_DEFAULT_PARAMS},
10562306a36Sopenharmony_ci		{0x021C, 0x0A, 0x00, CSIPHY_DEFAULT_PARAMS},
10662306a36Sopenharmony_ci		{0x0214, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS},
10762306a36Sopenharmony_ci		{0x0228, 0x00, 0x00, CSIPHY_DNP_PARAMS},
10862306a36Sopenharmony_ci		{0x023C, 0xB8, 0x00, CSIPHY_DEFAULT_PARAMS},
10962306a36Sopenharmony_ci		{0x0200, 0x91, 0x00, CSIPHY_DEFAULT_PARAMS},
11062306a36Sopenharmony_ci		{0x0208, 0x00, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE},
11162306a36Sopenharmony_ci		{0x020C, 0x00, 0x00, CSIPHY_DNP_PARAMS},
11262306a36Sopenharmony_ci		{0x0210, 0x52, 0x00, CSIPHY_DEFAULT_PARAMS},
11362306a36Sopenharmony_ci		{0x0238, 0xFE, 0x00, CSIPHY_DEFAULT_PARAMS},
11462306a36Sopenharmony_ci		{0x0260, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
11562306a36Sopenharmony_ci		{0x0264, 0x7F, 0x00, CSIPHY_DEFAULT_PARAMS},
11662306a36Sopenharmony_ci	},
11762306a36Sopenharmony_ci	{
11862306a36Sopenharmony_ci		{0x0404, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
11962306a36Sopenharmony_ci		{0x042C, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
12062306a36Sopenharmony_ci		{0x0434, 0x0F, 0x00, CSIPHY_DEFAULT_PARAMS},
12162306a36Sopenharmony_ci		{0x041C, 0x0A, 0x00, CSIPHY_DEFAULT_PARAMS},
12262306a36Sopenharmony_ci		{0x0414, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS},
12362306a36Sopenharmony_ci		{0x0428, 0x00, 0x00, CSIPHY_DNP_PARAMS},
12462306a36Sopenharmony_ci		{0x043C, 0xB8, 0x00, CSIPHY_DEFAULT_PARAMS},
12562306a36Sopenharmony_ci		{0x0400, 0x91, 0x00, CSIPHY_DEFAULT_PARAMS},
12662306a36Sopenharmony_ci		{0x0408, 0x00, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE},
12762306a36Sopenharmony_ci		{0x040C, 0x00, 0x00, CSIPHY_DNP_PARAMS},
12862306a36Sopenharmony_ci		{0x0410, 0x52, 0x00, CSIPHY_DEFAULT_PARAMS},
12962306a36Sopenharmony_ci		{0x0438, 0xFE, 0x00, CSIPHY_DEFAULT_PARAMS},
13062306a36Sopenharmony_ci		{0x0460, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
13162306a36Sopenharmony_ci		{0x0464, 0x7F, 0x00, CSIPHY_DEFAULT_PARAMS},
13262306a36Sopenharmony_ci	},
13362306a36Sopenharmony_ci	{
13462306a36Sopenharmony_ci		{0x0604, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
13562306a36Sopenharmony_ci		{0x062C, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
13662306a36Sopenharmony_ci		{0x0634, 0x0F, 0x00, CSIPHY_DEFAULT_PARAMS},
13762306a36Sopenharmony_ci		{0x061C, 0x0A, 0x00, CSIPHY_DEFAULT_PARAMS},
13862306a36Sopenharmony_ci		{0x0614, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS},
13962306a36Sopenharmony_ci		{0x0628, 0x00, 0x00, CSIPHY_DNP_PARAMS},
14062306a36Sopenharmony_ci		{0x063C, 0xB8, 0x00, CSIPHY_DEFAULT_PARAMS},
14162306a36Sopenharmony_ci		{0x0600, 0x91, 0x00, CSIPHY_DEFAULT_PARAMS},
14262306a36Sopenharmony_ci		{0x0608, 0x00, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE},
14362306a36Sopenharmony_ci		{0x060C, 0x00, 0x00, CSIPHY_DNP_PARAMS},
14462306a36Sopenharmony_ci		{0x0610, 0x52, 0x00, CSIPHY_DEFAULT_PARAMS},
14562306a36Sopenharmony_ci		{0x0638, 0xFE, 0x00, CSIPHY_DEFAULT_PARAMS},
14662306a36Sopenharmony_ci		{0x0660, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
14762306a36Sopenharmony_ci		{0x0664, 0x7F, 0x00, CSIPHY_DEFAULT_PARAMS},
14862306a36Sopenharmony_ci	},
14962306a36Sopenharmony_ci};
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci/* GEN2 1.2.1 2PH */
15262306a36Sopenharmony_cistatic const struct
15362306a36Sopenharmony_cicsiphy_reg_t lane_regs_sm8250[5][20] = {
15462306a36Sopenharmony_ci	{
15562306a36Sopenharmony_ci		{0x0030, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
15662306a36Sopenharmony_ci		{0x0900, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS},
15762306a36Sopenharmony_ci		{0x0908, 0x10, 0x00, CSIPHY_DEFAULT_PARAMS},
15862306a36Sopenharmony_ci		{0x0904, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
15962306a36Sopenharmony_ci		{0x0904, 0x07, 0x00, CSIPHY_DEFAULT_PARAMS},
16062306a36Sopenharmony_ci		{0x0004, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
16162306a36Sopenharmony_ci		{0x002C, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
16262306a36Sopenharmony_ci		{0x0034, 0x07, 0x00, CSIPHY_DEFAULT_PARAMS},
16362306a36Sopenharmony_ci		{0x0010, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS},
16462306a36Sopenharmony_ci		{0x001C, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS},
16562306a36Sopenharmony_ci		{0x003C, 0xB8, 0x00, CSIPHY_DEFAULT_PARAMS},
16662306a36Sopenharmony_ci		{0x0008, 0x10, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE},
16762306a36Sopenharmony_ci		{0x0000, 0x8D, 0x00, CSIPHY_DEFAULT_PARAMS},
16862306a36Sopenharmony_ci		{0x000c, 0x00, 0x00, CSIPHY_DNP_PARAMS},
16962306a36Sopenharmony_ci		{0x0038, 0xFE, 0x00, CSIPHY_DEFAULT_PARAMS},
17062306a36Sopenharmony_ci		{0x0014, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS},
17162306a36Sopenharmony_ci		{0x0028, 0x00, 0x00, CSIPHY_DNP_PARAMS},
17262306a36Sopenharmony_ci		{0x0024, 0x00, 0x00, CSIPHY_DNP_PARAMS},
17362306a36Sopenharmony_ci		{0x0800, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS},
17462306a36Sopenharmony_ci		{0x0884, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
17562306a36Sopenharmony_ci	},
17662306a36Sopenharmony_ci	{
17762306a36Sopenharmony_ci		{0x0730, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
17862306a36Sopenharmony_ci		{0x0C80, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS},
17962306a36Sopenharmony_ci		{0x0C88, 0x10, 0x00, CSIPHY_DEFAULT_PARAMS},
18062306a36Sopenharmony_ci		{0x0C84, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
18162306a36Sopenharmony_ci		{0x0C84, 0x07, 0x00, CSIPHY_DEFAULT_PARAMS},
18262306a36Sopenharmony_ci		{0x0704, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
18362306a36Sopenharmony_ci		{0x072C, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
18462306a36Sopenharmony_ci		{0x0734, 0x07, 0x00, CSIPHY_DEFAULT_PARAMS},
18562306a36Sopenharmony_ci		{0x0710, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS},
18662306a36Sopenharmony_ci		{0x071C, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS},
18762306a36Sopenharmony_ci		{0x073C, 0xB8, 0x00, CSIPHY_DEFAULT_PARAMS},
18862306a36Sopenharmony_ci		{0x0708, 0x10, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE},
18962306a36Sopenharmony_ci		{0x0700, 0x80, 0x00, CSIPHY_DEFAULT_PARAMS},
19062306a36Sopenharmony_ci		{0x070c, 0xA5, 0x00, CSIPHY_DEFAULT_PARAMS},
19162306a36Sopenharmony_ci		{0x0738, 0x1F, 0x00, CSIPHY_DEFAULT_PARAMS},
19262306a36Sopenharmony_ci		{0x0714, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS},
19362306a36Sopenharmony_ci		{0x0728, 0x04, 0x00, CSIPHY_DEFAULT_PARAMS},
19462306a36Sopenharmony_ci		{0x0724, 0x00, 0x00, CSIPHY_DNP_PARAMS},
19562306a36Sopenharmony_ci		{0x0800, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS},
19662306a36Sopenharmony_ci		{0x0884, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
19762306a36Sopenharmony_ci	},
19862306a36Sopenharmony_ci	{
19962306a36Sopenharmony_ci		{0x0230, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
20062306a36Sopenharmony_ci		{0x0A00, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS},
20162306a36Sopenharmony_ci		{0x0A08, 0x10, 0x00, CSIPHY_DEFAULT_PARAMS},
20262306a36Sopenharmony_ci		{0x0A04, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
20362306a36Sopenharmony_ci		{0x0A04, 0x07, 0x00, CSIPHY_DEFAULT_PARAMS},
20462306a36Sopenharmony_ci		{0x0204, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
20562306a36Sopenharmony_ci		{0x022C, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
20662306a36Sopenharmony_ci		{0x0234, 0x07, 0x00, CSIPHY_DEFAULT_PARAMS},
20762306a36Sopenharmony_ci		{0x0210, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS},
20862306a36Sopenharmony_ci		{0x021C, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS},
20962306a36Sopenharmony_ci		{0x023C, 0xB8, 0x00, CSIPHY_DEFAULT_PARAMS},
21062306a36Sopenharmony_ci		{0x0208, 0x10, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE},
21162306a36Sopenharmony_ci		{0x0200, 0x8D, 0x00, CSIPHY_DEFAULT_PARAMS},
21262306a36Sopenharmony_ci		{0x020c, 0x00, 0x00, CSIPHY_DNP_PARAMS},
21362306a36Sopenharmony_ci		{0x0238, 0xFE, 0x00, CSIPHY_DEFAULT_PARAMS},
21462306a36Sopenharmony_ci		{0x0214, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS},
21562306a36Sopenharmony_ci		{0x0228, 0x00, 0x00, CSIPHY_DNP_PARAMS},
21662306a36Sopenharmony_ci		{0x0224, 0x00, 0x00, CSIPHY_DNP_PARAMS},
21762306a36Sopenharmony_ci		{0x0800, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS},
21862306a36Sopenharmony_ci		{0x0884, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
21962306a36Sopenharmony_ci	},
22062306a36Sopenharmony_ci	{
22162306a36Sopenharmony_ci		{0x0430, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
22262306a36Sopenharmony_ci		{0x0B00, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS},
22362306a36Sopenharmony_ci		{0x0B08, 0x10, 0x00, CSIPHY_DEFAULT_PARAMS},
22462306a36Sopenharmony_ci		{0x0B04, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
22562306a36Sopenharmony_ci		{0x0B04, 0x07, 0x00, CSIPHY_DEFAULT_PARAMS},
22662306a36Sopenharmony_ci		{0x0404, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
22762306a36Sopenharmony_ci		{0x042C, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
22862306a36Sopenharmony_ci		{0x0434, 0x07, 0x00, CSIPHY_DEFAULT_PARAMS},
22962306a36Sopenharmony_ci		{0x0410, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS},
23062306a36Sopenharmony_ci		{0x041C, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS},
23162306a36Sopenharmony_ci		{0x043C, 0xB8, 0x00, CSIPHY_DEFAULT_PARAMS},
23262306a36Sopenharmony_ci		{0x0408, 0x10, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE},
23362306a36Sopenharmony_ci		{0x0400, 0x8D, 0x00, CSIPHY_DEFAULT_PARAMS},
23462306a36Sopenharmony_ci		{0x040c, 0x00, 0x00, CSIPHY_DNP_PARAMS},
23562306a36Sopenharmony_ci		{0x0438, 0xFE, 0x00, CSIPHY_DEFAULT_PARAMS},
23662306a36Sopenharmony_ci		{0x0414, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS},
23762306a36Sopenharmony_ci		{0x0428, 0x00, 0x00, CSIPHY_DNP_PARAMS},
23862306a36Sopenharmony_ci		{0x0424, 0x00, 0x00, CSIPHY_DNP_PARAMS},
23962306a36Sopenharmony_ci		{0x0800, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS},
24062306a36Sopenharmony_ci		{0x0884, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
24162306a36Sopenharmony_ci	},
24262306a36Sopenharmony_ci	{
24362306a36Sopenharmony_ci		{0x0630, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
24462306a36Sopenharmony_ci		{0x0C00, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS},
24562306a36Sopenharmony_ci		{0x0C08, 0x10, 0x00, CSIPHY_DEFAULT_PARAMS},
24662306a36Sopenharmony_ci		{0x0C04, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS},
24762306a36Sopenharmony_ci		{0x0C04, 0x07, 0x00, CSIPHY_DEFAULT_PARAMS},
24862306a36Sopenharmony_ci		{0x0604, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
24962306a36Sopenharmony_ci		{0x062C, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
25062306a36Sopenharmony_ci		{0x0634, 0x07, 0x00, CSIPHY_DEFAULT_PARAMS},
25162306a36Sopenharmony_ci		{0x0610, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS},
25262306a36Sopenharmony_ci		{0x061C, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS},
25362306a36Sopenharmony_ci		{0x063C, 0xB8, 0x00, CSIPHY_DEFAULT_PARAMS},
25462306a36Sopenharmony_ci		{0x0608, 0x10, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE},
25562306a36Sopenharmony_ci		{0x0600, 0x8D, 0x00, CSIPHY_DEFAULT_PARAMS},
25662306a36Sopenharmony_ci		{0x060c, 0x00, 0x00, CSIPHY_DNP_PARAMS},
25762306a36Sopenharmony_ci		{0x0638, 0xFE, 0x00, CSIPHY_DEFAULT_PARAMS},
25862306a36Sopenharmony_ci		{0x0614, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS},
25962306a36Sopenharmony_ci		{0x0628, 0x00, 0x00, CSIPHY_DNP_PARAMS},
26062306a36Sopenharmony_ci		{0x0624, 0x00, 0x00, CSIPHY_DNP_PARAMS},
26162306a36Sopenharmony_ci		{0x0800, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS},
26262306a36Sopenharmony_ci		{0x0884, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS},
26362306a36Sopenharmony_ci	},
26462306a36Sopenharmony_ci};
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_cistatic void csiphy_hw_version_read(struct csiphy_device *csiphy,
26762306a36Sopenharmony_ci				   struct device *dev)
26862306a36Sopenharmony_ci{
26962306a36Sopenharmony_ci	u32 hw_version;
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ci	writel(CSIPHY_3PH_CMN_CSI_COMMON_CTRL6_SHOW_REV_ID,
27262306a36Sopenharmony_ci	       csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(6));
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci	hw_version = readl_relaxed(csiphy->base +
27562306a36Sopenharmony_ci				   CSIPHY_3PH_CMN_CSI_COMMON_STATUSn(12));
27662306a36Sopenharmony_ci	hw_version |= readl_relaxed(csiphy->base +
27762306a36Sopenharmony_ci				   CSIPHY_3PH_CMN_CSI_COMMON_STATUSn(13)) << 8;
27862306a36Sopenharmony_ci	hw_version |= readl_relaxed(csiphy->base +
27962306a36Sopenharmony_ci				   CSIPHY_3PH_CMN_CSI_COMMON_STATUSn(14)) << 16;
28062306a36Sopenharmony_ci	hw_version |= readl_relaxed(csiphy->base +
28162306a36Sopenharmony_ci				   CSIPHY_3PH_CMN_CSI_COMMON_STATUSn(15)) << 24;
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_ci	dev_dbg(dev, "CSIPHY 3PH HW Version = 0x%08x\n", hw_version);
28462306a36Sopenharmony_ci}
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_ci/*
28762306a36Sopenharmony_ci * csiphy_reset - Perform software reset on CSIPHY module
28862306a36Sopenharmony_ci * @csiphy: CSIPHY device
28962306a36Sopenharmony_ci */
29062306a36Sopenharmony_cistatic void csiphy_reset(struct csiphy_device *csiphy)
29162306a36Sopenharmony_ci{
29262306a36Sopenharmony_ci	writel_relaxed(0x1, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(0));
29362306a36Sopenharmony_ci	usleep_range(5000, 8000);
29462306a36Sopenharmony_ci	writel_relaxed(0x0, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(0));
29562306a36Sopenharmony_ci}
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_cistatic irqreturn_t csiphy_isr(int irq, void *dev)
29862306a36Sopenharmony_ci{
29962306a36Sopenharmony_ci	struct csiphy_device *csiphy = dev;
30062306a36Sopenharmony_ci	int i;
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ci	for (i = 0; i < 11; i++) {
30362306a36Sopenharmony_ci		int c = i + 22;
30462306a36Sopenharmony_ci		u8 val = readl_relaxed(csiphy->base +
30562306a36Sopenharmony_ci				       CSIPHY_3PH_CMN_CSI_COMMON_STATUSn(i));
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ci		writel_relaxed(val, csiphy->base +
30862306a36Sopenharmony_ci				    CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(c));
30962306a36Sopenharmony_ci	}
31062306a36Sopenharmony_ci
31162306a36Sopenharmony_ci	writel_relaxed(0x1, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(10));
31262306a36Sopenharmony_ci	writel_relaxed(0x0, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(10));
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ci	for (i = 22; i < 33; i++)
31562306a36Sopenharmony_ci		writel_relaxed(0x0, csiphy->base +
31662306a36Sopenharmony_ci				    CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(i));
31762306a36Sopenharmony_ci
31862306a36Sopenharmony_ci	return IRQ_HANDLED;
31962306a36Sopenharmony_ci}
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_ci/*
32262306a36Sopenharmony_ci * csiphy_settle_cnt_calc - Calculate settle count value
32362306a36Sopenharmony_ci *
32462306a36Sopenharmony_ci * Helper function to calculate settle count value. This is
32562306a36Sopenharmony_ci * based on the CSI2 T_hs_settle parameter which in turn
32662306a36Sopenharmony_ci * is calculated based on the CSI2 transmitter link frequency.
32762306a36Sopenharmony_ci *
32862306a36Sopenharmony_ci * Return settle count value or 0 if the CSI2 link frequency
32962306a36Sopenharmony_ci * is not available
33062306a36Sopenharmony_ci */
33162306a36Sopenharmony_cistatic u8 csiphy_settle_cnt_calc(s64 link_freq, u32 timer_clk_rate)
33262306a36Sopenharmony_ci{
33362306a36Sopenharmony_ci	u32 ui; /* ps */
33462306a36Sopenharmony_ci	u32 timer_period; /* ps */
33562306a36Sopenharmony_ci	u32 t_hs_prepare_max; /* ps */
33662306a36Sopenharmony_ci	u32 t_hs_settle; /* ps */
33762306a36Sopenharmony_ci	u8 settle_cnt;
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_ci	if (link_freq <= 0)
34062306a36Sopenharmony_ci		return 0;
34162306a36Sopenharmony_ci
34262306a36Sopenharmony_ci	ui = div_u64(1000000000000LL, link_freq);
34362306a36Sopenharmony_ci	ui /= 2;
34462306a36Sopenharmony_ci	t_hs_prepare_max = 85000 + 6 * ui;
34562306a36Sopenharmony_ci	t_hs_settle = t_hs_prepare_max;
34662306a36Sopenharmony_ci
34762306a36Sopenharmony_ci	timer_period = div_u64(1000000000000LL, timer_clk_rate);
34862306a36Sopenharmony_ci	settle_cnt = t_hs_settle / timer_period - 6;
34962306a36Sopenharmony_ci
35062306a36Sopenharmony_ci	return settle_cnt;
35162306a36Sopenharmony_ci}
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_cistatic void csiphy_gen1_config_lanes(struct csiphy_device *csiphy,
35462306a36Sopenharmony_ci				     struct csiphy_config *cfg,
35562306a36Sopenharmony_ci				     u8 settle_cnt)
35662306a36Sopenharmony_ci{
35762306a36Sopenharmony_ci	struct csiphy_lanes_cfg *c = &cfg->csi2->lane_cfg;
35862306a36Sopenharmony_ci	int i, l = 0;
35962306a36Sopenharmony_ci	u8 val;
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ci	for (i = 0; i <= c->num_data; i++) {
36262306a36Sopenharmony_ci		if (i == c->num_data)
36362306a36Sopenharmony_ci			l = 7;
36462306a36Sopenharmony_ci		else
36562306a36Sopenharmony_ci			l = c->data[i].pos * 2;
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_ci		val = CSIPHY_3PH_LNn_CFG1_SWI_REC_DLY_PRG;
36862306a36Sopenharmony_ci		val |= 0x17;
36962306a36Sopenharmony_ci		writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG1(l));
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ci		val = CSIPHY_3PH_LNn_CFG2_LP_REC_EN_INT;
37262306a36Sopenharmony_ci		writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG2(l));
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_ci		val = settle_cnt;
37562306a36Sopenharmony_ci		writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG3(l));
37662306a36Sopenharmony_ci
37762306a36Sopenharmony_ci		val = CSIPHY_3PH_LNn_CFG5_T_HS_DTERM |
37862306a36Sopenharmony_ci			CSIPHY_3PH_LNn_CFG5_HS_REC_EQ_FQ_INT;
37962306a36Sopenharmony_ci		writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG5(l));
38062306a36Sopenharmony_ci
38162306a36Sopenharmony_ci		val = CSIPHY_3PH_LNn_CFG6_SWI_FORCE_INIT_EXIT;
38262306a36Sopenharmony_ci		writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG6(l));
38362306a36Sopenharmony_ci
38462306a36Sopenharmony_ci		val = CSIPHY_3PH_LNn_CFG7_SWI_T_INIT;
38562306a36Sopenharmony_ci		writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG7(l));
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ci		val = CSIPHY_3PH_LNn_CFG8_SWI_SKIP_WAKEUP |
38862306a36Sopenharmony_ci			CSIPHY_3PH_LNn_CFG8_SKEW_FILTER_ENABLE;
38962306a36Sopenharmony_ci		writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG8(l));
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ci		val = CSIPHY_3PH_LNn_CFG9_SWI_T_WAKEUP;
39262306a36Sopenharmony_ci		writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG9(l));
39362306a36Sopenharmony_ci
39462306a36Sopenharmony_ci		val = CSIPHY_3PH_LNn_TEST_IMP_HS_TERM_IMP;
39562306a36Sopenharmony_ci		writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_TEST_IMP(l));
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_ci		val = CSIPHY_3PH_LNn_CSI_LANE_CTRL15_SWI_SOT_SYMBOL;
39862306a36Sopenharmony_ci		writel_relaxed(val, csiphy->base +
39962306a36Sopenharmony_ci				    CSIPHY_3PH_LNn_CSI_LANE_CTRL15(l));
40062306a36Sopenharmony_ci	}
40162306a36Sopenharmony_ci
40262306a36Sopenharmony_ci	val = CSIPHY_3PH_LNn_CFG1_SWI_REC_DLY_PRG;
40362306a36Sopenharmony_ci	writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG1(l));
40462306a36Sopenharmony_ci
40562306a36Sopenharmony_ci	if (csiphy->camss->version == CAMSS_660)
40662306a36Sopenharmony_ci		val = CSIPHY_3PH_LNn_CFG4_T_HS_CLK_MISS_660;
40762306a36Sopenharmony_ci	else
40862306a36Sopenharmony_ci		val = CSIPHY_3PH_LNn_CFG4_T_HS_CLK_MISS;
40962306a36Sopenharmony_ci	writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG4(l));
41062306a36Sopenharmony_ci
41162306a36Sopenharmony_ci	val = CSIPHY_3PH_LNn_MISC1_IS_CLKLANE;
41262306a36Sopenharmony_ci	writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_MISC1(l));
41362306a36Sopenharmony_ci}
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_cistatic void csiphy_gen2_config_lanes(struct csiphy_device *csiphy,
41662306a36Sopenharmony_ci				     u8 settle_cnt)
41762306a36Sopenharmony_ci{
41862306a36Sopenharmony_ci	const struct csiphy_reg_t *r;
41962306a36Sopenharmony_ci	int i, l, array_size;
42062306a36Sopenharmony_ci	u32 val;
42162306a36Sopenharmony_ci
42262306a36Sopenharmony_ci	switch (csiphy->camss->version) {
42362306a36Sopenharmony_ci	case CAMSS_845:
42462306a36Sopenharmony_ci		r = &lane_regs_sdm845[0][0];
42562306a36Sopenharmony_ci		array_size = ARRAY_SIZE(lane_regs_sdm845[0]);
42662306a36Sopenharmony_ci		break;
42762306a36Sopenharmony_ci	case CAMSS_8250:
42862306a36Sopenharmony_ci		r = &lane_regs_sm8250[0][0];
42962306a36Sopenharmony_ci		array_size = ARRAY_SIZE(lane_regs_sm8250[0]);
43062306a36Sopenharmony_ci		break;
43162306a36Sopenharmony_ci	default:
43262306a36Sopenharmony_ci		WARN(1, "unknown cspi version\n");
43362306a36Sopenharmony_ci		return;
43462306a36Sopenharmony_ci	}
43562306a36Sopenharmony_ci
43662306a36Sopenharmony_ci	for (l = 0; l < 5; l++) {
43762306a36Sopenharmony_ci		for (i = 0; i < array_size; i++, r++) {
43862306a36Sopenharmony_ci			switch (r->csiphy_param_type) {
43962306a36Sopenharmony_ci			case CSIPHY_SETTLE_CNT_LOWER_BYTE:
44062306a36Sopenharmony_ci				val = settle_cnt & 0xff;
44162306a36Sopenharmony_ci				break;
44262306a36Sopenharmony_ci			case CSIPHY_DNP_PARAMS:
44362306a36Sopenharmony_ci				continue;
44462306a36Sopenharmony_ci			default:
44562306a36Sopenharmony_ci				val = r->reg_data;
44662306a36Sopenharmony_ci				break;
44762306a36Sopenharmony_ci			}
44862306a36Sopenharmony_ci			writel_relaxed(val, csiphy->base + r->reg_addr);
44962306a36Sopenharmony_ci		}
45062306a36Sopenharmony_ci	}
45162306a36Sopenharmony_ci}
45262306a36Sopenharmony_ci
45362306a36Sopenharmony_cistatic u8 csiphy_get_lane_mask(struct csiphy_lanes_cfg *lane_cfg)
45462306a36Sopenharmony_ci{
45562306a36Sopenharmony_ci	u8 lane_mask;
45662306a36Sopenharmony_ci	int i;
45762306a36Sopenharmony_ci
45862306a36Sopenharmony_ci	lane_mask = CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE;
45962306a36Sopenharmony_ci
46062306a36Sopenharmony_ci	for (i = 0; i < lane_cfg->num_data; i++)
46162306a36Sopenharmony_ci		lane_mask |= 1 << lane_cfg->data[i].pos;
46262306a36Sopenharmony_ci
46362306a36Sopenharmony_ci	return lane_mask;
46462306a36Sopenharmony_ci}
46562306a36Sopenharmony_ci
46662306a36Sopenharmony_cistatic void csiphy_lanes_enable(struct csiphy_device *csiphy,
46762306a36Sopenharmony_ci				struct csiphy_config *cfg,
46862306a36Sopenharmony_ci				s64 link_freq, u8 lane_mask)
46962306a36Sopenharmony_ci{
47062306a36Sopenharmony_ci	struct csiphy_lanes_cfg *c = &cfg->csi2->lane_cfg;
47162306a36Sopenharmony_ci	bool is_gen2 = (csiphy->camss->version == CAMSS_845 ||
47262306a36Sopenharmony_ci			csiphy->camss->version == CAMSS_8250);
47362306a36Sopenharmony_ci	u8 settle_cnt;
47462306a36Sopenharmony_ci	u8 val;
47562306a36Sopenharmony_ci	int i;
47662306a36Sopenharmony_ci
47762306a36Sopenharmony_ci	settle_cnt = csiphy_settle_cnt_calc(link_freq, csiphy->timer_clk_rate);
47862306a36Sopenharmony_ci
47962306a36Sopenharmony_ci	val = CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE;
48062306a36Sopenharmony_ci	for (i = 0; i < c->num_data; i++)
48162306a36Sopenharmony_ci		val |= BIT(c->data[i].pos * 2);
48262306a36Sopenharmony_ci
48362306a36Sopenharmony_ci	writel_relaxed(val, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(5));
48462306a36Sopenharmony_ci
48562306a36Sopenharmony_ci	val = CSIPHY_3PH_CMN_CSI_COMMON_CTRL6_COMMON_PWRDN_B;
48662306a36Sopenharmony_ci	writel_relaxed(val, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(6));
48762306a36Sopenharmony_ci
48862306a36Sopenharmony_ci	val = 0x02;
48962306a36Sopenharmony_ci	writel_relaxed(val, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(7));
49062306a36Sopenharmony_ci
49162306a36Sopenharmony_ci	val = 0x00;
49262306a36Sopenharmony_ci	writel_relaxed(val, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(0));
49362306a36Sopenharmony_ci
49462306a36Sopenharmony_ci	if (is_gen2)
49562306a36Sopenharmony_ci		csiphy_gen2_config_lanes(csiphy, settle_cnt);
49662306a36Sopenharmony_ci	else
49762306a36Sopenharmony_ci		csiphy_gen1_config_lanes(csiphy, cfg, settle_cnt);
49862306a36Sopenharmony_ci
49962306a36Sopenharmony_ci	/* IRQ_MASK registers - disable all interrupts */
50062306a36Sopenharmony_ci	for (i = 11; i < 22; i++)
50162306a36Sopenharmony_ci		writel_relaxed(0, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(i));
50262306a36Sopenharmony_ci}
50362306a36Sopenharmony_ci
50462306a36Sopenharmony_cistatic void csiphy_lanes_disable(struct csiphy_device *csiphy,
50562306a36Sopenharmony_ci				 struct csiphy_config *cfg)
50662306a36Sopenharmony_ci{
50762306a36Sopenharmony_ci	writel_relaxed(0, csiphy->base +
50862306a36Sopenharmony_ci			  CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(5));
50962306a36Sopenharmony_ci
51062306a36Sopenharmony_ci	writel_relaxed(0, csiphy->base +
51162306a36Sopenharmony_ci			  CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(6));
51262306a36Sopenharmony_ci}
51362306a36Sopenharmony_ci
51462306a36Sopenharmony_ciconst struct csiphy_hw_ops csiphy_ops_3ph_1_0 = {
51562306a36Sopenharmony_ci	.get_lane_mask = csiphy_get_lane_mask,
51662306a36Sopenharmony_ci	.hw_version_read = csiphy_hw_version_read,
51762306a36Sopenharmony_ci	.reset = csiphy_reset,
51862306a36Sopenharmony_ci	.lanes_enable = csiphy_lanes_enable,
51962306a36Sopenharmony_ci	.lanes_disable = csiphy_lanes_disable,
52062306a36Sopenharmony_ci	.isr = csiphy_isr,
52162306a36Sopenharmony_ci};
522