162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2019 Samsung Electronics Co., Ltd.
462306a36Sopenharmony_ci *	      http://www.samsung.com/
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Samsung Exynos 5422 SoC Adaptive Supply Voltage support
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/bitrev.h>
1062306a36Sopenharmony_ci#include <linux/errno.h>
1162306a36Sopenharmony_ci#include <linux/regmap.h>
1262306a36Sopenharmony_ci#include <linux/soc/samsung/exynos-chipid.h>
1362306a36Sopenharmony_ci#include <linux/slab.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#include "exynos-asv.h"
1662306a36Sopenharmony_ci#include "exynos5422-asv.h"
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#define ASV_GROUPS_NUM		14
1962306a36Sopenharmony_ci#define ASV_ARM_DVFS_NUM	20
2062306a36Sopenharmony_ci#define ASV_ARM_BIN2_DVFS_NUM	17
2162306a36Sopenharmony_ci#define ASV_KFC_DVFS_NUM	14
2262306a36Sopenharmony_ci#define ASV_KFC_BIN2_DVFS_NUM	12
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci/*
2562306a36Sopenharmony_ci * This array is a set of 4 ASV data tables, first column of each ASV table
2662306a36Sopenharmony_ci * contains frequency value in MHz and subsequent columns contain the CPU
2762306a36Sopenharmony_ci * cluster's supply voltage values in uV.
2862306a36Sopenharmony_ci * In order to create a set of OPPs for specific SoC revision one of the voltage
2962306a36Sopenharmony_ci * columns (1...14) from one of the tables (0...3) is selected during
3062306a36Sopenharmony_ci * initialization. There are separate ASV tables for the big (ARM) and little
3162306a36Sopenharmony_ci * (KFC) CPU cluster. Only OPPs which are already defined in devicetree
3262306a36Sopenharmony_ci * will be updated.
3362306a36Sopenharmony_ci */
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistatic const u32 asv_arm_table[][ASV_ARM_DVFS_NUM][ASV_GROUPS_NUM + 1] = {
3662306a36Sopenharmony_ci{
3762306a36Sopenharmony_ci	/* ARM 0, 1 */
3862306a36Sopenharmony_ci	{ 2100,    1362500, 1362500, 1350000, 1337500, 1325000, 1312500, 1300000,
3962306a36Sopenharmony_ci	  1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000 },
4062306a36Sopenharmony_ci	{ 2000,    1312500, 1312500, 1300000, 1287500, 1275000, 1262500, 1250000,
4162306a36Sopenharmony_ci	  1237500, 1225000, 1237500, 1225000, 1212500, 1200000, 1187500 },
4262306a36Sopenharmony_ci	{ 1900,    1250000, 1237500, 1225000, 1212500, 1200000, 1187500, 1175000,
4362306a36Sopenharmony_ci	  1162500, 1150000, 1162500, 1150000, 1137500, 1125000, 1112500 },
4462306a36Sopenharmony_ci	{ 1800,    1200000, 1187500, 1175000, 1162500, 1150000, 1137500, 1125000,
4562306a36Sopenharmony_ci	  1112500, 1100000, 1112500, 1100000, 1087500, 1075000, 1062500 },
4662306a36Sopenharmony_ci	{ 1700,    1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500,
4762306a36Sopenharmony_ci	  1075000, 1062500, 1075000, 1062500, 1050000, 1037500, 1025000 },
4862306a36Sopenharmony_ci	{ 1600,    1125000, 1112500, 1100000, 1087500, 1075000, 1062500, 1050000,
4962306a36Sopenharmony_ci	  1037500, 1025000, 1037500, 1025000, 1012500, 1000000, 987500 },
5062306a36Sopenharmony_ci	{ 1500,    1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500,
5162306a36Sopenharmony_ci	  1000000, 987500,  1000000, 987500,  975000,  962500,  950000 },
5262306a36Sopenharmony_ci	{ 1400,    1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
5362306a36Sopenharmony_ci	  975000,  962500,  975000,  962500,  950000,  937500,  925000 },
5462306a36Sopenharmony_ci	{ 1300,    1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000,
5562306a36Sopenharmony_ci	  962500,  950000,  962500,  950000,  937500,  925000,  912500 },
5662306a36Sopenharmony_ci	{ 1200,    1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
5762306a36Sopenharmony_ci	  937500,  925000,  937500,  925000,  912500,  900000,  900000 },
5862306a36Sopenharmony_ci	{ 1100,    1000000, 987500,  975000,  962500,  950000,  937500,  925000,
5962306a36Sopenharmony_ci	  912500,  900000,  900000,  900000,  900000,  900000,  900000 },
6062306a36Sopenharmony_ci	{ 1000,    975000,  962500,  950000,  937500,  925000,  912500,  900000,
6162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
6262306a36Sopenharmony_ci	{ 900,     950000,  937500,  925000,  912500,  900000,  900000,  900000,
6362306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
6462306a36Sopenharmony_ci	{ 800,     925000,  912500,  900000,  900000,  900000,  900000,  900000,
6562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
6662306a36Sopenharmony_ci	{ 700,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
6762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
6862306a36Sopenharmony_ci	{ 600,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
6962306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
7062306a36Sopenharmony_ci	{ 500,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
7162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
7262306a36Sopenharmony_ci	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
7362306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
7462306a36Sopenharmony_ci	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
7562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
7662306a36Sopenharmony_ci	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
7762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
7862306a36Sopenharmony_ci}, {
7962306a36Sopenharmony_ci	/* ARM 2 */
8062306a36Sopenharmony_ci	{ 2100,    1362500, 1362500, 1350000, 1337500, 1325000, 1312500, 1300000,
8162306a36Sopenharmony_ci	  1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000 },
8262306a36Sopenharmony_ci	{ 2000,    1312500, 1312500, 1312500, 1300000, 1275000, 1262500, 1250000,
8362306a36Sopenharmony_ci	  1237500, 1225000, 1237500, 1225000, 1212500, 1200000, 1187500 },
8462306a36Sopenharmony_ci	{ 1900,    1262500, 1250000, 1250000, 1237500, 1212500, 1200000, 1187500,
8562306a36Sopenharmony_ci	  1175000, 1162500, 1175000, 1162500, 1150000, 1137500, 1125000 },
8662306a36Sopenharmony_ci	{ 1800,    1212500, 1200000, 1187500, 1175000, 1162500, 1150000, 1137500,
8762306a36Sopenharmony_ci	  1125000, 1112500, 1125000, 1112500, 1100000, 1087500, 1075000 },
8862306a36Sopenharmony_ci	{ 1700,    1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
8962306a36Sopenharmony_ci	  1087500, 1075000, 1087500, 1075000, 1062500, 1050000, 1037500 },
9062306a36Sopenharmony_ci	{ 1600,    1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
9162306a36Sopenharmony_ci	  1050000, 1037500, 1050000, 1037500, 1025000, 1012500, 1000000 },
9262306a36Sopenharmony_ci	{ 1500,    1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
9362306a36Sopenharmony_ci	  1012500, 1000000, 1012500, 1000000, 987500,  975000,  962500 },
9462306a36Sopenharmony_ci	{ 1400,    1075000, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000,
9562306a36Sopenharmony_ci	  987500,  975000,  987500,  975000,  962500,  950000,  937500 },
9662306a36Sopenharmony_ci	{ 1300,    1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000,
9762306a36Sopenharmony_ci	  962500,  950000,  962500,  950000,  937500,  925000,  912500 },
9862306a36Sopenharmony_ci	{ 1200,    1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
9962306a36Sopenharmony_ci	  937500,  925000,  937500,  925000,  912500,  900000,  900000 },
10062306a36Sopenharmony_ci	{ 1100,    1000000, 987500,  975000,  962500,  950000,  937500,  925000,
10162306a36Sopenharmony_ci	  912500,  900000,  900000,  900000,  900000,  900000,  900000 },
10262306a36Sopenharmony_ci	{ 1000,    975000,  962500,  950000,  937500,  925000,  912500,  900000,
10362306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
10462306a36Sopenharmony_ci	{ 900,     950000,  937500,  925000,  912500,  900000,  900000,  900000,
10562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
10662306a36Sopenharmony_ci	{ 800,     925000,  912500,  900000,  900000,  900000,  900000,  900000,
10762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
10862306a36Sopenharmony_ci	{ 700,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
10962306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
11062306a36Sopenharmony_ci	{ 600,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
11162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
11262306a36Sopenharmony_ci	{ 500,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
11362306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
11462306a36Sopenharmony_ci	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
11562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
11662306a36Sopenharmony_ci	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
11762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
11862306a36Sopenharmony_ci	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
11962306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
12062306a36Sopenharmony_ci}, {
12162306a36Sopenharmony_ci	/* ARM 3 */
12262306a36Sopenharmony_ci	{ 2100,    1362500, 1362500, 1350000, 1337500, 1325000, 1312500, 1300000,
12362306a36Sopenharmony_ci	  1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000 },
12462306a36Sopenharmony_ci	{ 2000,    1312500, 1312500, 1300000, 1287500, 1275000, 1262500, 1250000,
12562306a36Sopenharmony_ci	  1237500, 1225000, 1237500, 1225000, 1212500, 1200000, 1187500 },
12662306a36Sopenharmony_ci	{ 1900,    1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500,
12762306a36Sopenharmony_ci	  1175000, 1162500, 1175000, 1162500, 1150000, 1137500, 1125000 },
12862306a36Sopenharmony_ci	{ 1800,    1212500, 1200000, 1187500, 1175000, 1162500, 1150000, 1137500,
12962306a36Sopenharmony_ci	  1125000, 1112500, 1125000, 1112500, 1100000, 1087500, 1075000 },
13062306a36Sopenharmony_ci	{ 1700,    1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
13162306a36Sopenharmony_ci	  1087500, 1075000, 1087500, 1075000, 1062500, 1050000, 1037500 },
13262306a36Sopenharmony_ci	{ 1600,    1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
13362306a36Sopenharmony_ci	  1050000, 1037500, 1050000, 1037500, 1025000, 1012500, 1000000 },
13462306a36Sopenharmony_ci	{ 1500,    1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
13562306a36Sopenharmony_ci	  1012500, 1000000, 1012500, 1000000, 987500,  975000,  962500 },
13662306a36Sopenharmony_ci	{ 1400,    1075000, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000,
13762306a36Sopenharmony_ci	  987500,  975000,  987500,  975000,  962500,  950000,  937500 },
13862306a36Sopenharmony_ci	{ 1300,    1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000,
13962306a36Sopenharmony_ci	  962500,  950000,  962500,  950000,  937500,  925000,  912500 },
14062306a36Sopenharmony_ci	{ 1200,    1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
14162306a36Sopenharmony_ci	  937500,  925000,  937500,  925000,  912500,  900000,  900000 },
14262306a36Sopenharmony_ci	{ 1100,    1000000, 987500,  975000,  962500,  950000,  937500,  925000,
14362306a36Sopenharmony_ci	  912500,  900000,  900000,  900000,  900000,  900000,  900000 },
14462306a36Sopenharmony_ci	{ 1000,    975000,  962500,  950000,  937500,  925000,  912500,  900000,
14562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
14662306a36Sopenharmony_ci	{ 900,     950000,  937500,  925000,  912500,  900000,  900000,  900000,
14762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
14862306a36Sopenharmony_ci	{ 800,     925000,  912500,  900000,  900000,  900000,  900000,  900000,
14962306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
15062306a36Sopenharmony_ci	{ 700,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
15162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
15262306a36Sopenharmony_ci	{ 600,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
15362306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
15462306a36Sopenharmony_ci	{ 500,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
15562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
15662306a36Sopenharmony_ci	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
15762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
15862306a36Sopenharmony_ci	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
15962306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
16062306a36Sopenharmony_ci	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
16162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
16262306a36Sopenharmony_ci}, {
16362306a36Sopenharmony_ci	/* ARM bin 2 */
16462306a36Sopenharmony_ci	{ 1800,    1237500, 1225000, 1212500, 1200000, 1187500, 1175000, 1162500,
16562306a36Sopenharmony_ci	  1150000, 1137500, 1150000, 1137500, 1125000, 1112500, 1100000 },
16662306a36Sopenharmony_ci	{ 1700,    1200000, 1187500, 1175000, 1162500, 1150000, 1137500, 1125000,
16762306a36Sopenharmony_ci	  1112500, 1100000, 1112500, 1100000, 1087500, 1075000, 1062500 },
16862306a36Sopenharmony_ci	{ 1600,    1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500,
16962306a36Sopenharmony_ci	  1075000, 1062500, 1075000, 1062500, 1050000, 1037500, 1025000 },
17062306a36Sopenharmony_ci	{ 1500,    1125000, 1112500, 1100000, 1087500, 1075000, 1062500, 1050000,
17162306a36Sopenharmony_ci	  1037500, 1025000, 1037500, 1025000, 1012500, 1000000, 987500 },
17262306a36Sopenharmony_ci	{ 1400,    1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
17362306a36Sopenharmony_ci	  1012500, 1000000, 1012500, 1000000, 987500,  975000,  962500 },
17462306a36Sopenharmony_ci	{ 1300,    1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500,
17562306a36Sopenharmony_ci	  1000000, 987500,  1000000, 987500,  975000,  962500,  950000 },
17662306a36Sopenharmony_ci	{ 1200,    1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
17762306a36Sopenharmony_ci	  975000,  962500,  975000,  962500,  950000,  937500,  925000 },
17862306a36Sopenharmony_ci	{ 1100,    1037500, 1025000, 1012500, 1000000, 987500,  975000,  962500,
17962306a36Sopenharmony_ci	  950000,  937500,  950000,  937500,  925000,  912500,  900000 },
18062306a36Sopenharmony_ci	{ 1000,    1012500, 1000000, 987500,  975000,  962500,  950000,  937500,
18162306a36Sopenharmony_ci	  925000,  912500,  925000,  912500,  900000,  900000,  900000 },
18262306a36Sopenharmony_ci	{ 900,     987500,  975000,  962500,  950000,  937500,  925000,  912500,
18362306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
18462306a36Sopenharmony_ci	{ 800,     962500,  950000,  937500,  925000,  912500,  900000,  900000,
18562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
18662306a36Sopenharmony_ci	{ 700,     937500,  925000,  912500,  900000,  900000,  900000,  900000,
18762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
18862306a36Sopenharmony_ci	{ 600,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
18962306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
19062306a36Sopenharmony_ci	{ 500,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
19162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
19262306a36Sopenharmony_ci	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
19362306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
19462306a36Sopenharmony_ci	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
19562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
19662306a36Sopenharmony_ci	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
19762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
19862306a36Sopenharmony_ci}
19962306a36Sopenharmony_ci};
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_cistatic const u32 asv_kfc_table[][ASV_KFC_DVFS_NUM][ASV_GROUPS_NUM + 1] = {
20262306a36Sopenharmony_ci{
20362306a36Sopenharmony_ci	/* KFC 0, 1 */
20462306a36Sopenharmony_ci	{ 1500000, 1300000, 1300000, 1300000, 1287500, 1287500, 1287500, 1275000,
20562306a36Sopenharmony_ci	  1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500 },
20662306a36Sopenharmony_ci	{ 1400000, 1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000,
20762306a36Sopenharmony_ci	  1187500, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500 },
20862306a36Sopenharmony_ci	{ 1300000, 1225000, 1212500, 1200000, 1187500, 1175000, 1162500, 1150000,
20962306a36Sopenharmony_ci	  1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500 },
21062306a36Sopenharmony_ci	{ 1200000, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
21162306a36Sopenharmony_ci	  1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500 },
21262306a36Sopenharmony_ci	{ 1100000, 1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
21362306a36Sopenharmony_ci	  1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000 },
21462306a36Sopenharmony_ci	{ 1000000, 1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
21562306a36Sopenharmony_ci	  1012500, 1000000, 987500,  975000,  962500,  950000,  937500 },
21662306a36Sopenharmony_ci	{ 900000,  1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
21762306a36Sopenharmony_ci	  975000,  962500,  950000,  937500,  925000,  912500,  900000 },
21862306a36Sopenharmony_ci	{ 800000,  1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
21962306a36Sopenharmony_ci	  937500,  925000,  912500,  900000,  900000,  900000,  900000 },
22062306a36Sopenharmony_ci	{ 700000,  987500,  975000,  962500,  950000,  937500,  925000,  912500,
22162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
22262306a36Sopenharmony_ci	{ 600000,  950000,  937500,  925000,  912500,  900000,  900000,  900000,
22362306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
22462306a36Sopenharmony_ci	{ 500000,  912500,  900000,  900000,  900000,  900000,  900000,  900000,
22562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
22662306a36Sopenharmony_ci	{ 400000,  900000,  900000,  900000,  900000,  900000,  900000,  900000,
22762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
22862306a36Sopenharmony_ci	{ 300000,  900000,  900000,  900000,  900000,  900000,  900000,  900000,
22962306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
23062306a36Sopenharmony_ci	{ 200000,  900000,  900000,  900000,  900000,  900000,  900000,  900000,
23162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
23262306a36Sopenharmony_ci}, {
23362306a36Sopenharmony_ci	/* KFC 2 */
23462306a36Sopenharmony_ci	{ 1500,    1300000, 1300000, 1300000, 1287500, 1287500, 1287500, 1275000,
23562306a36Sopenharmony_ci	  1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500 },
23662306a36Sopenharmony_ci	{ 1400,    1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000,
23762306a36Sopenharmony_ci	  1187500, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500 },
23862306a36Sopenharmony_ci	{ 1300,    1225000, 1212500, 1200000, 1187500, 1175000, 1162500, 1150000,
23962306a36Sopenharmony_ci	  1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500 },
24062306a36Sopenharmony_ci	{ 1200,    1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
24162306a36Sopenharmony_ci	  1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500 },
24262306a36Sopenharmony_ci	{ 1100,    1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
24362306a36Sopenharmony_ci	  1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000 },
24462306a36Sopenharmony_ci	{ 1000,    1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
24562306a36Sopenharmony_ci	  1012500, 1000000, 987500,  975000,  962500,  950000,  937500 },
24662306a36Sopenharmony_ci	{ 900,     1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
24762306a36Sopenharmony_ci	  975000,  962500,  950000,  937500,  925000,  912500,  900000 },
24862306a36Sopenharmony_ci	{ 800,     1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
24962306a36Sopenharmony_ci	  937500,  925000,  912500,  900000,  900000,  900000,  900000 },
25062306a36Sopenharmony_ci	{ 700,     987500,  975000,  962500,  950000,  937500,  925000,  912500,
25162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
25262306a36Sopenharmony_ci	{ 600,     950000,  937500,  925000,  912500,  900000,  900000,  900000,
25362306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
25462306a36Sopenharmony_ci	{ 500,     912500,  900000,  900000,  900000,  900000,  900000,  900000,
25562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
25662306a36Sopenharmony_ci	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
25762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
25862306a36Sopenharmony_ci	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
25962306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
26062306a36Sopenharmony_ci	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
26162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
26262306a36Sopenharmony_ci}, {
26362306a36Sopenharmony_ci	/* KFC 3 */
26462306a36Sopenharmony_ci	{ 1500,    1300000, 1300000, 1300000, 1287500, 1287500, 1287500, 1275000,
26562306a36Sopenharmony_ci	  1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500 },
26662306a36Sopenharmony_ci	{ 1400,    1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000,
26762306a36Sopenharmony_ci	  1187500, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500 },
26862306a36Sopenharmony_ci	{ 1300,    1225000, 1212500, 1200000, 1187500, 1175000, 1162500, 1150000,
26962306a36Sopenharmony_ci	  1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500 },
27062306a36Sopenharmony_ci	{ 1200,    1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
27162306a36Sopenharmony_ci	  1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500 },
27262306a36Sopenharmony_ci	{ 1100,    1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
27362306a36Sopenharmony_ci	  1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000 },
27462306a36Sopenharmony_ci	{ 1000,    1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
27562306a36Sopenharmony_ci	  1012500, 1000000, 987500,  975000,  962500,  950000,  937500 },
27662306a36Sopenharmony_ci	{ 900,     1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
27762306a36Sopenharmony_ci	  975000,  962500,  950000,  937500,  925000,  912500,  900000 },
27862306a36Sopenharmony_ci	{ 800,     1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
27962306a36Sopenharmony_ci	  937500,  925000,  912500,  900000,  900000,  900000,  900000 },
28062306a36Sopenharmony_ci	{ 700,     987500,  975000,  962500,  950000,  937500,  925000,  912500,
28162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
28262306a36Sopenharmony_ci	{ 600,     950000,  937500,  925000,  912500,  900000,  900000,  900000,
28362306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
28462306a36Sopenharmony_ci	{ 500,     912500,  900000,  900000,  900000,  900000,  900000,  900000,
28562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
28662306a36Sopenharmony_ci	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
28762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
28862306a36Sopenharmony_ci	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
28962306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
29062306a36Sopenharmony_ci	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
29162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
29262306a36Sopenharmony_ci}, {
29362306a36Sopenharmony_ci	/* KFC bin 2 */
29462306a36Sopenharmony_ci	{ 1300,    1250000, 1237500, 1225000, 1212500, 1200000, 1187500, 1175000,
29562306a36Sopenharmony_ci	  1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500 },
29662306a36Sopenharmony_ci	{ 1200,    1200000, 1187500, 1175000, 1162500, 1150000, 1137500, 1125000,
29762306a36Sopenharmony_ci	  1112500, 1100000, 1087500, 1075000, 1062500, 1050000, 1037500 },
29862306a36Sopenharmony_ci	{ 1100,    1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500,
29962306a36Sopenharmony_ci	  1075000, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000 },
30062306a36Sopenharmony_ci	{ 1000,    1125000, 1112500, 1100000, 1087500, 1075000, 1062500, 1050000,
30162306a36Sopenharmony_ci	  1037500, 1025000, 1012500, 1000000, 987500,  975000,  962500 },
30262306a36Sopenharmony_ci	{ 900,     1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500,
30362306a36Sopenharmony_ci	  1000000, 987500,  975000,  962500,  950000,  937500,  925000 },
30462306a36Sopenharmony_ci	{ 800,     1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000,
30562306a36Sopenharmony_ci	  962500,  950000,  937500,  925000,  912500,  900000,  900000 },
30662306a36Sopenharmony_ci	{ 700,     1012500, 1000000, 987500,  975000,  962500,  950000,  937500,
30762306a36Sopenharmony_ci	  925000,  912500,  900000,  900000,  900000,  900000,  900000 },
30862306a36Sopenharmony_ci	{ 600,     975000,  962500,  950000,  937500,  925000,  912500,  900000,
30962306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
31062306a36Sopenharmony_ci	{ 500,     937500,  925000,  912500,  900000,  900000,  900000,  900000,
31162306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
31262306a36Sopenharmony_ci	{ 400,     925000,  912500,  900000,  900000,  900000,  900000,  900000,
31362306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
31462306a36Sopenharmony_ci	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
31562306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
31662306a36Sopenharmony_ci	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
31762306a36Sopenharmony_ci	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
31862306a36Sopenharmony_ci}
31962306a36Sopenharmony_ci};
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_cistatic const struct asv_limit_entry __asv_limits[ASV_GROUPS_NUM] = {
32262306a36Sopenharmony_ci	{ 13, 55 },
32362306a36Sopenharmony_ci	{ 21, 65 },
32462306a36Sopenharmony_ci	{ 25, 69 },
32562306a36Sopenharmony_ci	{ 30, 72 },
32662306a36Sopenharmony_ci	{ 36, 74 },
32762306a36Sopenharmony_ci	{ 43, 76 },
32862306a36Sopenharmony_ci	{ 51, 78 },
32962306a36Sopenharmony_ci	{ 65, 80 },
33062306a36Sopenharmony_ci	{ 81, 82 },
33162306a36Sopenharmony_ci	{ 98, 84 },
33262306a36Sopenharmony_ci	{ 119, 87 },
33362306a36Sopenharmony_ci	{ 135, 89 },
33462306a36Sopenharmony_ci	{ 150, 92 },
33562306a36Sopenharmony_ci	{ 999, 999 },
33662306a36Sopenharmony_ci};
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_cistatic int exynos5422_asv_get_group(struct exynos_asv *asv)
33962306a36Sopenharmony_ci{
34062306a36Sopenharmony_ci	unsigned int pkgid_reg, auxi_reg;
34162306a36Sopenharmony_ci	int hpm, ids, i;
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ci	regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_PKG_ID, &pkgid_reg);
34462306a36Sopenharmony_ci	regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_AUX_INFO, &auxi_reg);
34562306a36Sopenharmony_ci
34662306a36Sopenharmony_ci	if (asv->use_sg) {
34762306a36Sopenharmony_ci		u32 sga = (pkgid_reg >> EXYNOS5422_SG_A_OFFSET) &
34862306a36Sopenharmony_ci			   EXYNOS5422_SG_A_MASK;
34962306a36Sopenharmony_ci
35062306a36Sopenharmony_ci		u32 sgb = (pkgid_reg >> EXYNOS5422_SG_B_OFFSET) &
35162306a36Sopenharmony_ci			   EXYNOS5422_SG_B_MASK;
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_ci		if ((pkgid_reg >> EXYNOS5422_SG_BSIGN_OFFSET) &
35462306a36Sopenharmony_ci		     EXYNOS5422_SG_BSIGN_MASK)
35562306a36Sopenharmony_ci			return sga + sgb;
35662306a36Sopenharmony_ci		else
35762306a36Sopenharmony_ci			return sga - sgb;
35862306a36Sopenharmony_ci	}
35962306a36Sopenharmony_ci
36062306a36Sopenharmony_ci	hpm = (auxi_reg >> EXYNOS5422_TMCB_OFFSET) & EXYNOS5422_TMCB_MASK;
36162306a36Sopenharmony_ci	ids = (pkgid_reg >> EXYNOS5422_IDS_OFFSET) & EXYNOS5422_IDS_MASK;
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_ci	for (i = 0; i < ASV_GROUPS_NUM; i++) {
36462306a36Sopenharmony_ci		if (ids <= __asv_limits[i].ids)
36562306a36Sopenharmony_ci			break;
36662306a36Sopenharmony_ci		if (hpm <= __asv_limits[i].hpm)
36762306a36Sopenharmony_ci			break;
36862306a36Sopenharmony_ci	}
36962306a36Sopenharmony_ci	if (i < ASV_GROUPS_NUM)
37062306a36Sopenharmony_ci		return i;
37162306a36Sopenharmony_ci
37262306a36Sopenharmony_ci	return 0;
37362306a36Sopenharmony_ci}
37462306a36Sopenharmony_ci
37562306a36Sopenharmony_cistatic int __asv_offset_voltage(unsigned int index)
37662306a36Sopenharmony_ci{
37762306a36Sopenharmony_ci	switch (index) {
37862306a36Sopenharmony_ci	case 1:
37962306a36Sopenharmony_ci		return 12500;
38062306a36Sopenharmony_ci	case 2:
38162306a36Sopenharmony_ci		return 50000;
38262306a36Sopenharmony_ci	case 3:
38362306a36Sopenharmony_ci		return 25000;
38462306a36Sopenharmony_ci	default:
38562306a36Sopenharmony_ci		return 0;
38662306a36Sopenharmony_ci	}
38762306a36Sopenharmony_ci}
38862306a36Sopenharmony_ci
38962306a36Sopenharmony_cistatic void exynos5422_asv_offset_voltage_setup(struct exynos_asv *asv)
39062306a36Sopenharmony_ci{
39162306a36Sopenharmony_ci	struct exynos_asv_subsys *subsys;
39262306a36Sopenharmony_ci	unsigned int reg, value;
39362306a36Sopenharmony_ci
39462306a36Sopenharmony_ci	regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_AUX_INFO, &reg);
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_ci	/* ARM offset voltage setup */
39762306a36Sopenharmony_ci	subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_ARM];
39862306a36Sopenharmony_ci
39962306a36Sopenharmony_ci	subsys->base_volt = 1000000;
40062306a36Sopenharmony_ci
40162306a36Sopenharmony_ci	value = (reg >> EXYNOS5422_ARM_UP_OFFSET) & EXYNOS5422_ARM_UP_MASK;
40262306a36Sopenharmony_ci	subsys->offset_volt_h = __asv_offset_voltage(value);
40362306a36Sopenharmony_ci
40462306a36Sopenharmony_ci	value = (reg >> EXYNOS5422_ARM_DN_OFFSET) & EXYNOS5422_ARM_DN_MASK;
40562306a36Sopenharmony_ci	subsys->offset_volt_l = __asv_offset_voltage(value);
40662306a36Sopenharmony_ci
40762306a36Sopenharmony_ci	/* KFC offset voltage setup */
40862306a36Sopenharmony_ci	subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_KFC];
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_ci	subsys->base_volt = 1000000;
41162306a36Sopenharmony_ci
41262306a36Sopenharmony_ci	value = (reg >> EXYNOS5422_KFC_UP_OFFSET) & EXYNOS5422_KFC_UP_MASK;
41362306a36Sopenharmony_ci	subsys->offset_volt_h = __asv_offset_voltage(value);
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_ci	value = (reg >> EXYNOS5422_KFC_DN_OFFSET) & EXYNOS5422_KFC_DN_MASK;
41662306a36Sopenharmony_ci	subsys->offset_volt_l = __asv_offset_voltage(value);
41762306a36Sopenharmony_ci}
41862306a36Sopenharmony_ci
41962306a36Sopenharmony_cistatic int exynos5422_asv_opp_get_voltage(const struct exynos_asv_subsys *subsys,
42062306a36Sopenharmony_ci					  int level, unsigned int volt)
42162306a36Sopenharmony_ci{
42262306a36Sopenharmony_ci	unsigned int asv_volt;
42362306a36Sopenharmony_ci
42462306a36Sopenharmony_ci	if (level >= subsys->table.num_rows)
42562306a36Sopenharmony_ci		return volt;
42662306a36Sopenharmony_ci
42762306a36Sopenharmony_ci	asv_volt = exynos_asv_opp_get_voltage(subsys, level,
42862306a36Sopenharmony_ci					      subsys->asv->group);
42962306a36Sopenharmony_ci
43062306a36Sopenharmony_ci	if (volt > subsys->base_volt)
43162306a36Sopenharmony_ci		asv_volt += subsys->offset_volt_h;
43262306a36Sopenharmony_ci	else
43362306a36Sopenharmony_ci		asv_volt += subsys->offset_volt_l;
43462306a36Sopenharmony_ci
43562306a36Sopenharmony_ci	return asv_volt;
43662306a36Sopenharmony_ci}
43762306a36Sopenharmony_ci
43862306a36Sopenharmony_cistatic unsigned int exynos5422_asv_parse_table(unsigned int pkg_id)
43962306a36Sopenharmony_ci{
44062306a36Sopenharmony_ci	return (pkg_id >> EXYNOS5422_TABLE_OFFSET) & EXYNOS5422_TABLE_MASK;
44162306a36Sopenharmony_ci}
44262306a36Sopenharmony_ci
44362306a36Sopenharmony_cistatic bool exynos5422_asv_parse_bin2(unsigned int pkg_id)
44462306a36Sopenharmony_ci{
44562306a36Sopenharmony_ci	return (pkg_id >> EXYNOS5422_BIN2_OFFSET) & EXYNOS5422_BIN2_MASK;
44662306a36Sopenharmony_ci}
44762306a36Sopenharmony_ci
44862306a36Sopenharmony_cistatic bool exynos5422_asv_parse_sg(unsigned int pkg_id)
44962306a36Sopenharmony_ci{
45062306a36Sopenharmony_ci	return (pkg_id >> EXYNOS5422_USESG_OFFSET) & EXYNOS5422_USESG_MASK;
45162306a36Sopenharmony_ci}
45262306a36Sopenharmony_ci
45362306a36Sopenharmony_ciint exynos5422_asv_init(struct exynos_asv *asv)
45462306a36Sopenharmony_ci{
45562306a36Sopenharmony_ci	struct exynos_asv_subsys *subsys;
45662306a36Sopenharmony_ci	unsigned int table_index;
45762306a36Sopenharmony_ci	unsigned int pkg_id;
45862306a36Sopenharmony_ci	bool bin2;
45962306a36Sopenharmony_ci
46062306a36Sopenharmony_ci	regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_PKG_ID, &pkg_id);
46162306a36Sopenharmony_ci
46262306a36Sopenharmony_ci	if (asv->of_bin == 2) {
46362306a36Sopenharmony_ci		bin2 = true;
46462306a36Sopenharmony_ci		asv->use_sg = false;
46562306a36Sopenharmony_ci	} else {
46662306a36Sopenharmony_ci		asv->use_sg = exynos5422_asv_parse_sg(pkg_id);
46762306a36Sopenharmony_ci		bin2 = exynos5422_asv_parse_bin2(pkg_id);
46862306a36Sopenharmony_ci	}
46962306a36Sopenharmony_ci
47062306a36Sopenharmony_ci	asv->group = exynos5422_asv_get_group(asv);
47162306a36Sopenharmony_ci	asv->table = exynos5422_asv_parse_table(pkg_id);
47262306a36Sopenharmony_ci
47362306a36Sopenharmony_ci	exynos5422_asv_offset_voltage_setup(asv);
47462306a36Sopenharmony_ci
47562306a36Sopenharmony_ci	if (bin2) {
47662306a36Sopenharmony_ci		table_index = 3;
47762306a36Sopenharmony_ci	} else {
47862306a36Sopenharmony_ci		if (asv->table == 2 || asv->table == 3)
47962306a36Sopenharmony_ci			table_index = asv->table - 1;
48062306a36Sopenharmony_ci		else
48162306a36Sopenharmony_ci			table_index = 0;
48262306a36Sopenharmony_ci	}
48362306a36Sopenharmony_ci
48462306a36Sopenharmony_ci	subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_ARM];
48562306a36Sopenharmony_ci	subsys->cpu_dt_compat = "arm,cortex-a15";
48662306a36Sopenharmony_ci	if (bin2)
48762306a36Sopenharmony_ci		subsys->table.num_rows = ASV_ARM_BIN2_DVFS_NUM;
48862306a36Sopenharmony_ci	else
48962306a36Sopenharmony_ci		subsys->table.num_rows = ASV_ARM_DVFS_NUM;
49062306a36Sopenharmony_ci	subsys->table.num_cols = ASV_GROUPS_NUM + 1;
49162306a36Sopenharmony_ci	subsys->table.buf = (u32 *)asv_arm_table[table_index];
49262306a36Sopenharmony_ci
49362306a36Sopenharmony_ci	subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_KFC];
49462306a36Sopenharmony_ci	subsys->cpu_dt_compat = "arm,cortex-a7";
49562306a36Sopenharmony_ci	if (bin2)
49662306a36Sopenharmony_ci		subsys->table.num_rows = ASV_KFC_BIN2_DVFS_NUM;
49762306a36Sopenharmony_ci	else
49862306a36Sopenharmony_ci		subsys->table.num_rows = ASV_KFC_DVFS_NUM;
49962306a36Sopenharmony_ci	subsys->table.num_cols = ASV_GROUPS_NUM + 1;
50062306a36Sopenharmony_ci	subsys->table.buf = (u32 *)asv_kfc_table[table_index];
50162306a36Sopenharmony_ci
50262306a36Sopenharmony_ci	asv->opp_get_voltage = exynos5422_asv_opp_get_voltage;
50362306a36Sopenharmony_ci
50462306a36Sopenharmony_ci	return 0;
50562306a36Sopenharmony_ci}
50662306a36Sopenharmony_ciEXPORT_SYMBOL_GPL(exynos5422_asv_init);
507