brintos

brintos / linux-shallow public Read only

0
0
Text · 5.3 KiB · c545875 Raw
231 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (c) 2010 Google, Inc4 * Copyright (c) 2014 NVIDIA Corporation5 *6 * Author:7 *	Colin Cross <ccross@google.com>8 */9 10#ifndef __SOC_TEGRA_PMC_H__11#define __SOC_TEGRA_PMC_H__12 13#include <linux/reboot.h>14 15#include <soc/tegra/pm.h>16 17struct clk;18struct reset_control;19 20bool tegra_pmc_cpu_is_powered(unsigned int cpuid);21int tegra_pmc_cpu_power_on(unsigned int cpuid);22int tegra_pmc_cpu_remove_clamping(unsigned int cpuid);23 24/*25 * powergate and I/O rail APIs26 */27 28#define TEGRA_POWERGATE_CPU	029#define TEGRA_POWERGATE_3D	130#define TEGRA_POWERGATE_VENC	231#define TEGRA_POWERGATE_PCIE	332#define TEGRA_POWERGATE_VDEC	433#define TEGRA_POWERGATE_L2	534#define TEGRA_POWERGATE_MPE	635#define TEGRA_POWERGATE_HEG	736#define TEGRA_POWERGATE_SATA	837#define TEGRA_POWERGATE_CPU1	938#define TEGRA_POWERGATE_CPU2	1039#define TEGRA_POWERGATE_CPU3	1140#define TEGRA_POWERGATE_CELP	1241#define TEGRA_POWERGATE_3D1	1342#define TEGRA_POWERGATE_CPU0	1443#define TEGRA_POWERGATE_C0NC	1544#define TEGRA_POWERGATE_C1NC	1645#define TEGRA_POWERGATE_SOR	1746#define TEGRA_POWERGATE_DIS	1847#define TEGRA_POWERGATE_DISB	1948#define TEGRA_POWERGATE_XUSBA	2049#define TEGRA_POWERGATE_XUSBB	2150#define TEGRA_POWERGATE_XUSBC	2251#define TEGRA_POWERGATE_VIC	2352#define TEGRA_POWERGATE_IRAM	2453#define TEGRA_POWERGATE_NVDEC	2554#define TEGRA_POWERGATE_NVJPG	2655#define TEGRA_POWERGATE_AUD	2756#define TEGRA_POWERGATE_DFD	2857#define TEGRA_POWERGATE_VE2	2958#define TEGRA_POWERGATE_MAX	TEGRA_POWERGATE_VE259 60#define TEGRA_POWERGATE_3D0	TEGRA_POWERGATE_3D61 62/**63 * enum tegra_io_pad - I/O pad group identifier64 *65 * I/O pins on Tegra SoCs are grouped into so-called I/O pads. Each such pad66 * can be used to control the common voltage signal level and power state of67 * the pins of the given pad.68 */69enum tegra_io_pad {70	TEGRA_IO_PAD_AUDIO,71	TEGRA_IO_PAD_AUDIO_HV,72	TEGRA_IO_PAD_BB,73	TEGRA_IO_PAD_CAM,74	TEGRA_IO_PAD_COMP,75	TEGRA_IO_PAD_CONN,76	TEGRA_IO_PAD_CSIA,77	TEGRA_IO_PAD_CSIB,78	TEGRA_IO_PAD_CSIC,79	TEGRA_IO_PAD_CSID,80	TEGRA_IO_PAD_CSIE,81	TEGRA_IO_PAD_CSIF,82	TEGRA_IO_PAD_CSIG,83	TEGRA_IO_PAD_CSIH,84	TEGRA_IO_PAD_DAP3,85	TEGRA_IO_PAD_DAP5,86	TEGRA_IO_PAD_DBG,87	TEGRA_IO_PAD_DEBUG_NONAO,88	TEGRA_IO_PAD_DMIC,89	TEGRA_IO_PAD_DMIC_HV,90	TEGRA_IO_PAD_DP,91	TEGRA_IO_PAD_DSI,92	TEGRA_IO_PAD_DSIB,93	TEGRA_IO_PAD_DSIC,94	TEGRA_IO_PAD_DSID,95	TEGRA_IO_PAD_EDP,96	TEGRA_IO_PAD_EMMC,97	TEGRA_IO_PAD_EMMC2,98	TEGRA_IO_PAD_EQOS,99	TEGRA_IO_PAD_GPIO,100	TEGRA_IO_PAD_GP_PWM2,101	TEGRA_IO_PAD_GP_PWM3,102	TEGRA_IO_PAD_HDMI,103	TEGRA_IO_PAD_HDMI_DP0,104	TEGRA_IO_PAD_HDMI_DP1,105	TEGRA_IO_PAD_HDMI_DP2,106	TEGRA_IO_PAD_HDMI_DP3,107	TEGRA_IO_PAD_HSIC,108	TEGRA_IO_PAD_HV,109	TEGRA_IO_PAD_LVDS,110	TEGRA_IO_PAD_MIPI_BIAS,111	TEGRA_IO_PAD_NAND,112	TEGRA_IO_PAD_PEX_BIAS,113	TEGRA_IO_PAD_PEX_CLK_BIAS,114	TEGRA_IO_PAD_PEX_CLK1,115	TEGRA_IO_PAD_PEX_CLK2,116	TEGRA_IO_PAD_PEX_CLK3,117	TEGRA_IO_PAD_PEX_CLK_2_BIAS,118	TEGRA_IO_PAD_PEX_CLK_2,119	TEGRA_IO_PAD_PEX_CNTRL,120	TEGRA_IO_PAD_PEX_CTL2,121	TEGRA_IO_PAD_PEX_L0_RST,122	TEGRA_IO_PAD_PEX_L1_RST,123	TEGRA_IO_PAD_PEX_L5_RST,124	TEGRA_IO_PAD_PWR_CTL,125	TEGRA_IO_PAD_SDMMC1,126	TEGRA_IO_PAD_SDMMC1_HV,127	TEGRA_IO_PAD_SDMMC2,128	TEGRA_IO_PAD_SDMMC2_HV,129	TEGRA_IO_PAD_SDMMC3,130	TEGRA_IO_PAD_SDMMC3_HV,131	TEGRA_IO_PAD_SDMMC4,132	TEGRA_IO_PAD_SOC_GPIO10,133	TEGRA_IO_PAD_SOC_GPIO12,134	TEGRA_IO_PAD_SOC_GPIO13,135	TEGRA_IO_PAD_SOC_GPIO53,136	TEGRA_IO_PAD_SPI,137	TEGRA_IO_PAD_SPI_HV,138	TEGRA_IO_PAD_SYS_DDC,139	TEGRA_IO_PAD_UART,140	TEGRA_IO_PAD_UART4,141	TEGRA_IO_PAD_UART5,142	TEGRA_IO_PAD_UFS,143	TEGRA_IO_PAD_USB0,144	TEGRA_IO_PAD_USB1,145	TEGRA_IO_PAD_USB2,146	TEGRA_IO_PAD_USB3,147	TEGRA_IO_PAD_USB_BIAS,148	TEGRA_IO_PAD_AO_HV,149};150 151#ifdef CONFIG_SOC_TEGRA_PMC152int tegra_powergate_power_on(unsigned int id);153int tegra_powergate_power_off(unsigned int id);154int tegra_powergate_remove_clamping(unsigned int id);155 156/* Must be called with clk disabled, and returns with clk enabled */157int tegra_powergate_sequence_power_up(unsigned int id, struct clk *clk,158				      struct reset_control *rst);159 160int tegra_io_pad_power_enable(enum tegra_io_pad id);161int tegra_io_pad_power_disable(enum tegra_io_pad id);162 163void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode);164void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode);165 166bool tegra_pmc_core_domain_state_synced(void);167 168#else169static inline int tegra_powergate_power_on(unsigned int id)170{171	return -ENOSYS;172}173 174static inline int tegra_powergate_power_off(unsigned int id)175{176	return -ENOSYS;177}178 179static inline int tegra_powergate_remove_clamping(unsigned int id)180{181	return -ENOSYS;182}183 184static inline int tegra_powergate_sequence_power_up(unsigned int id,185						    struct clk *clk,186						    struct reset_control *rst)187{188	return -ENOSYS;189}190 191static inline int tegra_io_pad_power_enable(enum tegra_io_pad id)192{193	return -ENOSYS;194}195 196static inline int tegra_io_pad_power_disable(enum tegra_io_pad id)197{198	return -ENOSYS;199}200 201static inline int tegra_io_pad_get_voltage(enum tegra_io_pad id)202{203	return -ENOSYS;204}205 206static inline void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode)207{208}209 210static inline void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode)211{212}213 214static inline bool tegra_pmc_core_domain_state_synced(void)215{216	return false;217}218 219#endif /* CONFIG_SOC_TEGRA_PMC */220 221#if defined(CONFIG_SOC_TEGRA_PMC) && defined(CONFIG_PM_SLEEP)222enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void);223#else224static inline enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void)225{226	return TEGRA_SUSPEND_NONE;227}228#endif229 230#endif /* __SOC_TEGRA_PMC_H__ */231