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
ae0a0dc5
Commit
ae0a0dc5
authored
Jan 14, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk/linux-2.6-rmk
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
d96524e4
9ceea8ed
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
381 additions
and
61 deletions
+381
-61
MAINTAINERS
MAINTAINERS
+7
-0
arch/arm/mach-s3c2410/clock.c
arch/arm/mach-s3c2410/clock.c
+30
-30
arch/arm/mach-s3c2410/clock.h
arch/arm/mach-s3c2410/clock.h
+3
-3
arch/arm/mach-s3c2410/cpu.c
arch/arm/mach-s3c2410/cpu.c
+30
-1
arch/arm/mach-s3c2410/cpu.h
arch/arm/mach-s3c2410/cpu.h
+3
-0
arch/arm/mach-s3c2410/mach-bast.c
arch/arm/mach-s3c2410/mach-bast.c
+1
-0
arch/arm/mach-s3c2410/mach-h1940.c
arch/arm/mach-s3c2410/mach-h1940.c
+2
-0
arch/arm/mach-s3c2410/mach-rx3715.c
arch/arm/mach-s3c2410/mach-rx3715.c
+2
-2
arch/arm/mach-s3c2410/mach-smdk2410.c
arch/arm/mach-s3c2410/mach-smdk2410.c
+1
-0
arch/arm/mach-s3c2410/mach-vr1000.c
arch/arm/mach-s3c2410/mach-vr1000.c
+2
-0
arch/arm/mach-s3c2410/s3c2410.c
arch/arm/mach-s3c2410/s3c2410.c
+6
-6
arch/arm/mach-s3c2410/s3c2410.h
arch/arm/mach-s3c2410/s3c2410.h
+4
-0
arch/arm/mach-s3c2410/s3c2440.c
arch/arm/mach-s3c2410/s3c2440.c
+18
-17
arch/arm/mach-s3c2410/s3c2440.h
arch/arm/mach-s3c2410/s3c2440.h
+4
-0
arch/arm/mm/ioremap.c
arch/arm/mm/ioremap.c
+1
-1
arch/arm/mm/proc-v6.S
arch/arm/mm/proc-v6.S
+1
-0
arch/arm/vfp/entry.S
arch/arm/vfp/entry.S
+1
-1
drivers/pcmcia/Makefile
drivers/pcmcia/Makefile
+1
-0
drivers/pcmcia/pxa2xx_sharpsl.c
drivers/pcmcia/pxa2xx_sharpsl.c
+264
-0
No files found.
MAINTAINERS
View file @
ae0a0dc5
...
...
@@ -2093,6 +2093,13 @@ L: sparclinux@vger.kernel.org
L: ultralinux@vger.kernel.org
S: Maintained
SHARP LH SUPPORT (LH7952X & LH7A40X)
P: Marc Singer
M: elf@buici.com
W: http://projects.buici.com/arm
L: linux-arm-kernel@lists.arm.linux.org.uk
S: Maintained
SPARC (sparc32):
P: William L. Irwin
M: wli@holomorphy.com
...
...
arch/arm/mach-s3c2410/clock.c
View file @
ae0a0dc5
...
...
@@ -60,7 +60,7 @@ static DECLARE_MUTEX(clocks_sem);
/* old functions */
void
inline
s3c24
10
_clk_enable
(
unsigned
int
clocks
,
unsigned
int
enable
)
void
inline
s3c24
xx
_clk_enable
(
unsigned
int
clocks
,
unsigned
int
enable
)
{
unsigned
long
clkcon
;
unsigned
long
flags
;
...
...
@@ -88,9 +88,9 @@ static int clk_null_enable(struct clk *clk, int enable)
return
0
;
}
int
s3c24
10
_clkcon_enable
(
struct
clk
*
clk
,
int
enable
)
int
s3c24
xx
_clkcon_enable
(
struct
clk
*
clk
,
int
enable
)
{
s3c24
10
_clk_enable
(
clk
->
ctrlbit
,
enable
);
s3c24
xx
_clk_enable
(
clk
->
ctrlbit
,
enable
);
return
0
;
}
...
...
@@ -264,90 +264,90 @@ static struct clk init_clocks[] = {
{
.
name
=
"nand"
,
.
id
=
-
1
,
.
parent
=
&
clk_h
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_NAND
},
{
.
name
=
"lcd"
,
.
id
=
-
1
,
.
parent
=
&
clk_h
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_LCDC
},
{
.
name
=
"usb-host"
,
.
id
=
-
1
,
.
parent
=
&
clk_h
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_USBH
},
{
.
name
=
"usb-device"
,
.
id
=
-
1
,
.
parent
=
&
clk_h
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_USBD
},
{
.
name
=
"timers"
,
.
parent
=
&
clk_p
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_PWMT
},
{
.
name
=
"sdi"
,
.
id
=
-
1
,
.
parent
=
&
clk_p
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_SDI
},
{
.
name
=
"uart"
,
.
id
=
0
,
.
parent
=
&
clk_p
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_UART0
},
{
.
name
=
"uart"
,
.
id
=
1
,
.
parent
=
&
clk_p
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_UART1
},
{
.
name
=
"uart"
,
.
id
=
2
,
.
parent
=
&
clk_p
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_UART2
},
{
.
name
=
"gpio"
,
.
id
=
-
1
,
.
parent
=
&
clk_p
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_GPIO
},
{
.
name
=
"rtc"
,
.
id
=
-
1
,
.
parent
=
&
clk_p
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_RTC
},
{
.
name
=
"adc"
,
.
id
=
-
1
,
.
parent
=
&
clk_p
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_ADC
},
{
.
name
=
"i2c"
,
.
id
=
-
1
,
.
parent
=
&
clk_p
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_IIC
},
{
.
name
=
"iis"
,
.
id
=
-
1
,
.
parent
=
&
clk_p
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_IIS
},
{
.
name
=
"spi"
,
.
id
=
-
1
,
.
parent
=
&
clk_p
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2410_CLKCON_SPI
},
{
.
name
=
"watchdog"
,
...
...
@@ -359,7 +359,7 @@ static struct clk init_clocks[] = {
/* initialise the clock system */
int
s3c24
10
_register_clock
(
struct
clk
*
clk
)
int
s3c24
xx
_register_clock
(
struct
clk
*
clk
)
{
clk
->
owner
=
THIS_MODULE
;
atomic_set
(
&
clk
->
used
,
0
);
...
...
@@ -378,7 +378,7 @@ int s3c2410_register_clock(struct clk *clk)
/* initalise all the clocks */
int
__init
s3c24
10_init
_clocks
(
void
)
int
__init
s3c24
xx_setup
_clocks
(
void
)
{
struct
clk
*
clkp
=
init_clocks
;
int
ptr
;
...
...
@@ -403,28 +403,28 @@ int __init s3c2410_init_clocks(void)
* and of course, this looks neater
*/
s3c24
10
_clk_enable
(
S3C2410_CLKCON_NAND
,
0
);
s3c24
10
_clk_enable
(
S3C2410_CLKCON_USBH
,
0
);
s3c24
10
_clk_enable
(
S3C2410_CLKCON_USBD
,
0
);
s3c24
10
_clk_enable
(
S3C2410_CLKCON_ADC
,
0
);
s3c24
10
_clk_enable
(
S3C2410_CLKCON_IIC
,
0
);
s3c24
10
_clk_enable
(
S3C2410_CLKCON_SPI
,
0
);
s3c24
xx
_clk_enable
(
S3C2410_CLKCON_NAND
,
0
);
s3c24
xx
_clk_enable
(
S3C2410_CLKCON_USBH
,
0
);
s3c24
xx
_clk_enable
(
S3C2410_CLKCON_USBD
,
0
);
s3c24
xx
_clk_enable
(
S3C2410_CLKCON_ADC
,
0
);
s3c24
xx
_clk_enable
(
S3C2410_CLKCON_IIC
,
0
);
s3c24
xx
_clk_enable
(
S3C2410_CLKCON_SPI
,
0
);
/* assume uart clocks are correctly setup */
/* register our clocks */
if
(
s3c24
10
_register_clock
(
&
clk_f
)
<
0
)
if
(
s3c24
xx
_register_clock
(
&
clk_f
)
<
0
)
printk
(
KERN_ERR
"failed to register cpu fclk
\n
"
);
if
(
s3c24
10
_register_clock
(
&
clk_h
)
<
0
)
if
(
s3c24
xx
_register_clock
(
&
clk_h
)
<
0
)
printk
(
KERN_ERR
"failed to register cpu hclk
\n
"
);
if
(
s3c24
10
_register_clock
(
&
clk_p
)
<
0
)
if
(
s3c24
xx
_register_clock
(
&
clk_p
)
<
0
)
printk
(
KERN_ERR
"failed to register cpu pclk
\n
"
);
for
(
ptr
=
0
;
ptr
<
ARRAY_SIZE
(
init_clocks
);
ptr
++
,
clkp
++
)
{
ret
=
s3c24
10
_register_clock
(
clkp
);
ret
=
s3c24
xx
_register_clock
(
clkp
);
if
(
ret
<
0
)
{
printk
(
KERN_ERR
"Failed to register clock %s (%d)
\n
"
,
clkp
->
name
,
ret
);
...
...
arch/arm/mach-s3c2410/clock.h
View file @
ae0a0dc5
...
...
@@ -41,7 +41,7 @@ extern unsigned long s3c24xx_fclk;
* Please DO NOT use these outside of arch/arm/mach-s3c2410
*/
extern
int
s3c2410_clkcon_enable
(
struct
clk
*
clk
,
int
enable
);
extern
int
s3c2410_register_clock
(
struct
clk
*
clk
);
extern
int
s3c2410_init_clocks
(
void
);
extern
int
s3c24xx_clkcon_enable
(
struct
clk
*
clk
,
int
enable
);
extern
int
s3c24xx_register_clock
(
struct
clk
*
clk
);
extern
int
s3c24xx_setup_clocks
(
void
);
arch/arm/mach-s3c2410/cpu.c
View file @
ae0a0dc5
...
...
@@ -47,6 +47,7 @@ struct cpu_table {
unsigned
long
idmask
;
void
(
*
map_io
)(
struct
map_desc
*
mach_desc
,
int
size
);
void
(
*
init_uarts
)(
struct
s3c2410_uartcfg
*
cfg
,
int
no
);
void
(
*
init_clocks
)(
int
xtal
);
int
(
*
init
)(
void
);
const
char
*
name
;
};
...
...
@@ -63,6 +64,7 @@ static struct cpu_table cpu_ids[] __initdata = {
.
idcode
=
0x32410000
,
.
idmask
=
0xffffffff
,
.
map_io
=
s3c2410_map_io
,
.
init_clocks
=
s3c2410_init_clocks
,
.
init_uarts
=
s3c2410_init_uarts
,
.
init
=
s3c2410_init
,
.
name
=
name_s3c2410
...
...
@@ -71,6 +73,7 @@ static struct cpu_table cpu_ids[] __initdata = {
.
idcode
=
0x32410002
,
.
idmask
=
0xffffffff
,
.
map_io
=
s3c2410_map_io
,
.
init_clocks
=
s3c2410_init_clocks
,
.
init_uarts
=
s3c2410_init_uarts
,
.
init
=
s3c2410_init
,
.
name
=
name_s3c2410a
...
...
@@ -79,6 +82,7 @@ static struct cpu_table cpu_ids[] __initdata = {
.
idcode
=
0x32440000
,
.
idmask
=
0xffffffff
,
.
map_io
=
s3c2440_map_io
,
.
init_clocks
=
s3c2440_init_clocks
,
.
init_uarts
=
s3c2440_init_uarts
,
.
init
=
s3c2440_init
,
.
name
=
name_s3c2440
...
...
@@ -87,6 +91,7 @@ static struct cpu_table cpu_ids[] __initdata = {
.
idcode
=
0x32440001
,
.
idmask
=
0xffffffff
,
.
map_io
=
s3c2440_map_io
,
.
init_clocks
=
s3c2440_init_clocks
,
.
init_uarts
=
s3c2440_init_uarts
,
.
init
=
s3c2440_init
,
.
name
=
name_s3c2440a
...
...
@@ -132,7 +137,7 @@ void s3c24xx_set_board(struct s3c24xx_board *b)
struct
clk
**
ptr
=
b
->
clocks
;;
for
(
i
=
b
->
clocks_count
;
i
>
0
;
i
--
,
ptr
++
)
s3c24
10
_register_clock
(
*
ptr
);
s3c24
xx
_register_clock
(
*
ptr
);
}
}
...
...
@@ -165,6 +170,29 @@ void __init s3c24xx_init_io(struct map_desc *mach_desc, int size)
(
cpu
->
map_io
)(
mach_desc
,
size
);
}
/* s3c24xx_init_clocks
*
* Initialise the clock subsystem and associated information from the
* given master crystal value.
*
* xtal = 0 -> use default PLL crystal value (normally 12MHz)
* != 0 -> PLL crystal value in Hz
*/
void
__init
s3c24xx_init_clocks
(
int
xtal
)
{
if
(
xtal
!=
0
)
s3c24xx_xtal
=
xtal
;
if
(
cpu
==
NULL
)
panic
(
"s3c24xx_init_clocks: no cpu setup?
\n
"
);
if
(
cpu
->
init_clocks
==
NULL
)
panic
(
"s3c24xx_init_clocks: cpu has no clock init
\n
"
);
else
(
cpu
->
init_clocks
)(
xtal
);
}
void
__init
s3c24xx_init_uarts
(
struct
s3c2410_uartcfg
*
cfg
,
int
no
)
{
if
(
cpu
==
NULL
)
...
...
@@ -175,6 +203,7 @@ void __init s3c24xx_init_uarts(struct s3c2410_uartcfg *cfg, int no)
}
else
(
cpu
->
init_uarts
)(
cfg
,
no
);
}
static
int
__init
s3c_arch_init
(
void
)
{
int
ret
;
...
...
arch/arm/mach-s3c2410/cpu.h
View file @
ae0a0dc5
...
...
@@ -14,6 +14,7 @@
* 18-Oct-2004 BJD Moved board struct into this file
* 04-Jan-2005 BJD New uart initialisation
* 10-Jan-2005 BJD Moved generic init here, specific to cpu headers
* 14-Jan-2005 BJD Added s3c24xx_init_clocks() call
*/
#define IODESC_ENT(x) { S3C2410_VA_##x, S3C2410_PA_##x, S3C2410_SZ_##x, MT_DEVICE }
...
...
@@ -35,6 +36,8 @@ extern void s3c24xx_init_io(struct map_desc *mach_desc, int size);
extern
void
s3c24xx_init_uarts
(
struct
s3c2410_uartcfg
*
cfg
,
int
no
);
extern
void
s3c24xx_init_clocks
(
int
xtal
);
/* the board structure is used at first initialsation time
* to get info such as the devices to register for this
* board. This is done because platfrom_add_devices() cannot
...
...
arch/arm/mach-s3c2410/mach-bast.c
View file @
ae0a0dc5
...
...
@@ -263,6 +263,7 @@ void __init bast_map_io(void)
s3c24xx_uclk
.
parent
=
&
s3c24xx_clkout1
;
s3c24xx_init_io
(
bast_iodesc
,
ARRAY_SIZE
(
bast_iodesc
));
s3c24xx_init_clocks
(
0
);
s3c24xx_init_uarts
(
bast_uartcfgs
,
ARRAY_SIZE
(
bast_uartcfgs
));
s3c24xx_set_board
(
&
bast_board
);
usb_simtec_init
();
...
...
arch/arm/mach-s3c2410/mach-h1940.c
View file @
ae0a0dc5
...
...
@@ -22,6 +22,7 @@
* 04-Nov-2004 BJD Change for new serial clock
* 04-Jan-2005 BJD Updated uart init call
* 10-Jan-2005 BJD Removed include of s3c2410.h
* 14-Jan-2005 BJD Added clock init
*/
#include <linux/kernel.h>
...
...
@@ -103,6 +104,7 @@ static struct s3c24xx_board h1940_board __initdata = {
void
__init
h1940_map_io
(
void
)
{
s3c24xx_init_io
(
h1940_iodesc
,
ARRAY_SIZE
(
h1940_iodesc
));
s3c24xx_init_clocks
(
0
);
s3c24xx_init_uarts
(
h1940_uartcfgs
,
ARRAY_SIZE
(
h1940_uartcfgs
));
s3c24xx_set_board
(
&
h1940_board
);
}
...
...
arch/arm/mach-s3c2410/mach-rx3715.c
View file @
ae0a0dc5
...
...
@@ -13,6 +13,7 @@
* 16-Sep-2004 BJD Copied from mach-h1940.c
* 25-Oct-2004 BJD Updates for 2.6.10-rc1
* 10-Jan-2005 BJD Removed include of s3c2410.h s3c2440.h
* 14-Jan-2005 BJD Added new clock init
*/
#include <linux/kernel.h>
...
...
@@ -91,9 +92,8 @@ static struct s3c24xx_board rx3715_board __initdata = {
void
__init
rx3715_map_io
(
void
)
{
s3c24xx_xtal
=
16934000
;
s3c24xx_init_io
(
rx3715_iodesc
,
ARRAY_SIZE
(
rx3715_iodesc
));
s3c24xx_init_clocks
(
16934000
);
s3c24xx_init_uarts
(
rx3715_uartcfgs
,
ARRAY_SIZE
(
rx3715_uartcfgs
));
s3c24xx_set_board
(
&
rx3715_board
);
}
...
...
arch/arm/mach-s3c2410/mach-smdk2410.c
View file @
ae0a0dc5
...
...
@@ -97,6 +97,7 @@ static struct s3c24xx_board smdk2410_board __initdata = {
void
__init
smdk2410_map_io
(
void
)
{
s3c24xx_init_io
(
smdk2410_iodesc
,
ARRAY_SIZE
(
smdk2410_iodesc
));
s3c24xx_init_clocks
(
0
);
s3c24xx_init_uarts
(
smdk2410_uartcfgs
,
ARRAY_SIZE
(
smdk2410_uartcfgs
));
s3c24xx_set_board
(
&
smdk2410_board
);
}
...
...
arch/arm/mach-s3c2410/mach-vr1000.c
View file @
ae0a0dc5
...
...
@@ -20,6 +20,7 @@
* 04-Nov-2004 BJD Clock and serial configuration update
* 04-Jan-2005 BJD Updated uart init call
* 10-Jan-2005 BJD Removed include of s3c2410.h
* 14-Jan-2005 BJD Added clock init
*/
#include <linux/kernel.h>
...
...
@@ -205,6 +206,7 @@ void __init vr1000_map_io(void)
s3c24xx_uclk
.
parent
=
&
s3c24xx_clkout1
;
s3c24xx_init_io
(
vr1000_iodesc
,
ARRAY_SIZE
(
vr1000_iodesc
));
s3c24xx_init_clocks
(
0
);
s3c24xx_init_uarts
(
vr1000_uartcfgs
,
ARRAY_SIZE
(
vr1000_uartcfgs
));
s3c24xx_set_board
(
&
vr1000_board
);
usb_simtec_init
();
...
...
arch/arm/mach-s3c2410/s3c2410.c
View file @
ae0a0dc5
...
...
@@ -151,19 +151,19 @@ void __init s3c2410_init_uarts(struct s3c2410_uartcfg *cfg, int no)
*
* register the standard cpu IO areas, and any passed in from the
* machine specific initialisation.
*
* this function also sets the initial clock frequencies from the
* settings passed in
*/
void
__init
s3c2410_map_io
(
struct
map_desc
*
mach_desc
,
int
mach_size
)
{
unsigned
long
tmp
;
/* register our io-tables */
iotable_init
(
s3c2410_iodesc
,
ARRAY_SIZE
(
s3c2410_iodesc
));
iotable_init
(
mach_desc
,
mach_size
);
}
void
__init
s3c2410_init_clocks
(
int
xtal
)
{
unsigned
long
tmp
;
/* now we've got our machine bits initialised, work out what
* clocks we've got */
...
...
@@ -188,7 +188,7 @@ void __init s3c2410_map_io(struct map_desc *mach_desc, int mach_size)
* console to use them
*/
s3c24
10_init
_clocks
();
s3c24
xx_setup
_clocks
();
}
int
__init
s3c2410_init
(
void
)
...
...
arch/arm/mach-s3c2410/s3c2410.h
View file @
ae0a0dc5
...
...
@@ -16,6 +16,7 @@
* 17-Oct-2004 BJD Moved board out to cpu
* 04-Jan-2005 BJD Changed uart init
* 10-Jan-2005 BJD Removed timer to cpu.h, moved 2410 specific bits here
* 14-Jan-2005 BJD Added s3c2410_init_clocks call
*/
#ifdef CONFIG_CPU_S3C2410
...
...
@@ -26,7 +27,10 @@ extern void s3c2410_map_io(struct map_desc *mach_desc, int size);
extern
void
s3c2410_init_uarts
(
struct
s3c2410_uartcfg
*
cfg
,
int
no
);
extern
void
s3c2410_init_clocks
(
int
xtal
);
#else
#define s3c2410_init_clocks NULL
#define s3c2410_init_uarts NULL
#define s3c2410_map_io NULL
#define s3c2410_init NULL
...
...
arch/arm/mach-s3c2410/s3c2440.c
View file @
ae0a0dc5
/* linux/arch/arm/mach-s3c2410/s3c2440.c
*
* Copyright (c) 2004 Simtec Electronics
* Copyright (c) 2004
-2005
Simtec Electronics
* Ben Dooks <ben@simtec.co.uk>
*
* Samsung S3C2440 Mobile CPU support
...
...
@@ -16,6 +16,8 @@
* 09-Nov-2004 BJD Added sysdev for power management
* 04-Nov-2004 BJD New serial registration
* 15-Nov-2004 BJD Rename the i2c device for the s3c2440
* 14-Jan-2005 BJD Moved clock init code into seperate function
* 14-Jan-2005 BJD Removed un-used clock bits
*/
#include <linux/kernel.h>
...
...
@@ -48,10 +50,6 @@
#include "cpu.h"
#include "pm.h"
int
s3c2440_clock_tick_rate
=
12
*
1000
*
1000
;
/* current timers at 12MHz */
/* clock info */
unsigned
long
s3c2440_hdiv
;
static
struct
map_desc
s3c2440_iodesc
[]
__initdata
=
{
IODESC_ENT
(
USBHOST
),
...
...
@@ -155,13 +153,13 @@ void __init s3c2440_init_uarts(struct s3c2410_uartcfg *cfg, int no)
static
struct
clk
s3c2440_clk_cam
=
{
.
name
=
"camera"
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2440_CLKCON_CAMERA
};
static
struct
clk
s3c2440_clk_ac97
=
{
.
name
=
"ac97"
,
.
enable
=
s3c24
10
_clkcon_enable
,
.
enable
=
s3c24
xx
_clkcon_enable
,
.
ctrlbit
=
S3C2440_CLKCON_CAMERA
};
...
...
@@ -204,13 +202,20 @@ static struct sys_device s3c2440_sysdev = {
void
__init
s3c2440_map_io
(
struct
map_desc
*
mach_desc
,
int
size
)
{
unsigned
long
clkdiv
;
unsigned
long
camdiv
;
/* register our io-tables */
iotable_init
(
s3c2440_iodesc
,
ARRAY_SIZE
(
s3c2440_iodesc
));
iotable_init
(
mach_desc
,
size
);
/* rename any peripherals used differing from the s3c2410 */
s3c_device_i2c
.
name
=
"s3c2440-i2c"
;
}
void
__init
s3c2440_init_clocks
(
int
xtal
)
{
unsigned
long
clkdiv
;
unsigned
long
camdiv
;
int
s3c2440_hdiv
=
1
;
/* now we've got our machine bits initialised, work out what
* clocks we've got */
...
...
@@ -254,22 +259,18 @@ void __init s3c2440_map_io(struct map_desc *mach_desc, int size)
* console to use them, and to add new ones after the initialisation
*/
s3c24
10_init
_clocks
();
s3c24
xx_setup
_clocks
();
/* add s3c2440 specific clocks */
s3c2440_clk_cam
.
parent
=
clk_get
(
NULL
,
"hclk"
);
s3c2440_clk_ac97
.
parent
=
clk_get
(
NULL
,
"pclk"
);
s3c24
10
_register_clock
(
&
s3c2440_clk_ac97
);
s3c24
10
_register_clock
(
&
s3c2440_clk_cam
);
s3c24
xx
_register_clock
(
&
s3c2440_clk_ac97
);
s3c24
xx
_register_clock
(
&
s3c2440_clk_cam
);
clk_disable
(
&
s3c2440_clk_ac97
);
clk_disable
(
&
s3c2440_clk_cam
);
/* rename any peripherals used differing from the s3c2410 */
s3c_device_i2c
.
name
=
"s3c2440-i2c"
;
}
int
__init
s3c2440_init
(
void
)
...
...
arch/arm/mach-s3c2410/s3c2440.h
View file @
ae0a0dc5
...
...
@@ -14,6 +14,7 @@
* 04-Nov-2004 BJD Added s3c2440_init_uarts()
* 04-Jan-2005 BJD Moved uart init to cpu code
* 10-Jan-2005 BJD Moved 2440 specific init here
* 14-Jan-2005 BJD Split the clock initialisation code
*/
#ifdef CONFIG_CPU_S3C2440
...
...
@@ -24,7 +25,10 @@ extern void s3c2440_map_io(struct map_desc *mach_desc, int size);
extern
void
s3c2440_init_uarts
(
struct
s3c2410_uartcfg
*
cfg
,
int
no
);
extern
void
s3c2440_init_clocks
(
int
xtal
);
#else
#define s3c2440_init_clocks NULL
#define s3c2440_init_uarts NULL
#define s3c2440_map_io NULL
#define s3c2440_init NULL
...
...
arch/arm/mm/ioremap.c
View file @
ae0a0dc5
...
...
@@ -148,7 +148,7 @@ __ioremap(unsigned long phys_addr, size_t size, unsigned long flags,
*/
offset
=
phys_addr
&
~
PAGE_MASK
;
phys_addr
&=
PAGE_MASK
;
size
=
PAGE_ALIGN
(
last_addr
)
-
phys_addr
;
size
=
PAGE_ALIGN
(
last_addr
+
1
)
-
phys_addr
;
/*
* Ok, go for it..
...
...
arch/arm/mm/proc-v6.S
View file @
ae0a0dc5
...
...
@@ -105,6 +105,7 @@ ENTRY(cpu_v6_dcache_clean_area)
ENTRY
(
cpu_v6_switch_mm
)
mov
r2
,
#
0
ldr
r1
,
[
r1
,
#
MM_CONTEXT_ID
]
@
get
mm
->
context
.
id
mcr
p15
,
0
,
r2
,
c7
,
c5
,
6
@
flush
BTAC
/
BTB
mcr
p15
,
0
,
r2
,
c7
,
c10
,
4
@
drain
write
buffer
mcr
p15
,
0
,
r0
,
c2
,
c0
,
0
@
set
TTB
0
mcr
p15
,
0
,
r1
,
c13
,
c0
,
1
@
set
context
ID
...
...
arch/arm/vfp/entry.S
View file @
ae0a0dc5
...
...
@@ -17,7 +17,7 @@
*/
#include <linux/linkage.h>
#include <linux/init.h>
#include <asm/
thread_info
.h>
#include <asm/
constants
.h>
#include <asm/vfpmacros.h>
.
globl
do_vfp
...
...
drivers/pcmcia/Makefile
View file @
ae0a0dc5
...
...
@@ -48,4 +48,5 @@ sa1100_cs-$(CONFIG_SA1100_SIMPAD) += sa1100_simpad.o
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
drivers/pcmcia/pxa2xx_sharpsl.c
0 → 100644
View file @
ae0a0dc5
/*
* Sharp SL-C7xx Series PCMCIA routines
*
* Copyright (c) 2004-2005 Richard Purdie
*
* Based on Sharp's 2.4 kernel patches and pxa2xx_mainstone.c
*
* 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 <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
)
{
reset_scoop
();
keep_vs
=
NO_KEEP_VS
;
keep_rd
=
0
;
}
static
int
sharpsl_pcmcia_hw_init
(
struct
soc_pcmcia_socket
*
skt
)
{
int
ret
;
/*
* Setup default state of GPIO outputs
* before we enable them as outputs.
*/
GPSR
(
GPIO48_nPOE
)
=
GPIO_bit
(
GPIO48_nPOE
)
|
GPIO_bit
(
GPIO49_nPWE
)
|
GPIO_bit
(
GPIO50_nPIOR
)
|
GPIO_bit
(
GPIO51_nPIOW
)
|
GPIO_bit
(
GPIO52_nPCE_1
)
|
GPIO_bit
(
GPIO53_nPCE_2
);
pxa_gpio_mode
(
GPIO48_nPOE_MD
);
pxa_gpio_mode
(
GPIO49_nPWE_MD
);
pxa_gpio_mode
(
GPIO50_nPIOR_MD
);
pxa_gpio_mode
(
GPIO51_nPIOW_MD
);
pxa_gpio_mode
(
GPIO52_nPCE_1_MD
);
pxa_gpio_mode
(
GPIO53_nPCE_2_MD
);
pxa_gpio_mode
(
GPIO54_pSKTSEL_MD
);
pxa_gpio_mode
(
GPIO55_nPREG_MD
);
pxa_gpio_mode
(
GPIO56_nPWAIT_MD
);
pxa_gpio_mode
(
GPIO57_nIOIS16_MD
);
/* Register interrupts */
ret
=
soc_pcmcia_request_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
if
(
ret
)
{
printk
(
KERN_ERR
"Request for Compact Flash IRQ failed
\n
"
);
return
ret
;
}
/* Enable interrupt */
write_scoop_reg
(
SCOOP_IMR
,
0x00C0
);
write_scoop_reg
(
SCOOP_MCR
,
0x0101
);
keep_vs
=
NO_KEEP_VS
;
skt
->
irq
=
CORGI_IRQ_GPIO_CF_IRQ
;
return
0
;
}
static
void
sharpsl_pcmcia_hw_shutdown
(
struct
soc_pcmcia_socket
*
skt
)
{
soc_pcmcia_free_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
/* CF_BUS_OFF */
sharpsl_pcmcia_init_reset
();
}
static
void
sharpsl_pcmcia_socket_state
(
struct
soc_pcmcia_socket
*
skt
,
struct
pcmcia_state
*
state
)
{
unsigned
short
cpr
,
csr
;
cpr
=
read_scoop_reg
(
SCOOP_CPR
);
write_scoop_reg
(
SCOOP_IRM
,
0x00FF
);
write_scoop_reg
(
SCOOP_ISR
,
0x0000
);
write_scoop_reg
(
SCOOP_IRM
,
0x0000
);
csr
=
read_scoop_reg
(
SCOOP_CSR
);
if
(
csr
&
0x0004
)
{
/* card eject */
write_scoop_reg
(
SCOOP_CDR
,
0x0000
);
keep_vs
=
NO_KEEP_VS
;
}
else
if
(
!
(
keep_vs
&
NO_KEEP_VS
))
{
/* keep vs1,vs2 */
write_scoop_reg
(
SCOOP_CDR
,
0x0000
);
csr
|=
keep_vs
;
}
else
if
(
cpr
&
0x0003
)
{
/* power on */
write_scoop_reg
(
SCOOP_CDR
,
0x0000
);
keep_vs
=
(
csr
&
0x00C0
);
}
else
{
/* card detect */
write_scoop_reg
(
SCOOP_CDR
,
0x0002
);
}
state
->
detect
=
(
csr
&
0x0004
)
?
0
:
1
;
state
->
ready
=
(
csr
&
0x0002
)
?
1
:
0
;
state
->
bvd1
=
(
csr
&
0x0010
)
?
1
:
0
;
state
->
bvd2
=
(
csr
&
0x0020
)
?
1
:
0
;
state
->
wrprot
=
(
csr
&
0x0008
)
?
1
:
0
;
state
->
vs_3v
=
(
csr
&
0x0040
)
?
0
:
1
;
state
->
vs_Xv
=
(
csr
&
0x0080
)
?
0
:
1
;
if
((
cpr
&
0x0080
)
&&
((
cpr
&
0x8040
)
!=
0x8040
))
{
printk
(
KERN_ERR
"sharpsl_pcmcia_socket_state(): CPR=%04X, Low voltage!
\n
"
,
cpr
);
}
}
static
int
sharpsl_pcmcia_configure_socket
(
struct
soc_pcmcia_socket
*
skt
,
const
socket_state_t
*
state
)
{
unsigned
long
flags
;
unsigned
short
cpr
,
ncpr
,
ccr
,
nccr
,
mcr
,
nmcr
,
imr
,
nimr
;
switch
(
state
->
Vcc
)
{
case
0
:
break
;
case
33
:
break
;
case
50
:
break
;
default:
printk
(
KERN_ERR
"sharpsl_pcmcia_configure_socket(): bad Vcc %u
\n
"
,
state
->
Vcc
);
return
-
1
;
}
if
((
state
->
Vpp
!=
state
->
Vcc
)
&&
(
state
->
Vpp
!=
0
))
{
printk
(
KERN_ERR
"CF slot cannot support Vpp %u
\n
"
,
state
->
Vpp
);
return
-
1
;
}
local_irq_save
(
flags
);
nmcr
=
(
mcr
=
read_scoop_reg
(
SCOOP_MCR
))
&
~
0x0010
;
ncpr
=
(
cpr
=
read_scoop_reg
(
SCOOP_CPR
))
&
~
0x0083
;
nccr
=
(
ccr
=
read_scoop_reg
(
SCOOP_CCR
))
&
~
0x0080
;
nimr
=
(
imr
=
read_scoop_reg
(
SCOOP_IMR
))
&
~
0x003E
;
ncpr
|=
(
state
->
Vcc
==
33
)
?
0x0001
:
(
state
->
Vcc
==
50
)
?
0x0002
:
0
;
nmcr
|=
(
state
->
flags
&
SS_IOCARD
)
?
0x0010
:
0
;
ncpr
|=
(
state
->
flags
&
SS_OUTPUT_ENA
)
?
0x0080
:
0
;
nccr
|=
(
state
->
flags
&
SS_RESET
)
?
0x0080
:
0
;
nimr
|=
((
skt
->
status
&
SS_DETECT
)
?
0x0004
:
0
)
|
((
skt
->
status
&
SS_READY
)
?
0x0002
:
0
)
|
((
skt
->
status
&
SS_BATDEAD
)
?
0x0010
:
0
)
|
((
skt
->
status
&
SS_BATWARN
)
?
0x0020
:
0
)
|
((
skt
->
status
&
SS_STSCHG
)
?
0x0010
:
0
)
|
((
skt
->
status
&
SS_WRPROT
)
?
0x0008
:
0
);
if
(
!
(
ncpr
&
0x0003
))
{
keep_rd
=
0
;
}
else
if
(
!
keep_rd
)
{
if
(
nccr
&
0x0080
)
keep_rd
=
1
;
else
nccr
|=
0x0080
;
}
if
(
mcr
!=
nmcr
)
write_scoop_reg
(
SCOOP_MCR
,
nmcr
);
if
(
cpr
!=
ncpr
)
write_scoop_reg
(
SCOOP_CPR
,
ncpr
);
if
(
ccr
!=
nccr
)
write_scoop_reg
(
SCOOP_CCR
,
nccr
);
if
(
imr
!=
nimr
)
write_scoop_reg
(
SCOOP_IMR
,
nimr
);
local_irq_restore
(
flags
);
return
0
;
}
static
void
sharpsl_pcmcia_socket_init
(
struct
soc_pcmcia_socket
*
skt
)
{
}
static
void
sharpsl_pcmcia_socket_suspend
(
struct
soc_pcmcia_socket
*
skt
)
{
}
static
struct
pcmcia_low_level
sharpsl_pcmcia_ops
=
{
.
owner
=
THIS_MODULE
,
.
hw_init
=
sharpsl_pcmcia_hw_init
,
.
hw_shutdown
=
sharpsl_pcmcia_hw_shutdown
,
.
socket_state
=
sharpsl_pcmcia_socket_state
,
.
configure_socket
=
sharpsl_pcmcia_configure_socket
,
.
socket_init
=
sharpsl_pcmcia_socket_init
,
.
socket_suspend
=
sharpsl_pcmcia_socket_suspend
,
.
first
=
0
,
.
nr
=
1
,
};
static
struct
platform_device
*
sharpsl_pcmcia_device
;
static
int
__init
sharpsl_pcmcia_init
(
void
)
{
int
ret
;
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
;
ret
=
platform_device_register
(
sharpsl_pcmcia_device
);
if
(
ret
)
kfree
(
sharpsl_pcmcia_device
);
return
ret
;
}
static
void
__exit
sharpsl_pcmcia_exit
(
void
)
{
/*
* This call is supposed to free our sharpsl_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
(
sharpsl_pcmcia_device
);
}
module_init
(
sharpsl_pcmcia_init
);
module_exit
(
sharpsl_pcmcia_exit
);
MODULE_DESCRIPTION
(
"Sharp SL Series PCMCIA Support"
);
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