From 96dd437297bb336f19d6d6db0b060793e83f032c Mon Sep 17 00:00:00 2001
From: Robert Nelson <robertcnelson@gmail.com>
Date: Tue, 2 Jun 2015 13:18:16 -0500
Subject: [PATCH] add: CONFIG_BEAGLEBONE_PINMUX_HELPER & CONFIG_GPIO_OF_HELPER

Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
---
 patch.sh                                      |   26 +
 .../0001-BeagleBone-pinmux-helper.patch       |  205 +++
 ...Add-runtime-configuration-capability.patch |  175 +++
 ...inmux-helper-Switch-to-using-kmalloc.patch |   68 +
 .../0004-gpio-Introduce-GPIO-OF-helper.patch  |  474 ++++++
 ...hangeable-property-to-gpio-of-helper.patch |   26 +
 .../0006-am33xx.dtsi-add-ocp-label.patch      |   26 +
 ...lebone-added-expansion-header-to-dtb.patch | 1351 +++++++++++++++++
 ...er-Add-support-for-mode-device-tree-.patch |  117 ++
 ...helper-add-P8_37_pinmux-P8_38_pinmux.patch |   82 +
 .../0010-pinmux-helper-hdmi.patch             |  858 +++++++++++
 .../0011-pinmux-helper-can1.patch             |   27 +
 ...PERIMENTAL-dependency-on-CONFIG_GPIO.patch |   32 +
 ...helper-add-P9_19_pinmux-P9_20_pinmux.patch |  111 ++
 .../0014-gpio-of-helper-idr_alloc.patch       |   76 +
 patches/defconfig                             |    2 +
 patches/ref_omap2plus_defconfig               |    2 +
 version.sh                                    |    2 +-
 18 files changed, 3659 insertions(+), 1 deletion(-)
 create mode 100644 patches/beaglebone/pinmux-helper/0001-BeagleBone-pinmux-helper.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0002-pinmux-helper-Add-runtime-configuration-capability.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0003-pinmux-helper-Switch-to-using-kmalloc.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0004-gpio-Introduce-GPIO-OF-helper.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0005-Add-dir-changeable-property-to-gpio-of-helper.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0006-am33xx.dtsi-add-ocp-label.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0007-beaglebone-added-expansion-header-to-dtb.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0008-bone-pinmux-helper-Add-support-for-mode-device-tree-.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0009-pinmux-helper-add-P8_37_pinmux-P8_38_pinmux.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0010-pinmux-helper-hdmi.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0011-pinmux-helper-can1.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0012-Remove-CONFIG_EXPERIMENTAL-dependency-on-CONFIG_GPIO.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0013-pinmux-helper-add-P9_19_pinmux-P9_20_pinmux.patch
 create mode 100644 patches/beaglebone/pinmux-helper/0014-gpio-of-helper-idr_alloc.patch

diff --git a/patch.sh b/patch.sh
index 0df4cd0e6..e9bdf92a5 100644
--- a/patch.sh
+++ b/patch.sh
@@ -256,6 +256,32 @@ beaglebone () {
 		cleanup
 	fi
 
+	echo "dir: beaglebone/pinmux-helper"
+	#regenerate="enable"
+	if [ "x${regenerate}" = "xenable" ] ; then
+		start_cleanup
+	fi
+
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0001-BeagleBone-pinmux-helper.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0002-pinmux-helper-Add-runtime-configuration-capability.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0003-pinmux-helper-Switch-to-using-kmalloc.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0004-gpio-Introduce-GPIO-OF-helper.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0005-Add-dir-changeable-property-to-gpio-of-helper.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0006-am33xx.dtsi-add-ocp-label.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0007-beaglebone-added-expansion-header-to-dtb.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0008-bone-pinmux-helper-Add-support-for-mode-device-tree-.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0009-pinmux-helper-add-P8_37_pinmux-P8_38_pinmux.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0010-pinmux-helper-hdmi.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0011-pinmux-helper-can1.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0012-Remove-CONFIG_EXPERIMENTAL-dependency-on-CONFIG_GPIO.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0013-pinmux-helper-add-P9_19_pinmux-P9_20_pinmux.patch"
+	${git} "${DIR}/patches/beaglebone/pinmux-helper/0014-gpio-of-helper-idr_alloc.patch"
+
+	if [ "x${regenerate}" = "xenable" ] ; then
+		number=14
+		cleanup
+	fi
+
 	#This has to be last...
 	echo "dir: beaglebone/dtbs"
 	#regenerate="enable"
diff --git a/patches/beaglebone/pinmux-helper/0001-BeagleBone-pinmux-helper.patch b/patches/beaglebone/pinmux-helper/0001-BeagleBone-pinmux-helper.patch
new file mode 100644
index 000000000..39e64a137
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0001-BeagleBone-pinmux-helper.patch
@@ -0,0 +1,205 @@
+From 86e46b765424456527a68ab540087c92f8684984 Mon Sep 17 00:00:00 2001
+From: Pantelis Antoniou <panto@antoniou-consulting.com>
+Date: Fri, 28 Dec 2012 20:56:48 +0200
+Subject: [PATCH 01/13] BeagleBone pinmux helper
+
+This patch was derived from 2 commits, but I removed the non-pinmux-helper portions
+and added the helper to the bb.org_defconfig:
+
+capemgr: Capemgr makefiles and Kconfig fragments.
+
+Introduce a cape loader using DT overlays and dynamic
+DT objects.
+
+Makefile and Kconfig fragments.
+
+Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
+
+Conflicts:
+	arch/arm/mach-omap2/Kconfig
+	drivers/misc/Kconfig
+	drivers/misc/Makefile
+
+And:
+
+Pinmux helper driver.
+
+    That's just a hack to get a pinmux helper driver working.
+
+    Define in the DT
+
+    	helper {
+    		compatible = "bone-pinmux-helper";
+    		pinctrl-names = "default";
+    		pinctrl-0 = <&helper_pins>;
+    		status = "okay";
+    	};
+---
+ drivers/misc/Kconfig                              |  1 +
+ drivers/misc/Makefile                             |  1 +
+ drivers/misc/cape/Kconfig                         |  5 ++
+ drivers/misc/cape/Makefile                        |  5 ++
+ drivers/misc/cape/beaglebone/Kconfig              | 10 ++++
+ drivers/misc/cape/beaglebone/Makefile             |  5 ++
+ drivers/misc/cape/beaglebone/bone-pinmux-helper.c | 72 +++++++++++++++++++++++
+ 7 files changed, 99 insertions(+)
+ create mode 100644 drivers/misc/cape/Kconfig
+ create mode 100644 drivers/misc/cape/Makefile
+ create mode 100644 drivers/misc/cape/beaglebone/Kconfig
+ create mode 100644 drivers/misc/cape/beaglebone/Makefile
+ create mode 100644 drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+
+diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
+index 85a5cf2..49381a8 100644
+--- a/drivers/misc/Kconfig
++++ b/drivers/misc/Kconfig
+@@ -535,6 +535,7 @@ source "drivers/misc/vmw_vmci/Kconfig"
+ source "drivers/misc/mic/Kconfig"
+ source "drivers/misc/cape_bone_argus/Kconfig"
+ source "drivers/misc/genwqe/Kconfig"
++source "drivers/misc/cape/Kconfig"
+ source "drivers/misc/echo/Kconfig"
+ source "drivers/misc/cxl/Kconfig"
+ endmenu
+diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
+index 475df8a..bef8bf4 100644
+--- a/drivers/misc/Makefile
++++ b/drivers/misc/Makefile
+@@ -54,6 +54,7 @@ obj-$(CONFIG_SRAM)		+= sram.o
+ obj-y				+= mic/
+ obj-y				+= cape_bone_argus/
+ obj-$(CONFIG_GENWQE)		+= genwqe/
++obj-y				+= cape/
+ obj-$(CONFIG_ECHO)		+= echo/
+ obj-$(CONFIG_VEXPRESS_SYSCFG)	+= vexpress-syscfg.o
+ obj-$(CONFIG_CXL_BASE)		+= cxl/
+diff --git a/drivers/misc/cape/Kconfig b/drivers/misc/cape/Kconfig
+new file mode 100644
+index 0000000..a2ef85e
+--- /dev/null
++++ b/drivers/misc/cape/Kconfig
+@@ -0,0 +1,5 @@
++#
++# Capes
++#
++
++source "drivers/misc/cape/beaglebone/Kconfig"
+diff --git a/drivers/misc/cape/Makefile b/drivers/misc/cape/Makefile
+new file mode 100644
+index 0000000..7c4eb96
+--- /dev/null
++++ b/drivers/misc/cape/Makefile
+@@ -0,0 +1,5 @@
++#
++# Makefile for cape like devices
++#
++
++obj-y				+= beaglebone/
+diff --git a/drivers/misc/cape/beaglebone/Kconfig b/drivers/misc/cape/beaglebone/Kconfig
+new file mode 100644
+index 0000000..eeb6782
+--- /dev/null
++++ b/drivers/misc/cape/beaglebone/Kconfig
+@@ -0,0 +1,10 @@
++#
++# Beaglebone capes
++#
++
++config BEAGLEBONE_PINMUX_HELPER
++	tristate "Beaglebone Pinmux Helper"
++	depends on ARCH_OMAP2PLUS && OF
++	default n
++	help
++	  Say Y here to include support for the pinmux helper
+diff --git a/drivers/misc/cape/beaglebone/Makefile b/drivers/misc/cape/beaglebone/Makefile
+new file mode 100644
+index 0000000..7f4617a
+--- /dev/null
++++ b/drivers/misc/cape/beaglebone/Makefile
+@@ -0,0 +1,5 @@
++#
++# Makefile for beaglebone capes
++#
++
++obj-$(CONFIG_BEAGLEBONE_PINMUX_HELPER)	+= bone-pinmux-helper.o
+diff --git a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+new file mode 100644
+index 0000000..ba3922d
+--- /dev/null
++++ b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+@@ -0,0 +1,72 @@
++/*
++ * Pinmux helper driver
++ *
++ * Copyright (C) 2013 Pantelis Antoniou <panto@antoniou-consulting.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/err.h>
++#include <linux/of.h>
++#include <linux/of_device.h>
++#include <linux/of_gpio.h>
++#include <linux/pinctrl/pinctrl.h>
++#include <linux/pinctrl/pinmux.h>
++#include <linux/pinctrl/consumer.h>
++
++static const struct of_device_id bone_pinmux_helper_of_match[] = {
++	{
++		.compatible = "bone-pinmux-helper",
++	},
++	{ },
++};
++MODULE_DEVICE_TABLE(of, bone_pinmux_helper_of_match);
++
++static int bone_pinmux_helper_probe(struct platform_device *pdev)
++{
++	struct pinctrl *pinctrl;
++
++	pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
++
++	/* don't bother with anything */
++	return PTR_RET(pinctrl);
++}
++
++static int bone_pinmux_helper_remove(struct platform_device *pdev)
++{
++	/* nothing more is needed */
++	return 0;
++}
++
++struct platform_driver bone_pinmux_helper_driver = {
++	.probe		= bone_pinmux_helper_probe,
++	.remove		= bone_pinmux_helper_remove,
++	.driver = {
++		.name		= "bone-pinmux-helper",
++		.owner		= THIS_MODULE,
++		.of_match_table	= bone_pinmux_helper_of_match,
++	},
++};
++
++module_platform_driver(bone_pinmux_helper_driver);
++
++MODULE_AUTHOR("Pantelis Antoniou");
++MODULE_DESCRIPTION("Beaglebone pinmux helper driver");
++MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:bone-pinmux-helper");
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0002-pinmux-helper-Add-runtime-configuration-capability.patch b/patches/beaglebone/pinmux-helper/0002-pinmux-helper-Add-runtime-configuration-capability.patch
new file mode 100644
index 000000000..14e3712f2
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0002-pinmux-helper-Add-runtime-configuration-capability.patch
@@ -0,0 +1,175 @@
+From f6febc6d21143b7cd0d1d30b710ec1fe1f41a8bf Mon Sep 17 00:00:00 2001
+From: Pantelis Antoniou <panto@antoniou-consulting.com>
+Date: Wed, 6 Mar 2013 19:37:53 +0200
+Subject: [PATCH 02/13] pinmux-helper: Add runtime configuration capability
+
+Pinctrl already supports multiple states. Just make them visible.
+---
+ drivers/misc/cape/beaglebone/bone-pinmux-helper.c | 143 +++++++++++++++++++++-
+ 1 file changed, 138 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+index ba3922d..84058e1 100644
+--- a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
++++ b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+@@ -38,19 +38,152 @@ static const struct of_device_id bone_pinmux_helper_of_match[] = {
+ };
+ MODULE_DEVICE_TABLE(of, bone_pinmux_helper_of_match);
+ 
++struct pinmux_helper_data {
++	struct pinctrl *pinctrl;
++	char *selected_state_name;
++};
++
++static ssize_t pinmux_helper_show_state(struct device *dev,
++		struct device_attribute *attr, char *buf)
++{
++	struct platform_device *pdev = to_platform_device(dev);
++	struct pinmux_helper_data *data = platform_get_drvdata(pdev);
++	const char *name;
++	int len;
++
++	name = data->selected_state_name;
++	if (name == NULL || strlen(name) == 0)
++		name = "none";
++	return sprintf(buf, "%s\n", name);
++}
++
++static ssize_t pinmux_helper_store_state(struct device *dev,
++		struct device_attribute *attr, const char *buf, size_t count)
++{
++	struct platform_device *pdev = to_platform_device(dev);
++	struct pinmux_helper_data *data = platform_get_drvdata(pdev);
++	struct pinctrl_state *state;
++	char *state_name;
++	char *s;
++	int err;
++
++	/* duplicate (as a null terminated string) */
++	state_name = devm_kzalloc(dev, count + 1, GFP_KERNEL);
++	if (state_name == NULL)
++		return -ENOMEM;
++	memcpy(state_name, buf, count);
++	state_name[count] = '\0';
++
++	/* and chop off newline */
++	s = strchr(state_name, '\n');
++	if (s != NULL)
++		*s = '\0';
++
++	/* try to select default state at first (if it exists) */
++	state = pinctrl_lookup_state(data->pinctrl, state_name);
++	if (!IS_ERR(state)) {
++		err = pinctrl_select_state(data->pinctrl, state);
++		if (err != 0)
++			dev_err(dev, "Failed to select state %s\n",
++					state_name);
++	} else {
++		dev_err(dev, "Failed to find state %s\n", state_name);
++		err = PTR_RET(state);
++	}
++
++	if (err == 0) {
++		devm_kfree(dev, data->selected_state_name);
++		data->selected_state_name = state_name;
++	}
++
++	return err ? err : count;
++}
++
++static DEVICE_ATTR(state, S_IWUSR | S_IRUGO,
++		   pinmux_helper_show_state, pinmux_helper_store_state);
++
++static struct attribute *pinmux_helper_attributes[] = {
++	&dev_attr_state.attr,
++	NULL
++};
++
++static const struct attribute_group pinmux_helper_attr_group = {
++	.attrs = pinmux_helper_attributes,
++};
++
+ static int bone_pinmux_helper_probe(struct platform_device *pdev)
+ {
+-	struct pinctrl *pinctrl;
++	struct device *dev = &pdev->dev;
++	struct pinmux_helper_data *data;
++	struct pinctrl_state *state;
++	char *state_name;
++	int err;
++
++	data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
++	if (data == NULL) {
++		dev_err(dev, "Failed to allocate data\n");
++		err = -ENOMEM;
++		goto err_no_mem;
++	}
++	state_name = devm_kzalloc(dev, strlen(PINCTRL_STATE_DEFAULT) + 1,
++			GFP_KERNEL);
++	if (state_name == NULL) {
++		dev_err(dev, "Failed to allocate state name\n");
++		err = -ENOMEM;
++		goto err_no_mem;
++	}
++	data->selected_state_name = state_name;
++	strcpy(data->selected_state_name, PINCTRL_STATE_DEFAULT);
+ 
+-	pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
++	platform_set_drvdata(pdev, data);
+ 
+-	/* don't bother with anything */
+-	return PTR_RET(pinctrl);
++	data->pinctrl = devm_pinctrl_get(dev);
++	if (IS_ERR(data->pinctrl)) {
++		dev_err(dev, "Failed to get pinctrl\n");
++		err = PTR_RET(data->pinctrl);
++		goto err_no_pinctrl;
++	}
++
++	/* try to select default state at first (if it exists) */
++	state = pinctrl_lookup_state(data->pinctrl,
++			data->selected_state_name);
++	if (!IS_ERR(state)) {
++		err = pinctrl_select_state(data->pinctrl, state);
++		if (err != 0) {
++			dev_err(dev, "Failed to select default state\n");
++			goto err_no_state;
++		}
++	} else {
++		data->selected_state_name = '\0';
++	}
++
++	/* Register sysfs hooks */
++	err = sysfs_create_group(&dev->kobj, &pinmux_helper_attr_group);
++	if (err) {
++		dev_err(dev, "Failed to create sysfs group\n");
++		goto err_no_sysfs;
++	}
++
++	return 0;
++
++err_no_sysfs:
++err_no_state:
++	devm_pinctrl_put(data->pinctrl);
++err_no_pinctrl:
++	devm_kfree(dev, data);
++err_no_mem:
++	return err;
+ }
+ 
+ static int bone_pinmux_helper_remove(struct platform_device *pdev)
+ {
+-	/* nothing more is needed */
++	struct pinmux_helper_data *data = platform_get_drvdata(pdev);
++	struct device *dev = &pdev->dev;
++
++	sysfs_remove_group(&dev->kobj, &pinmux_helper_attr_group);
++	devm_pinctrl_put(data->pinctrl);
++	devm_kfree(dev, data);
++
+ 	return 0;
+ }
+ 
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0003-pinmux-helper-Switch-to-using-kmalloc.patch b/patches/beaglebone/pinmux-helper/0003-pinmux-helper-Switch-to-using-kmalloc.patch
new file mode 100644
index 000000000..2a1f5b73f
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0003-pinmux-helper-Switch-to-using-kmalloc.patch
@@ -0,0 +1,68 @@
+From 2cdb42d1b22ea345b515b9305fb5f3fef5b5393a Mon Sep 17 00:00:00 2001
+From: Pantelis Antoniou <panto@antoniou-consulting.com>
+Date: Thu, 7 Mar 2013 09:54:38 +0200
+Subject: [PATCH 03/13] pinmux-helper: Switch to using kmalloc
+
+devm_kfree warned out... why? no idea.
+---
+ drivers/misc/cape/beaglebone/bone-pinmux-helper.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+index 84058e1..5074365 100644
+--- a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
++++ b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+@@ -26,6 +26,7 @@
+ #include <linux/of.h>
+ #include <linux/of_device.h>
+ #include <linux/of_gpio.h>
++#include <linux/slab.h>
+ #include <linux/pinctrl/pinctrl.h>
+ #include <linux/pinctrl/pinmux.h>
+ #include <linux/pinctrl/consumer.h>
+@@ -49,7 +50,6 @@ static ssize_t pinmux_helper_show_state(struct device *dev,
+ 	struct platform_device *pdev = to_platform_device(dev);
+ 	struct pinmux_helper_data *data = platform_get_drvdata(pdev);
+ 	const char *name;
+-	int len;
+ 
+ 	name = data->selected_state_name;
+ 	if (name == NULL || strlen(name) == 0)
+@@ -68,7 +68,7 @@ static ssize_t pinmux_helper_store_state(struct device *dev,
+ 	int err;
+ 
+ 	/* duplicate (as a null terminated string) */
+-	state_name = devm_kzalloc(dev, count + 1, GFP_KERNEL);
++	state_name = kmalloc(count + 1, GFP_KERNEL);
+ 	if (state_name == NULL)
+ 		return -ENOMEM;
+ 	memcpy(state_name, buf, count);
+@@ -92,7 +92,7 @@ static ssize_t pinmux_helper_store_state(struct device *dev,
+ 	}
+ 
+ 	if (err == 0) {
+-		devm_kfree(dev, data->selected_state_name);
++		kfree(data->selected_state_name);
+ 		data->selected_state_name = state_name;
+ 	}
+ 
+@@ -125,7 +125,7 @@ static int bone_pinmux_helper_probe(struct platform_device *pdev)
+ 		err = -ENOMEM;
+ 		goto err_no_mem;
+ 	}
+-	state_name = devm_kzalloc(dev, strlen(PINCTRL_STATE_DEFAULT) + 1,
++	state_name = kmalloc(strlen(PINCTRL_STATE_DEFAULT) + 1,
+ 			GFP_KERNEL);
+ 	if (state_name == NULL) {
+ 		dev_err(dev, "Failed to allocate state name\n");
+@@ -181,6 +181,7 @@ static int bone_pinmux_helper_remove(struct platform_device *pdev)
+ 	struct device *dev = &pdev->dev;
+ 
+ 	sysfs_remove_group(&dev->kobj, &pinmux_helper_attr_group);
++	kfree(data->selected_state_name);
+ 	devm_pinctrl_put(data->pinctrl);
+ 	devm_kfree(dev, data);
+ 
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0004-gpio-Introduce-GPIO-OF-helper.patch b/patches/beaglebone/pinmux-helper/0004-gpio-Introduce-GPIO-OF-helper.patch
new file mode 100644
index 000000000..d51dfa3c6
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0004-gpio-Introduce-GPIO-OF-helper.patch
@@ -0,0 +1,474 @@
+From 26e5a4e7da7ee4906ffca50b01fe9d4221757079 Mon Sep 17 00:00:00 2001
+From: Pantelis Antoniou <panto@antoniou-consulting.com>
+Date: Tue, 4 Jun 2013 16:23:59 +0300
+Subject: [PATCH 04/13] gpio: Introduce GPIO OF helper
+
+A gpio OF helper driver that allows configuration to be done via
+DT.
+---
+ drivers/gpio/Kconfig          |  14 ++
+ drivers/gpio/Makefile         |   1 +
+ drivers/gpio/gpio-of-helper.c | 414 ++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 429 insertions(+)
+ create mode 100644 drivers/gpio/gpio-of-helper.c
+
+diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
+index caefe80..9cab8f6 100644
+--- a/drivers/gpio/Kconfig
++++ b/drivers/gpio/Kconfig
+@@ -85,6 +85,20 @@ config GPIO_SYSFS
+ 	  Kernel drivers may also request that a particular GPIO be
+ 	  exported to userspace; this can be useful when debugging.
+ 
++config GPIO_OF_HELPER
++	bool "GPIO OF helper device"
++	depends on OF_GPIO && EXPERIMENTAL
++	help
++	  Say Y here to add an GPIO OF helper driver
++
++	  Allows you specify a GPIO helper based on OF
++	  which allows simple export of GPIO functionality
++	  in user-space.
++
++	  Features include, value set/get, direction control,
++	  interrupt/value change poll support, event counting
++	  and others.
++
+ config GPIO_GENERIC
+ 	tristate
+ 
+diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
+index f71bb97..a527a82 100644
+--- a/drivers/gpio/Makefile
++++ b/drivers/gpio/Makefile
+@@ -8,6 +8,7 @@ obj-$(CONFIG_GPIOLIB)		+= gpiolib-legacy.o
+ obj-$(CONFIG_OF_GPIO)		+= gpiolib-of.o
+ obj-$(CONFIG_GPIO_SYSFS)	+= gpiolib-sysfs.o
+ obj-$(CONFIG_GPIO_ACPI)		+= gpiolib-acpi.o
++obj-$(CONFIG_GPIO_OF_HELPER)	+= gpio-of-helper.o
+ 
+ # Device drivers. Generally keep list sorted alphabetically
+ obj-$(CONFIG_GPIO_GENERIC)	+= gpio-generic.o
+diff --git a/drivers/gpio/gpio-of-helper.c b/drivers/gpio/gpio-of-helper.c
+new file mode 100644
+index 0000000..16a607f
+--- /dev/null
++++ b/drivers/gpio/gpio-of-helper.c
+@@ -0,0 +1,414 @@
++/*
++ * GPIO OF based helper
++ *
++ * A simple DT based driver to provide access to GPIO functionality
++ * to user-space via sysfs.
++ *
++ * Copyright (C) 2013 Pantelis Antoniou <panto@antoniou-consulting.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/string.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++#include <linux/bitops.h>
++#include <linux/err.h>
++#include <linux/of.h>
++#include <linux/of_device.h>
++#include <linux/of_gpio.h>
++#include <linux/pinctrl/pinctrl.h>
++#include <linux/pinctrl/pinmux.h>
++#include <linux/pinctrl/consumer.h>
++#include <linux/atomic.h>
++#include <linux/clk.h>
++#include <linux/interrupt.h>
++#include <linux/math64.h>
++#include <linux/atomic.h>
++#include <linux/idr.h>
++
++/* fwd decl. */
++struct gpio_of_helper_info;
++
++enum gpio_type {
++	GPIO_TYPE_INPUT = 0,
++	GPIO_TYPE_OUTPUT = 1,
++};
++
++struct gpio_of_entry {
++	int id;
++	struct gpio_of_helper_info *info;
++	struct device_node *node;
++	enum gpio_type type;
++	int gpio;
++	enum of_gpio_flags gpio_flags;
++	int irq;
++	const char *name;
++	atomic64_t counter;
++	unsigned int count_flags;
++#define COUNT_RISING_EDGE	(1 << 0)
++#define COUNT_FALLING_EDGE	(1 << 1)
++};
++
++struct gpio_of_helper_info {
++	struct platform_device *pdev;
++	struct idr idr;
++};
++
++static const struct of_device_id gpio_of_helper_of_match[] = {
++	{
++		.compatible = "gpio-of-helper",
++	},
++	{ },
++};
++MODULE_DEVICE_TABLE(of, gpio_of_helper_of_match);
++
++static ssize_t gpio_of_helper_show_status(struct device *dev,
++				struct device_attribute *attr, char *buf)
++{
++	struct platform_device *pdev = to_platform_device(dev);
++	struct gpio_of_helper_info *info = platform_get_drvdata(pdev);
++	struct gpio_of_entry *entry;
++	char *p, *e;
++	int id, n;
++
++	p = buf;
++	e = p + PAGE_SIZE;
++	n = 0;
++	idr_for_each_entry(&info->idr, entry, id) {
++		switch (entry->type) {
++		case GPIO_TYPE_INPUT:
++			n = snprintf(p, e - p, "%2d %-24s %3d %-3s %llu\n",
++				entry->id, entry->name, entry->gpio, "IN",
++				(unsigned long long)
++					atomic64_read(&entry->counter));
++			break;
++		case GPIO_TYPE_OUTPUT:
++			n = snprintf(p, e - p, "%2d %-24s %3d %-3s\n",
++				entry->id, entry->name, entry->gpio, "OUT");
++			break;
++		}
++		p += n;
++	}
++
++	return p - buf;
++}
++
++static DEVICE_ATTR(status, S_IRUGO,
++		gpio_of_helper_show_status, NULL);
++
++static irqreturn_t gpio_of_helper_handler(int irq, void *ptr)
++{
++	struct gpio_of_entry *entry = ptr;
++
++	/* caution - low speed interfaces only! */
++	atomic64_inc(&entry->counter);
++
++	return IRQ_HANDLED;
++}
++
++static struct gpio_of_entry *
++gpio_of_entry_create(struct gpio_of_helper_info *info,
++		struct device_node *node)
++{
++	struct platform_device *pdev = info->pdev;
++	struct device *dev = &pdev->dev;
++	struct gpio_of_entry *entry;
++	int err, gpio, irq;
++	unsigned int req_flags, count_flags, irq_flags;
++	enum gpio_type type;
++	enum of_gpio_flags gpio_flags;
++	const char *name;
++
++	/* get the type of the node first */
++	if (of_property_read_bool(node, "input"))
++		type = GPIO_TYPE_INPUT;
++	else if (of_property_read_bool(node, "output"))
++		type = GPIO_TYPE_OUTPUT;
++	else {
++		dev_err(dev, "Not valid gpio node type\n");
++		err = -EINVAL;
++		goto err_bad_node;
++	}
++
++	/* get the name */
++	err = of_property_read_string(node, "gpio-name", &name);
++	if (err != 0) {
++		dev_err(dev, "Failed to get name property\n");
++		goto err_bad_node;
++	}
++
++	err = of_get_named_gpio_flags(node, "gpio", 0, &gpio_flags);
++	if (IS_ERR_VALUE(err)) {
++		dev_err(dev, "Failed to get gpio property of '%s'\n", name);
++		goto err_bad_node;
++	}
++	gpio = err;
++
++	req_flags = 0;
++	count_flags = 0;
++
++	/* set the request flags */
++	switch (type) {
++		case GPIO_TYPE_INPUT:
++			req_flags = GPIOF_DIR_IN | GPIOF_EXPORT;
++			if (of_property_read_bool(node, "count-falling-edge"))
++				count_flags |= COUNT_FALLING_EDGE;
++			if (of_property_read_bool(node, "count-rising-edge"))
++				count_flags |= COUNT_RISING_EDGE;
++			break;
++		case GPIO_TYPE_OUTPUT:
++			req_flags = GPIOF_DIR_OUT | GPIOF_EXPORT;
++			if (of_property_read_bool(node, "init-high"))
++				req_flags |= GPIOF_OUT_INIT_HIGH;
++			else if (of_property_read_bool(node, "init-low"))
++				req_flags |= GPIOF_OUT_INIT_LOW;
++			break;
++	}
++
++	/* request the gpio */
++	err = devm_gpio_request_one(dev, gpio, req_flags, name);
++	if (err != 0) {
++		dev_err(dev, "Failed to request gpio '%s'\n", name);
++		goto err_bad_node;
++	}
++
++	irq = -1;
++	irq_flags = 0;
++
++	/* counter mode requested - need an interrupt */
++	if (count_flags != 0) {
++		irq = gpio_to_irq(gpio);
++		if (IS_ERR_VALUE(irq)) {
++			dev_err(dev, "Failed to request gpio '%s'\n", name);
++			goto err_bad_node;
++		}
++
++		if (count_flags & COUNT_RISING_EDGE)
++			irq_flags |= IRQF_TRIGGER_RISING;
++		if (count_flags & COUNT_FALLING_EDGE)
++			irq_flags |= IRQF_TRIGGER_FALLING;
++	}
++
++	if (!idr_pre_get(&info->idr, GFP_KERNEL)) {
++		dev_err(dev, "Failed on idr_pre_get of '%s'\n", name);
++		err = -ENOMEM;
++		goto err_no_mem;
++	}
++
++	entry = devm_kzalloc(dev, sizeof(*entry), GFP_KERNEL);
++	if (entry == NULL) {
++		dev_err(dev, "Failed to allocate gpio entry of '%s'\n", name);
++		err = -ENOMEM;
++		goto err_no_mem;
++	}
++
++	entry->id = -1;
++	entry->info = info;
++	entry->node = of_node_get(node);	/* get node reference */
++	entry->type = type;
++	entry->gpio = gpio;
++	entry->gpio_flags = gpio_flags;
++	entry->irq = irq;
++	entry->name = name;
++
++	/* interrupt enable is last thing done */
++	if (irq >= 0) {
++		atomic64_set(&entry->counter, 0);
++		entry->count_flags = count_flags;
++		err = devm_request_irq(dev, irq, gpio_of_helper_handler,
++				irq_flags, name, entry);
++		if (err != 0) {
++			dev_err(dev, "Failed to request irq of '%s'\n", name);
++			goto err_no_irq;
++		}
++	}
++
++	/* all done; insert */
++	err = idr_get_new(&info->idr, entry, &entry->id);
++	if (IS_ERR_VALUE(err)) {
++		dev_err(dev, "Failed to idr_get_new  of '%s'\n", name);
++		goto err_fail_idr;
++	}
++
++	dev_info(dev, "Allocated GPIO id=%d\n", entry->id);
++
++	return entry;
++
++err_fail_idr:
++	/* nothing to do */
++err_no_irq:
++	/* release node ref */
++	of_node_put(node);
++	/* nothing else needs to be done, devres handles it */
++err_no_mem:
++err_bad_node:
++	return ERR_PTR(err);
++}
++
++static int gpio_of_entry_destroy(struct gpio_of_entry *entry)
++{
++	struct gpio_of_helper_info *info = entry->info;
++	struct platform_device *pdev = info->pdev;
++	struct device *dev = &pdev->dev;
++
++	dev_info(dev, "Destroying GPIO id=%d\n", entry->id);
++
++	/* remove from the IDR */
++	idr_remove(&info->idr, entry->id);
++
++	/* remove node ref */
++	of_node_put(entry->node);
++
++	/* free gpio */
++	devm_gpio_free(dev, entry->gpio);
++
++	/* gree irq */
++	if (entry->irq >= 0)
++		devm_free_irq(dev, entry->irq, entry);
++
++	/* and free */
++	devm_kfree(dev, entry);
++
++	return 0;
++}
++
++static int gpio_of_helper_probe(struct platform_device *pdev)
++{
++	struct device *dev = &pdev->dev;
++	struct gpio_of_helper_info *info;
++	struct gpio_of_entry *entry;
++	struct device_node *pnode = pdev->dev.of_node;
++	struct device_node *cnode;
++	struct pinctrl *pinctrl;
++	int err;
++
++	/* we only support OF */
++	if (pnode == NULL) {
++		dev_err(&pdev->dev, "No platform of_node!\n");
++		return -ENODEV;
++	}
++
++	pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
++	if (IS_ERR(pinctrl)) {
++		/* special handling for probe defer */
++		if (PTR_ERR(pinctrl) == -EPROBE_DEFER)
++			return -EPROBE_DEFER;
++
++		dev_warn(&pdev->dev,
++			"pins are not configured from the driver\n");
++	}
++
++	info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
++	if (info == NULL) {
++		dev_err(&pdev->dev, "Failed to allocate info\n");
++		err = -ENOMEM;
++		goto err_no_mem;
++	}
++	platform_set_drvdata(pdev, info);
++	info->pdev = pdev;
++
++	idr_init(&info->idr);
++
++	err = device_create_file(dev, &dev_attr_status);
++	if (err != 0) {
++		dev_err(dev, "Failed to create status sysfs attribute\n");
++		goto err_no_sysfs;
++	}
++
++	for_each_child_of_node(pnode, cnode) {
++
++		entry = gpio_of_entry_create(info, cnode);
++		if (IS_ERR_OR_NULL(entry)) {
++			dev_err(dev, "Failed to create gpio entry\n");
++			err = PTR_ERR(entry);
++			goto err_fail_entry;
++		}
++	}
++
++	dev_info(&pdev->dev, "ready\n");
++
++	return 0;
++err_fail_entry:
++	device_remove_file(&pdev->dev, &dev_attr_status);
++err_no_sysfs:
++err_no_mem:
++	return err;
++}
++
++static int gpio_of_helper_remove(struct platform_device *pdev)
++{
++	struct gpio_of_helper_info *info = platform_get_drvdata(pdev);
++	struct gpio_of_entry *entry;
++	int id;
++
++	dev_info(&pdev->dev, "removing\n");
++
++	device_remove_file(&pdev->dev, &dev_attr_status);
++
++	id = 0;
++	idr_for_each_entry(&info->idr, entry, id) {
++		/* destroy each and every one */
++		gpio_of_entry_destroy(entry);
++	}
++
++	return 0;
++}
++
++#ifdef CONFIG_PM
++#ifdef CONFIG_PM_RUNTIME
++static int gpio_of_helper_runtime_suspend(struct device *dev)
++{
++	/* place holder */
++	return 0;
++}
++
++static int gpio_of_helper_runtime_resume(struct device *dev)
++{
++	/* place holder */
++	return 0;
++}
++#endif /* CONFIG_PM_RUNTIME */
++
++static struct dev_pm_ops gpio_of_helper_pm_ops = {
++	SET_RUNTIME_PM_OPS(gpio_of_helper_runtime_suspend,
++			   gpio_of_helper_runtime_resume, NULL)
++};
++#define GPIO_OF_HELPER_PM_OPS (&gpio_of_helper_pm_ops)
++#else
++#define GPIO_OF_HELPER_PM_OPS NULL
++#endif /* CONFIG_PM */
++
++struct platform_driver gpio_of_helper_driver = {
++	.probe		= gpio_of_helper_probe,
++	.remove		= gpio_of_helper_remove,
++	.driver = {
++		.name		= "gpio-of-helper",
++		.owner		= THIS_MODULE,
++		.pm		= GPIO_OF_HELPER_PM_OPS,
++		.of_match_table	= gpio_of_helper_of_match,
++	},
++};
++
++module_platform_driver(gpio_of_helper_driver);
++
++MODULE_AUTHOR("Pantelis Antoniou <panto@antoniou-consulting.com>");
++MODULE_DESCRIPTION("GPIO OF Helper driver");
++MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:gpio-of-helper");
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0005-Add-dir-changeable-property-to-gpio-of-helper.patch b/patches/beaglebone/pinmux-helper/0005-Add-dir-changeable-property-to-gpio-of-helper.patch
new file mode 100644
index 000000000..f023f7146
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0005-Add-dir-changeable-property-to-gpio-of-helper.patch
@@ -0,0 +1,26 @@
+From acafdaad814acbe53763663ae01b6029c418f25e Mon Sep 17 00:00:00 2001
+From: Charles Steinkuehler <charles@steinkuehler.net>
+Date: Sun, 26 Jan 2014 16:17:09 +0100
+Subject: [PATCH 05/13] Add dir-changeable property to gpio-of-helper
+
+Signed-off-by: Charles Steinkuehler <charles@steinkuehler.net>
+---
+ drivers/gpio/gpio-of-helper.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/gpio/gpio-of-helper.c b/drivers/gpio/gpio-of-helper.c
+index 16a607f..1c289b2 100644
+--- a/drivers/gpio/gpio-of-helper.c
++++ b/drivers/gpio/gpio-of-helper.c
+@@ -181,6 +181,8 @@ gpio_of_entry_create(struct gpio_of_helper_info *info,
+ 				req_flags |= GPIOF_OUT_INIT_LOW;
+ 			break;
+ 	}
++	if (of_property_read_bool(node, "dir-changeable"))
++		req_flags |= GPIOF_EXPORT_CHANGEABLE;
+ 
+ 	/* request the gpio */
+ 	err = devm_gpio_request_one(dev, gpio, req_flags, name);
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0006-am33xx.dtsi-add-ocp-label.patch b/patches/beaglebone/pinmux-helper/0006-am33xx.dtsi-add-ocp-label.patch
new file mode 100644
index 000000000..823156dc0
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0006-am33xx.dtsi-add-ocp-label.patch
@@ -0,0 +1,26 @@
+From c09f160a730c04b910021185336499e1a3e21b38 Mon Sep 17 00:00:00 2001
+From: Jason Kridner <jdk@ti.com>
+Date: Thu, 4 Sep 2014 18:45:39 +0000
+Subject: [PATCH 06/13] am33xx.dtsi: add ocp label
+
+Signed-off-by: Jason Kridner <jdk@ti.com>
+---
+ arch/arm/boot/dts/am33xx.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
+index ebc3168..208bb9b 100644
+--- a/arch/arm/boot/dts/am33xx.dtsi
++++ b/arch/arm/boot/dts/am33xx.dtsi
+@@ -90,7 +90,7 @@
+ 	 * for the moment, just use a fake OCP bus entry to represent
+ 	 * the whole bus hierarchy.
+ 	 */
+-	ocp {
++	ocp: ocp {
+ 		compatible = "simple-bus";
+ 		#address-cells = <1>;
+ 		#size-cells = <1>;
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0007-beaglebone-added-expansion-header-to-dtb.patch b/patches/beaglebone/pinmux-helper/0007-beaglebone-added-expansion-header-to-dtb.patch
new file mode 100644
index 000000000..6e04469f2
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0007-beaglebone-added-expansion-header-to-dtb.patch
@@ -0,0 +1,1351 @@
+From d543a5ca914b5c2d196332baf44c46f394278458 Mon Sep 17 00:00:00 2001
+From: Jason Kridner <jdk@ti.com>
+Date: Thu, 4 Sep 2014 18:53:16 +0000
+Subject: [PATCH 07/13] beaglebone: added expansion header to dtb
+
+This adds gpio and pinmux helpers to the majority of available expansion header pins
+based on the cape-universal work from Charles Steinkuehler making them userspace
+configurable. This is not a substitute for Capemgr as it doesn't perform the
+configuration based on cape detection, nor does it enable dynamic configuration of
+all types of peripherals that could be on a cape. It does, however, enable many
+developers to rapidly experiment with a lesser degree of complexity.
+
+Derived from:
+https://github.com/cdsteinkuehler/beaglebone-universal-io/blob/52461b52ef3203e648399c16c7e160c848a04b5c$
+
+Signed-off-by: Jason Kridner <jdk@ti.com>
+Cc: Charles Steinkuehler <charles@steinkuehler.net>
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ .../arm/boot/dts/am335x-bone-common-universal.dtsi | 1319 ++++++++++++++++++++
+ 1 file changed, 1319 insertions(+)
+ create mode 100644 arch/arm/boot/dts/am335x-bone-common-universal.dtsi
+
+diff --git a/arch/arm/boot/dts/am335x-bone-common-universal.dtsi b/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
+new file mode 100644
+index 0000000..8bddcd2
+--- /dev/null
++++ b/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
+@@ -0,0 +1,1319 @@
++/*
++ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++&am33xx_pinmux {
++	/************************/
++	/* P8 Header            */
++	/************************/
++
++	/* P8_01                GND     */
++	/* P8_02                GND     */
++	/* P8_03 (ZCZ ball R9 ) emmc    */
++	/* P8_04 (ZCZ ball T9 ) emmc    */
++	/* P8_05 (ZCZ ball R8 ) emmc    */
++	/* P8_06 (ZCZ ball T8 ) emmc    */
++
++	/* P8_07 (ZCZ ball R7 ) */
++	P8_07_default_pin: pinmux_P8_07_default_pin {
++		pinctrl-single,pins = <0x090  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_07_gpio_pin: pinmux_P8_07_gpio_pin {
++		pinctrl-single,pins = <0x090  0x2F>; };     /* Mode 7, RxActive */
++	P8_07_gpio_pu_pin: pinmux_P8_07_gpio_pu_pin {
++		pinctrl-single,pins = <0x090  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_07_gpio_pd_pin: pinmux_P8_07_gpio_pd_pin {
++		pinctrl-single,pins = <0x090  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_07_timer_pin: pinmux_P8_07_timer_pin {
++		pinctrl-single,pins = <0x090  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++
++	/* P8_08 (ZCZ ball T7 ) */
++	P8_08_default_pin: pinmux_P8_08_default_pin {
++		pinctrl-single,pins = <0x094  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_08_gpio_pin: pinmux_P8_08_gpio_pin {
++		pinctrl-single,pins = <0x094  0x2F>; };     /* Mode 7, RxActive */
++	P8_08_gpio_pu_pin: pinmux_P8_08_gpio_pu_pin {
++		pinctrl-single,pins = <0x094  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_08_gpio_pd_pin: pinmux_P8_08_gpio_pd_pin {
++		pinctrl-single,pins = <0x094  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_08_timer_pin: pinmux_P8_08_timer_pin {
++		pinctrl-single,pins = <0x094  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++
++	/* P8_09 (ZCZ ball T6 ) */
++	P8_09_default_pin: pinmux_P8_09_default_pin {
++		pinctrl-single,pins = <0x09c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_09_gpio_pin: pinmux_P8_09_gpio_pin {
++		pinctrl-single,pins = <0x09c  0x2F>; };     /* Mode 7, RxActive */
++	P8_09_gpio_pu_pin: pinmux_P8_09_gpio_pu_pin {
++		pinctrl-single,pins = <0x09c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_09_gpio_pd_pin: pinmux_P8_09_gpio_pd_pin {
++		pinctrl-single,pins = <0x09c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_09_timer_pin: pinmux_P8_09_timer_pin {
++		pinctrl-single,pins = <0x09c  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++
++	/* P8_10 (ZCZ ball U6 ) */
++	P8_10_default_pin: pinmux_P8_10_default_pin {
++		pinctrl-single,pins = <0x098  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_10_gpio_pin: pinmux_P8_10_gpio_pin {
++		pinctrl-single,pins = <0x098  0x2F>; };     /* Mode 7, RxActive */
++	P8_10_gpio_pu_pin: pinmux_P8_10_gpio_pu_pin {
++		pinctrl-single,pins = <0x098  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_10_gpio_pd_pin: pinmux_P8_10_gpio_pd_pin {
++		pinctrl-single,pins = <0x098  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_10_timer_pin: pinmux_P8_10_timer_pin {
++		pinctrl-single,pins = <0x098  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++
++	/* P8_11 (ZCZ ball R12) */
++	P8_11_default_pin: pinmux_P8_11_default_pin {
++		pinctrl-single,pins = <0x034  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_11_gpio_pin: pinmux_P8_11_gpio_pin {
++		pinctrl-single,pins = <0x034  0x2F>; };     /* Mode 7, RxActive */
++	P8_11_gpio_pu_pin: pinmux_P8_11_gpio_pu_pin {
++		pinctrl-single,pins = <0x034  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_11_gpio_pd_pin: pinmux_P8_11_gpio_pd_pin {
++		pinctrl-single,pins = <0x034  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_11_pruout_pin: pinmux_P8_11_pruout_pin {
++		pinctrl-single,pins = <0x034  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_11_qep_pin: pinmux_P8_11_qep_pin {
++		pinctrl-single,pins = <0x034  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++
++	/* P8_12 (ZCZ ball T12) */
++	P8_12_default_pin: pinmux_P8_12_default_pin {
++		pinctrl-single,pins = <0x030  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_12_gpio_pin: pinmux_P8_12_gpio_pin {
++		pinctrl-single,pins = <0x030  0x2F>; };     /* Mode 7, RxActive */
++	P8_12_gpio_pu_pin: pinmux_P8_12_gpio_pu_pin {
++		pinctrl-single,pins = <0x030  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_12_gpio_pd_pin: pinmux_P8_12_gpio_pd_pin {
++		pinctrl-single,pins = <0x030  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_12_pruout_pin: pinmux_P8_12_pruout_pin {
++		pinctrl-single,pins = <0x030  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_12_qep_pin: pinmux_P8_12_qep_pin {
++		pinctrl-single,pins = <0x030  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++
++	/* P8_13 (ZCZ ball T10) */
++	P8_13_default_pin: pinmux_P8_13_default_pin {
++		pinctrl-single,pins = <0x024  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_13_gpio_pin: pinmux_P8_13_gpio_pin {
++		pinctrl-single,pins = <0x024  0x2F>; };     /* Mode 7, RxActive */
++	P8_13_gpio_pu_pin: pinmux_P8_13_gpio_pu_pin {
++		pinctrl-single,pins = <0x024  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_13_gpio_pd_pin: pinmux_P8_13_gpio_pd_pin {
++		pinctrl-single,pins = <0x024  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_13_pwm_pin: pinmux_P8_13_pwm_pin {
++		pinctrl-single,pins = <0x024  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++
++	/* P8_14 (ZCZ ball T11) */
++	P8_14_default_pin: pinmux_P8_14_default_pin {
++		pinctrl-single,pins = <0x028  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_14_gpio_pin: pinmux_P8_14_gpio_pin {
++		pinctrl-single,pins = <0x028  0x2F>; };     /* Mode 7, RxActive */
++	P8_14_gpio_pu_pin: pinmux_P8_14_gpio_pu_pin {
++		pinctrl-single,pins = <0x028  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_14_gpio_pd_pin: pinmux_P8_14_gpio_pd_pin {
++		pinctrl-single,pins = <0x028  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_14_pwm_pin: pinmux_P8_14_pwm_pin {
++		pinctrl-single,pins = <0x028  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++
++	/* P8_15 (ZCZ ball U13) */
++	P8_15_default_pin: pinmux_P8_15_default_pin {
++		pinctrl-single,pins = <0x03c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_15_gpio_pin: pinmux_P8_15_gpio_pin {
++		pinctrl-single,pins = <0x03c  0x2F>; };     /* Mode 7, RxActive */
++	P8_15_gpio_pu_pin: pinmux_P8_15_gpio_pu_pin {
++		pinctrl-single,pins = <0x03c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_15_gpio_pd_pin: pinmux_P8_15_gpio_pd_pin {
++		pinctrl-single,pins = <0x03c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_15_pruin_pin: pinmux_P8_15_pruin_pin {
++		pinctrl-single,pins = <0x03c  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_15_qep_pin: pinmux_P8_15_qep_pin {
++		pinctrl-single,pins = <0x03c  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++
++	/* P8_16 (ZCZ ball V13) */
++	P8_16_default_pin: pinmux_P8_16_default_pin {
++		pinctrl-single,pins = <0x038  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_16_gpio_pin: pinmux_P8_16_gpio_pin {
++		pinctrl-single,pins = <0x038  0x2F>; };     /* Mode 7, RxActive */
++	P8_16_gpio_pu_pin: pinmux_P8_16_gpio_pu_pin {
++		pinctrl-single,pins = <0x038  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_16_gpio_pd_pin: pinmux_P8_16_gpio_pd_pin {
++		pinctrl-single,pins = <0x038  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_16_pruin_pin: pinmux_P8_16_pruin_pin {
++		pinctrl-single,pins = <0x038  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_16_qep_pin: pinmux_P8_16_qep_pin {
++		pinctrl-single,pins = <0x038  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++
++	/* P8_17 (ZCZ ball U12) */
++	P8_17_default_pin: pinmux_P8_17_default_pin {
++		pinctrl-single,pins = <0x02c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_17_gpio_pin: pinmux_P8_17_gpio_pin {
++		pinctrl-single,pins = <0x02c  0x2F>; };     /* Mode 7, RxActive */
++	P8_17_gpio_pu_pin: pinmux_P8_17_gpio_pu_pin {
++		pinctrl-single,pins = <0x02c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_17_gpio_pd_pin: pinmux_P8_17_gpio_pd_pin {
++		pinctrl-single,pins = <0x02c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_17_pwm_pin: pinmux_P8_17_pwm_pin {
++		pinctrl-single,pins = <0x02c  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++
++	/* P8_18 (ZCZ ball V12) */
++	P8_18_default_pin: pinmux_P8_18_default_pin {
++		pinctrl-single,pins = <0x08c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_18_gpio_pin: pinmux_P8_18_gpio_pin {
++		pinctrl-single,pins = <0x08c  0x2F>; };     /* Mode 7, RxActive */
++	P8_18_gpio_pu_pin: pinmux_P8_18_gpio_pu_pin {
++		pinctrl-single,pins = <0x08c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_18_gpio_pd_pin: pinmux_P8_18_gpio_pd_pin {
++		pinctrl-single,pins = <0x08c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++
++	/* P8_19 (ZCZ ball U10) */
++	P8_19_default_pin: pinmux_P8_19_default_pin {
++		pinctrl-single,pins = <0x020  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_19_gpio_pin: pinmux_P8_19_gpio_pin {
++		pinctrl-single,pins = <0x020  0x2F>; };     /* Mode 7, RxActive */
++	P8_19_gpio_pu_pin: pinmux_P8_19_gpio_pu_pin {
++		pinctrl-single,pins = <0x020  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_19_gpio_pd_pin: pinmux_P8_19_gpio_pd_pin {
++		pinctrl-single,pins = <0x020  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_19_pwm_pin: pinmux_P8_19_pwm_pin {
++		pinctrl-single,pins = <0x020  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++
++	/* P8_20 (ZCZ ball V9 ) emmc    */
++	/* P8_21 (ZCZ ball U9 ) emmc    */
++	/* P8_22 (ZCZ ball V8 ) emmc    */
++	/* P8_23 (ZCZ ball U8 ) emmc    */
++	/* P8_24 (ZCZ ball V7 ) emmc    */
++	/* P8_25 (ZCZ ball U7 ) emmc    */
++
++	/* P8_26 (ZCZ ball V6 ) */
++	P8_26_default_pin: pinmux_P8_26_default_pin {
++		pinctrl-single,pins = <0x07c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_26_gpio_pin: pinmux_P8_26_gpio_pin {
++		pinctrl-single,pins = <0x07c  0x2F>; };     /* Mode 7, RxActive */
++	P8_26_gpio_pu_pin: pinmux_P8_26_gpio_pu_pin {
++		pinctrl-single,pins = <0x07c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_26_gpio_pd_pin: pinmux_P8_26_gpio_pd_pin {
++		pinctrl-single,pins = <0x07c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++
++	/* P8_27 (ZCZ ball U5 ) hdmi    */
++	/* P8_28 (ZCZ ball V5 ) hdmi    */
++	/* P8_29 (ZCZ ball R5 ) hdmi    */
++	/* P8_30 (ZCZ ball R6 ) hdmi    */
++	/* P8_31 (ZCZ ball V4 ) hdmi    */
++	/* P8_32 (ZCZ ball T5 ) hdmi    */
++	/* P8_33 (ZCZ ball V3 ) hdmi    */
++	/* P8_34 (ZCZ ball U4 ) hdmi    */
++	/* P8_35 (ZCZ ball V2 ) hdmi    */
++	/* P8_36 (ZCZ ball U3 ) hdmi    */
++	/* P8_37 (ZCZ ball U1 ) hdmi    */
++	/* P8_38 (ZCZ ball U2 ) hdmi    */
++	/* P8_39 (ZCZ ball T3 ) hdmi    */
++	/* P8_40 (ZCZ ball T4 ) hdmi    */
++	/* P8_41 (ZCZ ball T1 ) hdmi    */
++	/* P8_42 (ZCZ ball T2 ) hdmi    */
++	/* P8_43 (ZCZ ball R3 ) hdmi    */
++	/* P8_44 (ZCZ ball R4 ) hdmi    */
++	/* P8_45 (ZCZ ball R1 ) hdmi    */
++	/* P8_46 (ZCZ ball R2 ) hdmi    */
++
++	/************************/
++	/* P9 Header            */
++	/************************/
++
++	/* P9_01                GND     */
++	/* P9_02                GND     */
++	/* P9_03                3.3V    */
++	/* P9_04                3.3V    */
++	/* P9_05                VDD_5V  */
++	/* P9_06                VDD_5V  */
++	/* P9_07                SYS_5V  */
++	/* P9_08                SYS_5V  */
++	/* P9_09                PWR_BUT */
++	/* P9_10 (ZCZ ball A10) RESETn  */
++
++	/* P9_11 (ZCZ ball T17) */
++	P9_11_default_pin: pinmux_P9_11_default_pin {
++		pinctrl-single,pins = <0x070  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_11_gpio_pin: pinmux_P9_11_gpio_pin {
++		pinctrl-single,pins = <0x070  0x2F>; };     /* Mode 7, RxActive */
++	P9_11_gpio_pu_pin: pinmux_P9_11_gpio_pu_pin {
++		pinctrl-single,pins = <0x070  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_11_gpio_pd_pin: pinmux_P9_11_gpio_pd_pin {
++		pinctrl-single,pins = <0x070  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_11_uart_pin: pinmux_P9_11_uart_pin {
++		pinctrl-single,pins = <0x070  0x36>; };     /* Mode 6, Pull-Up, RxActive */
++
++	/* P9_12 (ZCZ ball U18) */
++	P9_12_default_pin: pinmux_P9_12_default_pin {
++		pinctrl-single,pins = <0x078  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_12_gpio_pin: pinmux_P9_12_gpio_pin {
++		pinctrl-single,pins = <0x078  0x2F>; };     /* Mode 7, RxActive */
++	P9_12_gpio_pu_pin: pinmux_P9_12_gpio_pu_pin {
++		pinctrl-single,pins = <0x078  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_12_gpio_pd_pin: pinmux_P9_12_gpio_pd_pin {
++		pinctrl-single,pins = <0x078  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++
++	/* P9_13 (ZCZ ball U17) */
++	P9_13_default_pin: pinmux_P9_13_default_pin {
++		pinctrl-single,pins = <0x074  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_13_gpio_pin: pinmux_P9_13_gpio_pin {
++		pinctrl-single,pins = <0x074  0x2F>; };     /* Mode 7, RxActive */
++	P9_13_gpio_pu_pin: pinmux_P9_13_gpio_pu_pin {
++		pinctrl-single,pins = <0x074  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_13_gpio_pd_pin: pinmux_P9_13_gpio_pd_pin {
++		pinctrl-single,pins = <0x074  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_13_uart_pin: pinmux_P9_13_uart_pin {
++		pinctrl-single,pins = <0x074  0x36>; };     /* Mode 6, Pull-Up, RxActive */
++
++	/* P9_14 (ZCZ ball U14) */
++	P9_14_default_pin: pinmux_P9_14_default_pin {
++		pinctrl-single,pins = <0x048  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_14_gpio_pin: pinmux_P9_14_gpio_pin {
++		pinctrl-single,pins = <0x048  0x2F>; };     /* Mode 7, RxActive */
++	P9_14_gpio_pu_pin: pinmux_P9_14_gpio_pu_pin {
++		pinctrl-single,pins = <0x048  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_14_gpio_pd_pin: pinmux_P9_14_gpio_pd_pin {
++		pinctrl-single,pins = <0x048  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_14_pwm_pin: pinmux_P9_14_pwm_pin {
++		pinctrl-single,pins = <0x048  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_15 (ZCZ ball R13) */
++	P9_15_default_pin: pinmux_P9_15_default_pin {
++		pinctrl-single,pins = <0x040  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_15_gpio_pin: pinmux_P9_15_gpio_pin {
++		pinctrl-single,pins = <0x040  0x2F>; };     /* Mode 7, RxActive */
++	P9_15_gpio_pu_pin: pinmux_P9_15_gpio_pu_pin {
++		pinctrl-single,pins = <0x040  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_15_gpio_pd_pin: pinmux_P9_15_gpio_pd_pin {
++		pinctrl-single,pins = <0x040  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_15_pwm_pin: pinmux_P9_15_pwm_pin {
++		pinctrl-single,pins = <0x040  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_16 (ZCZ ball T14) */
++	P9_16_default_pin: pinmux_P9_16_default_pin {
++		pinctrl-single,pins = <0x04c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_16_gpio_pin: pinmux_P9_16_gpio_pin {
++		pinctrl-single,pins = <0x04c  0x2F>; };     /* Mode 7, RxActive */
++	P9_16_gpio_pu_pin: pinmux_P9_16_gpio_pu_pin {
++		pinctrl-single,pins = <0x04c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_16_gpio_pd_pin: pinmux_P9_16_gpio_pd_pin {
++		pinctrl-single,pins = <0x04c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_16_pwm_pin: pinmux_P9_16_pwm_pin {
++		pinctrl-single,pins = <0x04c  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_17 (ZCZ ball A16) */
++	P9_17_default_pin: pinmux_P9_17_default_pin {
++		pinctrl-single,pins = <0x15c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_17_gpio_pin: pinmux_P9_17_gpio_pin {
++		pinctrl-single,pins = <0x15c  0x2F>; };     /* Mode 7, RxActive */
++	P9_17_gpio_pu_pin: pinmux_P9_17_gpio_pu_pin {
++		pinctrl-single,pins = <0x15c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_17_gpio_pd_pin: pinmux_P9_17_gpio_pd_pin {
++		pinctrl-single,pins = <0x15c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_17_spi_pin: pinmux_P9_17_spi_pin {
++		pinctrl-single,pins = <0x15c  0x30>; };     /* Mode 0, Pull-Up, RxActive */
++	P9_17_i2c_pin: pinmux_P9_17_i2c_pin {
++		pinctrl-single,pins = <0x15c  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++	P9_17_pwm_pin: pinmux_P9_17_pwm_pin {
++		pinctrl-single,pins = <0x15c  0x33>; };     /* Mode 3, Pull-Up, RxActive */
++
++	/* P9_18 (ZCZ ball B16) */
++	P9_18_default_pin: pinmux_P9_18_default_pin {
++		pinctrl-single,pins = <0x158  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_18_gpio_pin: pinmux_P9_18_gpio_pin {
++		pinctrl-single,pins = <0x158  0x2F>; };     /* Mode 7, RxActive */
++	P9_18_gpio_pu_pin: pinmux_P9_18_gpio_pu_pin {
++		pinctrl-single,pins = <0x158  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_18_gpio_pd_pin: pinmux_P9_18_gpio_pd_pin {
++		pinctrl-single,pins = <0x158  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_18_spi_pin: pinmux_P9_18_spi_pin {
++		pinctrl-single,pins = <0x158  0x30>; };     /* Mode 0, Pull-Up, RxActive */
++	P9_18_i2c_pin: pinmux_P9_18_i2c_pin {
++		pinctrl-single,pins = <0x158  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++	P9_18_pwm_pin: pinmux_P9_18_pwm_pin {
++		pinctrl-single,pins = <0x158  0x33>; };     /* Mode 3, Pull-Up, RxActive */
++
++	// Leave the cape I2C EEPROM bus alone
++	/* P9_19 (ZCZ ball D17) I2C     */
++	/* P9_20 (ZCZ ball D18) I2C     */
++
++	/* P9_21 (ZCZ ball B17) */
++	P9_21_default_pin: pinmux_P9_21_default_pin {
++		pinctrl-single,pins = <0x154  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_21_gpio_pin: pinmux_P9_21_gpio_pin {
++		pinctrl-single,pins = <0x154  0x2F>; };     /* Mode 7, RxActive */
++	P9_21_gpio_pu_pin: pinmux_P9_21_gpio_pu_pin {
++		pinctrl-single,pins = <0x154  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_21_gpio_pd_pin: pinmux_P9_21_gpio_pd_pin {
++		pinctrl-single,pins = <0x154  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_21_spi_pin: pinmux_P9_21_spi_pin {
++		pinctrl-single,pins = <0x154  0x30>; };     /* Mode 0, Pull-Up, RxActive */
++	P9_21_uart_pin: pinmux_P9_21_uart_pin {
++		pinctrl-single,pins = <0x154  0x31>; };     /* Mode 1, Pull-Up, RxActive */
++	P9_21_i2c_pin: pinmux_P9_21_i2c_pin {
++		pinctrl-single,pins = <0x154  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++	P9_21_pwm_pin: pinmux_P9_21_pwm_pin {
++		pinctrl-single,pins = <0x154  0x33>; };     /* Mode 3, Pull-Up, RxActive */
++
++	/* P9_22 (ZCZ ball A17) */
++	P9_22_default_pin: pinmux_P9_22_default_pin {
++		pinctrl-single,pins = <0x150  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_22_gpio_pin: pinmux_P9_22_gpio_pin {
++		pinctrl-single,pins = <0x150  0x2F>; };     /* Mode 7, RxActive */
++	P9_22_gpio_pu_pin: pinmux_P9_22_gpio_pu_pin {
++		pinctrl-single,pins = <0x150  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_22_gpio_pd_pin: pinmux_P9_22_gpio_pd_pin {
++		pinctrl-single,pins = <0x150  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_22_spi_pin: pinmux_P9_22_spi_pin {
++		pinctrl-single,pins = <0x150  0x30>; };     /* Mode 0, Pull-Up, RxActive */
++	P9_22_uart_pin: pinmux_P9_22_uart_pin {
++		pinctrl-single,pins = <0x150  0x31>; };     /* Mode 1, Pull-Up, RxActive */
++	P9_22_i2c_pin: pinmux_P9_22_i2c_pin {
++		pinctrl-single,pins = <0x150  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++	P9_22_pwm_pin: pinmux_P9_22_pwm_pin {
++		pinctrl-single,pins = <0x150  0x33>; };     /* Mode 3, Pull-Up, RxActive */
++
++	/* P9_23 (ZCZ ball V14) */
++	P9_23_default_pin: pinmux_P9_23_default_pin {
++		pinctrl-single,pins = <0x044  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_23_gpio_pin: pinmux_P9_23_gpio_pin {
++		pinctrl-single,pins = <0x044  0x2F>; };     /* Mode 7, RxActive */
++	P9_23_gpio_pu_pin: pinmux_P9_23_gpio_pu_pin {
++		pinctrl-single,pins = <0x044  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_23_gpio_pd_pin: pinmux_P9_23_gpio_pd_pin {
++		pinctrl-single,pins = <0x044  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_23_pwm_pin: pinmux_P9_23_pwm_pin {
++		pinctrl-single,pins = <0x044  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_24 (ZCZ ball D15) */
++	P9_24_default_pin: pinmux_P9_24_default_pin {
++		pinctrl-single,pins = <0x184  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_24_gpio_pin: pinmux_P9_24_gpio_pin {
++		pinctrl-single,pins = <0x184  0x2F>; };     /* Mode 7, RxActive */
++	P9_24_gpio_pu_pin: pinmux_P9_24_gpio_pu_pin {
++		pinctrl-single,pins = <0x184  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_24_gpio_pd_pin: pinmux_P9_24_gpio_pd_pin {
++		pinctrl-single,pins = <0x184  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_24_uart_pin: pinmux_P9_24_uart_pin {
++		pinctrl-single,pins = <0x184  0x30>; };     /* Mode 0, Pull-Up, RxActive */
++	P9_24_can_pin: pinmux_P9_24_can_pin {
++		pinctrl-single,pins = <0x184  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++	P9_24_i2c_pin: pinmux_P9_24_i2c_pin {
++		pinctrl-single,pins = <0x184  0x33>; };     /* Mode 3, Pull-Up, RxActive */
++	P9_24_pruin_pin: pinmux_P9_24_pruin_pin {
++		pinctrl-single,pins = <0x184  0x36>; };     /* Mode 6, Pull-Up, RxActive */
++
++	/* P9_25 (ZCZ ball A14) Audio   */
++	P9_25_default_pin: pinmux_P9_25_default_pin {
++		pinctrl-single,pins = <0x1ac  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_25_gpio_pin: pinmux_P9_25_gpio_pin {
++		pinctrl-single,pins = <0x1ac  0x2F>; };     /* Mode 7, RxActive */
++	P9_25_gpio_pu_pin: pinmux_P9_25_gpio_pu_pin {
++		pinctrl-single,pins = <0x1ac  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_25_gpio_pd_pin: pinmux_P9_25_gpio_pd_pin {
++		pinctrl-single,pins = <0x1ac  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_25_qep_pin: pinmux_P9_25_qep_pin {
++		pinctrl-single,pins = <0x1ac  0x21>; };     /* Mode 1, Pull-Down, RxActive */
++	P9_25_pruout_pin: pinmux_P9_25_pruout_pin {
++		pinctrl-single,pins = <0x1ac  0x25>; };     /* Mode 5, Pull-Down, RxActive */
++	P9_25_pruin_pin: pinmux_P9_25_pruin_pin {
++		pinctrl-single,pins = <0x1ac  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_26 (ZCZ ball D16) */
++	P9_26_default_pin: pinmux_P9_26_default_pin {
++		pinctrl-single,pins = <0x180  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_26_gpio_pin: pinmux_P9_26_gpio_pin {
++		pinctrl-single,pins = <0x180  0x2F>; };     /* Mode 7, RxActive */
++	P9_26_gpio_pu_pin: pinmux_P9_26_gpio_pu_pin {
++		pinctrl-single,pins = <0x180  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_26_gpio_pd_pin: pinmux_P9_26_gpio_pd_pin {
++		pinctrl-single,pins = <0x180  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_26_uart_pin: pinmux_P9_26_uart_pin {
++		pinctrl-single,pins = <0x180  0x30>; };     /* Mode 0, Pull-Up, RxActive */
++	P9_26_can_pin: pinmux_P9_26_can_pin {
++		pinctrl-single,pins = <0x180  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++	P9_26_i2c_pin: pinmux_P9_26_i2c_pin {
++		pinctrl-single,pins = <0x180  0x33>; };     /* Mode 3, Pull-Up, RxActive */
++	P9_26_pruin_pin: pinmux_P9_26_pruin_pin {
++		pinctrl-single,pins = <0x180  0x36>; };     /* Mode 6, Pull-Up, RxActive */
++
++	/* P9_27 (ZCZ ball C13) */
++	P9_27_default_pin: pinmux_P9_27_default_pin {
++		pinctrl-single,pins = <0x1a4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_27_gpio_pin: pinmux_P9_27_gpio_pin {
++		pinctrl-single,pins = <0x1a4  0x2F>; };     /* Mode 7, RxActive */
++	P9_27_gpio_pu_pin: pinmux_P9_27_gpio_pu_pin {
++		pinctrl-single,pins = <0x1a4  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_27_gpio_pd_pin: pinmux_P9_27_gpio_pd_pin {
++		pinctrl-single,pins = <0x1a4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_27_qep_pin: pinmux_P9_27_qep_pin {
++		pinctrl-single,pins = <0x1a4  0x21>; };     /* Mode 1, Pull-Down, RxActive */
++	P9_27_pruout_pin: pinmux_P9_27_pruout_pin {
++		pinctrl-single,pins = <0x1a4  0x25>; };     /* Mode 5, Pull-Down, RxActive */
++	P9_27_pruin_pin: pinmux_P9_27_pruin_pin {
++		pinctrl-single,pins = <0x1a4  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_28 (ZCZ ball C12) Audio   */
++	P9_28_default_pin: pinmux_P9_28_default_pin {
++		pinctrl-single,pins = <0x19c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_28_gpio_pin: pinmux_P9_28_gpio_pin {
++		pinctrl-single,pins = <0x19c  0x2F>; };     /* Mode 7, RxActive */
++	P9_28_gpio_pu_pin: pinmux_P9_28_gpio_pu_pin {
++		pinctrl-single,pins = <0x19c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_28_gpio_pd_pin: pinmux_P9_28_gpio_pd_pin {
++		pinctrl-single,pins = <0x19c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_28_pwm_pin: pinmux_P9_28_pwm_pin {
++		pinctrl-single,pins = <0x19c  0x21>; };     /* Mode 1, Pull-Down, RxActive */
++	P9_28_spi_pin: pinmux_P9_28_spi_pin {
++		pinctrl-single,pins = <0x19c  0x23>; };     /* Mode 3, Pull-Down, RxActive */
++	P9_28_pwm2_pin: pinmux_P9_28_pwm2_pin {
++		pinctrl-single,pins = <0x19c  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++	P9_28_pruout_pin: pinmux_P9_28_pruout_pin {
++		pinctrl-single,pins = <0x19c  0x25>; };     /* Mode 5, Pull-Down, RxActive */
++	P9_28_pruin_pin: pinmux_P9_28_pruin_pin {
++		pinctrl-single,pins = <0x19c  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_29 (ZCZ ball B13) Audio   */
++	P9_29_default_pin: pinmux_P9_29_default_pin {
++		pinctrl-single,pins = <0x194  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_29_gpio_pin: pinmux_P9_29_gpio_pin {
++		pinctrl-single,pins = <0x194  0x2F>; };     /* Mode 7, RxActive */
++	P9_29_gpio_pu_pin: pinmux_P9_29_gpio_pu_pin {
++		pinctrl-single,pins = <0x194  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_29_gpio_pd_pin: pinmux_P9_29_gpio_pd_pin {
++		pinctrl-single,pins = <0x194  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_29_pwm_pin: pinmux_P9_29_pwm_pin {
++		pinctrl-single,pins = <0x194  0x21>; };     /* Mode 1, Pull-Down, RxActive */
++	P9_29_spi_pin: pinmux_P9_29_spi_pin {
++		pinctrl-single,pins = <0x194  0x23>; };     /* Mode 3, Pull-Down, RxActive */
++	P9_29_pruout_pin: pinmux_P9_29_pruout_pin {
++		pinctrl-single,pins = <0x194  0x25>; };     /* Mode 5, Pull-Down, RxActive */
++	P9_29_pruin_pin: pinmux_P9_29_pruin_pin {
++		pinctrl-single,pins = <0x194  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_30 (ZCZ ball D12) */
++	P9_30_default_pin: pinmux_P9_30_default_pin {
++		pinctrl-single,pins = <0x198  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_30_gpio_pin: pinmux_P9_30_gpio_pin {
++		pinctrl-single,pins = <0x198  0x2F>; };     /* Mode 7, RxActive */
++	P9_30_gpio_pu_pin: pinmux_P9_30_gpio_pu_pin {
++		pinctrl-single,pins = <0x198  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_30_gpio_pd_pin: pinmux_P9_30_gpio_pd_pin {
++		pinctrl-single,pins = <0x198  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_30_pwm_pin: pinmux_P9_30_pwm_pin {
++		pinctrl-single,pins = <0x198  0x21>; };     /* Mode 1, Pull-Down, RxActive */
++	P9_30_spi_pin: pinmux_P9_30_spi_pin {
++		pinctrl-single,pins = <0x198  0x23>; };     /* Mode 3, Pull-Down, RxActive */
++	P9_30_pruout_pin: pinmux_P9_30_pruout_pin {
++		pinctrl-single,pins = <0x198  0x25>; };     /* Mode 5, Pull-Down, RxActive */
++	P9_30_pruin_pin: pinmux_P9_30_pruin_pin {
++		pinctrl-single,pins = <0x198  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_31 (ZCZ ball A13) Audio   */
++	P9_31_default_pin: pinmux_P9_31_default_pin {
++		pinctrl-single,pins = <0x190  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_31_gpio_pin: pinmux_P9_31_gpio_pin {
++		pinctrl-single,pins = <0x190  0x2F>; };     /* Mode 7, RxActive */
++	P9_31_gpio_pu_pin: pinmux_P9_31_gpio_pu_pin {
++		pinctrl-single,pins = <0x190  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_31_gpio_pd_pin: pinmux_P9_31_gpio_pd_pin {
++		pinctrl-single,pins = <0x190  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_31_pwm_pin: pinmux_P9_31_pwm_pin {
++		pinctrl-single,pins = <0x190  0x21>; };     /* Mode 1, Pull-Down, RxActive */
++	P9_31_spi_pin: pinmux_P9_31_spi_pin {
++		pinctrl-single,pins = <0x190  0x23>; };     /* Mode 3, Pull-Down, RxActive */
++	P9_31_pruout_pin: pinmux_P9_31_pruout_pin {
++		pinctrl-single,pins = <0x190  0x25>; };     /* Mode 5, Pull-Down, RxActive */
++	P9_31_pruin_pin: pinmux_P9_31_pruin_pin {
++		pinctrl-single,pins = <0x190  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_32                VADC    */
++	/* P9_33 (ZCZ ball C8 ) AIN4    */
++	/* P9_34                AGND    */
++	/* P9_35 (ZCZ ball A8 ) AIN6    */
++	/* P9_36 (ZCZ ball B8 ) AIN5    */
++	/* P9_37 (ZCZ ball B7 ) AIN2    */
++	/* P9_38 (ZCZ ball A7 ) AIN3    */
++	/* P9_39 (ZCZ ball B6 ) AIN0    */
++	/* P9_40 (ZCZ ball C7 ) AIN1    */
++
++	/* P9_41 (ZCZ ball D14) */
++	P9_41_default_pin: pinmux_P9_41_default_pin {
++		pinctrl-single,pins = <0x1b4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_41_gpio_pin: pinmux_P9_41_gpio_pin {
++		pinctrl-single,pins = <0x1b4  0x2F>; };     /* Mode 7, RxActive */
++	P9_41_gpio_pu_pin: pinmux_P9_41_gpio_pu_pin {
++		pinctrl-single,pins = <0x1b4  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_41_gpio_pd_pin: pinmux_P9_41_gpio_pd_pin {
++		pinctrl-single,pins = <0x1b4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_41_timer_pin: pinmux_P9_41_timer_pin {
++		pinctrl-single,pins = <0x1b4  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++	P9_41_pruin_pin: pinmux_P9_41_pruin_pin {
++		pinctrl-single,pins = <0x1b4  0x25>; };     /* Mode 5, Pull-Down, RxActive */
++
++	/* P9_41.1              */
++	/* P9_91 (ZCZ ball D13) */
++	P9_91_default_pin: pinmux_P9_91_default_pin {
++		pinctrl-single,pins = <0x1a8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_91_gpio_pin: pinmux_P9_91_gpio_pin {
++		pinctrl-single,pins = <0x1a8  0x2F>; };     /* Mode 7, RxActive */
++	P9_91_gpio_pu_pin: pinmux_P9_91_gpio_pu_pin {
++		pinctrl-single,pins = <0x1a8  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_91_gpio_pd_pin: pinmux_P9_91_gpio_pd_pin {
++		pinctrl-single,pins = <0x1a8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_91_qep_pin: pinmux_P9_91_qep_pin {
++		pinctrl-single,pins = <0x1a8  0x21>; };     /* Mode 1, Pull-Down, RxActive */
++	P9_91_pruout_pin: pinmux_P9_91_pruout_pin {
++		pinctrl-single,pins = <0x1a8  0x25>; };     /* Mode 5, Pull-Down, RxActive */
++	P9_91_pruin_pin: pinmux_P9_91_pruin_pin {
++		pinctrl-single,pins = <0x1a8  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_42 (ZCZ ball C18) */
++	P9_42_default_pin: pinmux_P9_42_default_pin {
++		pinctrl-single,pins = <0x164  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_42_gpio_pin: pinmux_P9_42_gpio_pin {
++		pinctrl-single,pins = <0x164  0x2F>; };     /* Mode 7, RxActive */
++	P9_42_gpio_pu_pin: pinmux_P9_42_gpio_pu_pin {
++		pinctrl-single,pins = <0x164  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_42_gpio_pd_pin: pinmux_P9_42_gpio_pd_pin {
++		pinctrl-single,pins = <0x164  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_42_pwm_pin: pinmux_P9_42_pwm_pin {
++		pinctrl-single,pins = <0x164  0x20>; };     /* Mode 0, Pull-Down, RxActive */
++	P9_42_uart_pin: pinmux_P9_42_uart_pin {
++		pinctrl-single,pins = <0x164  0x21>; };     /* Mode 1, Pull-Down, RxActive */
++	P9_42_spics_pin: pinmux_P9_42_spics_pin {
++		pinctrl-single,pins = <0x164  0x22>; };     /* Mode 2, Pull-Down, RxActive */
++	P9_42_spiclk_pin: pinmux_P9_42_spiclk_pin {
++		pinctrl-single,pins = <0x164  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++
++	/* P9_42.1              */
++	/* P9_92 (ZCZ ball B12) */
++	P9_92_default_pin: pinmux_P9_92_default_pin {
++		pinctrl-single,pins = <0x1a0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_92_gpio_pin: pinmux_P9_92_gpio_pin {
++		pinctrl-single,pins = <0x1a0  0x2F>; };     /* Mode 7, RxActive */
++	P9_92_gpio_pu_pin: pinmux_P9_92_gpio_pu_pin {
++		pinctrl-single,pins = <0x1a0  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_92_gpio_pd_pin: pinmux_P9_92_gpio_pd_pin {
++		pinctrl-single,pins = <0x1a0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_92_qep_pin: pinmux_P9_92_qep_pin {
++		pinctrl-single,pins = <0x1a0  0x21>; };     /* Mode 1, Pull-Down, RxActive */
++	P9_92_pruout_pin: pinmux_P9_92_pruout_pin {
++		pinctrl-single,pins = <0x1a0  0x25>; };     /* Mode 5, Pull-Down, RxActive */
++	P9_92_pruin_pin: pinmux_P9_92_pruin_pin {
++		pinctrl-single,pins = <0x1a0  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++
++	/* P9_43                GND     */
++	/* P9_44                GND     */
++	/* P9_45                GND     */
++	/* P9_46                GND     */
++};
++
++/**********************************************************************/
++/* Pin Multiplex Helpers                                              */
++/*                                                                    */
++/* These provide userspace runtime pin configuration for the          */
++/* BeagleBone cape expansion headers                                  */
++/**********************************************************************/
++
++&ocp {
++	/************************/
++	/* P8 Header            */
++	/************************/
++
++	P8_07_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "timer";
++		pinctrl-0 = <&P8_07_default_pin>;
++		pinctrl-1 = <&P8_07_gpio_pin>;
++		pinctrl-2 = <&P8_07_gpio_pu_pin>;
++		pinctrl-3 = <&P8_07_gpio_pd_pin>;
++		pinctrl-4 = <&P8_07_timer_pin>;
++	};
++
++	P8_08_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "timer";
++		pinctrl-0 = <&P8_08_default_pin>;
++		pinctrl-1 = <&P8_08_gpio_pin>;
++		pinctrl-2 = <&P8_08_gpio_pu_pin>;
++		pinctrl-3 = <&P8_08_gpio_pd_pin>;
++		pinctrl-4 = <&P8_08_timer_pin>;
++	};
++
++	P8_09_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "timer";
++		pinctrl-0 = <&P8_09_default_pin>;
++		pinctrl-1 = <&P8_09_gpio_pin>;
++		pinctrl-2 = <&P8_09_gpio_pu_pin>;
++		pinctrl-3 = <&P8_09_gpio_pd_pin>;
++		pinctrl-4 = <&P8_09_timer_pin>;
++	};
++
++	P8_10_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "timer";
++		pinctrl-0 = <&P8_10_default_pin>;
++		pinctrl-1 = <&P8_10_gpio_pin>;
++		pinctrl-2 = <&P8_10_gpio_pu_pin>;
++		pinctrl-3 = <&P8_10_gpio_pd_pin>;
++		pinctrl-4 = <&P8_10_timer_pin>;
++	};
++
++	P8_11_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "qep";
++		pinctrl-0 = <&P8_11_default_pin>;
++		pinctrl-1 = <&P8_11_gpio_pin>;
++		pinctrl-2 = <&P8_11_gpio_pu_pin>;
++		pinctrl-3 = <&P8_11_gpio_pd_pin>;
++		pinctrl-4 = <&P8_11_pruout_pin>;
++		pinctrl-5 = <&P8_11_qep_pin>;
++	};
++
++	P8_12_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "qep";
++		pinctrl-0 = <&P8_12_default_pin>;
++		pinctrl-1 = <&P8_12_gpio_pin>;
++		pinctrl-2 = <&P8_12_gpio_pu_pin>;
++		pinctrl-3 = <&P8_12_gpio_pd_pin>;
++		pinctrl-4 = <&P8_12_pruout_pin>;
++		pinctrl-5 = <&P8_12_qep_pin>;
++	};
++
++	P8_13_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm";
++		pinctrl-0 = <&P8_13_default_pin>;
++		pinctrl-1 = <&P8_13_gpio_pin>;
++		pinctrl-2 = <&P8_13_gpio_pu_pin>;
++		pinctrl-3 = <&P8_13_gpio_pd_pin>;
++		pinctrl-4 = <&P8_13_pwm_pin>;
++	};
++
++	P8_14_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm";
++		pinctrl-0 = <&P8_14_default_pin>;
++		pinctrl-1 = <&P8_14_gpio_pin>;
++		pinctrl-2 = <&P8_14_gpio_pu_pin>;
++		pinctrl-3 = <&P8_14_gpio_pd_pin>;
++		pinctrl-4 = <&P8_14_pwm_pin>;
++	};
++
++	P8_15_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruin", "qep";
++		pinctrl-0 = <&P8_15_default_pin>;
++		pinctrl-1 = <&P8_15_gpio_pin>;
++		pinctrl-2 = <&P8_15_gpio_pu_pin>;
++		pinctrl-3 = <&P8_15_gpio_pd_pin>;
++		pinctrl-4 = <&P8_15_pruin_pin>;
++		pinctrl-5 = <&P8_15_qep_pin>;
++	};
++
++	P8_16_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruin", "qep";
++		pinctrl-0 = <&P8_16_default_pin>;
++		pinctrl-1 = <&P8_16_gpio_pin>;
++		pinctrl-2 = <&P8_16_gpio_pu_pin>;
++		pinctrl-3 = <&P8_16_gpio_pd_pin>;
++		pinctrl-4 = <&P8_16_pruin_pin>;
++		pinctrl-5 = <&P8_16_qep_pin>;
++	};
++
++	P8_17_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm";
++		pinctrl-0 = <&P8_17_default_pin>;
++		pinctrl-1 = <&P8_17_gpio_pin>;
++		pinctrl-2 = <&P8_17_gpio_pu_pin>;
++		pinctrl-3 = <&P8_17_gpio_pd_pin>;
++		pinctrl-4 = <&P8_17_pwm_pin>;
++	};
++
++	P8_18_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio";
++		pinctrl-0 = <&P8_18_default_pin>;
++		pinctrl-1 = <&P8_18_gpio_pin>;
++		pinctrl-2 = <&P8_18_gpio_pu_pin>;
++		pinctrl-3 = <&P8_18_gpio_pd_pin>;
++	};
++
++	P8_19_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm";
++		pinctrl-0 = <&P8_19_default_pin>;
++		pinctrl-1 = <&P8_19_gpio_pin>;
++		pinctrl-2 = <&P8_19_gpio_pu_pin>;
++		pinctrl-3 = <&P8_19_gpio_pd_pin>;
++		pinctrl-4 = <&P8_19_pwm_pin>;
++	};
++
++	P8_26_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio";
++		pinctrl-0 = <&P8_26_default_pin>;
++		pinctrl-1 = <&P8_26_gpio_pin>;
++		pinctrl-2 = <&P8_26_gpio_pu_pin>;
++		pinctrl-3 = <&P8_26_gpio_pd_pin>;
++	};
++
++	/************************/
++	/* P9 Header            */
++	/************************/
++
++	P9_11_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "uart";
++		pinctrl-0 = <&P9_11_default_pin>;
++		pinctrl-1 = <&P9_11_gpio_pin>;
++		pinctrl-2 = <&P9_11_gpio_pu_pin>;
++		pinctrl-3 = <&P9_11_gpio_pd_pin>;
++		pinctrl-4 = <&P9_11_uart_pin>;
++	};
++
++	P9_12_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio";
++		pinctrl-0 = <&P9_12_default_pin>;
++		pinctrl-1 = <&P9_12_gpio_pin>;
++		pinctrl-2 = <&P9_12_gpio_pu_pin>;
++		pinctrl-3 = <&P9_12_gpio_pd_pin>;
++	};
++
++	P9_13_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "uart";
++		pinctrl-0 = <&P9_13_default_pin>;
++		pinctrl-1 = <&P9_13_gpio_pin>;
++		pinctrl-2 = <&P9_13_gpio_pu_pin>;
++		pinctrl-3 = <&P9_13_gpio_pd_pin>;
++		pinctrl-4 = <&P9_13_uart_pin>;
++	};
++
++	P9_14_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm";
++		pinctrl-0 = <&P9_14_default_pin>;
++		pinctrl-1 = <&P9_14_gpio_pin>;
++		pinctrl-2 = <&P9_14_gpio_pu_pin>;
++		pinctrl-3 = <&P9_14_gpio_pd_pin>;
++		pinctrl-4 = <&P9_14_pwm_pin>;
++	};
++
++	P9_15_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm";
++		pinctrl-0 = <&P9_15_default_pin>;
++		pinctrl-1 = <&P9_15_gpio_pin>;
++		pinctrl-2 = <&P9_15_gpio_pu_pin>;
++		pinctrl-3 = <&P9_15_gpio_pd_pin>;
++		pinctrl-4 = <&P9_15_pwm_pin>;
++	};
++
++	P9_16_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm";
++		pinctrl-0 = <&P9_16_default_pin>;
++		pinctrl-1 = <&P9_16_gpio_pin>;
++		pinctrl-2 = <&P9_16_gpio_pu_pin>;
++		pinctrl-3 = <&P9_16_gpio_pd_pin>;
++		pinctrl-4 = <&P9_16_pwm_pin>;
++	};
++
++	P9_17_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "spi", "i2c", "pwm";
++		pinctrl-0 = <&P9_17_default_pin>;
++		pinctrl-1 = <&P9_17_gpio_pin>;
++		pinctrl-2 = <&P9_17_gpio_pu_pin>;
++		pinctrl-3 = <&P9_17_gpio_pd_pin>;
++		pinctrl-4 = <&P9_17_spi_pin>;
++		pinctrl-5 = <&P9_17_i2c_pin>;
++		pinctrl-6 = <&P9_17_pwm_pin>;
++	};
++
++	P9_18_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "spi", "i2c", "pwm";
++		pinctrl-0 = <&P9_18_default_pin>;
++		pinctrl-1 = <&P9_18_gpio_pin>;
++		pinctrl-2 = <&P9_18_gpio_pu_pin>;
++		pinctrl-3 = <&P9_18_gpio_pd_pin>;
++		pinctrl-4 = <&P9_18_spi_pin>;
++		pinctrl-5 = <&P9_18_i2c_pin>;
++		pinctrl-6 = <&P9_18_pwm_pin>;
++	};
++
++	// I2C Pins
++	// P9_19_pinmux
++	// P9_20_pinmux
++
++	P9_21_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "spi", "uart", "i2c", "pwm";
++		pinctrl-0 = <&P9_21_default_pin>;
++		pinctrl-1 = <&P9_21_gpio_pin>;
++		pinctrl-2 = <&P9_21_gpio_pu_pin>;
++		pinctrl-3 = <&P9_21_gpio_pd_pin>;
++		pinctrl-4 = <&P9_21_spi_pin>;
++		pinctrl-5 = <&P9_21_uart_pin>;
++		pinctrl-6 = <&P9_21_i2c_pin>;
++		pinctrl-7 = <&P9_21_pwm_pin>;
++	};
++
++	P9_22_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "spi", "uart", "i2c", "pwm";
++		pinctrl-0 = <&P9_22_default_pin>;
++		pinctrl-1 = <&P9_22_gpio_pin>;
++		pinctrl-2 = <&P9_22_gpio_pu_pin>;
++		pinctrl-3 = <&P9_22_gpio_pd_pin>;
++		pinctrl-4 = <&P9_22_spi_pin>;
++		pinctrl-5 = <&P9_22_uart_pin>;
++		pinctrl-6 = <&P9_22_i2c_pin>;
++		pinctrl-7 = <&P9_22_pwm_pin>;
++	};
++
++	P9_23_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm";
++		pinctrl-0 = <&P9_23_default_pin>;
++		pinctrl-1 = <&P9_23_gpio_pin>;
++		pinctrl-2 = <&P9_23_gpio_pu_pin>;
++		pinctrl-3 = <&P9_23_gpio_pd_pin>;
++		pinctrl-4 = <&P9_23_pwm_pin>;
++	};
++
++	P9_24_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "uart", "can", "i2c", "pruin";
++		pinctrl-0 = <&P9_24_default_pin>;
++		pinctrl-1 = <&P9_24_gpio_pin>;
++		pinctrl-2 = <&P9_24_gpio_pu_pin>;
++		pinctrl-3 = <&P9_24_gpio_pd_pin>;
++		pinctrl-4 = <&P9_24_uart_pin>;
++		pinctrl-5 = <&P9_24_can_pin>;
++		pinctrl-6 = <&P9_24_i2c_pin>;
++		pinctrl-7 = <&P9_24_pruin_pin>;
++	};
++
++	P9_25_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "qep", "pruout", "pruin";
++		pinctrl-0 = <&P9_25_default_pin>;
++		pinctrl-1 = <&P9_25_gpio_pin>;
++		pinctrl-2 = <&P9_25_gpio_pu_pin>;
++		pinctrl-3 = <&P9_25_gpio_pd_pin>;
++		pinctrl-4 = <&P9_25_qep_pin>;
++		pinctrl-5 = <&P9_25_pruout_pin>;
++		pinctrl-6 = <&P9_25_pruin_pin>;
++	};
++
++	P9_26_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "uart", "can", "i2c", "pruin";
++		pinctrl-0 = <&P9_26_default_pin>;
++		pinctrl-1 = <&P9_26_gpio_pin>;
++		pinctrl-2 = <&P9_26_gpio_pu_pin>;
++		pinctrl-3 = <&P9_26_gpio_pd_pin>;
++		pinctrl-4 = <&P9_26_uart_pin>;
++		pinctrl-5 = <&P9_26_can_pin>;
++		pinctrl-6 = <&P9_26_i2c_pin>;
++		pinctrl-7 = <&P9_26_pruin_pin>;
++	};
++
++	P9_27_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "qep", "pruout", "pruin";
++		pinctrl-0 = <&P9_27_default_pin>;
++		pinctrl-1 = <&P9_27_gpio_pin>;
++		pinctrl-2 = <&P9_27_gpio_pu_pin>;
++		pinctrl-3 = <&P9_27_gpio_pd_pin>;
++		pinctrl-4 = <&P9_27_qep_pin>;
++		pinctrl-5 = <&P9_27_pruout_pin>;
++		pinctrl-6 = <&P9_27_pruin_pin>;
++	};
++
++	P9_28_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm", "spi", "pwm2", "pruout", "pruin";
++		pinctrl-0 = <&P9_28_default_pin>;
++		pinctrl-1 = <&P9_28_gpio_pin>;
++		pinctrl-2 = <&P9_28_gpio_pu_pin>;
++		pinctrl-3 = <&P9_28_gpio_pd_pin>;
++		pinctrl-4 = <&P9_28_pwm_pin>;
++		pinctrl-5 = <&P9_28_spi_pin>;
++		pinctrl-6 = <&P9_28_pwm2_pin>;
++		pinctrl-7 = <&P9_28_pruout_pin>;
++		pinctrl-8 = <&P9_28_pruin_pin>;
++	};
++
++	P9_29_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm", "spi", "pruout", "pruin";
++		pinctrl-0 = <&P9_29_default_pin>;
++		pinctrl-1 = <&P9_29_gpio_pin>;
++		pinctrl-2 = <&P9_29_gpio_pu_pin>;
++		pinctrl-3 = <&P9_29_gpio_pd_pin>;
++		pinctrl-4 = <&P9_29_pwm_pin>;
++		pinctrl-5 = <&P9_29_spi_pin>;
++		pinctrl-6 = <&P9_29_pruout_pin>;
++		pinctrl-7 = <&P9_29_pruin_pin>;
++	};
++
++	P9_30_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm", "spi", "pruout", "pruin";
++		pinctrl-0 = <&P9_30_default_pin>;
++		pinctrl-1 = <&P9_30_gpio_pin>;
++		pinctrl-2 = <&P9_30_gpio_pu_pin>;
++		pinctrl-3 = <&P9_30_gpio_pd_pin>;
++		pinctrl-4 = <&P9_30_pwm_pin>;
++		pinctrl-5 = <&P9_30_spi_pin>;
++		pinctrl-6 = <&P9_30_pruout_pin>;
++		pinctrl-7 = <&P9_30_pruin_pin>;
++	};
++
++	P9_31_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm", "spi", "pruout", "pruin";
++		pinctrl-0 = <&P9_31_default_pin>;
++		pinctrl-1 = <&P9_31_gpio_pin>;
++		pinctrl-2 = <&P9_31_gpio_pu_pin>;
++		pinctrl-3 = <&P9_31_gpio_pd_pin>;
++		pinctrl-4 = <&P9_31_pwm_pin>;
++		pinctrl-5 = <&P9_31_spi_pin>;
++		pinctrl-6 = <&P9_31_pruout_pin>;
++		pinctrl-7 = <&P9_31_pruin_pin>;
++	};
++
++	P9_41_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "timer", "pruin";
++		pinctrl-0 = <&P9_41_default_pin>;
++		pinctrl-1 = <&P9_41_gpio_pin>;
++		pinctrl-2 = <&P9_41_gpio_pu_pin>;
++		pinctrl-3 = <&P9_41_gpio_pd_pin>;
++		pinctrl-4 = <&P9_41_timer_pin>;
++		pinctrl-5 = <&P9_41_pruin_pin>;
++	};
++
++	P9_91_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "qep", "pruout", "pruin";
++		pinctrl-0 = <&P9_91_default_pin>;
++		pinctrl-1 = <&P9_91_gpio_pin>;
++		pinctrl-2 = <&P9_91_gpio_pu_pin>;
++		pinctrl-3 = <&P9_91_gpio_pd_pin>;
++		pinctrl-4 = <&P9_91_qep_pin>;
++		pinctrl-5 = <&P9_91_pruout_pin>;
++		pinctrl-6 = <&P9_91_pruin_pin>;
++	};
++
++	P9_42_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm", "uart", "spics", "spiclk";
++		pinctrl-0 = <&P9_42_default_pin>;
++		pinctrl-1 = <&P9_42_gpio_pin>;
++		pinctrl-2 = <&P9_42_gpio_pu_pin>;
++		pinctrl-3 = <&P9_42_gpio_pd_pin>;
++		pinctrl-4 = <&P9_42_pwm_pin>;
++		pinctrl-5 = <&P9_42_uart_pin>;
++		pinctrl-6 = <&P9_42_spics_pin>;
++		pinctrl-7 = <&P9_42_spiclk_pin>;
++	};
++
++	P9_92_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "qep", "pruout", "pruin";
++		pinctrl-0 = <&P9_92_default_pin>;
++		pinctrl-1 = <&P9_92_gpio_pin>;
++		pinctrl-2 = <&P9_92_gpio_pu_pin>;
++		pinctrl-3 = <&P9_92_gpio_pd_pin>;
++		pinctrl-4 = <&P9_92_qep_pin>;
++		pinctrl-5 = <&P9_92_pruout_pin>;
++		pinctrl-6 = <&P9_92_pruin_pin>;
++	};
++
++	cape-universal {
++		compatible = "gpio-of-helper";
++		status = "okay";
++		pinctrl-names = "default";
++		pinctrl-0 = <>;
++
++		P8_07 {
++			gpio-name = "P8_07";
++			gpio = <&gpio2 2 0>;
++			input;
++			dir-changeable;
++		};
++		P8_08 {
++			gpio-name = "P8_08";
++			gpio = <&gpio2 3 0>;
++			input;
++			dir-changeable;
++		};
++		P8_09 {
++			gpio-name = "P8_09";
++			gpio = <&gpio2 5 0>;
++			input;
++			dir-changeable;
++		};
++		P8_10 {
++			gpio-name = "P8_10";
++			gpio = <&gpio2 4 0>;
++			input;
++			dir-changeable;
++		};
++		P8_11 {
++			gpio-name = "P8_11";
++			gpio = <&gpio1 13 0>;
++			input;
++			dir-changeable;
++		};
++		P8_12 {
++			gpio-name = "P8_12";
++			gpio = <&gpio1 12 0>;
++			input;
++			dir-changeable;
++		};
++		P8_13 {
++			gpio-name = "P8_13";
++			gpio = <&gpio0 23 0>;
++			input;
++			dir-changeable;
++		};
++		P8_14 {
++			gpio-name = "P8_14";
++			gpio = <&gpio0 26 0>;
++			input;
++			dir-changeable;
++		};
++		P8_15 {
++			gpio-name = "P8_15";
++			gpio = <&gpio1 15 0>;
++			input;
++			dir-changeable;
++		};
++		P8_16 {
++			gpio-name = "P8_16";
++			gpio = <&gpio1 14 0>;
++			input;
++			dir-changeable;
++		};
++		P8_17 {
++			gpio-name = "P8_17";
++			gpio = <&gpio0 27 0>;
++			input;
++			dir-changeable;
++		};
++		P8_18 {
++			gpio-name = "P8_18";
++			gpio = <&gpio2 1 0>;
++			input;
++			dir-changeable;
++		};
++		P8_19 {
++			gpio-name = "P8_19";
++			gpio = <&gpio0 22 0>;
++			input;
++			dir-changeable;
++		};
++		P8_26 {
++			gpio-name = "P8_26";
++			gpio = <&gpio1 29 0>;
++			input;
++			dir-changeable;
++		};
++
++		P9_11 {
++			gpio-name = "P9_11";
++			gpio = <&gpio0 30 0>;
++			input;
++			dir-changeable;
++		};
++		P9_12 {
++			gpio-name = "P9_12";
++			gpio = <&gpio1 28 0>;
++			input;
++			dir-changeable;
++		};
++		P9_13 {
++			gpio-name = "P9_13";
++			gpio = <&gpio0 31 0>;
++			input;
++			dir-changeable;
++		};
++		P9_14 {
++			gpio-name = "P9_14";
++			gpio = <&gpio1 18 0>;
++			input;
++			dir-changeable;
++		};
++		P9_15 {
++			gpio-name = "P9_15";
++			gpio = <&gpio1 16 0>;
++			input;
++			dir-changeable;
++		};
++		P9_16 {
++			gpio-name = "P9_16";
++			gpio = <&gpio1 19 0>;
++			input;
++			dir-changeable;
++		};
++		P9_17 {
++			gpio-name = "P9_17";
++			gpio = <&gpio0 5 0>;
++			input;
++			dir-changeable;
++		};
++		P9_18 {
++			gpio-name = "P9_18";
++			gpio = <&gpio0 4 0>;
++			input;
++			dir-changeable;
++		};
++
++		// I2C pins
++		// P9_19
++		// P9_20
++
++		P9_21 {
++			gpio-name = "P9_21";
++			gpio = <&gpio0 3 0>;
++			input;
++			dir-changeable;
++		};
++		P9_22 {
++			gpio-name = "P9_22";
++			gpio = <&gpio0 2 0>;
++			input;
++			dir-changeable;
++		};
++		P9_23 {
++			gpio-name = "P9_23";
++			gpio = <&gpio1 17 0>;
++			input;
++			dir-changeable;
++		};
++		P9_24 {
++			gpio-name = "P9_24";
++			gpio = <&gpio0 15 0>;
++			input;
++			dir-changeable;
++		};
++		P9_25 {
++			gpio-name = "P9_25";
++			gpio = <&gpio3 21 0>;
++			input;
++			dir-changeable;
++		};
++		P9_26 {
++			gpio-name = "P9_26";
++			gpio = <&gpio0 14 0>;
++			input;
++			dir-changeable;
++		};
++		P9_27 {
++			gpio-name = "P9_27";
++			gpio = <&gpio3 19 0>;
++			input;
++			dir-changeable;
++		};
++		P9_28 {
++			gpio-name = "P9_28";
++			gpio = <&gpio3 17 0>;
++			input;
++			dir-changeable;
++		};
++		P9_29 {
++			gpio-name = "P9_29";
++			gpio = <&gpio3 15 0>;
++			input;
++			dir-changeable;
++		};
++		P9_30 {
++			gpio-name = "P9_30";
++			gpio = <&gpio3 16 0>;
++			input;
++			dir-changeable;
++		};
++		P9_31 {
++			gpio-name = "P9_31";
++			gpio = <&gpio3 14 0>;
++			input;
++			dir-changeable;
++		};
++		P9_41 {
++			gpio-name = "P9_41";
++			gpio = <&gpio0 20 0>;
++			input;
++			dir-changeable;
++		};
++		P9_91 {
++			gpio-name = "P9_91";
++			gpio = <&gpio3 20 0>;
++			input;
++			dir-changeable;
++		};
++		P9_42 {
++			gpio-name = "P9_42";
++			gpio = <&gpio0 7 0>;
++			input;
++			dir-changeable;
++		};
++		P9_92 {
++			gpio-name = "P9_92";
++			gpio = <&gpio3 18 0>;
++			input;
++			dir-changeable;
++		};
++	};
++};
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0008-bone-pinmux-helper-Add-support-for-mode-device-tree-.patch b/patches/beaglebone/pinmux-helper/0008-bone-pinmux-helper-Add-support-for-mode-device-tree-.patch
new file mode 100644
index 000000000..9a878c48c
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0008-bone-pinmux-helper-Add-support-for-mode-device-tree-.patch
@@ -0,0 +1,117 @@
+From f1cac6a3c4d4c1dec7d3e7fae0f5a1523c77771f Mon Sep 17 00:00:00 2001
+From: Charles Steinkuehler <charles@steinkuehler.net>
+Date: Tue, 16 Sep 2014 20:42:56 +0000
+Subject: [PATCH 08/13] bone-pinmux-helper: Add support for "mode" device-tree
+ parameter The new mode parameter is used to set the initial pinmux mode to
+ something other than "default" or NULL, which is what happens currently. This
+ allows enabling SoC hardware via device-tree which requires specific pinmux
+ settings to function on boot, but still leaves the pinmux register under
+ control of the bone-pinmux- helper driver meaning the pinmux setting can be
+ changed at run time via user-mode access to sysfs.
+
+Signed-off-by: Charles Steinkuehler <charles@steinkuehler.net>
+---
+ drivers/misc/cape/beaglebone/bone-pinmux-helper.c | 58 ++++++++++++++++++-----
+ 1 file changed, 47 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+index 5074365..d81363a 100644
+--- a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
++++ b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+@@ -117,6 +117,8 @@ static int bone_pinmux_helper_probe(struct platform_device *pdev)
+ 	struct pinmux_helper_data *data;
+ 	struct pinctrl_state *state;
+ 	char *state_name;
++	const char *mode_name;
++	int mode_len;
+ 	int err;
+ 
+ 	data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
+@@ -125,12 +127,13 @@ static int bone_pinmux_helper_probe(struct platform_device *pdev)
+ 		err = -ENOMEM;
+ 		goto err_no_mem;
+ 	}
++
+ 	state_name = kmalloc(strlen(PINCTRL_STATE_DEFAULT) + 1,
+ 			GFP_KERNEL);
+ 	if (state_name == NULL) {
+ 		dev_err(dev, "Failed to allocate state name\n");
+ 		err = -ENOMEM;
+-		goto err_no_mem;
++		goto err_no_state_mem;
+ 	}
+ 	data->selected_state_name = state_name;
+ 	strcpy(data->selected_state_name, PINCTRL_STATE_DEFAULT);
+@@ -144,17 +147,47 @@ static int bone_pinmux_helper_probe(struct platform_device *pdev)
+ 		goto err_no_pinctrl;
+ 	}
+ 
+-	/* try to select default state at first (if it exists) */
+-	state = pinctrl_lookup_state(data->pinctrl,
+-			data->selected_state_name);
+-	if (!IS_ERR(state)) {
+-		err = pinctrl_select_state(data->pinctrl, state);
+-		if (err != 0) {
+-			dev_err(dev, "Failed to select default state\n");
+-			goto err_no_state;
++	/* See if an initial mode is specified in the device tree */
++	mode_name = of_get_property(dev->of_node, "mode", &mode_len);
++
++	err = -1;
++	if (mode_name != NULL ) {
++		state_name = kmalloc(mode_len + 1, GFP_KERNEL);
++		if (state_name == NULL) {
++			dev_err(dev, "Failed to allocate state name\n");
++			err = -ENOMEM;
++			goto err_no_mode_mem;
++		}
++		strncpy(state_name, mode_name, mode_len);
++
++		/* try to select requested mode */
++		state = pinctrl_lookup_state(data->pinctrl, state_name);
++		if (!IS_ERR(state)) {
++			err = pinctrl_select_state(data->pinctrl, state);
++			if (err != 0) {
++				dev_warn(dev, "Unable to select requested mode %s\n", state_name);
++				kfree(state_name);
++			} else {
++				kfree(data->selected_state_name);
++				data->selected_state_name = state_name;
++				dev_notice(dev, "Set initial pinmux mode to %s\n", state_name);
++			}
++		}
++	}
++
++	/* try to select default state if mode_name failed */
++	if ( err != 0) {
++		state = pinctrl_lookup_state(data->pinctrl,
++				data->selected_state_name);
++		if (!IS_ERR(state)) {
++			err = pinctrl_select_state(data->pinctrl, state);
++			if (err != 0) {
++				dev_err(dev, "Failed to select default state\n");
++				goto err_no_state;
++			}
++		} else {
++			data->selected_state_name = '\0';
+ 		}
+-	} else {
+-		data->selected_state_name = '\0';
+ 	}
+ 
+ 	/* Register sysfs hooks */
+@@ -168,8 +201,11 @@ static int bone_pinmux_helper_probe(struct platform_device *pdev)
+ 
+ err_no_sysfs:
+ err_no_state:
++err_no_mode_mem:
+ 	devm_pinctrl_put(data->pinctrl);
+ err_no_pinctrl:
++	devm_kfree(dev, data->selected_state_name);
++err_no_state_mem:
+ 	devm_kfree(dev, data);
+ err_no_mem:
+ 	return err;
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0009-pinmux-helper-add-P8_37_pinmux-P8_38_pinmux.patch b/patches/beaglebone/pinmux-helper/0009-pinmux-helper-add-P8_37_pinmux-P8_38_pinmux.patch
new file mode 100644
index 000000000..6f37e9eda
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0009-pinmux-helper-add-P8_37_pinmux-P8_38_pinmux.patch
@@ -0,0 +1,82 @@
+From a9463777f20872146a4fd1f8374ebc7ed78b9045 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Fri, 19 Sep 2014 08:49:29 -0500
+Subject: [PATCH 09/13] pinmux-helper: add P8_37_pinmux & P8_38_pinmux
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ .../arm/boot/dts/am335x-bone-common-universal.dtsi | 50 ++++++++++++++++++++++
+ 1 file changed, 50 insertions(+)
+
+diff --git a/arch/arm/boot/dts/am335x-bone-common-universal.dtsi b/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
+index 8bddcd2..e00bab9 100644
+--- a/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
++++ b/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
+@@ -208,7 +208,33 @@
+ 	/* P8_35 (ZCZ ball V2 ) hdmi    */
+ 	/* P8_36 (ZCZ ball U3 ) hdmi    */
+ 	/* P8_37 (ZCZ ball U1 ) hdmi    */
++	P8_37_default_pin: pinmux_P8_37_default_pin {
++		pinctrl-single,pins = <0x0C0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_37_gpio_pin: pinmux_P8_37_gpio_pin {
++		pinctrl-single,pins = <0x0C0  0x2F>; };     /* Mode 7, RxActive */
++	P8_37_gpio_pu_pin: pinmux_P8_37_gpio_pu_pin {
++		pinctrl-single,pins = <0x0C0  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_37_gpio_pd_pin: pinmux_P8_37_gpio_pd_pin {
++		pinctrl-single,pins = <0x0C0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_37_uart_pin: pinmux_P8_37_uart_pin {
++		pinctrl-single,pins = <0x0C0  0x04>; };     /* Mode 4, Pull-Down*/
++	P8_37_pwm_pin: pinmux_P8_37_pwm_pin {
++		pinctrl-single,pins = <0x0C0  0x02>; };     /* Mode 2, Pull-Down*/
++
+ 	/* P8_38 (ZCZ ball U2 ) hdmi    */
++	P8_38_default_pin: pinmux_P8_38_default_pin {
++		pinctrl-single,pins = <0x0C4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_38_gpio_pin: pinmux_P8_38_gpio_pin {
++		pinctrl-single,pins = <0x0C4  0x2F>; };     /* Mode 7, RxActive */
++	P8_38_gpio_pu_pin: pinmux_P8_38_gpio_pu_pin {
++		pinctrl-single,pins = <0x0C4  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_38_gpio_pd_pin: pinmux_P8_38_gpio_pd_pin {
++		pinctrl-single,pins = <0x0C4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_38_uart_pin: pinmux_P8_38_uart_pin {
++		pinctrl-single,pins = <0x0C4  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++	P8_38_pwm_pin: pinmux_P8_38_pwm_pin {
++		pinctrl-single,pins = <0x0C4  0x22>; };     /* Mode 2, Pull-Down, RxActive */
++
+ 	/* P8_39 (ZCZ ball T3 ) hdmi    */
+ 	/* P8_40 (ZCZ ball T4 ) hdmi    */
+ 	/* P8_41 (ZCZ ball T1 ) hdmi    */
+@@ -780,6 +806,30 @@
+ 		pinctrl-3 = <&P8_26_gpio_pd_pin>;
+ 	};
+ 
++	P8_37_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd","uart","pwm";
++		pinctrl-0 = <&P8_37_default_pin>;
++		pinctrl-1 = <&P8_37_gpio_pin>;
++		pinctrl-2 = <&P8_37_gpio_pu_pin>;
++		pinctrl-3 = <&P8_37_gpio_pd_pin>;
++		pinctrl-4 = <&P8_37_uart_pin>;
++		pinctrl-5 = <&P8_37_pwm_pin>;
++	};
++
++	P8_38_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd","uart","pwm";
++		pinctrl-0 = <&P8_38_default_pin>;
++		pinctrl-1 = <&P8_38_gpio_pin>;
++		pinctrl-2 = <&P8_38_gpio_pu_pin>;
++		pinctrl-3 = <&P8_38_gpio_pd_pin>;
++		pinctrl-4 = <&P8_38_uart_pin>;
++		pinctrl-5 = <&P8_38_pwm_pin>;
++	};
++
+ 	/************************/
+ 	/* P9 Header            */
+ 	/************************/
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0010-pinmux-helper-hdmi.patch b/patches/beaglebone/pinmux-helper/0010-pinmux-helper-hdmi.patch
new file mode 100644
index 000000000..ec4d9bf4c
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0010-pinmux-helper-hdmi.patch
@@ -0,0 +1,858 @@
+From 1fd30cb1249aa2e2b3b2212c467f96c21da9dd41 Mon Sep 17 00:00:00 2001
+From: Charles Steinkuehler <charles@steinkuehler.net>
+Date: Sun, 28 Sep 2014 12:16:16 +0000
+Subject: [PATCH 10/13] pinmux-helper: hdmi
+
+BeagleBone DTS : Enable run-time pinmux for HDMI Add cape-universal-hdmi pin
+info to am335x-bone-common-universal.dtsi Edit hdmi dtsi include files to use
+new mode= setting to set HDMI mode at startup, leaving pinmux configurable at
+runtime.
+
+Signed-off-by: Charles Steinkuehler <charles@steinkuehler.net>
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ .../arm/boot/dts/am335x-bone-common-universal.dtsi | 670 ++++++++++++++++++++-
+ 1 file changed, 651 insertions(+), 19 deletions(-)
+
+diff --git a/arch/arm/boot/dts/am335x-bone-common-universal.dtsi b/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
+index e00bab9..46028cd 100644
+--- a/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
++++ b/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
+@@ -198,51 +198,318 @@
+ 		pinctrl-single,pins = <0x07c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
+ 
+ 	/* P8_27 (ZCZ ball U5 ) hdmi    */
++	P8_27_default_pin: pinmux_P8_27_default_pin {
++		pinctrl-single,pins = <0x0e0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_27_gpio_pin: pinmux_P8_27_gpio_pin {
++		pinctrl-single,pins = <0x0e0  0x2F>; };     /* Mode 7, RxActive */
++	P8_27_gpio_pu_pin: pinmux_P8_27_gpio_pu_pin {
++		pinctrl-single,pins = <0x0e0  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_27_gpio_pd_pin: pinmux_P8_27_gpio_pd_pin {
++		pinctrl-single,pins = <0x0e0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_27_pruout_pin: pinmux_P8_27_pruout_pin {
++		pinctrl-single,pins = <0x0e0  0x05>; };     /* Mode 5, Pull-Down*/
++	P8_27_pruin_pin: pinmux_P8_27_pruin_pin {
++		pinctrl-single,pins = <0x0e0  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_27_hdmi_pin: pinmux_P8_27_hdmi_pin {
++		pinctrl-single,pins = <0x0e0  0x00>; };     /* lcd_vsync.lcd_vsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
++
+ 	/* P8_28 (ZCZ ball V5 ) hdmi    */
++	P8_28_default_pin: pinmux_P8_28_default_pin {
++		pinctrl-single,pins = <0x0e8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_28_gpio_pin: pinmux_P8_28_gpio_pin {
++		pinctrl-single,pins = <0x0e8  0x2F>; };     /* Mode 7, RxActive */
++	P8_28_gpio_pu_pin: pinmux_P8_28_gpio_pu_pin {
++		pinctrl-single,pins = <0x0e8  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_28_gpio_pd_pin: pinmux_P8_28_gpio_pd_pin {
++		pinctrl-single,pins = <0x0e8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_28_pruout_pin: pinmux_P8_28_pruout_pin {
++		pinctrl-single,pins = <0x0e8  0x05>; };     /* Mode 5, Pull-Down */
++	P8_28_pruin_pin: pinmux_P8_28_pruin_pin {
++		pinctrl-single,pins = <0x0e8  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_28_hdmi_pin: pinmux_P8_28_hdmi_pin {
++		pinctrl-single,pins = <0x0e8  0x00>; };     /* lcd_pclk.lcd_pclk, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
++
+ 	/* P8_29 (ZCZ ball R5 ) hdmi    */
++	P8_29_default_pin: pinmux_P8_29_default_pin {
++		pinctrl-single,pins = <0x0e4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_29_gpio_pin: pinmux_P8_29_gpio_pin {
++		pinctrl-single,pins = <0x0e4  0x2F>; };     /* Mode 7, RxActive */
++	P8_29_gpio_pu_pin: pinmux_P8_29_gpio_pu_pin {
++		pinctrl-single,pins = <0x0e4  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_29_gpio_pd_pin: pinmux_P8_29_gpio_pd_pin {
++		pinctrl-single,pins = <0x0e4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_29_pruout_pin: pinmux_P8_29_pruout_pin {
++		pinctrl-single,pins = <0x0e4  0x05>; };     /* Mode 5, Pull-Down*/
++	P8_29_pruin_pin: pinmux_P8_29_pruin_pin {
++		pinctrl-single,pins = <0x0e4  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_29_hdmi_pin: pinmux_P8_29_hdmi_pin {
++		pinctrl-single,pins = <0x0e4  0x00>; };     /* lcd_hsync.lcd_hsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
++
+ 	/* P8_30 (ZCZ ball R6 ) hdmi    */
++	P8_30_default_pin: pinmux_P8_30_default_pin {
++		pinctrl-single,pins = <0x0ec  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_30_gpio_pin: pinmux_P8_30_gpio_pin {
++		pinctrl-single,pins = <0x0ec  0x2F>; };     /* Mode 7, RxActive */
++	P8_30_gpio_pu_pin: pinmux_P8_30_gpio_pu_pin {
++		pinctrl-single,pins = <0x0ec  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_30_gpio_pd_pin: pinmux_P8_30_gpio_pd_pin {
++		pinctrl-single,pins = <0x0ec  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_30_pruout_pin: pinmux_P8_30_pruout_pin {
++		pinctrl-single,pins = <0x0ec  0x05>; };     /* Mode 5, Pull-Down*/
++	P8_30_pruin_pin: pinmux_P8_30_pruin_pin {
++		pinctrl-single,pins = <0x0ec  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_30_hdmi_pin: pinmux_P8_30_hdmi_pin {
++		pinctrl-single,pins = <0x0ec  0x00>; };     /* lcd_ac_bias_en.lcd_ac_bias_en, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
++
+ 	/* P8_31 (ZCZ ball V4 ) hdmi    */
++	P8_31_default_pin: pinmux_P8_31_default_pin {
++		pinctrl-single,pins = <0x0d8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_31_gpio_pin: pinmux_P8_31_gpio_pin {
++		pinctrl-single,pins = <0x0d8  0x2F>; };     /* Mode 7, RxActive */
++	P8_31_gpio_pu_pin: pinmux_P8_31_gpio_pu_pin {
++		pinctrl-single,pins = <0x0d8  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_31_gpio_pd_pin: pinmux_P8_31_gpio_pd_pin {
++		pinctrl-single,pins = <0x0d8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_31_uart_pin: pinmux_P8_31_uart_pin {
++		pinctrl-single,pins = <0x0d8  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++	P8_31_hdmi_pin: pinmux_P8_31_hdmi_pin {
++		pinctrl-single,pins = <0x0d8  0x08>; };     /* lcd_data14.lcd_data14, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_32 (ZCZ ball T5 ) hdmi    */
++	P8_32_default_pin: pinmux_P8_32_default_pin {
++		pinctrl-single,pins = <0x0dc  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_32_gpio_pin: pinmux_P8_32_gpio_pin {
++		pinctrl-single,pins = <0x0dc  0x2F>; };     /* Mode 7, RxActive */
++	P8_32_gpio_pu_pin: pinmux_P8_32_gpio_pu_pin {
++		pinctrl-single,pins = <0x0dc  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_32_gpio_pd_pin: pinmux_P8_32_gpio_pd_pin {
++		pinctrl-single,pins = <0x0dc  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_32_uart_pin: pinmux_P8_32_uart_pin {
++		pinctrl-single,pins = <0x0dc  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_32_hdmi_pin: pinmux_P8_32_hdmi_pin {
++		pinctrl-single,pins = <0x0dc  0x08>; };     /* lcd_data15.lcd_data15, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_33 (ZCZ ball V3 ) hdmi    */
++	P8_33_default_pin: pinmux_P8_33_default_pin {
++		pinctrl-single,pins = <0x0d4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_33_gpio_pin: pinmux_P8_33_gpio_pin {
++		pinctrl-single,pins = <0x0d4  0x2F>; };     /* Mode 7, RxActive */
++	P8_33_gpio_pu_pin: pinmux_P8_33_gpio_pu_pin {
++		pinctrl-single,pins = <0x0d4  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_33_gpio_pd_pin: pinmux_P8_33_gpio_pd_pin {
++		pinctrl-single,pins = <0x0d4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_33_hdmi_pin: pinmux_P8_33_hdmi_pin {
++		pinctrl-single,pins = <0x0d4  0x08>; };     /* lcd_data13.lcd_data13, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_34 (ZCZ ball U4 ) hdmi    */
++	P8_34_default_pin: pinmux_P8_34_default_pin {
++		pinctrl-single,pins = <0x0cc  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_34_gpio_pin: pinmux_P8_34_gpio_pin {
++		pinctrl-single,pins = <0x0cc  0x2F>; };     /* Mode 7, RxActive */
++	P8_34_gpio_pu_pin: pinmux_P8_34_gpio_pu_pin {
++		pinctrl-single,pins = <0x0cc  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_34_gpio_pd_pin: pinmux_P8_34_gpio_pd_pin {
++		pinctrl-single,pins = <0x0cc  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_34_pwm_pin: pinmux_P8_34_pwm_pin {
++		pinctrl-single,pins = <0x0cc  0x22>; };     /* Mode 2, Pull-Down, RxActive */
++	P8_34_hdmi_pin: pinmux_P8_34_hdmi_pin {
++		pinctrl-single,pins = <0x0cc  0x08>; };     /* lcd_data11.lcd_data11, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_35 (ZCZ ball V2 ) hdmi    */
++	P8_35_default_pin: pinmux_P8_35_default_pin {
++		pinctrl-single,pins = <0x0d0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_35_gpio_pin: pinmux_P8_35_gpio_pin {
++		pinctrl-single,pins = <0x0d0  0x2F>; };     /* Mode 7, RxActive */
++	P8_35_gpio_pu_pin: pinmux_P8_35_gpio_pu_pin {
++		pinctrl-single,pins = <0x0d0  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_35_gpio_pd_pin: pinmux_P8_35_gpio_pd_pin {
++		pinctrl-single,pins = <0x0d0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_35_hdmi_pin: pinmux_P8_35_hdmi_pin {
++		pinctrl-single,pins = <0x0d0  0x08>; };     /* lcd_data12.lcd_data12, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_36 (ZCZ ball U3 ) hdmi    */
++	P8_36_default_pin: pinmux_P8_36_default_pin {
++		pinctrl-single,pins = <0x0c8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_36_gpio_pin: pinmux_P8_36_gpio_pin {
++		pinctrl-single,pins = <0x0c8  0x2F>; };     /* Mode 7, RxActive */
++	P8_36_gpio_pu_pin: pinmux_P8_36_gpio_pu_pin {
++		pinctrl-single,pins = <0x0c8  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_36_gpio_pd_pin: pinmux_P8_36_gpio_pd_pin {
++		pinctrl-single,pins = <0x0c8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_36_pwm_pin: pinmux_P8_36_pwm_pin {
++		pinctrl-single,pins = <0x0c8  0x22>; };     /* Mode 2, Pull-Down, RxActive */
++	P8_36_hdmi_pin: pinmux_P8_36_hdmi_pin {
++		pinctrl-single,pins = <0x0c8  0x08>; };     /* lcd_data10.lcd_data10, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_37 (ZCZ ball U1 ) hdmi    */
+ 	P8_37_default_pin: pinmux_P8_37_default_pin {
+-		pinctrl-single,pins = <0x0C0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++		pinctrl-single,pins = <0x0c0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
+ 	P8_37_gpio_pin: pinmux_P8_37_gpio_pin {
+-		pinctrl-single,pins = <0x0C0  0x2F>; };     /* Mode 7, RxActive */
++		pinctrl-single,pins = <0x0c0  0x2F>; };     /* Mode 7, RxActive */
+ 	P8_37_gpio_pu_pin: pinmux_P8_37_gpio_pu_pin {
+-		pinctrl-single,pins = <0x0C0  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++		pinctrl-single,pins = <0x0c0  0x37>; };     /* Mode 7, Pull-Up, RxActive */
+ 	P8_37_gpio_pd_pin: pinmux_P8_37_gpio_pd_pin {
+-		pinctrl-single,pins = <0x0C0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++		pinctrl-single,pins = <0x0c0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
+ 	P8_37_uart_pin: pinmux_P8_37_uart_pin {
+-		pinctrl-single,pins = <0x0C0  0x04>; };     /* Mode 4, Pull-Down*/
++		pinctrl-single,pins = <0x0c0  0x04>; };     /* Mode 4, Pull-Down*/
+ 	P8_37_pwm_pin: pinmux_P8_37_pwm_pin {
+-		pinctrl-single,pins = <0x0C0  0x02>; };     /* Mode 2, Pull-Down*/
++		pinctrl-single,pins = <0x0c0  0x02>; };     /* Mode 2, Pull-Down*/
++	P8_37_hdmi_pin: pinmux_P8_37_hdmi_pin {
++		pinctrl-single,pins = <0x0c0  0x08>; };     /* lcd_data8.lcd_data8, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 
+ 	/* P8_38 (ZCZ ball U2 ) hdmi    */
+ 	P8_38_default_pin: pinmux_P8_38_default_pin {
+-		pinctrl-single,pins = <0x0C4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++		pinctrl-single,pins = <0x0c4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
+ 	P8_38_gpio_pin: pinmux_P8_38_gpio_pin {
+-		pinctrl-single,pins = <0x0C4  0x2F>; };     /* Mode 7, RxActive */
++		pinctrl-single,pins = <0x0c4  0x2F>; };     /* Mode 7, RxActive */
+ 	P8_38_gpio_pu_pin: pinmux_P8_38_gpio_pu_pin {
+-		pinctrl-single,pins = <0x0C4  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++		pinctrl-single,pins = <0x0c4  0x37>; };     /* Mode 7, Pull-Up, RxActive */
+ 	P8_38_gpio_pd_pin: pinmux_P8_38_gpio_pd_pin {
+-		pinctrl-single,pins = <0x0C4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++		pinctrl-single,pins = <0x0c4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
+ 	P8_38_uart_pin: pinmux_P8_38_uart_pin {
+-		pinctrl-single,pins = <0x0C4  0x24>; };     /* Mode 4, Pull-Down, RxActive */
++		pinctrl-single,pins = <0x0c4  0x24>; };     /* Mode 4, Pull-Down, RxActive */
+ 	P8_38_pwm_pin: pinmux_P8_38_pwm_pin {
+-		pinctrl-single,pins = <0x0C4  0x22>; };     /* Mode 2, Pull-Down, RxActive */
++		pinctrl-single,pins = <0x0c4  0x22>; };     /* Mode 2, Pull-Down, RxActive */
++	P8_38_hdmi_pin: pinmux_P8_38_hdmi_pin {
++		pinctrl-single,pins = <0x0c4  0x08>; };     /* lcd_data9.lcd_data9, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 
+ 	/* P8_39 (ZCZ ball T3 ) hdmi    */
++	P8_39_default_pin: pinmux_P8_39_default_pin {
++		pinctrl-single,pins = <0x0b8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_39_gpio_pin: pinmux_P8_39_gpio_pin {
++		pinctrl-single,pins = <0x0b8  0x2F>; };     /* Mode 7, RxActive */
++	P8_39_gpio_pu_pin: pinmux_P8_39_gpio_pu_pin {
++		pinctrl-single,pins = <0x0b8  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_39_gpio_pd_pin: pinmux_P8_39_gpio_pd_pin {
++		pinctrl-single,pins = <0x0b8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_39_pruout_pin: pinmux_P8_39_pruout_pin {
++		pinctrl-single,pins = <0x0b8  0x05>; };     /* Mode 5, Pull-Down*/
++	P8_39_pruin_pin: pinmux_P8_39_pruin_pin {
++		pinctrl-single,pins = <0x0b8  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_39_hdmi_pin: pinmux_P8_39_hdmi_pin {
++		pinctrl-single,pins = <0x0b8  0x08>; };     /* lcd_data6.lcd_data6, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_40 (ZCZ ball T4 ) hdmi    */
++	P8_40_default_pin: pinmux_P8_40_default_pin {
++		pinctrl-single,pins = <0x0bc  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_40_gpio_pin: pinmux_P8_40_gpio_pin {
++		pinctrl-single,pins = <0x0bc  0x2F>; };     /* Mode 7, RxActive */
++	P8_40_gpio_pu_pin: pinmux_P8_40_gpio_pu_pin {
++		pinctrl-single,pins = <0x0bc  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_40_gpio_pd_pin: pinmux_P8_40_gpio_pd_pin {
++		pinctrl-single,pins = <0x0bc  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_40_pruout_pin: pinmux_P8_40_pruout_pin {
++		pinctrl-single,pins = <0x0bc  0x05>; };     /* Mode 5, Pull-Down*/
++	P8_40_pruin_pin: pinmux_P8_40_pruin_pin {
++		pinctrl-single,pins = <0x0bc  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_40_hdmi_pin: pinmux_P8_40_hdmi_pin {
++		pinctrl-single,pins = <0x0bc  0x08>; };     /* lcd_data7.lcd_data7, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_41 (ZCZ ball T1 ) hdmi    */
++	P8_41_default_pin: pinmux_P8_41_default_pin {
++		pinctrl-single,pins = <0x0b0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_41_gpio_pin: pinmux_P8_41_gpio_pin {
++		pinctrl-single,pins = <0x0b0  0x2F>; };     /* Mode 7, RxActive */
++	P8_41_gpio_pu_pin: pinmux_P8_41_gpio_pu_pin {
++		pinctrl-single,pins = <0x0b0  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_41_gpio_pd_pin: pinmux_P8_41_gpio_pd_pin {
++		pinctrl-single,pins = <0x0b0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_41_pruout_pin: pinmux_P8_41_pruout_pin {
++		pinctrl-single,pins = <0x0b0  0x05>; };     /* Mode 5, Pull-Down*/
++	P8_41_pruin_pin: pinmux_P8_41_pruin_pin {
++		pinctrl-single,pins = <0x0b0  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_41_hdmi_pin: pinmux_P8_41_hdmi_pin {
++		pinctrl-single,pins = <0x0b0  0x08>; };     /* lcd_data4.lcd_data4, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_42 (ZCZ ball T2 ) hdmi    */
++	P8_42_default_pin: pinmux_P8_42_default_pin {
++		pinctrl-single,pins = <0x0b4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_42_gpio_pin: pinmux_P8_42_gpio_pin {
++		pinctrl-single,pins = <0x0b4  0x2F>; };     /* Mode 7, RxActive */
++	P8_42_gpio_pu_pin: pinmux_P8_42_gpio_pu_pin {
++		pinctrl-single,pins = <0x0b4  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_42_gpio_pd_pin: pinmux_P8_42_gpio_pd_pin {
++		pinctrl-single,pins = <0x0b4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_42_pruout_pin: pinmux_P8_42_pruout_pin {
++		pinctrl-single,pins = <0x0b4  0x05>; };     /* Mode 5, Pull-Down*/
++	P8_42_pruin_pin: pinmux_P8_42_pruin_pin {
++		pinctrl-single,pins = <0x0b4  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_42_hdmi_pin: pinmux_P8_42_hdmi_pin {
++		pinctrl-single,pins = <0x0b4  0x08>; };     /* lcd_data5.lcd_data5, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_43 (ZCZ ball R3 ) hdmi    */
++	P8_43_default_pin: pinmux_P8_43_default_pin {
++		pinctrl-single,pins = <0x0a8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_43_gpio_pin: pinmux_P8_43_gpio_pin {
++		pinctrl-single,pins = <0x0a8  0x2F>; };     /* Mode 7, RxActive */
++	P8_43_gpio_pu_pin: pinmux_P8_43_gpio_pu_pin {
++		pinctrl-single,pins = <0x0a8  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_43_gpio_pd_pin: pinmux_P8_43_gpio_pd_pin {
++		pinctrl-single,pins = <0x0a8  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_43_pruout_pin: pinmux_P8_43_pruout_pin {
++		pinctrl-single,pins = <0x0a8  0x05>; };     /* Mode 5, Pull-Down*/
++	P8_43_pruin_pin: pinmux_P8_43_pruin_pin {
++		pinctrl-single,pins = <0x0a8  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_43_pwm_pin: pinmux_P8_43_pwm_pin {
++		pinctrl-single,pins = <0x0a8  0x03>; };     /* Mode 3, Pull-Down  */
++	P8_43_hdmi_pin: pinmux_P8_43_hdmi_pin {
++		pinctrl-single,pins = <0x0a8  0x08>; };     /* lcd_data2.lcd_data2, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_44 (ZCZ ball R4 ) hdmi    */
++	P8_44_default_pin: pinmux_P8_44_default_pin {
++		pinctrl-single,pins = <0x0ac  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_44_gpio_pin: pinmux_P8_44_gpio_pin {
++		pinctrl-single,pins = <0x0ac  0x2F>; };     /* Mode 7, RxActive */
++	P8_44_gpio_pu_pin: pinmux_P8_44_gpio_pu_pin {
++		pinctrl-single,pins = <0x0ac  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_44_gpio_pd_pin: pinmux_P8_44_gpio_pd_pin {
++		pinctrl-single,pins = <0x0ac  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_44_pruout_pin: pinmux_P8_44_pruout_pin {
++		pinctrl-single,pins = <0x0ac  0x05>; };     /* Mode 5, Pull-Down*/
++	P8_44_pruin_pin: pinmux_P8_44_pruin_pin {
++		pinctrl-single,pins = <0x0ac  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_44_pwm_pin: pinmux_P8_44_pwm_pin {
++		pinctrl-single,pins = <0x0ac  0x23>; };     /* Mode 3, Pull-Down, RxActive */
++	P8_44_hdmi_pin: pinmux_P8_44_hdmi_pin {
++		pinctrl-single,pins = <0x0ac  0x08>; };     /* lcd_data3.lcd_data3, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_45 (ZCZ ball R1 ) hdmi    */
++	P8_45_default_pin: pinmux_P8_45_default_pin {
++		pinctrl-single,pins = <0x0a0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_45_gpio_pin: pinmux_P8_45_gpio_pin {
++		pinctrl-single,pins = <0x0a0  0x2F>; };     /* Mode 7, RxActive */
++	P8_45_gpio_pu_pin: pinmux_P8_45_gpio_pu_pin {
++		pinctrl-single,pins = <0x0a0  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_45_gpio_pd_pin: pinmux_P8_45_gpio_pd_pin {
++		pinctrl-single,pins = <0x0a0  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_45_pruout_pin: pinmux_P8_45_pruout_pin {
++		pinctrl-single,pins = <0x0a0  0x05>; };     /* Mode 5, Pull-Down*/
++	P8_45_pruin_pin: pinmux_P8_45_pruin_pin {
++		pinctrl-single,pins = <0x0a0  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_45_pwm_pin: pinmux_P8_45_pwm_pin {
++		pinctrl-single,pins = <0x0a0  0x03>; };     /* Mode 3, Pull-Down*/
++	P8_45_hdmi_pin: pinmux_P8_45_hdmi_pin {
++		pinctrl-single,pins = <0x0a0  0x08>; };     /* lcd_data0.lcd_data0, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
++
+ 	/* P8_46 (ZCZ ball R2 ) hdmi    */
++	P8_46_default_pin: pinmux_P8_46_default_pin {
++		pinctrl-single,pins = <0x0a4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_46_gpio_pin: pinmux_P8_46_gpio_pin {
++		pinctrl-single,pins = <0x0a4  0x2F>; };     /* Mode 7, RxActive */
++	P8_46_gpio_pu_pin: pinmux_P8_46_gpio_pu_pin {
++		pinctrl-single,pins = <0x0a4  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P8_46_gpio_pd_pin: pinmux_P8_46_gpio_pd_pin {
++		pinctrl-single,pins = <0x0a4  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P8_46_pruout_pin: pinmux_P8_46_pruout_pin {
++		pinctrl-single,pins = <0x0a4  0x05>; };     /* Mode 5, Pull-Down*/
++	P8_46_pruin_pin: pinmux_P8_46_pruin_pin {
++		pinctrl-single,pins = <0x0a4  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P8_46_pwm_pin: pinmux_P8_46_pwm_pin {
++		pinctrl-single,pins = <0x0a4  0x03>; };     /* Mode 3, Pull-Down*/
++	P8_46_hdmi_pin: pinmux_P8_46_hdmi_pin {
++		pinctrl-single,pins = <0x0a4  0x08>; };     /* lcd_data1.lcd_data1, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 
+ 	/************************/
+ 	/* P9 Header            */
+@@ -446,6 +713,8 @@
+ 		pinctrl-single,pins = <0x1ac  0x25>; };     /* Mode 5, Pull-Down, RxActive */
+ 	P9_25_pruin_pin: pinmux_P9_25_pruin_pin {
+ 		pinctrl-single,pins = <0x1ac  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P9_25_audio_pin: pinmux_P9_25_audio_pin {
++		pinctrl-single,pins = <0x1ac  (PIN_INPUT_PULLUP | MUX_MODE0)>; };	/* mcasp0_ahclkx.mcasp0_ahclkx */
+ 
+ 	/* P9_26 (ZCZ ball D16) */
+ 	P9_26_default_pin: pinmux_P9_26_default_pin {
+@@ -500,6 +769,8 @@
+ 		pinctrl-single,pins = <0x19c  0x25>; };     /* Mode 5, Pull-Down, RxActive */
+ 	P9_28_pruin_pin: pinmux_P9_28_pruin_pin {
+ 		pinctrl-single,pins = <0x19c  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P9_28_audio_pin: pinmux_P9_28_audio_pin {
++		pinctrl-single,pins = <0x19c  (PIN_OUTPUT_PULLDOWN | MUX_MODE2)>; };	/* mcasp0_ahclkr.mcasp0_axr2 */
+ 
+ 	/* P9_29 (ZCZ ball B13) Audio   */
+ 	P9_29_default_pin: pinmux_P9_29_default_pin {
+@@ -518,6 +789,8 @@
+ 		pinctrl-single,pins = <0x194  0x25>; };     /* Mode 5, Pull-Down, RxActive */
+ 	P9_29_pruin_pin: pinmux_P9_29_pruin_pin {
+ 		pinctrl-single,pins = <0x194  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P9_29_audio_pin: pinmux_P9_29_audio_pin {
++		pinctrl-single,pins = <0x194  (PIN_OUTPUT_PULLUP | MUX_MODE0)>; };	/* mcasp0_fsx.mcasp0_fsx */
+ 
+ 	/* P9_30 (ZCZ ball D12) */
+ 	P9_30_default_pin: pinmux_P9_30_default_pin {
+@@ -554,6 +827,8 @@
+ 		pinctrl-single,pins = <0x190  0x25>; };     /* Mode 5, Pull-Down, RxActive */
+ 	P9_31_pruin_pin: pinmux_P9_31_pruin_pin {
+ 		pinctrl-single,pins = <0x190  0x26>; };     /* Mode 6, Pull-Down, RxActive */
++	P9_31_audio_pin: pinmux_P9_31_audio_pin {
++		pinctrl-single,pins = <0x190  (PIN_OUTPUT_PULLDOWN | MUX_MODE0)>; };	/* mcasp0_aclkx.mcasp0_aclkx */
+ 
+ 	/* P9_32                VADC    */
+ 	/* P9_33 (ZCZ ball C8 ) AIN4    */
+@@ -806,32 +1081,263 @@
+ 		pinctrl-3 = <&P8_26_gpio_pd_pin>;
+ 	};
+ 
++	P8_27_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin", "hdmi";
++		pinctrl-0 = <&P8_27_default_pin>;
++		pinctrl-1 = <&P8_27_gpio_pin>;
++		pinctrl-2 = <&P8_27_gpio_pu_pin>;
++		pinctrl-3 = <&P8_27_gpio_pd_pin>;
++		pinctrl-4 = <&P8_27_pruout_pin>;
++		pinctrl-5 = <&P8_27_pruin_pin>;
++		pinctrl-6 = <&P8_27_hdmi_pin>;
++	};
++
++	P8_28_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin", "hdmi";
++		pinctrl-0 = <&P8_28_default_pin>;
++		pinctrl-1 = <&P8_28_gpio_pin>;
++		pinctrl-2 = <&P8_28_gpio_pu_pin>;
++		pinctrl-3 = <&P8_28_gpio_pd_pin>;
++		pinctrl-4 = <&P8_28_pruout_pin>;
++		pinctrl-5 = <&P8_28_pruin_pin>;
++		pinctrl-6 = <&P8_28_hdmi_pin>;
++	};
++
++	P8_29_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin", "hdmi";
++		pinctrl-0 = <&P8_29_default_pin>;
++		pinctrl-1 = <&P8_29_gpio_pin>;
++		pinctrl-2 = <&P8_29_gpio_pu_pin>;
++		pinctrl-3 = <&P8_29_gpio_pd_pin>;
++		pinctrl-4 = <&P8_29_pruout_pin>;
++		pinctrl-5 = <&P8_29_pruin_pin>;
++		pinctrl-6 = <&P8_29_hdmi_pin>;
++	};
++
++	P8_30_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin", "hdmi";
++		pinctrl-0 = <&P8_30_default_pin>;
++		pinctrl-1 = <&P8_30_gpio_pin>;
++		pinctrl-2 = <&P8_30_gpio_pu_pin>;
++		pinctrl-3 = <&P8_30_gpio_pd_pin>;
++		pinctrl-4 = <&P8_30_pruout_pin>;
++		pinctrl-5 = <&P8_30_pruin_pin>;
++		pinctrl-6 = <&P8_30_hdmi_pin>;
++	};
++
++	P8_31_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd","uart", "hdmi";
++		pinctrl-0 = <&P8_31_default_pin>;
++		pinctrl-1 = <&P8_31_gpio_pin>;
++		pinctrl-2 = <&P8_31_gpio_pu_pin>;
++		pinctrl-3 = <&P8_31_gpio_pd_pin>;
++		pinctrl-4 = <&P8_31_uart_pin>;
++		pinctrl-5 = <&P8_31_hdmi_pin>;
++	};
++
++	P8_32_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "hdmi";
++		pinctrl-0 = <&P8_32_default_pin>;
++		pinctrl-1 = <&P8_32_gpio_pin>;
++		pinctrl-2 = <&P8_32_gpio_pu_pin>;
++		pinctrl-3 = <&P8_32_gpio_pd_pin>;
++		pinctrl-4 = <&P8_32_hdmi_pin>;
++	};
++
++	P8_33_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "hdmi";
++		pinctrl-0 = <&P8_33_default_pin>;
++		pinctrl-1 = <&P8_33_gpio_pin>;
++		pinctrl-2 = <&P8_33_gpio_pu_pin>;
++		pinctrl-3 = <&P8_33_gpio_pd_pin>;
++		pinctrl-4 = <&P8_33_hdmi_pin>;
++	};
++
++	P8_34_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd","pwm", "hdmi";
++		pinctrl-0 = <&P8_34_default_pin>;
++		pinctrl-1 = <&P8_34_gpio_pin>;
++		pinctrl-2 = <&P8_34_gpio_pu_pin>;
++		pinctrl-3 = <&P8_34_gpio_pd_pin>;
++		pinctrl-4 = <&P8_34_pwm_pin>;
++		pinctrl-5 = <&P8_34_hdmi_pin>;
++	};
++
++	P8_35_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "hdmi";
++		pinctrl-0 = <&P8_35_default_pin>;
++		pinctrl-1 = <&P8_35_gpio_pin>;
++		pinctrl-2 = <&P8_35_gpio_pu_pin>;
++		pinctrl-3 = <&P8_35_gpio_pd_pin>;
++		pinctrl-4 = <&P8_35_hdmi_pin>;
++	};
++
++	P8_36_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd","pwm", "hdmi";
++		pinctrl-0 = <&P8_36_default_pin>;
++		pinctrl-1 = <&P8_36_gpio_pin>;
++		pinctrl-2 = <&P8_36_gpio_pu_pin>;
++		pinctrl-3 = <&P8_36_gpio_pd_pin>;
++		pinctrl-4 = <&P8_36_pwm_pin>;
++		pinctrl-5 = <&P8_36_hdmi_pin>;
++	};
++
+ 	P8_37_pinmux {
+ 		compatible = "bone-pinmux-helper";
+ 		status = "okay";
+-		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd","uart","pwm";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd","uart","pwm", "hdmi";
+ 		pinctrl-0 = <&P8_37_default_pin>;
+ 		pinctrl-1 = <&P8_37_gpio_pin>;
+ 		pinctrl-2 = <&P8_37_gpio_pu_pin>;
+ 		pinctrl-3 = <&P8_37_gpio_pd_pin>;
+ 		pinctrl-4 = <&P8_37_uart_pin>;
+ 		pinctrl-5 = <&P8_37_pwm_pin>;
++		pinctrl-6 = <&P8_37_hdmi_pin>;
+ 	};
+ 
+ 	P8_38_pinmux {
+ 		compatible = "bone-pinmux-helper";
+ 		status = "okay";
+-		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd","uart","pwm";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd","uart","pwm", "hdmi";
+ 		pinctrl-0 = <&P8_38_default_pin>;
+ 		pinctrl-1 = <&P8_38_gpio_pin>;
+ 		pinctrl-2 = <&P8_38_gpio_pu_pin>;
+ 		pinctrl-3 = <&P8_38_gpio_pd_pin>;
+ 		pinctrl-4 = <&P8_38_uart_pin>;
+ 		pinctrl-5 = <&P8_38_pwm_pin>;
++		pinctrl-6 = <&P8_38_hdmi_pin>;
++	};
++
++	P8_39_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin", "hdmi";
++		pinctrl-0 = <&P8_39_default_pin>;
++		pinctrl-1 = <&P8_39_gpio_pin>;
++		pinctrl-2 = <&P8_39_gpio_pu_pin>;
++		pinctrl-3 = <&P8_39_gpio_pd_pin>;
++		pinctrl-4 = <&P8_39_pruout_pin>;
++		pinctrl-5 = <&P8_39_pruin_pin>;
++		pinctrl-6 = <&P8_39_hdmi_pin>;
++	};
++
++	P8_40_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin", "hdmi";
++		pinctrl-0 = <&P8_40_default_pin>;
++		pinctrl-1 = <&P8_40_gpio_pin>;
++		pinctrl-2 = <&P8_40_gpio_pu_pin>;
++		pinctrl-3 = <&P8_40_gpio_pd_pin>;
++		pinctrl-4 = <&P8_40_pruout_pin>;
++		pinctrl-5 = <&P8_40_pruin_pin>;
++		pinctrl-6 = <&P8_40_hdmi_pin>;
++	};
++
++	P8_41_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin", "hdmi";
++		pinctrl-0 = <&P8_41_default_pin>;
++		pinctrl-1 = <&P8_41_gpio_pin>;
++		pinctrl-2 = <&P8_41_gpio_pu_pin>;
++		pinctrl-3 = <&P8_41_gpio_pd_pin>;
++		pinctrl-4 = <&P8_41_pruout_pin>;
++		pinctrl-5 = <&P8_41_pruin_pin>;
++		pinctrl-6 = <&P8_41_hdmi_pin>;
++	};
++
++	P8_42_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin", "hdmi";
++		pinctrl-0 = <&P8_42_default_pin>;
++		pinctrl-1 = <&P8_42_gpio_pin>;
++		pinctrl-2 = <&P8_42_gpio_pu_pin>;
++		pinctrl-3 = <&P8_42_gpio_pd_pin>;
++		pinctrl-4 = <&P8_42_pruout_pin>;
++		pinctrl-5 = <&P8_42_pruin_pin>;
++		pinctrl-6 = <&P8_42_hdmi_pin>;
++	};
++
++	P8_43_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin","pwm", "hdmi";
++		pinctrl-0 = <&P8_43_default_pin>;
++		pinctrl-1 = <&P8_43_gpio_pin>;
++		pinctrl-2 = <&P8_43_gpio_pu_pin>;
++		pinctrl-3 = <&P8_43_gpio_pd_pin>;
++		pinctrl-4 = <&P8_43_pruout_pin>;
++		pinctrl-5 = <&P8_43_pruin_pin>;
++		pinctrl-6 = <&P8_43_pwm_pin>;
++		pinctrl-7 = <&P8_43_hdmi_pin>;
++	};
++
++	P8_44_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin","pwm", "hdmi";
++		pinctrl-0 = <&P8_44_default_pin>;
++		pinctrl-1 = <&P8_44_gpio_pin>;
++		pinctrl-2 = <&P8_44_gpio_pu_pin>;
++		pinctrl-3 = <&P8_44_gpio_pd_pin>;
++		pinctrl-4 = <&P8_44_pruout_pin>;
++		pinctrl-5 = <&P8_44_pruin_pin>;
++		pinctrl-6 = <&P8_44_pwm_pin>;
++		pinctrl-7 = <&P8_44_hdmi_pin>;
++	};
++
++	P8_45_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin","pwm", "hdmi";
++		pinctrl-0 = <&P8_45_default_pin>;
++		pinctrl-1 = <&P8_45_gpio_pin>;
++		pinctrl-2 = <&P8_45_gpio_pu_pin>;
++		pinctrl-3 = <&P8_45_gpio_pd_pin>;
++		pinctrl-4 = <&P8_45_pruout_pin>;
++		pinctrl-5 = <&P8_45_pruin_pin>;
++		pinctrl-6 = <&P8_45_pwm_pin>;
++		pinctrl-7 = <&P8_45_hdmi_pin>;
++	};
++
++	P8_46_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pruout", "pruin","pwm", "hdmi";
++		pinctrl-0 = <&P8_46_default_pin>;
++		pinctrl-1 = <&P8_46_gpio_pin>;
++		pinctrl-2 = <&P8_46_gpio_pu_pin>;
++		pinctrl-3 = <&P8_46_gpio_pd_pin>;
++		pinctrl-4 = <&P8_46_pruout_pin>;
++		pinctrl-5 = <&P8_46_pruin_pin>;
++		pinctrl-6 = <&P8_46_pwm_pin>;
++		pinctrl-7 = <&P8_46_hdmi_pin>;
+ 	};
+ 
+ 	/************************/
+-	/* P9 Header            */
++	/* P9 Header	        */
+ 	/************************/
+ 
+ 	P9_11_pinmux {
+@@ -985,7 +1491,7 @@
+ 	P9_25_pinmux {
+ 		compatible = "bone-pinmux-helper";
+ 		status = "okay";
+-		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "qep", "pruout", "pruin";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "qep", "pruout", "pruin", "audio";
+ 		pinctrl-0 = <&P9_25_default_pin>;
+ 		pinctrl-1 = <&P9_25_gpio_pin>;
+ 		pinctrl-2 = <&P9_25_gpio_pu_pin>;
+@@ -993,6 +1499,7 @@
+ 		pinctrl-4 = <&P9_25_qep_pin>;
+ 		pinctrl-5 = <&P9_25_pruout_pin>;
+ 		pinctrl-6 = <&P9_25_pruin_pin>;
++		pinctrl-7 = <&P9_25_audio_pin>;
+ 	};
+ 
+ 	P9_26_pinmux {
+@@ -1025,7 +1532,7 @@
+ 	P9_28_pinmux {
+ 		compatible = "bone-pinmux-helper";
+ 		status = "okay";
+-		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm", "spi", "pwm2", "pruout", "pruin";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm", "spi", "pwm2", "pruout", "pruin", "audio";
+ 		pinctrl-0 = <&P9_28_default_pin>;
+ 		pinctrl-1 = <&P9_28_gpio_pin>;
+ 		pinctrl-2 = <&P9_28_gpio_pu_pin>;
+@@ -1035,12 +1542,13 @@
+ 		pinctrl-6 = <&P9_28_pwm2_pin>;
+ 		pinctrl-7 = <&P9_28_pruout_pin>;
+ 		pinctrl-8 = <&P9_28_pruin_pin>;
++		pinctrl-9 = <&P9_28_audio_pin>;
+ 	};
+ 
+ 	P9_29_pinmux {
+ 		compatible = "bone-pinmux-helper";
+ 		status = "okay";
+-		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm", "spi", "pruout", "pruin";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm", "spi", "pruout", "pruin", "audio";
+ 		pinctrl-0 = <&P9_29_default_pin>;
+ 		pinctrl-1 = <&P9_29_gpio_pin>;
+ 		pinctrl-2 = <&P9_29_gpio_pu_pin>;
+@@ -1049,6 +1557,7 @@
+ 		pinctrl-5 = <&P9_29_spi_pin>;
+ 		pinctrl-6 = <&P9_29_pruout_pin>;
+ 		pinctrl-7 = <&P9_29_pruin_pin>;
++		pinctrl-8 = <&P9_29_audio_pin>;
+ 	};
+ 
+ 	P9_30_pinmux {
+@@ -1068,7 +1577,7 @@
+ 	P9_31_pinmux {
+ 		compatible = "bone-pinmux-helper";
+ 		status = "okay";
+-		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm", "spi", "pruout", "pruin";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "pwm", "spi", "pruout", "pruin", "audio";
+ 		pinctrl-0 = <&P9_31_default_pin>;
+ 		pinctrl-1 = <&P9_31_gpio_pin>;
+ 		pinctrl-2 = <&P9_31_gpio_pu_pin>;
+@@ -1077,6 +1586,7 @@
+ 		pinctrl-5 = <&P9_31_spi_pin>;
+ 		pinctrl-6 = <&P9_31_pruout_pin>;
+ 		pinctrl-7 = <&P9_31_pruin_pin>;
++		pinctrl-8 = <&P9_31_audio_pin>;
+ 	};
+ 
+ 	P9_41_pinmux {
+@@ -1215,12 +1725,134 @@
+ 			input;
+ 			dir-changeable;
+ 		};
++
+ 		P8_26 {
+ 			gpio-name = "P8_26";
+ 			gpio = <&gpio1 29 0>;
+ 			input;
+ 			dir-changeable;
+ 		};
++		P8_27 {
++			gpio-name = "P8_27";
++			gpio = <&gpio2 22 0>;
++			input;
++			dir-changeable;
++		};
++		P8_28 {
++			gpio-name = "P8_28";
++			gpio = <&gpio2 24 0>;
++			input;
++			dir-changeable;
++		};
++		P8_29 {
++			gpio-name = "P8_29";
++			gpio = <&gpio2 23 0>;
++			input;
++			dir-changeable;
++		};
++		P8_30 {
++			gpio-name = "P8_30";
++			gpio = <&gpio2 25 0>;
++			input;
++			dir-changeable;
++		};
++		P8_31 {
++			gpio-name = "P8_31";
++			gpio = <&gpio0 10 0>;
++			input;
++			dir-changeable;
++		};
++		P8_32 {
++			gpio-name = "P8_32";
++			gpio = <&gpio0 11 0>;
++			input;
++			dir-changeable;
++		};
++		P8_33 {
++			gpio-name = "P8_33";
++			gpio = <&gpio0 9 0>;
++			input;
++			dir-changeable;
++		};
++		P8_34 {
++			gpio-name = "P8_34";
++			gpio = <&gpio2 17 0>;
++			input;
++			dir-changeable;
++		};
++		P8_35 {
++			gpio-name = "P8_35";
++			gpio = <&gpio0 8 0>;
++			input;
++			dir-changeable;
++		};
++		P8_36 {
++			gpio-name = "P8_36";
++			gpio = <&gpio2 16 0>;
++			input;
++			dir-changeable;
++		};
++		P8_37 {
++			gpio-name = "P8_37";
++			gpio = <&gpio2 14 0>;
++			input;
++			dir-changeable;
++		};
++		P8_38 {
++			gpio-name = "P8_38";
++			gpio = <&gpio2 15 0>;
++			input;
++			dir-changeable;
++		};
++		P8_39 {
++			gpio-name = "P8_39";
++			gpio = <&gpio2 12 0>;
++			input;
++			dir-changeable;
++		};
++		P8_40 {
++			gpio-name = "P8_40";
++			gpio = <&gpio2 13 0>;
++			input;
++			dir-changeable;
++		};
++		P8_41 {
++			gpio-name = "P8_41";
++			gpio = <&gpio2 10 0>;
++			input;
++			dir-changeable;
++		};
++		P8_42 {
++			gpio-name = "P8_42";
++			gpio = <&gpio2 11 0>;
++			input;
++			dir-changeable;
++		};
++		P8_43 {
++			gpio-name = "P8_43";
++			gpio = <&gpio2 8 0>;
++			input;
++			dir-changeable;
++		};
++		P8_44 {
++			gpio-name = "P8_44";
++			gpio = <&gpio2 9 0>;
++			input;
++			dir-changeable;
++		};
++		P8_45 {
++			gpio-name = "P8_45";
++			gpio = <&gpio2 6 0>;
++			input;
++			dir-changeable;
++		};
++		P8_46 {
++			gpio-name = "P8_46";
++			gpio = <&gpio2 7 0>;
++			input;
++			dir-changeable;
++		};
++
+ 
+ 		P9_11 {
+ 			gpio-name = "P9_11";
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0011-pinmux-helper-can1.patch b/patches/beaglebone/pinmux-helper/0011-pinmux-helper-can1.patch
new file mode 100644
index 000000000..c5f253603
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0011-pinmux-helper-can1.patch
@@ -0,0 +1,27 @@
+From 696aa0f4426c2043b86acaccedf69b26fdb5cab1 Mon Sep 17 00:00:00 2001
+From: Adrian Remonda <adrianremonda@gmail.com>
+Date: Sun, 5 Oct 2014 12:50:46 +0200
+Subject: [PATCH 11/13] pinmux-helper: can1
+
+Signed-off-by: Adrian Remonda <adrianremonda@gmail.com>
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/boot/dts/am335x-bone-common-universal.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/am335x-bone-common-universal.dtsi b/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
+index 46028cd..e95f578 100644
+--- a/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
++++ b/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
+@@ -728,7 +728,7 @@
+ 	P9_26_uart_pin: pinmux_P9_26_uart_pin {
+ 		pinctrl-single,pins = <0x180  0x30>; };     /* Mode 0, Pull-Up, RxActive */
+ 	P9_26_can_pin: pinmux_P9_26_can_pin {
+-		pinctrl-single,pins = <0x180  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++		pinctrl-single,pins = <0x180  0x12>; };     /* Mode 2, Pull-Up, RxActive */
+ 	P9_26_i2c_pin: pinmux_P9_26_i2c_pin {
+ 		pinctrl-single,pins = <0x180  0x33>; };     /* Mode 3, Pull-Up, RxActive */
+ 	P9_26_pruin_pin: pinmux_P9_26_pruin_pin {
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0012-Remove-CONFIG_EXPERIMENTAL-dependency-on-CONFIG_GPIO.patch b/patches/beaglebone/pinmux-helper/0012-Remove-CONFIG_EXPERIMENTAL-dependency-on-CONFIG_GPIO.patch
new file mode 100644
index 000000000..8265d7aa5
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0012-Remove-CONFIG_EXPERIMENTAL-dependency-on-CONFIG_GPIO.patch
@@ -0,0 +1,32 @@
+From c0e2dce293a9177465f09fa5be153f05dd589d1d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Tobias=20M=C3=BCller?= <Tobias_Mueller@twam.info>
+Date: Wed, 12 Nov 2014 20:10:49 +0100
+Subject: [PATCH 12/13] Remove CONFIG_EXPERIMENTAL dependency on
+ CONFIG_GPIO_OF_HELPER as CONFIG_EXPERIMENTAL has been removed with 3.9
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Tobias Müller <Tobias_Mueller@twam.info>
+---
+ drivers/gpio/Kconfig | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
+index 9cab8f6..a15f182 100644
+--- a/drivers/gpio/Kconfig
++++ b/drivers/gpio/Kconfig
+@@ -86,8 +86,8 @@ config GPIO_SYSFS
+ 	  exported to userspace; this can be useful when debugging.
+ 
+ config GPIO_OF_HELPER
+-	bool "GPIO OF helper device"
+-	depends on OF_GPIO && EXPERIMENTAL
++	bool "GPIO OF helper device (EXPERIMENTAL)"
++	depends on OF_GPIO
+ 	help
+ 	  Say Y here to add an GPIO OF helper driver
+ 
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0013-pinmux-helper-add-P9_19_pinmux-P9_20_pinmux.patch b/patches/beaglebone/pinmux-helper/0013-pinmux-helper-add-P9_19_pinmux-P9_20_pinmux.patch
new file mode 100644
index 000000000..6614eeee6
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0013-pinmux-helper-add-P9_19_pinmux-P9_20_pinmux.patch
@@ -0,0 +1,111 @@
+From fa387a8df23d7daf9e5d539c3f7224c8574257f7 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Fri, 5 Dec 2014 11:16:40 -0600
+Subject: [PATCH 13/13] pinmux-helper: add P9_19_pinmux & P9_20_pinmux
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ .../arm/boot/dts/am335x-bone-common-universal.dtsi | 73 ++++++++++++++++++----
+ 1 file changed, 62 insertions(+), 11 deletions(-)
+
+diff --git a/arch/arm/boot/dts/am335x-bone-common-universal.dtsi b/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
+index e95f578..781e33f 100644
+--- a/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
++++ b/arch/arm/boot/dts/am335x-bone-common-universal.dtsi
+@@ -628,9 +628,33 @@
+ 	P9_18_pwm_pin: pinmux_P9_18_pwm_pin {
+ 		pinctrl-single,pins = <0x158  0x33>; };     /* Mode 3, Pull-Up, RxActive */
+ 
+-	// Leave the cape I2C EEPROM bus alone
+-	/* P9_19 (ZCZ ball D17) I2C     */
+-	/* P9_20 (ZCZ ball D18) I2C     */
++	/* P9_19 (ZCZ ball D17) */
++	P9_19_default_pin: pinmux_P9_19_default_pin {
++		pinctrl-single,pins = <0x17c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_19_gpio_pin: pinmux_P9_19_gpio_pin {
++		pinctrl-single,pins = <0x17c  0x2F>; };     /* Mode 7, RxActive */
++	P9_19_gpio_pu_pin: pinmux_P9_19_gpio_pu_pin {
++		pinctrl-single,pins = <0x17c  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_19_gpio_pd_pin: pinmux_P9_19_gpio_pd_pin {
++		pinctrl-single,pins = <0x17c  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_19_can_pin: pinmux_P9_19_can_pin {
++		pinctrl-single,pins = <0x17c  0x32>; };     /* Mode 2, Pull-Up, RxActive */
++	P9_19_i2c_pin: pinmux_P9_19_i2c_pin {
++		pinctrl-single,pins = <0x17c  0x73>; };     /* (SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE3) */
++
++	/* P9_20 (ZCZ ball D18) */
++	P9_20_default_pin: pinmux_P9_20_default_pin {
++		pinctrl-single,pins = <0x178  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_20_gpio_pin: pinmux_P9_20_gpio_pin {
++		pinctrl-single,pins = <0x178  0x2F>; };     /* Mode 7, RxActive */
++	P9_20_gpio_pu_pin: pinmux_P9_20_gpio_pu_pin {
++		pinctrl-single,pins = <0x178  0x37>; };     /* Mode 7, Pull-Up, RxActive */
++	P9_20_gpio_pd_pin: pinmux_P9_20_gpio_pd_pin {
++		pinctrl-single,pins = <0x178  0x27>; };     /* Mode 7, Pull-Down, RxActive */
++	P9_20_can_pin: pinmux_P9_20_can_pin {
++		pinctrl-single,pins = <0x178  0x12>; };     /* Mode 2, Pull-Up, RxActive */
++	P9_20_i2c_pin: pinmux_P9_20_i2c_pin {
++		pinctrl-single,pins = <0x178  0x73>; };     /* (SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE3) */
+ 
+ 	/* P9_21 (ZCZ ball B17) */
+ 	P9_21_default_pin: pinmux_P9_21_default_pin {
+@@ -1431,9 +1455,29 @@
+ 		pinctrl-6 = <&P9_18_pwm_pin>;
+ 	};
+ 
+-	// I2C Pins
+-	// P9_19_pinmux
+-	// P9_20_pinmux
++	P9_19_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "can", "i2c";
++		pinctrl-0 = <&P9_19_default_pin>;
++		pinctrl-1 = <&P9_19_gpio_pin>;
++		pinctrl-2 = <&P9_19_gpio_pu_pin>;
++		pinctrl-3 = <&P9_19_gpio_pd_pin>;
++		pinctrl-4 = <&P9_19_can_pin>;
++		pinctrl-5 = <&P9_19_i2c_pin>;
++	};
++
++	P9_20_pinmux {
++		compatible = "bone-pinmux-helper";
++		status = "okay";
++		pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "can", "i2c";
++		pinctrl-0 = <&P9_20_default_pin>;
++		pinctrl-1 = <&P9_20_gpio_pin>;
++		pinctrl-2 = <&P9_20_gpio_pu_pin>;
++		pinctrl-3 = <&P9_20_gpio_pd_pin>;
++		pinctrl-4 = <&P9_20_can_pin>;
++		pinctrl-5 = <&P9_20_i2c_pin>;
++	};
+ 
+ 	P9_21_pinmux {
+ 		compatible = "bone-pinmux-helper";
+@@ -1902,11 +1946,18 @@
+ 			input;
+ 			dir-changeable;
+ 		};
+-
+-		// I2C pins
+-		// P9_19
+-		// P9_20
+-
++		P9_19 {
++			gpio-name = "P9_19";
++			gpio = <&gpio0 13 0>;
++			input;
++			dir-changeable;
++		};
++		P9_20 {
++			gpio-name = "P9_20";
++			gpio = <&gpio0 12 0>;
++			input;
++			dir-changeable;
++		};
+ 		P9_21 {
+ 			gpio-name = "P9_21";
+ 			gpio = <&gpio0 3 0>;
+-- 
+2.1.4
+
diff --git a/patches/beaglebone/pinmux-helper/0014-gpio-of-helper-idr_alloc.patch b/patches/beaglebone/pinmux-helper/0014-gpio-of-helper-idr_alloc.patch
new file mode 100644
index 000000000..5a76103bd
--- /dev/null
+++ b/patches/beaglebone/pinmux-helper/0014-gpio-of-helper-idr_alloc.patch
@@ -0,0 +1,76 @@
+From 4814b43ddb6d5509930776f72d48f3009eb63758 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Tue, 2 Jun 2015 13:17:05 -0500
+Subject: [PATCH 14/14] gpio-of-helper: idr_alloc
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ drivers/gpio/gpio-of-helper.c | 31 ++++++++++++++++++++++---------
+ 1 file changed, 22 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/gpio/gpio-of-helper.c b/drivers/gpio/gpio-of-helper.c
+index 1c289b2..a9f260b 100644
+--- a/drivers/gpio/gpio-of-helper.c
++++ b/drivers/gpio/gpio-of-helper.c
+@@ -208,11 +208,13 @@ gpio_of_entry_create(struct gpio_of_helper_info *info,
+ 			irq_flags |= IRQF_TRIGGER_FALLING;
+ 	}
+ 
+-	if (!idr_pre_get(&info->idr, GFP_KERNEL)) {
+-		dev_err(dev, "Failed on idr_pre_get of '%s'\n", name);
+-		err = -ENOMEM;
+-		goto err_no_mem;
+-	}
++//	if (!idr_pre_get(&info->idr, GFP_KERNEL)) {
++//		dev_err(dev, "Failed on idr_pre_get of '%s'\n", name);
++//		err = -ENOMEM;
++//		goto err_no_mem;
++//	}
++
++	idr_preload(GFP_KERNEL);
+ 
+ 	entry = devm_kzalloc(dev, sizeof(*entry), GFP_KERNEL);
+ 	if (entry == NULL) {
+@@ -243,8 +245,19 @@ gpio_of_entry_create(struct gpio_of_helper_info *info,
+ 	}
+ 
+ 	/* all done; insert */
+-	err = idr_get_new(&info->idr, entry, &entry->id);
+-	if (IS_ERR_VALUE(err)) {
++//	err = idr_get_new(&info->idr, entry, &entry->id);
++//	if (IS_ERR_VALUE(err)) {
++//		dev_err(dev, "Failed to idr_get_new  of '%s'\n", name);
++//		goto err_fail_idr;
++//	}
++
++	err = idr_alloc(&info->idr, entry, 0, 0, GFP_NOWAIT);
++	if (err >= 0)
++		entry->id = err;
++
++	idr_preload_end();
++
++	if (err < 0) {
+ 		dev_err(dev, "Failed to idr_get_new  of '%s'\n", name);
+ 		goto err_fail_idr;
+ 	}
+@@ -374,7 +387,7 @@ static int gpio_of_helper_remove(struct platform_device *pdev)
+ }
+ 
+ #ifdef CONFIG_PM
+-#ifdef CONFIG_PM_RUNTIME
++//#ifdef CONFIG_PM_RUNTIME
+ static int gpio_of_helper_runtime_suspend(struct device *dev)
+ {
+ 	/* place holder */
+@@ -386,7 +399,7 @@ static int gpio_of_helper_runtime_resume(struct device *dev)
+ 	/* place holder */
+ 	return 0;
+ }
+-#endif /* CONFIG_PM_RUNTIME */
++//#endif /* CONFIG_PM_RUNTIME */
+ 
+ static struct dev_pm_ops gpio_of_helper_pm_ops = {
+ 	SET_RUNTIME_PM_OPS(gpio_of_helper_runtime_suspend,
+-- 
+2.1.4
+
diff --git a/patches/defconfig b/patches/defconfig
index 85547190b..224dcf5d5 100644
--- a/patches/defconfig
+++ b/patches/defconfig
@@ -1679,6 +1679,7 @@ CONFIG_ALTERA_STAPL=m
 # Argus cape driver for beaglebone black
 #
 CONFIG_CAPE_BONE_ARGUS=y
+CONFIG_BEAGLEBONE_PINMUX_HELPER=y
 # CONFIG_ECHO is not set
 # CONFIG_CXL_BASE is not set
 
@@ -2616,6 +2617,7 @@ CONFIG_OF_GPIO=y
 CONFIG_GPIOLIB_IRQCHIP=y
 # CONFIG_DEBUG_GPIO is not set
 CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_OF_HELPER=y
 CONFIG_GPIO_GENERIC=y
 CONFIG_GPIO_MAX730X=m
 
diff --git a/patches/ref_omap2plus_defconfig b/patches/ref_omap2plus_defconfig
index d2fc44dea..d8b4a52b8 100644
--- a/patches/ref_omap2plus_defconfig
+++ b/patches/ref_omap2plus_defconfig
@@ -1238,6 +1238,7 @@ CONFIG_SENSORS_LIS3_I2C=m
 # Argus cape driver for beaglebone black
 #
 # CONFIG_CAPE_BONE_ARGUS is not set
+# CONFIG_BEAGLEBONE_PINMUX_HELPER is not set
 # CONFIG_ECHO is not set
 # CONFIG_CXL_BASE is not set
 
@@ -1841,6 +1842,7 @@ CONFIG_OF_GPIO=y
 CONFIG_GPIOLIB_IRQCHIP=y
 CONFIG_DEBUG_GPIO=y
 CONFIG_GPIO_SYSFS=y
+# CONFIG_GPIO_OF_HELPER is not set
 
 #
 # Memory mapped GPIO drivers
diff --git a/version.sh b/version.sh
index 4b391dd02..312e3e58e 100644
--- a/version.sh
+++ b/version.sh
@@ -14,7 +14,7 @@ toolchain="gcc_linaro_gnueabihf_4_9"
 #Kernel/Build
 KERNEL_REL=4.1
 KERNEL_TAG=${KERNEL_REL}-rc6
-BUILD=bone6
+BUILD=bone6.1
 
 #v3.X-rcX + upto SHA
 #prev_KERNEL_SHA=""
-- 
GitLab