|
@@ -50,7 +50,7 @@ static const struct of_device_id exynos_wkup_irq_ids[] = {
|
|
|
{ }
|
|
|
};
|
|
|
|
|
|
-static void exynos_gpio_irq_unmask(struct irq_data *irqd)
|
|
|
+static void exynos_gpio_irq_mask(struct irq_data *irqd)
|
|
|
{
|
|
|
struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
|
|
|
struct samsung_pinctrl_drv_data *d = bank->drvdata;
|
|
@@ -61,13 +61,22 @@ static void exynos_gpio_irq_unmask(struct irq_data *irqd)
|
|
|
spin_lock_irqsave(&bank->slock, flags);
|
|
|
|
|
|
mask = readl(d->virt_base + reg_mask);
|
|
|
- mask &= ~(1 << irqd->hwirq);
|
|
|
+ mask |= 1 << irqd->hwirq;
|
|
|
writel(mask, d->virt_base + reg_mask);
|
|
|
|
|
|
spin_unlock_irqrestore(&bank->slock, flags);
|
|
|
}
|
|
|
|
|
|
-static void exynos_gpio_irq_mask(struct irq_data *irqd)
|
|
|
+static void exynos_gpio_irq_ack(struct irq_data *irqd)
|
|
|
+{
|
|
|
+ struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
|
|
|
+ struct samsung_pinctrl_drv_data *d = bank->drvdata;
|
|
|
+ unsigned long reg_pend = d->ctrl->geint_pend + bank->eint_offset;
|
|
|
+
|
|
|
+ writel(1 << irqd->hwirq, d->virt_base + reg_pend);
|
|
|
+}
|
|
|
+
|
|
|
+static void exynos_gpio_irq_unmask(struct irq_data *irqd)
|
|
|
{
|
|
|
struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
|
|
|
struct samsung_pinctrl_drv_data *d = bank->drvdata;
|
|
@@ -78,21 +87,12 @@ static void exynos_gpio_irq_mask(struct irq_data *irqd)
|
|
|
spin_lock_irqsave(&bank->slock, flags);
|
|
|
|
|
|
mask = readl(d->virt_base + reg_mask);
|
|
|
- mask |= 1 << irqd->hwirq;
|
|
|
+ mask &= ~(1 << irqd->hwirq);
|
|
|
writel(mask, d->virt_base + reg_mask);
|
|
|
|
|
|
spin_unlock_irqrestore(&bank->slock, flags);
|
|
|
}
|
|
|
|
|
|
-static void exynos_gpio_irq_ack(struct irq_data *irqd)
|
|
|
-{
|
|
|
- struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
|
|
|
- struct samsung_pinctrl_drv_data *d = bank->drvdata;
|
|
|
- unsigned long reg_pend = d->ctrl->geint_pend + bank->eint_offset;
|
|
|
-
|
|
|
- writel(1 << irqd->hwirq, d->virt_base + reg_pend);
|
|
|
-}
|
|
|
-
|
|
|
static int exynos_gpio_irq_set_type(struct irq_data *irqd, unsigned int type)
|
|
|
{
|
|
|
struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
|
|
@@ -268,7 +268,7 @@ err_domains:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static void exynos_wkup_irq_unmask(struct irq_data *irqd)
|
|
|
+static void exynos_wkup_irq_mask(struct irq_data *irqd)
|
|
|
{
|
|
|
struct samsung_pin_bank *b = irq_data_get_irq_chip_data(irqd);
|
|
|
struct samsung_pinctrl_drv_data *d = b->drvdata;
|
|
@@ -279,13 +279,22 @@ static void exynos_wkup_irq_unmask(struct irq_data *irqd)
|
|
|
spin_lock_irqsave(&b->slock, flags);
|
|
|
|
|
|
mask = readl(d->virt_base + reg_mask);
|
|
|
- mask &= ~(1 << irqd->hwirq);
|
|
|
+ mask |= 1 << irqd->hwirq;
|
|
|
writel(mask, d->virt_base + reg_mask);
|
|
|
|
|
|
spin_unlock_irqrestore(&b->slock, flags);
|
|
|
}
|
|
|
|
|
|
-static void exynos_wkup_irq_mask(struct irq_data *irqd)
|
|
|
+static void exynos_wkup_irq_ack(struct irq_data *irqd)
|
|
|
+{
|
|
|
+ struct samsung_pin_bank *b = irq_data_get_irq_chip_data(irqd);
|
|
|
+ struct samsung_pinctrl_drv_data *d = b->drvdata;
|
|
|
+ unsigned long pend = d->ctrl->weint_pend + b->eint_offset;
|
|
|
+
|
|
|
+ writel(1 << irqd->hwirq, d->virt_base + pend);
|
|
|
+}
|
|
|
+
|
|
|
+static void exynos_wkup_irq_unmask(struct irq_data *irqd)
|
|
|
{
|
|
|
struct samsung_pin_bank *b = irq_data_get_irq_chip_data(irqd);
|
|
|
struct samsung_pinctrl_drv_data *d = b->drvdata;
|
|
@@ -296,21 +305,12 @@ static void exynos_wkup_irq_mask(struct irq_data *irqd)
|
|
|
spin_lock_irqsave(&b->slock, flags);
|
|
|
|
|
|
mask = readl(d->virt_base + reg_mask);
|
|
|
- mask |= 1 << irqd->hwirq;
|
|
|
+ mask &= ~(1 << irqd->hwirq);
|
|
|
writel(mask, d->virt_base + reg_mask);
|
|
|
|
|
|
spin_unlock_irqrestore(&b->slock, flags);
|
|
|
}
|
|
|
|
|
|
-static void exynos_wkup_irq_ack(struct irq_data *irqd)
|
|
|
-{
|
|
|
- struct samsung_pin_bank *b = irq_data_get_irq_chip_data(irqd);
|
|
|
- struct samsung_pinctrl_drv_data *d = b->drvdata;
|
|
|
- unsigned long pend = d->ctrl->weint_pend + b->eint_offset;
|
|
|
-
|
|
|
- writel(1 << irqd->hwirq, d->virt_base + pend);
|
|
|
-}
|
|
|
-
|
|
|
static int exynos_wkup_irq_set_type(struct irq_data *irqd, unsigned int type)
|
|
|
{
|
|
|
struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
|