aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/portable_date.sh
blob: 84b56382e0af941a9b2b8e73457839d4600d9341 (plain)
1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh

case $(uname) in
	NetBSD|OpenBSD|DragonFly|FreeBSD|Darwin)
		date -j -f "%Y-%m-%d %H:%M:%S %z" "$1" "$2" 2>/dev/null
		;;
	*)
		date -d "$1" "$2"
esac

exit $?
7'>177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
--- a/arch/arm/mach-ixp4xx/avila-setup.c
+++ b/arch/arm/mach-ixp4xx/avila-setup.c
@@ -14,9 +14,14 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/device.h>
+#include <linux/if_ether.h>
+#include <linux/socket.h>
+#include <linux/netdevice.h>
 #include <linux/serial.h>
 #include <linux/tty.h>
 #include <linux/serial_8250.h>
+#include <linux/i2c.h>
+#include <linux/i2c/at24.h>
 #include <linux/i2c-gpio.h>
 #include <asm/types.h>
 #include <asm/setup.h>
@@ -30,6 +35,13 @@
 #define AVILA_SDA_PIN	7
 #define AVILA_SCL_PIN	6
 
+struct avila_board_info {
+	unsigned char	*model;
+	void		(*setup)(void);
+};
+
+static struct avila_board_info *avila_info __initdata;
+
 static struct flash_platform_data avila_flash_data = {
 	.map_name	= "cfi_probe",
 	.width		= 2,
@@ -133,16 +145,181 @@ static struct platform_device avila_pata
 	.resource		= avila_pata_resources,
 };
 
+/* Built-in 10/100 Ethernet MAC interfaces */
+static struct eth_plat_info avila_npeb_data = {
+	.phy		= 0,
+	.rxq		= 3,
+	.txreadyq	= 20,
+};
+
+static struct eth_plat_info avila_npec_data = {
+	.phy		= 1,
+	.rxq		= 4,
+	.txreadyq	= 21,
+};
+
+static struct platform_device avila_npeb_device = {
+	.name			= "ixp4xx_eth",
+	.id			= IXP4XX_ETH_NPEB,
+	.dev.platform_data	= &avila_npeb_data,
+};
+
+static struct platform_device avila_npec_device = {
+	.name			= "ixp4xx_eth",
+	.id			= IXP4XX_ETH_NPEC,
+	.dev.platform_data	= &avila_npec_data,
+};
+
 static struct platform_device *avila_devices[] __initdata = {
 	&avila_i2c_gpio,
 	&avila_flash,
 	&avila_uart
 };
 
+static void __init avila_gw23xx_setup(void)
+{
+	platform_device_register(&avila_npeb_device);
+	platform_device_register(&avila_npec_device);
+}
+
+static void __init avila_gw2342_setup(void)
+{
+	platform_device_register(&avila_npeb_device);
+	platform_device_register(&avila_npec_device);
+}
+
+static void __init avila_gw2345_setup(void)
+{
+	avila_npeb_data.phy = IXP4XX_ETH_PHY_MAX_ADDR;
+	avila_npeb_data.phy_mask = 0x1e; /* ports 1-4 of the KS8995 switch */
+	platform_device_register(&avila_npeb_device);
+
+	avila_npec_data.phy = 5; /* port 5 of the KS8995 switch */
+	platform_device_register(&avila_npec_device);
+}
+
+static void __init avila_gw2347_setup(void)
+{
+	platform_device_register(&avila_npeb_device);
+}
+
+static void __init avila_gw2348_setup(void)
+{
+	platform_device_register(&avila_npeb_device);
+	platform_device_register(&avila_npec_device);
+}
+
+static void __init avila_gw2353_setup(void)
+{
+	platform_device_register(&avila_npeb_device);
+}
+
+static void __init avila_gw2355_setup(void)
+{
+	avila_npeb_data.phy = IXP4XX_ETH_PHY_MAX_ADDR;
+	avila_npeb_data.phy_mask = 0x1e; /* ports 1-4 of the KS8995 switch */
+	platform_device_register(&avila_npeb_device);
+
+	avila_npec_data.phy = 16;
+	platform_device_register(&avila_npec_device);
+}
+
+static void __init avila_gw2357_setup(void)
+{
+	platform_device_register(&avila_npeb_device);
+}
+
+static struct avila_board_info avila_boards[] __initdata = {
+	{
+		.model		= "GW2342",
+		.setup		= avila_gw2342_setup,
+	}, {
+		.model		= "GW2345",
+		.setup		= avila_gw2345_setup,
+	}, {
+		.model		= "GW2347",
+		.setup		= avila_gw2347_setup,
+	}, {
+		.model		= "GW2348",
+		.setup		= avila_gw2348_setup,
+	}, {
+		.model		= "GW2353",
+		.setup		= avila_gw2353_setup,
+	}, {
+		.model		= "GW2355",
+		.setup		= avila_gw2355_setup,
+	}, {
+		.model		= "GW2357",
+		.setup		= avila_gw2357_setup,
+	}
+};
+
+static struct avila_board_info * __init avila_find_board_info(char *model)
+{
+	int i;
+	model[6] = '\0';
+
+	for (i = 0; i < ARRAY_SIZE(avila_boards); i++) {
+		struct avila_board_info *info = &avila_boards[i];
+		if (strcmp(info->model, model) == 0)
+			return info;
+	}
+
+	return NULL;
+}
+
+static struct memory_accessor *at24_mem_acc;
+
+static void at24_setup(struct memory_accessor *mem_acc, void *context)
+{
+	char mac_addr[ETH_ALEN];
+	char model[7];
+
+	at24_mem_acc = mem_acc;
+
+	/* Read MAC addresses */
+	if (at24_mem_acc->read(at24_mem_acc, mac_addr, 0x0, 6) == 6) {
+		memcpy(&avila_npeb_data.hwaddr, mac_addr, ETH_ALEN);
+	}
+	if (at24_mem_acc->read(at24_mem_acc, mac_addr, 0x6, 6) == 6) {
+		memcpy(&avila_npec_data.hwaddr, mac_addr, ETH_ALEN);
+	}
+
+	/* Read the first 6 bytes of the model number */
+	if (at24_mem_acc->read(at24_mem_acc, model, 0x20, 6) == 6) {
+		avila_info = avila_find_board_info(model);
+	}
+
+}
+
+static struct at24_platform_data avila_eeprom_info = {
+	.byte_len	= 1024,
+	.page_size	= 16,
+	.flags		= AT24_FLAG_READONLY,
+	.setup		= at24_setup,
+};
+
+static struct i2c_board_info __initdata avila_i2c_board_info[] = {
+	{
+		I2C_BOARD_INFO("ds1672", 0x68),
+	},
+	{
+		I2C_BOARD_INFO("ad7418", 0x28),
+	},
+	{
+		I2C_BOARD_INFO("24c08", 0x51),
+		.platform_data	= &avila_eeprom_info
+	},
+};
+
 static void __init avila_init(void)
 {
 	ixp4xx_sys_init();
 
+	/*
+	 * These devices are present on all Avila models and don't need any
+	 * model specific setup.
+	 */
 	avila_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
 	avila_flash_resource.end =
 		IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
@@ -160,7 +337,28 @@ static void __init avila_init(void)
 
 	platform_device_register(&avila_pata);
 
+		i2c_register_board_info(0, avila_i2c_board_info,
+				ARRAY_SIZE(avila_i2c_board_info));
+}
+
+static int __init avila_model_setup(void)
+{
+	if (!machine_is_avila())
+		return 0;
+
+	if (avila_info) {
+		printk(KERN_DEBUG "Running on Gateworks Avila %s\n",
+							avila_info->model);
+		avila_info->setup();
+	} else {
+		printk(KERN_INFO "Unknown/missing Avila model number"
+						" -- defaults will be used\n");
+		avila_gw23xx_setup();
+	}
+
+	return 0;
 }
+late_initcall(avila_model_setup);
 
 MACHINE_START(AVILA, "Gateworks Avila Network Platform")
 	/* Maintainer: Deepak Saxena <dsaxena@plexity.net> */