Module Name: src
Committed By: jmcneill
Date: Wed Jul 4 22:16:43 UTC 2018
Modified Files:
src/sys/arch/arm/samsung: exynos_gpio.c
Log Message:
Remove some duplicate code
To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/samsung/exynos_gpio.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/samsung/exynos_gpio.c
diff -u src/sys/arch/arm/samsung/exynos_gpio.c:1.24 src/sys/arch/arm/samsung/exynos_gpio.c:1.25
--- src/sys/arch/arm/samsung/exynos_gpio.c:1.24 Mon Jul 2 23:54:52 2018
+++ src/sys/arch/arm/samsung/exynos_gpio.c Wed Jul 4 22:16:42 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: exynos_gpio.c,v 1.24 2018/07/02 23:54:52 jmcneill Exp $ */
+/* $NetBSD: exynos_gpio.c,v 1.25 2018/07/04 22:16:42 jmcneill Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
#include "gpio.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: exynos_gpio.c,v 1.24 2018/07/02 23:54:52 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: exynos_gpio.c,v 1.25 2018/07/04 22:16:42 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -175,33 +175,6 @@ exynos_gpio_cfprint(void *priv, const ch
return UNCONF;
}
-static void
-exynos_gpio_update_cfg_regs(struct exynos_gpio_bank *bank,
- const struct exynos_gpio_pin_cfg *ncfg)
-{
- if (bank->bank_cfg.cfg != ncfg->cfg) {
- GPIO_WRITE(bank, EXYNOS_GPIO_CON, ncfg->cfg);
- bank->bank_cfg.cfg = ncfg->cfg;
- }
- if (bank->bank_cfg.pud != ncfg->pud) {
- GPIO_WRITE(bank, EXYNOS_GPIO_PUD, ncfg->pud);
- bank->bank_cfg.pud = ncfg->pud;
- }
-
- if (bank->bank_cfg.drv != ncfg->drv) {
- GPIO_WRITE(bank, EXYNOS_GPIO_DRV, ncfg->drv);
- bank->bank_cfg.drv = ncfg->drv;
- }
- if (bank->bank_cfg.conpwd != ncfg->conpwd) {
- GPIO_WRITE(bank, EXYNOS_GPIO_CONPWD, ncfg->conpwd);
- bank->bank_cfg.conpwd = ncfg->conpwd;
- }
- if (bank->bank_cfg.pudpwd != ncfg->pudpwd) {
- GPIO_WRITE(bank, EXYNOS_GPIO_PUDPWD, ncfg->pudpwd);
- bank->bank_cfg.pudpwd = ncfg->pudpwd;
- }
-}
-
static int
exynos_gpio_pin_read(void *cookie, int pin)
{
@@ -235,31 +208,29 @@ static void
exynos_gpio_pin_ctl(void *cookie, int pin, int flags)
{
struct exynos_gpio_bank * const bank = cookie;
- struct exynos_gpio_pin_cfg ncfg = bank->bank_cfg;
- u_int shift;
- int pull;
+ struct exynos_gpio_pin_cfg ncfg = { 0 };
/* honour pullup requests */
- pull = EXYNOS_GPIO_PIN_FLOAT;
- if (flags & GPIO_PIN_PULLUP)
- pull = EXYNOS_GPIO_PIN_PULL_UP;
- if (flags & GPIO_PIN_PULLDOWN)
- pull = EXYNOS_GPIO_PIN_PULL_DOWN;
- shift = (pin & 7) << 1;
- ncfg.pud &= ~(0x3 << shift);
- ncfg.pud |= pull << shift;
+ if (flags & GPIO_PIN_PULLUP) {
+ ncfg.pud = EXYNOS_GPIO_PIN_PULL_UP;
+ ncfg.pud_valid = true;
+ }
+ if (flags & GPIO_PIN_PULLDOWN) {
+ ncfg.pud = EXYNOS_GPIO_PIN_PULL_DOWN;
+ ncfg.pud_valid = true;
+ }
/* honour i/o */
if (flags & GPIO_PIN_INPUT) {
- ncfg.cfg &= ~(0x0f << shift);
- ncfg.cfg |= EXYNOS_GPIO_FUNC_INPUT << shift;
+ ncfg.cfg = EXYNOS_GPIO_FUNC_INPUT;
+ ncfg.cfg_valid = true;
} else if (flags & GPIO_PIN_OUTPUT) {
- ncfg.cfg &= ~(0x0f << shift);
- ncfg.cfg |= EXYNOS_GPIO_FUNC_OUTPUT << shift;
+ ncfg.cfg = EXYNOS_GPIO_FUNC_OUTPUT;
+ ncfg.cfg_valid = true;
}
/* update any config registers that changed */
- exynos_gpio_update_cfg_regs(bank, &ncfg);
+ exynos_gpio_pin_ctl_write(bank, &ncfg, pin);
}
void exynos_gpio_pin_ctl_write(const struct exynos_gpio_bank *bank,