diff -BNburp kernel-orig//arch/mips/ralink/rt305x/Kconfig linux-2.6.39.4//arch/mips/ralink/rt305x/Kconfig
--- kernel-orig//arch/mips/ralink/rt305x/Kconfig	2012-03-25 19:50:09.000000000 +0200
+++ linux-2.6.39.4//arch/mips/ralink/rt305x/Kconfig	2012-03-25 20:10:46.000000000 +0200
@@ -110,6 +110,16 @@ config RT305X_MACH_CARAMBOLA
 	bool "CARAMBOLA support"
 	default y
 
+config MACH_CARAMBOLA_W1
+	bool "Enable 1wire support on GPIO14"
+	default n
+	depends on RT305X_MACH_CARAMBOLA
+	select W1_MASTER_GPIO
+	help
+		This enables a software Maxim/Dallas Onewire driver on
+		GPIO pin 14. Needs a pull-up from that pin to +3.3V of
+		about 3K.
+
 endmenu
 
 endif
diff -BNburp kernel-orig//arch/mips/ralink/rt305x/mach-carambola.c linux-2.6.39.4//arch/mips/ralink/rt305x/mach-carambola.c
--- kernel-orig//arch/mips/ralink/rt305x/mach-carambola.c	2012-03-25 19:50:09.000000000 +0200
+++ linux-2.6.39.4//arch/mips/ralink/rt305x/mach-carambola.c	2012-03-25 19:51:57.000000000 +0200
@@ -21,6 +21,7 @@
 #include <asm/sizes.h>
 #include <linux/i2c.h>
 #include <linux/i2c-gpio.h>
+#include <linux/w1-gpio.h>
 
 #include "devices.h"
 
@@ -99,8 +100,25 @@ static struct platform_device carambola_
 	},
 };
 
+#ifdef CONFIG_MACH_CARAMBOLA_W1
+static struct w1_gpio_platform_data carambola_w1_gpio_pdata = {
+	.pin			= 14,
+};
+
+static struct platform_device carambola_w1_gpio = {
+	.name			= "w1-gpio",
+	.id			= 0,
+	.dev			= {
+		.platform_data	= &carambola_w1_gpio_pdata,
+	},
+};
+#endif
+
 static struct platform_device *carambola_devices[] __initdata = {
-        &carambola_i2c_gpio
+        &carambola_i2c_gpio,
+#ifdef CONFIG_MACH_CARAMBOLA_W1
+		&carambola_w1_gpio,
+#endif
 };
 
 static void __init carambola_init(void)
