Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
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
Expand all
Hide 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
ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \
ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \
ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || \
ARCH_AT91 ||
MACH_TRIZEPS4 ||
ARCH_DAVINCI || \
ARCH_AT91 || ARCH_DAVINCI || \
ARCH_KS8695 || MACH_RD88F5182
help
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
Say Y here if you intend to run this kernel on a Toshiba
e800 family PDA.
config TRIZEPS_PXA
bool "PXA based Keith und Koep Trizeps DIMM-Modules"
config MACH_TRIZEPS4
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 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"
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
bool "CompuLab EM-x270 platform"
...
...
arch/arm/mach-pxa/Makefile
View file @
5ff7f78a
...
...
@@ -64,7 +64,6 @@ led-y := leds.o
led-$(CONFIG_ARCH_LUBBOCK)
+=
leds-lubbock.o
led-$(CONFIG_MACH_MAINSTONE)
+=
leds-mainstone.o
led-$(CONFIG_ARCH_PXA_IDP)
+=
leds-idp.o
led-$(CONFIG_MACH_TRIZEPS4)
+=
leds-trizeps4.o
obj-$(CONFIG_LEDS)
+=
$
(
led-y
)
...
...
arch/arm/mach-pxa/include/mach/trizeps4.h
View file @
5ff7f78a
...
...
@@ -17,11 +17,16 @@
#define TRIZEPS4_PIC_PHYS (PXA_CS3_PHYS)
/* Logic chip on ConXS-Board */
#define TRIZEPS4_SDRAM_BASE 0xa0000000
/* SDRAM region */
#define TRIZEPS4_CFSR_PHYS (PXA_CS3_PHYS)
/* Logic chip on ConXS-Board CSFR register */
#define TRIZEPS4_BOCR_PHYS (PXA_CS3_PHYS+0x02000000)
/* Logic chip on ConXS-Board BOCR register */
#define TRIZEPS4_IRCR_PHYS (PXA_CS3_PHYS+0x02400000)
/* Logic chip on ConXS-Board IRCR register*/
#define TRIZEPS4_UPSR_PHYS (PXA_CS3_PHYS+0x02800000)
/* Logic chip on ConXS-Board UPSR register*/
#define TRIZEPS4_DICR_PHYS (PXA_CS3_PHYS+0x03800000)
/* Logic chip on ConXS-Board DICR register*/
/* Logic on ConXS-board CSFR register*/
#define TRIZEPS4_CFSR_PHYS (PXA_CS3_PHYS)
/* Logic on ConXS-board BOCR register*/
#define TRIZEPS4_BOCR_PHYS (PXA_CS3_PHYS+0x02000000)
/* 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 */
#define TRIZEPS4_DISK_VIRT 0xF0000000
/* Disk On Chip region */
...
...
@@ -54,6 +59,15 @@
#define GPIO_MMC_DET 12
#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 */
#define GPIO_SYS_BUSY_LED 46
#define GPIO_HEARTBEAT_LED 47
...
...
@@ -62,24 +76,66 @@
#define GPIO_PIC 0
#define TRIZEPS4_PIC_IRQ IRQ_GPIO(GPIO_PIC)
#define CFSR_P2V(x) ((x) - TRIZEPS4_CFSR_PHYS + TRIZEPS4_CFSR_VIRT)
#define CFSR_V2P(x) ((x) - TRIZEPS4_CFSR_VIRT + TRIZEPS4_CFSR_PHYS)
#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_V2P(x) ((x) - TRIZEPS4_CFSR_VIRT + TRIZEPS4_CFSR_PHYS)
#define BCR_P2V(x)
((x) - TRIZEPS4_BOCR_PHYS + TRIZEPS4_BOCR_VIRT)
#define BCR_V2P(x)
((x) - TRIZEPS4_BOCR_VIRT + TRIZEPS4_BOCR_PHYS)
#define BCR_P2V(x) ((x) - TRIZEPS4_BOCR_PHYS + TRIZEPS4_BOCR_VIRT)
#define BCR_V2P(x) ((x) - TRIZEPS4_BOCR_VIRT + TRIZEPS4_BOCR_PHYS)
#define DCR_P2V(x) ((x) - TRIZEPS4_DICR_PHYS + TRIZEPS4_DICR_VIRT)
#define DCR_V2P(x) ((x) - TRIZEPS4_DICR_VIRT + TRIZEPS4_DICR_PHYS)
#define DCR_P2V(x) ((x) - TRIZEPS4_DICR_PHYS + TRIZEPS4_DICR_VIRT)
#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__
#define ConXS_CFSR (*((volatile unsigned short *)CFSR_P2V(0x0C000000)))
#define ConXS_BCR (*((volatile unsigned short *)BCR_P2V(0x0E000000)))
#define ConXS_DCR (*((volatile unsigned short *)DCR_P2V(0x0F800000)))
static
inline
unsigned
short
CFSR_readw
(
void
)
{
/* [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
#define ConXS_CFSR CFSR_P2V(0x0C000000)
#define ConXS_BCR BCR_P2V(0x0E000000)
#define ConXS_DCR DCR_P2V(0x0F800000)
#define ConXS_IRCR IRCR_P2V(0x0F800000)
#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_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)
leds_event
=
mainstone_leds_event
;
if
(
machine_is_pxa_idp
())
leds_event
=
idp_leds_event
;
if
(
machine_is_trizeps4
())
leds_event
=
trizeps4_leds_event
;
leds_event
(
led_start
);
return
0
;
...
...
arch/arm/mach-pxa/trizeps4.c
View file @
5ff7f78a
This diff is collapsed.
Click to expand it.
drivers/pcmcia/Kconfig
View file @
5ff7f78a
...
...
@@ -220,7 +220,7 @@ config PCMCIA_PXA2XX
tristate "PXA2xx support"
depends on ARM && ARCH_PXA && PCMCIA
depends on (ARCH_LUBBOCK || MACH_MAINSTONE || PXA_SHARPSL \
|| MACH_ARMCORE || ARCH_PXA_PALM)
|| MACH_ARMCORE || ARCH_PXA_PALM
|| TRIZEPS_PCMCIA
)
help
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
pxa2xx_cs-$(CONFIG_MACH_MAINSTONE)
+=
pxa2xx_mainstone.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_TRIZEPS_PCMCIA)
+=
pxa2xx_trizeps.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