static int s5p_irq_eint_set_type(unsigned int irq, unsigned int type) { int offs = EINT_OFFSET(irq); int shift; u32 ctrl, mask; u32 newvalue = 0; switch (type) { case IRQ_TYPE_EDGE_RISING: newvalue = S5P_EXTINT_RISEEDGE; break; case IRQ_TYPE_EDGE_FALLING: newvalue = S5P_EXTINT_FALLEDGE; break; case IRQ_TYPE_EDGE_BOTH: newvalue = S5P_EXTINT_BOTHEDGE; break; case IRQ_TYPE_LEVEL_LOW: newvalue = S5P_EXTINT_LOWLEV; break; case IRQ_TYPE_LEVEL_HIGH: newvalue = S5P_EXTINT_HILEV; break; default: printk(KERN_ERR "No such irq type %d", type); return -EINVAL; } shift = (offs & 0x7) * 4; mask = 0x7 << shift; ctrl = __raw_readl(S5P_EINT_CON(EINT_REG_NR(irq))); ctrl &= ~mask; ctrl |= newvalue << shift; __raw_writel(ctrl, S5P_EINT_CON(EINT_REG_NR(irq))); if ((0 <= offs) && (offs < 8)) s3c_gpio_cfgpin(EINT_GPIO_0(offs & 0x7), EINT_MODE); else if ((8 <= offs) && (offs < 16)) s3c_gpio_cfgpin(EINT_GPIO_1(offs & 0x7), EINT_MODE); else if ((16 <= offs) && (offs < 24)) s3c_gpio_cfgpin(EINT_GPIO_2(offs & 0x7), EINT_MODE); else if ((24 <= offs) && (offs < 32)) s3c_gpio_cfgpin(EINT_GPIO_3(offs & 0x7), EINT_MODE); else printk(KERN_ERR "No such irq number %d", offs); return 0; }
unsigned int universal_sdhci2_detect_ext_cd(void) { unsigned int card_status = 0; #ifdef CONFIG_MMC_DEBUG printk(KERN_DEBUG "Universal :SD Detect function\n"); printk(KERN_DEBUG "eint conf %x eint filter conf %x", readl(S5P_EINT_CON(3)), readl(S5P_EINT_FLTCON(3, 1))); printk(KERN_DEBUG "eint pend %x eint mask %x", readl(S5P_EINT_PEND(3)), readl(S5P_EINT_MASK(3))); #endif card_status = gpio_get_value(S5PV210_GPH3(4)); printk(KERN_DEBUG "Universal : Card status %d\n", card_status ? 0 : 1); return card_status ? 0 : 1; }
unsigned int universal_sdhci2_detect_ext_cd(void) { unsigned int card_status = 0; #ifdef CONFIG_MMC_DEBUG printk(KERN_DEBUG "Universal :SD Detect function\n"); printk(KERN_DEBUG "eint conf %x eint filter conf %x", readl(S5P_EINT_CON(3)), readl(S5P_EINT_FLTCON(3, 1))); printk(KERN_DEBUG "eint pend %x eint mask %x", readl(S5P_EINT_PEND(3)), readl(S5P_EINT_MASK(3))); #endif card_status = gpio_get_value(GPIO_T_FLASH_DETECT) ? 0 : 1; /* active low */ printk(KERN_DEBUG " Universal: Card status %s\n", card_status ? "inserted" : "removed"); return card_status; }
static int exynos4_irq_eint_set_type(struct irq_data *data, unsigned int type) { int offs = EINT_OFFSET(data->irq); int shift; u32 ctrl, mask; u32 newvalue = 0; switch (type) { case IRQ_TYPE_EDGE_RISING: newvalue = S5P_IRQ_TYPE_EDGE_RISING; break; case IRQ_TYPE_EDGE_FALLING: newvalue = S5P_IRQ_TYPE_EDGE_FALLING; break; case IRQ_TYPE_EDGE_BOTH: newvalue = S5P_IRQ_TYPE_EDGE_BOTH; break; case IRQ_TYPE_LEVEL_LOW: newvalue = S5P_IRQ_TYPE_LEVEL_LOW; break; case IRQ_TYPE_LEVEL_HIGH: newvalue = S5P_IRQ_TYPE_LEVEL_HIGH; break; default: printk(KERN_ERR "No such irq type %d", type); return -EINVAL; } shift = (offs & 0x7) * 4; mask = 0x7 << shift; spin_lock(&eint_lock); ctrl = __raw_readl(S5P_EINT_CON(EINT_REG_NR(data->irq))); ctrl &= ~mask; ctrl |= newvalue << shift; __raw_writel(ctrl, S5P_EINT_CON(EINT_REG_NR(data->irq))); spin_unlock(&eint_lock); switch (offs) { case 0 ... 7: s3c_gpio_cfgpin(EINT_GPIO_0(offs & 0x7), EINT_MODE); break; case 8 ... 15: s3c_gpio_cfgpin(EINT_GPIO_1(offs & 0x7), EINT_MODE); break; case 16 ... 23: s3c_gpio_cfgpin(EINT_GPIO_2(offs & 0x7), EINT_MODE); break; case 24 ... 31: s3c_gpio_cfgpin(EINT_GPIO_3(offs & 0x7), EINT_MODE); break; default: printk(KERN_ERR "No such irq number %d", offs); } return 0; }
static int s5p_irq_eint_set_type(struct irq_data *data, unsigned int type) { int offs = EINT_OFFSET(data->irq); int shift; u32 ctrl, mask; u32 newvalue = 0; struct irq_desc *desc = irq_to_desc(data->irq); switch (type) { case IRQ_TYPE_EDGE_RISING: newvalue = S5P_IRQ_TYPE_EDGE_RISING; break; case IRQ_TYPE_EDGE_FALLING: newvalue = S5P_IRQ_TYPE_EDGE_FALLING; break; case IRQ_TYPE_EDGE_BOTH: newvalue = S5P_IRQ_TYPE_EDGE_BOTH; break; case IRQ_TYPE_LEVEL_LOW: newvalue = S5P_IRQ_TYPE_LEVEL_LOW; break; case IRQ_TYPE_LEVEL_HIGH: newvalue = S5P_IRQ_TYPE_LEVEL_HIGH; break; default: printk(KERN_ERR "No such irq type %d", type); return -EINVAL; } shift = (offs & 0x7) * 4; mask = 0x7 << shift; ctrl = __raw_readl(S5P_EINT_CON(EINT_REG_NR(data->irq))); ctrl &= ~mask; ctrl |= newvalue << shift; __raw_writel(ctrl, S5P_EINT_CON(EINT_REG_NR(data->irq))); if ((0 <= offs) && (offs < 8)) s3c_gpio_cfgpin(EINT_GPIO_0(offs & 0x7), EINT_MODE); else if ((8 <= offs) && (offs < 16)) s3c_gpio_cfgpin(EINT_GPIO_1(offs & 0x7), EINT_MODE); else if ((16 <= offs) && (offs < 24)) s3c_gpio_cfgpin(EINT_GPIO_2(offs & 0x7), EINT_MODE); else if ((24 <= offs) && (offs < 32)) s3c_gpio_cfgpin(EINT_GPIO_3(offs & 0x7), EINT_MODE); else printk(KERN_ERR "No such irq number %d", offs); if (type & IRQ_TYPE_EDGE_BOTH) desc->handle_irq = handle_edge_irq; else desc->handle_irq = handle_level_irq; return 0; }
irqbit = 1 << (data->irq + 1 - IRQ_RTC_ALARM); if (!state) s3c_irqwake_intmask |= irqbit; else s3c_irqwake_intmask &= ~irqbit; break; default: return -ENOENT; } return 0; } static struct sleep_save eint_save[] = { #if TO_DO SAVE_ITEM(S5P_EINT_CON(0)), SAVE_ITEM(S5P_EINT_CON(1)), SAVE_ITEM(S5P_EINT_CON(2)), SAVE_ITEM(S5P_EINT_CON(3)), SAVE_ITEM(S5P_EINT_FLTCON(0)), SAVE_ITEM(S5P_EINT_FLTCON(1)), SAVE_ITEM(S5P_EINT_FLTCON(2)), SAVE_ITEM(S5P_EINT_FLTCON(3)), SAVE_ITEM(S5P_EINT_FLTCON(4)), SAVE_ITEM(S5P_EINT_FLTCON(5)), SAVE_ITEM(S5P_EINT_FLTCON(6)), SAVE_ITEM(S5P_EINT_FLTCON(7)), SAVE_ITEM(S5P_EINT_MASK(0)), SAVE_ITEM(S5P_EINT_MASK(1)),