Пример #1
0
static void omap3_core_save_context(void)
{
	u32 control_padconf_off;

	/* Save the padconf registers */
	control_padconf_off = omap_ctrl_readl(OMAP343X_CONTROL_PADCONF_OFF);
	control_padconf_off |= START_PADCONF_SAVE;
	omap_ctrl_writel(control_padconf_off, OMAP343X_CONTROL_PADCONF_OFF);
	/* wait for the save to complete */
	while (!(omap_ctrl_readl(OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS)
			& PADCONF_SAVE_DONE))
		udelay(1);

	/*
	 * Force write last pad into memory, as this can fail in some
	 * cases according to erratas 1.157, 1.185
	 */
	omap_ctrl_writel(omap_ctrl_readl(OMAP343X_PADCONF_ETK_D14),
		OMAP343X_CONTROL_MEM_WKUP + 0x2a0);

	/*
	 * override the value saved in scratchpad memory, errata i583
	 */
	if (omap_rev() <= OMAP3630_REV_ES1_1)
		omap_ctrl_writew(0x1f, OMAP343X_CONTROL_MEM_WKUP +
			OMAP3_CONTROL_PADCONF_SDRC_CKE1_OFFSET);

	/* Save the Interrupt controller context */
	omap_intc_save_context();
	/* Save the GPMC context */
	omap3_gpmc_save_context();
	/* Save the system control module context, padconf already save above*/
	omap3_control_save_context();
}
Пример #2
0
/**
 * omap3_ctrl_setup_d2d_padconf - setup stacked modem pads for idle
 *
 * Sets up the pads controlling the stacked modem in such way that the
 * device can enter idle.
 */
static void __init omap3_ctrl_setup_d2d_padconf(void)
{
	u16 mask, padconf;

	/*
	 * In a stand alone OMAP3430 where there is not a stacked
	 * modem for the D2D Idle Ack and D2D MStandby must be pulled
	 * high. S CONTROL_PADCONF_SAD2D_IDLEACK and
	 * CONTROL_PADCONF_SAD2D_MSTDBY to have a pull up.
	 */
	mask = (1 << 4) | (1 << 3); /* pull-up, enabled */
	padconf = omap_ctrl_readw(OMAP3_PADCONF_SAD2D_MSTANDBY);
	padconf |= mask;
	omap_ctrl_writew(padconf, OMAP3_PADCONF_SAD2D_MSTANDBY);

	padconf = omap_ctrl_readw(OMAP3_PADCONF_SAD2D_IDLEACK);
	padconf |= mask;
	omap_ctrl_writew(padconf, OMAP3_PADCONF_SAD2D_IDLEACK);
}
Пример #3
0
static void omap3_core_restore_context(void)
{
	if (omap_rev() <= OMAP3630_REV_ES1_1) {
		/*
		 * errata i583 workaround, safe transition sequence for CKE1:
		 */
		omap_ctrl_writew(0x1b, OMAP2_CONTROL_PADCONFS +
			OMAP3_CONTROL_PADCONF_SDRC_CKE1_OFFSET);
		omap_ctrl_writew(0x19, OMAP2_CONTROL_PADCONFS +
			OMAP3_CONTROL_PADCONF_SDRC_CKE1_OFFSET);
		omap_ctrl_writew(0x18, OMAP2_CONTROL_PADCONFS +
			OMAP3_CONTROL_PADCONF_SDRC_CKE1_OFFSET);
	}
	/* Restore the control module context, padconf restored by h/w */
	omap3_control_restore_context();
	/* Restore the GPMC context */
	omap3_gpmc_restore_context();
	/* Restore the interrupt controller context */
	omap_intc_restore_context();
}
Пример #4
0
static int __init_or_module omap34xx_cfg_reg(const struct pin_config *cfg)
{
	static DEFINE_SPINLOCK(mux_spin_lock);
	unsigned long flags;
	u16 reg = 0;

	spin_lock_irqsave(&mux_spin_lock, flags);
	reg |= cfg->mux_val;
	omap2_cfg_debug(cfg, reg);
	omap_ctrl_writew(reg, cfg->mux_reg);
	spin_unlock_irqrestore(&mux_spin_lock, flags);

	return 0;
}
Пример #5
0
void omap_watchdog_reset(void)
{
	u32 base = 0x48314000;
	u32 cm_base_iclk = 0x48004C00;
	u32 cm_base_fclk = 0x48004C10;
	
	u32 regval;
	
    omap_ctrl_writew(0x118, 0x0A08); // change pullup just before warm-reset

	regval = omap_readl(cm_base_iclk);
	regval |=  0x20;
	omap_writel(regval, cm_base_iclk);
	
	regval = omap_readl(cm_base_fclk);
	regval |=  0x20;
	omap_writel(regval, cm_base_fclk);

	/* initialize prescaler */
	while (omap_readl(base + OMAP_WATCHDOG_WPS) & 0x01)
		cpu_relax();
	omap_writel((0 << 5) | (PTV << 2), base + OMAP_WATCHDOG_CNTRL);
	while (omap_readl(base + OMAP_WATCHDOG_WPS) & 0x01)
		cpu_relax();

	while (omap_readl(base + OMAP_WATCHDOG_WPS) & 0x04)
		cpu_relax();

	omap_writel((0xFFFE88FF), base + OMAP_WATCHDOG_CRR); // 0xFFFE88FF: 3secs, 0xFFFD8EFF: 5secs, 0xFFFF82FF: 1sec

	while (omap_readl(base + OMAP_WATCHDOG_WPS) & 0x04)
		cpu_relax();

	udelay(20);
	omap_writel(0xBBBB, base + OMAP_WATCHDOG_SPR );
	while (omap_readl(base + OMAP_WATCHDOG_WPS) & 0x10)
		cpu_relax();

	omap_writel(0x4444, base + OMAP_WATCHDOG_SPR );
	
	return;
}
void __init mapphone_mmcprobe_init(void)
{
	int i;

	printk(KERN_INFO "mapphone_mmcprobe: MMC subsystem ganked for debug\n");

	omap_ctrl_writew(0x04, 0x144); /* MMC1_CLK/GPIO120 */
	omap_ctrl_writew(0x04, 0x146); /* MMC1_CMD/GPIO121 */
	omap_ctrl_writew(0x04, 0x148); /* MMC1_DAT0/GPIO122 */
	omap_ctrl_writew(0x04, 0x14a); /* MMC1_DAT1/GPIO123 */
	omap_ctrl_writew(0x04, 0x14c); /* MMC1_DAT2/GPIO124 */
	omap_ctrl_writew(0x04, 0x14e); /* MMC1_DAT3/GPIO125 */

	gpio_request(120, "mmcprobe-ch1");
	gpio_request(121, "mmcprobe-ch2");
	gpio_request(122, "mmcprobe-ch3");
	gpio_request(123, "mmcprobe-ch4");
	gpio_request(124, "mmcprobe-ch5");
	gpio_request(125, "mmcprobe-ch6");

	for (i = 0; i < 5; i++)
		mapphone_mmcprobe_strobe(i, 1 + i);
}