Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Nov 2014 02:41:35 +0000 (UTC)
From:      Luiz Otavio O Souza <loos@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r274643 - head/sys/dev/gpio
Message-ID:  <201411180241.sAI2fZ35035140@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: loos
Date: Tue Nov 18 02:41:35 2014
New Revision: 274643
URL: https://svnweb.freebsd.org/changeset/base/274643

Log:
  Fix gpiobus_child_location_str() to return a real string with the mapped
  pins.
  
  Make gpiobus_print_pins() static again.

Modified:
  head/sys/dev/gpio/gpiobus.c
  head/sys/dev/gpio/gpiobusvar.h

Modified: head/sys/dev/gpio/gpiobus.c
==============================================================================
--- head/sys/dev/gpio/gpiobus.c	Tue Nov 18 02:11:07 2014	(r274642)
+++ head/sys/dev/gpio/gpiobus.c	Tue Nov 18 02:41:35 2014	(r274643)
@@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
 #define	dprintf(x, arg...)
 #endif
 
+static void gpiobus_print_pins(struct gpiobus_ivar *, char *, size_t);
 static int gpiobus_parse_pins(struct gpiobus_softc *, device_t, int);
 static int gpiobus_probe(device_t);
 static int gpiobus_attach(device_t);
@@ -69,11 +70,11 @@ static int gpiobus_pin_set(device_t, dev
 static int gpiobus_pin_get(device_t, device_t, uint32_t, unsigned int*);
 static int gpiobus_pin_toggle(device_t, device_t, uint32_t);
 
-void
-gpiobus_print_pins(struct gpiobus_ivar *devi)
+static void
+gpiobus_print_pins(struct gpiobus_ivar *devi, char *buf, size_t buflen)
 {
-	int range_start, range_stop, need_coma;
-	int i;
+	char tmp[128];
+	int i, range_start, range_stop, need_coma;
 
 	if (devi->npins == 0)
 		return;
@@ -83,11 +84,15 @@ gpiobus_print_pins(struct gpiobus_ivar *
 	for (i = 1; i < devi->npins; i++) {
 		if (devi->pins[i] != (range_stop + 1)) {
 			if (need_coma)
-				printf(",");
+				strlcat(buf, ",", buflen);
+			memset(tmp, 0, sizeof(tmp));
 			if (range_start != range_stop)
-				printf("%d-%d", range_start, range_stop);
+				snprintf(tmp, sizeof(tmp) - 1, "%d-%d",
+				    range_start, range_stop);
 			else
-				printf("%d", range_start);
+				snprintf(tmp, sizeof(tmp) - 1, "%d",
+				    range_start);
+			strlcat(buf, tmp, buflen);
 
 			range_start = range_stop = devi->pins[i];
 			need_coma = 1;
@@ -97,11 +102,15 @@ gpiobus_print_pins(struct gpiobus_ivar *
 	}
 
 	if (need_coma)
-		printf(",");
+		strlcat(buf, ",", buflen);
+	memset(tmp, 0, sizeof(tmp));
 	if (range_start != range_stop)
-		printf("%d-%d", range_start, range_stop);
+		snprintf(tmp, sizeof(tmp) - 1, "%d-%d",
+		    range_start, range_stop);
 	else
-		printf("%d", range_start);
+		snprintf(tmp, sizeof(tmp) - 1, "%d",
+		    range_start);
+	strlcat(buf, tmp, buflen);
 }
 
 int
@@ -273,12 +282,16 @@ gpiobus_resume(device_t dev)
 static int
 gpiobus_print_child(device_t dev, device_t child)
 {
-	struct gpiobus_ivar *devi = GPIOBUS_IVAR(child);
+	char pins[128];
 	int retval = 0;
+	struct gpiobus_ivar *devi;
 
+	devi = GPIOBUS_IVAR(child);
+	memset(pins, 0, sizeof(pins));
 	retval += bus_print_child_header(dev, child);
 	retval += printf(" at pin(s) ");
-	gpiobus_print_pins(devi);
+	gpiobus_print_pins(devi, pins, sizeof(pins));
+	retval += printf("%s", pins);
 	resource_list_print_type(&devi->rl, "irq", SYS_RES_IRQ, "%ld");
 	retval += bus_print_child_footer(dev, child);
 
@@ -289,8 +302,12 @@ static int
 gpiobus_child_location_str(device_t bus, device_t child, char *buf,
     size_t buflen)
 {
+	struct gpiobus_ivar *devi;
+
+	devi = GPIOBUS_IVAR(child);
+	strlcpy(buf, "pin(s)=", buflen);
+	gpiobus_print_pins(devi, buf, buflen);
 
-	snprintf(buf, buflen, "pins=?");
 	return (0);
 }
 

Modified: head/sys/dev/gpio/gpiobusvar.h
==============================================================================
--- head/sys/dev/gpio/gpiobusvar.h	Tue Nov 18 02:11:07 2014	(r274642)
+++ head/sys/dev/gpio/gpiobusvar.h	Tue Nov 18 02:41:35 2014	(r274643)
@@ -94,7 +94,6 @@ gpio_map_gpios(device_t bus, phandle_t d
 
 device_t ofw_gpiobus_add_fdt_child(device_t, phandle_t);
 #endif
-void gpiobus_print_pins(struct gpiobus_ivar *);
 int gpiobus_init_softc(device_t);
 
 extern driver_t gpiobus_driver;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201411180241.sAI2fZ35035140>