static void __init mmp2_init_gpio(void)
{
	int i;

	/* enable GPIO clock */
	__raw_writel(APBC_APBCLK | APBC_FNCLK, APBC_MMP2_GPIO);

	/* unmask GPIO edge detection for all 6 banks -- APMASKx */
	for (i = 0; i < 6; i++)
		__raw_writel(0xffffffff, APMASK(i));

	pxa_init_gpio(IRQ_MMP2_GPIO, 0, 167, NULL);
}
Exemple #2
0
static void __init pxa168_init_gpio(void)
{
	int i;

	/* enable GPIO clock */
	__raw_writel(APBC_APBCLK | APBC_FNCLK, APBC_PXA168_GPIO);

	/* unmask GPIO edge detection for all 4 banks - APMASKx */
	for (i = 0; i < 4; i++)
		__raw_writel(0xffffffff, APMASK(i));

	pxa_init_gpio(IRQ_PXA168_GPIOX, 0, 127, NULL);
}
static int pxa168_pm_enter_sleep(struct pxa168_pm_regs *pm_regs)
{
	int i;

	pm_regs->data_pool = (unsigned char *)0xC0000000;

	pxa168_sysbus_save(pm_regs);

	/* should set:modeSaveFlags, areaAddress, flushFunc, psprAddress,
	 * extendedChecksumByteCount */
	pm_regs->pm_data.modeSaveFlags = 0x3f;	/* PM_MODE_SAVE_FLAG_SVC; */
	pm_regs->pm_data.flushFunc = flush_cpu_cache;
	pm_regs->pm_data.areaAddress = (unsigned int)&(pm_regs->pm_data);
	pm_regs->pm_data.extendedChecksumByteCount =
		sizeof(struct pxa168_pm_regs) - sizeof(struct pm_save_data);
	printk("ext size:%d, save size%d\n",
		pm_regs->pm_data.extendedChecksumByteCount,
		sizeof(struct pm_save_data));

	pm_regs->word0 = __raw_readl(pm_regs->data_pool);
	pm_regs->word1 = __raw_readl(pm_regs->data_pool + 4);
	pm_regs->word2 = __raw_readl(pm_regs->data_pool + 8);

	/* Write resume back address to SDRAM */
	__raw_writel(virt_to_phys(pxa168_cpu_resume), pm_regs->data_pool);
	__raw_writel(virt_to_phys(&(pm_regs->pm_data)), pm_regs->data_pool + 4);

	/* Write Hibernate mode indicator to SDRAM */
	if(cpu_is_pxa168_S0())
		__raw_writel(0xa, pm_regs->data_pool + 8);
	else
		__raw_writel(0x55AA55AA, pm_regs->data_pool + 8);

	pxa168_cpu_sleep((unsigned int)&(pm_regs->pm_data),
			virt_to_phys(&(pm_regs->pm_data)));

	/* come back */
	__raw_writel(pm_regs->word0, pm_regs->data_pool);
	__raw_writel(pm_regs->word1, pm_regs->data_pool + 4);
	__raw_writel(pm_regs->word2, pm_regs->data_pool + 8);

	pxa168_sysbus_restore(pm_regs);

	/* unmask GPIO edge detection for all 4 banks - APMASKx */
	for (i = 0; i < 4; i++)
		__raw_writel(0xffffffff, APMASK(i));

	//printk("*** made it back from sleep\n");

	return 0;
}