Index: /GPL/branches/uniaud32-next/alsa-kernel/core/init.c
===================================================================
--- /GPL/branches/uniaud32-next/alsa-kernel/core/init.c	(revision 715)
+++ /GPL/branches/uniaud32-next/alsa-kernel/core/init.c	(revision 716)
@@ -886,12 +886,9 @@
 			return err;
 		card->registered = true;
-#ifndef TARGET_OS2
 	} else {
 		if (card->managed)
 			devm_remove_action(card->dev, trigger_card_free, card);
-#endif
-	}
-
-#ifndef TARGET_OS2
+	}
+
 	if (card->managed) {
 		err = devm_add_action(card->dev, trigger_card_free, card);
@@ -899,5 +896,5 @@
 			return err;
 	}
-#endif
+
 	err = snd_device_register_all(card);
 	if (err < 0)
Index: /GPL/branches/uniaud32-next/alsa-kernel/include/sound/memalloc.h
===================================================================
--- /GPL/branches/uniaud32-next/alsa-kernel/include/sound/memalloc.h	(revision 715)
+++ /GPL/branches/uniaud32-next/alsa-kernel/include/sound/memalloc.h	(revision 716)
@@ -83,4 +83,11 @@
 struct snd_dma_buffer *snd_devm_alloc_pages(struct device *dev, int type,
 					    size_t size);
+#ifdef TARGET_OS2
+int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab);
+void *snd_malloc_sgbuf_pages(struct device *device,
+			     size_t size, struct snd_dma_buffer *dmab,
+			     size_t *res_size);
+
+#endif
 #endif /* __SOUND_MEMALLOC_H */
 
Index: /GPL/branches/uniaud32-next/alsa-kernel/pci/hda/patch_realtek.c
===================================================================
--- /GPL/branches/uniaud32-next/alsa-kernel/pci/hda/patch_realtek.c	(revision 715)
+++ /GPL/branches/uniaud32-next/alsa-kernel/pci/hda/patch_realtek.c	(revision 716)
@@ -5215,4 +5215,5 @@
 }
 
+#ifdef NOT_USED
 static void alc274_fixup_hp_envy_gpio(struct hda_codec *codec,
 				      const struct hda_fixup *fix,
@@ -5228,5 +5229,4 @@
 }
 
-#ifdef NOT_USED
 static void alc_update_coef_led(struct hda_codec *codec,
 				struct alc_coef_led *led,
@@ -7593,4 +7593,5 @@
 };
 
+#ifdef NOT_USED
 /* A special fixup for Lenovo C940 and Yoga Duet 7;
  * both have the very same PCI SSID, and we need to apply different fixups
@@ -7609,4 +7610,5 @@
 	__snd_hda_apply_fixup(codec, id, action, 0);
 }
+#endif
 
 #ifdef TARGET_OS2
Index: /GPL/branches/uniaud32-next/include/linux/device.h
===================================================================
--- /GPL/branches/uniaud32-next/include/linux/device.h	(revision 715)
+++ /GPL/branches/uniaud32-next/include/linux/device.h	(revision 716)
@@ -292,6 +292,11 @@
 #define devm_kzalloc(A, B, C) kzalloc(B, C)
 #define devm_kmalloc(A, B, C) kmalloc(B, C)
-#define devm_kcalloc(A, B, C, D) kmalloc(B, C, D)
+#define devm_kcalloc(A, B, C, D) kmalloc(B, C)
 #define devm_kmalloc_array(A, B, C, D) kmalloc_array(B, C, D)
+
+
+/* allows to add/remove a custom action to devres stack */
+int devm_add_action(struct device *dev, void (*action)(void *), void *data);
+void devm_remove_action(struct device *dev, void (*action)(void *), void *data);
 #endif /* _LINUX_DEVICE_H */
 
Index: /GPL/branches/uniaud32-next/include/linux/pci.h
===================================================================
--- /GPL/branches/uniaud32-next/include/linux/pci.h	(revision 715)
+++ /GPL/branches/uniaud32-next/include/linux/pci.h	(revision 716)
@@ -772,3 +772,4 @@
 int pcim_enable_device(struct pci_dev *pdev);
 #define pcim_iomap pci_iomap
+int pcim_iomap_regions(struct pci_dev *pdev, int mask, const char *name);
 #endif /* LINUX_PCI_H */
Index: /GPL/branches/uniaud32-next/include/linux/string.h
===================================================================
--- /GPL/branches/uniaud32-next/include/linux/string.h	(revision 715)
+++ /GPL/branches/uniaud32-next/include/linux/string.h	(revision 716)
@@ -30,4 +30,6 @@
 #define vmemdup_user memdup_user
 #define scnprintf snprintf
+ssize_t strscpy(char *dest, const char *src, size_t count);
+
 #endif
 
Index: /GPL/branches/uniaud32-next/lib32/devres.c
===================================================================
--- /GPL/branches/uniaud32-next/lib32/devres.c	(revision 715)
+++ /GPL/branches/uniaud32-next/lib32/devres.c	(revision 716)
@@ -36,4 +36,6 @@
 };
 
+#define devres_log(dev, node, op)	do {} while (0)
+
 /*
  * Release functions for devres group.  These callbacks are used only
@@ -75,4 +77,33 @@
 
 #define devres_log(dev, node, op)	do {} while (0)
+
+static void add_dr(struct device *dev, struct devres_node *node)
+{
+	devres_log(dev, node, "ADD");
+	BUG_ON(!list_empty(&node->entry));
+//#ifndef TARGET_OS2
+	/* Traps here on OS/2 */
+	list_add_tail(&node->entry, &dev->devres_head);
+//#endif
+}
+
+/**
+ * devres_add - Register device resource
+ * @dev: Device to add resource to
+ * @res: Resource to register
+ *
+ * Register devres @res to @dev.  @res should have been allocated
+ * using devres_alloc().  On driver detach, the associated release
+ * function will be invoked and devres will be freed automatically.
+ */
+void devres_add(struct device *dev, void *res)
+{
+	/* Traps here on OS/2 */
+	struct devres *dr = container_of(res, struct devres, data);
+	unsigned long flags;
+	spin_lock_irqsave(&dev->devres_lock, flags);
+	add_dr(dev, &dr->node);
+	spin_unlock_irqrestore(&dev->devres_lock, flags);
+}
 
 /**
@@ -273,2 +304,29 @@
 	return NULL;
 }
+
+/**
+ * devm_add_action() - add a custom action to list of managed resources
+ * @dev: Device that owns the action
+ * @action: Function that should be called
+ * @data: Pointer to data passed to @action implementation
+ *
+ * This adds a custom action to the list of managed resources so that
+ * it gets executed as part of standard resource unwinding.
+ */
+int devm_add_action(struct device *dev, void (*action)(void *), void *data)
+{
+	return 0;
+}
+
+/**
+ * devm_remove_action() - removes previously added custom action
+ * @dev: Device that owns the action
+ * @action: Function implementing the action
+ * @data: Pointer to data passed to @action implementation
+ *
+ * Removes instance of @action previously added by devm_add_action().
+ * Both action and data should match one of the existing entries.
+ */
+void devm_remove_action(struct device *dev, void (*action)(void *), void *data)
+{
+}
Index: /GPL/branches/uniaud32-next/lib32/driver.c
===================================================================
--- /GPL/branches/uniaud32-next/lib32/driver.c	(revision 715)
+++ /GPL/branches/uniaud32-next/lib32/driver.c	(revision 716)
@@ -26,22 +26,4 @@
 #include "base.h"
 
-#define devres_log(dev, node, op)	do {} while (0)
-
-struct devres_node {
-	struct list_head		entry;
-	dr_release_t			release;
-#ifdef CONFIG_DEBUG_DEVRES
-	const char			*name;
-	size_t				size;
-#endif
-};
-
-struct devres {
-	struct devres_node		node;
-	/* -- 3 pointers */
-	unsigned long long		data[1];	/* guarantee ull alignment */
-};
-
-
 /**
  * dev_set_name - set a device name
@@ -60,32 +42,5 @@
 }
 
-static void add_dr(struct device *dev, struct devres_node *node)
-{
-	devres_log(dev, node, "ADD");
-	BUG_ON(!list_empty(&node->entry));
-	list_add_tail(&node->entry, &dev->devres_head);
-}
-
-/**
- * devres_add - Register device resource
- * @dev: Device to add resource to
- * @res: Resource to register
- *
- * Register devres @res to @dev.  @res should have been allocated
- * using devres_alloc().  On driver detach, the associated release
- * function will be invoked and devres will be freed automatically.
- */
-void devres_add(struct device *dev, void *res)
-{
-#ifndef TARGET_OS2
-	/* Traps here on OS/2 */
-	struct devres *dr = container_of(res, struct devres, data);
-	unsigned long flags;
-
-	spin_lock_irqsave(&dev->devres_lock, flags);
-	add_dr(dev, &dr->node);
-	spin_unlock_irqrestore(&dev->devres_lock, flags);
-#endif
-}
+
 
 static struct device *next_device(struct klist_iter *i)
