Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Jun 2017 06:30:04 +0000 (UTC)
From:      Emmanuel Vadot <manu@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r320091 - head/sys/arm/allwinner
Message-ID:  <201706190630.v5J6U4bT079201@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: manu
Date: Mon Jun 19 06:30:04 2017
New Revision: 320091
URL: https://svnweb.freebsd.org/changeset/base/320091

Log:
  allwinner: Configure pins for DTS >= Linux 4.11
  
  Starting with DTS from Linux 4.11, the pins list, function, drive and pull
  are no longer prefixed with "allwinner,".
  Allow the pinctrl driver to handle both case.

Modified:
  head/sys/arm/allwinner/a10_gpio.c

Modified: head/sys/arm/allwinner/a10_gpio.c
==============================================================================
--- head/sys/arm/allwinner/a10_gpio.c	Mon Jun 19 05:02:27 2017	(r320090)
+++ head/sys/arm/allwinner/a10_gpio.c	Mon Jun 19 06:30:04 2017	(r320091)
@@ -565,24 +565,38 @@ aw_fdt_configure_pins(device_t dev, phandle_t cfgxref)
 	ret = 0;
 
 	/* Getting all prop for configuring pins */
-	pins_nb = ofw_bus_string_list_to_array(node, "allwinner,pins", &pinlist);
-	if (pins_nb <= 0)
-		return (ENOENT);
-	if (OF_getprop_alloc(node, "allwinner,function",
+	pins_nb = ofw_bus_string_list_to_array(node, "pins", &pinlist);
+	if (pins_nb <= 0) {
+		pins_nb = ofw_bus_string_list_to_array(node, "allwinner,pins",
+		    &pinlist);
+		if (pins_nb <= 0)
+			return (ENOENT);
+	}
+	if (OF_getprop_alloc(node, "function",
 			     sizeof(*pin_function),
 			     (void **)&pin_function) == -1) {
-		ret = ENOENT;
-		goto out;
+		if (OF_getprop_alloc(node, "allwinner,function",
+		    sizeof(*pin_function),
+		    (void **)&pin_function) == -1) {
+			ret = ENOENT;
+			goto out;
+		}
 	}
-	if (OF_getencprop(node, "allwinner,drive",
+	if (OF_getencprop(node, "drive",
 			  &pin_drive, sizeof(pin_drive)) == -1) {
-		ret = ENOENT;
-		goto out;
+		if (OF_getencprop(node, "allwinner,drive",
+		    &pin_drive, sizeof(pin_drive)) == -1) {
+			ret = ENOENT;
+			goto out;
+		}
 	}
-	if (OF_getencprop(node, "allwinner,pull",
+	if (OF_getencprop(node, "pull",
 			  &pin_pull, sizeof(pin_pull)) == -1) {
-		ret = ENOENT;
-		goto out;
+		if (OF_getencprop(node, "allwinner,pull",
+		    &pin_pull, sizeof(pin_pull)) == -1) {
+			ret = ENOENT;
+			goto out;
+		}
 	}
 
 	/* Configure each pin to the correct function, drive and pull */
@@ -697,6 +711,8 @@ a10_gpio_attach(device_t dev)
 	/*
 	 * Register as a pinctrl device
 	 */
+	fdt_pinctrl_register(dev, "pins");
+	fdt_pinctrl_configure_tree(dev);
 	fdt_pinctrl_register(dev, "allwinner,pins");
 	fdt_pinctrl_configure_tree(dev);
 



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