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);
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to