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,

Reply via email to