Module Name: src Committed By: jmcneill Date: Sat May 2 17:06:53 UTC 2015
Modified Files: src/sys/arch/arm/nvidia: tegra_gpio.c tegra_var.h Log Message: simplify gpio kpi To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/nvidia/tegra_gpio.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/nvidia/tegra_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/nvidia/tegra_gpio.c diff -u src/sys/arch/arm/nvidia/tegra_gpio.c:1.1 src/sys/arch/arm/nvidia/tegra_gpio.c:1.2 --- src/sys/arch/arm/nvidia/tegra_gpio.c:1.1 Sat May 2 12:08:32 2015 +++ src/sys/arch/arm/nvidia/tegra_gpio.c Sat May 2 17:06:53 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_gpio.c,v 1.1 2015/05/02 12:08:32 jmcneill Exp $ */ +/* $NetBSD: tegra_gpio.c,v 1.2 2015/05/02 17:06:53 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca> @@ -29,7 +29,7 @@ #include "locators.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tegra_gpio.c,v 1.1 2015/05/02 12:08:32 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tegra_gpio.c,v 1.2 2015/05/02 17:06:53 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -250,25 +250,41 @@ tegra_gpio_pin_ctl(void *priv, int pin, } static const struct tegra_gpio_pinbank * -tegra_gpio_pinbank_lookup(const char *bankname) +tegra_gpio_pin_lookup(const char *pinname, int *ppin) { + char bankname[3]; u_int n; + int pin; + + KASSERT(strlen(pinname) == 2 || strlen(pinname) == 3); + + memset(bankname, 0, sizeof(bankname)); + bankname[0] = pinname[0]; + if (strlen(pinname) == 2) { + pin = pinname[1] - '0'; + } else { + bankname[1] = pinname[1]; + pin = pinname[2] - '0'; + } for (n = 0; n < __arraycount(tegra_gpio_pinbanks); n++) { const struct tegra_gpio_pinbank *pb = &tegra_gpio_pinbanks[n]; - if (strcmp(pb->name, bankname) == 0) + if (strcmp(pb->name, bankname) == 0) { + *ppin = pin; return pb; + } } return NULL; } struct tegra_gpio_pin * -tegra_gpio_acquire(const char *bankname, int pin, u_int flags) +tegra_gpio_acquire(const char *pinname, u_int flags) { struct tegra_gpio_bank bank; struct tegra_gpio_pin *gpin; + int pin; device_t dev; dev = device_find_by_driver_unit("tegragpio", 0); @@ -276,7 +292,7 @@ tegra_gpio_acquire(const char *bankname, return NULL; bank.bank_sc = device_private(dev); - bank.bank_pb = tegra_gpio_pinbank_lookup(bankname); + bank.bank_pb = tegra_gpio_pin_lookup(pinname, &pin); if (bank.bank_pb == NULL) return NULL; Index: src/sys/arch/arm/nvidia/tegra_var.h diff -u src/sys/arch/arm/nvidia/tegra_var.h:1.5 src/sys/arch/arm/nvidia/tegra_var.h:1.6 --- src/sys/arch/arm/nvidia/tegra_var.h:1.5 Sat May 2 12:08:32 2015 +++ src/sys/arch/arm/nvidia/tegra_var.h Sat May 2 17:06:53 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_var.h,v 1.5 2015/05/02 12:08:32 jmcneill Exp $ */ +/* $NetBSD: tegra_var.h,v 1.6 2015/05/02 17:06:53 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca> @@ -77,7 +77,7 @@ u_int tegra_car_periph_sdmmc_rate(u_int) int tegra_car_periph_sdmmc_set_div(u_int, u_int); struct tegra_gpio_pin; -struct tegra_gpio_pin *tegra_gpio_acquire(const char *, int, u_int); +struct tegra_gpio_pin *tegra_gpio_acquire(const char *, u_int); void tegra_gpio_release(struct tegra_gpio_pin *); int tegra_gpio_read(struct tegra_gpio_pin *); void tegra_gpio_write(struct tegra_gpio_pin *, int);