diff --git a/patch.sh b/patch.sh
index f684c5de0e9d25564b74e600f80d3531a91a2673..0e14d132849fcc03f408490db9e2b21f9ebba9be 100644
--- a/patch.sh
+++ b/patch.sh
@@ -429,7 +429,7 @@ local_patch () {
 }
 
 #external_git
-#aufs
+aufs
 wpanusb
 #rt
 wireless_regdb
@@ -473,35 +473,20 @@ patch_backports (){
 }
 
 backports () {
-	backport_tag="v5.12"
+	backport_tag="v4.x-y"
 
-	subsystem="greybus"
+	subsystem="xyz"
 	#regenerate="enable"
 	if [ "x${regenerate}" = "xenable" ] ; then
 		pre_backports
 
-		cp -rv ~/linux-src/drivers/greybus/* ./drivers/greybus/
-		cp -rv ~/linux-src/drivers/staging/greybus/* ./drivers/staging/greybus/
+		mkdir -p ./x/
+		cp -v ~/linux-src/x/* ./x/
 
 		post_backports
 		exit 2
-#	else
-#		patch_backports
-	fi
-
-	backport_tag="v5.12"
-
-	subsystem="wlcore"
-	#regenerate="enable"
-	if [ "x${regenerate}" = "xenable" ] ; then
-		pre_backports
-
-		cp -rv ~/linux-src/drivers/net/wireless/ti/* ./drivers/net/wireless/ti/
-
-		post_backports
-		exit 2
-#	else
-#		patch_backports
+	else
+		patch_backports
 	fi
 }
 
@@ -534,10 +519,10 @@ drivers () {
 	dir 'drivers/ti/cpsw'
 	dir 'drivers/ti/serial'
 	dir 'drivers/ti/tsc'
+	dir 'drivers/ti/gpio'
 	dir 'drivers/greybus'
 	dir 'drivers/serdev'
 	dir 'drivers/fb_ssd1306'
-	dir 'drivers/bluetooth'
 }
 
 soc () {
@@ -556,7 +541,7 @@ soc
 packaging () {
 	#do_backport="enable"
 	if [ "x${do_backport}" = "xenable" ] ; then
-		backport_tag="v5.10.46"
+		backport_tag="v5.10.50"
 
 		subsystem="bindeb-pkg"
 		#regenerate="enable"
diff --git a/patches/aufs/0001-merge-aufs-kbuild.patch b/patches/aufs/0001-merge-aufs-kbuild.patch
index 66a91f3bd0afa2fa3ae41be60a1732f6e8988776..63845f783e85b6c563a61a6e4d49f30dc678c1ea 100644
--- a/patches/aufs/0001-merge-aufs-kbuild.patch
+++ b/patches/aufs/0001-merge-aufs-kbuild.patch
@@ -1,6 +1,6 @@
-From 8e6c1679dab270cabf1bc2938159bbd781362ca7 Mon Sep 17 00:00:00 2001
+From df155940794f55f0a0f06553dbb7f7dc0c912cc2 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 4 May 2021 14:38:55 -0500
+Date: Wed, 14 Jul 2021 16:21:15 -0500
 Subject: [PATCH 1/5] merge: aufs-kbuild
 
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
@@ -10,10 +10,10 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  2 files changed, 2 insertions(+)
 
 diff --git a/fs/Kconfig b/fs/Kconfig
-index a55bda4233bb..c4984b5bf340 100644
+index 141a856c50e7..6741d695b1df 100644
 --- a/fs/Kconfig
 +++ b/fs/Kconfig
-@@ -288,6 +288,7 @@ source "fs/sysv/Kconfig"
+@@ -292,6 +292,7 @@ source "fs/sysv/Kconfig"
  source "fs/ufs/Kconfig"
  source "fs/erofs/Kconfig"
  source "fs/vboxsf/Kconfig"
@@ -22,10 +22,10 @@ index a55bda4233bb..c4984b5bf340 100644
  endif # MISC_FILESYSTEMS
  
 diff --git a/fs/Makefile b/fs/Makefile
-index 3215fe205256..7218277473b8 100644
+index 9c708e1fbe8f..fde6be84a083 100644
 --- a/fs/Makefile
 +++ b/fs/Makefile
-@@ -135,3 +135,4 @@ obj-$(CONFIG_EFIVAR_FS)		+= efivarfs/
+@@ -136,3 +136,4 @@ obj-$(CONFIG_EFIVAR_FS)		+= efivarfs/
  obj-$(CONFIG_EROFS_FS)		+= erofs/
  obj-$(CONFIG_VBOXSF_FS)		+= vboxsf/
  obj-$(CONFIG_ZONEFS_FS)		+= zonefs/
diff --git a/patches/aufs/0002-merge-aufs-base.patch b/patches/aufs/0002-merge-aufs-base.patch
index 8445e962872a0c1258a63580b773ad66059b4460..1c14fb46ec4a5aea7f379ce24d6dfb5414149491 100644
--- a/patches/aufs/0002-merge-aufs-base.patch
+++ b/patches/aufs/0002-merge-aufs-base.patch
@@ -1,6 +1,6 @@
-From dd44ec92671a343a28e4304c443485f86357ead2 Mon Sep 17 00:00:00 2001
+From 576c9dd4cfb5a5aabf31afd2b920c7afb4dd3b6e Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 4 May 2021 14:38:55 -0500
+Date: Wed, 14 Jul 2021 16:21:15 -0500
 Subject: [PATCH 2/5] merge: aufs-base
 
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
@@ -21,12 +21,12 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  13 files changed, 65 insertions(+), 10 deletions(-)
 
 diff --git a/MAINTAINERS b/MAINTAINERS
-index 9450e052f1b1..f7db6edba5a3 100644
+index 0cce91cd5624..717b6a2402f9 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -2992,6 +2992,19 @@ F:	include/linux/audit.h
- F:	include/uapi/linux/audit.h
+@@ -3040,6 +3040,19 @@ F:	include/uapi/linux/audit.h
  F:	kernel/audit*
+ F:	lib/*audit.c
  
 +AUFS (advanced multi layered unification filesystem) FILESYSTEM
 +M:	"J. R. Okajima" <hooanon05g@gmail.com>
@@ -45,10 +45,10 @@ index 9450e052f1b1..f7db6edba5a3 100644
  M:	Miguel Ojeda <ojeda@kernel.org>
  S:	Maintained
 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index a370cde3ddd4..01ca256575fb 100644
+index 8271df125153..ddd36de11b9a 100644
 --- a/drivers/block/loop.c
 +++ b/drivers/block/loop.c
-@@ -761,6 +761,24 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -762,6 +762,24 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  	return error;
  }
  
@@ -74,10 +74,10 @@ index a370cde3ddd4..01ca256575fb 100644
  
  static ssize_t loop_attr_show(struct device *dev, char *page,
 diff --git a/fs/dcache.c b/fs/dcache.c
-index 7d24ff7eb206..3caa7ab4b84f 100644
+index cf871a81f4fd..bc5095b734f5 100644
 --- a/fs/dcache.c
 +++ b/fs/dcache.c
-@@ -1318,7 +1318,7 @@ enum d_walk_ret {
+@@ -1320,7 +1320,7 @@ enum d_walk_ret {
   *
   * The @enter() callbacks are called with d_lock held.
   */
@@ -109,10 +109,10 @@ index dfc72f15be7f..d8a12eb63961 100644
  		return error;
  
 diff --git a/fs/inode.c b/fs/inode.c
-index a047ab306f9a..ba1df0895b69 100644
+index c93500d84264..f24d21236ad0 100644
 --- a/fs/inode.c
 +++ b/fs/inode.c
-@@ -1772,7 +1772,7 @@ EXPORT_SYMBOL(generic_update_time);
+@@ -1778,7 +1778,7 @@ EXPORT_SYMBOL(generic_update_time);
   * This does the actual work of updating an inodes time or version.  Must have
   * had called mnt_want_write() before calling this.
   */
@@ -122,7 +122,7 @@ index a047ab306f9a..ba1df0895b69 100644
  	if (inode->i_op->update_time)
  		return inode->i_op->update_time(inode, time, flags);
 diff --git a/fs/namespace.c b/fs/namespace.c
-index 56bb5a5fdc0d..540679d7e043 100644
+index c3f1a78ba369..07e6c53964fc 100644
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
 @@ -807,6 +807,12 @@ static inline int check_mnt(struct mount *mnt)
@@ -180,10 +180,10 @@ index 1373a610dc78..b7b5a0a0df6f 100644
  	if (wait)
  		sync_inodes_sb(sb);
 diff --git a/include/linux/fs.h b/include/linux/fs.h
-index ec8f3ddf4a6a..4fa4b24535fd 100644
+index c3c88fdb9b2a..93eb43e002d9 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -1332,6 +1332,7 @@ extern void fasync_free(struct fasync_struct *);
+@@ -1335,6 +1335,7 @@ extern void fasync_free(struct fasync_struct *);
  /* can be called from interrupts */
  extern void kill_fasync(struct fasync_struct **, int, int);
  
@@ -191,7 +191,7 @@ index ec8f3ddf4a6a..4fa4b24535fd 100644
  extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
  extern int f_setown(struct file *filp, unsigned long arg, int force);
  extern void f_delown(struct file *filp);
-@@ -1909,6 +1910,7 @@ struct file_operations {
+@@ -2043,6 +2044,7 @@ struct file_operations {
  	ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
  	unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
  	int (*check_flags)(int);
@@ -199,7 +199,7 @@ index ec8f3ddf4a6a..4fa4b24535fd 100644
  	int (*flock) (struct file *, int, struct file_lock *);
  	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
  	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
-@@ -2428,6 +2430,7 @@ extern int current_umask(void);
+@@ -2565,6 +2567,7 @@ extern int current_umask(void);
  extern void ihold(struct inode * inode);
  extern void iput(struct inode *);
  extern int generic_update_time(struct inode *, struct timespec64 *, int);
@@ -207,7 +207,7 @@ index ec8f3ddf4a6a..4fa4b24535fd 100644
  
  /* /sys/fs */
  extern struct kobject *fs_kobj;
-@@ -2668,6 +2671,7 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb)
+@@ -2805,6 +2808,7 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb)
  }
  
  void emergency_thaw_all(void);
@@ -216,7 +216,7 @@ index ec8f3ddf4a6a..4fa4b24535fd 100644
  extern const struct file_operations def_blk_fops;
  extern const struct file_operations def_chr_fops;
 diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
-index 7b7ebf2e28ec..20c46305e057 100644
+index 5cf387813754..59b65e1a9e85 100644
 --- a/include/linux/lockdep.h
 +++ b/include/linux/lockdep.h
 @@ -248,6 +248,8 @@ static inline int lockdep_match_key(struct lockdep_map *lock,
@@ -264,10 +264,10 @@ index a55179fd60fc..8e21c53cf883 100644
 +			 unsigned int flags);
  #endif
 diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
-index f160f1c97ca1..fe71c2737eb9 100644
+index 9125bd419216..a5e25d0e6751 100644
 --- a/kernel/locking/lockdep.c
 +++ b/kernel/locking/lockdep.c
-@@ -188,7 +188,7 @@ static
+@@ -189,7 +189,7 @@ static
  struct lock_class lock_classes[MAX_LOCKDEP_KEYS];
  static DECLARE_BITMAP(lock_classes_in_use, MAX_LOCKDEP_KEYS);
  
@@ -276,7 +276,7 @@ index f160f1c97ca1..fe71c2737eb9 100644
  {
  	unsigned int class_idx = hlock->class_idx;
  
-@@ -209,6 +209,7 @@ static inline struct lock_class *hlock_class(struct held_lock *hlock)
+@@ -210,6 +210,7 @@ static inline struct lock_class *hlock_class(struct held_lock *hlock)
  	 */
  	return lock_classes + class_idx;
  }
diff --git a/patches/aufs/0003-merge-aufs-mmap.patch b/patches/aufs/0003-merge-aufs-mmap.patch
index 58325177d082cb34ebe1b37efd10d11362e3fda8..3c36a9235a6f830f104ce41186237f5680f4a92e 100644
--- a/patches/aufs/0003-merge-aufs-mmap.patch
+++ b/patches/aufs/0003-merge-aufs-mmap.patch
@@ -1,6 +1,6 @@
-From 30d9dd6b2c29f1e9f4d339bcfc42e03d48a039e7 Mon Sep 17 00:00:00 2001
+From 1f31aabbafb731fcb83d05a52a6a3a2ebd64f700 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 4 May 2021 14:38:55 -0500
+Date: Wed, 14 Jul 2021 16:21:15 -0500
 Subject: [PATCH 3/5] merge: aufs-mmap
 
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
@@ -21,7 +21,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  create mode 100644 mm/prfile.c
 
 diff --git a/fs/proc/base.c b/fs/proc/base.c
-index 3851bfcdba56..d632ddd5f5ee 100644
+index 9cbd915025ad..8a47b17c557e 100644
 --- a/fs/proc/base.c
 +++ b/fs/proc/base.c
 @@ -2183,7 +2183,7 @@ static int map_files_get_link(struct dentry *dentry, struct path *path)
@@ -50,7 +50,7 @@ index 13452b32e2bd..38acccfef9d4 100644
  		ino = inode->i_ino;
  	}
 diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
-index e862cab69583..5c45041943a6 100644
+index 7389df326edd..0c6a9fc1db58 100644
 --- a/fs/proc/task_mmu.c
 +++ b/fs/proc/task_mmu.c
 @@ -280,7 +280,10 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
@@ -65,7 +65,7 @@ index e862cab69583..5c45041943a6 100644
  		dev = inode->i_sb->s_dev;
  		ino = inode->i_ino;
  		pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
-@@ -1861,7 +1864,7 @@ static int show_numa_map(struct seq_file *m, void *v)
+@@ -1864,7 +1867,7 @@ static int show_numa_map(struct seq_file *m, void *v)
  	struct proc_maps_private *proc_priv = &numa_priv->proc_maps;
  	struct vm_area_struct *vma = v;
  	struct numa_maps *md = &numa_priv->md;
@@ -91,10 +91,10 @@ index a6d21fc0033c..02c2de31196e 100644
  		ino = inode->i_ino;
  		pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
 diff --git a/include/linux/mm.h b/include/linux/mm.h
-index 8ba434287387..6d23d40ad152 100644
+index 9afb8998e7e5..df2b3c73235c 100644
 --- a/include/linux/mm.h
 +++ b/include/linux/mm.h
-@@ -1759,6 +1759,28 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping,
+@@ -1801,6 +1801,28 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping,
  	unmap_mapping_range(mapping, holebegin, holelen, 0);
  }
  
@@ -124,7 +124,7 @@ index 8ba434287387..6d23d40ad152 100644
  		void *buf, int len, unsigned int gup_flags);
  extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
 diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index 6613b26a8894..e94df45b5483 100644
+index 8f0fb62e8975..5043c0702c10 100644
 --- a/include/linux/mm_types.h
 +++ b/include/linux/mm_types.h
 @@ -279,6 +279,7 @@ struct vm_region {
@@ -144,10 +144,10 @@ index 6613b26a8894..e94df45b5483 100644
  
  #ifdef CONFIG_SWAP
 diff --git a/kernel/fork.c b/kernel/fork.c
-index 426cd0c51f9e..ea0ae494c6dd 100644
+index 567fee340500..5ffbfa7ddcfa 100644
 --- a/kernel/fork.c
 +++ b/kernel/fork.c
-@@ -555,7 +555,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
+@@ -559,7 +559,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
  			struct inode *inode = file_inode(file);
  			struct address_space *mapping = file->f_mapping;
  
@@ -157,7 +157,7 @@ index 426cd0c51f9e..ea0ae494c6dd 100644
  				put_write_access(inode);
  			i_mmap_lock_write(mapping);
 diff --git a/mm/Makefile b/mm/Makefile
-index 72227b24a616..5d03943b08e0 100644
+index bf71e295e9f6..bd223b81c564 100644
 --- a/mm/Makefile
 +++ b/mm/Makefile
 @@ -52,7 +52,7 @@ obj-y			:= filemap.o mempool.o oom_kill.o fadvise.o \
@@ -170,10 +170,10 @@ index 72227b24a616..5d03943b08e0 100644
  # Give 'page_alloc' its own module-parameter namespace
  page-alloc-y := page_alloc.o
 diff --git a/mm/filemap.c b/mm/filemap.c
-index 6ce832dc59e7..8b7a71b6f0e6 100644
+index 66f7e9fdfbc4..f9a8ff48e697 100644
 --- a/mm/filemap.c
 +++ b/mm/filemap.c
-@@ -3162,7 +3162,7 @@ vm_fault_t filemap_page_mkwrite(struct vm_fault *vmf)
+@@ -3240,7 +3240,7 @@ vm_fault_t filemap_page_mkwrite(struct vm_fault *vmf)
  	vm_fault_t ret = VM_FAULT_LOCKED;
  
  	sb_start_pagefault(mapping->host->i_sb);
@@ -183,10 +183,10 @@ index 6ce832dc59e7..8b7a71b6f0e6 100644
  	if (page->mapping != mapping) {
  		unlock_page(page);
 diff --git a/mm/mmap.c b/mm/mmap.c
-index 3f287599a7a3..eb36f1b18f04 100644
+index 0584e540246e..8b2f082002a9 100644
 --- a/mm/mmap.c
 +++ b/mm/mmap.c
-@@ -179,7 +179,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
+@@ -185,7 +185,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
  	if (vma->vm_ops && vma->vm_ops->close)
  		vma->vm_ops->close(vma);
  	if (vma->vm_file)
@@ -195,7 +195,7 @@ index 3f287599a7a3..eb36f1b18f04 100644
  	mpol_put(vma_policy(vma));
  	vm_area_free(vma);
  	return next;
-@@ -949,7 +949,7 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
+@@ -955,7 +955,7 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
  	if (remove_next) {
  		if (file) {
  			uprobe_munmap(next, next->vm_start, next->vm_end);
@@ -204,7 +204,7 @@ index 3f287599a7a3..eb36f1b18f04 100644
  		}
  		if (next->anon_vma)
  			anon_vma_merge(vma, next);
-@@ -1895,7 +1895,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1901,7 +1901,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
  	return addr;
  
  unmap_and_free_vma:
@@ -213,7 +213,7 @@ index 3f287599a7a3..eb36f1b18f04 100644
  	vma->vm_file = NULL;
  
  	/* Undo any partial mapping done by a device driver. */
-@@ -2755,7 +2755,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2761,7 +2761,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
  		goto out_free_mpol;
  
  	if (new->vm_file)
@@ -222,7 +222,7 @@ index 3f287599a7a3..eb36f1b18f04 100644
  
  	if (new->vm_ops && new->vm_ops->open)
  		new->vm_ops->open(new);
-@@ -2774,7 +2774,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2780,7 +2780,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
  	if (new->vm_ops && new->vm_ops->close)
  		new->vm_ops->close(new);
  	if (new->vm_file)
@@ -231,7 +231,7 @@ index 3f287599a7a3..eb36f1b18f04 100644
  	unlink_anon_vmas(new);
   out_free_mpol:
  	mpol_put(vma_policy(new));
-@@ -2967,7 +2967,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
+@@ -2973,7 +2973,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
  	struct vm_area_struct *vma;
  	unsigned long populate = 0;
  	unsigned long ret = -EINVAL;
@@ -240,9 +240,9 @@ index 3f287599a7a3..eb36f1b18f04 100644
  
  	pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/vm/remap_file_pages.rst.\n",
  		     current->comm, current->pid);
-@@ -3042,10 +3042,27 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
- 		}
- 	}
+@@ -3032,10 +3032,27 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
+ 	if (vma->vm_flags & VM_LOCKED)
+ 		flags |= MAP_LOCKED;
  
 -	file = get_file(vma->vm_file);
 +	vma_get_file(vma);
@@ -269,7 +269,7 @@ index 3f287599a7a3..eb36f1b18f04 100644
  out:
  	mmap_write_unlock(mm);
  	if (populate)
-@@ -3332,7 +3349,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
+@@ -3322,7 +3339,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
  		if (anon_vma_clone(new_vma, vma))
  			goto out_free_mempol;
  		if (new_vma->vm_file)
@@ -279,10 +279,10 @@ index 3f287599a7a3..eb36f1b18f04 100644
  			new_vma->vm_ops->open(new_vma);
  		vma_link(mm, new_vma, prev, rb_link, rb_parent);
 diff --git a/mm/nommu.c b/mm/nommu.c
-index 5c9ab799c0e6..dd78905704c1 100644
+index 85a3a68dffb6..a2bee44172cc 100644
 --- a/mm/nommu.c
 +++ b/mm/nommu.c
-@@ -533,7 +533,7 @@ static void __put_nommu_region(struct vm_region *region)
+@@ -523,7 +523,7 @@ static void __put_nommu_region(struct vm_region *region)
  		up_write(&nommu_region_sem);
  
  		if (region->vm_file)
@@ -291,7 +291,7 @@ index 5c9ab799c0e6..dd78905704c1 100644
  
  		/* IO memory and memory shared directly out of the pagecache
  		 * from ramfs/tmpfs mustn't be released here */
-@@ -665,7 +665,7 @@ static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -655,7 +655,7 @@ static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma)
  	if (vma->vm_ops && vma->vm_ops->close)
  		vma->vm_ops->close(vma);
  	if (vma->vm_file)
@@ -300,7 +300,7 @@ index 5c9ab799c0e6..dd78905704c1 100644
  	put_nommu_region(vma->vm_region);
  	vm_area_free(vma);
  }
-@@ -1188,7 +1188,7 @@ unsigned long do_mmap(struct file *file,
+@@ -1178,7 +1178,7 @@ unsigned long do_mmap(struct file *file,
  					goto error_just_free;
  				}
  			}
@@ -309,7 +309,7 @@ index 5c9ab799c0e6..dd78905704c1 100644
  			kmem_cache_free(vm_region_jar, region);
  			region = pregion;
  			result = start;
-@@ -1265,10 +1265,10 @@ unsigned long do_mmap(struct file *file,
+@@ -1255,10 +1255,10 @@ unsigned long do_mmap(struct file *file,
  	up_write(&nommu_region_sem);
  error:
  	if (region->vm_file)
diff --git a/patches/aufs/0004-merge-aufs-standalone.patch b/patches/aufs/0004-merge-aufs-standalone.patch
index 8bcf24d2cabb73cf3a3cbb50995fbcb9bea40226..227f0224200d6c7ce8fbc3ea1f9a60a84784d846 100644
--- a/patches/aufs/0004-merge-aufs-standalone.patch
+++ b/patches/aufs/0004-merge-aufs-standalone.patch
@@ -1,6 +1,6 @@
-From 16a5029a90f84452449328dc3b8fa741009fcd9c Mon Sep 17 00:00:00 2001
+From 796e669f00c89410d829a36fa93d985d15e1e699 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 4 May 2021 14:38:56 -0500
+Date: Wed, 14 Jul 2021 16:21:16 -0500
 Subject: [PATCH 4/5] merge: aufs-standalone
 
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
@@ -23,10 +23,10 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  15 files changed, 28 insertions(+)
 
 diff --git a/fs/dcache.c b/fs/dcache.c
-index 3caa7ab4b84f..00e97c9ae7c4 100644
+index bc5095b734f5..9508bd57a3bc 100644
 --- a/fs/dcache.c
 +++ b/fs/dcache.c
-@@ -1423,6 +1423,7 @@ void d_walk(struct dentry *parent, void *data,
+@@ -1425,6 +1425,7 @@ void d_walk(struct dentry *parent, void *data,
  	seq = 1;
  	goto again;
  }
@@ -34,7 +34,7 @@ index 3caa7ab4b84f..00e97c9ae7c4 100644
  
  struct check_mount {
  	struct vfsmount *mnt;
-@@ -2968,6 +2969,7 @@ void d_exchange(struct dentry *dentry1, struct dentry *dentry2)
+@@ -2970,6 +2971,7 @@ void d_exchange(struct dentry *dentry1, struct dentry *dentry2)
  
  	write_sequnlock(&rename_lock);
  }
@@ -43,7 +43,7 @@ index 3caa7ab4b84f..00e97c9ae7c4 100644
  /**
   * d_ancestor - search for an ancestor
 diff --git a/fs/exec.c b/fs/exec.c
-index 18594f11c31f..ac38c0424d2a 100644
+index d7c4187ca023..9a004bc61169 100644
 --- a/fs/exec.c
 +++ b/fs/exec.c
 @@ -114,6 +114,7 @@ bool path_noexec(const struct path *path)
@@ -87,10 +87,10 @@ index 45437f8e1003..786af52904fc 100644
  void __init files_init(void)
  {
 diff --git a/fs/inode.c b/fs/inode.c
-index ba1df0895b69..0672530acf7d 100644
+index f24d21236ad0..78de5b5dc084 100644
 --- a/fs/inode.c
 +++ b/fs/inode.c
-@@ -1778,6 +1778,7 @@ int update_time(struct inode *inode, struct timespec64 *time, int flags)
+@@ -1784,6 +1784,7 @@ int update_time(struct inode *inode, struct timespec64 *time, int flags)
  		return inode->i_op->update_time(inode, time, flags);
  	return generic_update_time(inode, time, flags);
  }
@@ -99,7 +99,7 @@ index ba1df0895b69..0672530acf7d 100644
  /**
   *	atime_needs_update	-	update the access time
 diff --git a/fs/namespace.c b/fs/namespace.c
-index 540679d7e043..74957d5edaa8 100644
+index 07e6c53964fc..df3e9a94be95 100644
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
 @@ -438,6 +438,7 @@ void __mnt_drop_write(struct vfsmount *mnt)
@@ -118,7 +118,7 @@ index 540679d7e043..74957d5edaa8 100644
  
  /*
   * vfsmount lock must be held for write
-@@ -1985,6 +1987,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
+@@ -1987,6 +1989,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
  	}
  	return 0;
  }
@@ -127,7 +127,7 @@ index 540679d7e043..74957d5edaa8 100644
  static void lock_mnt_tree(struct mount *mnt)
  {
 diff --git a/fs/notify/group.c b/fs/notify/group.c
-index ffd723ffe46d..ec6172836b6f 100644
+index fb89c351295d..460ad19c2570 100644
 --- a/fs/notify/group.c
 +++ b/fs/notify/group.c
 @@ -100,6 +100,7 @@ void fsnotify_get_group(struct fsnotify_group *group)
@@ -139,7 +139,7 @@ index ffd723ffe46d..ec6172836b6f 100644
  /*
   * Drop a reference to a group.  Free it if it's through.
 diff --git a/fs/open.c b/fs/open.c
-index e53af13b5835..f37da065e654 100644
+index 53bc0573c0ec..4be00d1ec649 100644
 --- a/fs/open.c
 +++ b/fs/open.c
 @@ -65,6 +65,7 @@ int do_truncate(struct user_namespace *mnt_userns, struct dentry *dentry,
@@ -203,10 +203,10 @@ index b7b5a0a0df6f..fa5c7fba7f1b 100644
  /*
   * Write out and wait upon all dirty data associated with this
 diff --git a/fs/xattr.c b/fs/xattr.c
-index b3444e06cded..7b0f851b63d7 100644
+index 5c8c5175b385..ff7e9ff774b7 100644
 --- a/fs/xattr.c
 +++ b/fs/xattr.c
-@@ -383,6 +383,7 @@ vfs_getxattr_alloc(struct user_namespace *mnt_userns, struct dentry *dentry,
+@@ -384,6 +384,7 @@ vfs_getxattr_alloc(struct user_namespace *mnt_userns, struct dentry *dentry,
  	*xattr_value = value;
  	return error;
  }
@@ -215,10 +215,10 @@ index b3444e06cded..7b0f851b63d7 100644
  ssize_t
  __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
 diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
-index fe71c2737eb9..185531f89239 100644
+index a5e25d0e6751..38b2a5a512eb 100644
 --- a/kernel/locking/lockdep.c
 +++ b/kernel/locking/lockdep.c
-@@ -209,6 +209,7 @@ inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock)
+@@ -210,6 +210,7 @@ inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock)
  	 */
  	return lock_classes + class_idx;
  }
@@ -227,19 +227,19 @@ index fe71c2737eb9..185531f89239 100644
  
  #ifdef CONFIG_LOCK_STAT
 diff --git a/kernel/task_work.c b/kernel/task_work.c
-index 9cde961875c0..ac8c79dc8181 100644
+index 1698fbe6f0e1..081b05acadf8 100644
 --- a/kernel/task_work.c
 +++ b/kernel/task_work.c
-@@ -143,3 +143,4 @@ void task_work_run(void)
+@@ -167,3 +167,4 @@ void task_work_run(void)
  		} while (work);
  	}
  }
 +EXPORT_SYMBOL_GPL(task_work_run);
 diff --git a/security/security.c b/security/security.c
-index 5ac96b16f8fa..46d334d6ac1f 100644
+index b38155b2de83..386c2741886c 100644
 --- a/security/security.c
 +++ b/security/security.c
-@@ -1102,6 +1102,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry)
+@@ -1146,6 +1146,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry)
  		return 0;
  	return call_int_hook(path_rmdir, 0, dir, dentry);
  }
@@ -247,7 +247,7 @@ index 5ac96b16f8fa..46d334d6ac1f 100644
  
  int security_path_unlink(const struct path *dir, struct dentry *dentry)
  {
-@@ -1118,6 +1119,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry,
+@@ -1162,6 +1163,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry,
  		return 0;
  	return call_int_hook(path_symlink, 0, dir, dentry, old_name);
  }
@@ -255,7 +255,7 @@ index 5ac96b16f8fa..46d334d6ac1f 100644
  
  int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
  		       struct dentry *new_dentry)
-@@ -1126,6 +1128,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
+@@ -1170,6 +1172,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
  		return 0;
  	return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
  }
@@ -263,7 +263,7 @@ index 5ac96b16f8fa..46d334d6ac1f 100644
  
  int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
  			 const struct path *new_dir, struct dentry *new_dentry,
-@@ -1153,6 +1156,7 @@ int security_path_truncate(const struct path *path)
+@@ -1197,6 +1200,7 @@ int security_path_truncate(const struct path *path)
  		return 0;
  	return call_int_hook(path_truncate, 0, path);
  }
@@ -271,7 +271,7 @@ index 5ac96b16f8fa..46d334d6ac1f 100644
  
  int security_path_chmod(const struct path *path, umode_t mode)
  {
-@@ -1160,6 +1164,7 @@ int security_path_chmod(const struct path *path, umode_t mode)
+@@ -1204,6 +1208,7 @@ int security_path_chmod(const struct path *path, umode_t mode)
  		return 0;
  	return call_int_hook(path_chmod, 0, path, mode);
  }
@@ -279,7 +279,7 @@ index 5ac96b16f8fa..46d334d6ac1f 100644
  
  int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
  {
-@@ -1167,6 +1172,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
+@@ -1211,6 +1216,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
  		return 0;
  	return call_int_hook(path_chown, 0, path, uid, gid);
  }
@@ -287,7 +287,7 @@ index 5ac96b16f8fa..46d334d6ac1f 100644
  
  int security_path_chroot(const struct path *path)
  {
-@@ -1267,6 +1273,7 @@ int security_inode_permission(struct inode *inode, int mask)
+@@ -1311,6 +1317,7 @@ int security_inode_permission(struct inode *inode, int mask)
  		return 0;
  	return call_int_hook(inode_permission, 0, inode, mask);
  }
@@ -295,7 +295,7 @@ index 5ac96b16f8fa..46d334d6ac1f 100644
  
  int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
  {
-@@ -1464,6 +1471,7 @@ int security_file_permission(struct file *file, int mask)
+@@ -1508,6 +1515,7 @@ int security_file_permission(struct file *file, int mask)
  
  	return fsnotify_perm(file, mask);
  }
diff --git a/patches/aufs/0005-merge-aufs.patch b/patches/aufs/0005-merge-aufs.patch
index cd4590a48adc82f3589b44c0ac7d24ec754ac604..e4f77487edc6e380d08f157e620a395065aefa43 100644
--- a/patches/aufs/0005-merge-aufs.patch
+++ b/patches/aufs/0005-merge-aufs.patch
@@ -1,14 +1,14 @@
-From 8efa266890e45a66bf298f4ca67d0158e97ba6bb Mon Sep 17 00:00:00 2001
+From 99a364978d1754f32458f213ef03b6fed9ccea43 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 4 May 2021 14:38:57 -0500
+Date: Wed, 14 Jul 2021 16:21:17 -0500
 Subject: [PATCH 5/5] merge: aufs
 
-https://github.com/sfjro/aufs5-standalone/commit/f6866937f66eb6ceacfed9b4fe534611030cc813
+https://github.com/sfjro/aufs5-standalone/commit/6944bcbb5361558f4ec97194c6f9a1686f93a16d
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
 ---
  Documentation/ABI/testing/debugfs-aufs        |   55 +
  Documentation/ABI/testing/sysfs-aufs          |   31 +
- Documentation/filesystems/aufs/README         |  401 ++++
+ Documentation/filesystems/aufs/README         |  396 ++++
  .../filesystems/aufs/design/01intro.txt       |  171 ++
  .../filesystems/aufs/design/02struct.txt      |  258 +++
  .../filesystems/aufs/design/03atomic_open.txt |   85 +
@@ -98,7 +98,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  fs/aufs/xattr.c                               |  368 ++++
  fs/aufs/xino.c                                | 1925 +++++++++++++++++
  include/uapi/linux/aufs_type.h                |  452 ++++
- 92 files changed, 37821 insertions(+)
+ 92 files changed, 37816 insertions(+)
  create mode 100644 Documentation/ABI/testing/debugfs-aufs
  create mode 100644 Documentation/ABI/testing/sysfs-aufs
  create mode 100644 Documentation/filesystems/aufs/README
@@ -292,10 +292,10 @@ index 000000000000..48500c0569e6
 +		will be empty. About XINO files, see the aufs manual.
 diff --git a/Documentation/filesystems/aufs/README b/Documentation/filesystems/aufs/README
 new file mode 100644
-index 000000000000..3e655d357134
+index 000000000000..d08a56444e22
 --- /dev/null
 +++ b/Documentation/filesystems/aufs/README
-@@ -0,0 +1,401 @@
+@@ -0,0 +1,396 @@
 +
 +Aufs5 -- advanced multi layered unification filesystem version 5.x
 +http://aufs.sf.net
@@ -480,6 +480,16 @@ index 000000000000..3e655d357134
 +For aufs5-linux tree,
 +- enable CONFIG_AUFS_FS.
 +- set other aufs configurations if necessary.
++- for aufs5.13 and later
++  Because aufs is not only an ordinary filesystem (callee of VFS), but
++  also a caller of VFS functions for branch filesystems, subclassing of
++  the internal locks for LOCKDEP is necessary. LOCKDEP is a debugging
++  feature of linux kernel. If you enable CONFIG_LOCKDEP, then you will
++  need to customize some LOCKDEP numbers. Here are what I use on my
++  test environment.
++	CONFIG_LOCKDEP_BITS=21
++	CONFIG_LOCKDEP_CHAINS_BITS=21
++	CONFIG_LOCKDEP_STACK_TRACE_BITS=24
 +
 +For aufs5-standalone tree,
 +There are several ways to build.
@@ -547,13 +557,6 @@ index 000000000000..3e655d357134
 +  Supports a nested loopback mount in a branch-fs. This patch is
 +  unnecessary until aufs produces a message like "you may want to try
 +  another patch for loopback file".
-+- proc_mounts.patch
-+  When there are many mountpoints and many mount(2)/umount(2) are
-+  running, then /proc/mounts may not show the all mountpoints.  This
-+  patch makes /proc/mounts always show the full mountpoints list.
-+  If you don't want to apply this patch and meet such problem, then you
-+  need to increase the value of 'ProcMounts_Times' make-variable in
-+  aufs-util.git as a second best solution.
 +- vfs-ino.patch
 +  Modifies a system global kernel internal function get_next_ino() in
 +  order to stop assigning 0 for an inode-number. Not directly related to
@@ -564,14 +567,6 @@ index 000000000000..3e655d357134
 +  duplication of inode number, which is important for backup tools and
 +  other utilities. When you find aufs XINO files for tmpfs branch
 +  growing too much, try this patch.
-+- lockdep-debug.patch
-+  Because aufs is not only an ordinary filesystem (callee of VFS), but
-+  also a caller of VFS functions for branch filesystems, subclassing of
-+  the internal locks for LOCKDEP is necessary. LOCKDEP is a debugging
-+  feature of linux kernel. If you enable CONFIG_LOCKDEP, then you will
-+  need to apply this debug patch to expand several constant values.
-+  If you don't know what LOCKDEP is, then you don't have apply this
-+  patch.
 +
 +
 +4. Usage
@@ -38109,7 +38104,7 @@ index 000000000000..a9ce74d1ad0d
 +}
 diff --git a/include/uapi/linux/aufs_type.h b/include/uapi/linux/aufs_type.h
 new file mode 100644
-index 000000000000..e0dc87a3b3cb
+index 000000000000..fa04f623f382
 --- /dev/null
 +++ b/include/uapi/linux/aufs_type.h
 @@ -0,0 +1,452 @@
@@ -38155,7 +38150,7 @@ index 000000000000..e0dc87a3b3cb
 +#include <limits.h>
 +#endif /* __KERNEL__ */
 +
-+#define AUFS_VERSION	"5.12-20210503"
++#define AUFS_VERSION	"5.13-20210705"
 +
 +/* todo? move this to linux-2.6.19/include/magic.h */
 +#define AUFS_SUPER_MAGIC	('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
diff --git a/patches/defconfig b/patches/defconfig
index 8f877cc321841f0defb80f1106959a62fbfa0150..a86ce315d153aa64b6e4ecec0ce35c0ae246090d 100644
--- a/patches/defconfig
+++ b/patches/defconfig
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 5.13.0 Kernel Configuration
+# Linux/arm 5.13.2 Kernel Configuration
 #
 CONFIG_CC_VERSION_TEXT="arm-linux-gnueabi-gcc (GCC) 11.1.0"
 CONFIG_CC_IS_GCC=y
@@ -2112,6 +2112,7 @@ CONFIG_TI_ST=m
 # CONFIG_SENSORS_LIS3_SPI is not set
 # CONFIG_SENSORS_LIS3_I2C is not set
 # CONFIG_ALTERA_STAPL is not set
+CONFIG_BEAGLEBONE_PINMUX_HELPER=y
 # CONFIG_ECHO is not set
 # CONFIG_MISC_RTSX_USB is not set
 # CONFIG_UACCE is not set
@@ -2646,7 +2647,13 @@ CONFIG_IEEE802154_CA8210=m
 # CONFIG_IEEE802154_CA8210_DEBUGFS is not set
 CONFIG_IEEE802154_MCR20A=m
 CONFIG_IEEE802154_HWSIM=m
+
+#
+# Wireless WAN
+#
 # CONFIG_WWAN is not set
+# end of Wireless WAN
+
 # CONFIG_NETDEVSIM is not set
 CONFIG_NET_FAILOVER=m
 # CONFIG_ISDN is not set
@@ -3182,6 +3189,7 @@ CONFIG_GPIOLIB_IRQCHIP=y
 CONFIG_GPIO_SYSFS=y
 CONFIG_GPIO_CDEV=y
 CONFIG_GPIO_CDEV_V1=y
+CONFIG_GPIO_OF_HELPER=y
 CONFIG_GPIO_GENERIC=y
 CONFIG_GPIO_MAX730X=m
 
@@ -7013,6 +7021,23 @@ CONFIG_ROMFS_ON_MTD=y
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
 # CONFIG_EROFS_FS is not set
+CONFIG_AUFS_FS=m
+CONFIG_AUFS_BRANCH_MAX_127=y
+# CONFIG_AUFS_BRANCH_MAX_511 is not set
+# CONFIG_AUFS_BRANCH_MAX_1023 is not set
+# CONFIG_AUFS_BRANCH_MAX_32767 is not set
+CONFIG_AUFS_SBILIST=y
+# CONFIG_AUFS_HNOTIFY is not set
+CONFIG_AUFS_EXPORT=y
+CONFIG_AUFS_XATTR=y
+# CONFIG_AUFS_FHSM is not set
+# CONFIG_AUFS_RDU is not set
+# CONFIG_AUFS_DIRREN is not set
+# CONFIG_AUFS_SHWH is not set
+# CONFIG_AUFS_BR_RAMFS is not set
+# CONFIG_AUFS_BR_FUSE is not set
+CONFIG_AUFS_BDEV_LOOP=y
+# CONFIG_AUFS_DEBUG is not set
 CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V2=y
diff --git a/patches/drivers/bluetooth/0001-Bluetooth-Remove-spurious-error-message.patch b/patches/drivers/bluetooth/0001-Bluetooth-Remove-spurious-error-message.patch
deleted file mode 100644
index 15ef3345221edd804edd3652eff165aae577f6e1..0000000000000000000000000000000000000000
--- a/patches/drivers/bluetooth/0001-Bluetooth-Remove-spurious-error-message.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From f972bdde34544ac612af6059b7e515ad58628969 Mon Sep 17 00:00:00 2001
-From: Szymon Janc <szymon.janc@codecoup.pl>
-Date: Tue, 18 May 2021 16:54:36 +0200
-Subject: [PATCH] Bluetooth: Remove spurious error message
-
-Even with rate limited reporting this is very spammy and since
-it is remote device that is providing bogus data there is no
-need to report this as error.
-
-Since real_len variable was used only to allow conditional error
-message it is now also removed.
-
-[72454.143336] bt_err_ratelimited: 10 callbacks suppressed
-[72454.143337] Bluetooth: hci0: advertising data len corrected
-[72454.296314] Bluetooth: hci0: advertising data len corrected
-[72454.892329] Bluetooth: hci0: advertising data len corrected
-[72455.051319] Bluetooth: hci0: advertising data len corrected
-[72455.357326] Bluetooth: hci0: advertising data len corrected
-[72455.663295] Bluetooth: hci0: advertising data len corrected
-[72455.787278] Bluetooth: hci0: advertising data len corrected
-[72455.942278] Bluetooth: hci0: advertising data len corrected
-[72456.094276] Bluetooth: hci0: advertising data len corrected
-[72456.249137] Bluetooth: hci0: advertising data len corrected
-[72459.416333] bt_err_ratelimited: 13 callbacks suppressed
-[72459.416334] Bluetooth: hci0: advertising data len corrected
-[72459.721334] Bluetooth: hci0: advertising data len corrected
-[72460.011317] Bluetooth: hci0: advertising data len corrected
-[72460.327171] Bluetooth: hci0: advertising data len corrected
-[72460.638294] Bluetooth: hci0: advertising data len corrected
-[72460.946350] Bluetooth: hci0: advertising data len corrected
-[72461.225320] Bluetooth: hci0: advertising data len corrected
-[72461.690322] Bluetooth: hci0: advertising data len corrected
-[72462.118318] Bluetooth: hci0: advertising data len corrected
-[72462.427319] Bluetooth: hci0: advertising data len corrected
-[72464.546319] bt_err_ratelimited: 7 callbacks suppressed
-[72464.546319] Bluetooth: hci0: advertising data len corrected
-[72464.857318] Bluetooth: hci0: advertising data len corrected
-[72465.163332] Bluetooth: hci0: advertising data len corrected
-[72465.278331] Bluetooth: hci0: advertising data len corrected
-[72465.432323] Bluetooth: hci0: advertising data len corrected
-[72465.891334] Bluetooth: hci0: advertising data len corrected
-[72466.045334] Bluetooth: hci0: advertising data len corrected
-[72466.197321] Bluetooth: hci0: advertising data len corrected
-[72466.340318] Bluetooth: hci0: advertising data len corrected
-[72466.498335] Bluetooth: hci0: advertising data len corrected
-[72469.803299] bt_err_ratelimited: 10 callbacks suppressed
-
-Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
-Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=203753
-Cc: stable@vger.kernel.org
-Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
----
- net/bluetooth/hci_event.c | 14 +++++---------
- 1 file changed, 5 insertions(+), 9 deletions(-)
-
-diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
-index 016b2999f219..7d05f6c476d6 100644
---- a/net/bluetooth/hci_event.c
-+++ b/net/bluetooth/hci_event.c
-@@ -5441,7 +5441,7 @@ static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
- 	struct hci_conn *conn;
- 	bool match;
- 	u32 flags;
--	u8 *ptr, real_len;
-+	u8 *ptr;
- 
- 	switch (type) {
- 	case LE_ADV_IND:
-@@ -5472,14 +5472,10 @@ static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
- 			break;
- 	}
- 
--	real_len = ptr - data;
--
--	/* Adjust for actual length */
--	if (len != real_len) {
--		bt_dev_err_ratelimited(hdev, "advertising data len corrected %u -> %u",
--				       len, real_len);
--		len = real_len;
--	}
-+	/* Adjust for actual length. This handles the case when remote
-+	 * device is advertising with incorrect data length.
-+	 */
-+	len = ptr - data;
- 
- 	/* If the direct address is present, then this report is from
- 	 * a LE Direct Advertising Report event. In that case it is
--- 
-2.30.2
-
diff --git a/patches/drivers/ti/gpio/0001-gpio-of-helper.patch b/patches/drivers/ti/gpio/0001-gpio-of-helper.patch
new file mode 100644
index 0000000000000000000000000000000000000000..9141ddd70426d6edcc8b51e83b06a2ef823feef2
--- /dev/null
+++ b/patches/drivers/ti/gpio/0001-gpio-of-helper.patch
@@ -0,0 +1,587 @@
+From 6035eabd69ccc821d6246ee371120ed602389822 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Mon, 12 Jul 2021 14:23:07 -0500
+Subject: [PATCH] gpio-of-helper
+
+Authors:
+Pantelis Antoniou <panto@antoniou-consulting.com>
+Charles Steinkuehler <charles@steinkuehler.net>
+Jason Kridner <jdk@ti.com>
+Robert Nelson <robertcnelson@gmail.com>
+Tobias Müller <Tobias_Mueller@twam.info>
+Matthijs van Duin <matthijsvanduin@gmail.com>
+
+This patch was derived from 19 commits:
+https://github.com/RobertCNelson/linux-dev/tree/35e301ae8436e9f56f65bf1a7440021eda42f948/patches/drivers/ti/gpio
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ drivers/gpio/Kconfig          |  14 ++
+ drivers/gpio/Makefile         |   1 +
+ drivers/gpio/gpio-of-helper.c | 420 ++++++++++++++++++++++++++++++++++
+ drivers/gpio/gpiolib-sysfs.c  |  35 ++-
+ 4 files changed, 467 insertions(+), 3 deletions(-)
+ create mode 100644 drivers/gpio/gpio-of-helper.c
+
+diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
+index 14751c7ccd1f..48f778eb128c 100644
+--- a/drivers/gpio/Kconfig
++++ b/drivers/gpio/Kconfig
+@@ -94,6 +94,20 @@ config GPIO_CDEV_V1
+ 
+ 	  If unsure, say Y.
+ 
++config GPIO_OF_HELPER
++	bool "GPIO OF helper device (EXPERIMENTAL)"
++	depends on OF_GPIO
++	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
+ 	depends on HAS_IOMEM # Only for IOMEM drivers
+ 	tristate
+diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
+index 09dada80ac34..649544f69e4c 100644
+--- a/drivers/gpio/Makefile
++++ b/drivers/gpio/Makefile
+@@ -10,6 +10,7 @@ obj-$(CONFIG_OF_GPIO)		+= gpiolib-of.o
+ obj-$(CONFIG_GPIO_CDEV)		+= gpiolib-cdev.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_REGMAP)	+= gpio-regmap.o
+diff --git a/drivers/gpio/gpio-of-helper.c b/drivers/gpio/gpio-of-helper.c
+new file mode 100644
+index 000000000000..54479fca07e9
+--- /dev/null
++++ b/drivers/gpio/gpio-of-helper.c
+@@ -0,0 +1,420 @@
++/*
++ * 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;
++	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")
++			|| of_property_read_bool(node, "init-low")
++			|| of_property_read_bool(node, "init-high"))
++		type = GPIO_TYPE_OUTPUT;
++	else {
++		dev_err(dev, "Not valid gpio node type\n");
++		err = -EINVAL;
++		goto err_bad_node;
++	}
++
++	/* get the name */
++	if (of_property_read_string(node, "line-name", &name))
++		if (of_property_read_string(node, "gpio-name", &name))
++			name = node->name;
++
++	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;
++	}
++	if (of_property_read_bool(node, "dir-changeable"))
++		req_flags |= GPIOF_EXPORT_CHANGEABLE;
++	if (gpio_flags & OF_GPIO_ACTIVE_LOW)
++		req_flags |= GPIOF_ACTIVE_LOW;
++	if (gpio_flags & OF_GPIO_SINGLE_ENDED) {
++		if (gpio_flags & OF_GPIO_ACTIVE_LOW)
++			req_flags |= GPIOF_OPEN_DRAIN;
++		else
++			req_flags |= GPIOF_OPEN_SOURCE;
++	}
++
++	/* 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;
++	}
++
++	idr_preload(GFP_KERNEL);
++
++	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->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;
++		}
++	}
++
++	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;
++	}
++
++	dev_info(dev, "Allocated GPIO id=%d name='%s'\n", entry->id, name);
++
++	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_dbg(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
++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;
++}
++
++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");
+diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c
+index fa5d945b2f28..2a7b2c6388fb 100644
+--- a/drivers/gpio/gpiolib-sysfs.c
++++ b/drivers/gpio/gpiolib-sysfs.c
+@@ -38,10 +38,10 @@ static DEFINE_MUTEX(sysfs_lock);
+ /*
+  * /sys/class/gpio/gpioN... only for GPIOs that are exported
+  *   /direction
+- *      * MAY BE OMITTED if kernel won't allow direction changes
+  *      * is read/write as "in" or "out"
+  *      * may also be written as "high" or "low", initializing
+  *        output value as specified ("out" implies "low")
++ *      * read-only if kernel won't allow direction changes
+  *   /value
+  *      * always readable, subject to hardware behavior
+  *      * may be writable, as zero/nonzero
+@@ -54,6 +54,8 @@ static DEFINE_MUTEX(sysfs_lock);
+  *      * is read/write as zero/nonzero
+  *      * also affects existing and subsequent "falling" and "rising"
+  *        /edge configuration
++ *   /label
++ *      * descriptor label
+  */
+ 
+ static ssize_t direction_show(struct device *dev,
+@@ -84,7 +86,9 @@ static ssize_t direction_store(struct device *dev,
+ 
+ 	mutex_lock(&data->mutex);
+ 
+-	if (sysfs_streq(buf, "high"))
++	if (!data->direction_can_change)
++		status = -EPERM;
++	else if (sysfs_streq(buf, "high"))
+ 		status = gpiod_direction_output_raw(desc, 1);
+ 	else if (sysfs_streq(buf, "out") || sysfs_streq(buf, "low"))
+ 		status = gpiod_direction_output_raw(desc, 0);
+@@ -363,6 +367,23 @@ static ssize_t active_low_store(struct device *dev,
+ }
+ static DEVICE_ATTR_RW(active_low);
+ 
++static ssize_t label_show(struct device *dev,
++		struct device_attribute *attr, char *buf)
++{
++	struct gpiod_data *data = dev_get_drvdata(dev);
++	struct gpio_desc *desc = data->desc;
++	ssize_t			status;
++
++	mutex_lock(&data->mutex);
++
++	status = sprintf(buf, "%s\n", desc->label);
++
++	mutex_unlock(&data->mutex);
++
++	return status;
++}
++static DEVICE_ATTR_RO(label);
++
+ static umode_t gpio_is_visible(struct kobject *kobj, struct attribute *attr,
+ 			       int n)
+ {
+@@ -374,12 +395,15 @@ static umode_t gpio_is_visible(struct kobject *kobj, struct attribute *attr,
+ 
+ 	if (attr == &dev_attr_direction.attr) {
+ 		if (!show_direction)
+-			mode = 0;
++			mode &= 0444;
+ 	} else if (attr == &dev_attr_edge.attr) {
+ 		if (gpiod_to_irq(desc) < 0)
+ 			mode = 0;
+ 		if (!show_direction && test_bit(FLAG_IS_OUT, &desc->flags))
+ 			mode = 0;
++	} else if (attr == &dev_attr_value.attr) {
++		if (!show_direction && !test_bit(FLAG_IS_OUT, &desc->flags))
++			mode &= 0444;
+ 	}
+ 
+ 	return mode;
+@@ -390,6 +414,7 @@ static struct attribute *gpio_attrs[] = {
+ 	&dev_attr_edge.attr,
+ 	&dev_attr_value.attr,
+ 	&dev_attr_active_low.attr,
++	&dev_attr_label.attr,
+ 	NULL,
+ };
+ 
+@@ -403,6 +428,10 @@ static const struct attribute_group *gpio_groups[] = {
+ 	NULL
+ };
+ 
++/* bwlegh, a second device in the same file... get out of my namespace! */
++#define dev_attr_label dev_attr_chip_label
++#define label_show chip_label_show
++
+ /*
+  * /sys/class/gpio/gpiochipN/
+  *   /base ... matching gpio_chip.base (N)
+-- 
+2.30.2
+
diff --git a/patches/drivers/ti/gpio/0002-bone-pinmux-helper.patch b/patches/drivers/ti/gpio/0002-bone-pinmux-helper.patch
new file mode 100644
index 0000000000000000000000000000000000000000..219949e1365ed95ebfa84437e685680c4350884d
--- /dev/null
+++ b/patches/drivers/ti/gpio/0002-bone-pinmux-helper.patch
@@ -0,0 +1,356 @@
+From e7063673a32ac510bbc27b0eab9206028aeb1b55 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Mon, 12 Jul 2021 14:35:03 -0500
+Subject: [PATCH 2/2] bone-pinmux-helper
+
+Authors:
+Pantelis Antoniou <panto@antoniou-consulting.com>
+Charles Steinkuehler <charles@steinkuehler.net>
+Jason Kridner <jdk@ti.com>
+Robert Nelson <robertcnelson@gmail.com>
+Tobias Müller <Tobias_Mueller@twam.info>
+Matthijs van Duin <matthijsvanduin@gmail.com>
+
+This patch was derived from 19 commits:
+https://github.com/RobertCNelson/linux-dev/tree/35e301ae8436e9f56f65bf1a7440021eda42f948/patches/drivers/ti/gpio
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ 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 +
+ .../misc/cape/beaglebone/bone-pinmux-helper.c | 242 ++++++++++++++++++
+ 7 files changed, 269 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 f4fb5c52b863..8403506a4abf 100644
+--- a/drivers/misc/Kconfig
++++ b/drivers/misc/Kconfig
+@@ -456,6 +456,7 @@ source "drivers/misc/altera-stapl/Kconfig"
+ source "drivers/misc/mei/Kconfig"
+ source "drivers/misc/vmw_vmci/Kconfig"
+ source "drivers/misc/genwqe/Kconfig"
++source "drivers/misc/cape/Kconfig"
+ source "drivers/misc/echo/Kconfig"
+ source "drivers/misc/cxl/Kconfig"
+ source "drivers/misc/ocxl/Kconfig"
+diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
+index e92a56d4442f..2756a0302d60 100644
+--- a/drivers/misc/Makefile
++++ b/drivers/misc/Makefile
+@@ -45,6 +45,7 @@ obj-$(CONFIG_LATTICE_ECP3_CONFIG)	+= lattice-ecp3-config.o
+ obj-$(CONFIG_SRAM)		+= sram.o
+ obj-$(CONFIG_SRAM_EXEC)		+= sram-exec.o
+ obj-$(CONFIG_GENWQE)		+= genwqe/
++obj-y				+= cape/
+ obj-$(CONFIG_ECHO)		+= echo/
+ obj-$(CONFIG_CXL_BASE)		+= cxl/
+ obj-$(CONFIG_DW_XDATA_PCIE)	+= dw-xdata-pcie.o
+diff --git a/drivers/misc/cape/Kconfig b/drivers/misc/cape/Kconfig
+new file mode 100644
+index 000000000000..a2ef85e0415c
+--- /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 000000000000..7c4eb96ab29e
+--- /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 000000000000..eeb67828fd82
+--- /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 000000000000..7f4617a01e26
+--- /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 000000000000..d81363a77b10
+--- /dev/null
++++ b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+@@ -0,0 +1,242 @@
++/*
++ * 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/slab.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);
++
++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;
++
++	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 = kmalloc(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) {
++		kfree(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 device *dev = &pdev->dev;
++	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);
++	if (data == NULL) {
++		dev_err(dev, "Failed to allocate data\n");
++		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_state_mem;
++	}
++	data->selected_state_name = state_name;
++	strcpy(data->selected_state_name, PINCTRL_STATE_DEFAULT);
++
++	platform_set_drvdata(pdev, data);
++
++	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;
++	}
++
++	/* 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';
++		}
++	}
++
++	/* 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:
++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;
++}
++
++static int bone_pinmux_helper_remove(struct platform_device *pdev)
++{
++	struct pinmux_helper_data *data = platform_get_drvdata(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);
++
++	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.30.2
+
diff --git a/patches/drivers/ti/gpio/0003-hack-gpiolib-yes-we-have-drivers-stomping-on-each-ot.patch b/patches/drivers/ti/gpio/0003-hack-gpiolib-yes-we-have-drivers-stomping-on-each-ot.patch
new file mode 100644
index 0000000000000000000000000000000000000000..1284ff7f8224d546913a3e9a1d37b47097fe2b38
--- /dev/null
+++ b/patches/drivers/ti/gpio/0003-hack-gpiolib-yes-we-have-drivers-stomping-on-each-ot.patch
@@ -0,0 +1,31 @@
+From 88aec6df5236f77caf0fa8520cfa2561e5ffb4dc Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Sun, 30 Dec 2018 19:44:02 -0600
+Subject: [PATCH 2/2] hack: gpiolib: yes we have drivers stomping on each
+ other, we need to find a better way to share gpio...
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ drivers/gpio/gpiolib.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
+index c85fdc78fcc9..6f5458a0dfbc 100644
+--- a/drivers/gpio/gpiolib.c
++++ b/drivers/gpio/gpiolib.c
+@@ -1852,9 +1852,9 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
+ 
+ 	if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
+ 		desc_set_label(desc, label ? : "?");
+-	} else {
+-		ret = -EBUSY;
+-		goto out_free_unlock;
++//	} else {
++//		ret = -EBUSY;
++//		goto out_free_unlock;
+ 	}
+ 
+ 	if (gc->request) {
+-- 
+2.30.2
+
diff --git a/patches/drivers/ti/gpio/0004-v5.7-rc2-bone-pinmux-helper-Replace-PTR_RET-with-PTR.patch b/patches/drivers/ti/gpio/0004-v5.7-rc2-bone-pinmux-helper-Replace-PTR_RET-with-PTR.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e9463c546bbb482590a556569ba978580d0461c6
--- /dev/null
+++ b/patches/drivers/ti/gpio/0004-v5.7-rc2-bone-pinmux-helper-Replace-PTR_RET-with-PTR.patch
@@ -0,0 +1,36 @@
+From 2bb6a9c66b877ef7498dac03aa39d04adc9b7c00 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Tue, 21 Apr 2020 18:33:57 -0500
+Subject: [PATCH 3/3] v5.7-rc2: bone-pinmux-helper: Replace PTR_RET with
+ PTR_ERR_OR_ZERO
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ drivers/misc/cape/beaglebone/bone-pinmux-helper.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+index d81363a77b10..57703d8bcac7 100644
+--- a/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
++++ b/drivers/misc/cape/beaglebone/bone-pinmux-helper.c
+@@ -88,7 +88,7 @@ static ssize_t pinmux_helper_store_state(struct device *dev,
+ 					state_name);
+ 	} else {
+ 		dev_err(dev, "Failed to find state %s\n", state_name);
+-		err = PTR_RET(state);
++		err = PTR_ERR_OR_ZERO(state);
+ 	}
+ 
+ 	if (err == 0) {
+@@ -143,7 +143,7 @@ static int bone_pinmux_helper_probe(struct platform_device *pdev)
+ 	data->pinctrl = devm_pinctrl_get(dev);
+ 	if (IS_ERR(data->pinctrl)) {
+ 		dev_err(dev, "Failed to get pinctrl\n");
+-		err = PTR_RET(data->pinctrl);
++		err = PTR_ERR_OR_ZERO(data->pinctrl);
+ 		goto err_no_pinctrl;
+ 	}
+ 
+-- 
+2.26.1
+
diff --git a/patches/git/AUFS b/patches/git/AUFS
new file mode 100644
index 0000000000000000000000000000000000000000..73a1587c5f52f7a1e36b0b92cbfc1e5f9c2f70f9
--- /dev/null
+++ b/patches/git/AUFS
@@ -0,0 +1 @@
+AUFS: https://github.com/sfjro/aufs5-standalone/commit/6944bcbb5361558f4ec97194c6f9a1686f93a16d
diff --git a/patches/git/BBDTBS b/patches/git/BBDTBS
index 16edda53276a287fcf3d06ac4098fde4652cd4d3..3967f4cacdd1ad2c268074ca735fb5a46699331b 100644
--- a/patches/git/BBDTBS
+++ b/patches/git/BBDTBS
@@ -1 +1 @@
-BBDTBS: https://github.com/beagleboard/BeagleBoard-DeviceTrees/commit/399463995d629fb60e8964006392bd5c770412d2
+BBDTBS: https://github.com/beagleboard/BeagleBoard-DeviceTrees/commit/fb8cca16fb2dc7369f6ac88e1b2f888ef97326c3
diff --git a/patches/git/WIRELESS_REGDB b/patches/git/WIRELESS_REGDB
index 161a7cd0054b22315ffab66684398afffe58a35f..f0b4a34bf16552bb520e8fe33f6c315c0d015877 100644
--- a/patches/git/WIRELESS_REGDB
+++ b/patches/git/WIRELESS_REGDB
@@ -1 +1 @@
-WIRELESS_REGDB: https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git/commit/?id=04f3e5411b1cdc59292775e7b8e05a5d35ea4a80
+WIRELESS_REGDB: https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git/commit/?id=a4468e8f1ff2710982d2a8042e974d801e3a7ba0
diff --git a/patches/ref_omap2plus_defconfig b/patches/ref_omap2plus_defconfig
index 1192e733b06cf75b04315942a04ad7e3db727850..0fca285269d8b9e4073b4c3b3219593566f67dca 100644
--- a/patches/ref_omap2plus_defconfig
+++ b/patches/ref_omap2plus_defconfig
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 5.13.0 Kernel Configuration
+# Linux/arm 5.13.2 Kernel Configuration
 #
 CONFIG_CC_VERSION_TEXT="arm-linux-gnueabi-gcc (GCC) 11.1.0"
 CONFIG_CC_IS_GCC=y
@@ -1919,6 +1919,7 @@ CONFIG_EEPROM_93CX6=y
 # CONFIG_SENSORS_LIS3_SPI is not set
 # CONFIG_SENSORS_LIS3_I2C is not set
 # CONFIG_ALTERA_STAPL is not set
+# CONFIG_BEAGLEBONE_PINMUX_HELPER is not set
 # CONFIG_ECHO is not set
 # CONFIG_BCM_VK is not set
 # CONFIG_MISC_ALCOR_PCI is not set
@@ -2537,7 +2538,13 @@ CONFIG_WLAN_VENDOR_QUANTENNA=y
 # CONFIG_USB_NET_RNDIS_WLAN is not set
 # CONFIG_VIRT_WIFI is not set
 # CONFIG_WAN is not set
+
+#
+# Wireless WAN
+#
 # CONFIG_WWAN is not set
+# end of Wireless WAN
+
 # CONFIG_VMXNET3 is not set
 # CONFIG_NETDEVSIM is not set
 # CONFIG_NET_FAILOVER is not set
@@ -3013,6 +3020,7 @@ CONFIG_DEBUG_GPIO=y
 CONFIG_GPIO_SYSFS=y
 CONFIG_GPIO_CDEV=y
 CONFIG_GPIO_CDEV_V1=y
+# CONFIG_GPIO_OF_HELPER is not set
 
 #
 # Memory mapped GPIO drivers
@@ -6445,6 +6453,7 @@ CONFIG_CRAMFS_BLOCKDEV=y
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
 # CONFIG_EROFS_FS is not set
+# CONFIG_AUFS_FS is not set
 CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V2=y
diff --git a/patches/soc/ti/beagleboard_dtbs/0001-Add-BeagleBoard.org-DTBS-v5.13.x.patch b/patches/soc/ti/beagleboard_dtbs/0001-Add-BeagleBoard.org-DTBS-v5.13.x.patch
index 4bbc33c9419475d89bee51e43d2a6f6ffc9359ba..ddf5a90789b0ebb195e5b6ee8a3233aefa81a91b 100644
--- a/patches/soc/ti/beagleboard_dtbs/0001-Add-BeagleBoard.org-DTBS-v5.13.x.patch
+++ b/patches/soc/ti/beagleboard_dtbs/0001-Add-BeagleBoard.org-DTBS-v5.13.x.patch
@@ -1,11 +1,11 @@
-From 6d912847e298343908beef258c0b6fa9d1b4b430 Mon Sep 17 00:00:00 2001
+From cb7df66d35e13b64cd3fcd3cad2a86c884f1c215 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 29 Jun 2021 14:40:13 -0500
+Date: Wed, 14 Jul 2021 16:22:25 -0500
 Subject: [PATCH] Add BeagleBoard.org DTBS: v5.13.x
 
 https://github.com/beagleboard/BeagleBoard-DeviceTrees/tree/v5.13.x
 
-https://github.com/beagleboard/BeagleBoard-DeviceTrees/commit/399463995d629fb60e8964006392bd5c770412d2
+https://github.com/beagleboard/BeagleBoard-DeviceTrees/commit/fb8cca16fb2dc7369f6ac88e1b2f888ef97326c3
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
 ---
  arch/arm/boot/dts/Makefile                    |   3 +
@@ -39,7 +39,8 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  arch/arm/boot/dts/overlays/BONE-ADC.dts       |  28 +++
  arch/arm/boot/dts/overlays/Makefile           |  14 ++
  arch/arm/boot/dts/twl6030.dtsi                |   5 +
- 31 files changed, 895 insertions(+), 136 deletions(-)
+ include/dt-bindings/pinctrl/omap.h            |   4 +-
+ 32 files changed, 897 insertions(+), 138 deletions(-)
  create mode 100644 arch/arm/boot/dts/am335x-bbb-bone-buses.dtsi
  create mode 100644 arch/arm/boot/dts/am335x-boneblack-uboot.dts
  create mode 100644 arch/arm/boot/dts/am335x-bonegreen-gateway.dts
@@ -1488,6 +1489,21 @@ index 9d588cfaa5cb..c0094e0c4e0f 100644
  	twl_usb_comparator: usb-comparator {
  		compatible = "ti,twl6030-usb";
  		interrupts = <4>, <10>;
+diff --git a/include/dt-bindings/pinctrl/omap.h b/include/dt-bindings/pinctrl/omap.h
+index f48245ff87e5..625718042413 100644
+--- a/include/dt-bindings/pinctrl/omap.h
++++ b/include/dt-bindings/pinctrl/omap.h
+@@ -64,8 +64,8 @@
+ #define OMAP3_WKUP_IOPAD(pa, val)	OMAP_IOPAD_OFFSET((pa), 0x2a00) (val)
+ #define DM814X_IOPAD(pa, val)		OMAP_IOPAD_OFFSET((pa), 0x0800) (val)
+ #define DM816X_IOPAD(pa, val)		OMAP_IOPAD_OFFSET((pa), 0x0800) (val)
+-#define AM33XX_IOPAD(pa, val)		OMAP_IOPAD_OFFSET((pa), 0x0800) (val) (0)
+-#define AM33XX_PADCONF(pa, conf, mux)	OMAP_IOPAD_OFFSET((pa), 0x0800) (conf) (mux)
++#define AM33XX_IOPAD(pa, val)		OMAP_IOPAD_OFFSET((pa), 0x0800) (val)
++#define AM33XX_PADCONF(pa, dir, mux)	OMAP_IOPAD_OFFSET((pa), 0x0800) ((dir) | (mux))
+ 
+ /*
+  * Macros to allow using the offset from the padconf physical address
 -- 
 2.30.2
 
diff --git a/patches/wireless_regdb/0001-Add-wireless-regdb-regulatory-database-file.patch b/patches/wireless_regdb/0001-Add-wireless-regdb-regulatory-database-file.patch
index fbe0a248ccbfe5809f1a8afdd4195a41f5fe1403..6455168c4aaa6d3b4403cb98f143edcc56c0d0e0 100644
--- a/patches/wireless_regdb/0001-Add-wireless-regdb-regulatory-database-file.patch
+++ b/patches/wireless_regdb/0001-Add-wireless-regdb-regulatory-database-file.patch
@@ -1,12 +1,12 @@
-From 4a25b6070f308a81863f7d23262adbbcad562c91 Mon Sep 17 00:00:00 2001
+From 2284c2017ddf7711afbdd877aa46ff2f0c629df7 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 29 Jun 2021 14:05:50 -0500
+Date: Wed, 14 Jul 2021 16:22:00 -0500
 Subject: [PATCH] Add wireless-regdb regulatory database file
 
-https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git/commit/?id=04f3e5411b1cdc59292775e7b8e05a5d35ea4a80
+https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git/commit/?id=a4468e8f1ff2710982d2a8042e974d801e3a7ba0
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
 ---
- firmware/regulatory.db     | Bin 0 -> 4016 bytes
+ firmware/regulatory.db     | Bin 0 -> 4036 bytes
  firmware/regulatory.db.p7s | Bin 0 -> 1182 bytes
  2 files changed, 0 insertions(+), 0 deletions(-)
  create mode 100644 firmware/regulatory.db
@@ -14,52 +14,53 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
 
 diff --git a/firmware/regulatory.db b/firmware/regulatory.db
 new file mode 100644
-index 0000000000000000000000000000000000000000..32df7e5945f90d06c8006a03ff9fda394b5162ad
+index 0000000000000000000000000000000000000000..e0db5f8be0f4d5d3f0279864594855d73de461d7
 GIT binary patch
-literal 4016
-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
+literal 4036
+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
+HF2sKU30BCv
 
 literal 0
 HcmV?d00001
 
 diff --git a/firmware/regulatory.db.p7s b/firmware/regulatory.db.p7s
 new file mode 100644
-index 0000000000000000000000000000000000000000..b477e52de1205811ab2e2f980c6f8e3a47f7eebf
+index 0000000000000000000000000000000000000000..730aef4f364c55791a56566ff585b444823343bb
 GIT binary patch
 literal 1182
 zcmXqLVwuIpsnzDu_MMlJooPW6OSeH2OFI)IqanWmFB@k<n+IbmGYb<VD}w<yLLuXV
@@ -76,13 +77,13 @@ zwl_NPY%Twq^Pwf~#g`ddw{t6nsnpKrT*=oq&pdigF4N7P69HL|B0r0<z1rloHR9i{
 zi;dw@?>AX=M0{IyM6Wwa{mIf7OHQT7tSL%AoG*M>*R=9_*YmGe6b-ztep`IAGVBw-
 z!1vk<fs^&!f7E(&wS)?B)%sb>YwQ2f*qmwdu%Ti1qxCzl8GMutX;+>(KaknSwU#Nh
 zc=g}&Q_k>OCH%D!(HApbsVILsU}Hb?y9H@0#VSP%n;5qNQ^_V^qBc;#nzqnVFjAsl
-zkZB+RPtu&shRAuqKn5YhYRE6nYh-9(0!+%Lrlv+_Q3m=5Sr$Vj7KIo3FJtW5x~r5O
-z3d21o<=;-=JbwM^*_GQ&zV4nRz)+Ko9Cg6N&C<lk!27%Uo1SM<UJ~o6w_M-#u76J4
-zw8<|tF2GdnZMyj)lm6qi(r-%>GBgu%w#3eeE7<9(T)gk9VUmB#3GWF;Q*t{J=5i{`
-zu8Ft0_WaUfcHRvOUZ0kY@->>3?l&=5+5PjKp40E_L%BmmE=X<IQfzo^6HCS=C;5ZZ
-z*1tM`B5{>Np<K(d9W53g&)Majoof4`<@Ag*^9!z5EDbTW`5&W{w{fELgQMT4Zh0DU
-zZAxFH)-$d4)l;^Z+5chntuT7te9EMh!`%A)T-7=rxzBD~kIJ|&HJCTYn}^)rwU&8q
-uyUG-qOUgX)2MSIVzb<`#SVGQgcZJRUuZ15Xnx@pe2=|azx6#mf{SE*oSJ(sq
+zkZB+RPtu&shRAuqKn5YhYRE6nYh-9(ZfIg?W@K(?6lI`~kYzDcVo^wm)H^wIZ!|-h
+zyo*ZZ%}o>kZF<=qRJN>Y>;2ywx2rcQB1auCakDfrGBgOQ{#Cp<Wo_5r&W{IPF0<$T
+z=l7ZQcWhAR^t19idtcjL`*L?${jsS+F>~%agfs{|P`t9`I^SFIK7GE8JA2;+a~<ER
+z$PxNl@cBv(Kh<Vat%;iUR#jn1XIS5IvaKog-nrPiGiL(-H3z%wQ*ry2w5t6u;^jDV
+zAjMyoKOytZ%6kU?&UM)H*yK4{Kk44nniV?hkmjuFRr+!X^|P#}%Xo%;Nk0`Psq#&4
+zZSbDx8RzYU-l>@sDgL)U_0^E`!<5(0>bL!8>R_r%55F|6$2?kZonmRm3!Ph~rE_1a
+vC{~5BNC!nso7%2yq20X1H1~dZiLcnRn_ne&mardQx|4rX;qObf4^9IB_&U~k
 
 literal 0
 HcmV?d00001
diff --git a/patches/wpanusb/0001-merge-wpanusb-https-github.com-statropy-wpanusb.patch b/patches/wpanusb/0001-merge-wpanusb-https-github.com-statropy-wpanusb.patch
index 0ebd4613c067da3409247ba1e82e1a2eec1e940a..7fafbb0d45ca242e981d09e12710ee55ff0735ff 100644
--- a/patches/wpanusb/0001-merge-wpanusb-https-github.com-statropy-wpanusb.patch
+++ b/patches/wpanusb/0001-merge-wpanusb-https-github.com-statropy-wpanusb.patch
@@ -1,6 +1,6 @@
-From 06dc6fbe87eabc7cc0ef747f0949edc6c3c63735 Mon Sep 17 00:00:00 2001
+From 305a99df26313aae62bfb168bef1fc7a48e54b22 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 29 Jun 2021 14:03:05 -0500
+Date: Wed, 14 Jul 2021 16:21:40 -0500
 Subject: [PATCH] merge: wpanusb: https://github.com/statropy/wpanusb
 
 https://github.com/statropy/wpanusb/commit/251f0167545bf2dcaa3cad991a59dbf5ab05490a
diff --git a/tools/host_det.sh b/tools/host_det.sh
index d1ba639d166a46132455f38696cdded9649ac232..c2e2071aa89a48e4e2b4a6c75b521c0ed7e4ff5f 100755
--- a/tools/host_det.sh
+++ b/tools/host_det.sh
@@ -310,6 +310,7 @@ debian_regs () {
 			;;
 		debbie)
 			#LMDE 4
+			#http://packages.linuxmint.com/index.php
 			deb_distro="buster"
 			;;
 		debian)
@@ -413,6 +414,11 @@ debian_regs () {
 			#http://packages.linuxmint.com/index.php
 			deb_distro="focal"
 			;;
+		uma)
+			#20.2
+			#http://packages.linuxmint.com/index.php
+			deb_distro="focal"
+			;;
 		esac
 
 		#Future Debian Code names:
@@ -530,7 +536,7 @@ debian_regs () {
 	fi
 
 	if [ "${deb_pkgs}" ] ; then
-		echo "Debian/Ubuntu/Mint: missing dependencies, please install:"
+		echo "Debian/Ubuntu/Mint: missing dependencies, please install these packages via:"
 		echo "-----------------------------"
 		echo "sudo apt-get update"
 		echo "sudo apt-get install ${deb_pkgs}"
diff --git a/version.sh b/version.sh
index f1270399f5678f27a0e9d3ec48fde9dbfcd35956..666434cb434bfb9aae392ff24526ccc292581744 100644
--- a/version.sh
+++ b/version.sh
@@ -38,10 +38,10 @@ toolchain="gcc_11_arm"
 
 #Kernel
 KERNEL_REL=5.13
-KERNEL_TAG=${KERNEL_REL}
+KERNEL_TAG=${KERNEL_REL}.2
 kernel_rt=".X-rtY"
 #Kernel Build
-BUILD=${build_prefix}10
+BUILD=${build_prefix}10.1
 
 #v5.X-rcX + upto SHA
 #prev_KERNEL_SHA=""