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
Kirill Smelkov
linux
Commits
22a2eeda
Commit
22a2eeda
authored
Sep 10, 2003
by
Holger Freyther
Committed by
Russell King
Sep 10, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ARM PATCH] 1656/1: Simpad board update to make it work
Patch from Holger Freyther Make it work ;)
parent
967b09fc
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
114 additions
and
19 deletions
+114
-19
arch/arm/boot/compressed/head-sa1100.S
arch/arm/boot/compressed/head-sa1100.S
+4
-0
arch/arm/mach-sa1100/simpad.c
arch/arm/mach-sa1100/simpad.c
+110
-19
No files found.
arch/arm/boot/compressed/head-sa1100.S
View file @
22a2eeda
...
@@ -34,6 +34,10 @@ __SA1100_start:
...
@@ -34,6 +34,10 @@ __SA1100_start:
@
REVISIT_PFS168
:
Temporary
until
firmware
updated
to
use
assigned
machine
number
@
REVISIT_PFS168
:
Temporary
until
firmware
updated
to
use
assigned
machine
number
mov
r7
,
#
MACH_TYPE_PFS168
mov
r7
,
#
MACH_TYPE_PFS168
#endif
#endif
#ifdef CONFIG_SA1100_SIMPAD /
@
UNTIL
we
've something like an open bootldr
mov
r7
,
#
MACH_TYPE_SIMPAD
@
should
be
87
#endif
#ifdef CONFIG_SA1100_VICTOR
#ifdef CONFIG_SA1100_VICTOR
teq
r7
,
#
MACH_TYPE_VICTOR
teq
r7
,
#
MACH_TYPE_VICTOR
...
...
arch/arm/mach-sa1100/simpad.c
View file @
22a2eeda
...
@@ -9,24 +9,37 @@
...
@@ -9,24 +9,37 @@
#include <linux/tty.h>
#include <linux/tty.h>
#include <linux/proc_fs.h>
#include <linux/proc_fs.h>
#include <linux/string.h>
#include <linux/string.h>
#include <linux/pm.h>
#include <asm/irq.h>
#include <asm/hardware.h>
#include <asm/hardware.h>
#include <asm/setup.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/map.h>
#include <asm/mach/serial_sa1100.h>
#include <asm/mach/serial_sa1100.h>
#include <asm/arch/simpad.h>
#include <asm/arch/registry.h>
#include <linux/serial_core.h>
#include <linux/serial_core.h>
#include <linux/ioport.h>
#include <asm/io.h>
#include "generic.h"
#include "generic.h"
long
cs3_shadow
;
long
cs3_shadow
;
long
get_cs3_shadow
()
long
get_cs3_shadow
(
void
)
{
{
return
cs3_shadow
;
return
cs3_shadow
;
}
}
void
set_cs3
(
long
value
)
{
*
(
CS3BUSTYPE
*
)(
CS3_BASE
)
=
cs3_shadow
=
value
;
}
void
set_cs3_bit
(
int
value
)
void
set_cs3_bit
(
int
value
)
{
{
cs3_shadow
|=
value
;
cs3_shadow
|=
value
;
...
@@ -39,10 +52,15 @@ void clear_cs3_bit(int value)
...
@@ -39,10 +52,15 @@ void clear_cs3_bit(int value)
*
(
CS3BUSTYPE
*
)(
CS3_BASE
)
=
cs3_shadow
;
*
(
CS3BUSTYPE
*
)(
CS3_BASE
)
=
cs3_shadow
;
}
}
EXPORT_SYMBOL
(
set_cs3_bit
);
EXPORT_SYMBOL
(
clear_cs3_bit
);
static
struct
map_desc
simpad_io_desc
[]
__initdata
=
{
static
struct
map_desc
simpad_io_desc
[]
__initdata
=
{
/* virtual physical length type */
/* virtual physical length type */
{
0xf2800000
,
0x4b800000
,
0x00800000
,
MT_DEVICE
},
/* MQ200 */
/* MQ200 */
{
0xf1000000
,
0x18000000
,
0x00100000
,
MT_DEVICE
}
/* Paules CS3, write only */
{
0xf2800000
,
0x4b800000
,
0x00800000
,
MT_DEVICE
},
/* Paules CS3, write only */
{
0xf1000000
,
0x18000000
,
0x00100000
,
MT_DEVICE
},
};
};
...
@@ -50,32 +68,52 @@ static void simpad_uart_pm(struct uart_port *port, u_int state, u_int oldstate)
...
@@ -50,32 +68,52 @@ static void simpad_uart_pm(struct uart_port *port, u_int state, u_int oldstate)
{
{
if
(
port
->
mapbase
==
(
u_int
)
&
Ser1UTCR0
)
{
if
(
port
->
mapbase
==
(
u_int
)
&
Ser1UTCR0
)
{
if
(
state
)
if
(
state
)
{
clear_cs3_bit
(
RS232_ON
);
clear_cs3_bit
(
RS232_ON
);
else
clear_cs3_bit
(
DECT_POWER_ON
);
}
else
{
set_cs3_bit
(
RS232_ON
);
set_cs3_bit
(
RS232_ON
);
set_cs3_bit
(
DECT_POWER_ON
);
}
}
}
}
}
static
struct
sa1100_port_fns
simpad_port_fns
__initdata
=
{
static
struct
sa1100_port_fns
simpad_port_fns
__initdata
=
{
.
pm
=
simpad_uart_pm
,
.
pm
=
simpad_uart_pm
,
};
};
static
void
__init
simpad_map_io
(
void
)
static
void
__init
simpad_map_io
(
void
)
{
{
sa1100_map_io
();
sa1100_map_io
();
iotable_init
(
simpad_io_desc
,
ARRAY_SIZE
(
simpad_io_desc
));
iotable_init
(
simpad_io_desc
,
ARRAY_SIZE
(
simpad_io_desc
));
PSPR
=
0xc0008000
;
set_cs3_bit
(
EN1
|
EN0
|
LED2_ON
|
DISPLAY_ON
|
RS232_ON
|
GPDR
&=
~
GPIO_GPIO0
;
ENABLE_5V
|
RESET_SIMCARD
|
DECT_POWER_ON
);
cs3_shadow
=
(
EN1
|
EN0
|
LED2_ON
|
DISPLAY_ON
|
RS232_ON
|
ENABLE_5V
|
RESET_SIMCARD
);
*
(
CS3BUSTYPE
*
)(
CS3_BASE
)
=
cs3_shadow
;
sa1100_register_uart_fns
(
&
simpad_port_fns
);
sa1100_register_uart
(
0
,
3
);
/* serial interface */
sa1100_register_uart
(
1
,
1
);
/* DECT */
// Reassign UART 1 pins
GAFR
|=
GPIO_UART_TXD
|
GPIO_UART_RXD
;
GPDR
|=
GPIO_UART_TXD
|
GPIO_LDD13
|
GPIO_LDD15
;
GPDR
&=
~
GPIO_UART_RXD
;
PPAR
|=
PPAR_UPR
;
/*
* Set up registers for sleep mode.
*/
PWER
=
PWER_GPIO0
|
PWER_RTC
;
PGSR
=
0x818
;
PCFR
=
0
;
PSDR
=
0
;
//It is only possible to register 3 UART in serial_sa1100.c
sa1100_register_uart
(
0
,
3
);
sa1100_register_uart
(
1
,
1
);
set_irq_type
(
IRQ_GPIO_UCB1300_IRQ
,
IRQT_RISING
);
}
}
#ifdef CONFIG_PROC_FS
#ifdef CONFIG_PROC_FS
...
@@ -105,7 +143,7 @@ static int proc_cs3_read(char *page, char **start, off_t off,
...
@@ -105,7 +143,7 @@ static int proc_cs3_read(char *page, char **start, off_t off,
char
*
p
=
page
;
char
*
p
=
page
;
int
len
,
i
;
int
len
,
i
;
p
+=
sprintf
(
p
,
"Chipselect3 : %x
\n
"
,
cs3_shadow
);
p
+=
sprintf
(
p
,
"Chipselect3 : %x
\n
"
,
(
uint
)
cs3_shadow
);
for
(
i
=
0
;
i
<=
15
;
i
++
)
{
for
(
i
=
0
;
i
<=
15
;
i
++
)
{
if
(
cs3_shadow
&
(
1
<<
i
))
{
if
(
cs3_shadow
&
(
1
<<
i
))
{
p
+=
sprintf
(
p
,
"%s
\t
: TRUE
\n
"
,
name
[
i
]);
p
+=
sprintf
(
p
,
"%s
\t
: TRUE
\n
"
,
name
[
i
]);
...
@@ -121,23 +159,76 @@ static int proc_cs3_read(char *page, char **start, off_t off,
...
@@ -121,23 +159,76 @@ static int proc_cs3_read(char *page, char **start, off_t off,
return
len
;
return
len
;
}
}
static
int
proc_cs3_write
(
struct
file
*
file
,
const
char
*
buffer
,
size_t
count
,
loff_t
*
ppos
)
{
unsigned
long
newRegValue
;
char
*
endp
;
newRegValue
=
simple_strtoul
(
buffer
,
&
endp
,
0
);
set_cs3
(
newRegValue
);
return
(
count
+
endp
-
buffer
);
}
#endif
static
int
__init
cs3_init
(
void
)
static
int
__init
cs3_init
(
void
)
{
{
struct
proc_dir_entry
*
proc_cs3
=
create_proc_entry
(
"cs3"
,
0
,
0
);
#ifdef CONFIG_PROC_FS
struct
proc_dir_entry
*
proc_cs3
=
create_proc_entry
(
"CS3"
,
0
,
0
);
if
(
proc_cs3
)
if
(
proc_cs3
)
{
proc_cs3
->
read_proc
=
proc_cs3_read
;
proc_cs3
->
read_proc
=
proc_cs3_read
;
proc_cs3
->
write_proc
=
(
void
*
)
proc_cs3_write
;
}
#endif
return
0
;
return
0
;
}
}
arch_initcall
(
cs3_init
);
arch_initcall
(
cs3_init
);
#endif // CONFIG_PROC_FS
static
void
simpad_power_off
(
void
)
{
local_irq_disable
();
// was cli
set_cs3
(
0x800
);
/* only SD_MEDIAQ */
/* disable internal oscillator, float CS lines */
PCFR
=
(
PCFR_OPDE
|
PCFR_FP
|
PCFR_FS
);
/* enable wake-up on GPIO0 (Assabet...) */
PWER
=
GFER
=
GRER
=
1
;
/*
* set scratchpad to zero, just in case it is used as a
* restart address by the bootloader.
*/
PSPR
=
0
;
PGSR
=
0
;
/* enter sleep mode */
PMCR
=
PMCR_SF
;
while
(
1
);
local_irq_enable
();
/* we won't ever call it */
}
static
int
__init
simpad_init
(
void
)
{
set_power_off_handler
(
simpad_power_off
);
return
0
;
}
arch_initcall
(
simpad_init
);
MACHINE_START
(
SIMPAD
,
"Simpad"
)
MACHINE_START
(
SIMPAD
,
"Simpad"
)
MAINTAINER
(
"Juergen Messerer"
)
MAINTAINER
(
"Juergen Messerer"
)
BOOT_MEM
(
0xc0000000
,
0x80000000
,
0xf8000000
)
BOOT_MEM
(
0xc0000000
,
0x80000000
,
0xf8000000
)
BOOT_PARAMS
(
0xc0000100
)
MAPIO
(
simpad_map_io
)
MAPIO
(
simpad_map_io
)
INITIRQ
(
sa1100_init_irq
)
INITIRQ
(
sa1100_init_irq
)
MACHINE_END
MACHINE_END
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