Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
5ff7f78a
Commit
5ff7f78a
authored
Oct 07, 2008
by
Russell King
Committed by
Russell King
Oct 07, 2008
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'pxa-trizeps' into pxa-machines
Conflicts: drivers/pcmcia/Makefile
parents
35437b61
92b797f6
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
680 additions
and
383 deletions
+680
-383
arch/arm/Kconfig
arch/arm/Kconfig
+1
-1
arch/arm/mach-pxa/Kconfig
arch/arm/mach-pxa/Kconfig
+30
-2
arch/arm/mach-pxa/Makefile
arch/arm/mach-pxa/Makefile
+0
-1
arch/arm/mach-pxa/include/mach/trizeps4.h
arch/arm/mach-pxa/include/mach/trizeps4.h
+70
-14
arch/arm/mach-pxa/leds-trizeps4.c
arch/arm/mach-pxa/leds-trizeps4.c
+0
-134
arch/arm/mach-pxa/leds.c
arch/arm/mach-pxa/leds.c
+0
-2
arch/arm/mach-pxa/trizeps4.c
arch/arm/mach-pxa/trizeps4.c
+321
-228
drivers/pcmcia/Kconfig
drivers/pcmcia/Kconfig
+1
-1
drivers/pcmcia/Makefile
drivers/pcmcia/Makefile
+1
-0
drivers/pcmcia/pxa2xx_trizeps4.c
drivers/pcmcia/pxa2xx_trizeps4.c
+256
-0
No files found.
arch/arm/Kconfig
View file @
5ff7f78a
...
@@ -845,7 +845,7 @@ config LEDS
...
@@ -845,7 +845,7 @@ config LEDS
ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \
ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \
ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \
ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \
ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || \
ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || \
ARCH_AT91 ||
MACH_TRIZEPS4 ||
ARCH_DAVINCI || \
ARCH_AT91 || ARCH_DAVINCI || \
ARCH_KS8695 || MACH_RD88F5182
ARCH_KS8695 || MACH_RD88F5182
help
help
If you say Y here, the LEDs on your machine will be used
If you say Y here, the LEDs on your machine will be used
...
...
arch/arm/mach-pxa/Kconfig
View file @
5ff7f78a
...
@@ -174,13 +174,41 @@ config MACH_E800
...
@@ -174,13 +174,41 @@ config MACH_E800
Say Y here if you intend to run this kernel on a Toshiba
Say Y here if you intend to run this kernel on a Toshiba
e800 family PDA.
e800 family PDA.
config TRIZEPS_PXA
bool "PXA based Keith und Koep Trizeps DIMM-Modules"
config MACH_TRIZEPS4
config MACH_TRIZEPS4
bool "Keith und Koep Trizeps4 DIMM-Module"
bool "Keith und Koep Trizeps4 DIMM-Module"
depends on TRIZEPS_PXA
select TRIZEPS_PCMCIA
select PXA27x
config MACH_TRIZEPS4WL
bool "Keith und Koep Trizeps4-WL DIMM-Module"
depends on TRIZEPS_PXA
select TRIZEPS_PCMCIA
select PXA27x
select PXA27x
select PXA_SSP
config MACH_TRIZEPS4_CONXS
choice
prompt "Select base board for Trizeps module"
depends on TRIZEPS_PXA
config MACH_TRIZEPS_CONXS
bool "ConXS Eval Board"
bool "ConXS Eval Board"
depends on MACH_TRIZEPS4
config MACH_TRIZEPS_UCONXS
bool "uConXS Eval Board"
config MACH_TRIZEPS_ANY
bool "another Board"
endchoice
config TRIZEPS_PCMCIA
bool
help
Enable PCMCIA support for Trizeps modules
config MACH_EM_X270
config MACH_EM_X270
bool "CompuLab EM-x270 platform"
bool "CompuLab EM-x270 platform"
...
...
arch/arm/mach-pxa/Makefile
View file @
5ff7f78a
...
@@ -64,7 +64,6 @@ led-y := leds.o
...
@@ -64,7 +64,6 @@ led-y := leds.o
led-$(CONFIG_ARCH_LUBBOCK)
+=
leds-lubbock.o
led-$(CONFIG_ARCH_LUBBOCK)
+=
leds-lubbock.o
led-$(CONFIG_MACH_MAINSTONE)
+=
leds-mainstone.o
led-$(CONFIG_MACH_MAINSTONE)
+=
leds-mainstone.o
led-$(CONFIG_ARCH_PXA_IDP)
+=
leds-idp.o
led-$(CONFIG_ARCH_PXA_IDP)
+=
leds-idp.o
led-$(CONFIG_MACH_TRIZEPS4)
+=
leds-trizeps4.o
obj-$(CONFIG_LEDS)
+=
$
(
led-y
)
obj-$(CONFIG_LEDS)
+=
$
(
led-y
)
...
...
arch/arm/mach-pxa/include/mach/trizeps4.h
View file @
5ff7f78a
...
@@ -17,11 +17,16 @@
...
@@ -17,11 +17,16 @@
#define TRIZEPS4_PIC_PHYS (PXA_CS3_PHYS)
/* Logic chip on ConXS-Board */
#define TRIZEPS4_PIC_PHYS (PXA_CS3_PHYS)
/* Logic chip on ConXS-Board */
#define TRIZEPS4_SDRAM_BASE 0xa0000000
/* SDRAM region */
#define TRIZEPS4_SDRAM_BASE 0xa0000000
/* SDRAM region */
#define TRIZEPS4_CFSR_PHYS (PXA_CS3_PHYS)
/* Logic chip on ConXS-Board CSFR register */
/* Logic on ConXS-board CSFR register*/
#define TRIZEPS4_BOCR_PHYS (PXA_CS3_PHYS+0x02000000)
/* Logic chip on ConXS-Board BOCR register */
#define TRIZEPS4_CFSR_PHYS (PXA_CS3_PHYS)
#define TRIZEPS4_IRCR_PHYS (PXA_CS3_PHYS+0x02400000)
/* Logic chip on ConXS-Board IRCR register*/
/* Logic on ConXS-board BOCR register*/
#define TRIZEPS4_UPSR_PHYS (PXA_CS3_PHYS+0x02800000)
/* Logic chip on ConXS-Board UPSR register*/
#define TRIZEPS4_BOCR_PHYS (PXA_CS3_PHYS+0x02000000)
#define TRIZEPS4_DICR_PHYS (PXA_CS3_PHYS+0x03800000)
/* Logic chip on ConXS-Board DICR register*/
/* Logic on ConXS-board IRCR register*/
#define TRIZEPS4_IRCR_PHYS (PXA_CS3_PHYS+0x02400000)
/* Logic on ConXS-board UPSR register*/
#define TRIZEPS4_UPSR_PHYS (PXA_CS3_PHYS+0x02800000)
/* Logic on ConXS-board DICR register*/
#define TRIZEPS4_DICR_PHYS (PXA_CS3_PHYS+0x03800000)
/* virtual memory regions */
/* virtual memory regions */
#define TRIZEPS4_DISK_VIRT 0xF0000000
/* Disk On Chip region */
#define TRIZEPS4_DISK_VIRT 0xF0000000
/* Disk On Chip region */
...
@@ -54,6 +59,15 @@
...
@@ -54,6 +59,15 @@
#define GPIO_MMC_DET 12
#define GPIO_MMC_DET 12
#define TRIZEPS4_MMC_IRQ IRQ_GPIO(GPIO_MMC_DET)
#define TRIZEPS4_MMC_IRQ IRQ_GPIO(GPIO_MMC_DET)
/* DOC NAND chip */
#define GPIO_DOC_LOCK 94
#define GPIO_DOC_IRQ 93
#define TRIZEPS4_DOC_IRQ IRQ_GPIO(GPIO_DOC_IRQ)
/* SPI interface */
#define GPIO_SPI 53
#define TRIZEPS4_SPI_IRQ IRQ_GPIO(GPIO_SPI)
/* LEDS using tx2 / rx2 */
/* LEDS using tx2 / rx2 */
#define GPIO_SYS_BUSY_LED 46
#define GPIO_SYS_BUSY_LED 46
#define GPIO_HEARTBEAT_LED 47
#define GPIO_HEARTBEAT_LED 47
...
@@ -62,6 +76,8 @@
...
@@ -62,6 +76,8 @@
#define GPIO_PIC 0
#define GPIO_PIC 0
#define TRIZEPS4_PIC_IRQ IRQ_GPIO(GPIO_PIC)
#define TRIZEPS4_PIC_IRQ IRQ_GPIO(GPIO_PIC)
#ifdef CONFIG_MACH_TRIZEPS_CONXS
/* for CONXS base board define these registers */
#define CFSR_P2V(x) ((x) - TRIZEPS4_CFSR_PHYS + TRIZEPS4_CFSR_VIRT)
#define CFSR_P2V(x) ((x) - TRIZEPS4_CFSR_PHYS + TRIZEPS4_CFSR_VIRT)
#define CFSR_V2P(x) ((x) - TRIZEPS4_CFSR_VIRT + TRIZEPS4_CFSR_PHYS)
#define CFSR_V2P(x) ((x) - TRIZEPS4_CFSR_VIRT + TRIZEPS4_CFSR_PHYS)
...
@@ -71,15 +87,55 @@
...
@@ -71,15 +87,55 @@
#define DCR_P2V(x) ((x) - TRIZEPS4_DICR_PHYS + TRIZEPS4_DICR_VIRT)
#define DCR_P2V(x) ((x) - TRIZEPS4_DICR_PHYS + TRIZEPS4_DICR_VIRT)
#define DCR_V2P(x) ((x) - TRIZEPS4_DICR_VIRT + TRIZEPS4_DICR_PHYS)
#define DCR_V2P(x) ((x) - TRIZEPS4_DICR_VIRT + TRIZEPS4_DICR_PHYS)
#define IRCR_P2V(x) ((x) - TRIZEPS4_IRCR_PHYS + TRIZEPS4_IRCR_VIRT)
#define IRCR_V2P(x) ((x) - TRIZEPS4_IRCR_VIRT + TRIZEPS4_IRCR_PHYS)
#ifndef __ASSEMBLY__
#ifndef __ASSEMBLY__
#define ConXS_CFSR (*((volatile unsigned short *)CFSR_P2V(0x0C000000)))
static
inline
unsigned
short
CFSR_readw
(
void
)
#define ConXS_BCR (*((volatile unsigned short *)BCR_P2V(0x0E000000)))
{
#define ConXS_DCR (*((volatile unsigned short *)DCR_P2V(0x0F800000)))
/* [Compact Flash Status Register] is read only */
return
*
((
unsigned
short
*
)
CFSR_P2V
(
0x0C000000
));
}
static
inline
void
BCR_writew
(
unsigned
short
value
)
{
/* [Board Control Regsiter] is write only */
*
((
unsigned
short
*
)
BCR_P2V
(
0x0E000000
))
=
value
;
}
static
inline
void
DCR_writew
(
unsigned
short
value
)
{
/* [Display Control Register] is write only */
*
((
unsigned
short
*
)
DCR_P2V
(
0x0E000000
))
=
value
;
}
static
inline
void
IRCR_writew
(
unsigned
short
value
)
{
/* [InfraRed data Control Register] is write only */
*
((
unsigned
short
*
)
IRCR_P2V
(
0x0E000000
))
=
value
;
}
#else
#else
#define ConXS_CFSR CFSR_P2V(0x0C000000)
#define ConXS_CFSR CFSR_P2V(0x0C000000)
#define ConXS_BCR BCR_P2V(0x0E000000)
#define ConXS_BCR BCR_P2V(0x0E000000)
#define ConXS_DCR DCR_P2V(0x0F800000)
#define ConXS_DCR DCR_P2V(0x0F800000)
#define ConXS_IRCR IRCR_P2V(0x0F800000)
#endif
#endif
#else
/* for whatever baseboard define function registers */
static
inline
unsigned
short
CFSR_readw
(
void
)
{
return
0
;
}
static
inline
void
BCR_writew
(
unsigned
short
value
)
{
;
}
static
inline
void
DCR_writew
(
unsigned
short
value
)
{
;
}
static
inline
void
IRCR_writew
(
unsigned
short
value
)
{
;
}
#endif
/* CONFIG_MACH_TRIZEPS_CONXS */
#define ConXS_CFSR_BVD_MASK 0x0003
#define ConXS_CFSR_BVD_MASK 0x0003
#define ConXS_CFSR_BVD1 (1 << 0)
#define ConXS_CFSR_BVD1 (1 << 0)
...
...
arch/arm/mach-pxa/leds-trizeps4.c
deleted
100644 → 0
View file @
35437b61
/*
* linux/arch/arm/mach-pxa/leds-trizeps4.c
*
* Author: Jürgen Schindele
* Created: 20 02, 2006
* Copyright: Jürgen Schindele
*
* 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 <mach/hardware.h>
#include <asm/system.h>
#include <asm/types.h>
#include <asm/leds.h>
#include <mach/pxa-regs.h>
#include <mach/pxa2xx-gpio.h>
#include <mach/trizeps4.h>
#include "leds.h"
#define LED_STATE_ENABLED 1
#define LED_STATE_CLAIMED 2
#define SYS_BUSY 0x01
#define HEARTBEAT 0x02
#define BLINK 0x04
static
unsigned
int
led_state
;
static
unsigned
int
hw_led_state
;
void
trizeps4_leds_event
(
led_event_t
evt
)
{
unsigned
long
flags
;
local_irq_save
(
flags
);
switch
(
evt
)
{
case
led_start
:
hw_led_state
=
0
;
pxa_gpio_mode
(
GPIO_SYS_BUSY_LED
|
GPIO_OUT
);
/* LED1 */
pxa_gpio_mode
(
GPIO_HEARTBEAT_LED
|
GPIO_OUT
);
/* LED2 */
led_state
=
LED_STATE_ENABLED
;
break
;
case
led_stop
:
led_state
&=
~
LED_STATE_ENABLED
;
break
;
case
led_claim
:
led_state
|=
LED_STATE_CLAIMED
;
hw_led_state
=
0
;
break
;
case
led_release
:
led_state
&=
~
LED_STATE_CLAIMED
;
hw_led_state
=
0
;
break
;
#ifdef CONFIG_LEDS_TIMER
case
led_timer
:
hw_led_state
^=
HEARTBEAT
;
break
;
#endif
#ifdef CONFIG_LEDS_CPU
case
led_idle_start
:
hw_led_state
&=
~
SYS_BUSY
;
break
;
case
led_idle_end
:
hw_led_state
|=
SYS_BUSY
;
break
;
#endif
case
led_halted
:
break
;
case
led_green_on
:
hw_led_state
|=
BLINK
;
break
;
case
led_green_off
:
hw_led_state
&=
~
BLINK
;
break
;
case
led_amber_on
:
break
;
case
led_amber_off
:
break
;
case
led_red_on
:
break
;
case
led_red_off
:
break
;
default:
break
;
}
if
(
led_state
&
LED_STATE_ENABLED
)
{
switch
(
hw_led_state
)
{
case
0
:
GPSR
(
GPIO_SYS_BUSY_LED
)
|=
GPIO_bit
(
GPIO_SYS_BUSY_LED
);
GPSR
(
GPIO_HEARTBEAT_LED
)
|=
GPIO_bit
(
GPIO_HEARTBEAT_LED
);
break
;
case
1
:
GPCR
(
GPIO_SYS_BUSY_LED
)
|=
GPIO_bit
(
GPIO_SYS_BUSY_LED
);
GPSR
(
GPIO_HEARTBEAT_LED
)
|=
GPIO_bit
(
GPIO_HEARTBEAT_LED
);
break
;
case
2
:
GPSR
(
GPIO_SYS_BUSY_LED
)
|=
GPIO_bit
(
GPIO_SYS_BUSY_LED
);
GPCR
(
GPIO_HEARTBEAT_LED
)
|=
GPIO_bit
(
GPIO_HEARTBEAT_LED
);
break
;
case
3
:
GPCR
(
GPIO_SYS_BUSY_LED
)
|=
GPIO_bit
(
GPIO_SYS_BUSY_LED
);
GPCR
(
GPIO_HEARTBEAT_LED
)
|=
GPIO_bit
(
GPIO_HEARTBEAT_LED
);
break
;
}
}
else
{
/* turn all off */
GPSR
(
GPIO_SYS_BUSY_LED
)
|=
GPIO_bit
(
GPIO_SYS_BUSY_LED
);
GPSR
(
GPIO_HEARTBEAT_LED
)
|=
GPIO_bit
(
GPIO_HEARTBEAT_LED
);
}
local_irq_restore
(
flags
);
}
arch/arm/mach-pxa/leds.c
View file @
5ff7f78a
...
@@ -24,8 +24,6 @@ pxa_leds_init(void)
...
@@ -24,8 +24,6 @@ pxa_leds_init(void)
leds_event
=
mainstone_leds_event
;
leds_event
=
mainstone_leds_event
;
if
(
machine_is_pxa_idp
())
if
(
machine_is_pxa_idp
())
leds_event
=
idp_leds_event
;
leds_event
=
idp_leds_event
;
if
(
machine_is_trizeps4
())
leds_event
=
trizeps4_leds_event
;
leds_event
(
led_start
);
leds_event
(
led_start
);
return
0
;
return
0
;
...
...
arch/arm/mach-pxa/trizeps4.c
View file @
5ff7f78a
...
@@ -22,8 +22,8 @@
...
@@ -22,8 +22,8 @@
#include <linux/fb.h>
#include <linux/fb.h>
#include <linux/ioport.h>
#include <linux/ioport.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/
serial_8250
.h>
#include <linux/
gpio
.h>
#include <linux/
mtd/mtd
.h>
#include <linux/
dm9000
.h>
#include <linux/mtd/physmap.h>
#include <linux/mtd/physmap.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/partitions.h>
...
@@ -31,7 +31,6 @@
...
@@ -31,7 +31,6 @@
#include <asm/setup.h>
#include <asm/setup.h>
#include <asm/memory.h>
#include <asm/memory.h>
#include <asm/mach-types.h>
#include <asm/mach-types.h>
#include <mach/hardware.h>
#include <asm/irq.h>
#include <asm/irq.h>
#include <asm/sizes.h>
#include <asm/sizes.h>
...
@@ -40,41 +39,148 @@
...
@@ -40,41 +39,148 @@
#include <asm/mach/irq.h>
#include <asm/mach/irq.h>
#include <asm/mach/flash.h>
#include <asm/mach/flash.h>
#include <mach/hardware.h>
#include <mach/pxa-regs.h>
#include <mach/pxa-regs.h>
#include <mach/pxa2xx-regs.h>
#include <mach/pxa2xx-regs.h>
#include <mach/pxa2xx-gpio.h>
#include <mach/mfp-pxa27x.h>
#include <mach/pxa2xx_spi.h>
#include <mach/trizeps4.h>
#include <mach/trizeps4.h>
#include <mach/audio.h>
#include <mach/audio.h>
#include <mach/pxafb.h>
#include <mach/pxafb.h>
#include <mach/mmc.h>
#include <mach/mmc.h>
#include <mach/irda.h>
#include <mach/irda.h>
#include <mach/ohci.h>
#include <mach/ohci.h>
#include <mach/i2c.h>
#include "generic.h"
#include "generic.h"
#include "devices.h"
#include "devices.h"
/********************************************************************************************
/* comment out the following line if you want to use the
* Standard UART from PXA for serial / irda transmission
* and acivate it if you have status leds connected */
#define STATUS_LEDS_ON_STUART_PINS 1
/*****************************************************************************
* MultiFunctionPins of CPU
*****************************************************************************/
static
unsigned
long
trizeps4_pin_config
[]
__initdata
=
{
/* Chip Selects */
GPIO15_nCS_1
,
/* DiskOnChip CS */
GPIO93_GPIO
,
/* TRIZEPS4_DOC_IRQ */
GPIO94_GPIO
,
/* DOC lock */
GPIO78_nCS_2
,
/* DM9000 CS */
GPIO101_GPIO
,
/* TRIZEPS4_ETH_IRQ */
GPIO79_nCS_3
,
/* Logic CS */
GPIO0_GPIO
|
WAKEUP_ON_EDGE_RISE
,
/* Logic irq */
/* LCD - 16bpp Active TFT */
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
,
GPIO77_LCD_BIAS
,
/* UART */
GPIO9_FFUART_CTS
,
GPIO10_FFUART_DCD
,
GPIO16_FFUART_TXD
,
GPIO33_FFUART_DSR
,
GPIO38_FFUART_RI
,
GPIO82_FFUART_DTR
,
GPIO83_FFUART_RTS
,
GPIO96_FFUART_RXD
,
GPIO42_BTUART_RXD
,
GPIO43_BTUART_TXD
,
GPIO44_BTUART_CTS
,
GPIO45_BTUART_RTS
,
#ifdef STATUS_LEDS_ON_STUART_PINS
GPIO46_GPIO
,
GPIO47_GPIO
,
#else
GPIO46_STUART_RXD
,
GPIO47_STUART_TXD
,
#endif
/* PCMCIA */
GPIO11_GPIO
,
/* TRIZEPS4_CD_IRQ */
GPIO13_GPIO
,
/* TRIZEPS4_READY_NINT */
GPIO48_nPOE
,
GPIO49_nPWE
,
GPIO50_nPIOR
,
GPIO51_nPIOW
,
GPIO54_nPCE_2
,
GPIO55_nPREG
,
GPIO56_nPWAIT
,
GPIO57_nIOIS16
,
GPIO102_nPCE_1
,
GPIO104_PSKTSEL
,
/* MultiMediaCard */
GPIO32_MMC_CLK
,
GPIO92_MMC_DAT_0
,
GPIO109_MMC_DAT_1
,
GPIO110_MMC_DAT_2
,
GPIO111_MMC_DAT_3
,
GPIO112_MMC_CMD
,
GPIO12_GPIO
,
/* TRIZEPS4_MMC_IRQ */
/* USB OHCI */
GPIO88_USBH1_PWR
,
/* USBHPWR1 */
GPIO89_USBH1_PEN
,
/* USBHPEN1 */
/* I2C */
GPIO117_I2C_SCL
,
GPIO118_I2C_SDA
,
};
static
unsigned
long
trizeps4wl_pin_config
[]
__initdata
=
{
/* SSP 2 */
GPIO14_SSP2_SFRM
,
GPIO19_SSP2_SCLK
,
GPIO53_GPIO
,
/* TRIZEPS4_SPI_IRQ */
GPIO86_SSP2_RXD
,
GPIO87_SSP2_TXD
,
};
/****************************************************************************
* ONBOARD FLASH
* ONBOARD FLASH
****************************************************************************
****************
/
****************************************************************************/
static
struct
mtd_partition
trizeps4_partitions
[]
=
{
static
struct
mtd_partition
trizeps4_partitions
[]
=
{
{
{
.
name
=
"Bootloader"
,
.
name
=
"Bootloader"
,
.
offset
=
0x00000000
,
.
offset
=
0x00000000
,
.
size
=
0x00040000
,
.
size
=
0x00040000
,
.
mask_flags
=
MTD_WRITEABLE
/* force read-only */
.
mask_flags
=
MTD_WRITEABLE
/* force read-only */
},{
},
{
.
name
=
"Backup"
,
.
name
=
"Backup"
,
.
offset
=
0x00040000
,
.
offset
=
0x00040000
,
.
size
=
0x00040000
,
.
size
=
0x00040000
,
},{
},
{
.
name
=
"Image"
,
.
name
=
"Image"
,
.
offset
=
0x00080000
,
.
offset
=
0x00080000
,
.
size
=
0x01080000
,
.
size
=
0x01080000
,
},{
},
{
.
name
=
"IPSM"
,
.
name
=
"IPSM"
,
.
offset
=
0x01100000
,
.
offset
=
0x01100000
,
.
size
=
0x00e00000
,
.
size
=
0x00e00000
,
},{
},
{
.
name
=
"Registry"
,
.
name
=
"Registry"
,
.
offset
=
0x01f00000
,
.
offset
=
0x01f00000
,
.
size
=
MTDPART_SIZ_FULL
,
.
size
=
MTDPART_SIZ_FULL
,
...
@@ -105,9 +211,9 @@ static struct platform_device flash_device = {
...
@@ -105,9 +211,9 @@ static struct platform_device flash_device = {
.
num_resources
=
1
,
.
num_resources
=
1
,
};
};
/****************************************************************************
****************
/****************************************************************************
* DAVICOM DM9000 Ethernet
* DAVICOM DM9000 Ethernet
****************************************************************************
****************
/
****************************************************************************/
static
struct
resource
dm9000_resources
[]
=
{
static
struct
resource
dm9000_resources
[]
=
{
[
0
]
=
{
[
0
]
=
{
.
start
=
TRIZEPS4_ETH_PHYS
+
0x300
,
.
start
=
TRIZEPS4_ETH_PHYS
+
0x300
,
...
@@ -122,67 +228,68 @@ static struct resource dm9000_resources[] = {
...
@@ -122,67 +228,68 @@ static struct resource dm9000_resources[] = {
[
2
]
=
{
[
2
]
=
{
.
start
=
TRIZEPS4_ETH_IRQ
,
.
start
=
TRIZEPS4_ETH_IRQ
,
.
end
=
TRIZEPS4_ETH_IRQ
,
.
end
=
TRIZEPS4_ETH_IRQ
,
.
flags
=
(
IORESOURCE_IRQ
|
IRQ_TYPE_EDGE_RISING
)
,
.
flags
=
IORESOURCE_IRQ
|
IORESOURCE_IRQ_HIGHEDGE
,
},
},
};
};
static
struct
dm9000_plat_data
tri_dm9000_platdata
=
{
.
flags
=
DM9000_PLATF_32BITONLY
,
};
static
struct
platform_device
dm9000_device
=
{
static
struct
platform_device
dm9000_device
=
{
.
name
=
"dm9000"
,
.
name
=
"dm9000"
,
.
id
=
-
1
,
.
id
=
-
1
,
.
num_resources
=
ARRAY_SIZE
(
dm9000_resources
),
.
num_resources
=
ARRAY_SIZE
(
dm9000_resources
),
.
resource
=
dm9000_resources
,
.
resource
=
dm9000_resources
,
.
dev
=
{
.
platform_data
=
&
tri_dm9000_platdata
,
}
};
};
/********************************************************************************************
/****************************************************************************
* PXA270 serial ports
* LED's on GPIO pins of PXA
********************************************************************************************/
****************************************************************************/
static
struct
plat_serial8250_port
tri_serial_ports
[]
=
{
static
struct
gpio_led
trizeps4_led
[]
=
{
#ifdef CONFIG_SERIAL_PXA
#ifdef STATUS_LEDS_ON_STUART_PINS
/* this uses the own PXA driver */
{
{
0
,
.
name
=
"led0:orange:heartbeat"
,
/* */
},
.
default_trigger
=
"heartbeat"
,
#else
.
gpio
=
GPIO_HEARTBEAT_LED
,
/* this uses the generic 8520 driver */
.
active_low
=
1
,
[
0
]
=
{
.
membase
=
(
void
*
)
&
FFUART
,
.
irq
=
IRQ_FFUART
,
.
flags
=
UPF_BOOT_AUTOCONF
,
.
iotype
=
UPIO_MEM32
,
.
regshift
=
2
,
.
uartclk
=
(
921600
*
16
),
},
[
1
]
=
{
.
membase
=
(
void
*
)
&
BTUART
,
.
irq
=
IRQ_BTUART
,
.
flags
=
UPF_BOOT_AUTOCONF
,
.
iotype
=
UPIO_MEM32
,
.
regshift
=
2
,
.
uartclk
=
(
921600
*
16
),
},
},
{
{
0
,
.
name
=
"led1:yellow:cpubusy"
,
/* */
.
default_trigger
=
"cpu-busy"
,
.
gpio
=
GPIO_SYS_BUSY_LED
,
.
active_low
=
1
,
},
},
#endif
#endif
};
};
static
struct
platform_device
uart_devices
=
{
static
struct
gpio_led_platform_data
trizeps4_led_data
=
{
.
name
=
"serial8250"
,
.
leds
=
trizeps4_led
,
.
id
=
0
,
.
num_leds
=
ARRAY_SIZE
(
trizeps4_led
),
};
static
struct
platform_device
leds_devices
=
{
.
name
=
"leds-gpio"
,
.
id
=
-
1
,
.
dev
=
{
.
dev
=
{
.
platform_data
=
tri_serial_ports
,
.
platform_data
=
&
trizeps4_led_data
,
},
},
.
num_resources
=
0
,
.
resource
=
NULL
,
};
};
static
struct
platform_device
*
trizeps4_devices
[]
__initdata
=
{
static
struct
platform_device
*
trizeps4_devices
[]
__initdata
=
{
&
flash_device
,
&
flash_device
,
&
uart_devices
,
&
dm9000_device
,
&
dm9000_device
,
&
leds_devices
,
};
static
struct
platform_device
*
trizeps4wl_devices
[]
__initdata
=
{
&
flash_device
,
&
leds_devices
,
};
};
#ifdef CONFIG_MACH_TRIZEPS4_CONXS
static
short
trizeps_conxs_bcr
;
static
short
trizeps_conxs_bcr
;
/* PCCARD power switching supports only 3,3V */
/* PCCARD power switching supports only 3,3V */
...
@@ -192,108 +299,63 @@ void board_pcmcia_power(int power)
...
@@ -192,108 +299,63 @@ void board_pcmcia_power(int power)
/* switch power on, put in reset and enable buffers */
/* switch power on, put in reset and enable buffers */
trizeps_conxs_bcr
|=
power
;
trizeps_conxs_bcr
|=
power
;
trizeps_conxs_bcr
|=
ConXS_BCR_CF_RESET
;
trizeps_conxs_bcr
|=
ConXS_BCR_CF_RESET
;
trizeps_conxs_bcr
&=
~
(
ConXS_BCR_CF_BUF_EN
)
;
trizeps_conxs_bcr
&=
~
ConXS_BCR_CF_BUF_EN
;
ConXS_BCR
=
trizeps_conxs_bcr
;
BCR_writew
(
trizeps_conxs_bcr
)
;
/* wait a little */
/* wait a little */
udelay
(
2000
);
udelay
(
2000
);
/* take reset away */
/* take reset away */
trizeps_conxs_bcr
&=
~
(
ConXS_BCR_CF_RESET
)
;
trizeps_conxs_bcr
&=
~
ConXS_BCR_CF_RESET
;
ConXS_BCR
=
trizeps_conxs_bcr
;
BCR_writew
(
trizeps_conxs_bcr
)
;
udelay
(
2000
);
udelay
(
2000
);
}
else
{
}
else
{
/* put in reset */
/* put in reset */
trizeps_conxs_bcr
|=
ConXS_BCR_CF_RESET
;
trizeps_conxs_bcr
|=
ConXS_BCR_CF_RESET
;
ConXS_BCR
=
trizeps_conxs_bcr
;
BCR_writew
(
trizeps_conxs_bcr
)
;
udelay
(
1000
);
udelay
(
1000
);
/* switch power off */
/* switch power off */
trizeps_conxs_bcr
&=
~
(
0xf
);
trizeps_conxs_bcr
&=
~
0xf
;
ConXS_BCR
=
trizeps_conxs_bcr
;
BCR_writew
(
trizeps_conxs_bcr
);
}
}
pr_debug
(
"%s: o%s 0x%x
\n
"
,
__func__
,
power
?
"n"
:
"ff"
,
trizeps_conxs_bcr
);
pr_debug
(
"%s: o%s 0x%x
\n
"
,
__func__
,
power
?
"n"
:
"ff"
,
trizeps_conxs_bcr
);
}
}
EXPORT_SYMBOL
(
board_pcmcia_power
);
/* backlight power switching for LCD panel */
/* backlight power switching for LCD panel */
static
void
board_backlight_power
(
int
on
)
static
void
board_backlight_power
(
int
on
)
{
{
if
(
on
)
{
if
(
on
)
trizeps_conxs_bcr
|=
ConXS_BCR_L_DISP
;
trizeps_conxs_bcr
|=
ConXS_BCR_L_DISP
;
}
else
{
else
trizeps_conxs_bcr
&=
~
ConXS_BCR_L_DISP
;
trizeps_conxs_bcr
&=
~
ConXS_BCR_L_DISP
;
}
pr_debug
(
"%s: o%s 0x%x
\n
"
,
__func__
,
on
?
"n"
:
"ff"
,
trizeps_conxs_bcr
);
ConXS_BCR
=
trizeps_conxs_bcr
;
}
/* Powersupply for MMC/SD cardslot */
static
void
board_mci_power
(
struct
device
*
dev
,
unsigned
int
vdd
)
{
struct
pxamci_platform_data
*
p_d
=
dev
->
platform_data
;
if
((
1
<<
vdd
)
&
p_d
->
ocr_mask
)
{
pr_debug
(
"%s: on
\n
"
,
__func__
);
/* FIXME fill in values here */
}
else
{
pr_debug
(
"%s: off
\n
"
,
__func__
);
/* FIXME fill in values here */
}
}
static
short
trizeps_conxs_ircr
;
/* Switch modes and Power for IRDA receiver */
pr_debug
(
"%s: o%s 0x%x
\n
"
,
__func__
,
on
?
"n"
:
"ff"
,
static
void
board_irda_mode
(
struct
device
*
dev
,
int
mode
)
trizeps_conxs_bcr
);
{
BCR_writew
(
trizeps_conxs_bcr
);
unsigned
long
flags
;
local_irq_save
(
flags
);
if
(
mode
&
IR_SIRMODE
)
{
/* Slow mode */
trizeps_conxs_ircr
&=
~
ConXS_IRCR_MODE
;
}
else
if
(
mode
&
IR_FIRMODE
)
{
/* Fast mode */
trizeps_conxs_ircr
|=
ConXS_IRCR_MODE
;
}
pxa2xx_transceiver_mode
(
dev
,
mode
);
if
(
mode
&
IR_OFF
)
{
trizeps_conxs_ircr
|=
ConXS_IRCR_SD
;
}
else
{
trizeps_conxs_ircr
&=
~
ConXS_IRCR_SD
;
}
/* FIXME write values to register */
local_irq_restore
(
flags
);
}
}
#else
/* a I2C based RTC is known on CONXS board */
/* for other baseboards define dummies */
static
struct
i2c_board_info
trizeps4_i2c_devices
[]
__initdata
=
{
void
board_pcmcia_power
(
int
power
)
{;}
{
I2C_BOARD_INFO
(
"rtc-pcf8593"
,
0x51
)
}
#define board_backlight_power NULL
};
#define board_mci_power NULL
#define board_irda_mode NULL
#endif
/* CONFIG_MACH_TRIZEPS4_CONXS */
EXPORT_SYMBOL
(
board_pcmcia_power
);
static
int
trizeps4_mci_init
(
struct
device
*
dev
,
irq_handler_t
mci_detect_int
,
void
*
data
)
/****************************************************************************
* MMC card slot external to module
****************************************************************************/
static
int
trizeps4_mci_init
(
struct
device
*
dev
,
irq_handler_t
mci_detect_int
,
void
*
data
)
{
{
int
err
;
int
err
;
/* setup GPIO for PXA27x MMC controller */
pxa_gpio_mode
(
GPIO32_MMCCLK_MD
);
pxa_gpio_mode
(
GPIO112_MMCCMD_MD
);
pxa_gpio_mode
(
GPIO92_MMCDAT0_MD
);
pxa_gpio_mode
(
GPIO109_MMCDAT1_MD
);
pxa_gpio_mode
(
GPIO110_MMCDAT2_MD
);
pxa_gpio_mode
(
GPIO111_MMCDAT3_MD
);
pxa_gpio_mode
(
GPIO_MMC_DET
|
GPIO_IN
);
err
=
request_irq
(
TRIZEPS4_MMC_IRQ
,
mci_detect_int
,
err
=
request_irq
(
TRIZEPS4_MMC_IRQ
,
mci_detect_int
,
IRQF_DISABLED
|
IRQF_TRIGGER_RISING
,
IRQF_DISABLED
|
IRQF_TRIGGER_RISING
|
IRQF_SAMPLE_RANDOM
,
"MMC card detect"
,
data
);
"MMC card detect"
,
data
);
if
(
err
)
if
(
err
)
{
printk
(
KERN_ERR
"trizeps4_mci_init: MMC/SD: can't request MMC card detect IRQ
\n
"
);
printk
(
KERN_ERR
"trizeps4_mci_init: MMC/SD: can't request"
"MMC card detect IRQ
\n
"
);
return
err
;
return
-
1
;
}
return
0
;
}
}
static
void
trizeps4_mci_exit
(
struct
device
*
dev
,
void
*
data
)
static
void
trizeps4_mci_exit
(
struct
device
*
dev
,
void
*
data
)
...
@@ -303,22 +365,68 @@ static void trizeps4_mci_exit(struct device *dev, void *data)
...
@@ -303,22 +365,68 @@ static void trizeps4_mci_exit(struct device *dev, void *data)
static
struct
pxamci_platform_data
trizeps4_mci_platform_data
=
{
static
struct
pxamci_platform_data
trizeps4_mci_platform_data
=
{
.
ocr_mask
=
MMC_VDD_32_33
|
MMC_VDD_33_34
,
.
ocr_mask
=
MMC_VDD_32_33
|
MMC_VDD_33_34
,
.
detect_delay
=
1
,
.
init
=
trizeps4_mci_init
,
.
init
=
trizeps4_mci_init
,
.
exit
=
trizeps4_mci_exit
,
.
exit
=
trizeps4_mci_exit
,
.
setpower
=
board_mci_power
,
.
get_ro
=
NULL
,
/* write-protection not supported */
.
setpower
=
NULL
,
/* power-switching not supported */
};
};
/****************************************************************************
* IRDA mode switching on stuart
****************************************************************************/
#ifndef STATUS_LEDS_ON_STUART_PINS
static
short
trizeps_conxs_ircr
;
static
int
trizeps4_irda_startup
(
struct
device
*
dev
)
{
trizeps_conxs_ircr
&=
~
ConXS_IRCR_SD
;
IRCR_writew
(
trizeps_conxs_ircr
);
return
0
;
}
static
void
trizeps4_irda_shutdown
(
struct
device
*
dev
)
{
trizeps_conxs_ircr
|=
ConXS_IRCR_SD
;
IRCR_writew
(
trizeps_conxs_ircr
);
}
static
void
trizeps4_irda_transceiver_mode
(
struct
device
*
dev
,
int
mode
)
{
unsigned
long
flags
;
local_irq_save
(
flags
);
/* Switch mode */
if
(
mode
&
IR_SIRMODE
)
trizeps_conxs_ircr
&=
~
ConXS_IRCR_MODE
;
/* Slow mode */
else
if
(
mode
&
IR_FIRMODE
)
{
trizeps_conxs_ircr
|=
ConXS_IRCR_MODE
;
/* Fast mode */
/* Switch power */
if
(
mode
&
IR_OFF
)
trizeps_conxs_ircr
|=
ConXS_IRCR_SD
;
else
trizeps_conxs_ircr
&=
~
ConXS_IRCR_SD
;
IRCR_writew
(
trizeps_conxs_ircr
);
local_irq_restore
(
flags
);
pxa2xx_transceiver_mode
(
dev
,
mode
);
}
static
struct
pxaficp_platform_data
trizeps4_ficp_platform_data
=
{
static
struct
pxaficp_platform_data
trizeps4_ficp_platform_data
=
{
.
transceiver_cap
=
IR_SIRMODE
|
IR_FIRMODE
|
IR_OFF
,
.
transceiver_cap
=
IR_SIRMODE
|
IR_FIRMODE
|
IR_OFF
,
.
transceiver_mode
=
board_irda_mode
,
.
transceiver_mode
=
trizeps4_irda_transceiver_mode
,
.
startup
=
trizeps4_irda_startup
,
.
shutdown
=
trizeps4_irda_shutdown
,
};
};
#endif
/****************************************************************************
* OHCI USB port
****************************************************************************/
static
int
trizeps4_ohci_init
(
struct
device
*
dev
)
static
int
trizeps4_ohci_init
(
struct
device
*
dev
)
{
{
/* setup Port1 GPIO pin. */
pxa_gpio_mode
(
88
|
GPIO_ALT_FN_1_IN
);
/* USBHPWR1 */
pxa_gpio_mode
(
89
|
GPIO_ALT_FN_2_OUT
);
/* USBHPEN1 */
/* Set the Power Control Polarity Low and Power Sense
/* Set the Power Control Polarity Low and Power Sense
Polarity Low to active low. */
Polarity Low to active low. */
UHCHR
=
(
UHCHR
|
UHCHR_PCPL
|
UHCHR_PSPL
)
&
UHCHR
=
(
UHCHR
|
UHCHR_PCPL
|
UHCHR_PSPL
)
&
...
@@ -327,15 +435,9 @@ static int trizeps4_ohci_init(struct device *dev)
...
@@ -327,15 +435,9 @@ static int trizeps4_ohci_init(struct device *dev)
return
0
;
return
0
;
}
}
static
void
trizeps4_ohci_exit
(
struct
device
*
dev
)
{
;
}
static
struct
pxaohci_platform_data
trizeps4_ohci_platform_data
=
{
static
struct
pxaohci_platform_data
trizeps4_ohci_platform_data
=
{
.
port_mode
=
PMM_PERPORT_MODE
,
.
port_mode
=
PMM_PERPORT_MODE
,
.
init
=
trizeps4_ohci_init
,
.
init
=
trizeps4_ohci_init
,
.
exit
=
trizeps4_ohci_exit
,
};
};
static
struct
map_desc
trizeps4_io_desc
[]
__initdata
=
{
static
struct
map_desc
trizeps4_io_desc
[]
__initdata
=
{
...
@@ -389,10 +491,9 @@ static struct pxafb_mode_info sharp_lcd_mode = {
...
@@ -389,10 +491,9 @@ static struct pxafb_mode_info sharp_lcd_mode = {
static
struct
pxafb_mach_info
sharp_lcd
=
{
static
struct
pxafb_mach_info
sharp_lcd
=
{
.
modes
=
&
sharp_lcd_mode
,
.
modes
=
&
sharp_lcd_mode
,
.
num_modes
=
1
,
.
num_modes
=
1
,
.
lcd_conn
=
LCD_COLOR_DSTN_16BPP
|
LCD_PCLK_EDGE_FALL
,
.
cmap_inverse
=
0
,
.
cmap_inverse
=
0
,
.
cmap_static
=
0
,
.
cmap_static
=
0
,
.
lccr0
=
LCCR0_Color
|
LCCR0_Pas
|
LCCR0_Dual
,
.
lccr3
=
0x0340ff02
,
.
pxafb_backlight_power
=
board_backlight_power
,
.
pxafb_backlight_power
=
board_backlight_power
,
};
};
...
@@ -414,63 +515,39 @@ static struct pxafb_mode_info toshiba_lcd_mode = {
...
@@ -414,63 +515,39 @@ static struct pxafb_mode_info toshiba_lcd_mode = {
static
struct
pxafb_mach_info
toshiba_lcd
=
{
static
struct
pxafb_mach_info
toshiba_lcd
=
{
.
modes
=
&
toshiba_lcd_mode
,
.
modes
=
&
toshiba_lcd_mode
,
.
num_modes
=
1
,
.
num_modes
=
1
,
.
lcd_conn
=
(
LCD_COLOR_TFT_16BPP
|
LCD_PCLK_EDGE_FALL
),
.
cmap_inverse
=
0
,
.
cmap_inverse
=
0
,
.
cmap_static
=
0
,
.
cmap_static
=
0
,
.
lccr0
=
LCCR0_Color
|
LCCR0_Act
,
.
lccr3
=
0x03400002
,
.
pxafb_backlight_power
=
board_backlight_power
,
.
pxafb_backlight_power
=
board_backlight_power
,
};
};
static
void
__init
trizeps4_init
(
void
)
static
void
__init
trizeps4_init
(
void
)
{
{
platform_add_devices
(
trizeps4_devices
,
ARRAY_SIZE
(
trizeps4_devices
));
pxa2xx_mfp_config
(
ARRAY_AND_SIZE
(
trizeps4_pin_config
));
if
(
machine_is_trizeps4wl
())
{
pxa2xx_mfp_config
(
ARRAY_AND_SIZE
(
trizeps4wl_pin_config
));
platform_add_devices
(
trizeps4wl_devices
,
ARRAY_SIZE
(
trizeps4wl_devices
));
}
else
{
platform_add_devices
(
trizeps4_devices
,
ARRAY_SIZE
(
trizeps4_devices
));
}
/* set_pxa_fb_info(&sharp_lcd); */
if
(
0
)
/* dont know how to determine LCD */
set_pxa_fb_info
(
&
sharp_lcd
);
else
set_pxa_fb_info
(
&
toshiba_lcd
);
set_pxa_fb_info
(
&
toshiba_lcd
);
pxa_set_mci_info
(
&
trizeps4_mci_platform_data
);
pxa_set_mci_info
(
&
trizeps4_mci_platform_data
);
#ifndef STATUS_LEDS_ON_STUART_PINS
pxa_set_ficp_info
(
&
trizeps4_ficp_platform_data
);
pxa_set_ficp_info
(
&
trizeps4_ficp_platform_data
);
#endif
pxa_set_ohci_info
(
&
trizeps4_ohci_platform_data
);
pxa_set_ohci_info
(
&
trizeps4_ohci_platform_data
);
pxa_set_ac97_info
(
NULL
);
pxa_set_ac97_info
(
NULL
);
}
pxa_set_i2c_info
(
NULL
);
i2c_register_board_info
(
0
,
trizeps4_i2c_devices
,
static
void
__init
trizeps4_map_io
(
void
)
ARRAY_SIZE
(
trizeps4_i2c_devices
));
{
pxa_map_io
();
iotable_init
(
trizeps4_io_desc
,
ARRAY_SIZE
(
trizeps4_io_desc
));
/* for DiskOnChip */
pxa_gpio_mode
(
GPIO15_nCS_1_MD
);
/* for off-module PIC on ConXS board */
pxa_gpio_mode
(
GPIO_PIC
|
GPIO_IN
);
/* UCB1400 irq */
pxa_gpio_mode
(
GPIO_UCB1400
|
GPIO_IN
);
/* for DM9000 LAN */
pxa_gpio_mode
(
GPIO78_nCS_2_MD
);
pxa_gpio_mode
(
GPIO_DM9000
|
GPIO_IN
);
/* for PCMCIA device */
pxa_gpio_mode
(
GPIO_PCD
|
GPIO_IN
);
pxa_gpio_mode
(
GPIO_PRDY
|
GPIO_IN
);
/* for I2C adapter */
pxa_gpio_mode
(
GPIO117_I2CSCL_MD
);
pxa_gpio_mode
(
GPIO118_I2CSDA_MD
);
/* MMC_DET s.o. */
pxa_gpio_mode
(
GPIO_MMC_DET
|
GPIO_IN
);
/* whats that for ??? */
pxa_gpio_mode
(
GPIO79_nCS_3_MD
);
#ifdef CONFIG_LEDS
pxa_gpio_mode
(
GPIO_SYS_BUSY_LED
|
GPIO_OUT
);
/* LED1 */
pxa_gpio_mode
(
GPIO_HEARTBEAT_LED
|
GPIO_OUT
);
/* LED2 */
#endif
#ifdef CONFIG_MACH_TRIZEPS4_CONXS
#ifdef CONFIG_IDE_PXA_CF
#ifdef CONFIG_IDE_PXA_CF
/* if boot direct from compact flash dont disable power */
/* if boot direct from compact flash dont disable power */
trizeps_conxs_bcr
=
0x0009
;
trizeps_conxs_bcr
=
0x0009
;
...
@@ -478,18 +555,24 @@ static void __init trizeps4_map_io(void)
...
@@ -478,18 +555,24 @@ static void __init trizeps4_map_io(void)
/* this is the reset value */
/* this is the reset value */
trizeps_conxs_bcr
=
0x00A0
;
trizeps_conxs_bcr
=
0x00A0
;
#endif
#endif
ConXS_BCR
=
trizeps_conxs_bcr
;
BCR_writew
(
trizeps_conxs_bcr
);
#endif
board_backlight_power
(
1
);
}
static
void
__init
trizeps4_map_io
(
void
)
{
pxa_map_io
();
iotable_init
(
trizeps4_io_desc
,
ARRAY_SIZE
(
trizeps4_io_desc
));
#warning FIXME - accessing PM registers directly is deprecated
if
((
MSC0
&
0x8
)
&&
(
BOOT_DEF
&
0x1
))
{
PWER
=
0x00000002
;
/* if flash is 16 bit wide its a Trizeps4 WL */
PFER
=
0x00000000
;
__machine_arch_type
=
MACH_TYPE_TRIZEPS4WL
;
PRER
=
0x0000000
2
;
trizeps4_flash_data
[
0
].
width
=
2
;
PGSR0
=
0x0158C000
;
}
else
{
PGSR1
=
0x00FF0080
;
/* if flash is 32 bit wide its a Trizeps4 */
PGSR2
=
0x0001C00
4
;
__machine_arch_type
=
MACH_TYPE_TRIZEPS
4
;
/* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
trizeps4_flash_data
[
0
].
width
=
4
;
PCFR
|=
PCFR_OPDE
;
}
}
}
MACHINE_START
(
TRIZEPS4
,
"Keith und Koep Trizeps IV module"
)
MACHINE_START
(
TRIZEPS4
,
"Keith und Koep Trizeps IV module"
)
...
@@ -503,3 +586,13 @@ MACHINE_START(TRIZEPS4, "Keith und Koep Trizeps IV module")
...
@@ -503,3 +586,13 @@ MACHINE_START(TRIZEPS4, "Keith und Koep Trizeps IV module")
.
timer
=
&
pxa_timer
,
.
timer
=
&
pxa_timer
,
MACHINE_END
MACHINE_END
MACHINE_START
(
TRIZEPS4WL
,
"Keith und Koep Trizeps IV-WL module"
)
/* MAINTAINER("Jürgen Schindele") */
.
phys_io
=
0x40000000
,
.
io_pg_offst
=
(
io_p2v
(
0x40000000
)
>>
18
)
&
0xfffc
,
.
boot_params
=
TRIZEPS4_SDRAM_BASE
+
0x100
,
.
init_machine
=
trizeps4_init
,
.
map_io
=
trizeps4_map_io
,
.
init_irq
=
pxa27x_init_irq
,
.
timer
=
&
pxa_timer
,
MACHINE_END
drivers/pcmcia/Kconfig
View file @
5ff7f78a
...
@@ -220,7 +220,7 @@ config PCMCIA_PXA2XX
...
@@ -220,7 +220,7 @@ config PCMCIA_PXA2XX
tristate "PXA2xx support"
tristate "PXA2xx support"
depends on ARM && ARCH_PXA && PCMCIA
depends on ARM && ARCH_PXA && PCMCIA
depends on (ARCH_LUBBOCK || MACH_MAINSTONE || PXA_SHARPSL \
depends on (ARCH_LUBBOCK || MACH_MAINSTONE || PXA_SHARPSL \
|| MACH_ARMCORE || ARCH_PXA_PALM)
|| MACH_ARMCORE || ARCH_PXA_PALM
|| TRIZEPS_PCMCIA
)
help
help
Say Y here to include support for the PXA2xx PCMCIA controller
Say Y here to include support for the PXA2xx PCMCIA controller
...
...
drivers/pcmcia/Makefile
View file @
5ff7f78a
...
@@ -72,5 +72,6 @@ pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK) += pxa2xx_lubbock.o sa1111_generic.o
...
@@ -72,5 +72,6 @@ pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK) += pxa2xx_lubbock.o sa1111_generic.o
pxa2xx_cs-$(CONFIG_MACH_MAINSTONE)
+=
pxa2xx_mainstone.o
pxa2xx_cs-$(CONFIG_MACH_MAINSTONE)
+=
pxa2xx_mainstone.o
pxa2xx_cs-$(CONFIG_PXA_SHARPSL)
+=
pxa2xx_sharpsl.o
pxa2xx_cs-$(CONFIG_PXA_SHARPSL)
+=
pxa2xx_sharpsl.o
pxa2xx_cs-$(CONFIG_MACH_ARMCORE)
+=
pxa2xx_cm_x2xx.o pxa2xx_cm_x255.o pxa2xx_cm_x270.o
pxa2xx_cs-$(CONFIG_MACH_ARMCORE)
+=
pxa2xx_cm_x2xx.o pxa2xx_cm_x255.o pxa2xx_cm_x270.o
pxa2xx_cs-$(CONFIG_TRIZEPS_PCMCIA)
+=
pxa2xx_trizeps.o
pxa2xx_cs-$(CONFIG_MACH_PALMTX)
+=
pxa2xx_palmtx.o
pxa2xx_cs-$(CONFIG_MACH_PALMTX)
+=
pxa2xx_palmtx.o
drivers/pcmcia/pxa2xx_trizeps4.c
0 → 100644
View file @
5ff7f78a
/*
* linux/drivers/pcmcia/pxa2xx_trizeps4.c
*
* TRIZEPS PCMCIA specific routines.
*
* Author: Jürgen Schindele
* Created: 20 02, 2006
* Copyright: Jürgen Schindele
*
* 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/gpio.h>
#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include <asm/mach-types.h>
#include <asm/irq.h>
#include <mach/hardware.h>
#include <mach/pxa-regs.h>
#include <mach/trizeps4.h>
#include "soc_common.h"
extern
void
board_pcmcia_power
(
int
power
);
static
struct
pcmcia_irqs
irqs
[]
=
{
{
0
,
IRQ_GPIO
(
GPIO_PCD
),
"cs0_cd"
}
/* on other baseboards we can have more inputs */
};
static
int
trizeps_pcmcia_hw_init
(
struct
soc_pcmcia_socket
*
skt
)
{
int
ret
,
i
;
/* we dont have voltage/card/ready detection
* so we dont need interrupts for it
*/
switch
(
skt
->
nr
)
{
case
0
:
if
(
gpio_request
(
GPIO_PRDY
,
"cf_irq"
)
<
0
)
{
pr_err
(
"%s: sock %d unable to request gpio %d
\n
"
,
__func__
,
skt
->
nr
,
GPIO_PRDY
);
return
-
EBUSY
;
}
if
(
gpio_direction_input
(
GPIO_PRDY
)
<
0
)
{
pr_err
(
"%s: sock %d unable to set input gpio %d
\n
"
,
__func__
,
skt
->
nr
,
GPIO_PRDY
);
gpio_free
(
GPIO_PRDY
);
return
-
EINVAL
;
}
skt
->
irq
=
IRQ_GPIO
(
GPIO_PRDY
);
break
;
#ifndef CONFIG_MACH_TRIZEPS_CONXS
case
1
:
#endif
default:
break
;
}
/* release the reset of this card */
pr_debug
(
"%s: sock %d irq %d
\n
"
,
__func__
,
skt
->
nr
,
skt
->
irq
);
/* supplementory irqs for the socket */
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
irqs
);
i
++
)
{
if
(
irqs
[
i
].
sock
!=
skt
->
nr
)
continue
;
if
(
gpio_request
(
IRQ_TO_GPIO
(
irqs
[
i
].
irq
),
irqs
[
i
].
str
)
<
0
)
{
pr_err
(
"%s: sock %d unable to request gpio %d
\n
"
,
__func__
,
skt
->
nr
,
IRQ_TO_GPIO
(
irqs
[
i
].
irq
));
ret
=
-
EBUSY
;
goto
error
;
}
if
(
gpio_direction_input
(
IRQ_TO_GPIO
(
irqs
[
i
].
irq
))
<
0
)
{
pr_err
(
"%s: sock %d unable to set input gpio %d
\n
"
,
__func__
,
skt
->
nr
,
IRQ_TO_GPIO
(
irqs
[
i
].
irq
));
ret
=
-
EINVAL
;
goto
error
;
}
}
return
soc_pcmcia_request_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
error:
for
(;
i
>=
0
;
i
--
)
{
gpio_free
(
IRQ_TO_GPIO
(
irqs
[
i
].
irq
));
}
return
(
ret
);
}
static
void
trizeps_pcmcia_hw_shutdown
(
struct
soc_pcmcia_socket
*
skt
)
{
int
i
;
/* free allocated gpio's */
gpio_free
(
GPIO_PRDY
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
irqs
);
i
++
)
gpio_free
(
IRQ_TO_GPIO
(
irqs
[
i
].
irq
));
}
static
unsigned
long
trizeps_pcmcia_status
[
2
];
static
void
trizeps_pcmcia_socket_state
(
struct
soc_pcmcia_socket
*
skt
,
struct
pcmcia_state
*
state
)
{
unsigned
short
status
=
0
,
change
;
status
=
CFSR_readw
();
change
=
(
status
^
trizeps_pcmcia_status
[
skt
->
nr
])
&
ConXS_CFSR_BVD_MASK
;
if
(
change
)
{
trizeps_pcmcia_status
[
skt
->
nr
]
=
status
;
if
(
status
&
ConXS_CFSR_BVD1
)
{
/* enable_irq empty */
}
else
{
/* disable_irq empty */
}
}
switch
(
skt
->
nr
)
{
case
0
:
/* just fill in fix states */
state
->
detect
=
gpio_get_value
(
GPIO_PCD
)
?
0
:
1
;
state
->
ready
=
gpio_get_value
(
GPIO_PRDY
)
?
1
:
0
;
state
->
bvd1
=
(
status
&
ConXS_CFSR_BVD1
)
?
1
:
0
;
state
->
bvd2
=
(
status
&
ConXS_CFSR_BVD2
)
?
1
:
0
;
state
->
vs_3v
=
(
status
&
ConXS_CFSR_VS1
)
?
0
:
1
;
state
->
vs_Xv
=
(
status
&
ConXS_CFSR_VS2
)
?
0
:
1
;
state
->
wrprot
=
0
;
/* not available */
break
;
#ifndef CONFIG_MACH_TRIZEPS_CONXS
/* on ConXS we only have one slot. Second is inactive */
case
1
:
state
->
detect
=
0
;
state
->
ready
=
0
;
state
->
bvd1
=
0
;
state
->
bvd2
=
0
;
state
->
vs_3v
=
0
;
state
->
vs_Xv
=
0
;
state
->
wrprot
=
0
;
break
;
#endif
}
}
static
int
trizeps_pcmcia_configure_socket
(
struct
soc_pcmcia_socket
*
skt
,
const
socket_state_t
*
state
)
{
int
ret
=
0
;
unsigned
short
power
=
0
;
/* we do nothing here just check a bit */
switch
(
state
->
Vcc
)
{
case
0
:
power
&=
0xfc
;
break
;
case
33
:
power
|=
ConXS_BCR_S0_VCC_3V3
;
break
;
case
50
:
pr_err
(
"%s(): Vcc 5V not supported in socket
\n
"
,
__func__
);
break
;
default:
pr_err
(
"%s(): bad Vcc %u
\n
"
,
__func__
,
state
->
Vcc
);
ret
=
-
1
;
}
switch
(
state
->
Vpp
)
{
case
0
:
power
&=
0xf3
;
break
;
case
33
:
power
|=
ConXS_BCR_S0_VPP_3V3
;
break
;
case
120
:
pr_err
(
"%s(): Vpp 12V not supported in socket
\n
"
,
__func__
);
break
;
default:
if
(
state
->
Vpp
!=
state
->
Vcc
)
{
pr_err
(
"%s(): bad Vpp %u
\n
"
,
__func__
,
state
->
Vpp
);
ret
=
-
1
;
}
}
switch
(
skt
->
nr
)
{
case
0
:
/* we only have 3.3V */
board_pcmcia_power
(
power
);
break
;
#ifndef CONFIG_MACH_TRIZEPS_CONXS
/* on ConXS we only have one slot. Second is inactive */
case
1
:
#endif
default:
break
;
}
return
ret
;
}
static
void
trizeps_pcmcia_socket_init
(
struct
soc_pcmcia_socket
*
skt
)
{
/* default is on */
board_pcmcia_power
(
0x9
);
}
static
void
trizeps_pcmcia_socket_suspend
(
struct
soc_pcmcia_socket
*
skt
)
{
board_pcmcia_power
(
0x0
);
}
static
struct
pcmcia_low_level
trizeps_pcmcia_ops
=
{
.
owner
=
THIS_MODULE
,
.
hw_init
=
trizeps_pcmcia_hw_init
,
.
hw_shutdown
=
trizeps_pcmcia_hw_shutdown
,
.
socket_state
=
trizeps_pcmcia_socket_state
,
.
configure_socket
=
trizeps_pcmcia_configure_socket
,
.
socket_init
=
trizeps_pcmcia_socket_init
,
.
socket_suspend
=
trizeps_pcmcia_socket_suspend
,
#ifdef CONFIG_MACH_TRIZEPS_CONXS
.
nr
=
1
,
#else
.
nr
=
2
,
#endif
.
first
=
0
,
};
static
struct
platform_device
*
trizeps_pcmcia_device
;
static
int
__init
trizeps_pcmcia_init
(
void
)
{
int
ret
;
trizeps_pcmcia_device
=
platform_device_alloc
(
"pxa2xx-pcmcia"
,
-
1
);
if
(
!
trizeps_pcmcia_device
)
return
-
ENOMEM
;
ret
=
platform_device_add_data
(
trizeps_pcmcia_device
,
&
trizeps_pcmcia_ops
,
sizeof
(
trizeps_pcmcia_ops
));
if
(
ret
==
0
)
ret
=
platform_device_add
(
trizeps_pcmcia_device
);
if
(
ret
)
platform_device_put
(
trizeps_pcmcia_device
);
return
ret
;
}
static
void
__exit
trizeps_pcmcia_exit
(
void
)
{
platform_device_unregister
(
trizeps_pcmcia_device
);
}
fs_initcall
(
trizeps_pcmcia_init
);
module_exit
(
trizeps_pcmcia_exit
);
MODULE_LICENSE
(
"GPL"
);
MODULE_AUTHOR
(
"Juergen Schindele"
);
MODULE_ALIAS
(
"platform:pxa2xx-pcmcia"
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment