#include <linux/module.h>
#include <linux/tegra-soc.h>
#include <linux/tegra-fuse.h>
+#include <linux/tegra-pmc.h>
#include "board.h"
#include "iomap.h"
POWER_CELL("pwrdet-hv", (0x1 << 15), (0x1 << 15), 0xFFFFFFFF),
};
+void pwr_detect_bit_write(u32 pwrdet_bit, bool enable)
+{
+ unsigned int pwrdet_mask;
+ pwrdet_mask = pmc_readl(PMC_PWR_DET_ENABLE);
+ switch (pwrdet_bit) {
+ case SDMMC1_PWR_DET:
+ case SDMMC3_PWR_DET:
+ if (!(pwrdet_mask & (BIT(pwrdet_bit)))) {
+ pwrdet_mask |= BIT(pwrdet_bit);
+ pmc_writel(pwrdet_mask, PMC_PWR_DET_ENABLE);
+ }
+ pwrdet_mask = pmc_readl(PMC_PWR_DET_VAL);
+ if ((pwrdet_mask & (BIT(pwrdet_bit))) && !enable) {
+ pwrdet_mask &= ~(BIT(pwrdet_bit));
+ pmc_writel(pwrdet_mask, PMC_PWR_DET_VAL);
+ udelay(100);
+ } else if (enable && !(pwrdet_mask & (BIT(pwrdet_bit)))) {
+ pwrdet_mask |= BIT(pwrdet_bit);
+ pmc_writel(pwrdet_mask, PMC_PWR_DET_VAL);
+ udelay(100);
+ }
+ break;
+ default:
+ return;
+ }
+}
+EXPORT_SYMBOL(pwr_detect_bit_write);
+
static void pwr_detect_reset(u32 pwrdet_mask)
{
pmc_writel(pwrdet_mask, PMC_PWR_DET_ENABLE);
static struct clk *tegra_pclk;
#endif
+#ifndef CONFIG_TEGRA_DYNAMIC_PWRDET
+void pwr_detect_bit_write(u32 pwrdet_bit, bool enable) { }
+EXPORT_SYMBOL(pwr_detect_bit_write);
+#endif
+
#ifdef CONFIG_OF
static struct pmc_pm_data pmc_pm_data;
#endif