예제 #1
0
static int s3c_serial_suspend(struct platform_device *dev, pm_message_t state)
{
	struct uart_port *port = s3c_dev_to_port(&dev->dev);

	unsigned int gpadata = 0;
	unsigned int gpaconslp = 0;

	if(port->line == 0) {
		gpadata = __raw_readl(S3C64XX_GPADAT);
		gpadata |= (1<<3);
		__raw_writel(gpadata, S3C64XX_GPADAT);
	} else if(port->line == 1) {
		s3c_gpio_cfgpin(S3C64XX_GPA(7), S3C_GPIO_SFN(1));

		gpaconslp = __raw_readl(S3C64XX_GPACONSLP);
		gpaconslp |= (1 << 14);
		gpaconslp &= ~(1 << 15);
		__raw_writel(gpaconslp, S3C64XX_GPACONSLP);

		gpadata = __raw_readl(S3C64XX_GPADAT);
		gpadata |= (1 << 7);
		__raw_writel(gpadata, S3C64XX_GPADAT);
		
		s3c_gpio_setpull(S3C64XX_GPA(7), S3C_GPIO_PULL_NONE);
	}

	s3c6410_pm_do_save(uart_save + port->line * SAVE_UART_PORT, SAVE_UART_PORT);

	if (port)
		uart_suspend_port(&s3c_uart_drv, port);

	return 0;
}
예제 #2
0
static int s3c_serial_resume(struct platform_device *dev)
{
	struct uart_port *port = s3c_dev_to_port(&dev->dev);
	struct s3c_uart_port *ourport = to_ourport(port);

	unsigned int gpadata = 0;

	if (port) {
		clk_enable(ourport->clk);
		
		s3c_serial_resetport(port, s3c_port_to_cfg(port));
		clk_disable(ourport->clk);

		s3c6410_pm_do_restore(uart_save + port->line * SAVE_UART_PORT, SAVE_UART_PORT);

		uart_resume_port(&s3c_uart_drv, port);
	}

	if (port->line == 0) {
		gpadata = __raw_readl(S3C64XX_GPADAT);
		gpadata &= ~(1<<3);
		__raw_writel(gpadata, S3C64XX_GPADAT);
	} else if(port->line == 1) {
		s3c_gpio_cfgpin(S3C64XX_GPA(7), S3C_GPIO_SFN(1));

		gpadata = __raw_readl(S3C64XX_GPADAT);
		gpadata &= ~(1<<7);
		__raw_writel(gpadata, S3C64XX_GPADAT);
		
		s3c_gpio_setpull(S3C64XX_GPA(7), S3C_GPIO_PULL_NONE);

		s3c_gpio_cfgpin(S3C64XX_GPA(7), S3C_GPIO_SFN(2));
	}

	return 0;
}
예제 #3
0
	.set_config	= s3c_gpio_setcfg_s3c64xx_4bit,
	.set_pull	= s3c_gpio_setpull_updown,
	.get_pull	= s3c_gpio_getpull_updown,
};

int s3c64xx_gpio2int_gpm(struct gpio_chip *chip, unsigned pin)
{
	return pin < 5 ? IRQ_EINT(23) + pin : -ENXIO;
}

static struct s3c_gpio_chip gpio_4bit[] = {
	{
		.base	= S3C64XX_GPA_BASE,
		.config	= &gpio_4bit_cfg_eint0111,
		.chip	= {
			.base	= S3C64XX_GPA(0),
			.ngpio	= S3C64XX_GPIO_A_NR,
			.label	= "GPA",
		},
	}, {
		.base	= S3C64XX_GPB_BASE,
		.config	= &gpio_4bit_cfg_eint0111,
		.chip	= {
			.base	= S3C64XX_GPB(0),
			.ngpio	= S3C64XX_GPIO_B_NR,
			.label	= "GPB",
		},
	}, {
		.base	= S3C64XX_GPC_BASE,
		.config	= &gpio_4bit_cfg_eint0111,
		.chip	= {
예제 #4
0
void s3c_setup_uart_cfg_gpio(unsigned char hwport, struct uart_port* port)
{
	switch (hwport)
	{
	case 0:
		s3c_gpio_cfgpin(S3C64XX_GPA(0),S3C64XX_GPA0_UART_RXD0);
		s3c_gpio_setpull(S3C64XX_GPA(0), S3C_GPIO_PULL_DOWN);
		s3c_gpio_cfgpin(S3C64XX_GPA(1),S3C64XX_GPA1_UART_TXD0);
		s3c_gpio_setpull(S3C64XX_GPA(1), S3C_GPIO_PULL_DOWN);
		s3c_gpio_cfgpin(S3C64XX_GPA(2),S3C_GPIO_INPUT);
		s3c_gpio_setpull(S3C64XX_GPA(2), S3C_GPIO_PULL_DOWN);
		s3c_gpio_cfgpin(S3C64XX_GPA(3),S3C_GPIO_OUTPUT);
		s3c_gpio_setpull(S3C64XX_GPA(3), S3C_GPIO_PULL_DOWN);
		wr_regb(port, S3C_UMSTAT, 0);
		break;
	case 1:
		s3c_gpio_cfgpin(S3C64XX_GPA(4),S3C64XX_GPA4_UART_RXD1);
		s3c_gpio_setpull(S3C64XX_GPA(4), S3C_GPIO_PULL_DOWN);
		s3c_gpio_cfgpin(S3C64XX_GPA(5),S3C64XX_GPA5_UART_TXD1);
		s3c_gpio_setpull(S3C64XX_GPA(5), S3C_GPIO_PULL_DOWN);
		//s3c_gpio_cfgpin(S3C64XX_GPA(6),S3C64XX_GPA6_UART_nCTS1);
		s3c_gpio_setpull(S3C64XX_GPA(6), S3C_GPIO_PULL_DOWN);
		//s3c_gpio_cfgpin(S3C64XX_GPA(7),S3C64XX_GPA7_UART_nRTS1);
		s3c_gpio_setpull(S3C64XX_GPA(7), S3C_GPIO_PULL_DOWN);
		wr_regb(port, S3C_UMSTAT, 0);
		break;
	case 2:
		s3c_gpio_cfgpin(S3C64XX_GPB(0),S3C64XX_GPB0_UART_RXD2);
		s3c_gpio_setpull(S3C64XX_GPB(0), S3C_GPIO_PULL_DOWN);
		s3c_gpio_cfgpin(S3C64XX_GPB(1),S3C64XX_GPB1_UART_TXD2);
		s3c_gpio_setpull(S3C64XX_GPB(1), S3C_GPIO_PULL_DOWN);
		break;
	case 3:
		printk("UART 3 is used as I2C bus in M8\n");
		break;
	default:
		printk("Unknown UART port ID\n");
		break;
	}
}