From 1617f226a906f82ce6516e3e5a1e0909d8aa8806 Mon Sep 17 00:00:00 2001
From: Gabor Juhos <juhosg@openwrt.org>
Date: Wed, 29 Aug 2012 10:37:43 +0000
Subject: [PATCH] ramips: Add support for 8devices Carambola dev board.

Add support for 8devices Carambola dev board.

The Carambola is a small RT3050-based development board with two
ethernet ports, on-board chip antenna, usb and plenty of accessible
gpio ports, sold by 8devices.

Signed-off-by: Tobias Diedrich <ranma+openwrt@tdiedrich.de>

SVN-Revision: 33303
---
 .../etc/hotplug.d/firmware/10-rt2x00-eeprom   |  1 +
 .../base-files/etc/uci-defaults/network       |  1 +
 .../base-files/lib/preinit/06_set_iface_mac   |  1 +
 target/linux/ramips/base-files/lib/ramips.sh  |  3 ++
 .../ramips/base-files/lib/upgrade/platform.sh |  1 +
 .../mips/include/asm/mach-ralink/machine.h    |  1 +
 .../files/arch/mips/ralink/rt305x/Kconfig     |  5 +++
 .../files/arch/mips/ralink/rt305x/Makefile    |  1 +
 .../arch/mips/ralink/rt305x/mach-carambola.c  | 42 +++++++++++++++++++
 target/linux/ramips/image/Makefile            |  5 +++
 target/linux/ramips/rt305x/config-3.3         |  1 +
 11 files changed, 62 insertions(+)
 create mode 100644 target/linux/ramips/files/arch/mips/ralink/rt305x/mach-carambola.c

diff --git a/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom b/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom
index 5dadd71018..bb7f66284e 100644
--- a/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom
+++ b/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom
@@ -58,6 +58,7 @@ case "$FIRMWARE" in
 	all5002 | \
 	argus-atp52b | \
 	bc2 | \
+	carambola | \
 	dir-615-h1 | \
 	dir-620-a1 | \
 	esr-9753 | \
diff --git a/target/linux/ramips/base-files/etc/uci-defaults/network b/target/linux/ramips/base-files/etc/uci-defaults/network
index 6542d021ee..d20b60af06 100755
--- a/target/linux/ramips/base-files/etc/uci-defaults/network
+++ b/target/linux/ramips/base-files/etc/uci-defaults/network
@@ -178,6 +178,7 @@ ramips_setup_macs()
 		;;
 
 	all0239-3g | \
+	carambola | \
 	w502u)
 		lan_mac=$(ramips_get_mac_binary factory 40)
 		wan_mac=$(ramips_get_mac_binary factory 46)
diff --git a/target/linux/ramips/base-files/lib/preinit/06_set_iface_mac b/target/linux/ramips/base-files/lib/preinit/06_set_iface_mac
index 8c2b039547..591c549d14 100644
--- a/target/linux/ramips/base-files/lib/preinit/06_set_iface_mac
+++ b/target/linux/ramips/base-files/lib/preinit/06_set_iface_mac
@@ -37,6 +37,7 @@ preinit_set_mac_address() {
 	all0239-3g |\
 	all0256n |\
 	all5002 |\
+	carambola |\
 	dir-615-h1 |\
 	fonera20n |\
 	hw550-3g |\
diff --git a/target/linux/ramips/base-files/lib/ramips.sh b/target/linux/ramips/base-files/lib/ramips.sh
index b07f4e9466..90c28b7ab6 100755
--- a/target/linux/ramips/base-files/lib/ramips.sh
+++ b/target/linux/ramips/base-files/lib/ramips.sh
@@ -47,6 +47,9 @@ ramips_board_name() {
 	machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo)
 
 	case "$machine" in
+	*"8devices Carambola")
+		name="carambola"
+		;;
 	*"Edimax 3g-6200n")
 		name="3g-6200n"
 		;;
diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh
index d7380f0297..5ebf42a85d 100755
--- a/target/linux/ramips/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh
@@ -19,6 +19,7 @@ platform_check_image() {
 	all0256n | \
 	all5002 | \
 	bc2 | \
+	carambola | \
 	dir-300-b1 | \
 	dir-600-b1 | \
 	dir-600-b2 | \
diff --git a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
index 89b437398e..2d5a08f386 100644
--- a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
+++ b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
@@ -23,6 +23,7 @@ enum ramips_mach_type {
 	/* RT3050 based machines */
 	RAMIPS_MACH_3G_6200N,		/* Edimax 3G-6200N */
 	RAMIPS_MACH_ALL0256N,		/* Allnet ALL0256N */
+	RAMIPS_MACH_CARAMBOLA,		/* 8devices Carambola */
 	RAMIPS_MACH_DIR_300_B1,		/* D-Link DIR-300 B1 */
 	RAMIPS_MACH_DIR_600_B1,		/* D-Link DIR-600 B1 */
 	RAMIPS_MACH_DIR_600_B2,		/* D-Link DIR-600 B2 */
diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig b/target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig
index 5837196f6e..945639b97f 100644
--- a/target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig
+++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig
@@ -2,6 +2,11 @@ if RALINK_RT305X
 
 menu "Ralink RT350x machine selection"
 
+config RT305X_MACH_CARAMBOLA
+	bool "8devices Carambola dev board support"
+	select RALINK_DEV_GPIO_BUTTONS
+	select RALINK_DEV_GPIO_LEDS
+
 config RT305X_MACH_3G_6200N
 	bool "Edimax 3G-6200N board support"
 	select RALINK_DEV_GPIO_BUTTONS
diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile b/target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile
index 0dcb1f9e3d..c7c27cb740 100644
--- a/target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile
+++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile
@@ -16,6 +16,7 @@ obj-$(CONFIG_RT305X_MACH_ARGUS_ATP52B)	+= mach-argus-atp52b.o
 obj-$(CONFIG_RT305X_MACH_BC2)		+= mach-bc2.o
 obj-$(CONFIG_RT305X_MACH_ALL0256N)	+= mach-all0256n.o
 obj-$(CONFIG_RT305X_MACH_ALL5002)	+= mach-all5002.o
+obj-$(CONFIG_RT305X_MACH_CARAMBOLA)	+= mach-carambola.o
 obj-$(CONFIG_RT305X_MACH_DIR_300_REVB)	+= mach-dir-300-revb.o
 obj-$(CONFIG_RT305X_MACH_DIR_615_H1)	+= mach-dir-615-h1.o
 obj-$(CONFIG_RT305X_MACH_DAP_1350)	+= mach-dap-1350.o
diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-carambola.c b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-carambola.c
new file mode 100644
index 0000000000..c24527a7ba
--- /dev/null
+++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-carambola.c
@@ -0,0 +1,42 @@
+/*
+ *  8devices Carambola dev board support
+ *
+ *  Copyright (C) 2012 Tobias Diedrich <ranma+openwrt@tdiedrich.de>
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/platform_device.h>
+
+#include <asm/mach-ralink/machine.h>
+#include <asm/mach-ralink/dev-gpio-buttons.h>
+#include <asm/mach-ralink/dev-gpio-leds.h>
+#include <asm/mach-ralink/rt305x.h>
+#include <asm/mach-ralink/rt305x_regs.h>
+
+#include "devices.h"
+
+static void __init carambola_init(void)
+{
+	/* Ugh, inverted logic...
+	 * This actually puts the pins into GPIO mode rather I2C, SPI, ... */
+	rt305x_gpio_init(RT305X_GPIO_MODE_UART0(RT305X_GPIO_MODE_GPIO) |
+			 RT305X_GPIO_MODE_I2C |
+			 RT305X_GPIO_MODE_SPI |
+			 RT305X_GPIO_MODE_JTAG |
+			 RT305X_GPIO_MODE_MDIO);
+
+	rt305x_register_flash(0);
+
+	rt305x_esw_data.vlan_config = RT305X_ESW_VLAN_CONFIG_NONE;
+	rt305x_register_ethernet();
+	rt305x_register_wifi();
+	rt305x_register_wdt();
+	rt305x_register_usb();
+}
+
+MIPS_MACHINE(RAMIPS_MACH_CARAMBOLA, "CARAMBOLA", "8devices Carambola",
+	     carambola_init);
diff --git a/target/linux/ramips/image/Makefile b/target/linux/ramips/image/Makefile
index e43b501ee4..d1204f3e29 100644
--- a/target/linux/ramips/image/Makefile
+++ b/target/linux/ramips/image/Makefile
@@ -403,6 +403,10 @@ define Image/Build/Profile/BC2
 	$(call Image/Build/Template/$(fs_squash)/$(1),GENERIC_8M,bc2,BC2,ttyS1,57600,phys)
 endef
 
+define Image/Build/Profile/CARAMBOLA
+	$(call Image/Build/Template/$(fs_squash)/$(1),GENERIC_8M,carambola,CARAMBOLA,ttyS1,115200,phys)
+endef
+
 define Image/Build/Profile/DIR300B1
 	$(call Image/Build/Template/$(fs_squash)/$(1),DIR300B1,dir-300-b1,DIR-300-B1,wrgn23_dlwbr_dir300b)
 	$(call Image/Build/Template/$(fs_squash)/$(1),DIR300B1,dir-600-b1,DIR-600-B1,wrgn23_dlwbr_dir600b)
@@ -538,6 +542,7 @@ define Image/Build/Profile/Default
 	$(call Image/Build/Profile/ALL5002,$(1))
 	$(call Image/Build/Profile/ARGUS_ATP52B,$(1))
 	$(call Image/Build/Profile/BC2,$(1))
+	$(call Image/Build/Profile/CARAMBOLA,$(1))
 	$(call Image/Build/Profile/DIR300B1,$(1))
 	$(call Image/Build/Profile/DIR615H1,$(1))
 	$(call Image/Build/Profile/DAP1350,$(1))
diff --git a/target/linux/ramips/rt305x/config-3.3 b/target/linux/ramips/rt305x/config-3.3
index 409bdbbbee..1e067fbddf 100644
--- a/target/linux/ramips/rt305x/config-3.3
+++ b/target/linux/ramips/rt305x/config-3.3
@@ -92,6 +92,7 @@ CONFIG_RT305X_MACH_ALL0256N=y
 CONFIG_RT305X_MACH_ALL5002=y
 CONFIG_RT305X_MACH_ARGUS_ATP52B=y
 CONFIG_RT305X_MACH_BC2=y
+CONFIG_RT305X_MACH_CARAMBOLA=y
 CONFIG_RT305X_MACH_DIR_300_REVB=y
 CONFIG_RT305X_MACH_DIR_615_H1=y
 CONFIG_RT305X_MACH_DAP_1350=y
-- 
GitLab