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
f8659154
Commit
f8659154
authored
May 29, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk/linux-2.6-pcmcia
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
8dec976d
f222a1f8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
177 additions
and
0 deletions
+177
-0
drivers/pcmcia/Makefile
drivers/pcmcia/Makefile
+1
-0
drivers/pcmcia/pxa2xx_mainstone.c
drivers/pcmcia/pxa2xx_mainstone.c
+176
-0
No files found.
drivers/pcmcia/Makefile
View file @
f8659154
...
...
@@ -48,4 +48,5 @@ sa1100_cs-$(CONFIG_SA1100_TRIZEPS) += sa1100_trizeps.o
sa1100_cs-$(CONFIG_SA1100_YOPY)
+=
sa1100_yopy.o
pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK)
+=
pxa2xx_lubbock.o sa1111_generic.o
pxa2xx_cs-$(CONFIG_MACH_MAINSTONE)
+=
pxa2xx_mainstone.o
drivers/pcmcia/pxa2xx_mainstone.c
0 → 100644
View file @
f8659154
/*
* linux/drivers/pcmcia/pxa2xx_mainstone.c
*
* Mainstone PCMCIA specific routines.
*
* Created: May 12, 2004
* Author: Nicolas Pitre
* Copyright: MontaVista Software Inc.
*
* 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/device.h>
#include <pcmcia/ss.h>
#include <asm/hardware.h>
#include <asm/irq.h>
#include "soc_common.h"
static
struct
pcmcia_irqs
irqs
[]
=
{
{
0
,
MAINSTONE_S0_CD_IRQ
,
"PCMCIA0 CD"
},
{
1
,
MAINSTONE_S1_CD_IRQ
,
"PCMCIA1 CD"
},
{
0
,
MAINSTONE_S0_STSCHG_IRQ
,
"PCMCIA0 STSCHG"
},
{
1
,
MAINSTONE_S1_STSCHG_IRQ
,
"PCMCIA1 STSCHG"
},
};
static
int
mst_pcmcia_hw_init
(
struct
soc_pcmcia_socket
*
skt
)
{
skt
->
irq
=
(
skt
->
nr
==
0
)
?
MAINSTONE_S0_IRQ
:
MAINSTONE_S1_IRQ
;
return
soc_pcmcia_request_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
}
static
void
mst_pcmcia_hw_shutdown
(
struct
soc_pcmcia_socket
*
skt
)
{
soc_pcmcia_free_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
}
static
unsigned
long
mst_pcmcia_status
[
2
];
static
void
mst_pcmcia_socket_state
(
struct
soc_pcmcia_socket
*
skt
,
struct
pcmcia_state
*
state
)
{
unsigned
long
status
,
flip
;
status
=
(
skt
->
nr
==
0
)
?
MST_PCMCIA0
:
MST_PCMCIA1
;
flip
=
(
status
^
mst_pcmcia_status
[
skt
->
nr
])
&
MST_PCMCIA_nSTSCHG_BVD1
;
/*
* Workaround for STSCHG which can't be deasserted:
* We therefore disable/enable corresponding IRQs
* as needed to avoid IRQ locks.
*/
if
(
flip
)
{
mst_pcmcia_status
[
skt
->
nr
]
=
status
;
if
(
status
&
MST_PCMCIA_nSTSCHG_BVD1
)
enable_irq
(
(
skt
->
nr
==
0
)
?
MAINSTONE_S0_STSCHG_IRQ
:
MAINSTONE_S1_STSCHG_IRQ
);
else
disable_irq
(
(
skt
->
nr
==
0
)
?
MAINSTONE_S0_STSCHG_IRQ
:
MAINSTONE_S1_STSCHG_IRQ
);
}
state
->
detect
=
(
status
&
MST_PCMCIA_nCD
)
?
0
:
1
;
state
->
ready
=
(
status
&
MST_PCMCIA_nIRQ
)
?
1
:
0
;
state
->
bvd1
=
(
status
&
MST_PCMCIA_nSTSCHG_BVD1
)
?
1
:
0
;
state
->
bvd2
=
(
status
&
MST_PCMCIA_nSPKR_BVD2
)
?
1
:
0
;
state
->
vs_3v
=
(
status
&
MST_PCMCIA_nVS1
)
?
0
:
1
;
state
->
vs_Xv
=
(
status
&
MST_PCMCIA_nVS2
)
?
0
:
1
;
state
->
wrprot
=
0
;
/* not available */
}
static
int
mst_pcmcia_configure_socket
(
struct
soc_pcmcia_socket
*
skt
,
const
socket_state_t
*
state
)
{
unsigned
long
power
=
0
;
int
ret
=
0
;
switch
(
state
->
Vcc
)
{
case
0
:
power
|=
MST_PCMCIA_PWR_VCC_0
;
break
;
case
33
:
power
|=
MST_PCMCIA_PWR_VCC_33
;
break
;
case
50
:
power
|=
MST_PCMCIA_PWR_VCC_50
;
break
;
default:
printk
(
KERN_ERR
"%s(): bad Vcc %u
\n
"
,
__FUNCTION__
,
state
->
Vcc
);
ret
=
-
1
;
}
switch
(
state
->
Vpp
)
{
case
0
:
power
|=
MST_PCMCIA_PWR_VPP_0
;
break
;
case
120
:
power
|=
MST_PCMCIA_PWR_VPP_120
;
break
;
default:
if
(
state
->
Vpp
==
state
->
Vcc
)
{
power
|=
MST_PCMCIA_PWR_VPP_VCC
;
}
else
{
printk
(
KERN_ERR
"%s(): bad Vpp %u
\n
"
,
__FUNCTION__
,
state
->
Vpp
);
ret
=
-
1
;
}
}
if
(
state
->
flags
&
SS_RESET
)
power
|=
MST_PCMCIA_RESET
;
switch
(
skt
->
nr
)
{
case
0
:
MST_PCMCIA0
=
power
;
break
;
case
1
:
MST_PCMCIA1
=
power
;
break
;
default:
ret
=
-
1
;
}
return
ret
;
}
static
void
mst_pcmcia_socket_init
(
struct
soc_pcmcia_socket
*
skt
)
{
}
static
void
mst_pcmcia_socket_suspend
(
struct
soc_pcmcia_socket
*
skt
)
{
}
static
struct
pcmcia_low_level
mst_pcmcia_ops
=
{
.
owner
=
THIS_MODULE
,
.
hw_init
=
mst_pcmcia_hw_init
,
.
hw_shutdown
=
mst_pcmcia_hw_shutdown
,
.
socket_state
=
mst_pcmcia_socket_state
,
.
configure_socket
=
mst_pcmcia_configure_socket
,
.
socket_init
=
mst_pcmcia_socket_init
,
.
socket_suspend
=
mst_pcmcia_socket_suspend
,
.
nr
=
2
,
};
static
struct
platform_device
*
mst_pcmcia_device
;
static
int
__init
mst_pcmcia_init
(
void
)
{
int
ret
;
mst_pcmcia_device
=
kmalloc
(
sizeof
(
*
mst_pcmcia_device
),
GFP_KERNEL
);
if
(
!
mst_pcmcia_device
)
return
-
ENOMEM
;
memset
(
mst_pcmcia_device
,
0
,
sizeof
(
*
mst_pcmcia_device
));
mst_pcmcia_device
->
name
=
"pxa2xx-pcmcia"
;
mst_pcmcia_device
->
dev
.
platform_data
=
&
mst_pcmcia_ops
;
ret
=
platform_device_register
(
mst_pcmcia_device
);
if
(
ret
)
kfree
(
mst_pcmcia_device
);
return
ret
;
}
static
void
__exit
mst_pcmcia_exit
(
void
)
{
/*
* This call is supposed to free our mst_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
(
mst_pcmcia_device
);
}
module_init
(
mst_pcmcia_init
);
module_exit
(
mst_pcmcia_exit
);
MODULE_LICENSE
(
"GPL"
);
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