Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 52b53aca authored by Kyle Yan's avatar Kyle Yan Committed by Gerrit - the friendly Code Review server
Browse files

Merge "clk: qcom: clock: Add GCC driver for MSMSKUNK" into msm-4.8

parents 2e15126b 575a45fd
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ Required properties :
			"qcom,gcc-msm8974pro-ac"
			"qcom,gcc-msm8996"
			"qcom,gcc-mdm9615"
			"qcom,gcc-msmskunk"

- reg : shall contain base register location and length
- #clock-cells : shall contain 1
+9 −0
Original line number Diff line number Diff line
@@ -150,3 +150,12 @@ config MSM_MMCC_8996
	  Support for the multimedia clock controller on msm8996 devices.
	  Say Y if you want to support multimedia devices such as display,
	  graphics, video encode/decode, camera, etc.

config MSM_GCC_SKUNK
	tristate "MSMSKUNK Global Clock Controller"
	depends on COMMON_CLK_QCOM
	help
	  Support for the global clock controller on Qualcomm Technologies, Inc
	  MSMskunk devices.
	  Say Y if you want to use peripheral devices such as UART, SPI,
	  i2c, USB, UFS, SD/eMMC, PCIe, etc.
+1 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ obj-$(CONFIG_MSM_GCC_8916) += gcc-msm8916.o
obj-$(CONFIG_MSM_GCC_8960) += gcc-msm8960.o
obj-$(CONFIG_MSM_GCC_8974) += gcc-msm8974.o
obj-$(CONFIG_MSM_GCC_8996) += gcc-msm8996.o
obj-$(CONFIG_MSM_GCC_SKUNK) += gcc-msmskunk.o
obj-$(CONFIG_MSM_LCC_8960) += lcc-msm8960.o
obj-$(CONFIG_MSM_MMCC_8960) += mmcc-msm8960.o
obj-$(CONFIG_MSM_MMCC_8974) += mmcc-msm8974.o
+3642 −0

File added.

Preview size limit exceeded, changes collapsed.

+116 −0
Original line number Diff line number Diff line
/*
 * Copyright (c) 2016, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#ifndef __DRIVERS_CLK_QCOM_VDD_LEVEL_COBALT_H
#define __DRIVERS_CLK_QCOM_VDD_LEVEL_COBALT_H

#include <linux/regulator/consumer.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>

#define VDD_CX_FMAX_MAP1(l1, f1) \
	.vdd_class = &vdd_cx,			\
	.rate_max = (unsigned long[VDD_CX_NUM]) {	\
		[VDD_CX_##l1] = (f1),		\
	},					\
	.num_rate_max = VDD_CX_NUM

#define VDD_CX_FMAX_MAP2(l1, f1, l2, f2) \
	.vdd_class = &vdd_cx,			\
	.rate_max = (unsigned long[VDD_CX_NUM]) {	\
		[VDD_CX_##l1] = (f1),		\
		[VDD_CX_##l2] = (f2),		\
	},					\
	.num_rate_max = VDD_CX_NUM

#define VDD_CX_FMAX_MAP3(l1, f1, l2, f2, l3, f3) \
	.vdd_class = &vdd_cx,			\
	.rate_max = (unsigned long[VDD_CX_NUM]) {	\
		[VDD_CX_##l1] = (f1),		\
		[VDD_CX_##l2] = (f2),		\
		[VDD_CX_##l3] = (f3),		\
	},					\
	.num_rate_max = VDD_CX_NUM

#define VDD_CX_FMAX_MAP4(l1, f1, l2, f2, l3, f3, l4, f4) \
	.vdd_class = &vdd_cx,			\
	.rate_max = (unsigned long[VDD_CX_NUM]) {	\
		[VDD_CX_##l1] = (f1),		\
		[VDD_CX_##l2] = (f2),		\
		[VDD_CX_##l3] = (f3),		\
		[VDD_CX_##l4] = (f4),		\
	},					\
	.num_rate_max = VDD_CX_NUM

#define VDD_CX_FMAX_MAP5(l1, f1, l2, f2, l3, f3, l4, f4, l5, f5) \
	.vdd_class = &vdd_cx,			\
	.rate_max = (unsigned long[VDD_CX_NUM]) {	\
		[VDD_CX_##l1] = (f1),		\
		[VDD_CX_##l2] = (f2),		\
		[VDD_CX_##l3] = (f3),		\
		[VDD_CX_##l4] = (f4),		\
		[VDD_CX_##l5] = (f5),		\
	},					\
	.num_rate_max = VDD_CX_NUM

#define VDD_CX_FMAX_MAP6(l1, f1, l2, f2, l3, f3, l4, f4, l5, f5, l6, f6) \
	.vdd_class = &vdd_cx,			\
	.rate_max = (unsigned long[VDD_CX_NUM]) {	\
		[VDD_CX_##l1] = (f1),		\
		[VDD_CX_##l2] = (f2),		\
		[VDD_CX_##l3] = (f3),		\
		[VDD_CX_##l4] = (f4),		\
		[VDD_CX_##l5] = (f5),		\
		[VDD_CX_##l6] = (f6),		\
	},					\
	.num_rate_max = VDD_CX_NUM

#define VDD_CX_FMAX_MAP1_AO(l1, f1)		 \
	.vdd_class = &vdd_cx_ao,		\
	.rate_max = (unsigned long[VDD_CX_NUM]) {	\
		[VDD_CX_##l1] = (f1),		\
	},					\
	.num_rate_max = VDD_CX_NUM

#define VDD_CX_FMAX_MAP3_AO(l1, f1, l2, f2, l3, f3) \
	.vdd_class = &vdd_cx_ao,			\
	.rate_max = (unsigned long[VDD_CX_NUM]) {	\
		[VDD_CX_##l1] = (f1),		\
		[VDD_CX_##l2] = (f2),		\
		[VDD_CX_##l3] = (f3),		\
	},					\
	.num_rate_max = VDD_CX_NUM


enum vdd_cx_levels {
	VDD_CX_NONE,
	VDD_CX_MIN,		/* MIN SVS */
	VDD_CX_LOWER,		/* SVS2 */
	VDD_CX_LOW,		/* SVS */
	VDD_CX_LOW_L1,		/* SVSL1 */
	VDD_CX_NOMINAL,		/* NOM */
	VDD_CX_HIGH,		/* TURBO */
	VDD_CX_NUM,
};

/* Need to use the correct VI/VL mappings */
static int vdd_corner[] = {
	RPMH_REGULATOR_LEVEL_OFF,		/* VDD_CX_NONE */
	RPMH_REGULATOR_LEVEL_MIN_SVS,		/* VDD_CX_MIN */
	RPMH_REGULATOR_LEVEL_LOW_SVS,		/* VDD_CX_LOWER */
	RPMH_REGULATOR_LEVEL_SVS,		/* VDD_CX_LOW */
	RPMH_REGULATOR_LEVEL_SVS_L1,		/* VDD_CX_LOW_L1 */
	RPMH_REGULATOR_LEVEL_NOM,		/* VDD_CX_NOMINAL */
	RPMH_REGULATOR_LEVEL_TURBO,		/* VDD_CX_HIGH */
};

#endif
Loading