/** * Fusée pad control code * ~ktemkin */ #ifndef __FUSEE_PADCTL_H__ #define __FUSEE_PADCTL_H__ #include "utils.h" /** * Registers in the Misc Pad control region */ struct tegra_padctl { /* TODO: support registers before? */ uint32_t sdmmc1_control; uint32_t sdmmc3_control; uint32_t sdmmc2_control; uint32_t sdmmc4_control; /* TODO: support registers after? */ uint8_t _todo[656]; uint32_t vgpio_gpio_mux_sel; }; /** * Masks for Pad Control registers */ enum tegra_padctl_masks { /* SDMMC1 */ PADCTL_SDMMC1_DEEP_LOOPBACK = (1 << 0), /* SDMMC3 */ PADCTL_SDMMC3_DEEP_LOOPBACK = (1 << 0), /* SDMMC2 */ PADCTL_SDMMC2_ENABLE_DATA_IN = (0xFF << 8), PADCTL_SDMMC2_ENABLE_CLK_IN = (0x3 << 4), PADCTL_SDMMC2_DEEP_LOOPBACK = (1 << 0), /* SDMMC4 */ PADCTL_SDMMC4_ENABLE_DATA_IN = (0xFF << 8), PADCTL_SDMMC4_ENABLE_CLK_IN = (0x3 << 4), PADCTL_SDMMC4_DEEP_LOOPBACK = (1 << 0), /* VGPIO/GPIO */ PADCTL_SDMMC1_CD_SOURCE = (1 << 0), PADCTL_SDMMC1_WP_SOURCE = (1 << 1), PADCTL_SDMMC3_CD_SOURCE = (1 << 2), PADCTL_SDMMC3_WP_SOURCE = (1 << 3), }; /** * Utility function that grabs the Tegra PADCTL registers. */ static inline struct tegra_padctl *padctl_get_regs(void) { return (struct tegra_padctl *)0x700008d4; } #endif