--- linux-2.6.12-rc5/drivers/macintosh/therm_adt746x.c	2005-05-13 22:11:38.000000000 +0200
+++ linux-2.6.12-rc5-cl/drivers/macintosh/therm_adt746x.c	2005-05-25 11:53:20.000000000 +0200
@@ -39,15 +39,16 @@
 #define MANUAL_MASK  0xe0
 #define AUTO_MASK    0x20
 
-static u8 TEMP_REG[3]    = {0x26, 0x25, 0x27}; /* local, cpu, gpu */
-static u8 LIMIT_REG[3]   = {0x6b, 0x6a, 0x6c}; /* local, cpu, gpu */
+static u8 TEMP_REG[3]    = {0x26, 0x25, 0x27}; /* local, sensor1, sensor2 */
+static u8 LIMIT_REG[3]   = {0x6b, 0x6a, 0x6c}; /* local, sensor1, sensor2 */
 static u8 MANUAL_MODE[2] = {0x5c, 0x5d};       
 static u8 REM_CONTROL[2] = {0x00, 0x40};
 static u8 FAN_SPEED[2]   = {0x28, 0x2a};
 static u8 FAN_SPD_SET[2] = {0x30, 0x31};
 
-static u8 default_limits_local[3] = {70, 50, 70};    /* local, cpu, gpu */
-static u8 default_limits_chip[3] = {80, 65, 80};    /* local, cpu, gpu */
+static u8 default_limits_local[3] = {70, 50, 70};    /* local, sensor1, sensor2 */
+static u8 default_limits_chip[3] = {80, 65, 80};    /* local, sensor1, sensor2 */
+static char *sensor_location[3] = {NULL, NULL, NULL};
 
 static int limit_adjust = 0;
 static int fan_speed = -1;
@@ -58,7 +59,7 @@
 MODULE_LICENSE("GPL");
 
 module_param(limit_adjust, int, 0644);
-MODULE_PARM_DESC(limit_adjust,"Adjust maximum temperatures (50 cpu, 70 gpu) "
+MODULE_PARM_DESC(limit_adjust,"Adjust maximum temperatures (50 sensor1, 70 sensor2) "
 		 "by N degrees.");
 
 module_param(fan_speed, int, 0644);
@@ -213,10 +214,10 @@
 	if (th->last_speed[fan] != speed) {
 		if (speed == -1)
 			printk(KERN_DEBUG "adt746x: Setting speed to automatic "
-				"for %s fan.\n", fan?"GPU":"CPU");
+				"for %s fan.\n", sensor_location[fan+1]);
 		else
 			printk(KERN_DEBUG "adt746x: Setting speed to %d "
-				"for %s fan.\n", speed, fan?"GPU":"CPU");
+				"for %s fan.\n", speed, sensor_location[fan+1]);
 	} else
 		return;
 	
@@ -300,11 +301,11 @@
 			printk(KERN_DEBUG "adt746x: setting fans speed to %d "
 					 "(limit exceeded by %d on %s) \n",
 					new_speed, var,
-					fan_number?"GPU/pwr":"CPU");
+					sensor_location[fan_number+1]);
 			write_both_fan_speed(th, new_speed);
 			th->last_var[fan_number] = var;
 		} else if (var < -2) {
-			/* don't stop fan if GPU/power is cold and CPU is not
+			/* don't stop fan if sensor2 is cold and sensor1 is not
 			 * so cold (lastvar >= -1) */
 			if (i == 2 && lastvar < -1) {
 				if (th->last_speed[fan_number] != 0)
@@ -318,7 +319,7 @@
 
 		if (started)
 			return; /* we don't want to re-stop the fan
-				* if CPU is heating and GPU/power is not */
+				* if sensor1 is heating and sensor2 is not */
 	}
 }
 
@@ -353,7 +354,7 @@
 
 static void set_limit(struct thermostat *th, int i)
 {
-		/* Set CPU limit higher to avoid powerdowns */ 
+		/* Set sensor1 limit higher to avoid powerdowns */
 		th->limits[i] = default_limits_chip[i] + limit_adjust;
 		write_reg(th, LIMIT_REG[i], th->limits[i]);
 		
@@ -461,6 +462,12 @@
 	return sprintf(buf, "%d\n", data);			\
 }
 
+#define BUILD_SHOW_FUNC_STR(name, data)				\
+static ssize_t show_##name(struct device *dev, char *buf)	\
+{								\
+	return sprintf(buf, "%s\n", data);			\
+}
+
 #define BUILD_SHOW_FUNC_FAN(name, data)				\
 static ssize_t show_##name(struct device *dev, char *buf)       \
 {								\
@@ -476,7 +483,7 @@
 	int val;						\
 	int i;							\
 	val = simple_strtol(buf, NULL, 10);			\
-	printk(KERN_INFO "Adjusting limits by %d°C\n", val);	\
+	printk(KERN_INFO "Adjusting limits by %d degrees\n", val);	\
 	limit_adjust = val;					\
 	for (i=0; i < 3; i++)					\
 		set_limit(thermostat, i);			\
@@ -495,35 +502,41 @@
 	return n;						\
 }
 
-BUILD_SHOW_FUNC_INT(cpu_temperature,	 (read_reg(thermostat, TEMP_REG[1])))
-BUILD_SHOW_FUNC_INT(gpu_temperature,	 (read_reg(thermostat, TEMP_REG[2])))
-BUILD_SHOW_FUNC_INT(cpu_limit,		 thermostat->limits[1])
-BUILD_SHOW_FUNC_INT(gpu_limit,		 thermostat->limits[2])
+BUILD_SHOW_FUNC_INT(sensor1_temperature,	 (read_reg(thermostat, TEMP_REG[1])))
+BUILD_SHOW_FUNC_INT(sensor2_temperature,	 (read_reg(thermostat, TEMP_REG[2])))
+BUILD_SHOW_FUNC_INT(sensor1_limit,		 thermostat->limits[1])
+BUILD_SHOW_FUNC_INT(sensor2_limit,		 thermostat->limits[2])
+BUILD_SHOW_FUNC_STR(sensor1_location,		 sensor_location[1])
+BUILD_SHOW_FUNC_STR(sensor2_location,		 sensor_location[2])
 
 BUILD_SHOW_FUNC_INT(specified_fan_speed, fan_speed)
-BUILD_SHOW_FUNC_FAN(cpu_fan_speed,	 0)
-BUILD_SHOW_FUNC_FAN(gpu_fan_speed,	 1)
+BUILD_SHOW_FUNC_FAN(sensor1_fan_speed,	 0)
+BUILD_SHOW_FUNC_FAN(sensor2_fan_speed,	 1)
 
 BUILD_STORE_FUNC_INT(specified_fan_speed,fan_speed)
 BUILD_SHOW_FUNC_INT(limit_adjust,	 limit_adjust)
 BUILD_STORE_FUNC_DEG(limit_adjust,	 thermostat)
 		
-static DEVICE_ATTR(cpu_temperature,	S_IRUGO,
-		   show_cpu_temperature,NULL);
-static DEVICE_ATTR(gpu_temperature,	S_IRUGO,
-		   show_gpu_temperature,NULL);
-static DEVICE_ATTR(cpu_limit,		S_IRUGO,
-		   show_cpu_limit,	NULL);
-static DEVICE_ATTR(gpu_limit,		S_IRUGO,
-		   show_gpu_limit,	NULL);
+static DEVICE_ATTR(sensor1_temperature,	S_IRUGO,
+		   show_sensor1_temperature,NULL);
+static DEVICE_ATTR(sensor2_temperature,	S_IRUGO,
+		   show_sensor2_temperature,NULL);
+static DEVICE_ATTR(sensor1_limit, S_IRUGO,
+		   show_sensor1_limit,	NULL);
+static DEVICE_ATTR(sensor2_limit, S_IRUGO,
+		   show_sensor2_limit,	NULL);
+static DEVICE_ATTR(sensor1_location, S_IRUGO,
+		   show_sensor1_location, NULL);
+static DEVICE_ATTR(sensor2_location, S_IRUGO,
+		   show_sensor2_location, NULL);
 
 static DEVICE_ATTR(specified_fan_speed,	S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH,
 		   show_specified_fan_speed,store_specified_fan_speed);
 
-static DEVICE_ATTR(cpu_fan_speed,	S_IRUGO,
-		   show_cpu_fan_speed,	NULL);
-static DEVICE_ATTR(gpu_fan_speed,	S_IRUGO,
-		   show_gpu_fan_speed,	NULL);
+static DEVICE_ATTR(sensor1_fan_speed,	S_IRUGO,
+		   show_sensor1_fan_speed,	NULL);
+static DEVICE_ATTR(sensor2_fan_speed,	S_IRUGO,
+		   show_sensor2_fan_speed,	NULL);
 
 static DEVICE_ATTR(limit_adjust,	S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH,
 		   show_limit_adjust,	store_limit_adjust);
@@ -534,6 +547,7 @@
 {
 	struct device_node* np;
 	u32 *prop;
+	int i = 0, offset = 0;
 	
 	np = of_find_node_by_name(NULL, "fan");
 	if (!np)
@@ -545,6 +559,12 @@
 	else
 		return -ENODEV;
 
+	prop = (u32 *)get_property(np, "hwsensor-params-version", NULL);
+	printk(KERN_INFO "adt746x: version %d (%ssupported)\n", *prop,
+			 (*prop == 1)?"":"un");
+	if (*prop != 1)
+		return -ENODEV;
+
 	prop = (u32 *)get_property(np, "reg", NULL);
 	if (!prop)
 		return -ENODEV;
@@ -563,6 +583,23 @@
 			 "limit_adjust: %d, fan_speed: %d\n",
 			 therm_bus, therm_address, limit_adjust, fan_speed);
 
+	if (get_property(np, "hwsensor-location", NULL)) {
+		for (i = 0; i < 3; i++) {
+			sensor_location[i] = get_property(np,
+					"hwsensor-location", NULL) + offset;
+
+			if (sensor_location[i] == NULL)
+				sensor_location[i] = "";
+
+			printk(KERN_INFO "sensor %d: %s\n", i, sensor_location[i]);
+			offset += strlen(sensor_location[i]) + 1;
+		}
+	} else {
+		sensor_location[0] = "?";
+		sensor_location[1] = "?";
+		sensor_location[2] = "?";
+	}
+
 	of_dev = of_platform_device_create(np, "temperatures");
 	
 	if (of_dev == NULL) {
@@ -570,15 +607,17 @@
 		return -ENODEV;
 	}
 	
-	device_create_file(&of_dev->dev, &dev_attr_cpu_temperature);
-	device_create_file(&of_dev->dev, &dev_attr_gpu_temperature);
-	device_create_file(&of_dev->dev, &dev_attr_cpu_limit);
-	device_create_file(&of_dev->dev, &dev_attr_gpu_limit);
+	device_create_file(&of_dev->dev, &dev_attr_sensor1_temperature);
+	device_create_file(&of_dev->dev, &dev_attr_sensor2_temperature);
+	device_create_file(&of_dev->dev, &dev_attr_sensor1_limit);
+	device_create_file(&of_dev->dev, &dev_attr_sensor2_limit);
+	device_create_file(&of_dev->dev, &dev_attr_sensor1_location);
+	device_create_file(&of_dev->dev, &dev_attr_sensor2_location);
 	device_create_file(&of_dev->dev, &dev_attr_limit_adjust);
 	device_create_file(&of_dev->dev, &dev_attr_specified_fan_speed);
-	device_create_file(&of_dev->dev, &dev_attr_cpu_fan_speed);
+	device_create_file(&of_dev->dev, &dev_attr_sensor1_fan_speed);
 	if(therm_type == ADT7460)
-		device_create_file(&of_dev->dev, &dev_attr_gpu_fan_speed);
+		device_create_file(&of_dev->dev, &dev_attr_sensor2_fan_speed);
 
 #ifndef CONFIG_I2C_KEYWEST
 	request_module("i2c-keywest");
@@ -591,17 +630,19 @@
 thermostat_exit(void)
 {
 	if (of_dev) {
-		device_remove_file(&of_dev->dev, &dev_attr_cpu_temperature);
-		device_remove_file(&of_dev->dev, &dev_attr_gpu_temperature);
-		device_remove_file(&of_dev->dev, &dev_attr_cpu_limit);
-		device_remove_file(&of_dev->dev, &dev_attr_gpu_limit);
+		device_remove_file(&of_dev->dev, &dev_attr_sensor1_temperature);
+		device_remove_file(&of_dev->dev, &dev_attr_sensor2_temperature);
+		device_remove_file(&of_dev->dev, &dev_attr_sensor1_limit);
+		device_remove_file(&of_dev->dev, &dev_attr_sensor2_limit);
+		device_remove_file(&of_dev->dev, &dev_attr_sensor1_location);
+		device_remove_file(&of_dev->dev, &dev_attr_sensor2_location);
 		device_remove_file(&of_dev->dev, &dev_attr_limit_adjust);
 		device_remove_file(&of_dev->dev, &dev_attr_specified_fan_speed);
-		device_remove_file(&of_dev->dev, &dev_attr_cpu_fan_speed);
+		device_remove_file(&of_dev->dev, &dev_attr_sensor1_fan_speed);
 
 		if(therm_type == ADT7460)
 			device_remove_file(&of_dev->dev,
-					   &dev_attr_gpu_fan_speed);
+					   &dev_attr_sensor2_fan_speed);
 
 		of_device_unregister(of_dev);
 	}
--- linux-2.6.12-rc5/drivers/usb/net/zd1201.c	2005-05-13 22:12:06.000000000 +0200
+++ linux-2.6.12-rc5-cl/drivers/usb/net/zd1201.c	2005-05-25 11:53:09.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-rc5/drivers/usb/net/zd1201.h	2005-05-13 22:12:06.000000000 +0200
+++ linux-2.6.12-rc5-cl/drivers/usb/net/zd1201.h	2005-05-25 11:53:07.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-rc5/fs/hfsplus/super.c	2005-05-13 22:12:09.000000000 +0200
+++ linux-2.6.12-rc5-cl/fs/hfsplus/super.c	2005-05-25 11:53:02.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-rc5/Makefile	2005-05-25 11:54:44.000000000 +0200
+++ linux-2.6.12-rc5-cl/Makefile	2005-05-25 11:53:30.000000000 +0200
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 12
-EXTRAVERSION =-rc5
+EXTRAVERSION =-rc5-cl
 NAME=Woozy Numbat
 
 # *DOCUMENTATION*