Ejemplo n.º 1
0
static int __init
s3c6410_leds_init(void)
{
	if (machine_is_smdk6410())
		leds_event = smdk6400_leds_event;
	else
		return -1;

	if (machine_is_smdk6410())
	{
		/*GPN12~15 used for LED*/
		/*Set GPN12~15 to output mode */
		s3c_gpio_cfgpin(S3C_GPN12, S3C_GPN12_OUTP);
		if(s3c_gpio_getcfg(S3C_GPN12) == 0)
		{
			printk(KERN_WARNING "LED: can't set GPN12 output mode\n");
		}

		s3c_gpio_cfgpin(S3C_GPN13, S3C_GPN13_OUTP);
		if(s3c_gpio_getcfg(S3C_GPN13) == 0)
		{
			printk(KERN_WARNING "LED: can't set GPN13 output mode\n");
		}

		s3c_gpio_cfgpin(S3C_GPN14, S3C_GPN14_OUTP);
		if(s3c_gpio_getcfg(S3C_GPN14) == 0)
		{
			printk(KERN_WARNING "LED: can't set GPN14 output mode\n");
		}
		
		s3c_gpio_cfgpin(S3C_GPN15, S3C_GPN15_OUTP);
		if(s3c_gpio_getcfg(S3C_GPN15) == 0)
		{
			printk(KERN_WARNING "LED: can't set GPN15 output mode\n");
		}
		
	}

	/* Get irqs */
	set_irq_type(IRQ_EINT9, IRQT_FALLING);
	s3c_gpio_pullup(S3C_GPN9, 0x0);
	if (request_irq(IRQ_EINT9, eint9_switch, SA_TRIGGER_FALLING, "EINT9", NULL)) {
		printk(KERN_ERR "leds.c: Could not allocate EINT9 !\n");
		return -EIO;
	}


	leds_event(led_start);
	return 0;
}
Ejemplo n.º 2
0
static void s3c_pm_check_resume_pin(unsigned int pin, unsigned int irqoffs)
{
	unsigned long irqstate;
	unsigned long pinstate;
	int irq = gpio_to_irq(pin);

	if (irqoffs < 4)
		irqstate = s3c_irqwake_intmask & (1L<<irqoffs);
	else
		irqstate = s3c_irqwake_eintmask & (1L<<irqoffs);

	pinstate = s3c_gpio_getcfg(pin);

	if (!irqstate) {
		if (pinstate == S3C2410_GPIO_IRQ)
			S3C_PMDBG("Leaving IRQ %d (pin %d) as is\n", irq, pin);
	} else {
		if (pinstate == S3C2410_GPIO_IRQ) {
			S3C_PMDBG("Disabling IRQ %d (pin %d)\n", irq, pin);
			s3c_gpio_cfgpin(pin, S3C2410_GPIO_INPUT);
		}
	}
}
/* Define this function in accordance with the specification of each BB vendor */
static void check_gpio_status(unsigned char phonestate)
{
	u32 i, gpio;
	u32 cfg, val, pud;

	u8 temp_io = 0, temp_pdpu = 0, temp_lh = 0;

	pr_info("[GPIO_DVS][%s] state : %s\n", __func__,
		(phonestate == PHONE_INIT) ? "init" : "sleep");

	for (i = 0; i < AP_GPIO_COUNT; i++) {
		gpio = exynos3_gpio_num[i];

		if (phonestate == PHONE_INIT ||
			((gpio >= EXYNOS3_GPX0(0)) &&
				(gpio <= EXYNOS3_GPX3(7)))) {

			cfg = s3c_gpio_getcfg(gpio);
			if (cfg == S3C_GPIO_INPUT)
				temp_io = 0x01;	/* GPIO_IN */
			else if (cfg == S3C_GPIO_OUTPUT)
				temp_io = 0x02;	/* GPIO_OUT */
			else if (cfg == S3C_GPIO_SFN(0xF))
				temp_io = 0x03;	/* INT */
			else
				temp_io = 0x0;		/* FUNC */

			pud = s3c_gpio_getpull(gpio);

		} else {		/* if(phonestate == PHONE_SLEEP) { */
			cfg = s5p_gpio_get_pd_cfg(gpio);

			if (cfg == S5P_GPIO_PD_INPUT)
				temp_io = 0x01;	/* GPIO_IN */
			else if (cfg == S5P_GPIO_PD_OUTPUT0 ||
					cfg ==  S5P_GPIO_PD_OUTPUT1)
				temp_io = 0x02;	/* GPIO_OUT */
			else if (cfg == S5P_GPIO_PD_PREV_STATE)
				temp_io = 0x04;	/* PREV */
			else
				temp_io = 0xF;	/* not alloc. */

			pud = s5p_gpio_get_pd_pull(gpio);
		}

		if (phonestate == PHONE_INIT ||
			((gpio >= EXYNOS3_GPX0(0)) &&
				(gpio <= EXYNOS3_GPX3(7)))) {

			if (temp_io == 0x0)	/* FUNC */
				val = 0;
			else
				val = gpio_get_value(gpio);

		} else {
			if (cfg == S5P_GPIO_PD_OUTPUT0)
				val = 0;
			else if (cfg == S5P_GPIO_PD_OUTPUT1)
				val = 1;
			else
				val = 0;
		}

		if (pud == S3C_GPIO_PULL_NONE ||
				pud == S5P_GPIO_PD_UPDOWN_DISABLE)
			temp_pdpu = 0x00;
		else if (pud == S3C_GPIO_PULL_DOWN ||
				pud == S5P_GPIO_PD_DOWN_ENABLE)
			temp_pdpu = 0x01;
		else if (pud == S3C_GPIO_PULL_UP ||
				pud == S5P_GPIO_PD_UP_ENABLE)
			temp_pdpu = 0x02;
		else {
			temp_pdpu = 0x07;
			pr_err("[GPIO_DVS] i : %d, gpio : %d, pud : %d\n",
					i, gpio, pud);
		}

		if (val == 0)
			temp_lh = 0x00;
		else if (val == 1)
			temp_lh = 0x01;
		else
			pr_err("[GPIO_DVS] i : %d, gpio : %d, val : %d\n",
					i, gpio, val);

		checkgpiomap_result[phonestate][i] =
			GET_RESULT_GPIO(temp_io, temp_pdpu, temp_lh);
	}

	pr_info("[GPIO_DVS][%s] --\n", __func__);

	return;
}