--- linux-2.6.12/drivers/usb/net/zd1201.c	2005-05-13 22:12:06.000000000 +0200
+++ linux-2.6.12-cl/drivers/usb/net/zd1201.c	2005-06-20 09:43:22.000000000 +0200
@@ -1884,12 +1884,53 @@
 	kfree(zd);
 }
 
+#ifdef CONFIG_PM
+
+static int zd1201_suspend (struct usb_interface *interface,
+			   pm_message_t message)
+{
+	struct zd1201 *zd = (struct zd1201 *)usb_get_intfdata(interface);
+
+	netif_device_detach(zd->dev);
+
+	zd->was_enabled = zd->mac_enabled;
+
+	if (zd->was_enabled)
+		return zd1201_disable(zd);
+	else
+		return 0;
+}
+
+static int zd1201_resume (struct usb_interface *interface)
+{
+	struct zd1201 *zd = (struct zd1201 *)usb_get_intfdata(interface);
+
+	if (!zd || !zd->dev)
+		return -ENODEV;
+
+	netif_device_attach(zd->dev);
+
+	if (zd->was_enabled)
+		return zd1201_enable(zd);
+	else
+		return 0;
+}
+
+#else
+
+#define zd1201_suspend NULL
+#define zd1201_resume  NULL
+
+#endif
+
 static struct usb_driver zd1201_usb = {
 	.owner = THIS_MODULE,
 	.name = "zd1201",
 	.probe = zd1201_probe,
 	.disconnect = zd1201_disconnect,
 	.id_table = zd1201_table,
+	.suspend = zd1201_suspend,
+	.resume = zd1201_resume,
 };
 
 static int __init zd1201_init(void)
--- linux-2.6.12/drivers/usb/net/zd1201.h	2005-05-13 22:12:06.000000000 +0200
+++ linux-2.6.12-cl/drivers/usb/net/zd1201.h	2005-06-20 09:43:22.000000000 +0200
@@ -46,6 +46,7 @@
 	char			essid[IW_ESSID_MAX_SIZE+1];
 	int			essidlen;
 	int			mac_enabled;
+	int			was_enabled;
 	int			monitor;
 	int			encode_enabled;
 	int			encode_restricted;
--- linux-2.6.12/fs/hfsplus/super.c	2005-05-13 22:12:09.000000000 +0200
+++ linux-2.6.12-cl/fs/hfsplus/super.c	2005-06-20 09:43:22.000000000 +0200
@@ -17,6 +17,9 @@
 #include <linux/version.h>
 #include <linux/vfs.h>
 #include <linux/nls.h>
+#include <linux/moduleparam.h>
+
+static int force_rw = 0;
 
 static struct inode *hfsplus_alloc_inode(struct super_block *sb);
 static void hfsplus_destroy_inode(struct inode *inode);
@@ -255,9 +258,12 @@
 
 		if (!(vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_UNMNT))) {
 			printk("HFS+-fs warning: Filesystem was not cleanly unmounted, "
-			       "running fsck.hfsplus is recommended.  leaving read-only.\n");
-			sb->s_flags |= MS_RDONLY;
-			*flags |= MS_RDONLY;
+			       "running fsck.hfsplus is recommended.  leaving read-%s.\n",
+				force_rw ? "write":"only");
+			if (!force_rw) {
+				sb->s_flags |= MS_RDONLY;
+				*flags |= MS_RDONLY;
+			}
 		} else if (vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_SOFTLOCK)) {
 			printk("HFS+-fs: Filesystem is marked locked, leaving read-only.\n");
 			sb->s_flags |= MS_RDONLY;
@@ -350,8 +356,10 @@
 	if (!(vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_UNMNT))) {
 		if (!silent)
 			printk("HFS+-fs warning: Filesystem was not cleanly unmounted, "
-			       "running fsck.hfsplus is recommended.  mounting read-only.\n");
-		sb->s_flags |= MS_RDONLY;
+			       "running fsck.hfsplus is recommended.  mounting read-%s.\n",
+				force_rw ? "write":"only");
+		if (!force_rw)
+			sb->s_flags |= MS_RDONLY;
 	} else if (vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_SOFTLOCK)) {
 		if (!silent)
 			printk("HFS+-fs: Filesystem is marked locked, mounting read-only.\n");
@@ -441,6 +449,9 @@
 MODULE_DESCRIPTION("Extended Macintosh Filesystem");
 MODULE_LICENSE("GPL");
 
+module_param(force_rw, int, 0644);
+MODULE_PARM_DESC(force_rw,"Force r/w mounting (DANGEROUS).");
+
 static kmem_cache_t *hfsplus_inode_cachep;
 
 static struct inode *hfsplus_alloc_inode(struct super_block *sb)
--- linux-2.6.12/Makefile	2005-06-20 09:41:59.000000000 +0200
+++ linux-2.6.12-cl/Makefile	2005-06-20 09:43:33.000000000 +0200
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 12
-EXTRAVERSION =
+EXTRAVERSION = -cl
 NAME=Woozy Numbat
 
 # *DOCUMENTATION*
