211 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* arch/arm/mach-msm/clock.h
 | |
|  *
 | |
|  * Copyright (C) 2007 Google, Inc.
 | |
|  * Copyright (c) 2007 QUALCOMM Incorporated
 | |
|  *
 | |
|  * This software is licensed under the terms of the GNU General Public
 | |
|  * License version 2, as published by the Free Software Foundation, and
 | |
|  * may be copied, distributed, and modified under those terms.
 | |
|  *
 | |
|  * 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 __ARCH_ARM_MACH_MSM_CLOCK_H
 | |
| #define __ARCH_ARM_MACH_MSM_CLOCK_H
 | |
| 
 | |
| #include <linux/list.h>
 | |
| #include <mach/clk.h>
 | |
| #if defined (CONFIG_ARCH_MSM7X30)
 | |
| #include "clock-pcom.h"
 | |
| #include "clock-7x30.h"
 | |
| #endif
 | |
| 
 | |
| #define CLKFLAG_USE_MAX_TO_SET		(0x00000001)
 | |
| #define CLKFLAG_AUTO_OFF		(0x00000002)
 | |
| #define CLKFLAG_USE_MIN_TO_SET		(0x00000004)
 | |
| #define CLKFLAG_SHARED			(0x00000008)
 | |
| #define CLKFLAG_HANDLE			(0x00000010)
 | |
| 
 | |
| #define CLKFLAG_ARCH_MSM7X00A		(0x00010000)
 | |
| #define CLKFLAG_ARCH_QSD8X50		(0x00020000)
 | |
| #define CLKFLAG_ARCH_ALL		(0xffff0000)
 | |
| 
 | |
| struct clk_ops {
 | |
| 	int (*enable)(unsigned id);
 | |
| 	void (*disable)(unsigned id);
 | |
| 	void (*auto_off)(unsigned id);
 | |
| 	int (*reset)(unsigned id, enum clk_reset_action action);
 | |
| 	int (*set_rate)(unsigned id, unsigned rate);
 | |
| 	int (*set_min_rate)(unsigned id, unsigned rate);
 | |
| 	int (*set_max_rate)(unsigned id, unsigned rate);
 | |
| 	int (*set_flags)(unsigned id, unsigned flags);
 | |
| 	unsigned (*get_rate)(unsigned id);
 | |
| 	unsigned (*is_enabled)(unsigned id);
 | |
| 	long (*round_rate)(unsigned id, unsigned rate);
 | |
| };
 | |
| 
 | |
| struct clk {
 | |
| 	uint32_t id;
 | |
| 	uint32_t remote_id;
 | |
| 	uint32_t count;
 | |
| 	uint32_t flags;
 | |
| 	const char *name;
 | |
| 	struct clk_ops *ops;
 | |
| 	struct hlist_node list;
 | |
| 	struct device *dev;
 | |
| 	struct hlist_head handles;
 | |
| };
 | |
| 
 | |
| struct clk_handle {
 | |
| 	struct clk clk;
 | |
| 	struct clk *source;
 | |
| 	unsigned long rate;
 | |
| };
 | |
| 
 | |
| #define A11S_CLK_CNTL_ADDR		(MSM_CSR_BASE + 0x100)
 | |
| #define A11S_CLK_SEL_ADDR		(MSM_CSR_BASE + 0x104)
 | |
| #define A11S_VDD_SVS_PLEVEL_ADDR	(MSM_CSR_BASE + 0x124)
 | |
| 
 | |
| /* clock IDs used by the modem processor */
 | |
| 
 | |
| #define ACPU_CLK		0   /* Applications processor clock */
 | |
| #define ADM_CLK			1   /* Applications data mover clock */
 | |
| #define ADSP_CLK		2   /* ADSP clock */
 | |
| #define EBI1_CLK		3   /* External bus interface 1 clock */
 | |
| #define EBI2_CLK		4   /* External bus interface 2 clock */
 | |
| #define ECODEC_CLK		5   /* External CODEC clock */
 | |
| #define EMDH_CLK		6   /* External MDDI host clock */
 | |
| #define GP_CLK			7   /* General purpose clock */
 | |
| #define GRP_CLK			8   /* Graphics clock */
 | |
| #define I2C_CLK			9   /* I2C clock */
 | |
| #define ICODEC_RX_CLK		10  /* Internal CODEX RX clock */
 | |
| #define ICODEC_TX_CLK		11  /* Internal CODEX TX clock */
 | |
| #define IMEM_CLK		12  /* Internal graphics memory clock */
 | |
| #define MDC_CLK			13  /* MDDI client clock */
 | |
| #define MDP_CLK			14  /* Mobile display processor clock */
 | |
| #define PBUS_CLK		15  /* Peripheral bus clock */
 | |
| #define PCM_CLK			16  /* PCM clock */
 | |
| #define PMDH_CLK		17  /* Primary MDDI host clock */
 | |
| #define SDAC_CLK		18  /* Stereo DAC clock */
 | |
| #define SDC1_CLK		19  /* Secure Digital Card clocks */
 | |
| #define SDC1_PCLK		20
 | |
| #define SDC2_CLK		21
 | |
| #define SDC2_PCLK		22
 | |
| #define SDC3_CLK		23
 | |
| #define SDC3_PCLK		24
 | |
| #define SDC4_CLK		25
 | |
| #define SDC4_PCLK		26
 | |
| #define TSIF_CLK		27  /* Transport Stream Interface clocks */
 | |
| #define TSIF_REF_CLK		28
 | |
| #define TV_DAC_CLK		29  /* TV clocks */
 | |
| #define TV_ENC_CLK		30
 | |
| #define UART1_CLK		31  /* UART clocks */
 | |
| #define UART2_CLK		32
 | |
| #define UART3_CLK		33
 | |
| #define UART1DM_CLK		34
 | |
| #define UART2DM_CLK		35
 | |
| #define USB_HS_CLK		36  /* High speed USB core clock */
 | |
| #define USB_HS_PCLK		37  /* High speed USB pbus clock */
 | |
| #define USB_OTG_CLK		38  /* Full speed USB clock */
 | |
| #define VDC_CLK			39  /* Video controller clock */
 | |
| #if defined(CONFIG_ARCH_QSD8X50) || defined(CONFIG_ARCH_MSM7227) || defined(CONFIG_ARCH_MSM7X00A) || defined(CONFIG_ARCH_MSM7X30)
 | |
| #define VFE_MDC_CLK		40  /* VFE MDDI client clock */
 | |
| #define VFE_CLK			41  /* Camera / Video Front End clock */
 | |
| #else
 | |
| /* older AMSS versions had these flipped */
 | |
| #define VFE_MDC_CLK		41  /* VFE MDDI client clock */
 | |
| #define VFE_CLK			40  /* Camera / Video Front End clock */
 | |
| #endif
 | |
| #define LCDC_PCLK		42
 | |
| #define LCDC_PAD_PCLK		43
 | |
| #define MDP_VSYNC_CLK		44
 | |
| #define SPI_CLK			45
 | |
| #define VFE_AXI_CLK		46
 | |
| #define USB_HS2_CLK		47  /* High speed USB 2 core clock */
 | |
| #define USB_HS2_PCLK		48  /* High speed USB 2 pbus clock */
 | |
| #define USB_HS3_CLK		49  /* High speed USB 3 core clock */
 | |
| #define USB_HS3_PCLK		50  /* High speed USB 3 pbus clock */
 | |
| #define GRP_PCLK		51  /* Graphics pbus clock */
 | |
| #define USB_PHY_CLK		52  /* USB PHY clock */
 | |
| #define USB_HS_CORE_CLK		53  /* High speed USB 1 core clock */
 | |
| #define USB_HS2_CORE_CLK	54  /* High speed USB 2 core clock */
 | |
| #define USB_HS3_CORE_CLK	55  /* High speed USB 3 core clock */
 | |
| #define CAM_MCLK_CLK		56
 | |
| #define CAMIF_PAD_PCLK		57
 | |
| #define GRP_2D_CLK		58
 | |
| #define GRP_2D_PCLK		59
 | |
| #define I2S_CLK			60
 | |
| #define JPEG_CLK		61
 | |
| #define JPEG_PCLK		62
 | |
| #define LPA_CODEC_CLK		63
 | |
| #define LPA_CORE_CLK		64
 | |
| #define LPA_PCLK		65
 | |
| #define MDC_IO_CLK		66
 | |
| #define MDC_PCLK		67
 | |
| #define MFC_CLK			68
 | |
| #define MFC_DIV2_CLK		69
 | |
| #define MFC_PCLK		70
 | |
| #define QUP_I2C_CLK		71
 | |
| #define ROTATOR_IMEM_CLK	72
 | |
| #define ROTATOR_PCLK		73
 | |
| #define VFE_CAMIF_CLK		74
 | |
| #define VFE_PCLK		75
 | |
| #define VPE_CLK			76
 | |
| #define I2C_2_CLK		77
 | |
| #define MI2S_CODEC_RX_SCLK	78
 | |
| #define MI2S_CODEC_RX_MCLK	79
 | |
| #define MI2S_CODEC_TX_SCLK	80
 | |
| #define MI2S_CODEC_TX_MCLK	81
 | |
| #define PMDH_PCLK		82
 | |
| #define EMDH_PCLK		83
 | |
| #define SPI_PCLK		84
 | |
| #define TSIF_PCLK		85
 | |
| #define MDP_PCLK		86
 | |
| #define SDAC_MCLK		87
 | |
| #define MI2S_HDMI_CLK		88
 | |
| #define MI2S_HDMI_MCLK		89
 | |
| #define AXI_ROTATOR_CLK	90
 | |
| #define HDMI_CLK		91
 | |
| #define CSI0_CLK		92
 | |
| #define CSI0_VFE_CLK		93
 | |
| #define CSI0_PCLK		94
 | |
| #define CSI1_CLK		95
 | |
| #define CSI1_VFE_CLK		96
 | |
| #define CSI1_PCLK		97
 | |
| #define GSBI_CLK		98
 | |
| #define GSBI_PCLK		99
 | |
| #define NR_CLKS			100
 | |
| 
 | |
| extern struct clk msm_clocks[];
 | |
| 
 | |
| void clk_enter_sleep(int from_idle);
 | |
| void clk_exit_sleep(void);
 | |
| 
 | |
| #if defined (CONFIG_ARCH_MSM7X30)
 | |
| enum {
 | |
| 	PLL_0 = 0,
 | |
| 	PLL_1,
 | |
| 	PLL_2,
 | |
| 	PLL_3,
 | |
| 	PLL_4,
 | |
| 	PLL_5,
 | |
| 	PLL_6,
 | |
| 	NUM_PLL
 | |
| };
 | |
| 
 | |
| enum clkvote_client {
 | |
| 	CLKVOTE_ACPUCLK = 0,
 | |
| 	CLKVOTE_PMQOS,
 | |
| 	CLKVOTE_MAX,
 | |
| };
 | |
| 
 | |
| unsigned long clk_get_max_axi_khz(void);
 | |
| #endif
 | |
| 
 | |
| #endif
 | |
| 
 |