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; }
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; }