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
37d7035d
Commit
37d7035d
authored
Jul 12, 2008
by
Russell King
Committed by
Russell King
Jul 12, 2008
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'pxa-devel' into pxa
parents
0fc3ff31
54b23846
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
399 additions
and
74 deletions
+399
-74
arch/arm/mach-pxa/Kconfig
arch/arm/mach-pxa/Kconfig
+1
-1
arch/arm/mach-pxa/clock.h
arch/arm/mach-pxa/clock.h
+24
-0
arch/arm/mach-pxa/devices.c
arch/arm/mach-pxa/devices.c
+43
-0
arch/arm/mach-pxa/devices.h
arch/arm/mach-pxa/devices.h
+2
-0
arch/arm/mach-pxa/littleton.c
arch/arm/mach-pxa/littleton.c
+57
-4
arch/arm/mach-pxa/mainstone.c
arch/arm/mach-pxa/mainstone.c
+4
-4
arch/arm/mach-pxa/mfp-pxa2xx.c
arch/arm/mach-pxa/mfp-pxa2xx.c
+51
-20
arch/arm/mach-pxa/pxa300.c
arch/arm/mach-pxa/pxa300.c
+18
-1
arch/arm/mach-pxa/pxa320.c
arch/arm/mach-pxa/pxa320.c
+14
-7
arch/arm/mach-pxa/pxa3xx.c
arch/arm/mach-pxa/pxa3xx.c
+3
-22
arch/arm/mach-pxa/ssp.c
arch/arm/mach-pxa/ssp.c
+4
-9
arch/arm/mach-pxa/zylonite.c
arch/arm/mach-pxa/zylonite.c
+93
-1
arch/arm/mach-pxa/zylonite_pxa300.c
arch/arm/mach-pxa/zylonite_pxa300.c
+46
-0
arch/arm/mach-pxa/zylonite_pxa320.c
arch/arm/mach-pxa/zylonite_pxa320.c
+6
-0
arch/arm/mm/Makefile
arch/arm/mm/Makefile
+2
-0
include/asm-arm/arch-pxa/irqs.h
include/asm-arm/arch-pxa/irqs.h
+2
-0
include/asm-arm/arch-pxa/mfp-pxa2xx.h
include/asm-arm/arch-pxa/mfp-pxa2xx.h
+1
-0
include/asm-arm/arch-pxa/pxa3xx_nand.h
include/asm-arm/arch-pxa/pxa3xx_nand.h
+2
-0
include/asm-arm/arch-pxa/regs-ssp.h
include/asm-arm/arch-pxa/regs-ssp.h
+15
-1
include/asm-arm/arch-pxa/uncompress.h
include/asm-arm/arch-pxa/uncompress.h
+9
-4
include/asm-arm/arch-pxa/zylonite.h
include/asm-arm/arch-pxa/zylonite.h
+2
-0
No files found.
arch/arm/mach-pxa/Kconfig
View file @
37d7035d
...
...
@@ -184,7 +184,7 @@ config MACH_COLIBRI
select PXA27x
config MACH_ZYLONITE
bool "PXA3xx Development Platform"
bool "PXA3xx Development Platform
(aka Zylonite)
"
select PXA3xx
select HAVE_PWM
...
...
arch/arm/mach-pxa/clock.h
View file @
37d7035d
...
...
@@ -61,4 +61,28 @@ extern const struct clkops clk_cken_ops;
void
clk_cken_enable
(
struct
clk
*
clk
);
void
clk_cken_disable
(
struct
clk
*
clk
);
#ifdef CONFIG_PXA3xx
#define PXA3xx_CKEN(_name, _cken, _rate, _delay, _dev) \
{ \
.name = _name, \
.dev = _dev, \
.ops = &clk_pxa3xx_cken_ops, \
.rate = _rate, \
.cken = CKEN_##_cken, \
.delay = _delay, \
}
#define PXA3xx_CK(_name, _cken, _ops, _dev) \
{ \
.name = _name, \
.dev = _dev, \
.ops = _ops, \
.cken = CKEN_##_cken, \
}
extern
const
struct
clkops
clk_pxa3xx_cken_ops
;
extern
void
clk_pxa3xx_cken_enable
(
struct
clk
*
);
extern
void
clk_pxa3xx_cken_disable
(
struct
clk
*
);
#endif
void
clks_register
(
struct
clk
*
clks
,
size_t
num
);
arch/arm/mach-pxa/devices.c
View file @
37d7035d
...
...
@@ -16,6 +16,7 @@
#include <asm/arch/pxa2xx_spi.h>
#include <asm/arch/camera.h>
#include <asm/arch/audio.h>
#include <asm/arch/pxa3xx_nand.h>
#include "devices.h"
#include "generic.h"
...
...
@@ -831,6 +832,48 @@ void __init pxa3xx_set_mci3_info(struct pxamci_platform_data *info)
pxa_register_device
(
&
pxa3xx_device_mci3
,
info
);
}
static
struct
resource
pxa3xx_resources_nand
[]
=
{
[
0
]
=
{
.
start
=
0x43100000
,
.
end
=
0x43100053
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
IRQ_NAND
,
.
end
=
IRQ_NAND
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
/* DRCMR for Data DMA */
.
start
=
97
,
.
end
=
97
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
/* DRCMR for Command DMA */
.
start
=
99
,
.
end
=
99
,
.
flags
=
IORESOURCE_DMA
,
},
};
static
u64
pxa3xx_nand_dma_mask
=
DMA_BIT_MASK
(
32
);
struct
platform_device
pxa3xx_device_nand
=
{
.
name
=
"pxa3xx-nand"
,
.
id
=
-
1
,
.
dev
=
{
.
dma_mask
=
&
pxa3xx_nand_dma_mask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
},
.
num_resources
=
ARRAY_SIZE
(
pxa3xx_resources_nand
),
.
resource
=
pxa3xx_resources_nand
,
};
void
__init
pxa3xx_set_nand_info
(
struct
pxa3xx_nand_platform_data
*
info
)
{
pxa_register_device
(
&
pxa3xx_device_nand
,
info
);
}
#endif
/* CONFIG_PXA3xx */
/* pxa2xx-spi platform-device ID equals respective SSP platform-device ID + 1.
...
...
arch/arm/mach-pxa/devices.h
View file @
37d7035d
...
...
@@ -31,4 +31,6 @@ extern struct platform_device pxa25x_device_pwm1;
extern
struct
platform_device
pxa27x_device_pwm0
;
extern
struct
platform_device
pxa27x_device_pwm1
;
extern
struct
platform_device
pxa3xx_device_nand
;
void
__init
pxa_register_device
(
struct
platform_device
*
dev
,
void
*
data
);
arch/arm/mach-pxa/littleton.c
View file @
37d7035d
...
...
@@ -38,6 +38,7 @@
#include <asm/arch/pxafb.h>
#include <asm/arch/ssp.h>
#include <asm/arch/pxa27x_keypad.h>
#include <asm/arch/pxa3xx_nand.h>
#include <asm/arch/littleton.h>
#include "generic.h"
...
...
@@ -101,7 +102,7 @@ static struct resource smc91x_resources[] = {
[
1
]
=
{
.
start
=
IRQ_GPIO
(
mfp_to_gpio
(
MFP_PIN_GPIO90
)),
.
end
=
IRQ_GPIO
(
mfp_to_gpio
(
MFP_PIN_GPIO90
)),
.
flags
=
IORESOURCE_IRQ
|
I
RQF_TRIGGER_FALLING
,
.
flags
=
IORESOURCE_IRQ
|
I
ORESOURCE_IRQ_LOWEDGE
,
}
};
...
...
@@ -112,7 +113,7 @@ static struct platform_device smc91x_device = {
.
resource
=
smc91x_resources
,
};
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE
S
)
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
/* use bit 30, 31 as the indicator of command parameter number */
#define CMD0(x) ((0x00000000) | ((x) << 9))
#define CMD1(x, x1) ((0x40000000) | ((x) << 9) | 0x100 | (x1))
...
...
@@ -311,9 +312,9 @@ static void littleton_init_lcd(void)
}
#else
static
inline
void
littleton_init_lcd
(
void
)
{};
#endif
/* CONFIG_FB_PXA || CONFIG_FB_PXA_MODULE
S
*/
#endif
/* CONFIG_FB_PXA || CONFIG_FB_PXA_MODULE */
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE
S
)
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
static
unsigned
int
littleton_matrix_key_map
[]
=
{
/* KEY(row, col, key_code) */
KEY
(
1
,
3
,
KEY_0
),
KEY
(
0
,
0
,
KEY_1
),
KEY
(
1
,
0
,
KEY_2
),
KEY
(
2
,
0
,
KEY_3
),
...
...
@@ -361,6 +362,57 @@ static void __init littleton_init_keypad(void)
static
inline
void
littleton_init_keypad
(
void
)
{}
#endif
#if defined(CONFIG_MTD_NAND_PXA3xx) || defined(CONFIG_MTD_NAND_PXA3xx_MODULE)
static
struct
mtd_partition
littleton_nand_partitions
[]
=
{
[
0
]
=
{
.
name
=
"Bootloader"
,
.
offset
=
0
,
.
size
=
0x060000
,
.
mask_flags
=
MTD_WRITEABLE
,
/* force read-only */
},
[
1
]
=
{
.
name
=
"Kernel"
,
.
offset
=
0x060000
,
.
size
=
0x200000
,
.
mask_flags
=
MTD_WRITEABLE
,
/* force read-only */
},
[
2
]
=
{
.
name
=
"Filesystem"
,
.
offset
=
0x0260000
,
.
size
=
0x3000000
,
/* 48M - rootfs */
},
[
3
]
=
{
.
name
=
"MassStorage"
,
.
offset
=
0x3260000
,
.
size
=
0x3d40000
,
},
[
4
]
=
{
.
name
=
"BBT"
,
.
offset
=
0x6FA0000
,
.
size
=
0x80000
,
.
mask_flags
=
MTD_WRITEABLE
,
/* force read-only */
},
/* NOTE: we reserve some blocks at the end of the NAND flash for
* bad block management, and the max number of relocation blocks
* differs on different platforms. Please take care with it when
* defining the partition table.
*/
};
static
struct
pxa3xx_nand_platform_data
littleton_nand_info
=
{
.
enable_arbiter
=
1
,
.
parts
=
littleton_nand_partitions
,
.
nr_parts
=
ARRAY_SIZE
(
littleton_nand_partitions
),
};
static
void
__init
littleton_init_nand
(
void
)
{
pxa3xx_set_nand_info
(
&
littleton_nand_info
);
}
#else
static
inline
void
littleton_init_nand
(
void
)
{}
#endif
/* CONFIG_MTD_NAND_PXA3xx || CONFIG_MTD_NAND_PXA3xx_MODULE */
static
void
__init
littleton_init
(
void
)
{
/* initialize MFP configurations */
...
...
@@ -374,6 +426,7 @@ static void __init littleton_init(void)
littleton_init_lcd
();
littleton_init_keypad
();
littleton_init_nand
();
}
MACHINE_START
(
LITTLETON
,
"Marvell Form Factor Development Platform (aka Littleton)"
)
...
...
arch/arm/mach-pxa/mainstone.c
View file @
37d7035d
...
...
@@ -110,9 +110,9 @@ static unsigned long mainstone_pin_config[] = {
GPIO45_AC97_SYSCLK
,
/* Keypad */
GPIO93_KP_DKIN_0
|
WAKEUP_ON_LEVEL_HIGH
,
GPIO94_KP_DKIN_1
|
WAKEUP_ON_LEVEL_HIGH
,
GPIO95_KP_DKIN_2
|
WAKEUP_ON_LEVEL_HIGH
,
GPIO93_KP_DKIN_0
,
GPIO94_KP_DKIN_1
,
GPIO95_KP_DKIN_2
,
GPIO100_KP_MKIN_0
|
WAKEUP_ON_LEVEL_HIGH
,
GPIO101_KP_MKIN_1
|
WAKEUP_ON_LEVEL_HIGH
,
GPIO102_KP_MKIN_2
|
WAKEUP_ON_LEVEL_HIGH
,
...
...
@@ -514,7 +514,7 @@ static struct pxaohci_platform_data mainstone_ohci_platform_data = {
.
init
=
mainstone_ohci_init
,
};
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE
S
)
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
static
unsigned
int
mainstone_matrix_keys
[]
=
{
KEY
(
0
,
0
,
KEY_A
),
KEY
(
1
,
0
,
KEY_B
),
KEY
(
2
,
0
,
KEY_C
),
KEY
(
3
,
0
,
KEY_D
),
KEY
(
4
,
0
,
KEY_E
),
KEY
(
5
,
0
,
KEY_F
),
...
...
arch/arm/mach-pxa/mfp-pxa2xx.c
View file @
37d7035d
...
...
@@ -39,6 +39,28 @@ struct gpio_desc {
static
struct
gpio_desc
gpio_desc
[
MFP_PIN_GPIO127
+
1
];
static
int
__mfp_config_lpm
(
unsigned
gpio
,
unsigned
long
lpm
)
{
unsigned
mask
=
GPIO_bit
(
gpio
);
/* low power state */
switch
(
lpm
)
{
case
MFP_LPM_DRIVE_HIGH
:
PGSR
(
gpio
)
|=
mask
;
break
;
case
MFP_LPM_DRIVE_LOW
:
PGSR
(
gpio
)
&=
~
mask
;
break
;
case
MFP_LPM_INPUT
:
break
;
default:
pr_warning
(
"%s: invalid low power state for GPIO%d
\n
"
,
__func__
,
gpio
);
return
-
EINVAL
;
}
return
0
;
}
static
int
__mfp_config_gpio
(
unsigned
gpio
,
unsigned
long
c
)
{
unsigned
long
gafr
,
mask
=
GPIO_bit
(
gpio
);
...
...
@@ -57,21 +79,8 @@ static int __mfp_config_gpio(unsigned gpio, unsigned long c)
else
GPDR
(
gpio
)
&=
~
mask
;
/* low power state */
switch
(
c
&
MFP_LPM_STATE_MASK
)
{
case
MFP_LPM_DRIVE_HIGH
:
PGSR
(
gpio
)
|=
mask
;
break
;
case
MFP_LPM_DRIVE_LOW
:
PGSR
(
gpio
)
&=
~
mask
;
break
;
case
MFP_LPM_INPUT
:
break
;
default:
pr_warning
(
"%s: invalid low power state for GPIO%d
\n
"
,
__func__
,
gpio
);
if
(
__mfp_config_lpm
(
gpio
,
c
&
MFP_LPM_STATE_MASK
))
return
-
EINVAL
;
}
/* give early warning if MFP_LPM_CAN_WAKEUP is set on the
* configurations of those pins not able to wakeup
...
...
@@ -91,6 +100,18 @@ static int __mfp_config_gpio(unsigned gpio, unsigned long c)
return
0
;
}
static
inline
int
__mfp_validate
(
int
mfp
)
{
int
gpio
=
mfp_to_gpio
(
mfp
);
if
((
mfp
>
MFP_PIN_GPIO127
)
||
!
gpio_desc
[
gpio
].
valid
)
{
pr_warning
(
"%s: GPIO%d is invalid pin
\n
"
,
__func__
,
gpio
);
return
-
1
;
}
return
gpio
;
}
void
pxa2xx_mfp_config
(
unsigned
long
*
mfp_cfgs
,
int
num
)
{
unsigned
long
flags
;
...
...
@@ -99,13 +120,9 @@ void pxa2xx_mfp_config(unsigned long *mfp_cfgs, int num)
for
(
i
=
0
,
c
=
mfp_cfgs
;
i
<
num
;
i
++
,
c
++
)
{
gpio
=
mfp_to_gpio
(
MFP_PIN
(
*
c
));
if
(
!
gpio_desc
[
gpio
].
valid
)
{
pr_warning
(
"%s: GPIO%d is invalid pin
\n
"
,
__func__
,
gpio
);
gpio
=
__mfp_validate
(
MFP_PIN
(
*
c
));
if
(
gpio
<
0
)
continue
;
}
local_irq_save
(
flags
);
...
...
@@ -116,6 +133,20 @@ void pxa2xx_mfp_config(unsigned long *mfp_cfgs, int num)
}
}
void
pxa2xx_mfp_set_lpm
(
int
mfp
,
unsigned
long
lpm
)
{
unsigned
long
flags
;
int
gpio
;
gpio
=
__mfp_validate
(
mfp
);
if
(
gpio
<
0
)
return
;
local_irq_save
(
flags
);
__mfp_config_lpm
(
gpio
,
lpm
);
local_irq_restore
(
flags
);
}
int
gpio_set_wake
(
unsigned
int
gpio
,
unsigned
int
on
)
{
struct
gpio_desc
*
d
;
...
...
arch/arm/mach-pxa/pxa300.c
View file @
37d7035d
...
...
@@ -15,10 +15,16 @@
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <asm/hardware.h>
#include <asm/arch/pxa3xx-regs.h>
#include <asm/arch/mfp-pxa300.h>
#include "generic.h"
#include "devices.h"
#include "clock.h"
static
struct
pxa3xx_mfp_addr_map
pxa300_mfp_addr_map
[]
__initdata
=
{
MFP_ADDR_X
(
GPIO0
,
GPIO2
,
0x00b4
),
...
...
@@ -79,15 +85,26 @@ static struct pxa3xx_mfp_addr_map pxa310_mfp_addr_map[] __initdata = {
MFP_ADDR_END
,
};
static
struct
clk
common_clks
[]
=
{
PXA3xx_CKEN
(
"NANDCLK"
,
NAND
,
156000000
,
0
,
&
pxa3xx_device_nand
.
dev
),
};
static
struct
clk
pxa310_clks
[]
=
{
PXA3xx_CKEN
(
"MMCCLK"
,
MMC3
,
19500000
,
0
,
&
pxa3xx_device_mci3
.
dev
),
};
static
int
__init
pxa300_init
(
void
)
{
if
(
cpu_is_pxa300
()
||
cpu_is_pxa310
())
{
pxa3xx_init_mfp
();
pxa3xx_mfp_init_addr
(
pxa300_mfp_addr_map
);
clks_register
(
ARRAY_AND_SIZE
(
common_clks
));
}
if
(
cpu_is_pxa310
())
if
(
cpu_is_pxa310
())
{
pxa3xx_mfp_init_addr
(
pxa310_mfp_addr_map
);
clks_register
(
ARRAY_AND_SIZE
(
pxa310_clks
));
}
return
0
;
}
...
...
arch/arm/mach-pxa/pxa320.c
View file @
37d7035d
...
...
@@ -15,11 +15,17 @@
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <asm/hardware.h>
#include <asm/arch/mfp.h>
#include <asm/arch/pxa3xx-regs.h>
#include <asm/arch/mfp-pxa320.h>
#include "generic.h"
#include "devices.h"
#include "clock.h"
static
struct
pxa3xx_mfp_addr_map
pxa320_mfp_addr_map
[]
__initdata
=
{
MFP_ADDR_X
(
GPIO0
,
GPIO4
,
0x0124
),
...
...
@@ -74,16 +80,17 @@ static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = {
MFP_ADDR_END
,
};
static
void
__init
pxa320_init_mfp
(
void
)
{
pxa3xx_init_mfp
();
pxa3xx_mfp_init_addr
(
pxa320_mfp_addr_map
);
}
static
struct
clk
pxa320_clks
[]
=
{
PXA3xx_CKEN
(
"NANDCLK"
,
NAND
,
104000000
,
0
,
&
pxa3xx_device_nand
.
dev
),
};
static
int
__init
pxa320_init
(
void
)
{
if
(
cpu_is_pxa320
())
pxa320_init_mfp
();
if
(
cpu_is_pxa320
())
{
pxa3xx_init_mfp
();
pxa3xx_mfp_init_addr
(
pxa320_mfp_addr_map
);
clks_register
(
ARRAY_AND_SIZE
(
pxa320_clks
));
}
return
0
;
}
...
...
arch/arm/mach-pxa/pxa3xx.c
View file @
37d7035d
...
...
@@ -144,7 +144,7 @@ static unsigned long clk_pxa3xx_hsio_getrate(struct clk *clk)
return
hsio_clk
;
}
static
void
clk_pxa3xx_cken_enable
(
struct
clk
*
clk
)
void
clk_pxa3xx_cken_enable
(
struct
clk
*
clk
)
{
unsigned
long
mask
=
1ul
<<
(
clk
->
cken
&
0x1f
);
...
...
@@ -154,7 +154,7 @@ static void clk_pxa3xx_cken_enable(struct clk *clk)
CKENB
|=
mask
;
}
static
void
clk_pxa3xx_cken_disable
(
struct
clk
*
clk
)
void
clk_pxa3xx_cken_disable
(
struct
clk
*
clk
)
{
unsigned
long
mask
=
1ul
<<
(
clk
->
cken
&
0x1f
);
...
...
@@ -164,7 +164,7 @@ static void clk_pxa3xx_cken_disable(struct clk *clk)
CKENB
&=
~
mask
;
}
static
const
struct
clkops
clk_pxa3xx_cken_ops
=
{
const
struct
clkops
clk_pxa3xx_cken_ops
=
{
.
enable
=
clk_pxa3xx_cken_enable
,
.
disable
=
clk_pxa3xx_cken_disable
,
};
...
...
@@ -196,24 +196,6 @@ static const struct clkops clk_pout_ops = {
.
disable
=
clk_pout_disable
,
};
#define PXA3xx_CKEN(_name, _cken, _rate, _delay, _dev) \
{ \
.name = _name, \
.dev = _dev, \
.ops = &clk_pxa3xx_cken_ops, \
.rate = _rate, \
.cken = CKEN_##_cken, \
.delay = _delay, \
}
#define PXA3xx_CK(_name, _cken, _ops, _dev) \
{ \
.name = _name, \
.dev = _dev, \
.ops = _ops, \
.cken = CKEN_##_cken, \
}
static
struct
clk
pxa3xx_clks
[]
=
{
{
.
name
=
"CLK_POUT"
,
...
...
@@ -244,7 +226,6 @@ static struct clk pxa3xx_clks[] = {
PXA3xx_CKEN
(
"MMCCLK"
,
MMC1
,
19500000
,
0
,
&
pxa_device_mci
.
dev
),
PXA3xx_CKEN
(
"MMCCLK"
,
MMC2
,
19500000
,
0
,
&
pxa3xx_device_mci2
.
dev
),
PXA3xx_CKEN
(
"MMCCLK"
,
MMC3
,
19500000
,
0
,
&
pxa3xx_device_mci3
.
dev
),
};
#ifdef CONFIG_PM
...
...
arch/arm/mach-pxa/ssp.c
View file @
37d7035d
...
...
@@ -14,13 +14,6 @@
* IO-based SSP applications and allows easy port setup for DMA access.
*
* Author: Liam Girdwood <liam.girdwood@wolfsonmicro.com>
*
* Revision history:
* 22nd Aug 2003 Initial version.
* 20th Dec 2004 Added ssp_config for changing port config without
* closing the port.
* 4th Aug 2005 Added option to disable irq handler registration and
* cleaned up irq and clock detection.
*/
#include <linux/module.h>
...
...
@@ -285,7 +278,7 @@ int ssp_init(struct ssp_dev *dev, u32 port, u32 init_flags)
goto
out_region
;
dev
->
irq
=
ssp
->
irq
;
}
else
dev
->
irq
=
0
;
dev
->
irq
=
NO_IRQ
;
/* turn on SSP port clock */
clk_enable
(
ssp
->
clk
);
...
...
@@ -306,7 +299,8 @@ void ssp_exit(struct ssp_dev *dev)
struct
ssp_device
*
ssp
=
dev
->
ssp
;
ssp_disable
(
dev
);
free_irq
(
dev
->
irq
,
dev
);
if
(
dev
->
irq
!=
NO_IRQ
)
free_irq
(
dev
->
irq
,
dev
);
clk_disable
(
ssp
->
clk
);
ssp_free
(
ssp
);
}
...
...
@@ -360,6 +354,7 @@ static int __devinit ssp_probe(struct platform_device *pdev, int type)
dev_err
(
&
pdev
->
dev
,
"failed to allocate memory"
);
return
-
ENOMEM
;
}
ssp
->
pdev
=
pdev
;
ssp
->
clk
=
clk_get
(
&
pdev
->
dev
,
"SSPCLK"
);
if
(
IS_ERR
(
ssp
->
clk
))
{
...
...
arch/arm/mach-pxa/zylonite.c
View file @
37d7035d
...
...
@@ -29,6 +29,7 @@
#include <asm/arch/zylonite.h>
#include <asm/arch/mmc.h>
#include <asm/arch/pxa27x_keypad.h>
#include <asm/arch/pxa3xx_nand.h>
#include "devices.h"
#include "generic.h"
...
...
@@ -37,6 +38,8 @@
struct
platform_mmc_slot
zylonite_mmc_slot
[
MAX_SLOTS
];
int
gpio_eth_irq
;
int
gpio_debug_led1
;
int
gpio_debug_led2
;
int
wm9713_irq
;
...
...
@@ -63,6 +66,42 @@ static struct platform_device smc91x_device = {
.
resource
=
smc91x_resources
,
};
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
static
struct
gpio_led
zylonite_debug_leds
[]
=
{
[
0
]
=
{
.
name
=
"zylonite:yellow:1"
,
.
default_trigger
=
"heartbeat"
,
},
[
1
]
=
{
.
name
=
"zylonite:yellow:2"
,
.
default_trigger
=
"default-on"
,
},
};
static
struct
gpio_led_platform_data
zylonite_debug_leds_info
=
{
.
leds
=
zylonite_debug_leds
,
.
num_leds
=
ARRAY_SIZE
(
zylonite_debug_leds
),
};
static
struct
platform_device
zylonite_device_leds
=
{
.
name
=
"leds-gpio"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
zylonite_debug_leds_info
,
}
};
static
void
__init
zylonite_init_leds
(
void
)
{
zylonite_debug_leds
[
0
].
gpio
=
gpio_debug_led1
;
zylonite_debug_leds
[
1
].
gpio
=
gpio_debug_led2
;
platform_device_register
(
&
zylonite_device_leds
);
}
#else
static
inline
void
zylonite_init_leds
(
void
)
{}
#endif
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
static
struct
platform_pwm_backlight_data
zylonite_backlight_data
=
{
.
pwm_id
=
3
,
...
...
@@ -259,7 +298,7 @@ static void __init zylonite_init_mmc(void)
static
inline
void
zylonite_init_mmc
(
void
)
{}
#endif
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE
S
)
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
static
unsigned
int
zylonite_matrix_key_map
[]
=
{
/* KEY(row, col, key_code) */
KEY
(
0
,
0
,
KEY_A
),
KEY
(
0
,
1
,
KEY_B
),
KEY
(
0
,
2
,
KEY_C
),
KEY
(
0
,
5
,
KEY_D
),
...
...
@@ -324,6 +363,57 @@ static void __init zylonite_init_keypad(void)
static
inline
void
zylonite_init_keypad
(
void
)
{}
#endif
#if defined(CONFIG_MTD_NAND_PXA3xx) || defined(CONFIG_MTD_NAND_PXA3xx_MODULE)
static
struct
mtd_partition
zylonite_nand_partitions
[]
=
{
[
0
]
=
{
.
name
=
"Bootloader"
,
.
offset
=
0
,
.
size
=
0x060000
,
.
mask_flags
=
MTD_WRITEABLE
,
/* force read-only */
},
[
1
]
=
{
.
name
=
"Kernel"
,
.
offset
=
0x060000
,
.
size
=
0x200000
,
.
mask_flags
=
MTD_WRITEABLE
,
/* force read-only */
},
[
2
]
=
{
.
name
=
"Filesystem"
,
.
offset
=
0x0260000
,
.
size
=
0x3000000
,
/* 48M - rootfs */
},
[
3
]
=
{
.
name
=
"MassStorage"
,
.
offset
=
0x3260000
,
.
size
=
0x3d40000
,
},
[
4
]
=
{
.
name
=
"BBT"
,
.
offset
=
0x6FA0000
,
.
size
=
0x80000
,
.
mask_flags
=
MTD_WRITEABLE
,
/* force read-only */
},
/* NOTE: we reserve some blocks at the end of the NAND flash for
* bad block management, and the max number of relocation blocks
* differs on different platforms. Please take care with it when
* defining the partition table.
*/
};
static
struct
pxa3xx_nand_platform_data
zylonite_nand_info
=
{
.
enable_arbiter
=
1
,
.
parts
=
zylonite_nand_partitions
,
.
nr_parts
=
ARRAY_SIZE
(
zylonite_nand_partitions
),
};
static
void
__init
zylonite_init_nand
(
void
)
{
pxa3xx_set_nand_info
(
&
zylonite_nand_info
);
}
#else
static
inline
void
zylonite_init_nand
(
void
)
{}
#endif
/* CONFIG_MTD_NAND_PXA3xx || CONFIG_MTD_NAND_PXA3xx_MODULE */
static
void
__init
zylonite_init
(
void
)
{
/* board-processor specific initialization */
...
...
@@ -342,6 +432,8 @@ static void __init zylonite_init(void)
zylonite_init_lcd
();
zylonite_init_mmc
();
zylonite_init_keypad
();
zylonite_init_nand
();
zylonite_init_leds
();
}
MACHINE_START
(
ZYLONITE
,
"PXA3xx Platform Development Kit (aka Zylonite)"
)
...
...
arch/arm/mach-pxa/zylonite_pxa300.c
View file @
37d7035d
...
...
@@ -16,9 +16,12 @@
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/i2c.h>
#include <linux/i2c/pca953x.h>
#include <asm/gpio.h>
#include <asm/arch/mfp-pxa300.h>
#include <asm/arch/i2c.h>
#include <asm/arch/zylonite.h>
#include "generic.h"
...
...
@@ -109,6 +112,10 @@ static mfp_cfg_t common_mfp_cfg[] __initdata = {
GPIO12_MMC2_DAT3
,
GPIO13_MMC2_CLK
,
GPIO14_MMC2_CMD
,
/* Standard I2C */
GPIO21_I2C_SCL
,
GPIO22_I2C_SDA
,
};
static
mfp_cfg_t
pxa300_mfp_cfg
[]
__initdata
=
{
...
...
@@ -192,6 +199,39 @@ static void __init zylonite_detect_lcd_panel(void)
pxa3xx_mfp_write
(
lcd_detect_pins
[
i
],
mfpr_save
[
i
]);
}
#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
static
struct
pca953x_platform_data
gpio_exp
[]
=
{
[
0
]
=
{
.
gpio_base
=
128
,
},
[
1
]
=
{
.
gpio_base
=
144
,
},
};
struct
i2c_board_info
zylonite_i2c_board_info
[]
=
{
{
.
type
=
"pca9539"
,
.
addr
=
0x74
,
.
platform_data
=
&
gpio_exp
[
0
],
.
irq
=
IRQ_GPIO
(
18
),
},
{
.
type
=
"pca9539"
,
.
addr
=
0x75
,
.
platform_data
=
&
gpio_exp
[
1
],
.
irq
=
IRQ_GPIO
(
19
),
},
};
static
void
__init
zylonite_init_i2c
(
void
)
{
pxa_set_i2c_info
(
NULL
);
i2c_register_board_info
(
0
,
ARRAY_AND_SIZE
(
zylonite_i2c_board_info
));
}
#else
static
inline
void
zylonite_init_i2c
(
void
)
{}
#endif
void
__init
zylonite_pxa300_init
(
void
)
{
if
(
cpu_is_pxa300
()
||
cpu_is_pxa310
())
{
...
...
@@ -207,6 +247,8 @@ void __init zylonite_pxa300_init(void)
/* WM9713 IRQ */
wm9713_irq
=
mfp_to_gpio
(
MFP_PIN_GPIO26
);
zylonite_init_i2c
();
}
if
(
cpu_is_pxa300
())
{
...
...
@@ -222,4 +264,8 @@ void __init zylonite_pxa300_init(void)
zylonite_mmc_slot
[
2
].
gpio_cd
=
EXT_GPIO
(
30
);
zylonite_mmc_slot
[
2
].
gpio_wp
=
EXT_GPIO
(
31
);
}
/* GPIOs for Debug LEDs */
gpio_debug_led1
=
EXT_GPIO
(
25
);
gpio_debug_led2
=
EXT_GPIO
(
26
);
}
arch/arm/mach-pxa/zylonite_pxa320.c
View file @
37d7035d
...
...
@@ -116,6 +116,10 @@ static mfp_cfg_t mfp_cfg[] __initdata = {
GPIO27_MMC2_DAT3
,
GPIO28_MMC2_CLK
,
GPIO29_MMC2_CMD
,
/* Debug LEDs */
GPIO1_2_GPIO
|
MFP_LPM_DRIVE_HIGH
,
GPIO4_2_GPIO
|
MFP_LPM_DRIVE_HIGH
,
};
#define NUM_LCD_DETECT_PINS 7
...
...
@@ -189,6 +193,8 @@ void __init zylonite_pxa320_init(void)
/* GPIO pin assignment */
gpio_eth_irq
=
mfp_to_gpio
(
MFP_PIN_GPIO9
);
gpio_debug_led1
=
mfp_to_gpio
(
MFP_PIN_GPIO1_2
);
gpio_debug_led2
=
mfp_to_gpio
(
MFP_PIN_GPIO4_2
);
/* MMC card detect & write protect for controller 0 */
zylonite_mmc_slot
[
0
].
gpio_cd
=
mfp_to_gpio
(
MFP_PIN_GPIO1
);
...
...
arch/arm/mm/Makefile
View file @
37d7035d
...
...
@@ -74,3 +74,5 @@ obj-$(CONFIG_CPU_V6) += proc-v6.o
obj-$(CONFIG_CPU_V7)
+=
proc-v7.o
obj-$(CONFIG_CACHE_L2X0)
+=
cache-l2x0.o
obj-$(CONFIG_CACHE_XSC3L2)
+=
cache-xsc3l2.o
include/asm-arm/arch-pxa/irqs.h
View file @
37d7035d
...
...
@@ -185,6 +185,8 @@
defined(CONFIG_MACH_PCM027) || \
defined(CONFIG_MACH_MAGICIAN)
#define NR_IRQS (IRQ_BOARD_END)
#elif defined(CONFIG_MACH_ZYLONITE)
#define NR_IRQS (IRQ_BOARD_START + 32)
#else
#define NR_IRQS (IRQ_BOARD_START)
#endif
...
...
include/asm-arm/arch-pxa/mfp-pxa2xx.h
View file @
37d7035d
...
...
@@ -128,5 +128,6 @@
#define GPIO84_GPIO MFP_CFG_IN(GPIO84, AF0)
extern
void
pxa2xx_mfp_config
(
unsigned
long
*
mfp_cfgs
,
int
num
);
extern
void
pxa2xx_mfp_set_lpm
(
int
mfp
,
unsigned
long
lpm
);
extern
int
gpio_set_wake
(
unsigned
int
gpio
,
unsigned
int
on
);
#endif
/* __ASM_ARCH_MFP_PXA2XX_H */
include/asm-arm/arch-pxa/pxa3xx_nand.h
View file @
37d7035d
...
...
@@ -15,4 +15,6 @@ struct pxa3xx_nand_platform_data {
struct
mtd_partition
*
parts
;
unsigned
int
nr_parts
;
};
extern
void
pxa3xx_set_nand_info
(
struct
pxa3xx_nand_platform_data
*
info
);
#endif
/* __ASM_ARCH_PXA3XX_NAND_H */
include/asm-arm/arch-pxa/regs-ssp.h
View file @
37d7035d
...
...
@@ -20,6 +20,10 @@
#define SSTSS (0x38)
/* SSP Timeslot Status */
#define SSACD (0x3C)
/* SSP Audio Clock Divider */
#if defined(CONFIG_PXA3xx)
#define SSACDD (0x40)
/* SSP Audio Clock Dither Divider */
#endif
/* Common PXA2xx bits first */
#define SSCR0_DSS (0x0000000f)
/* Data Size Select (mask) */
#define SSCR0_DataSize(x) ((x) - 1)
/* Data Size Select [4..16] */
...
...
@@ -29,10 +33,12 @@
#define SSCR0_National (0x2 << 4)
/* National Microwire */
#define SSCR0_ECS (1 << 6)
/* External clock select */
#define SSCR0_SSE (1 << 7)
/* Synchronous Serial Port Enable */
#if defined(CONFIG_PXA25x)
#define SSCR0_SCR (0x0000ff00)
/* Serial Clock Rate (mask) */
#define SSCR0_SerClkDiv(x) ((((x) - 2)/2) << 8)
/* Divisor [2..512] */
#elif defined(CONFIG_PXA27x)
#elif defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
#define SSCR0_SCR (0x000fff00)
/* Serial Clock Rate (mask) */
#define SSCR0_SerClkDiv(x) (((x) - 1) << 8)
/* Divisor [1..4096] */
#define SSCR0_EDSS (1 << 20)
/* Extended data size select */
...
...
@@ -45,6 +51,10 @@
#define SSCR0_MOD (1 << 31)
/* Mode (normal or network) */
#endif
#if defined(CONFIG_PXA3xx)
#define SSCR0_FPCKE (1 << 29)
/* FIFO packing enable */
#endif
#define SSCR1_RIE (1 << 0)
/* Receive FIFO Interrupt Enable */
#define SSCR1_TIE (1 << 1)
/* Transmit FIFO Interrupt Enable */
#define SSCR1_LBM (1 << 2)
/* Loop-Back Mode */
...
...
@@ -109,5 +119,9 @@
#define SSACD_SCDB (1 << 3)
/* SSPSYSCLK Divider Bypass */
#define SSACD_ACPS(x) ((x) << 4)
/* Audio clock PLL select */
#define SSACD_ACDS(x) ((x) << 0)
/* Audio clock divider select */
#if defined(CONFIG_PXA3xx)
#define SSACD_SCDX8 (1 << 7)
/* SYSCLK division ratio select */
#endif
#endif
/* __ASM_ARCH_REGS_SSP_H */
include/asm-arm/arch-pxa/uncompress.h
View file @
37d7035d
...
...
@@ -11,11 +11,11 @@
#include <linux/serial_reg.h>
#include <asm/arch/pxa-regs.h>
#include <asm/mach-types.h>
#define __REG(x) ((volatile unsigned long *)x)
#define UART FFUART
#define __REG(x) ((volatile unsigned long *)x)
static
volatile
unsigned
long
*
UART
=
FFUART
;
static
inline
void
putc
(
char
c
)
{
...
...
@@ -33,8 +33,13 @@ static inline void flush(void)
{
}
static
inline
void
arch_decomp_setup
(
void
)
{
if
(
machine_is_littleton
())
UART
=
STUART
;
}
/*
* nothing to do
*/
#define arch_decomp_setup()
#define arch_decomp_wdog()
include/asm-arm/arch-pxa/zylonite.h
View file @
37d7035d
...
...
@@ -16,6 +16,8 @@ struct platform_mmc_slot {
extern
struct
platform_mmc_slot
zylonite_mmc_slot
[];
extern
int
gpio_eth_irq
;
extern
int
gpio_debug_led1
;
extern
int
gpio_debug_led2
;
extern
int
wm9713_irq
;
...
...
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