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
1e231efe
Commit
1e231efe
authored
Sep 06, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/home/rmk/linux-2.6-arm
parents
ef88b7db
0ce7625f
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
115 additions
and
74 deletions
+115
-74
arch/arm/common/scoop.c
arch/arm/common/scoop.c
+6
-0
arch/arm/mach-pxa/corgi.c
arch/arm/mach-pxa/corgi.c
+12
-0
arch/arm/mach-pxa/poodle.c
arch/arm/mach-pxa/poodle.c
+12
-0
arch/arm/mach-s3c2410/mach-n30.c
arch/arm/mach-s3c2410/mach-n30.c
+10
-20
drivers/pcmcia/pxa2xx_sharpsl.c
drivers/pcmcia/pxa2xx_sharpsl.c
+62
-52
include/asm-arm/hardware/scoop.h
include/asm-arm/hardware/scoop.h
+13
-0
include/asm-arm/mach/time.h
include/asm-arm/mach/time.h
+0
-2
No files found.
arch/arm/common/scoop.c
View file @
1e231efe
...
...
@@ -17,6 +17,12 @@
#define SCOOP_REG(d,adr) (*(volatile unsigned short*)(d +(adr)))
/* PCMCIA to Scoop linkage structures for pxa2xx_sharpsl.c
There is no easy way to link multiple scoop devices into one
single entity for the pxa2xx_pcmcia device */
int
scoop_num
;
struct
scoop_pcmcia_dev
*
scoop_devs
;
struct
scoop_dev
{
void
*
base
;
spinlock_t
scoop_lock
;
...
...
arch/arm/mach-pxa/corgi.c
View file @
1e231efe
...
...
@@ -60,6 +60,15 @@ static struct scoop_config corgi_scoop_setup = {
.
io_out
=
CORGI_SCOOP_IO_OUT
,
};
static
struct
scoop_pcmcia_dev
corgi_pcmcia_scoop
[]
=
{
{
.
dev
=
&
corgiscoop_device
.
dev
,
.
irq
=
CORGI_IRQ_GPIO_CF_IRQ
,
.
cd_irq
=
CORGI_IRQ_GPIO_CF_CD
,
.
cd_irq_str
=
"PCMCIA0 CD"
,
},
};
struct
platform_device
corgiscoop_device
=
{
.
name
=
"sharp-scoop"
,
.
id
=
-
1
,
...
...
@@ -241,6 +250,9 @@ static void __init corgi_init(void)
pxa_set_udc_info
(
&
udc_info
);
pxa_set_mci_info
(
&
corgi_mci_platform_data
);
scoop_num
=
1
;
scoop_devs
=
&
corgi_pcmcia_scoop
[
0
];
platform_add_devices
(
devices
,
ARRAY_SIZE
(
devices
));
}
...
...
arch/arm/mach-pxa/poodle.c
View file @
1e231efe
...
...
@@ -62,6 +62,15 @@ struct platform_device poodle_scoop_device = {
.
resource
=
poodle_scoop_resources
,
};
static
struct
scoop_pcmcia_dev
poodle_pcmcia_scoop
[]
=
{
{
.
dev
=
&
poodle_scoop_device
.
dev
,
.
irq
=
POODLE_IRQ_GPIO_CF_IRQ
,
.
cd_irq
=
POODLE_IRQ_GPIO_CF_CD
,
.
cd_irq_str
=
"PCMCIA0 CD"
,
},
};
/* LoCoMo device */
static
struct
resource
locomo_resources
[]
=
{
...
...
@@ -147,6 +156,9 @@ static void __init poodle_init(void)
set_pxa_fb_info
(
&
poodle_fb_info
);
scoop_num
=
1
;
scoop_devs
=
&
poodle_pcmcia_scoop
[
0
];
ret
=
platform_add_devices
(
devices
,
ARRAY_SIZE
(
devices
));
if
(
ret
)
{
printk
(
KERN_WARNING
"poodle: Unable to register LoCoMo device
\n
"
);
...
...
arch/arm/mach-s3c2410/mach-n30.c
View file @
1e231efe
...
...
@@ -110,34 +110,24 @@ void __init n30_init_irq(void)
s3c24xx_init_irq
();
}
static
int
n30_usbstart_thread
(
void
*
unused
)
{
/* Turn off suspend on both USB ports, and switch the
* selectable USB port to USB device mode. */
writel
(
readl
(
S3C2410_MISCCR
)
&
~
0x00003008
,
S3C2410_MISCCR
);
/* Turn off the D+ pull up for 3 seconds so that the USB host
* at the other end will do a rescan of the USB bus. */
s3c2410_gpio_setpin
(
S3C2410_GPB3
,
0
);
msleep_interruptible
(
3
*
HZ
);
s3c2410_gpio_setpin
(
S3C2410_GPB3
,
1
);
return
0
;
}
/* GPB3 is the line that controls the pull-up for the USB D+ line */
void
__init
n30_init
(
void
)
{
s3c_device_i2c
.
dev
.
platform_data
=
&
n30_i2ccfg
;
kthread_run
(
n30_usbstart_thread
,
NULL
,
"n30_usbstart"
);
/* Turn off suspend on both USB ports, and switch the
* selectable USB port to USB device mode. */
s3c2410_modify_misccr
(
S3C2410_MISCCR_USBHOST
|
S3C2410_MISCCR_USBSUSPND0
|
S3C2410_MISCCR_USBSUSPND1
,
0x0
);
}
MACHINE_START
(
N30
,
"Acer-N30"
)
/* Maintainer: Christer Weinigel <christer@weinigel.se>, Ben Dooks <ben-linux@fluff.org> */
/* Maintainer: Christer Weinigel <christer@weinigel.se>,
Ben Dooks <ben-linux@fluff.org>
*/
.
phys_ram
=
S3C2410_SDRAM_PA
,
.
phys_io
=
S3C2410_PA_UART
,
.
io_pg_offst
=
(((
u32
)
S3C24XX_VA_UART
)
>>
18
)
&
0xfffc
,
...
...
drivers/pcmcia/pxa2xx_sharpsl.c
View file @
1e231efe
...
...
@@ -20,27 +20,18 @@
#include <asm/hardware.h>
#include <asm/irq.h>
#include <asm/hardware/scoop.h>
#include <asm/arch/corgi.h>
#include <asm/arch/pxa-regs.h>
#include "soc_common.h"
#define NO_KEEP_VS 0x0001
static
unsigned
char
keep_vs
;
static
unsigned
char
keep_rd
;
static
struct
pcmcia_irqs
irqs
[]
=
{
{
0
,
CORGI_IRQ_GPIO_CF_CD
,
"PCMCIA0 CD"
},
};
static
void
sharpsl_pcmcia_init_reset
(
void
)
static
void
sharpsl_pcmcia_init_reset
(
struct
scoop_pcmcia_dev
*
scoopdev
)
{
reset_scoop
(
&
corgiscoop_device
.
dev
);
keep_vs
=
NO_KEEP_VS
;
keep_rd
=
0
;
reset_scoop
(
scoopdev
->
dev
);
scoopdev
->
keep_vs
=
NO_KEEP_VS
;
scoopdev
->
keep_rd
=
0
;
}
static
int
sharpsl_pcmcia_hw_init
(
struct
soc_pcmcia_socket
*
skt
)
...
...
@@ -71,29 +62,35 @@ static int sharpsl_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
pxa_gpio_mode
(
GPIO57_nIOIS16_MD
);
/* Register interrupts */
ret
=
soc_pcmcia_request_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
if
(
scoop_devs
[
skt
->
nr
].
cd_irq
>=
0
)
{
struct
pcmcia_irqs
cd_irq
;
cd_irq
.
sock
=
skt
->
nr
;
cd_irq
.
irq
=
scoop_devs
[
skt
->
nr
].
cd_irq
;
cd_irq
.
str
=
scoop_devs
[
skt
->
nr
].
cd_irq_str
;
ret
=
soc_pcmcia_request_irqs
(
skt
,
&
cd_irq
,
1
);
if
(
ret
)
{
printk
(
KERN_ERR
"Request for Compact Flash IRQ failed
\n
"
);
return
ret
;
}
}
/* Enable interrupt */
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_IMR
,
0x00C0
);
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_MCR
,
0x0101
);
keep_vs
=
NO_KEEP_VS
;
skt
->
irq
=
CORGI_IRQ_GPIO_CF_IRQ
;
skt
->
irq
=
scoop_devs
[
skt
->
nr
].
irq
;
return
0
;
}
static
void
sharpsl_pcmcia_hw_shutdown
(
struct
soc_pcmcia_socket
*
skt
)
{
soc_pcmcia_free_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
if
(
scoop_devs
[
skt
->
nr
].
cd_irq
>=
0
)
{
struct
pcmcia_irqs
cd_irq
;
/* CF_BUS_OFF */
sharpsl_pcmcia_init_reset
();
cd_irq
.
sock
=
skt
->
nr
;
cd_irq
.
irq
=
scoop_devs
[
skt
->
nr
].
cd_irq
;
cd_irq
.
str
=
scoop_devs
[
skt
->
nr
].
cd_irq_str
;
soc_pcmcia_free_irqs
(
skt
,
&
cd_irq
,
1
);
}
}
...
...
@@ -101,31 +98,32 @@ static void sharpsl_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
struct
pcmcia_state
*
state
)
{
unsigned
short
cpr
,
csr
;
struct
device
*
scoop
=
scoop_devs
[
skt
->
nr
].
dev
;
cpr
=
read_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_CPR
);
cpr
=
read_scoop_reg
(
scoop_devs
[
skt
->
nr
]
.
dev
,
SCOOP_CPR
);
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_IRM
,
0x00FF
);
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_ISR
,
0x0000
);
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_IRM
,
0x0000
);
csr
=
read_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_CSR
);
write_scoop_reg
(
scoop
,
SCOOP_IRM
,
0x00FF
);
write_scoop_reg
(
scoop
,
SCOOP_ISR
,
0x0000
);
write_scoop_reg
(
scoop
,
SCOOP_IRM
,
0x0000
);
csr
=
read_scoop_reg
(
scoop
,
SCOOP_CSR
);
if
(
csr
&
0x0004
)
{
/* card eject */
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_CDR
,
0x0000
);
keep_vs
=
NO_KEEP_VS
;
write_scoop_reg
(
scoop
,
SCOOP_CDR
,
0x0000
);
scoop_devs
[
skt
->
nr
].
keep_vs
=
NO_KEEP_VS
;
}
else
if
(
!
(
keep_vs
&
NO_KEEP_VS
))
{
else
if
(
!
(
scoop_devs
[
skt
->
nr
].
keep_vs
&
NO_KEEP_VS
))
{
/* keep vs1,vs2 */
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_CDR
,
0x0000
);
csr
|=
keep_vs
;
write_scoop_reg
(
scoop
,
SCOOP_CDR
,
0x0000
);
csr
|=
scoop_devs
[
skt
->
nr
].
keep_vs
;
}
else
if
(
cpr
&
0x0003
)
{
/* power on */
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_CDR
,
0x0000
);
keep_vs
=
(
csr
&
0x00C0
);
write_scoop_reg
(
scoop
,
SCOOP_CDR
,
0x0000
);
scoop_devs
[
skt
->
nr
].
keep_vs
=
(
csr
&
0x00C0
);
}
else
{
/* card detect */
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_CDR
,
0x0002
);
write_scoop_reg
(
scoop
,
SCOOP_CDR
,
0x0002
);
}
state
->
detect
=
(
csr
&
0x0004
)
?
0
:
1
;
...
...
@@ -147,6 +145,7 @@ static int sharpsl_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
const
socket_state_t
*
state
)
{
unsigned
long
flags
;
struct
device
*
scoop
=
scoop_devs
[
skt
->
nr
].
dev
;
unsigned
short
cpr
,
ncpr
,
ccr
,
nccr
,
mcr
,
nmcr
,
imr
,
nimr
;
...
...
@@ -166,10 +165,10 @@ static int sharpsl_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
local_irq_save
(
flags
);
nmcr
=
(
mcr
=
read_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_MCR
))
&
~
0x0010
;
ncpr
=
(
cpr
=
read_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_CPR
))
&
~
0x0083
;
nccr
=
(
ccr
=
read_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_CCR
))
&
~
0x0080
;
nimr
=
(
imr
=
read_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_IMR
))
&
~
0x003E
;
nmcr
=
(
mcr
=
read_scoop_reg
(
scoop
,
SCOOP_MCR
))
&
~
0x0010
;
ncpr
=
(
cpr
=
read_scoop_reg
(
scoop
,
SCOOP_CPR
))
&
~
0x0083
;
nccr
=
(
ccr
=
read_scoop_reg
(
scoop
,
SCOOP_CCR
))
&
~
0x0080
;
nimr
=
(
imr
=
read_scoop_reg
(
scoop
,
SCOOP_IMR
))
&
~
0x003E
;
ncpr
|=
(
state
->
Vcc
==
33
)
?
0x0001
:
(
state
->
Vcc
==
50
)
?
0x0002
:
0
;
...
...
@@ -184,22 +183,22 @@ static int sharpsl_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
((
skt
->
status
&
SS_WRPROT
)
?
0x0008
:
0
);
if
(
!
(
ncpr
&
0x0003
))
{
keep_rd
=
0
;
}
else
if
(
!
keep_rd
)
{
scoop_devs
[
skt
->
nr
].
keep_rd
=
0
;
}
else
if
(
!
scoop_devs
[
skt
->
nr
].
keep_rd
)
{
if
(
nccr
&
0x0080
)
keep_rd
=
1
;
scoop_devs
[
skt
->
nr
].
keep_rd
=
1
;
else
nccr
|=
0x0080
;
}
if
(
mcr
!=
nmcr
)
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_MCR
,
nmcr
);
write_scoop_reg
(
scoop
,
SCOOP_MCR
,
nmcr
);
if
(
cpr
!=
ncpr
)
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_CPR
,
ncpr
);
write_scoop_reg
(
scoop
,
SCOOP_CPR
,
ncpr
);
if
(
ccr
!=
nccr
)
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_CCR
,
nccr
);
write_scoop_reg
(
scoop
,
SCOOP_CCR
,
nccr
);
if
(
imr
!=
nimr
)
write_scoop_reg
(
&
corgiscoop_device
.
dev
,
SCOOP_IMR
,
nimr
);
write_scoop_reg
(
scoop
,
SCOOP_IMR
,
nimr
);
local_irq_restore
(
flags
);
...
...
@@ -208,10 +207,18 @@ static int sharpsl_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
static
void
sharpsl_pcmcia_socket_init
(
struct
soc_pcmcia_socket
*
skt
)
{
sharpsl_pcmcia_init_reset
(
&
scoop_devs
[
skt
->
nr
]);
/* Enable interrupt */
write_scoop_reg
(
scoop_devs
[
skt
->
nr
].
dev
,
SCOOP_IMR
,
0x00C0
);
write_scoop_reg
(
scoop_devs
[
skt
->
nr
].
dev
,
SCOOP_MCR
,
0x0101
);
scoop_devs
[
skt
->
nr
].
keep_vs
=
NO_KEEP_VS
;
}
static
void
sharpsl_pcmcia_socket_suspend
(
struct
soc_pcmcia_socket
*
skt
)
{
/* CF_BUS_OFF */
sharpsl_pcmcia_init_reset
(
&
scoop_devs
[
skt
->
nr
]);
}
static
struct
pcmcia_low_level
sharpsl_pcmcia_ops
=
{
...
...
@@ -223,7 +230,7 @@ static struct pcmcia_low_level sharpsl_pcmcia_ops = {
.
socket_init
=
sharpsl_pcmcia_socket_init
,
.
socket_suspend
=
sharpsl_pcmcia_socket_suspend
,
.
first
=
0
,
.
nr
=
1
,
.
nr
=
0
,
};
static
struct
platform_device
*
sharpsl_pcmcia_device
;
...
...
@@ -232,12 +239,15 @@ static int __init sharpsl_pcmcia_init(void)
{
int
ret
;
sharpsl_pcmcia_ops
.
nr
=
scoop_num
;
sharpsl_pcmcia_device
=
kmalloc
(
sizeof
(
*
sharpsl_pcmcia_device
),
GFP_KERNEL
);
if
(
!
sharpsl_pcmcia_device
)
return
-
ENOMEM
;
memset
(
sharpsl_pcmcia_device
,
0
,
sizeof
(
*
sharpsl_pcmcia_device
));
sharpsl_pcmcia_device
->
name
=
"pxa2xx-pcmcia"
;
sharpsl_pcmcia_device
->
dev
.
platform_data
=
&
sharpsl_pcmcia_ops
;
sharpsl_pcmcia_device
->
dev
.
parent
=
scoop_devs
[
0
].
dev
;
ret
=
platform_device_register
(
sharpsl_pcmcia_device
);
if
(
ret
)
...
...
include/asm-arm/hardware/scoop.h
View file @
1e231efe
...
...
@@ -40,6 +40,19 @@ struct scoop_config {
unsigned
short
io_dir
;
};
/* Structure for linking scoop devices to PCMCIA sockets */
struct
scoop_pcmcia_dev
{
struct
device
*
dev
;
/* Pointer to this socket's scoop device */
int
irq
;
/* irq for socket */
int
cd_irq
;
const
char
*
cd_irq_str
;
unsigned
char
keep_vs
;
unsigned
char
keep_rd
;
};
extern
int
scoop_num
;
extern
struct
scoop_pcmcia_dev
*
scoop_devs
;
void
reset_scoop
(
struct
device
*
dev
);
unsigned
short
set_scoop_gpio
(
struct
device
*
dev
,
unsigned
short
bit
);
unsigned
short
reset_scoop_gpio
(
struct
device
*
dev
,
unsigned
short
bit
);
...
...
include/asm-arm/mach/time.h
View file @
1e231efe
...
...
@@ -47,9 +47,7 @@ struct sys_timer {
#ifdef CONFIG_NO_IDLE_HZ
#define DYN_TICK_SKIPPING (1 << 2)
#define DYN_TICK_ENABLED (1 << 1)
#define DYN_TICK_SUITABLE (1 << 0)
struct
dyn_tick_timer
{
unsigned
int
state
;
/* Current state */
...
...
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