soc/tegra: pmc: Add I/O pad voltage support
I/O pins on Tegra SoCs are grouped into so-called I/O pads. Each such pad can be used to control the common voltage signal level and power state of the pins in the given pad. I/O pads can be powered down even if the system is active, which can save power from that I/O interface. For SoC generations prior to Tegra124 the I/O pad voltage is automatically detected and hence the system software doesn't need to configure it. However, starting with Tegra210 the detection logic has been removed, so explicit control of the I/O pad voltage by system software is required. Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:

committed by
Thierry Reding

parent
95b780b3d7
commit
21b4991051
@@ -76,37 +76,73 @@ int tegra_pmc_cpu_remove_clamping(unsigned int cpuid);
|
||||
|
||||
#define TEGRA_POWERGATE_3D0 TEGRA_POWERGATE_3D
|
||||
|
||||
#define TEGRA_IO_RAIL_CSIA 0
|
||||
#define TEGRA_IO_RAIL_CSIB 1
|
||||
#define TEGRA_IO_RAIL_DSI 2
|
||||
#define TEGRA_IO_RAIL_MIPI_BIAS 3
|
||||
#define TEGRA_IO_RAIL_PEX_BIAS 4
|
||||
#define TEGRA_IO_RAIL_PEX_CLK1 5
|
||||
#define TEGRA_IO_RAIL_PEX_CLK2 6
|
||||
#define TEGRA_IO_RAIL_USB0 9
|
||||
#define TEGRA_IO_RAIL_USB1 10
|
||||
#define TEGRA_IO_RAIL_USB2 11
|
||||
#define TEGRA_IO_RAIL_USB_BIAS 12
|
||||
#define TEGRA_IO_RAIL_NAND 13
|
||||
#define TEGRA_IO_RAIL_UART 14
|
||||
#define TEGRA_IO_RAIL_BB 15
|
||||
#define TEGRA_IO_RAIL_AUDIO 17
|
||||
#define TEGRA_IO_RAIL_HSIC 19
|
||||
#define TEGRA_IO_RAIL_COMP 22
|
||||
#define TEGRA_IO_RAIL_HDMI 28
|
||||
#define TEGRA_IO_RAIL_PEX_CNTRL 32
|
||||
#define TEGRA_IO_RAIL_SDMMC1 33
|
||||
#define TEGRA_IO_RAIL_SDMMC3 34
|
||||
#define TEGRA_IO_RAIL_SDMMC4 35
|
||||
#define TEGRA_IO_RAIL_CAM 36
|
||||
#define TEGRA_IO_RAIL_RES 37
|
||||
#define TEGRA_IO_RAIL_HV 38
|
||||
#define TEGRA_IO_RAIL_DSIB 39
|
||||
#define TEGRA_IO_RAIL_DSIC 40
|
||||
#define TEGRA_IO_RAIL_DSID 41
|
||||
#define TEGRA_IO_RAIL_CSIE 44
|
||||
#define TEGRA_IO_RAIL_LVDS 57
|
||||
#define TEGRA_IO_RAIL_SYS_DDC 58
|
||||
/**
|
||||
* enum tegra_io_pad - I/O pad group identifier
|
||||
*
|
||||
* I/O pins on Tegra SoCs are grouped into so-called I/O pads. Each such pad
|
||||
* can be used to control the common voltage signal level and power state of
|
||||
* the pins of the given pad.
|
||||
*/
|
||||
enum tegra_io_pad {
|
||||
TEGRA_IO_PAD_AUDIO,
|
||||
TEGRA_IO_PAD_AUDIO_HV,
|
||||
TEGRA_IO_PAD_BB,
|
||||
TEGRA_IO_PAD_CAM,
|
||||
TEGRA_IO_PAD_COMP,
|
||||
TEGRA_IO_PAD_CSIA,
|
||||
TEGRA_IO_PAD_CSIB,
|
||||
TEGRA_IO_PAD_CSIC,
|
||||
TEGRA_IO_PAD_CSID,
|
||||
TEGRA_IO_PAD_CSIE,
|
||||
TEGRA_IO_PAD_CSIF,
|
||||
TEGRA_IO_PAD_DBG,
|
||||
TEGRA_IO_PAD_DEBUG_NONAO,
|
||||
TEGRA_IO_PAD_DMIC,
|
||||
TEGRA_IO_PAD_DP,
|
||||
TEGRA_IO_PAD_DSI,
|
||||
TEGRA_IO_PAD_DSIB,
|
||||
TEGRA_IO_PAD_DSIC,
|
||||
TEGRA_IO_PAD_DSID,
|
||||
TEGRA_IO_PAD_EMMC,
|
||||
TEGRA_IO_PAD_EMMC2,
|
||||
TEGRA_IO_PAD_GPIO,
|
||||
TEGRA_IO_PAD_HDMI,
|
||||
TEGRA_IO_PAD_HSIC,
|
||||
TEGRA_IO_PAD_HV,
|
||||
TEGRA_IO_PAD_LVDS,
|
||||
TEGRA_IO_PAD_MIPI_BIAS,
|
||||
TEGRA_IO_PAD_NAND,
|
||||
TEGRA_IO_PAD_PEX_BIAS,
|
||||
TEGRA_IO_PAD_PEX_CLK1,
|
||||
TEGRA_IO_PAD_PEX_CLK2,
|
||||
TEGRA_IO_PAD_PEX_CNTRL,
|
||||
TEGRA_IO_PAD_SDMMC1,
|
||||
TEGRA_IO_PAD_SDMMC3,
|
||||
TEGRA_IO_PAD_SDMMC4,
|
||||
TEGRA_IO_PAD_SPI,
|
||||
TEGRA_IO_PAD_SPI_HV,
|
||||
TEGRA_IO_PAD_SYS_DDC,
|
||||
TEGRA_IO_PAD_UART,
|
||||
TEGRA_IO_PAD_USB0,
|
||||
TEGRA_IO_PAD_USB1,
|
||||
TEGRA_IO_PAD_USB2,
|
||||
TEGRA_IO_PAD_USB3,
|
||||
TEGRA_IO_PAD_USB_BIAS,
|
||||
};
|
||||
|
||||
/* deprecated, use TEGRA_IO_PAD_{HDMI,LVDS} instead */
|
||||
#define TEGRA_IO_RAIL_HDMI TEGRA_IO_PAD_HDMI
|
||||
#define TEGRA_IO_RAIL_LVDS TEGRA_IO_PAD_LVDS
|
||||
|
||||
/**
|
||||
* enum tegra_io_pad_voltage - voltage level of the I/O pad's source rail
|
||||
* @TEGRA_IO_PAD_1800000UV: 1.8 V
|
||||
* @TEGRA_IO_PAD_3300000UV: 3.3 V
|
||||
*/
|
||||
enum tegra_io_pad_voltage {
|
||||
TEGRA_IO_PAD_1800000UV,
|
||||
TEGRA_IO_PAD_3300000UV,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ARCH_TEGRA
|
||||
int tegra_powergate_is_powered(unsigned int id);
|
||||
@@ -118,6 +154,13 @@ int tegra_powergate_remove_clamping(unsigned int id);
|
||||
int tegra_powergate_sequence_power_up(unsigned int id, struct clk *clk,
|
||||
struct reset_control *rst);
|
||||
|
||||
int tegra_io_pad_power_enable(enum tegra_io_pad id);
|
||||
int tegra_io_pad_power_disable(enum tegra_io_pad id);
|
||||
int tegra_io_pad_set_voltage(enum tegra_io_pad id,
|
||||
enum tegra_io_pad_voltage voltage);
|
||||
int tegra_io_pad_get_voltage(enum tegra_io_pad id);
|
||||
|
||||
/* deprecated, use tegra_io_pad_power_{enable,disable}() instead */
|
||||
int tegra_io_rail_power_on(unsigned int id);
|
||||
int tegra_io_rail_power_off(unsigned int id);
|
||||
#else
|
||||
@@ -148,6 +191,27 @@ static inline int tegra_powergate_sequence_power_up(unsigned int id,
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int tegra_io_pad_power_enable(enum tegra_io_pad id)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int tegra_io_pad_power_disable(enum tegra_io_pad id)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int tegra_io_pad_set_voltage(enum tegra_io_pad id,
|
||||
enum tegra_io_pad_voltage voltage)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int tegra_io_pad_get_voltage(enum tegra_io_pad id)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int tegra_io_rail_power_on(unsigned int id)
|
||||
{
|
||||
return -ENOSYS;
|
||||
|
Reference in New Issue
Block a user