Skip to content

Commit

Permalink
pinctrl: exynos: Set pin function to EINT in irq_set_type of GPIO EINTa
Browse files Browse the repository at this point in the history
Pins used as GPIO interrupts need to be configured as EINTs. This patch
adds the required configuration code to exynos_gpio_irq_set_type,
to set the pin as EINT when its interrupt trigger is configured.

Signed-off-by: Tomasz Figa <t.figa@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
  • Loading branch information
Tomasz Figa authored and Kukjin Kim committed Sep 20, 2012
1 parent 011527b commit ee2f573
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 0 deletions.
12 changes: 12 additions & 0 deletions drivers/pinctrl/pinctrl-exynos.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,11 @@ static int exynos_gpio_irq_set_type(struct irq_data *irqd, unsigned int type)
struct samsung_pinctrl_drv_data *d = irqd->domain->host_data;
struct samsung_pin_ctrl *ctrl = d->ctrl;
struct exynos_geint_data *edata = irq_data_get_irq_handler_data(irqd);
struct samsung_pin_bank *bank = edata->bank;
unsigned int shift = EXYNOS_EINT_CON_LEN * edata->pin;
unsigned int con, trig_type;
unsigned long reg_con = ctrl->geint_con + edata->eint_offset;
unsigned int mask;

switch (type) {
case IRQ_TYPE_EDGE_RISING:
Expand Down Expand Up @@ -110,6 +112,16 @@ static int exynos_gpio_irq_set_type(struct irq_data *irqd, unsigned int type)
con &= ~(EXYNOS_EINT_CON_MASK << shift);
con |= trig_type << shift;
writel(con, d->virt_base + reg_con);

reg_con = bank->pctl_offset;
shift = edata->pin * bank->func_width;
mask = (1 << bank->func_width) - 1;

con = readl(d->virt_base + reg_con);
con &= ~(mask << shift);
con |= EXYNOS_EINT_FUNC << shift;
writel(con, d->virt_base + reg_con);

return 0;
}

Expand Down
1 change: 1 addition & 0 deletions drivers/pinctrl/pinctrl-exynos.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ enum exynos4210_gpio_xc_start {
#define EXYNOS_WKUP_EMASK_OFFSET 0xF00
#define EXYNOS_WKUP_EPEND_OFFSET 0xF40
#define EXYNOS_SVC_OFFSET 0xB08
#define EXYNOS_EINT_FUNC 0xF

/* helpers to access interrupt service register */
#define EXYNOS_SVC_GROUP_SHIFT 3
Expand Down

0 comments on commit ee2f573

Please sign in to comment.