|
@@ -27,14 +27,12 @@
|
|
|
#include <linux/io.h>
|
|
|
#include <linux/input/matrix_keypad.h>
|
|
|
#include <linux/mfd/menelaus.h>
|
|
|
+#include <linux/omap-dma.h>
|
|
|
|
|
|
#include <asm/mach-types.h>
|
|
|
#include <asm/mach/arch.h>
|
|
|
#include <asm/mach/map.h>
|
|
|
|
|
|
-#include <linux/omap-dma.h>
|
|
|
-#include <plat/debug-devices.h>
|
|
|
-
|
|
|
#include <video/omapdss.h>
|
|
|
#include <video/omap-panel-generic-dpi.h>
|
|
|
|
|
@@ -42,11 +40,9 @@
|
|
|
#include "mux.h"
|
|
|
#include "control.h"
|
|
|
#include "gpmc.h"
|
|
|
+#include "gpmc-smc91x.h"
|
|
|
|
|
|
#define H4_FLASH_CS 0
|
|
|
-#define H4_SMC91X_CS 1
|
|
|
-
|
|
|
-#define H4_ETHR_GPIO_IRQ 92
|
|
|
|
|
|
#if defined(CONFIG_KEYBOARD_MATRIX) || defined(CONFIG_KEYBOARD_MATRIX_MODULE)
|
|
|
static const uint32_t board_matrix_keys[] = {
|
|
@@ -250,71 +246,31 @@ static u32 is_gpmc_muxed(void)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static inline void __init h4_init_debug(void)
|
|
|
-{
|
|
|
- int eth_cs;
|
|
|
- unsigned long cs_mem_base;
|
|
|
- unsigned int muxed, rate;
|
|
|
- struct clk *gpmc_fck;
|
|
|
-
|
|
|
- eth_cs = H4_SMC91X_CS;
|
|
|
+#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91x_MODULE)
|
|
|
|
|
|
- gpmc_fck = clk_get(NULL, "gpmc_fck"); /* Always on ENABLE_ON_INIT */
|
|
|
- if (IS_ERR(gpmc_fck)) {
|
|
|
- WARN_ON(1);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- clk_prepare_enable(gpmc_fck);
|
|
|
- rate = clk_get_rate(gpmc_fck);
|
|
|
- clk_disable_unprepare(gpmc_fck);
|
|
|
- clk_put(gpmc_fck);
|
|
|
+static struct omap_smc91x_platform_data board_smc91x_data = {
|
|
|
+ .cs = 1,
|
|
|
+ .gpio_irq = 92,
|
|
|
+ .flags = GPMC_TIMINGS_SMC91C96 | IORESOURCE_IRQ_LOWLEVEL,
|
|
|
+};
|
|
|
|
|
|
+static void __init board_smc91x_init(void)
|
|
|
+{
|
|
|
if (is_gpmc_muxed())
|
|
|
- muxed = 0x200;
|
|
|
- else
|
|
|
- muxed = 0;
|
|
|
-
|
|
|
- /* Make sure CS1 timings are correct */
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG1,
|
|
|
- 0x00011000 | muxed);
|
|
|
-
|
|
|
- if (rate >= 160000000) {
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG2, 0x001f1f01);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG3, 0x00080803);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG4, 0x1c0b1c0a);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG5, 0x041f1F1F);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG6, 0x000004C4);
|
|
|
- } else if (rate >= 130000000) {
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG2, 0x001f1f00);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG3, 0x00080802);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG4, 0x1C091C09);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG5, 0x041f1F1F);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG6, 0x000004C4);
|
|
|
- } else {/* rate = 100000000 */
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG2, 0x001f1f00);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG3, 0x00080802);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG4, 0x1C091C09);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG5, 0x031A1F1F);
|
|
|
- gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG6, 0x000003C2);
|
|
|
- }
|
|
|
-
|
|
|
- if (gpmc_cs_request(eth_cs, SZ_16M, &cs_mem_base) < 0) {
|
|
|
- printk(KERN_ERR "Failed to request GPMC mem for smc91x\n");
|
|
|
- goto out;
|
|
|
- }
|
|
|
+ board_smc91x_data.flags |= GPMC_MUX_ADD_DATA;
|
|
|
|
|
|
- udelay(100);
|
|
|
+ omap_mux_init_gpio(board_smc91x_data.gpio_irq, OMAP_PIN_INPUT);
|
|
|
+ gpmc_smc91x_init(&board_smc91x_data);
|
|
|
+}
|
|
|
|
|
|
- omap_mux_init_gpio(92, 0);
|
|
|
- if (debug_card_init(cs_mem_base, H4_ETHR_GPIO_IRQ) < 0)
|
|
|
- gpmc_cs_free(eth_cs);
|
|
|
+#else
|
|
|
|
|
|
-out:
|
|
|
- clk_disable_unprepare(gpmc_fck);
|
|
|
- clk_put(gpmc_fck);
|
|
|
+static inline void board_smc91x_init(void)
|
|
|
+{
|
|
|
}
|
|
|
|
|
|
+#endif
|
|
|
+
|
|
|
static void __init h4_init_flash(void)
|
|
|
{
|
|
|
unsigned long base;
|
|
@@ -371,6 +327,7 @@ static void __init omap_h4_init(void)
|
|
|
omap_serial_init();
|
|
|
omap_sdrc_init(NULL, NULL);
|
|
|
h4_init_flash();
|
|
|
+ board_smc91x_init();
|
|
|
|
|
|
omap_display_init(&h4_dss_data);
|
|
|
}
|