Module Name: src
Committed By: marty
Date: Thu Dec 24 01:10:51 UTC 2015
Modified Files:
src/sys/arch/arm/samsung: exynos_gpio.c exynos_pinctrl.c exynos_var.h
files.exynos
Log Message:
XU4 GPIO Review Changes
Implement suggestions from Jared.
To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/arm/samsung/exynos_gpio.c \
src/sys/arch/arm/samsung/files.exynos
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/samsung/exynos_pinctrl.c
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/samsung/exynos_var.h
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.17 src/sys/arch/arm/samsung/exynos_gpio.c:1.18
--- src/sys/arch/arm/samsung/exynos_gpio.c:1.17 Tue Dec 22 22:19:07 2015
+++ src/sys/arch/arm/samsung/exynos_gpio.c Thu Dec 24 01:10:51 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: exynos_gpio.c,v 1.17 2015/12/22 22:19:07 jmcneill Exp $ */
+/* $NetBSD: exynos_gpio.c,v 1.18 2015/12/24 01:10:51 marty 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.17 2015/12/22 22:19:07 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: exynos_gpio.c,v 1.18 2015/12/24 01:10:51 marty Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -281,7 +281,8 @@ exynos_gpio_pin_ctl(void *cookie, int pi
}
void
-exynos_gpio_bank_config(struct exynos_pinctrl_softc * parent, int node)
+exynos_gpio_bank_config(struct exynos_pinctrl_softc * parent,
+ const struct fdt_attach_args *faa, int node)
{
struct exynos_gpio_bank *bank = kmem_zalloc(sizeof(*bank), KM_SLEEP);
struct exynos_gpio_softc *sc = kmem_zalloc(sizeof(*sc), KM_SLEEP);
@@ -320,32 +321,35 @@ exynos_gpio_bank_config(struct exynos_pi
bank->bank_cfg.drv = GPIO_READ(bank, EXYNOS_GPIO_DRV);
bank->bank_cfg.conpwd = GPIO_READ(bank, EXYNOS_GPIO_CONPWD);
bank->bank_cfg.pudpwd = GPIO_READ(bank, EXYNOS_GPIO_PUDPWD);
+
+ fdtbus_register_gpio_controller(bank->bank_dev, faa->faa_phandle,
+ &exynos_gpio_funcs);
}
/*
- * pinmame = gpLD-N
+ * pinmame = gpLD[-N]
* L = 'a' - 'z' -+
- * D = '0' - '8' -+ ===== bank name
- * N = '0' - '8' ===== pin number
+ * D = '0' - '9' -+ ===== bank name
+ * N = '0' - '7' ===== pin number
*/
static struct exynos_gpio_bank *
exynos_gpio_pin_lookup(const char *pinname, int *ppin)
{
char bankname[5];
- int pin;
+ int pin = 0;
int n;
struct exynos_gpio_bank *bank;
memset(bankname, 0, sizeof(bankname));
- bankname[0] = pinname[0]; /* 'g' */
- bankname[1] = pinname[1]; /* 'p' */
- bankname[2] = pinname[2]; /* L */
- bankname[3] = pinname[3]; /* D */
- bankname[4] = 0;
- if (ppin)
+ for (n = 0; n < 4; n++)
+ bankname[n] = pinname[n];
+ bankname[n] = 0;
+ if (ppin && pinname[4] == '-') {
pin = pinname[5] - '0'; /* skip the '-' */
-
+ if (pin < 0 || pin > 8)
+ return NULL;
+ }
for (n = 0; n < __arraycount(exynos5_banks); n++) {
bank = &exynos_gpio_banks[n];
if (strcmp(bank->bank_name, bankname) == 0) {
Index: src/sys/arch/arm/samsung/files.exynos
diff -u src/sys/arch/arm/samsung/files.exynos:1.17 src/sys/arch/arm/samsung/files.exynos:1.18
--- src/sys/arch/arm/samsung/files.exynos:1.17 Mon Dec 21 04:58:50 2015
+++ src/sys/arch/arm/samsung/files.exynos Thu Dec 24 01:10:51 2015
@@ -1,4 +1,4 @@
-# $NetBSD: files.exynos,v 1.17 2015/12/21 04:58:50 marty Exp $
+# $NetBSD: files.exynos,v 1.18 2015/12/24 01:10:51 marty Exp $
#
# Configuration info for Samsung Exynos SoC ARM Peripherals
#
@@ -87,11 +87,6 @@ attach exyopctl at fdt with exynos_pinc
file arch/arm/samsung/exynos_pinctrl.c exynos_pinctrl needs-flag
file arch/arm/samsung/exynos_gpio.c exynos_pinctrl needs-flag
-# GPIO
-#device exyogpio : gpiobus
-#attach exyogpio at fdt with exynos_gpio
-#file arch/arm/samsung/exynos_gpio.c exynos_gpio needs-flag
-
# USB2 Host Controller (EHCI/OHCI)
device exyousb { } : fdtbus
attach exyousb at fdt with exyo_usb
@@ -99,7 +94,7 @@ attach ohci at exyousb with ohci_exyousb
attach ehci at exyousb with ehci_exyousb
file arch/arm/samsung/exynos_usb.c exyo_usb
-# I2C support, bitbanging trough GPIO
+# I2C support, bitbanging through GPIO
device exyoi2c: i2cbus, i2c_bitbang
attach exyoi2c at fdt with exynos_i2c
file arch/arm/samsung/exynos_i2c.c exynos_i2c needs-flag
Index: src/sys/arch/arm/samsung/exynos_pinctrl.c
diff -u src/sys/arch/arm/samsung/exynos_pinctrl.c:1.5 src/sys/arch/arm/samsung/exynos_pinctrl.c:1.6
--- src/sys/arch/arm/samsung/exynos_pinctrl.c:1.5 Tue Dec 22 22:34:42 2015
+++ src/sys/arch/arm/samsung/exynos_pinctrl.c Thu Dec 24 01:10:51 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: exynos_pinctrl.c,v 1.5 2015/12/22 22:34:42 jmcneill Exp $ */
+/* $NetBSD: exynos_pinctrl.c,v 1.6 2015/12/24 01:10:51 marty Exp $ */
/*-
* Copyright (c) 2015 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
#include "gpio.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: exynos_pinctrl.c,v 1.5 2015/12/22 22:34:42 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: exynos_pinctrl.c,v 1.6 2015/12/24 01:10:51 marty Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -98,12 +98,9 @@ exynos_pinctrl_attach(device_t parent, d
child = OF_peer(child)) {
if (of_getprop_bool(child, "gpio-controller") == false)
continue;
- exynos_gpio_bank_config(sc,child);
+ exynos_gpio_bank_config(sc, faa, child);
}
- fdtbus_register_gpio_controller(self, faa->faa_phandle,
- &exynos_gpio_funcs);
-
aprint_naive("\n");
aprint_normal("\n");
Index: src/sys/arch/arm/samsung/exynos_var.h
diff -u src/sys/arch/arm/samsung/exynos_var.h:1.21 src/sys/arch/arm/samsung/exynos_var.h:1.22
--- src/sys/arch/arm/samsung/exynos_var.h:1.21 Sat Dec 19 21:42:31 2015
+++ src/sys/arch/arm/samsung/exynos_var.h Thu Dec 24 01:10:51 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: exynos_var.h,v 1.21 2015/12/19 21:42:31 marty Exp $ */
+/* $NetBSD: exynos_var.h,v 1.22 2015/12/24 01:10:51 marty Exp $ */
/*-
* Copyright (c) 2013, 2014 The NetBSD Foundation, Inc.
@@ -125,8 +125,11 @@ extern bus_space_handle_t exynos_sysreg_
extern void exynos_bootstrap(vaddr_t, vaddr_t);
extern void exynos_dma_bootstrap(psize_t memsize);
+
struct exynos_pinctrl_softc;
-extern void exynos_gpio_bank_config(struct exynos_pinctrl_softc *, int);
+struct fdt_attach_args;
+extern void exynos_gpio_bank_config(struct exynos_pinctrl_softc *,
+ const struct fdt_attach_args *, int);
extern void exynos_wdt_reset(void);
extern void exynos_init_clkout_for_usb(void); // board specific