parent
1a01559520
commit
b284c0e804
|
@ -0,0 +1,210 @@
|
|||
CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y
|
||||
CONFIG_ARCH_GUMSTIX=y
|
||||
CONFIG_ARCH_HAS_CPUFREQ=y
|
||||
CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
|
||||
# CONFIG_ARCH_LUBBOCK is not set
|
||||
CONFIG_ARCH_MTD_XIP=y
|
||||
CONFIG_ARCH_NR_GPIO=0
|
||||
# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
|
||||
CONFIG_ARCH_PXA=y
|
||||
# CONFIG_ARCH_PXA_ESERIES is not set
|
||||
# CONFIG_ARCH_PXA_IDP is not set
|
||||
# CONFIG_ARCH_PXA_PALM is not set
|
||||
# CONFIG_ARCH_PXA_V7 is not set
|
||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
|
||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
|
||||
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
|
||||
# CONFIG_ARCH_VIPER is not set
|
||||
CONFIG_ARM=y
|
||||
# CONFIG_ARM_CPU_SUSPEND is not set
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=5
|
||||
CONFIG_ARM_NR_BANKS=8
|
||||
CONFIG_ARM_PATCH_PHYS_VIRT=y
|
||||
# CONFIG_ARM_THUMB is not set
|
||||
# CONFIG_ARPD is not set
|
||||
CONFIG_ATA=m
|
||||
# CONFIG_ATMEL_PWM is not set
|
||||
CONFIG_AUTO_ZRELADDR=y
|
||||
CONFIG_BCMA_POSSIBLE=y
|
||||
CONFIG_BLK_DEV_IDECS=m
|
||||
# CONFIG_BLK_DEV_IDEDMA is not set
|
||||
# CONFIG_BLK_DEV_INITRD is not set
|
||||
# CONFIG_CACHE_L2X0 is not set
|
||||
CONFIG_CLKDEV_LOOKUP=y
|
||||
CONFIG_CLKSRC_MMIO=y
|
||||
CONFIG_CMDLINE="rootfstype=squashfs,jffs2 noinitrd console=ttyS0,115200"
|
||||
CONFIG_CMDLINE_FROM_BOOTLOADER=y
|
||||
CONFIG_CPU_32v5=y
|
||||
CONFIG_CPU_ABRT_EV5T=y
|
||||
CONFIG_CPU_CACHE_VIVT=y
|
||||
CONFIG_CPU_CP15=y
|
||||
CONFIG_CPU_CP15_MMU=y
|
||||
CONFIG_CPU_HAS_PMU=y
|
||||
CONFIG_CPU_PABRT_LEGACY=y
|
||||
CONFIG_CPU_TLB_V4WBI=y
|
||||
CONFIG_CPU_USE_DOMAINS=y
|
||||
CONFIG_CPU_XSCALE=y
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_LL_UART_NONE is not set
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
# CONFIG_DW_WATCHDOG is not set
|
||||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
# CONFIG_EPOLL is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_GENERIC_ATOMIC64=y
|
||||
CONFIG_GENERIC_BUG=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
|
||||
# CONFIG_GENERIC_CPU_DEVICES is not set
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_GENERIC_IRQ_SHOW=y
|
||||
CONFIG_GENERIC_PCI_IOMAP=y
|
||||
CONFIG_GPIOLIB=y
|
||||
CONFIG_GPIO_PXA=y
|
||||
# CONFIG_HAMRADIO is not set
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_HAS_DMA=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAVE_AOUT=y
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
CONFIG_HAVE_ARCH_PFN_VALID=y
|
||||
CONFIG_HAVE_CLK=y
|
||||
CONFIG_HAVE_C_RECORDMCOUNT=y
|
||||
CONFIG_HAVE_DMA_API_DEBUG=y
|
||||
CONFIG_HAVE_DYNAMIC_FTRACE=y
|
||||
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
|
||||
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
|
||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||
CONFIG_HAVE_GENERIC_HARDIRQS=y
|
||||
CONFIG_HAVE_IDE=y
|
||||
CONFIG_HAVE_IRQ_WORK=y
|
||||
CONFIG_HAVE_KERNEL_GZIP=y
|
||||
CONFIG_HAVE_KERNEL_LZMA=y
|
||||
CONFIG_HAVE_KERNEL_LZO=y
|
||||
CONFIG_HAVE_KERNEL_XZ=y
|
||||
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
||||
CONFIG_HAVE_MEMBLOCK=y
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
CONFIG_HAVE_PERF_EVENTS=y
|
||||
CONFIG_HAVE_PROC_CPU=y
|
||||
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
|
||||
CONFIG_HAVE_SCHED_CLOCK=y
|
||||
CONFIG_HAVE_SPARSE_IRQ=y
|
||||
CONFIG_I2C=m
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_CHARDEV=m
|
||||
CONFIG_I2C_PXA=m
|
||||
# CONFIG_I2C_PXA_PCI is not set
|
||||
CONFIG_I2C_PXA_SLAVE=y
|
||||
CONFIG_IDE=m
|
||||
CONFIG_IWMMXT=y
|
||||
CONFIG_KTIME_SCALAR=y
|
||||
# CONFIG_LEDS_GPIO is not set
|
||||
# CONFIG_MACH_ARCOM_ZEUS is not set
|
||||
# CONFIG_MACH_ARMCORE is not set
|
||||
# CONFIG_MACH_BALLOON3 is not set
|
||||
# CONFIG_MACH_CAPC7117 is not set
|
||||
# CONFIG_MACH_CM_X300 is not set
|
||||
# CONFIG_MACH_COLIBRI is not set
|
||||
# CONFIG_MACH_COLIBRI300 is not set
|
||||
# CONFIG_MACH_COLIBRI320 is not set
|
||||
# CONFIG_MACH_CSB726 is not set
|
||||
# CONFIG_MACH_EM_X270 is not set
|
||||
# CONFIG_MACH_EXEDA is not set
|
||||
# CONFIG_MACH_GUMSTIX_F is not set
|
||||
CONFIG_MACH_GUMSTIX_VERDEX=y
|
||||
# CONFIG_MACH_H4700 is not set
|
||||
# CONFIG_MACH_H5000 is not set
|
||||
# CONFIG_MACH_HIMALAYA is not set
|
||||
# CONFIG_MACH_ICONTROL is not set
|
||||
# CONFIG_MACH_INTELMOTE2 is not set
|
||||
# CONFIG_MACH_LITTLETON is not set
|
||||
# CONFIG_MACH_LOGICPD_PXA270 is not set
|
||||
# CONFIG_MACH_MAGICIAN is not set
|
||||
# CONFIG_MACH_MAINSTONE is not set
|
||||
# CONFIG_MACH_MIOA701 is not set
|
||||
# CONFIG_MACH_MP900C is not set
|
||||
# CONFIG_MACH_PCM027 is not set
|
||||
# CONFIG_MACH_RAUMFELD_CONNECTOR is not set
|
||||
# CONFIG_MACH_RAUMFELD_RC is not set
|
||||
# CONFIG_MACH_RAUMFELD_SPEAKER is not set
|
||||
# CONFIG_MACH_SAAR is not set
|
||||
# CONFIG_MACH_STARGATE2 is not set
|
||||
# CONFIG_MACH_TAVOREVB is not set
|
||||
# CONFIG_MACH_VPAC270 is not set
|
||||
# CONFIG_MACH_XCEP is not set
|
||||
# CONFIG_MACH_ZIPIT2 is not set
|
||||
# CONFIG_MACH_ZYLONITE300 is not set
|
||||
# CONFIG_MACH_ZYLONITE320 is not set
|
||||
CONFIG_MDIO_BOARDINFO=y
|
||||
# CONFIG_MFD_T7L66XB is not set
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_BLOCK=y
|
||||
CONFIG_MMC_PXA=y
|
||||
CONFIG_MTD_CFI_ADV_OPTIONS=y
|
||||
# CONFIG_MTD_CFI_AMDSTD is not set
|
||||
CONFIG_MTD_CFI_GEOMETRY=y
|
||||
# CONFIG_MTD_CFI_I2 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_PXA2XX=y
|
||||
# CONFIG_MTD_XIP is not set
|
||||
CONFIG_MULTI_IRQ_HANDLER=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_NEED_PER_CPU_KM=y
|
||||
# CONFIG_PACKET is not set
|
||||
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
CONFIG_PATA_PCMCIA=m
|
||||
# CONFIG_PATA_PXA is not set
|
||||
CONFIG_PCCARD=m
|
||||
# CONFIG_PCI_SYSCALL is not set
|
||||
CONFIG_PCMCIA=m
|
||||
CONFIG_PCMCIA_LOAD_CIS=y
|
||||
CONFIG_PCMCIA_PXA2XX=m
|
||||
CONFIG_PCMCIA_SOC_COMMON=m
|
||||
CONFIG_PERF_USE_VMALLOC=y
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PLAT_PXA=y
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
CONFIG_PXA27x=y
|
||||
# CONFIG_PXA_EZX is not set
|
||||
# CONFIG_PXA_SHARPSL is not set
|
||||
# CONFIG_QUOTACTL is not set
|
||||
CONFIG_SA1100_WATCHDOG=m
|
||||
CONFIG_SCSI=m
|
||||
CONFIG_SCSI_MOD=m
|
||||
# CONFIG_SCSI_MULTI_LUN is not set
|
||||
# CONFIG_SCSI_PROC_FS is not set
|
||||
# CONFIG_SDIO_UART is not set
|
||||
# CONFIG_SERIAL_8250 is not set
|
||||
CONFIG_SERIAL_PXA=y
|
||||
CONFIG_SERIAL_PXA_CONSOLE=y
|
||||
CONFIG_SERIO=m
|
||||
CONFIG_SERIO_LIBPS2=m
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
CONFIG_SERIO_SERPORT=m
|
||||
CONFIG_SMC911X=m
|
||||
CONFIG_SMC91X=m
|
||||
CONFIG_SMSC911X=y
|
||||
# CONFIG_SMSC911X_ARCH_HOOKS is not set
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=999999
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
# CONFIG_TRIZEPS_PXA is not set
|
||||
CONFIG_UID16=y
|
||||
CONFIG_UNIX=m
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
CONFIG_XSCALE_PMU=y
|
||||
CONFIG_XZ_DEC=y
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZONE_DMA_FLAG=0
|
|
@ -0,0 +1,881 @@
|
|||
From 4f4bb58cba3a6c44e9f9f113609287d9d50be9c4 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Kortje <jpktech@rogers.com>
|
||||
Date: Wed, 28 Oct 2009 21:11:28 -0400
|
||||
Subject: [PATCH] [ARM] Gumstix Verdex Pro arch support
|
||||
|
||||
add an option for Verdex Pro when ARCH_GUMSTIX is selected, and
|
||||
factor earlier Gumstix support into a seperate option
|
||||
|
||||
Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
|
||||
---
|
||||
arch/arm/mach-pxa/Kconfig | 29 +-
|
||||
arch/arm/mach-pxa/Makefile | 3 +-
|
||||
arch/arm/mach-pxa/gumstix-verdex.c | 749 +++++++++++++++++++++++++++
|
||||
arch/arm/mach-pxa/include/mach/mfp-pxa27x.h | 1 +
|
||||
4 files changed, 772 insertions(+), 10 deletions(-)
|
||||
create mode 100644 arch/arm/mach-pxa/gumstix-verdex.c
|
||||
|
||||
--- a/arch/arm/mach-pxa/Kconfig
|
||||
+++ b/arch/arm/mach-pxa/Kconfig
|
||||
@@ -134,23 +134,34 @@ config MACH_CAPC7117
|
||||
select PXA3xx
|
||||
|
||||
config ARCH_GUMSTIX
|
||||
- bool "Gumstix XScale 255 boards"
|
||||
- select PXA25x
|
||||
+ bool "Gumstix boards"
|
||||
help
|
||||
- Say Y here if you intend to run this kernel on
|
||||
- Basix, Connex, ws-200ax, ws-400ax systems
|
||||
+ Say Y here if you intend to run this kernel on a
|
||||
+ gumstix computer.
|
||||
|
||||
-choice
|
||||
- prompt "Gumstix Carrier/Expansion Board"
|
||||
depends on ARCH_GUMSTIX
|
||||
|
||||
-config GUMSTIX_AM200EPD
|
||||
+config MACH_GUMSTIX_F
|
||||
+ bool "Gumstix Basix/Connex ..."
|
||||
+ depends on ARCH_GUMSTIX
|
||||
+ select PXA25x
|
||||
+
|
||||
+ choice
|
||||
+ prompt "Gumstix Carrier/Expansion Board"
|
||||
+ depends on MACH_GUMSTIX_F
|
||||
+
|
||||
+ config GUMSTIX_AM200EPD
|
||||
bool "Enable AM200EPD board support"
|
||||
|
||||
-config GUMSTIX_AM300EPD
|
||||
+ config GUMSTIX_AM300EPD
|
||||
bool "Enable AM300EPD board support"
|
||||
|
||||
-endchoice
|
||||
+ endchoice
|
||||
+
|
||||
+config MACH_GUMSTIX_VERDEX
|
||||
+ bool "Gumstix VERDEX ..."
|
||||
+ depends on ARCH_GUMSTIX
|
||||
+ select PXA27x
|
||||
|
||||
config MACH_INTELMOTE2
|
||||
bool "Intel Mote 2 Platform"
|
||||
--- a/arch/arm/mach-pxa/Makefile
|
||||
+++ b/arch/arm/mach-pxa/Makefile
|
||||
@@ -51,7 +51,8 @@ endif
|
||||
obj-$(CONFIG_MACH_EM_X270) += em-x270.o
|
||||
obj-$(CONFIG_MACH_CM_X300) += cm-x300.o
|
||||
obj-$(CONFIG_MACH_CAPC7117) += capc7117.o mxm8x10.o
|
||||
-obj-$(CONFIG_ARCH_GUMSTIX) += gumstix.o
|
||||
+obj-$(CONFIG_MACH_GUMSTIX_F) += gumstix.o
|
||||
+obj-$(CONFIG_MACH_GUMSTIX_VERDEX) += gumstix-verdex.o
|
||||
obj-$(CONFIG_GUMSTIX_AM200EPD) += am200epd.o
|
||||
obj-$(CONFIG_GUMSTIX_AM300EPD) += am300epd.o
|
||||
obj-$(CONFIG_MACH_INTELMOTE2) += stargate2.o
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/mach-pxa/gumstix-verdex.c
|
||||
@@ -0,0 +1,793 @@
|
||||
+/*
|
||||
+ * linux/arch/arm/mach-pxa/gumstix-verdex.c
|
||||
+ *
|
||||
+ * Support for the Gumstix verdex motherboard.
|
||||
+ *
|
||||
+ * Original Author: Craig Hughes
|
||||
+ * Created: Feb 14, 2008
|
||||
+ * Copyright: Craig Hughes
|
||||
+ *
|
||||
+ * 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.
|
||||
+ *
|
||||
+ * Implemented based on lubbock.c by Nicolas Pitre and code from Craig
|
||||
+ * Hughes
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/interrupt.h>
|
||||
+#include <linux/mtd/mtd.h>
|
||||
+#include <linux/mtd/partitions.h>
|
||||
+#include <linux/i2c/tsc2007.h>
|
||||
+#include <linux/i2c/pxa-i2c.h>
|
||||
+#include <linux/gpio.h>
|
||||
+
|
||||
+#include <asm/setup.h>
|
||||
+#include <asm/memory.h>
|
||||
+#include <asm/mach-types.h>
|
||||
+#include <asm/irq.h>
|
||||
+#include <asm/sizes.h>
|
||||
+#include <asm/io.h>
|
||||
+
|
||||
+#include <asm/mach/arch.h>
|
||||
+#include <asm/mach/map.h>
|
||||
+#include <asm/mach/irq.h>
|
||||
+#include <asm/mach/flash.h>
|
||||
+
|
||||
+#include <mach/mmc.h>
|
||||
+#include <mach/udc.h>
|
||||
+#include <mach/pxafb.h>
|
||||
+#include <mach/ohci.h>
|
||||
+#include <mach/pxa27x.h>
|
||||
+#include <mach/pxa27x-udc.h>
|
||||
+#include <mach/gpio.h>
|
||||
+
|
||||
+#include <mach/gumstix.h>
|
||||
+
|
||||
+#include "generic.h"
|
||||
+
|
||||
+#include <linux/delay.h>
|
||||
+
|
||||
+static struct resource flash_resource = {
|
||||
+ .start = 0x00000000,
|
||||
+ .end = SZ_64M - 1,
|
||||
+ .flags = IORESOURCE_MEM,
|
||||
+};
|
||||
+
|
||||
+static struct mtd_partition gumstix_partitions[] = {
|
||||
+ {
|
||||
+ .name = "u-boot",
|
||||
+ .size = 0x00040000,
|
||||
+ .offset = 0,
|
||||
+ .mask_flags = MTD_WRITEABLE /* force read-only */
|
||||
+ } , {
|
||||
+ .name = "rootfs",
|
||||
+ .size = 0x01ec0000,
|
||||
+ .offset = 0x00040000
|
||||
+ } , {
|
||||
+ .name = "kernel",
|
||||
+ .size = 0x00100000,
|
||||
+ .offset = 0x01f00000
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+static struct flash_platform_data gumstix_flash_data = {
|
||||
+ .map_name = "cfi_probe",
|
||||
+ .parts = gumstix_partitions,
|
||||
+ .nr_parts = ARRAY_SIZE(gumstix_partitions),
|
||||
+ .width = 2,
|
||||
+};
|
||||
+
|
||||
+static struct platform_device gumstix_flash_device = {
|
||||
+ .name = "pxa2xx-flash",
|
||||
+ .id = 0,
|
||||
+ .dev = {
|
||||
+ .platform_data = &gumstix_flash_data,
|
||||
+ },
|
||||
+ .resource = &flash_resource,
|
||||
+ .num_resources = 1,
|
||||
+};
|
||||
+
|
||||
+#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE) \
|
||||
+ || defined(CONFIG_PCMCIA_PXA2XX) || defined(CONFIG_PCMCIA_PXA2XX_MODULE)
|
||||
+
|
||||
+#include <linux/smsc911x.h>
|
||||
+
|
||||
+static struct resource verdex_smsc911x_resources[] = {
|
||||
+ [0] = {
|
||||
+ .name = "smsc911x-memory",
|
||||
+ .start = PXA_CS1_PHYS,
|
||||
+ .end = PXA_CS1_PHYS + 0x000fffff,
|
||||
+ .flags = IORESOURCE_MEM,
|
||||
+ },
|
||||
+ [1] = {
|
||||
+ .start = PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_ETH0),
|
||||
+ .end = PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_ETH0),
|
||||
+ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWEDGE,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static struct smsc911x_platform_config verdex_smsc911x_config = {
|
||||
+ .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
+ .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
|
||||
+ .flags = SMSC911X_USE_16BIT | SMSC911X_SAVE_MAC_ADDRESS,
|
||||
+ .phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
+};
|
||||
+
|
||||
+static struct platform_device verdex_smsc911x_device = {
|
||||
+ .name = "smsc911x",
|
||||
+ .id = -1,
|
||||
+ .num_resources = ARRAY_SIZE(verdex_smsc911x_resources),
|
||||
+ .resource = verdex_smsc911x_resources,
|
||||
+ .dev = {
|
||||
+ .platform_data = &verdex_smsc911x_config,
|
||||
+ },
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
+#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
|
||||
+static void __init verdex_init_smsc911x(void)
|
||||
+{
|
||||
+
|
||||
+ printk(KERN_INFO "Initializing Gumstix verdex smsc911x\n");
|
||||
+
|
||||
+ if (gpio_request(GPIO_GUMSTIX_ETH0_RST, "SMSC911x_ETH0_RST") != 0) {
|
||||
+ printk(KERN_ERR "could not obtain gpio for SMSC911x_ETH0_RST\n");
|
||||
+ goto err_request_gpio_eth0_rst;
|
||||
+ }
|
||||
+
|
||||
+ if (gpio_request(GPIO_GUMSTIX_ETH0, "SMSC911x_ETH0_IRQ") != 0) {
|
||||
+ printk(KERN_ERR "could not obtain gpio for SMSC911x_ETH0_IRQ\n");
|
||||
+ goto err_request_gpio_eth0_irq;
|
||||
+ }
|
||||
+
|
||||
+ if (gpio_direction_output(GPIO_GUMSTIX_ETH0_RST, 0) != 0) {
|
||||
+ printk(KERN_ERR "could not set SMSC911x_ETH0_RST pin to output\n");
|
||||
+ goto err_dir;
|
||||
+ }
|
||||
+
|
||||
+ gpio_set_value(GPIO_GUMSTIX_ETH0_RST, 0);
|
||||
+
|
||||
+ msleep(500); // Hold RESET for at least 200ms
|
||||
+
|
||||
+ gpio_set_value(GPIO_GUMSTIX_ETH0_RST, 1);
|
||||
+
|
||||
+ msleep(50);
|
||||
+
|
||||
+ if (gpio_direction_input(GPIO_GUMSTIX_ETH0) != 0) {
|
||||
+ printk(KERN_ERR "could not set SMSC911x_ETH0_IRQ pin to input\n");
|
||||
+ goto err_dir;
|
||||
+ }
|
||||
+
|
||||
+ gpio_export(GPIO_GUMSTIX_ETH0, 0);
|
||||
+ platform_device_register(&verdex_smsc911x_device);
|
||||
+ return;
|
||||
+
|
||||
+err_dir:
|
||||
+ gpio_free(GPIO_GUMSTIX_ETH0_RST);
|
||||
+
|
||||
+err_request_gpio_eth0_irq:
|
||||
+ gpio_free(GPIO_GUMSTIX_ETH0);
|
||||
+
|
||||
+err_request_gpio_eth0_rst:
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+#else
|
||||
+static void __init verdex_init_smsc911x(void) { return; }
|
||||
+#endif
|
||||
+
|
||||
+static unsigned long verdex_pin_config[] = {
|
||||
+ /* MMC */
|
||||
+ GPIO32_MMC_CLK,
|
||||
+ GPIO112_MMC_CMD,
|
||||
+ GPIO92_MMC_DAT_0,
|
||||
+ GPIO109_MMC_DAT_1,
|
||||
+ GPIO110_MMC_DAT_2,
|
||||
+ GPIO111_MMC_DAT_3,
|
||||
+
|
||||
+ /* BTUART */
|
||||
+ GPIO42_BTUART_RXD,
|
||||
+ GPIO43_BTUART_TXD,
|
||||
+ GPIO44_BTUART_CTS,
|
||||
+ GPIO45_BTUART_RTS,
|
||||
+
|
||||
+ /* STUART */
|
||||
+ GPIO46_STUART_RXD,
|
||||
+ GPIO47_STUART_TXD,
|
||||
+
|
||||
+ /* FFUART */
|
||||
+ GPIO34_FFUART_RXD,
|
||||
+ GPIO39_FFUART_TXD,
|
||||
+
|
||||
+ /* SSP 2 */
|
||||
+ GPIO19_SSP2_SCLK,
|
||||
+ GPIO14_SSP2_SFRM,
|
||||
+ GPIO13_SSP2_TXD,
|
||||
+ GPIO11_SSP2_RXD,
|
||||
+
|
||||
+ /* SDRAM and local bus */
|
||||
+ GPIO49_nPWE,
|
||||
+ GPIO15_nCS_1,
|
||||
+
|
||||
+ /* I2C */
|
||||
+ GPIO117_I2C_SCL,
|
||||
+ GPIO118_I2C_SDA,
|
||||
+
|
||||
+ /* PWM 0 */
|
||||
+ GPIO16_PWM0_OUT,
|
||||
+
|
||||
+ /* BRIGHTNESS */
|
||||
+ GPIO17_PWM1_OUT,
|
||||
+
|
||||
+ /* LCD */
|
||||
+ GPIO58_LCD_LDD_0,
|
||||
+ GPIO59_LCD_LDD_1,
|
||||
+ GPIO60_LCD_LDD_2,
|
||||
+ GPIO61_LCD_LDD_3,
|
||||
+ GPIO62_LCD_LDD_4,
|
||||
+ GPIO63_LCD_LDD_5,
|
||||
+ GPIO64_LCD_LDD_6,
|
||||
+ GPIO65_LCD_LDD_7,
|
||||
+ GPIO66_LCD_LDD_8,
|
||||
+ GPIO67_LCD_LDD_9,
|
||||
+ GPIO68_LCD_LDD_10,
|
||||
+ GPIO69_LCD_LDD_11,
|
||||
+ GPIO70_LCD_LDD_12,
|
||||
+ GPIO71_LCD_LDD_13,
|
||||
+ GPIO72_LCD_LDD_14,
|
||||
+ GPIO73_LCD_LDD_15,
|
||||
+ GPIO74_LCD_FCLK,
|
||||
+ GPIO75_LCD_LCLK,
|
||||
+ GPIO76_LCD_PCLK,
|
||||
+#ifdef CONFIG_FB_PXA_SHARP_LQ043_PSP
|
||||
+ /* DISP must be always high while screen is on */
|
||||
+ /* Done below in verdex_init */
|
||||
+#else
|
||||
+ GPIO77_LCD_BIAS,
|
||||
+#endif
|
||||
+};
|
||||
+
|
||||
+#if defined(CONFIG_PCMCIA_PXA2XX) || defined(CONFIG_PCMCIA_PXA2XX_MODULE)
|
||||
+
|
||||
+static unsigned long gpio_ntschg_0[] = {
|
||||
+ GPIO104_GPIO, // pxa_gpio_mode(GPIO_GUMSTIX_nCD_0_MD);
|
||||
+};
|
||||
+
|
||||
+static unsigned long gpio_ntschg_1[] = {
|
||||
+ GPIO18_GPIO, // pxa_gpio_mode(GPIO_GUMSTIX_nSTSCHG_1_MD);
|
||||
+ GPIO36_GPIO, // pxa_gpio_mode(GPIO_GUMSTIX_nCD_1_MD);
|
||||
+ GPIO27_GPIO, // pxa_gpio_mode(GPIO_GUMSTIX_PRDY_nBSY_1_MD);
|
||||
+};
|
||||
+
|
||||
+static unsigned long gpio_prdy_nbsy_old[] = {
|
||||
+ GPIO111_GPIO, // pxa_gpio_mode(GPIO_GUMSTIX_nSTSCHG_0_MD);
|
||||
+ GPIO109_GPIO, // pxa_gpio_mode(GPIO_GUMSTIX_PRDY_nBSY_0_OLD_MD);
|
||||
+};
|
||||
+
|
||||
+static unsigned long gpio_prdy_nbsy[] = {
|
||||
+ GPIO96_GPIO, // pxa_gpio_mode(GPIO_GUMSTIX_PRDY_nBSY_0_MD);
|
||||
+};
|
||||
+
|
||||
+static unsigned long gpio_nhw_init[] = {
|
||||
+ GPIO48_nPOE, // pxa_gpio_mode(GPIO_GUMSTIX_nPOE_MD);
|
||||
+ GPIO102_nPCE_1, // pxa_gpio_mode(GPIO_GUMSTIX_nPCE_1_MD);
|
||||
+ GPIO105_nPCE_2, // pxa_gpio_mode(GPIO_GUMSTIX_nPCE_2_MD);
|
||||
+ GPIO104_GPIO, // pxa_gpio_mode(GPIO_GUMSTIX_nCD_0_MD);
|
||||
+
|
||||
+ GPIO49_nPWE, // pxa_gpio_mode(GPIO_GUMSTIX_nPWE_MD);
|
||||
+ GPIO50_nPIOR, // pxa_gpio_mode(GPIO_GUMSTIX_nPIOR_MD);
|
||||
+ GPIO51_nPIOW, // pxa_gpio_mode(GPIO_GUMSTIX_nPIOW_MD);
|
||||
+ GPIO79_PSKTSEL, // pxa_gpio_mode(GPIO_GUMSTIX_pSKTSEL_MD);
|
||||
+ GPIO55_nPREG, // pxa_gpio_mode(GPIO_GUMSTIX_nPREG_MD);
|
||||
+ GPIO56_nPWAIT, // pxa_gpio_mode(GPIO_GUMSTIX_nPWAIT_MD);
|
||||
+ GPIO57_nIOIS16, // pxa_gpio_mode(GPIO_GUMSTIX_nIOIS16_MD);
|
||||
+};
|
||||
+
|
||||
+static int net_cf_vx_mode = 0;
|
||||
+static int pcmcia_cf_nr = 2;
|
||||
+
|
||||
+inline void __init gumstix_pcmcia_cpld_clk(void)
|
||||
+{
|
||||
+ GPCR(GPIO_GUMSTIX_nPOE) = GPIO_bit(GPIO_GUMSTIX_nPOE);
|
||||
+ GPSR(GPIO_GUMSTIX_nPOE) = GPIO_bit(GPIO_GUMSTIX_nPOE);
|
||||
+}
|
||||
+
|
||||
+inline unsigned char __init gumstix_pcmcia_cpld_read_bits(int bits)
|
||||
+{
|
||||
+ unsigned char result = 0;
|
||||
+ unsigned int shift = 0;
|
||||
+ while(bits--)
|
||||
+ {
|
||||
+ result |= !!(GPLR(GPIO_GUMSTIX_nCD_0) & GPIO_bit(GPIO_GUMSTIX_nCD_0)) << shift;
|
||||
+ shift ++;
|
||||
+ gumstix_pcmcia_cpld_clk();
|
||||
+ }
|
||||
+ printk("CPLD responded with: %02x\n",result);
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+/* We use the CPLD on the CF-CF card to read a value from a shift register. If we can read that
|
||||
+ * magic sequence, then we have 2 CF cards; otherwise we assume just one
|
||||
+ * The CPLD will send the value of the shift register on GPIO11 (the CD line for slot 0)
|
||||
+ * when RESET is held in reset. We use GPIO48 (nPOE) as a clock signal,
|
||||
+ * GPIO52/53 (card enable for both cards) to control read/write to the shift register
|
||||
+ */
|
||||
+static void __init gumstix_count_cards(void)
|
||||
+{
|
||||
+ if ((gpio_request(GPIO_GUMSTIX_nPOE, "GPIO_GUMSTIX_nPOE") == 0) &&
|
||||
+ (gpio_direction_output(GPIO_GUMSTIX_nPOE, 1) == 0))
|
||||
+ gpio_export(GPIO_GUMSTIX_nPOE, 0);
|
||||
+ else
|
||||
+ printk(KERN_ERR "could not obtain gpio for GPIO_GUMSTIX_nPOE\n");
|
||||
+
|
||||
+ if ((gpio_request(GPIO_GUMSTIX_nPCE_1, "GPIO_GUMSTIX_nPCE_1") == 0) &&
|
||||
+ (gpio_direction_output(GPIO_GUMSTIX_nPCE_1, 1) == 0))
|
||||
+ gpio_export(GPIO_GUMSTIX_nPCE_1, 0);
|
||||
+ else
|
||||
+ printk(KERN_ERR "could not obtain gpio for GPIO_GUMSTIX_nPCE_1\n");
|
||||
+
|
||||
+ if ((gpio_request(GPIO_GUMSTIX_nPCE_2, "GPIO_GUMSTIX_nPCE_2") == 0) &&
|
||||
+ (gpio_direction_output(GPIO_GUMSTIX_nPCE_2, 1) == 0))
|
||||
+ gpio_export(GPIO_GUMSTIX_nPCE_2, 0);
|
||||
+ else
|
||||
+ printk(KERN_ERR "could not obtain gpio for GPIO_GUMSTIX_nPCE_2\n");
|
||||
+
|
||||
+ if ((gpio_request(GPIO_GUMSTIX_nCD_0, "GPIO_GUMSTIX_nCD_0") == 0) &&
|
||||
+ (gpio_direction_input(GPIO_GUMSTIX_nCD_0) == 0))
|
||||
+ gpio_export(GPIO_GUMSTIX_nCD_0, 0);
|
||||
+ else
|
||||
+ printk(KERN_ERR "could not obtain gpio for GPIO_GUMSTIX_nCD_0\n");
|
||||
+
|
||||
+ if (net_cf_vx_mode) {
|
||||
+ if ((gpio_request(GPIO_GUMSTIX_CF_OLD_RESET, "GPIO_GUMSTIX_CF_OLD_RESET") == 0) &&
|
||||
+ (gpio_direction_output(GPIO_GUMSTIX_CF_OLD_RESET, 1) == 0)) {
|
||||
+ gpio_export(GPIO_GUMSTIX_CF_OLD_RESET, 0);
|
||||
+ } else {
|
||||
+ printk(KERN_ERR "could not obtain gpio for GPIO_GUMSTIX_CF_OLD_RESET\n");
|
||||
+ }
|
||||
+ } else {
|
||||
+ if ((gpio_request(GPIO_GUMSTIX_CF_RESET, "GPIO_GUMSTIX_CF_RESET") == 0) &&
|
||||
+ (gpio_direction_output(GPIO_GUMSTIX_CF_RESET, 1) == 0)) {
|
||||
+ gpio_export(GPIO_GUMSTIX_CF_RESET, 0);
|
||||
+ } else {
|
||||
+ printk(KERN_ERR "could not obtain gpio for GPIO_GUMSTIX_CF_RESET\n");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ // Setup the shift register
|
||||
+ GPSR(GPIO_GUMSTIX_nPCE_1) = GPIO_bit(GPIO_GUMSTIX_nPCE_1);
|
||||
+ GPCR(GPIO_GUMSTIX_nPCE_2) = GPIO_bit(GPIO_GUMSTIX_nPCE_2);
|
||||
+
|
||||
+ // Tick the clock to program the shift register
|
||||
+ gumstix_pcmcia_cpld_clk();
|
||||
+
|
||||
+ // Now set shift register into read mode
|
||||
+ GPCR(GPIO_GUMSTIX_nPCE_1) = GPIO_bit(GPIO_GUMSTIX_nPCE_1);
|
||||
+ GPSR(GPIO_GUMSTIX_nPCE_2) = GPIO_bit(GPIO_GUMSTIX_nPCE_2);
|
||||
+
|
||||
+ // We can read the bits now -- 0xC2 means "Dual compact flash"
|
||||
+ if(gumstix_pcmcia_cpld_read_bits(8) != 0xC2)
|
||||
+ {
|
||||
+ // We do not have 2 CF slots
|
||||
+ pcmcia_cf_nr = 1;
|
||||
+ }
|
||||
+
|
||||
+ udelay(50);
|
||||
+
|
||||
+ if (net_cf_vx_mode) {
|
||||
+ gpio_set_value(GPIO_GUMSTIX_CF_OLD_RESET, 0);
|
||||
+ gpio_free(GPIO_GUMSTIX_CF_OLD_RESET);
|
||||
+ } else {
|
||||
+ gpio_set_value(GPIO_GUMSTIX_CF_RESET, 0);
|
||||
+ gpio_free(GPIO_GUMSTIX_CF_RESET);
|
||||
+ }
|
||||
+
|
||||
+ printk(KERN_INFO "found %d CF slots\n", pcmcia_cf_nr);
|
||||
+
|
||||
+ gpio_free(GPIO_GUMSTIX_nPCE_2);
|
||||
+ gpio_free(GPIO_GUMSTIX_nPCE_1);
|
||||
+ gpio_free(GPIO_GUMSTIX_nPOE);
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+#define SMC_IO_EXTENT 16
|
||||
+#define BANK_SELECT 14
|
||||
+
|
||||
+static void __init verdex_pcmcia_pin_config(void)
|
||||
+{
|
||||
+ struct resource *res;
|
||||
+ void *network_controller_memory;
|
||||
+ struct platform_device *pdev = &verdex_smsc911x_device;
|
||||
+
|
||||
+ printk(KERN_INFO "Initializing Gumstix verdex pcmcia\n");
|
||||
+
|
||||
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
+ if (res == NULL) {
|
||||
+ printk(KERN_ERR "no memory resource defined\n");
|
||||
+ goto err_done;
|
||||
+ }
|
||||
+
|
||||
+ res = request_mem_region(res->start, SMC_IO_EXTENT, "smc91x probe");
|
||||
+ if (res == NULL) {
|
||||
+ printk(KERN_ERR "failed to request memory resource\n");
|
||||
+ goto err_done;
|
||||
+ }
|
||||
+
|
||||
+ // We check for the possibility of SMSC91c111 (reg base offset 0x300 from CS1 base)
|
||||
+ network_controller_memory = ioremap(res->start + 0x300, SMC_IO_EXTENT);
|
||||
+ if (network_controller_memory == NULL) {
|
||||
+ printk(KERN_ERR "failed to ioremap() registers\n");
|
||||
+ goto err_free_mem;
|
||||
+ }
|
||||
+
|
||||
+ // Look for the special 91c111 value in the bank select register
|
||||
+ if((0xff00 & readw(network_controller_memory+BANK_SELECT)) == 0x3300) {
|
||||
+ printk(KERN_INFO "Detected netCF-vx board: pcmcia using older GPIO configuration\n");
|
||||
+ net_cf_vx_mode = 1;
|
||||
+ } else {
|
||||
+ printk(KERN_INFO "Not netCF-vx board: pcmcia using newer GPIO configuration\n");
|
||||
+ net_cf_vx_mode = 0;
|
||||
+ }
|
||||
+
|
||||
+ iounmap(network_controller_memory);
|
||||
+err_free_mem:
|
||||
+ release_mem_region(res->start, SMC_IO_EXTENT);
|
||||
+err_done:
|
||||
+
|
||||
+ gumstix_count_cards(); // this can update pcmcia_cf_nr
|
||||
+
|
||||
+ // If pcmcia_cf_nr is 1 then we do not have 2 CF slots
|
||||
+ // Note: logic sequence was altered from previous kernel revs
|
||||
+ // so that this works as intended now.
|
||||
+ if (pcmcia_cf_nr != 0)
|
||||
+ {
|
||||
+ pxa2xx_mfp_config(ARRAY_AND_SIZE(gpio_ntschg_0));
|
||||
+
|
||||
+ if(net_cf_vx_mode)
|
||||
+ pxa2xx_mfp_config(gpio_prdy_nbsy_old, 1);
|
||||
+ else
|
||||
+ pxa2xx_mfp_config(gpio_prdy_nbsy, 1);
|
||||
+
|
||||
+ } else {
|
||||
+ // Note: this reconfigures pin GPIO18 to be GPIO-IN so make
|
||||
+ // sure that this only gets done for the old dual slot board
|
||||
+ // since that pin is an active AF1 out-mode signal (RDY) on
|
||||
+ // newer boards and changing the pin mode on the newer boards
|
||||
+ // would result in memory corruption for the NIC (and hang during
|
||||
+ // PHY test).
|
||||
+ pxa2xx_mfp_config(ARRAY_AND_SIZE(gpio_ntschg_1));
|
||||
+ }
|
||||
+
|
||||
+ pxa2xx_mfp_config(ARRAY_AND_SIZE(gpio_nhw_init));
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+int __init gumstix_get_cf_cards(void)
|
||||
+{
|
||||
+ return pcmcia_cf_nr;
|
||||
+}
|
||||
+EXPORT_SYMBOL(gumstix_get_cf_cards);
|
||||
+
|
||||
+#ifdef CONFIG_MACH_GUMSTIX_VERDEX
|
||||
+int __init gumstix_check_if_netCF_vx(void)
|
||||
+{
|
||||
+ return net_cf_vx_mode;
|
||||
+}
|
||||
+EXPORT_SYMBOL(gumstix_check_if_netCF_vx);
|
||||
+#endif
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+#if defined(CONFIG_FB_PXA_SHARP_LQ043_PSP) || defined(CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C)
|
||||
+static void gumstix_lcd_backlight(int on_or_off)
|
||||
+{
|
||||
+ int err;
|
||||
+ err = gpio_request(17, "LCD BACKLIGHT");
|
||||
+ if (err) {
|
||||
+ //pr_warning("Gumstix Verdex: Failed to request LCD Backlight gpio\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if(on_or_off) {
|
||||
+ gpio_direction_input(17);
|
||||
+ } else {
|
||||
+ GPCR(17) = GPIO_bit(17);
|
||||
+ gpio_direction_output(17, 0);
|
||||
+ GPCR(17) = GPIO_bit(17);
|
||||
+ }
|
||||
+
|
||||
+ return;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#ifdef CONFIG_FB_PXA_ALPS_CDOLLAR
|
||||
+static struct pxafb_mode_info gumstix_fb_mode = {
|
||||
+ .pixclock = 300000,
|
||||
+ .xres = 240,
|
||||
+ .yres = 320,
|
||||
+ .bpp = 16,
|
||||
+ .hsync_len = 2,
|
||||
+ .left_margin = 1,
|
||||
+ .right_margin = 1,
|
||||
+ .vsync_len = 3,
|
||||
+ .upper_margin = 0,
|
||||
+ .lower_margin = 0,
|
||||
+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
|
||||
+};
|
||||
+
|
||||
+static struct pxafb_mach_info gumstix_fb_info = {
|
||||
+ .modes = &gumstix_fb_mode,
|
||||
+ .num_modes = 1,
|
||||
+ .lccr0 = LCCR0_Pas | LCCR0_Sngl | LCCR0_Color,
|
||||
+ .lccr3 = LCCR3_PixFlEdg,
|
||||
+};
|
||||
+#elif defined(CONFIG_FB_PXA_SHARP_LQ043_PSP)
|
||||
+static struct pxafb_mode_info gumstix_fb_mode = {
|
||||
+ .pixclock = 110000,
|
||||
+ .xres = 480,
|
||||
+ .yres = 272,
|
||||
+ .bpp = 16,
|
||||
+ .hsync_len = 41,
|
||||
+ .left_margin = 2,
|
||||
+ .right_margin = 2,
|
||||
+ .vsync_len = 10,
|
||||
+ .upper_margin = 2,
|
||||
+ .lower_margin = 2,
|
||||
+ .sync = 0, // Hsync and Vsync both active low
|
||||
+};
|
||||
+
|
||||
+static struct pxafb_mach_info gumstix_fb_info = {
|
||||
+ .modes = &gumstix_fb_mode,
|
||||
+ .num_modes = 1,
|
||||
+ .lccr0 = LCCR0_Act | LCCR0_Sngl | LCCR0_Color,
|
||||
+ .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg | (0 << 30),
|
||||
+ .pxafb_backlight_power = &gumstix_lcd_backlight,
|
||||
+};
|
||||
+#elif defined(CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C)
|
||||
+static struct pxafb_mode_info gumstix_fb_mode = {
|
||||
+ .pixclock = 108696, // 9.2MHz typical DOTCLK from datasheet
|
||||
+ .xres = 480,
|
||||
+ .hsync_len = 41, // HLW from datasheet: 41 typ
|
||||
+ .left_margin = 4, // HBP - HLW from datasheet: 45 - 41 = 4
|
||||
+ .right_margin = 8, // HFP from datasheet: 8 typ
|
||||
+ .yres = 272,
|
||||
+ .vsync_len = 10, // VLW from datasheet: 10 typ
|
||||
+ .upper_margin = 2, // VBP - VLW from datasheet: 12 - 10 = 2
|
||||
+ .lower_margin = 4, // VFP from datasheet: 4 typ
|
||||
+ .bpp = 16,
|
||||
+ .sync = 0, // Hsync and Vsync both active low
|
||||
+};
|
||||
+
|
||||
+static struct pxafb_mach_info gumstix_fb_info = {
|
||||
+ .modes = &gumstix_fb_mode,
|
||||
+ .num_modes = 1,
|
||||
+ .lccr0 = LCCR0_Act | LCCR0_Sngl | LCCR0_Color,
|
||||
+ .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg | (0 << 30),
|
||||
+ .pxafb_backlight_power = &gumstix_lcd_backlight,
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
+static struct platform_device verdex_audio_device = {
|
||||
+ .name = "pxa2xx-ac97",
|
||||
+ .id = -1,
|
||||
+};
|
||||
+
|
||||
+static struct platform_device *devices[] __initdata = {
|
||||
+ &gumstix_flash_device,
|
||||
+ &verdex_audio_device,
|
||||
+};
|
||||
+
|
||||
+/* PXA27x OHCI controller setup */
|
||||
+#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
|
||||
+static int ohci_verdex_init(struct device *dev)
|
||||
+{
|
||||
+ // Turn on port 2 in host mode
|
||||
+ UP2OCR = UP2OCR_HXS | UP2OCR_HXOE | UP2OCR_DPPDE | UP2OCR_DMPDE;
|
||||
+
|
||||
+ /* See drivers/usb/host/ohci-pxa27x.c for further details but
|
||||
+ ENABLE_PORT_ALL flag is equivalent to using this old sequence:
|
||||
+ UHCHR = (UHCHR) &
|
||||
+ ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE);
|
||||
+ */
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct pxaohci_platform_data verdex_ohci_platform_data = {
|
||||
+ .port_mode = PMM_PERPORT_MODE,
|
||||
+ .flags = ENABLE_PORT_ALL,
|
||||
+ .init = ohci_verdex_init,
|
||||
+};
|
||||
+
|
||||
+static void __init verdex_ohci_init(void)
|
||||
+{
|
||||
+ pxa_set_ohci_info(&verdex_ohci_platform_data);
|
||||
+}
|
||||
+#else
|
||||
+static void __init verdex_ohci_init(void) {
|
||||
+ printk(KERN_INFO "Gumstix verdex host usb ohci is disabled\n");
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
|
||||
+static struct pxamci_platform_data verdex_mci_platform_data;
|
||||
+
|
||||
+static int verdex_mci_init(struct device *dev, irq_handler_t detect_int,
|
||||
+ void *data)
|
||||
+{
|
||||
+ /* GPIO setup for MMC on the 120-pin connector is done in verdex_init.
|
||||
+ * There is no card detect on a uSD connector so no interrupt to
|
||||
+ * register. There is no WP detect GPIO line either.
|
||||
+ */
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct pxamci_platform_data verdex_mci_platform_data = {
|
||||
+ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
|
||||
+ .init = verdex_mci_init,
|
||||
+ .gpio_card_detect = -1,
|
||||
+ .gpio_card_ro = -1,
|
||||
+ .gpio_power = -1,
|
||||
+};
|
||||
+
|
||||
+static void __init verdex_mmc_init(void)
|
||||
+{
|
||||
+ pxa_set_mci_info(&verdex_mci_platform_data);
|
||||
+}
|
||||
+#else
|
||||
+static void __init verdex_mmc_init(void)
|
||||
+{
|
||||
+ printk(KERN_INFO "Gumstix verdex mmc disabled\n");
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#if defined(CONFIG_USB_GADGET_PXA2XX) || defined(CONFIG_USB_GADGET_PXA2XX_MODULE)
|
||||
+static struct pxa2xx_udc_mach_info verdex_udc_info __initdata = {
|
||||
+ .gpio_vbus = GPIO35,
|
||||
+ .gpio_pullup = GPIO41,
|
||||
+};
|
||||
+
|
||||
+static void __init verdex_udc_init(void)
|
||||
+{
|
||||
+ pxa_set_udc_info(&verdex_udc_info);
|
||||
+}
|
||||
+#else
|
||||
+static void __init verdex_udc_init(void)
|
||||
+{
|
||||
+ printk(KERN_INFO "Gumstix verdex udc is disabled\n");
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
|
||||
+
|
||||
+#if defined(CONFIG_TOUCHSCREEN_TSC2003) || defined(CONFIG_TOUCHSCREEN_TSC2003_MODULE)
|
||||
+
|
||||
+#define VERDEX_GPIO_PENDOWN 16
|
||||
+
|
||||
+static int tsc2003_init_platform_hw(void)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void tsc2003_exit_platform_hw(void)
|
||||
+{
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+static void tsc2003_clear_penirq(void)
|
||||
+{
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+static int tsc2003_get_pendown_state(void)
|
||||
+{
|
||||
+ return !gpio_get_value(VERDEX_GPIO_PENDOWN);
|
||||
+}
|
||||
+
|
||||
+static struct tsc2007_platform_data tsc2003_config = {
|
||||
+ .model = 2003,
|
||||
+ .x_plate_ohms = 100,
|
||||
+ .get_pendown_state = tsc2003_get_pendown_state,
|
||||
+ .clear_penirq = tsc2003_clear_penirq,
|
||||
+ .init_platform_hw = tsc2003_init_platform_hw,
|
||||
+ .exit_platform_hw = tsc2003_exit_platform_hw,
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
+static struct i2c_board_info __initdata verdex_i2c_board_info[] = {
|
||||
+#if defined(CONFIG_RTC_DRV_DS1307) || defined(CONFIG_RTC_DRV_DS1307_MODULE)
|
||||
+ {
|
||||
+ I2C_BOARD_INFO("rtc-ds1307", 0x68),
|
||||
+ },
|
||||
+#endif
|
||||
+#if defined(CONFIG_TOUCHSCREEN_TSC2003) || defined(CONFIG_TOUCHSCREEN_TSC2003_MODULE)
|
||||
+ {
|
||||
+ I2C_BOARD_INFO("tsc2003", 0x48),
|
||||
+ .platform_data = &tsc2003_config,
|
||||
+ .irq = IRQ_GPIO(VERDEX_GPIO_PENDOWN),
|
||||
+ },
|
||||
+#endif
|
||||
+};
|
||||
+
|
||||
+static struct i2c_pxa_platform_data verdex_i2c_pwr_info = {
|
||||
+ .fast_mode = 1,
|
||||
+};
|
||||
+
|
||||
+static struct i2c_pxa_platform_data verdex_i2c_info = {
|
||||
+ .fast_mode = 1,
|
||||
+};
|
||||
+
|
||||
+static void __init verdex_i2c_init(void)
|
||||
+{
|
||||
+ printk(KERN_INFO "Initializing Gumstix verdex i2c\n");
|
||||
+
|
||||
+#if defined(CONFIG_TOUCHSCREEN_TSC2003) || defined(CONFIG_TOUCHSCREEN_TSC2003_MODULE)
|
||||
+ if ((gpio_request(VERDEX_GPIO_PENDOWN, "TSC2003_PENDOWN") == 0) &&
|
||||
+ (gpio_direction_input(VERDEX_GPIO_PENDOWN) == 0)) {
|
||||
+ gpio_export(VERDEX_GPIO_PENDOWN, 0);
|
||||
+ } else {
|
||||
+ printk(KERN_ERR "could not obtain gpio for TSC2003_PENDOWN\n");
|
||||
+ return;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ i2c_register_board_info(0, verdex_i2c_board_info,
|
||||
+ ARRAY_SIZE(verdex_i2c_board_info));
|
||||
+ pxa_set_i2c_info(&verdex_i2c_info);
|
||||
+ pxa27x_set_i2c_power_info(&verdex_i2c_pwr_info);
|
||||
+}
|
||||
+#else
|
||||
+static inline void verdex_i2c_init(void) {}
|
||||
+#endif
|
||||
+
|
||||
+#if defined(CONFIG_PCMCIA_PXA2XX) || defined(CONFIG_PCMCIA_PXA2XX_MODULE)
|
||||
+static void __init verdex_pcmcia_init(void)
|
||||
+{
|
||||
+ verdex_pcmcia_pin_config();
|
||||
+}
|
||||
+#else
|
||||
+static void __init verdex_pcmcia_init(void) {
|
||||
+ printk(KERN_INFO "Gumstix verdex pcmcia is disabled\n");
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+static void __init verdex_init(void)
|
||||
+{
|
||||
+ pxa2xx_mfp_config(ARRAY_AND_SIZE(verdex_pin_config));
|
||||
+
|
||||
+#ifdef CONFIG_FB_PXA_SHARP_LQ043_PSP
|
||||
+ /* DISP must be always high while screen is on */
|
||||
+ gpio_direction_output(GPIO77, 0);
|
||||
+ GPSR(GPIO77) = GPIO_bit(GPIO77);
|
||||
+#endif
|
||||
+ verdex_udc_init();
|
||||
+ verdex_mmc_init();
|
||||
+ verdex_ohci_init();
|
||||
+ verdex_i2c_init();
|
||||
+ verdex_init_smsc911x();
|
||||
+ verdex_pcmcia_init();
|
||||
+
|
||||
+#if defined(CONFIG_FB_PXA_ALPS_CDOLLAR) || defined(CONFIG_FB_PXA_SHARP_LQ043_PSP) || defined(CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C)
|
||||
+ printk(KERN_INFO "Initializing Gumstix verdex FB info\n");
|
||||
+ set_pxa_fb_info(&gumstix_fb_info);
|
||||
+#endif
|
||||
+ printk(KERN_INFO "Initializing Gumstix platform_add_devices\n");
|
||||
+ (void) platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
+}
|
||||
+
|
||||
+MACHINE_START(GUMSTIX, "Gumstix verdex")
|
||||
+ .atag_offset = 0x100, /* match u-boot bi_boot_params */
|
||||
+ .map_io = pxa27x_map_io,
|
||||
+ .init_irq = pxa27x_init_irq,
|
||||
+ .handle_irq = pxa27x_handle_irq,
|
||||
+ .timer = &pxa_timer,
|
||||
+ .init_machine = verdex_init,
|
||||
+ .restart = pxa_restart,
|
||||
+MACHINE_END
|
||||
--- a/arch/arm/mach-pxa/include/mach/mfp-pxa27x.h
|
||||
+++ b/arch/arm/mach-pxa/include/mach/mfp-pxa27x.h
|
||||
@@ -109,6 +109,7 @@
|
||||
#define GPIO54_nPCE_2 MFP_CFG_OUT(GPIO54, AF2, DRIVE_HIGH)
|
||||
#define GPIO78_nPCE_2 MFP_CFG_OUT(GPIO78, AF1, DRIVE_HIGH)
|
||||
#define GPIO87_nPCE_2 MFP_CFG_IN(GPIO87, AF1)
|
||||
+#define GPIO105_nPCE_2 MFP_CFG_OUT(GPIO105, AF1, DRIVE_HIGH)
|
||||
#define GPIO55_nPREG MFP_CFG_OUT(GPIO55, AF2, DRIVE_HIGH)
|
||||
#define GPIO50_nPIOR MFP_CFG_OUT(GPIO50, AF2, DRIVE_HIGH)
|
||||
#define GPIO51_nPIOW MFP_CFG_OUT(GPIO51, AF2, DRIVE_HIGH)
|
|
@ -0,0 +1,52 @@
|
|||
From eb92a178eceae4e5d18bbb442b8e44cb88457d60 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Kortje <jpktech@rogers.com>
|
||||
Date: Wed, 28 Oct 2009 21:25:57 -0400
|
||||
Subject: [PATCH] [ARM] Gumstix Verdex LCD config options
|
||||
|
||||
add options to Kconfig for Verdex LCD support
|
||||
|
||||
Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
|
||||
---
|
||||
drivers/video/Kconfig | 31 +++++++++++++++++++++++++++++++
|
||||
1 files changed, 31 insertions(+), 0 deletions(-)
|
||||
|
||||
--- a/drivers/video/Kconfig
|
||||
+++ b/drivers/video/Kconfig
|
||||
@@ -1892,6 +1892,37 @@ config FB_PXA
|
||||
say M here and read <file:Documentation/kbuild/modules.txt>.
|
||||
|
||||
If unsure, say N.
|
||||
+choice
|
||||
+ depends on FB_PXA
|
||||
+ prompt "LCD Panel"
|
||||
+ default FB_PXA_SAMSUNG_LTE430WQ_F0C
|
||||
+
|
||||
+config FB_PXA_ALPS_CDOLLAR
|
||||
+ boolean "Chris Dollar's ALPS screen"
|
||||
+ ---help---
|
||||
+ Enable definitions (over-ridable on the kernel command line if
|
||||
+ "PXA LCD command line parameters" is also selected) for an ALPS
|
||||
+ screen which Chris Dollar uses
|
||||
+
|
||||
+config FB_PXA_SHARP_LQ043_PSP
|
||||
+ boolean "SHARP LQ043... series"
|
||||
+ ---help---
|
||||
+ Enable definitions (over-ridable on the kernel command line if
|
||||
+ "PXA LCD command line parameters" is also selected) for a SHARP
|
||||
+ LQ043... screen, such as the one used by the PSP. These screens are
|
||||
+ the ones normally sold by gumstix with its boards.
|
||||
+
|
||||
+config FB_PXA_SAMSUNG_LTE430WQ_F0C
|
||||
+ boolean "Samsung LTE430WQ-F0C (standard gumstix LCD)"
|
||||
+ ---help---
|
||||
+ Enable definitions for a Samsung LTE430WQ-F0C LCD panel, such as the ones resold
|
||||
+ by gumstix for use with their "LCD-Ready" boards.
|
||||
+
|
||||
+config FB_PXA_NONEOFTHEABOVE
|
||||
+ boolean "None of the above"
|
||||
+
|
||||
+endchoice
|
||||
+
|
||||
|
||||
config FB_PXA_OVERLAY
|
||||
bool "Support PXA27x/PXA3xx Overlay(s) as framebuffer"
|
|
@ -0,0 +1,209 @@
|
|||
From adb6abbe4e3bc17c20cdc70e4a4357f1633d4970 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Kortje <jpktech@rogers.com>
|
||||
Date: Wed, 28 Oct 2009 21:49:11 -0400
|
||||
Subject: [PATCH] [ARM] gumstix.h: Verdex Pro support
|
||||
|
||||
Added a bunch of ifdefs to support both original gumstix boards
|
||||
as well as the Verdex Pro in gumstix.h
|
||||
|
||||
Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
|
||||
---
|
||||
arch/arm/mach-pxa/include/mach/gumstix.h | 160 ++++++++++++++++++++++++------
|
||||
1 files changed, 130 insertions(+), 30 deletions(-)
|
||||
|
||||
--- a/arch/arm/mach-pxa/include/mach/gumstix.h
|
||||
+++ b/arch/arm/mach-pxa/include/mach/gumstix.h
|
||||
@@ -6,6 +6,9 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
+#if !defined(__ASM_ARCH_MFP_PXA27X_H) && !defined(__ASM_ARCH_MFP_PXA25X_H)
|
||||
+ #error You need to include either mfp-pxa27x.h or mfp-pxa25x.h
|
||||
+#endif
|
||||
|
||||
/* BTRESET - Reset line to Bluetooth module, active low signal. */
|
||||
#define GPIO_GUMSTIX_BTRESET 7
|
||||
@@ -20,9 +23,18 @@ this moves to GPIO17 and GPIO37. */
|
||||
/* GPIOx - Connects to USB D+ and used as a pull-up after GPIOn
|
||||
has detected a cable insertion; driven low otherwise. */
|
||||
|
||||
+#ifndef CONFIG_MACH_GUMSTIX_VERDEX
|
||||
+
|
||||
#define GPIO_GUMSTIX_USB_GPIOn 35
|
||||
#define GPIO_GUMSTIX_USB_GPIOx 41
|
||||
|
||||
+#else
|
||||
+
|
||||
+#define GPIO_GUMSTIX_USB_GPIOn 100
|
||||
+#define GPIO_GUMSTIX_USB_GPIOx 27
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
/* usb state change */
|
||||
#define GUMSTIX_USB_INTR_IRQ PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_USB_GPIOn)
|
||||
|
||||
@@ -42,48 +54,135 @@ has detected a cable insertion; driven l
|
||||
* ETH_RST provides a hardware reset line to the ethernet chip
|
||||
* ETH is the IRQ line in from the ethernet chip to the PXA
|
||||
*/
|
||||
+#ifndef CONFIG_MACH_GUMSTIX_VERDEX
|
||||
#define GPIO_GUMSTIX_ETH0_RST 80
|
||||
-#define GPIO_GUMSTIX_ETH0_RST_MD (GPIO_GUMSTIX_ETH0_RST | GPIO_OUT)
|
||||
+#define GPIO_GUMSTIX_ETH0 36
|
||||
+#else
|
||||
+#define GPIO_GUMSTIX_ETH0_RST 107
|
||||
+#define GPIO_GUMSTIX_ETH0 99
|
||||
+#endif
|
||||
#define GPIO_GUMSTIX_ETH1_RST 52
|
||||
-#define GPIO_GUMSTIX_ETH1_RST_MD (GPIO_GUMSTIX_ETH1_RST | GPIO_OUT)
|
||||
+#define GPIO_GUMSTIX_ETH1 27
|
||||
|
||||
-#define GPIO_GUMSTIX_ETH0 36
|
||||
+#define GPIO_GUMSTIX_ETH0_RST_MD (GPIO_GUMSTIX_ETH0_RST | GPIO_OUT)
|
||||
+#define GPIO_GUMSTIX_ETH1_RST_MD (GPIO_GUMSTIX_ETH1_RST | GPIO_OUT)
|
||||
#define GPIO_GUMSTIX_ETH0_MD (GPIO_GUMSTIX_ETH0 | GPIO_IN)
|
||||
-#define GUMSTIX_ETH0_IRQ PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_ETH0)
|
||||
-#define GPIO_GUMSTIX_ETH1 27
|
||||
#define GPIO_GUMSTIX_ETH1_MD (GPIO_GUMSTIX_ETH1 | GPIO_IN)
|
||||
-#define GUMSTIX_ETH1_IRQ PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_ETH1)
|
||||
|
||||
+#define GUMSTIX_ETH0_IRQ PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_ETH0)
|
||||
+#define GUMSTIX_ETH1_IRQ PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_ETH1)
|
||||
|
||||
-/* CF reset line */
|
||||
-#define GPIO8_RESET 8
|
||||
-
|
||||
-/* CF slot 0 */
|
||||
-#define GPIO4_nBVD1 4
|
||||
-#define GPIO4_nSTSCHG GPIO4_nBVD1
|
||||
-#define GPIO11_nCD 11
|
||||
-#define GPIO26_PRDY_nBSY 26
|
||||
-#define GUMSTIX_S0_nSTSCHG_IRQ PXA_GPIO_TO_IRQ(GPIO4_nSTSCHG)
|
||||
-#define GUMSTIX_S0_nCD_IRQ PXA_GPIO_TO_IRQ(GPIO11_nCD)
|
||||
-#define GUMSTIX_S0_PRDY_nBSY_IRQ PXA_GPIO_TO_IRQ(GPIO26_PRDY_nBSY)
|
||||
+ /* CF reset line */
|
||||
+#define GPIO8_CF_RESET 8
|
||||
+#define GPIO97_CF_RESET 97
|
||||
+#define GPIO110_CF_RESET 110
|
||||
+
|
||||
+#ifndef CONFIG_MACH_GUMSTIX_VERDEX
|
||||
+#define GPIO_GUMSTIX_CF_RESET GPIO8_CF_RESET
|
||||
+#else
|
||||
+#define GPIO_GUMSTIX_CF_RESET GPIO97_CF_RESET
|
||||
+#endif
|
||||
+
|
||||
+#define GPIO_GUMSTIX_CF_OLD_RESET GPIO110_CF_RESET
|
||||
+
|
||||
+/* CF signals shared by both sockets */
|
||||
+#define GPIO_GUMSTIX_nPOE 48
|
||||
+#define GPIO_GUMSTIX_nPWE 49
|
||||
+#define GPIO_GUMSTIX_nPIOR 50
|
||||
+#define GPIO_GUMSTIX_nPIOW 51
|
||||
+
|
||||
+#ifndef CONFIG_MACH_GUMSTIX_VERDEX
|
||||
+#define GPIO_GUMSTIX_nPCE_1 52
|
||||
+#define GPIO_GUMSTIX_nPCE_2 53
|
||||
+#define GPIO_GUMSTIX_pSKTSEL 54
|
||||
+#else
|
||||
+#define GPIO_GUMSTIX_nPCE_1 102
|
||||
+#define GPIO_GUMSTIX_nPCE_2 105
|
||||
+#define GPIO_GUMSTIX_pSKTSEL 79
|
||||
+#endif
|
||||
+
|
||||
+#define GPIO_GUMSTIX_nPREG 55
|
||||
+#define GPIO_GUMSTIX_nPWAIT 56
|
||||
+#define GPIO_GUMSTIX_nIOIS16 57
|
||||
+
|
||||
+/* Pin mode definitions correspond to mfp-pxa2[57]x.h */
|
||||
+#define GPIO_GUMSTIX_nPOE_MD GPIO48_nPOE
|
||||
+#define GPIO_GUMSTIX_nPWE_MD GPIO49_nPWE
|
||||
+#define GPIO_GUMSTIX_nPIOR_MD GPIO50_nPIOR
|
||||
+#define GPIO_GUMSTIX_nPIOW_MD GPIO51_nPIOW
|
||||
+
|
||||
+#ifndef CONFIG_MACH_GUMSTIX_VERDEX
|
||||
+#define GPIO_GUMSTIX_nPCE_1_MD GPIO52_nPCE_1
|
||||
+#define GPIO_GUMSTIX_nPCE_2_MD GPIO53_nPCE_2
|
||||
+#define GPIO_GUMSTIX_pSKTSEL_MD GPIO54_pSKTSEL
|
||||
+#else
|
||||
+#define GPIO_GUMSTIX_nPCE_1_MD GPIO102_nPCE_1
|
||||
+#define GPIO_GUMSTIX_nPCE_2_MD GPIO105_nPCE_2
|
||||
+#define GPIO_GUMSTIX_pSKTSEL_MD GPIO79_pSKTSEL
|
||||
+#endif
|
||||
+
|
||||
+#define GPIO_GUMSTIX_nPREG_MD GPIO55_nPREG
|
||||
+#define GPIO_GUMSTIX_nPWAIT_MD GPIO56_nPWAIT
|
||||
+#define GPIO_GUMSTIX_nIOIS16_MD GPIO57_nIOIS16
|
||||
+
|
||||
+ /* CF slot 0 */
|
||||
+#define GPIO4_nBVD1_0 4
|
||||
+#define GPIO4_nSTSCHG_0 GPIO4_nBVD1_0
|
||||
+#define GPIO11_nCD_0 11
|
||||
+#define GPIO26_PRDY_nBSY_0 26
|
||||
+
|
||||
+#define GPIO111_nBVD1_0 111
|
||||
+#define GPIO111_nSTSCHG_0 GPIO111_nBVD1_0
|
||||
+#define GPIO104_nCD_0 104
|
||||
+#define GPIO96_PRDY_nBSY_0 96
|
||||
+#define GPIO109_PRDY_nBSY_0 109
|
||||
+
|
||||
+#ifndef CONFIG_MACH_GUMSTIX_VERDEX
|
||||
+#define GPIO_GUMSTIX_nBVD1_0 GPIO4_nBVD1_0
|
||||
+#define GPIO_GUMSTIX_nSTSCHG_0 GPIO4_nSTSCHG_0
|
||||
+#define GPIO_GUMSTIX_nCD_0 GPIO11_nCD_0
|
||||
+#define GPIO_GUMSTIX_PRDY_nBSY_0 GPIO26_PRDY_nBSY_0
|
||||
+#else
|
||||
+#define GPIO_GUMSTIX_nBVD1_0 GPIO111_nBVD1_0
|
||||
+#define GPIO_GUMSTIX_nSTSCHG_0 GPIO111_nSTSCHG_0
|
||||
+#define GPIO_GUMSTIX_nCD_0 GPIO104_nCD_0
|
||||
+#define GPIO_GUMSTIX_PRDY_nBSY_0 GPIO96_PRDY_nBSY_0
|
||||
+#endif
|
||||
+
|
||||
+#define GPIO_GUMSTIX_PRDY_nBSY_0_OLD GPIO109_PRDY_nBSY_0
|
||||
+
|
||||
+#define GUMSTIX_S0_nSTSCHG_IRQ PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_nSTSCHG_0)
|
||||
+#define GUMSTIX_S0_nCD_IRQ PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_nCD_0)
|
||||
+#define GUMSTIX_S0_PRDY_nBSY_IRQ PXA_GPIO_TO_IRQ(GPIO_GUMSTIX_PRDY_nBSY_0)
|
||||
|
||||
/* CF slot 1 */
|
||||
-#define GPIO18_nBVD1 18
|
||||
-#define GPIO18_nSTSCHG GPIO18_nBVD1
|
||||
-#define GPIO36_nCD 36
|
||||
-#define GPIO27_PRDY_nBSY 27
|
||||
+#define GPIO18_nBVD1_1 18
|
||||
+#define GPIO18_nSTSCHG_1 GPIO18_nBVD1_1
|
||||
+#define GPIO36_nCD_1 36
|
||||
+#define GPIO27_PRDY_nBSY_1 27
|
||||
+
|
||||
+#define GPIO_GUMSTIX_nBVD1_1 GPIO18_nBVD1_1
|
||||
+#define GPIO_GUMSTIX_nSTSCHG_1 GPIO18_nSTSCHG_1
|
||||
+#define GPIO_GUMSTIX_nCD_1 GPIO36_nCD_1
|
||||
+#define GPIO_GUMSTIX_PRDY_nBSY_1 GPIO27_PRDY_nBSY_1
|
||||
+
|
||||
#define GUMSTIX_S1_nSTSCHG_IRQ PXA_GPIO_TO_IRQ(GPIO18_nSTSCHG)
|
||||
#define GUMSTIX_S1_nCD_IRQ PXA_GPIO_TO_IRQ(GPIO36_nCD)
|
||||
#define GUMSTIX_S1_PRDY_nBSY_IRQ PXA_GPIO_TO_IRQ(GPIO27_PRDY_nBSY)
|
||||
|
||||
-/* CF GPIO line modes */
|
||||
-#define GPIO4_nSTSCHG_MD (GPIO4_nSTSCHG | GPIO_IN)
|
||||
-#define GPIO8_RESET_MD (GPIO8_RESET | GPIO_OUT)
|
||||
-#define GPIO11_nCD_MD (GPIO11_nCD | GPIO_IN)
|
||||
-#define GPIO18_nSTSCHG_MD (GPIO18_nSTSCHG | GPIO_IN)
|
||||
-#define GPIO26_PRDY_nBSY_MD (GPIO26_PRDY_nBSY | GPIO_IN)
|
||||
-#define GPIO27_PRDY_nBSY_MD (GPIO27_PRDY_nBSY | GPIO_IN)
|
||||
-#define GPIO36_nCD_MD (GPIO36_nCD | GPIO_IN)
|
||||
+/* CF GPIO line modes - correspond to mfp-pxa2[57]x.h */
|
||||
+#define GPIO_GUMSTIX_CF_RESET_MD (GPIO_GUMSTIX_CF_RESET | GPIO_OUT)
|
||||
+#define GPIO_GUMSTIX_CF_OLD_RESET_MD (GPIO_GUMSTIX_CF_OLD_RESET | GPIO_OUT)
|
||||
+
|
||||
+#define GPIO_GUMSTIX_nSTSCHG_0_MD GPIO111_GPIO
|
||||
+#define GPIO_GUMSTIX_nCD_0_MD GPIO104_GPIO
|
||||
+
|
||||
+#define GPIO_GUMSTIX_PRDY_nBSY_0_MD GPIO96_GPIO
|
||||
+#define GPIO_GUMSTIX_PRDY_nBSY_0_OLD_MD GPIO109_GPIO
|
||||
+
|
||||
+#define GPIO_GUMSTIX_nSTSCHG_1_MD GPIO18_GPIO
|
||||
+#define GPIO_GUMSTIX_nCD_1_MD GPIO36_GPIO
|
||||
+#define GPIO_GUMSTIX_PRDY_nBSY_1_MD GPIO27_GPIO
|
||||
|
||||
/* for expansion boards that can't be programatically detected */
|
||||
extern int am200_init(void);
|
|
@ -0,0 +1,100 @@
|
|||
From 7645a459feb02f7aae4c3a5724b7800495d1b659 Mon Sep 17 00:00:00 2001
|
||||
From: Bobby Powers <bobbypowers@gmail.com>
|
||||
Date: Wed, 28 Oct 2009 22:41:31 -0400
|
||||
Subject: [PATCH] [ARM] smsc911x: Verdex Pro support
|
||||
|
||||
Basically Joseph Kortje's patch, cleaned up to apply to Linus's
|
||||
tree. Some of the smsc911x.c had been applied already
|
||||
|
||||
Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
|
||||
---
|
||||
drivers/net/smsc911x.c | 50 +++++++++++++++++++++++++++++++++++++--------
|
||||
drivers/net/smsc911x.h | 2 +-
|
||||
include/linux/smsc911x.h | 11 ++++++++++
|
||||
3 files changed, 53 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/smsc/smsc911x.c
|
||||
+++ b/drivers/net/ethernet/smsc/smsc911x.c
|
||||
@@ -1485,7 +1485,7 @@ static int smsc911x_open(struct net_devi
|
||||
SMSC_WARN(pdata, ifup,
|
||||
"Timed out waiting for EEPROM busy bit to clear");
|
||||
|
||||
- smsc911x_reg_write(pdata, GPIO_CFG, 0x70070000);
|
||||
+ smsc911x_reg_write(pdata, GPIO_CFG, GPIO_CFG_LED1_EN_ | GPIO_CFG_LED2_EN_ | (1 << 20));
|
||||
|
||||
/* The soft reset above cleared the device's MAC address,
|
||||
* restore it from local copy (set in probe) */
|
||||
@@ -1497,8 +1497,8 @@ static int smsc911x_open(struct net_devi
|
||||
smsc911x_reg_write(pdata, INT_EN, 0);
|
||||
smsc911x_reg_write(pdata, INT_STS, 0xFFFFFFFF);
|
||||
|
||||
- /* Set interrupt deassertion to 100uS */
|
||||
- intcfg = ((10 << 24) | INT_CFG_IRQ_EN_);
|
||||
+ /* Set interrupt deassertion to 22*10uS */
|
||||
+ intcfg = ((22 << 24) | INT_CFG_IRQ_EN_);
|
||||
|
||||
if (pdata->config.irq_polarity) {
|
||||
SMSC_TRACE(pdata, ifup, "irq polarity: active high");
|
||||
@@ -1524,7 +1524,7 @@ static int smsc911x_open(struct net_devi
|
||||
temp |= INT_EN_SW_INT_EN_;
|
||||
smsc911x_reg_write(pdata, INT_EN, temp);
|
||||
|
||||
- timeout = 1000;
|
||||
+ timeout = 2000;
|
||||
while (timeout--) {
|
||||
if (pdata->software_irq_signal)
|
||||
break;
|
||||
@@ -2332,6 +2332,38 @@ static inline int smsc911x_probe_config_
|
||||
}
|
||||
#endif /* CONFIG_OF */
|
||||
|
||||
+static inline unsigned int is_gumstix_oui(u8 *addr)
|
||||
+{
|
||||
+ return (addr[0] == 0x00 && addr[1] == 0x15 && addr[2] == 0xC9);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * gen_serial_ether_addr - Generate software assigned Ethernet address
|
||||
+ * based on the system_serial number
|
||||
+ * @addr: Pointer to a six-byte array containing the Ethernet address
|
||||
+ *
|
||||
+ * Generate an Ethernet address (MAC) that is not multicast
|
||||
+ * and has the local assigned bit set, keyed on the system_serial
|
||||
+ */
|
||||
+static inline void gen_serial_ether_addr(u8 *addr)
|
||||
+{
|
||||
+ static u8 ether_serial_digit = 0;
|
||||
+ addr [0] = system_serial_high >> 8;
|
||||
+ addr [1] = system_serial_high;
|
||||
+ addr [2] = system_serial_low >> 24;
|
||||
+ addr [3] = system_serial_low >> 16;
|
||||
+ addr [4] = system_serial_low >> 8;
|
||||
+ addr [5] = (system_serial_low & 0xc0) | /* top bits are from system serial */
|
||||
+ (1 << 4) | /* 2 bits identify interface type 1=ether, 2=usb, 3&4 undef */
|
||||
+ ((ether_serial_digit++) & 0x0f); /* 15 possible interfaces of each type */
|
||||
+
|
||||
+ if(!is_gumstix_oui(addr))
|
||||
+ {
|
||||
+ addr [0] &= 0xfe; /* clear multicast bit */
|
||||
+ addr [0] |= 0x02; /* set local assignment bit (IEEE802) */
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static int __devinit smsc911x_drv_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
@@ -2481,11 +2513,11 @@ static int __devinit smsc911x_drv_probe(
|
||||
SMSC_TRACE(pdata, probe,
|
||||
"Mac Address is read from LAN911x EEPROM");
|
||||
} else {
|
||||
- /* eeprom values are invalid, generate random MAC */
|
||||
- random_ether_addr(dev->dev_addr);
|
||||
+ /* eeprom values are invalid, generate MAC from serial number */
|
||||
+ gen_serial_ether_addr(dev->dev_addr);
|
||||
smsc911x_set_hw_mac_address(pdata, dev->dev_addr);
|
||||
SMSC_TRACE(pdata, probe,
|
||||
- "MAC Address is set to random_ether_addr");
|
||||
+ "MAC Address is derived from system serial number");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,235 @@
|
|||
From 76a102bd5c9d792db19c6c72eafdecea0311a0c9 Mon Sep 17 00:00:00 2001
|
||||
From: Craig Hughes <craig@gumstix.com>
|
||||
Date: Fri, 30 Oct 2009 14:16:27 -0400
|
||||
Subject: [PATCH] [ARM] pxa: Gumstix Verdex PCMCIA support
|
||||
|
||||
Needed for the Libertas CS wireless device.
|
||||
|
||||
Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
|
||||
---
|
||||
drivers/pcmcia/Kconfig | 3 +-
|
||||
drivers/pcmcia/Makefile | 3 +
|
||||
drivers/pcmcia/pxa2xx_gumstix.c | 194 +++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 199 insertions(+), 1 deletions(-)
|
||||
create mode 100644 drivers/pcmcia/pxa2xx_gumstix.c
|
||||
|
||||
--- a/drivers/pcmcia/Kconfig
|
||||
+++ b/drivers/pcmcia/Kconfig
|
||||
@@ -212,7 +212,7 @@ config PCMCIA_PXA2XX
|
||||
|| MACH_ARMCORE || ARCH_PXA_PALM || TRIZEPS_PCMCIA \
|
||||
|| ARCOM_PCMCIA || ARCH_PXA_ESERIES || MACH_STARGATE2 \
|
||||
|| MACH_VPAC270 || MACH_BALLOON3 || MACH_COLIBRI \
|
||||
- || MACH_COLIBRI320)
|
||||
+ || MACH_COLIBRI320 || ARCH_GUMSTIX)
|
||||
select PCMCIA_SOC_COMMON
|
||||
help
|
||||
Say Y here to include support for the PXA2xx PCMCIA controller
|
||||
--- a/drivers/pcmcia/Makefile
|
||||
+++ b/drivers/pcmcia/Makefile
|
||||
@@ -70,6 +70,9 @@ pxa2xx-obj-$(CONFIG_MACH_BALLOON3) += p
|
||||
pxa2xx-obj-$(CONFIG_MACH_COLIBRI) += pxa2xx_colibri.o
|
||||
pxa2xx-obj-$(CONFIG_MACH_COLIBRI320) += pxa2xx_colibri.o
|
||||
|
||||
+pxa2xx-obj-$(CONFIG_MACH_GUMSTIX_VERDEX) += pxa2xx_cs.o
|
||||
+pxa2xx_cs-objs := pxa2xx_gumstix.o
|
||||
+
|
||||
obj-$(CONFIG_PCMCIA_PXA2XX) += pxa2xx_base.o $(pxa2xx-obj-y)
|
||||
|
||||
obj-$(CONFIG_PCMCIA_XXS1500) += xxs1500_ss.o
|
||||
--- /dev/null
|
||||
+++ b/drivers/pcmcia/pxa2xx_gumstix.c
|
||||
@@ -0,0 +1,194 @@
|
||||
+/*
|
||||
+ * linux/drivers/pcmcia/pxa2xx_gumstix.c
|
||||
+ *
|
||||
+ * Gumstix PCMCIA specific routines. Based on Mainstone
|
||||
+ *
|
||||
+ * Copyright 2004, Craig Hughes <craig@gumstix.com>
|
||||
+ *
|
||||
+ * 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/module.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/errno.h>
|
||||
+#include <linux/interrupt.h>
|
||||
+#include <linux/irq.h>
|
||||
+#include <linux/gpio.h>
|
||||
+
|
||||
+#include <linux/delay.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+
|
||||
+#include <pcmcia/ss.h>
|
||||
+
|
||||
+#include <mach/hardware.h>
|
||||
+#include <asm/mach-types.h>
|
||||
+
|
||||
+#ifdef CONFIG_MACH_GUMSTIX_VERDEX
|
||||
+#include <mach/pxa27x.h>
|
||||
+#else
|
||||
+#include <mach/pxa27x.h>
|
||||
+#endif
|
||||
+
|
||||
+#include <asm/io.h>
|
||||
+#include <mach/gpio.h>
|
||||
+#include <mach/gumstix.h>
|
||||
+#include "soc_common.h"
|
||||
+
|
||||
+#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
|
||||
+
|
||||
+static struct pcmcia_irqs gumstix_pcmcia_irqs0[] = {
|
||||
+ { 0, GUMSTIX_S0_nCD_IRQ, "CF0 nCD" },
|
||||
+ { 0, GUMSTIX_S0_nSTSCHG_IRQ, "CF0 nSTSCHG" },
|
||||
+};
|
||||
+
|
||||
+static struct pcmcia_irqs gumstix_pcmcia_irqs1[] = {
|
||||
+ { 1, GUMSTIX_S1_nCD_IRQ, "CF1 nCD" },
|
||||
+ { 1, GUMSTIX_S1_nSTSCHG_IRQ, "CF1 nSTSCHG" },
|
||||
+};
|
||||
+
|
||||
+
|
||||
+static int net_cf_vx_mode = 0;
|
||||
+
|
||||
+static int gumstix_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
|
||||
+{
|
||||
+/* Note: The verdex_pcmcia_pin_config is moved to gumstix_verdex.c in order to use mfp_pxa2xx_config
|
||||
+ for board-specific pin configuration instead of the old deprecated pxa_gpio_mode function. Thus,
|
||||
+ only the IRQ init is still needed to be done here. */
|
||||
+ skt->irq = (skt->nr == 0) ? ((net_cf_vx_mode == 0) ? GUMSTIX_S0_PRDY_nBSY_IRQ : GUMSTIX_S0_PRDY_nBSY_OLD_IRQ) : GUMSTIX_S1_PRDY_nBSY_IRQ;
|
||||
+
|
||||
+ return (skt->nr == 0) ? soc_pcmcia_request_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0)) :
|
||||
+ soc_pcmcia_request_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1));
|
||||
+}
|
||||
+
|
||||
+static void gumstix_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
|
||||
+{
|
||||
+ if(skt->nr == 0)
|
||||
+ {
|
||||
+ soc_pcmcia_free_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0));
|
||||
+ } else {
|
||||
+ soc_pcmcia_free_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1));
|
||||
+ }
|
||||
+
|
||||
+ if (net_cf_vx_mode) {
|
||||
+ gpio_free(GPIO_GUMSTIX_CF_OLD_RESET);
|
||||
+ } else {
|
||||
+ gpio_free(GPIO_GUMSTIX_CF_RESET);
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
+
|
||||
+static void gumstix_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
|
||||
+ struct pcmcia_state *state)
|
||||
+{
|
||||
+ unsigned int cd, prdy_nbsy, nbvd1;
|
||||
+ if(skt->nr == 0)
|
||||
+ {
|
||||
+ cd = GPIO_GUMSTIX_nCD_0;
|
||||
+ if(net_cf_vx_mode)
|
||||
+ prdy_nbsy = GPIO_GUMSTIX_PRDY_nBSY_0_OLD;
|
||||
+ else
|
||||
+ prdy_nbsy = GPIO_GUMSTIX_PRDY_nBSY_0;
|
||||
+ nbvd1 = GPIO_GUMSTIX_nBVD1_0;
|
||||
+ } else {
|
||||
+ cd = GPIO_GUMSTIX_nCD_1;
|
||||
+ prdy_nbsy = GPIO_GUMSTIX_PRDY_nBSY_1;
|
||||
+ nbvd1 = GPIO_GUMSTIX_nBVD1_1;
|
||||
+ }
|
||||
+ state->detect = !(GPLR(cd) & GPIO_bit(cd));
|
||||
+ state->ready = !!(GPLR(prdy_nbsy) & GPIO_bit(prdy_nbsy));
|
||||
+ state->bvd1 = !!(GPLR(nbvd1) & GPIO_bit(nbvd1));
|
||||
+ state->bvd2 = 1;
|
||||
+ state->vs_3v = 0;
|
||||
+ state->vs_Xv = 0;
|
||||
+ state->wrprot = 0;
|
||||
+}
|
||||
+
|
||||
+static int gumstix_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
|
||||
+ const socket_state_t *state)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void gumstix_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
|
||||
+{
|
||||
+ if(skt->nr) {
|
||||
+ soc_pcmcia_enable_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0));
|
||||
+ } else {
|
||||
+ soc_pcmcia_enable_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1));
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void gumstix_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
|
||||
+{
|
||||
+ if(skt->nr) {
|
||||
+ soc_pcmcia_disable_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0));
|
||||
+ } else {
|
||||
+ soc_pcmcia_disable_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1));
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static struct pcmcia_low_level gumstix_pcmcia_ops = {
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .hw_init = gumstix_pcmcia_hw_init,
|
||||
+ .hw_shutdown = gumstix_pcmcia_hw_shutdown,
|
||||
+ .socket_state = gumstix_pcmcia_socket_state,
|
||||
+ .configure_socket = gumstix_pcmcia_configure_socket,
|
||||
+ .socket_init = gumstix_pcmcia_socket_init,
|
||||
+ .socket_suspend = gumstix_pcmcia_socket_suspend,
|
||||
+ .nr = 2,
|
||||
+};
|
||||
+
|
||||
+static struct platform_device *gumstix_pcmcia_device;
|
||||
+
|
||||
+extern int __init gumstix_get_cf_cards(void);
|
||||
+
|
||||
+#ifdef CONFIG_MACH_GUMSTIX_VERDEX
|
||||
+extern int __init gumstix_check_if_netCF_vx(void);
|
||||
+#endif
|
||||
+
|
||||
+static int __init gumstix_pcmcia_init(void)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+#ifdef CONFIG_MACH_GUMSTIX_VERDEX
|
||||
+ net_cf_vx_mode = gumstix_check_if_netCF_vx();
|
||||
+#endif
|
||||
+
|
||||
+ gumstix_pcmcia_ops.nr = gumstix_get_cf_cards();
|
||||
+
|
||||
+ gumstix_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
|
||||
+ if (!gumstix_pcmcia_device)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ ret = platform_device_add_data(gumstix_pcmcia_device, &gumstix_pcmcia_ops,
|
||||
+ sizeof(gumstix_pcmcia_ops));
|
||||
+
|
||||
+ if (ret == 0) {
|
||||
+ printk(KERN_INFO "Registering gumstix PCMCIA interface.\n");
|
||||
+ ret = platform_device_add(gumstix_pcmcia_device);
|
||||
+ }
|
||||
+
|
||||
+ if (ret)
|
||||
+ platform_device_put(gumstix_pcmcia_device);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static void __exit gumstix_pcmcia_exit(void)
|
||||
+{
|
||||
+ /*
|
||||
+ * This call is supposed to free our gumstix_pcmcia_device.
|
||||
+ * Unfortunately platform_device don't have a free method, and
|
||||
+ * we can't assume it's free of any reference at this point so we
|
||||
+ * can't free it either.
|
||||
+ */
|
||||
+ platform_device_unregister(gumstix_pcmcia_device);
|
||||
+}
|
||||
+
|
||||
+fs_initcall(gumstix_pcmcia_init);
|
||||
+module_exit(gumstix_pcmcia_exit);
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
|
@ -0,0 +1,24 @@
|
|||
--- a/kernel/printk.c
|
||||
+++ b/kernel/printk.c
|
||||
@@ -44,6 +44,10 @@
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
+#ifdef CONFIG_DEBUG_LL
|
||||
+extern void printascii(char *);
|
||||
+#endif /* CONFIG_DEBUG_LL */
|
||||
+
|
||||
/*
|
||||
* Architectures can override it:
|
||||
*/
|
||||
@@ -900,6 +904,10 @@ asmlinkage int vprintk(const char *fmt,
|
||||
}
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_DEBUG_LL
|
||||
+ printascii(printk_buf);
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* Copy the output into log_buf. If the caller didn't provide
|
||||
* the appropriate log prefix, we insert them here
|
Loading…
Reference in New Issue