mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-16 22:38:04 +00:00
07e8c30da9
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
220 lines
6.6 KiB
Diff
220 lines
6.6 KiB
Diff
From a564ca287c115928a9e7febf7c99bbab582290e6 Mon Sep 17 00:00:00 2001
|
|
From: Koen Kooi <koen@dominion.thruhere.net>
|
|
Date: Wed, 6 Oct 2010 10:19:34 +0200
|
|
Subject: [PATCH 05/28] ARM: OMAP: beagleboard: Add infrastructure to do fixups based on expansionboard name passed by u-boot
|
|
|
|
Add support for Tincantools Zippy and Zippy2 expansionboards as well
|
|
|
|
Signed-off-by: Koen Kooi <koen@beagleboard.org>
|
|
---
|
|
arch/arm/mach-omap2/board-omap3beagle.c | 142 ++++++++++++++++++++++++++++++-
|
|
1 files changed, 139 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
|
index f9fb64b..d777b3b 100644
|
|
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
|
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
|
@@ -21,6 +21,7 @@
|
|
#include <linux/io.h>
|
|
#include <linux/leds.h>
|
|
#include <linux/gpio.h>
|
|
+#include <linux/irq.h>
|
|
#include <linux/input.h>
|
|
#include <linux/gpio_keys.h>
|
|
|
|
@@ -143,6 +144,92 @@ fail0:
|
|
return;
|
|
}
|
|
|
|
+char expansionboard_name[16];
|
|
+
|
|
+#if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE)
|
|
+
|
|
+#include <plat/mcspi.h>
|
|
+#include <linux/spi/spi.h>
|
|
+
|
|
+#define OMAP3BEAGLE_GPIO_ENC28J60_IRQ 157
|
|
+
|
|
+static struct omap2_mcspi_device_config enc28j60_spi_chip_info = {
|
|
+ .turbo_mode = 0,
|
|
+ .single_channel = 1, /* 0: slave, 1: master */
|
|
+};
|
|
+
|
|
+static struct spi_board_info omap3beagle_zippy_spi_board_info[] __initdata = {
|
|
+ {
|
|
+ .modalias = "enc28j60",
|
|
+ .bus_num = 4,
|
|
+ .chip_select = 0,
|
|
+ .max_speed_hz = 20000000,
|
|
+ .controller_data = &enc28j60_spi_chip_info,
|
|
+ },
|
|
+};
|
|
+
|
|
+static void __init omap3beagle_enc28j60_init(void)
|
|
+{
|
|
+ if ((gpio_request(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, "ENC28J60_IRQ") == 0) &&
|
|
+ (gpio_direction_input(OMAP3BEAGLE_GPIO_ENC28J60_IRQ) == 0)) {
|
|
+ gpio_export(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, 0);
|
|
+ omap3beagle_zippy_spi_board_info[0].irq = OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_ENC28J60_IRQ);
|
|
+ set_irq_type(omap3beagle_zippy_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
|
|
+ } else {
|
|
+ printk(KERN_ERR "could not obtain gpio for ENC28J60_IRQ\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ spi_register_board_info(omap3beagle_zippy_spi_board_info,
|
|
+ ARRAY_SIZE(omap3beagle_zippy_spi_board_info));
|
|
+}
|
|
+
|
|
+#else
|
|
+static inline void __init omap3beagle_enc28j60_init(void) { return; }
|
|
+#endif
|
|
+
|
|
+#if defined(CONFIG_KS8851) || defined(CONFIG_KS8851_MODULE)
|
|
+
|
|
+#include <plat/mcspi.h>
|
|
+#include <linux/spi/spi.h>
|
|
+
|
|
+#define OMAP3BEAGLE_GPIO_KS8851_IRQ 157
|
|
+
|
|
+static struct omap2_mcspi_device_config ks8851_spi_chip_info = {
|
|
+ .turbo_mode = 0,
|
|
+ .single_channel = 1, /* 0: slave, 1: master */
|
|
+};
|
|
+
|
|
+static struct spi_board_info omap3beagle_zippy2_spi_board_info[] __initdata = {
|
|
+ {
|
|
+ .modalias = "ks8851",
|
|
+ .bus_num = 4,
|
|
+ .chip_select = 0,
|
|
+ .max_speed_hz = 36000000,
|
|
+ .controller_data = &ks8851_spi_chip_info,
|
|
+ },
|
|
+};
|
|
+
|
|
+static void __init omap3beagle_ks8851_init(void)
|
|
+{
|
|
+ if ((gpio_request(OMAP3BEAGLE_GPIO_KS8851_IRQ, "KS8851_IRQ") == 0) &&
|
|
+ (gpio_direction_input(OMAP3BEAGLE_GPIO_KS8851_IRQ) == 0)) {
|
|
+ gpio_export(OMAP3BEAGLE_GPIO_KS8851_IRQ, 0);
|
|
+ omap3beagle_zippy2_spi_board_info[0].irq = OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_KS8851_IRQ);
|
|
+ set_irq_type(omap3beagle_zippy2_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
|
|
+ } else {
|
|
+ printk(KERN_ERR "could not obtain gpio for KS8851_IRQ\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ spi_register_board_info(omap3beagle_zippy2_spi_board_info,
|
|
+ ARRAY_SIZE(omap3beagle_zippy2_spi_board_info));
|
|
+}
|
|
+
|
|
+#else
|
|
+static inline void __init omap3beagle_ks8851_init(void) { return; }
|
|
+#endif
|
|
+
|
|
static struct mtd_partition omap3beagle_nand_partitions[] = {
|
|
/* All the partition sizes are listed in terms of NAND block size */
|
|
{
|
|
@@ -262,6 +349,12 @@ static struct omap2_hsmmc_info mmc[] = {
|
|
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
|
.gpio_wp = 29,
|
|
},
|
|
+ {
|
|
+ .mmc = 2,
|
|
+ .caps = MMC_CAP_4_BIT_DATA,
|
|
+ .transceiver = true,
|
|
+ .ocr_mask = 0x00100000, /* 3.3V */
|
|
+ },
|
|
{} /* Terminator */
|
|
};
|
|
|
|
@@ -457,7 +550,7 @@ static struct twl4030_platform_data beagle_twldata = {
|
|
.vpll2 = &beagle_vpll2,
|
|
};
|
|
|
|
-static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
|
|
+static struct i2c_board_info __initdata beagle_i2c1_boardinfo[] = {
|
|
{
|
|
I2C_BOARD_INFO("twl4030", 0x48),
|
|
.flags = I2C_CLIENT_WAKE,
|
|
@@ -472,10 +565,24 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
|
|
},
|
|
};
|
|
|
|
+#if defined(CONFIG_RTC_DRV_DS1307) || \
|
|
+ defined(CONFIG_RTC_DRV_DS1307_MODULE)
|
|
+
|
|
+static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {
|
|
+ {
|
|
+ I2C_BOARD_INFO("ds1307", 0x68),
|
|
+ },
|
|
+};
|
|
+#else
|
|
+static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {};
|
|
+#endif
|
|
+
|
|
static int __init omap3_beagle_i2c_init(void)
|
|
{
|
|
- omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo,
|
|
- ARRAY_SIZE(beagle_i2c_boardinfo));
|
|
+ omap_register_i2c_bus(1, 2600, beagle_i2c1_boardinfo,
|
|
+ ARRAY_SIZE(beagle_i2c1_boardinfo));
|
|
+ omap_register_i2c_bus(2, 400, beagle_i2c2_boardinfo,
|
|
+ ARRAY_SIZE(beagle_i2c2_boardinfo));
|
|
/* Bus 3 is attached to the DVI port where devices like the pico DLP
|
|
* projector don't work reliably with 400kHz */
|
|
omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom));
|
|
@@ -609,6 +716,15 @@ static struct omap_musb_board_data musb_board_data = {
|
|
.power = 100,
|
|
};
|
|
|
|
+static int __init expansionboard_setup(char *str)
|
|
+{
|
|
+ if (!str)
|
|
+ return -EINVAL;
|
|
+ strncpy(expansionboard_name, str, 16);
|
|
+ printk(KERN_INFO "Beagle expansionboard: %s\n", expansionboard_name);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
static void __init omap3_beagle_init(void)
|
|
{
|
|
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
|
@@ -623,6 +739,24 @@ static void __init omap3_beagle_init(void)
|
|
/* REVISIT leave DVI powered down until it's needed ... */
|
|
gpio_direction_output(170, true);
|
|
|
|
+ if(!strcmp(expansionboard_name, "zippy"))
|
|
+ {
|
|
+ printk(KERN_INFO "Beagle expansionboard: initializing enc28j60\n");
|
|
+ omap3beagle_enc28j60_init();
|
|
+ printk(KERN_INFO "Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n");
|
|
+ mmc[1].gpio_wp = 141;
|
|
+ mmc[1].gpio_cd = 162;
|
|
+ }
|
|
+
|
|
+ if(!strcmp(expansionboard_name, "zippy2"))
|
|
+ {
|
|
+ printk(KERN_INFO "Beagle expansionboard: initializing ks_8851\n");
|
|
+ omap3beagle_ks8851_init();
|
|
+ printk(KERN_INFO "Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n");
|
|
+ mmc[1].gpio_wp = 141;
|
|
+ mmc[1].gpio_cd = 162;
|
|
+ }
|
|
+
|
|
usb_musb_init(&musb_board_data);
|
|
usb_ehci_init(&ehci_pdata);
|
|
omap3beagle_flash_init();
|
|
@@ -634,6 +768,8 @@ static void __init omap3_beagle_init(void)
|
|
beagle_display_init();
|
|
}
|
|
|
|
+early_param("buddy", expansionboard_setup);
|
|
+
|
|
MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
|
|
/* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
|
|
.boot_params = 0x80000100,
|
|
--
|
|
1.6.6.1
|
|
|