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
a9da4f7e
Commit
a9da4f7e
authored
Jul 12, 2008
by
Russell King
Committed by
Russell King
Jul 12, 2008
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'pxa-ian' and 'pxa-xm270' into pxa
Conflicts: MAINTAINERS
parents
67f5cd0f
13f75582
03fe6692
Changes
14
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
767 additions
and
412 deletions
+767
-412
MAINTAINERS
MAINTAINERS
+17
-11
arch/arm/common/sa1111.c
arch/arm/common/sa1111.c
+1
-1
arch/arm/mach-pxa/clock.c
arch/arm/mach-pxa/clock.c
+0
-30
arch/arm/mach-pxa/clock.h
arch/arm/mach-pxa/clock.h
+9
-0
arch/arm/mach-pxa/cm-x270-pci.c
arch/arm/mach-pxa/cm-x270-pci.c
+14
-13
arch/arm/mach-pxa/cm-x270-pci.h
arch/arm/mach-pxa/cm-x270-pci.h
+7
-7
arch/arm/mach-pxa/cm-x270.c
arch/arm/mach-pxa/cm-x270.c
+285
-118
arch/arm/mach-pxa/em-x270.c
arch/arm/mach-pxa/em-x270.c
+292
-79
arch/arm/mach-pxa/pxa25x.c
arch/arm/mach-pxa/pxa25x.c
+55
-4
arch/arm/mach-sa1100/clock.c
arch/arm/mach-sa1100/clock.c
+1
-1
drivers/mtd/nand/cmx270_nand.c
drivers/mtd/nand/cmx270_nand.c
+47
-32
drivers/pcmcia/pxa2xx_cm_x270.c
drivers/pcmcia/pxa2xx_cm_x270.c
+27
-66
include/asm-arm/arch-pxa/cm-x270.h
include/asm-arm/arch-pxa/cm-x270.h
+0
-50
include/asm-arm/arch-pxa/hardware.h
include/asm-arm/arch-pxa/hardware.h
+12
-0
No files found.
MAINTAINERS
View file @
a9da4f7e
...
@@ -475,28 +475,34 @@ M: kernel@wantstofly.org
...
@@ -475,28 +475,34 @@ M: kernel@wantstofly.org
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
S: Maintained
S: Maintained
ARM/COMPULAB CM-X270/EM-X270 MACHINE SUPPORT
P: Mike Rapoport
M: mike@compulab.co.il
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
S: Maintained
ARM/CORGI MACHINE SUPPORT
ARM/CORGI MACHINE SUPPORT
P: Richard Purdie
P: Richard Purdie
M: rpurdie@rpsys.net
M: rpurdie@rpsys.net
S: Maintained
S: Maintained
ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
P: Daniel Ribeiro
M: drwyrm@gmail.com
P: Stefan Schmidt
M: stefan@openezx.org
P: Harald Welte
M: laforge@openezx.org
L: openezx-devel@lists.openezx.org (subscribers-only)
W: http://www.openezx.org/
S: Maintained
ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
P: Lennert Buytenhek
P: Lennert Buytenhek
M: kernel@wantstofly.org
M: kernel@wantstofly.org
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
S: Maintained
S: Maintained
ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
P: Daniel Ribeiro
M: drwyrm@gmail.com
P: Stefan Schmidt
M: stefan@openezx.org
P: Harald Welte
M: laforge@openezx.org
L: openezx-devel@lists.openezx.org (subscribers-only)
W: http://www.openezx.org/
S: Maintained
ARM/GUMSTIX MACHINE SUPPORT
ARM/GUMSTIX MACHINE SUPPORT
P: Steve Sakoman
P: Steve Sakoman
M: sakoman@gmail.com
M: sakoman@gmail.com
...
...
arch/arm/common/sa1111.c
View file @
a9da4f7e
...
@@ -627,7 +627,7 @@ __sa1111_probe(struct device *me, struct resource *mem, int irq)
...
@@ -627,7 +627,7 @@ __sa1111_probe(struct device *me, struct resource *mem, int irq)
if
(
!
sachip
)
if
(
!
sachip
)
return
-
ENOMEM
;
return
-
ENOMEM
;
sachip
->
clk
=
clk_get
(
me
,
"
GPIO27
_CLK"
);
sachip
->
clk
=
clk_get
(
me
,
"
SA1111
_CLK"
);
if
(
!
sachip
->
clk
)
{
if
(
!
sachip
->
clk
)
{
ret
=
PTR_ERR
(
sachip
->
clk
);
ret
=
PTR_ERR
(
sachip
->
clk
);
goto
err_free
;
goto
err_free
;
...
...
arch/arm/mach-pxa/clock.c
View file @
a9da4f7e
...
@@ -101,21 +101,6 @@ unsigned long clk_get_rate(struct clk *clk)
...
@@ -101,21 +101,6 @@ unsigned long clk_get_rate(struct clk *clk)
EXPORT_SYMBOL
(
clk_get_rate
);
EXPORT_SYMBOL
(
clk_get_rate
);
static
void
clk_gpio27_enable
(
struct
clk
*
clk
)
{
pxa_gpio_mode
(
GPIO11_3_6MHz_MD
);
}
static
void
clk_gpio27_disable
(
struct
clk
*
clk
)
{
}
static
const
struct
clkops
clk_gpio27_ops
=
{
.
enable
=
clk_gpio27_enable
,
.
disable
=
clk_gpio27_disable
,
};
void
clk_cken_enable
(
struct
clk
*
clk
)
void
clk_cken_enable
(
struct
clk
*
clk
)
{
{
CKEN
|=
1
<<
clk
->
cken
;
CKEN
|=
1
<<
clk
->
cken
;
...
@@ -131,14 +116,6 @@ const struct clkops clk_cken_ops = {
...
@@ -131,14 +116,6 @@ const struct clkops clk_cken_ops = {
.
disable
=
clk_cken_disable
,
.
disable
=
clk_cken_disable
,
};
};
static
struct
clk
common_clks
[]
=
{
{
.
name
=
"GPIO27_CLK"
,
.
ops
=
&
clk_gpio27_ops
,
.
rate
=
3686400
,
},
};
void
clks_register
(
struct
clk
*
clks
,
size_t
num
)
void
clks_register
(
struct
clk
*
clks
,
size_t
num
)
{
{
int
i
;
int
i
;
...
@@ -148,10 +125,3 @@ void clks_register(struct clk *clks, size_t num)
...
@@ -148,10 +125,3 @@ void clks_register(struct clk *clks, size_t num)
list_add
(
&
clks
[
i
].
node
,
&
clocks
);
list_add
(
&
clks
[
i
].
node
,
&
clocks
);
mutex_unlock
(
&
clocks_mutex
);
mutex_unlock
(
&
clocks_mutex
);
}
}
static
int
__init
clk_init
(
void
)
{
clks_register
(
common_clks
,
ARRAY_SIZE
(
common_clks
));
return
0
;
}
arch_initcall
(
clk_init
);
arch/arm/mach-pxa/clock.h
View file @
a9da4f7e
...
@@ -47,6 +47,15 @@ struct clk {
...
@@ -47,6 +47,15 @@ struct clk {
.other = _other, \
.other = _other, \
}
}
#define INIT_CLK(_name, _ops, _rate, _delay, _dev) \
{ \
.name = _name, \
.dev = _dev, \
.ops = _ops, \
.rate = _rate, \
.delay = _delay, \
}
extern
const
struct
clkops
clk_cken_ops
;
extern
const
struct
clkops
clk_cken_ops
;
void
clk_cken_enable
(
struct
clk
*
clk
);
void
clk_cken_enable
(
struct
clk
*
clk
);
...
...
arch/arm/mach-pxa/cm-x270-pci.c
View file @
a9da4f7e
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
*
*
* Bits taken from various places.
* Bits taken from various places.
*
*
* Copyright (C) 2007 Compulab, Ltd.
* Copyright (C) 2007
, 2008
Compulab, Ltd.
* Mike Rapoport <mike@compulab.co.il>
* Mike Rapoport <mike@compulab.co.il>
*
*
* This program is free software; you can redistribute it and/or modify
* This program is free software; you can redistribute it and/or modify
...
@@ -19,16 +19,16 @@
...
@@ -19,16 +19,16 @@
#include <linux/device.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include <linux/platform_device.h>
#include <linux/irq.h>
#include <linux/irq.h>
#include <linux/gpio.h>
#include <asm/mach/pci.h>
#include <asm/mach/pci.h>
#include <asm/arch/cm-x270.h>
#include <asm/arch/pxa-regs.h>
#include <asm/arch/pxa-regs.h>
#include <asm/arch/pxa2xx-gpio.h>
#include <asm/mach-types.h>
#include <asm/mach-types.h>
#include <asm/hardware/it8152.h>
#include <asm/hardware/it8152.h>
unsigned
long
it8152_base_address
=
CMX270_IT8152_VIRT
;
unsigned
long
it8152_base_address
;
static
int
cmx270_it8152_irq_gpio
;
/*
/*
* Only first 64MB of memory can be accessed via PCI.
* Only first 64MB of memory can be accessed via PCI.
...
@@ -42,7 +42,7 @@ void __init cmx270_pci_adjust_zones(int node, unsigned long *zone_size,
...
@@ -42,7 +42,7 @@ void __init cmx270_pci_adjust_zones(int node, unsigned long *zone_size,
unsigned
int
sz
=
SZ_64M
>>
PAGE_SHIFT
;
unsigned
int
sz
=
SZ_64M
>>
PAGE_SHIFT
;
if
(
machine_is_armcore
())
{
if
(
machine_is_armcore
())
{
pr_info
(
"Adjusting zones for CM-
x
270
\n
"
);
pr_info
(
"Adjusting zones for CM-
X
270
\n
"
);
/*
/*
* Only adjust if > 64M on current system
* Only adjust if > 64M on current system
...
@@ -60,19 +60,20 @@ void __init cmx270_pci_adjust_zones(int node, unsigned long *zone_size,
...
@@ -60,19 +60,20 @@ void __init cmx270_pci_adjust_zones(int node, unsigned long *zone_size,
static
void
cmx270_it8152_irq_demux
(
unsigned
int
irq
,
struct
irq_desc
*
desc
)
static
void
cmx270_it8152_irq_demux
(
unsigned
int
irq
,
struct
irq_desc
*
desc
)
{
{
/* clear our parent irq */
/* clear our parent irq */
GEDR
(
GPIO_IT8152_IRQ
)
=
GPIO_bit
(
GPIO_IT8152_IRQ
);
GEDR
(
cmx270_it8152_irq_gpio
)
=
GPIO_bit
(
cmx270_it8152_irq_gpio
);
it8152_irq_demux
(
irq
,
desc
);
it8152_irq_demux
(
irq
,
desc
);
}
}
void
__cmx270_pci_init_irq
(
void
)
void
__cmx270_pci_init_irq
(
int
irq_gpio
)
{
{
it8152_init_irq
();
it8152_init_irq
();
pxa_gpio_mode
(
IRQ_TO_GPIO
(
GPIO_IT8152_IRQ
));
set_irq_type
(
IRQ_GPIO
(
GPIO_IT8152_IRQ
),
IRQT_RISING
);
set_irq_chained_handler
(
IRQ_GPIO
(
GPIO_IT8152_IRQ
),
cmx270_it8152_irq_gpio
=
irq_gpio
;
cmx270_it8152_irq_demux
);
set_irq_type
(
gpio_to_irq
(
irq_gpio
),
IRQT_RISING
);
set_irq_chained_handler
(
gpio_to_irq
(
irq_gpio
),
cmx270_it8152_irq_demux
);
}
}
#ifdef CONFIG_PM
#ifdef CONFIG_PM
...
@@ -115,8 +116,8 @@ static int __init cmx270_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
...
@@ -115,8 +116,8 @@ static int __init cmx270_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
/*
/*
Here comes the ugly part. The routing is baseboard specific,
Here comes the ugly part. The routing is baseboard specific,
but defining a platform for each possible base of CM-
x
270 is
but defining a platform for each possible base of CM-
X
270 is
unrealistic. Here we keep mapping for ATXBase and SB-
x
270.
unrealistic. Here we keep mapping for ATXBase and SB-
X
270.
*/
*/
/* ATXBASE PCI slot */
/* ATXBASE PCI slot */
if
(
slot
==
7
)
if
(
slot
==
7
)
...
...
arch/arm/mach-pxa/cm-x270-pci.h
View file @
a9da4f7e
extern
void
__cmx270_pci_init_irq
(
void
);
extern
void
__cmx270_pci_init_irq
(
int
irq_gpio
);
extern
void
__cmx270_pci_suspend
(
void
);
extern
void
__cmx270_pci_suspend
(
void
);
extern
void
__cmx270_pci_resume
(
void
);
extern
void
__cmx270_pci_resume
(
void
);
#ifdef CONFIG_PCI
#ifdef CONFIG_PCI
#define cmx270_pci_init_irq
__cmx270_pci_init_irq
#define cmx270_pci_init_irq
(x) __cmx270_pci_init_irq(x)
#define cmx270_pci_suspend
__cmx270_pci_suspend
#define cmx270_pci_suspend
(x) __cmx270_pci_suspend(x)
#define cmx270_pci_resume
__cmx270_pci_resume
#define cmx270_pci_resume
(x) __cmx270_pci_resume(x)
#else
#else
#define cmx270_pci_init_irq() do {} while (0)
#define cmx270_pci_init_irq(
x
) do {} while (0)
#define cmx270_pci_suspend() do {} while (0)
#define cmx270_pci_suspend(
x
) do {} while (0)
#define cmx270_pci_resume() do {} while (0)
#define cmx270_pci_resume(
x
) do {} while (0)
#endif
#endif
arch/arm/mach-pxa/cm-x270.c
View file @
a9da4f7e
This diff is collapsed.
Click to expand it.
arch/arm/mach-pxa/em-x270.c
View file @
a9da4f7e
This diff is collapsed.
Click to expand it.
arch/arm/mach-pxa/pxa25x.c
View file @
a9da4f7e
...
@@ -109,6 +109,52 @@ static const struct clkops clk_pxa25x_lcd_ops = {
...
@@ -109,6 +109,52 @@ static const struct clkops clk_pxa25x_lcd_ops = {
.
getrate
=
clk_pxa25x_lcd_getrate
,
.
getrate
=
clk_pxa25x_lcd_getrate
,
};
};
static
unsigned
long
gpio12_config_32k
[]
=
{
GPIO12_32KHz
,
};
static
unsigned
long
gpio12_config_gpio
[]
=
{
GPIO12_GPIO
,
};
static
void
clk_gpio12_enable
(
struct
clk
*
clk
)
{
pxa2xx_mfp_config
(
gpio12_config_32k
,
1
);
}
static
void
clk_gpio12_disable
(
struct
clk
*
clk
)
{
pxa2xx_mfp_config
(
gpio12_config_gpio
,
1
);
}
static
const
struct
clkops
clk_pxa25x_gpio12_ops
=
{
.
enable
=
clk_gpio12_enable
,
.
disable
=
clk_gpio12_disable
,
};
static
unsigned
long
gpio11_config_3m6
[]
=
{
GPIO11_3_6MHz
,
};
static
unsigned
long
gpio11_config_gpio
[]
=
{
GPIO11_GPIO
,
};
static
void
clk_gpio11_enable
(
struct
clk
*
clk
)
{
pxa2xx_mfp_config
(
gpio11_config_3m6
,
1
);
}
static
void
clk_gpio11_disable
(
struct
clk
*
clk
)
{
pxa2xx_mfp_config
(
gpio11_config_gpio
,
1
);
}
static
const
struct
clkops
clk_pxa25x_gpio11_ops
=
{
.
enable
=
clk_gpio11_enable
,
.
disable
=
clk_gpio11_disable
,
};
/*
/*
* 3.6864MHz -> OST, GPIO, SSP, PWM, PLLs (95.842MHz, 147.456MHz)
* 3.6864MHz -> OST, GPIO, SSP, PWM, PLLs (95.842MHz, 147.456MHz)
* 95.842MHz -> MMC 19.169MHz, I2C 31.949MHz, FICP 47.923MHz, USB 47.923MHz
* 95.842MHz -> MMC 19.169MHz, I2C 31.949MHz, FICP 47.923MHz, USB 47.923MHz
...
@@ -128,6 +174,8 @@ static struct clk pxa25x_clks[] = {
...
@@ -128,6 +174,8 @@ static struct clk pxa25x_clks[] = {
INIT_CKEN
(
"UARTCLK"
,
BTUART
,
14745600
,
1
,
&
pxa_device_btuart
.
dev
),
INIT_CKEN
(
"UARTCLK"
,
BTUART
,
14745600
,
1
,
&
pxa_device_btuart
.
dev
),
INIT_CKEN
(
"UARTCLK"
,
STUART
,
14745600
,
1
,
NULL
),
INIT_CKEN
(
"UARTCLK"
,
STUART
,
14745600
,
1
,
NULL
),
INIT_CKEN
(
"UDCCLK"
,
USB
,
47923000
,
5
,
&
pxa25x_device_udc
.
dev
),
INIT_CKEN
(
"UDCCLK"
,
USB
,
47923000
,
5
,
&
pxa25x_device_udc
.
dev
),
INIT_CLK
(
"GPIO11_CLK"
,
&
clk_pxa25x_gpio11_ops
,
3686400
,
0
,
NULL
),
INIT_CLK
(
"GPIO12_CLK"
,
&
clk_pxa25x_gpio12_ops
,
32768
,
0
,
NULL
),
INIT_CKEN
(
"MMCCLK"
,
MMC
,
19169000
,
0
,
&
pxa_device_mci
.
dev
),
INIT_CKEN
(
"MMCCLK"
,
MMC
,
19169000
,
0
,
&
pxa_device_mci
.
dev
),
INIT_CKEN
(
"I2CCLK"
,
I2C
,
31949000
,
0
,
&
pxa_device_i2c
.
dev
),
INIT_CKEN
(
"I2CCLK"
,
I2C
,
31949000
,
0
,
&
pxa_device_i2c
.
dev
),
...
@@ -145,7 +193,10 @@ static struct clk pxa25x_clks[] = {
...
@@ -145,7 +193,10 @@ static struct clk pxa25x_clks[] = {
INIT_CKEN
(
"FICPCLK"
,
FICP
,
47923000
,
0
,
NULL
),
INIT_CKEN
(
"FICPCLK"
,
FICP
,
47923000
,
0
,
NULL
),
};
};
static
struct
clk
gpio7_clk
=
INIT_CKOTHER
(
"GPIO7_CK"
,
&
pxa25x_clks
[
4
],
NULL
);
static
struct
clk
pxa2xx_clk_aliases
[]
=
{
INIT_CKOTHER
(
"GPIO7_CLK"
,
&
pxa25x_clks
[
4
],
NULL
),
INIT_CKOTHER
(
"SA1111_CLK"
,
&
pxa25x_clks
[
5
],
NULL
),
};
#ifdef CONFIG_PM
#ifdef CONFIG_PM
...
@@ -293,7 +344,7 @@ static int __init pxa25x_init(void)
...
@@ -293,7 +344,7 @@ static int __init pxa25x_init(void)
int
i
,
ret
=
0
;
int
i
,
ret
=
0
;
/* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */
/* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */
if
(
cpu_is_pxa25
x
())
if
(
cpu_is_pxa25
5
())
clks_register
(
&
pxa25x_hwuart_clk
,
1
);
clks_register
(
&
pxa25x_hwuart_clk
,
1
);
if
(
cpu_is_pxa21x
()
||
cpu_is_pxa25x
())
{
if
(
cpu_is_pxa21x
()
||
cpu_is_pxa25x
())
{
...
@@ -317,10 +368,10 @@ static int __init pxa25x_init(void)
...
@@ -317,10 +368,10 @@ static int __init pxa25x_init(void)
}
}
/* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */
/* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */
if
(
cpu_is_pxa25
x
())
if
(
cpu_is_pxa25
5
())
ret
=
platform_device_register
(
&
pxa_device_hwuart
);
ret
=
platform_device_register
(
&
pxa_device_hwuart
);
clks_register
(
&
gpio7_clk
,
1
);
clks_register
(
pxa2xx_clk_aliases
,
ARRAY_SIZE
(
pxa2xx_clk_aliases
)
);
return
ret
;
return
ret
;
}
}
...
...
arch/arm/mach-sa1100/clock.c
View file @
a9da4f7e
...
@@ -103,7 +103,7 @@ static void clk_gpio27_disable(void)
...
@@ -103,7 +103,7 @@ static void clk_gpio27_disable(void)
}
}
static
struct
clk
clk_gpio27
=
{
static
struct
clk
clk_gpio27
=
{
.
name
=
"
GPIO27
_CLK"
,
.
name
=
"
SA1111
_CLK"
,
.
rate
=
3686400
,
.
rate
=
3686400
,
.
enable
=
clk_gpio27_enable
,
.
enable
=
clk_gpio27_enable
,
.
disable
=
clk_gpio27_disable
,
.
disable
=
clk_gpio27_disable
,
...
...
drivers/mtd/nand/cmx270_nand.c
View file @
a9da4f7e
...
@@ -20,9 +20,11 @@
...
@@ -20,9 +20,11 @@
#include <linux/mtd/nand.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/partitions.h>
#include <linux/gpio.h>
#include <asm/io.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/irq.h>
#include <asm/mach-types.h>
#include <asm/arch/hardware.h>
#include <asm/arch/hardware.h>
#include <asm/arch/pxa-regs.h>
#include <asm/arch/pxa-regs.h>
...
@@ -30,20 +32,6 @@
...
@@ -30,20 +32,6 @@
#define GPIO_NAND_CS (11)
#define GPIO_NAND_CS (11)
#define GPIO_NAND_RB (89)
#define GPIO_NAND_RB (89)
/* This macro needed to ensure in-order operation of GPIO and local
* bus. Without both asm command and dummy uncached read there're
* states when NAND access is broken. I've looked for such macro(s) in
* include/asm-arm but found nothing approptiate.
* dmac_clean_range is close, but is makes cache invalidation
* unnecessary here and it cannot be used in module
*/
#define DRAIN_WB() \
do { \
unsigned char dummy; \
asm volatile ("mcr p15, 0, r0, c7, c10, 4":::"r0"); \
dummy=*((unsigned char*)UNCACHED_ADDR); \
} while(0)
/* MTD structure for CM-X270 board */
/* MTD structure for CM-X270 board */
static
struct
mtd_info
*
cmx270_nand_mtd
;
static
struct
mtd_info
*
cmx270_nand_mtd
;
...
@@ -103,14 +91,14 @@ static int cmx270_verify_buf(struct mtd_info *mtd, const u_char *buf, int len)
...
@@ -103,14 +91,14 @@ static int cmx270_verify_buf(struct mtd_info *mtd, const u_char *buf, int len)
static
inline
void
nand_cs_on
(
void
)
static
inline
void
nand_cs_on
(
void
)
{
{
GPCR
(
GPIO_NAND_CS
)
=
GPIO_bit
(
GPIO_NAND_CS
);
gpio_set_value
(
GPIO_NAND_CS
,
0
);
}
}
static
void
nand_cs_off
(
void
)
static
void
nand_cs_off
(
void
)
{
{
DRAIN_WB
();
dsb
();
GPSR
(
GPIO_NAND_CS
)
=
GPIO_bit
(
GPIO_NAND_CS
);
gpio_set_value
(
GPIO_NAND_CS
,
1
);
}
}
/*
/*
...
@@ -122,7 +110,7 @@ static void cmx270_hwcontrol(struct mtd_info *mtd, int dat,
...
@@ -122,7 +110,7 @@ static void cmx270_hwcontrol(struct mtd_info *mtd, int dat,
struct
nand_chip
*
this
=
mtd
->
priv
;
struct
nand_chip
*
this
=
mtd
->
priv
;
unsigned
int
nandaddr
=
(
unsigned
int
)
this
->
IO_ADDR_W
;
unsigned
int
nandaddr
=
(
unsigned
int
)
this
->
IO_ADDR_W
;
DRAIN_WB
();
dsb
();
if
(
ctrl
&
NAND_CTRL_CHANGE
)
{
if
(
ctrl
&
NAND_CTRL_CHANGE
)
{
if
(
ctrl
&
NAND_ALE
)
if
(
ctrl
&
NAND_ALE
)
...
@@ -139,12 +127,12 @@ static void cmx270_hwcontrol(struct mtd_info *mtd, int dat,
...
@@ -139,12 +127,12 @@ static void cmx270_hwcontrol(struct mtd_info *mtd, int dat,
nand_cs_off
();
nand_cs_off
();
}
}
DRAIN_WB
();
dsb
();
this
->
IO_ADDR_W
=
(
void
__iomem
*
)
nandaddr
;
this
->
IO_ADDR_W
=
(
void
__iomem
*
)
nandaddr
;
if
(
dat
!=
NAND_CMD_NONE
)
if
(
dat
!=
NAND_CMD_NONE
)
writel
((
dat
<<
16
),
this
->
IO_ADDR_W
);
writel
((
dat
<<
16
),
this
->
IO_ADDR_W
);
DRAIN_WB
();
dsb
();
}
}
/*
/*
...
@@ -152,9 +140,9 @@ static void cmx270_hwcontrol(struct mtd_info *mtd, int dat,
...
@@ -152,9 +140,9 @@ static void cmx270_hwcontrol(struct mtd_info *mtd, int dat,
*/
*/
static
int
cmx270_device_ready
(
struct
mtd_info
*
mtd
)
static
int
cmx270_device_ready
(
struct
mtd_info
*
mtd
)
{
{
DRAIN_WB
();
dsb
();
return
(
GPLR
(
GPIO_NAND_RB
)
&
GPIO_bit
(
GPIO_NAND_RB
));
return
(
gpio_get_value
(
GPIO_NAND_RB
));
}
}
/*
/*
...
@@ -168,20 +156,40 @@ static int cmx270_init(void)
...
@@ -168,20 +156,40 @@ static int cmx270_init(void)
int
mtd_parts_nb
=
0
;
int
mtd_parts_nb
=
0
;
int
ret
;
int
ret
;
if
(
!
machine_is_armcore
())
return
-
ENODEV
;
ret
=
gpio_request
(
GPIO_NAND_CS
,
"NAND CS"
);
if
(
ret
)
{
pr_warning
(
"CM-X270: failed to request NAND CS gpio
\n
"
);
return
ret
;
}
gpio_direction_output
(
GPIO_NAND_CS
,
1
);
ret
=
gpio_request
(
GPIO_NAND_RB
,
"NAND R/B"
);
if
(
ret
)
{
pr_warning
(
"CM-X270: failed to request NAND R/B gpio
\n
"
);
goto
err_gpio_request
;
}
gpio_direction_input
(
GPIO_NAND_RB
);
/* Allocate memory for MTD device structure and private data */
/* Allocate memory for MTD device structure and private data */
cmx270_nand_mtd
=
kzalloc
(
sizeof
(
struct
mtd_info
)
+
cmx270_nand_mtd
=
kzalloc
(
sizeof
(
struct
mtd_info
)
+
sizeof
(
struct
nand_chip
),
sizeof
(
struct
nand_chip
),
GFP_KERNEL
);
GFP_KERNEL
);
if
(
!
cmx270_nand_mtd
)
{
if
(
!
cmx270_nand_mtd
)
{
printk
(
"Unable to allocate CM-X270 NAND MTD device structure.
\n
"
);
pr_debug
(
"Unable to allocate CM-X270 NAND MTD device structure.
\n
"
);
return
-
ENOMEM
;
ret
=
-
ENOMEM
;
goto
err_kzalloc
;
}
}
cmx270_nand_io
=
ioremap
(
PXA_CS1_PHYS
,
12
);
cmx270_nand_io
=
ioremap
(
PXA_CS1_PHYS
,
12
);
if
(
!
cmx270_nand_io
)
{
if
(
!
cmx270_nand_io
)
{
pr
intk
(
"Unable to ioremap NAND device
\n
"
);
pr
_debug
(
"Unable to ioremap NAND device
\n
"
);
ret
=
-
EINVAL
;
ret
=
-
EINVAL
;
goto
err
1
;
goto
err
_ioremap
;
}
}
/* Get pointer to private data */
/* Get pointer to private data */
...
@@ -209,9 +217,9 @@ static int cmx270_init(void)
...
@@ -209,9 +217,9 @@ static int cmx270_init(void)
/* Scan to find existence of the device */
/* Scan to find existence of the device */
if
(
nand_scan
(
cmx270_nand_mtd
,
1
))
{
if
(
nand_scan
(
cmx270_nand_mtd
,
1
))
{
pr
intk
(
KERN_NOTICE
"No NAND device
\n
"
);
pr
_notice
(
"No NAND device
\n
"
);
ret
=
-
ENXIO
;
ret
=
-
ENXIO
;
goto
err
2
;
goto
err
_scan
;
}
}
#ifdef CONFIG_MTD_CMDLINE_PARTS
#ifdef CONFIG_MTD_CMDLINE_PARTS
...
@@ -229,18 +237,22 @@ static int cmx270_init(void)
...
@@ -229,18 +237,22 @@ static int cmx270_init(void)
}
}
/* Register the partitions */
/* Register the partitions */
pr
intk
(
KERN_NOTICE
"Using %s partition definition
\n
"
,
part_type
);
pr
_notice
(
"Using %s partition definition
\n
"
,
part_type
);
ret
=
add_mtd_partitions
(
cmx270_nand_mtd
,
mtd_parts
,
mtd_parts_nb
);
ret
=
add_mtd_partitions
(
cmx270_nand_mtd
,
mtd_parts
,
mtd_parts_nb
);
if
(
ret
)
if
(
ret
)
goto
err
2
;
goto
err
_scan
;
/* Return happy */
/* Return happy */
return
0
;
return
0
;
err
2
:
err
_scan
:
iounmap
(
cmx270_nand_io
);
iounmap
(
cmx270_nand_io
);
err
1
:
err
_ioremap
:
kfree
(
cmx270_nand_mtd
);
kfree
(
cmx270_nand_mtd
);
err_kzalloc:
gpio_free
(
GPIO_NAND_RB
);
err_gpio_request:
gpio_free
(
GPIO_NAND_CS
);
return
ret
;
return
ret
;
...
@@ -255,6 +267,9 @@ static void cmx270_cleanup(void)
...
@@ -255,6 +267,9 @@ static void cmx270_cleanup(void)
/* Release resources, unregister device */
/* Release resources, unregister device */
nand_release
(
cmx270_nand_mtd
);
nand_release
(
cmx270_nand_mtd
);
gpio_free
(
GPIO_NAND_RB
);
gpio_free
(
GPIO_NAND_CS
);
iounmap
(
cmx270_nand_io
);
iounmap
(
cmx270_nand_io
);
/* Free the MTD device structure */
/* Free the MTD device structure */
...
...
drivers/pcmcia/pxa2xx_cm_x270.c
View file @
a9da4f7e
...
@@ -5,83 +5,60 @@
...
@@ -5,83 +5,60 @@
* it under the terms of the GNU General Public License version 2 as
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
* published by the Free Software Foundation.
*
*
* Compulab Ltd., 2003, 2007
* Compulab Ltd., 2003, 2007
, 2008
* Mike Rapoport <mike@compulab.co.il>
* Mike Rapoport <mike@compulab.co.il>
*
*
*/
*/
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/platform_device.h>
#include <linux/platform_device.h>
#include <linux/irq.h>
#include <linux/irq.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <pcmcia/ss.h>
#include <asm/hardware.h>
#include <asm/mach-types.h>
#include <asm/mach-types.h>
#include <asm/arch/pxa-regs.h>
#include <asm/arch/pxa-regs.h>
#include <asm/arch/pxa2xx-gpio.h>
#include <asm/arch/cm-x270.h>
#include "soc_common.h"
#include "soc_common.h"
#define GPIO_PCMCIA_S0_CD_VALID (84)
#define GPIO_PCMCIA_S0_RDYINT (82)
#define GPIO_PCMCIA_RESET (53)
#define PCMCIA_S0_CD_VALID IRQ_GPIO(GPIO_PCMCIA_S0_CD_VALID)
#define PCMCIA_S0_RDYINT IRQ_GPIO(GPIO_PCMCIA_S0_RDYINT)
static
struct
pcmcia_irqs
irqs
[]
=
{
static
struct
pcmcia_irqs
irqs
[]
=
{
{
0
,
PCMCIA_S0_CD_VALID
,
"PCMCIA0 CD"
},
{
0
,
PCMCIA_S0_CD_VALID
,
"PCMCIA0 CD"
},
{
1
,
PCMCIA_S1_CD_VALID
,
"PCMCIA1 CD"
},
};
};
static
int
cmx270_pcmcia_hw_init
(
struct
soc_pcmcia_socket
*
skt
)
static
int
cmx270_pcmcia_hw_init
(
struct
soc_pcmcia_socket
*
skt
)
{
{
GPSR
(
GPIO48_nPOE
)
=
GPIO_bit
(
GPIO48_nPOE
)
|
int
ret
=
gpio_request
(
GPIO_PCMCIA_RESET
,
"PCCard reset"
);
GPIO_bit
(
GPIO49_nPWE
)
|
if
(
ret
)
GPIO_bit
(
GPIO50_nPIOR
)
|
return
ret
;
GPIO_bit
(
GPIO51_nPIOW
)
|
gpio_direction_output
(
GPIO_PCMCIA_RESET
,
0
);
GPIO_bit
(
GPIO85_nPCE_1
)
|
GPIO_bit
(
GPIO54_nPCE_2
);
skt
->
irq
=
PCMCIA_S0_RDYINT
;
ret
=
soc_pcmcia_request_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
pxa_gpio_mode
(
GPIO48_nPOE_MD
);
if
(
!
ret
)
pxa_gpio_mode
(
GPIO49_nPWE_MD
);
gpio_free
(
GPIO_PCMCIA_RESET
);
pxa_gpio_mode
(
GPIO50_nPIOR_MD
);
pxa_gpio_mode
(
GPIO51_nPIOW_MD
);
return
ret
;
pxa_gpio_mode
(
GPIO85_nPCE_1_MD
);
pxa_gpio_mode
(
GPIO54_nPCE_2_MD
);
pxa_gpio_mode
(
GPIO55_nPREG_MD
);
pxa_gpio_mode
(
GPIO56_nPWAIT_MD
);
pxa_gpio_mode
(
GPIO57_nIOIS16_MD
);
/* Reset signal */
pxa_gpio_mode
(
GPIO53_nPCE_2
|
GPIO_OUT
);
GPCR
(
GPIO53_nPCE_2
)
=
GPIO_bit
(
GPIO53_nPCE_2
);
set_irq_type
(
PCMCIA_S0_CD_VALID
,
IRQ_TYPE_EDGE_BOTH
);
set_irq_type
(
PCMCIA_S1_CD_VALID
,
IRQ_TYPE_EDGE_BOTH
);
/* irq's for slots: */
set_irq_type
(
PCMCIA_S0_RDYINT
,
IRQ_TYPE_EDGE_FALLING
);
set_irq_type
(
PCMCIA_S1_RDYINT
,
IRQ_TYPE_EDGE_FALLING
);
skt
->
irq
=
(
skt
->
nr
==
0
)
?
PCMCIA_S0_RDYINT
:
PCMCIA_S1_RDYINT
;
return
soc_pcmcia_request_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
}
}
static
void
cmx270_pcmcia_shutdown
(
struct
soc_pcmcia_socket
*
skt
)
static
void
cmx270_pcmcia_shutdown
(
struct
soc_pcmcia_socket
*
skt
)
{
{
soc_pcmcia_free_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
soc_pcmcia_free_irqs
(
skt
,
irqs
,
ARRAY_SIZE
(
irqs
));
gpio_free
(
GPIO_PCMCIA_RESET
);
set_irq_type
(
IRQ_TO_GPIO
(
PCMCIA_S0_CD_VALID
),
IRQ_TYPE_NONE
);
set_irq_type
(
IRQ_TO_GPIO
(
PCMCIA_S1_CD_VALID
),
IRQ_TYPE_NONE
);
set_irq_type
(
IRQ_TO_GPIO
(
PCMCIA_S0_RDYINT
),
IRQ_TYPE_NONE
);
set_irq_type
(
IRQ_TO_GPIO
(
PCMCIA_S1_RDYINT
),
IRQ_TYPE_NONE
);
}
}
static
void
cmx270_pcmcia_socket_state
(
struct
soc_pcmcia_socket
*
skt
,
static
void
cmx270_pcmcia_socket_state
(
struct
soc_pcmcia_socket
*
skt
,
struct
pcmcia_state
*
state
)
struct
pcmcia_state
*
state
)
{
{
state
->
detect
=
(
PCC_DETECT
(
skt
->
nr
)
==
0
)
?
1
:
0
;
state
->
detect
=
(
gpio_get_value
(
GPIO_PCMCIA_S0_CD_VALID
)
==
0
)
?
1
:
0
;
state
->
ready
=
(
PCC_READY
(
skt
->
nr
)
==
0
)
?
0
:
1
;
state
->
ready
=
(
gpio_get_value
(
GPIO_PCMCIA_S0_RDYINT
)
==
0
)
?
0
:
1
;
state
->
bvd1
=
1
;
state
->
bvd1
=
1
;
state
->
bvd2
=
1
;
state
->
bvd2
=
1
;
state
->
vs_3v
=
0
;
state
->
vs_3v
=
0
;
...
@@ -93,32 +70,16 @@ static void cmx270_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
...
@@ -93,32 +70,16 @@ static void cmx270_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
static
int
cmx270_pcmcia_configure_socket
(
struct
soc_pcmcia_socket
*
skt
,
static
int
cmx270_pcmcia_configure_socket
(
struct
soc_pcmcia_socket
*
skt
,
const
socket_state_t
*
state
)
const
socket_state_t
*
state
)
{
{
GPSR
(
GPIO49_nPWE
)
=
GPIO_bit
(
GPIO49_nPWE
);
pxa_gpio_mode
(
GPIO49_nPWE
|
GPIO_OUT
);
switch
(
skt
->
nr
)
{
switch
(
skt
->
nr
)
{
case
0
:
case
0
:
if
(
state
->
flags
&
SS_RESET
)
{
if
(
state
->
flags
&
SS_RESET
)
{
GPCR
(
GPIO49_nPWE
)
=
GPIO_bit
(
GPIO49_nPWE
);
gpio_set_value
(
GPIO_PCMCIA_RESET
,
1
);
GPSR
(
GPIO53_nPCE_2
)
=
GPIO_bit
(
GPIO53_nPCE_2
);
udelay
(
10
);
GPCR
(
GPIO53_nPCE_2
)
=
GPIO_bit
(
GPIO53_nPCE_2
);
GPSR
(
GPIO49_nPWE
)
=
GPIO_bit
(
GPIO49_nPWE
);
}
break
;
case
1
:
if
(
state
->
flags
&
SS_RESET
)
{
GPCR
(
GPIO49_nPWE
)
=
GPIO_bit
(
GPIO49_nPWE
);
GPSR
(
GPIO53_nPCE_2
)
=
GPIO_bit
(
GPIO53_nPCE_2
);
udelay
(
10
);
udelay
(
10
);
GPCR
(
GPIO53_nPCE_2
)
=
GPIO_bit
(
GPIO53_nPCE_2
);
gpio_set_value
(
GPIO_PCMCIA_RESET
,
0
);
GPSR
(
GPIO49_nPWE
)
=
GPIO_bit
(
GPIO49_nPWE
);
}
}
break
;
break
;
}
}
pxa_gpio_mode
(
GPIO49_nPWE_MD
);
return
0
;
return
0
;
}
}
...
@@ -139,7 +100,7 @@ static struct pcmcia_low_level cmx270_pcmcia_ops __initdata = {
...
@@ -139,7 +100,7 @@ static struct pcmcia_low_level cmx270_pcmcia_ops __initdata = {
.
configure_socket
=
cmx270_pcmcia_configure_socket
,
.
configure_socket
=
cmx270_pcmcia_configure_socket
,
.
socket_init
=
cmx270_pcmcia_socket_init
,
.
socket_init
=
cmx270_pcmcia_socket_init
,
.
socket_suspend
=
cmx270_pcmcia_socket_suspend
,
.
socket_suspend
=
cmx270_pcmcia_socket_suspend
,
.
nr
=
2
,
.
nr
=
1
,
};
};
static
struct
platform_device
*
cmx270_pcmcia_device
;
static
struct
platform_device
*
cmx270_pcmcia_device
;
...
...
include/asm-arm/arch-pxa/cm-x270.h
deleted
100644 → 0
View file @
67f5cd0f
/*
* linux/include/asm/arch-pxa/cm-x270.h
*
* Copyright Compulab Ltd., 2003, 2007
* Mike Rapoport <mike@compulab.co.il>
*
* 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.
*/
/* CM-x270 device physical addresses */
#define CMX270_CS1_PHYS (PXA_CS1_PHYS)
#define MARATHON_PHYS (PXA_CS2_PHYS)
#define CMX270_IDE104_PHYS (PXA_CS3_PHYS)
#define CMX270_IT8152_PHYS (PXA_CS4_PHYS)
/* Statically mapped regions */
#define CMX270_VIRT_BASE (0xe8000000)
#define CMX270_IT8152_VIRT (CMX270_VIRT_BASE)
#define CMX270_IDE104_VIRT (CMX270_IT8152_VIRT + SZ_64M)
/* GPIO related definitions */
#define GPIO_IT8152_IRQ (22)
#define IRQ_GPIO_IT8152_IRQ IRQ_GPIO(GPIO_IT8152_IRQ)
#define PME_IRQ IRQ_GPIO(0)
#define CMX270_IDE_IRQ IRQ_GPIO(100)
#define CMX270_GPIRQ1 IRQ_GPIO(101)
#define CMX270_TOUCHIRQ IRQ_GPIO(96)
#define CMX270_ETHIRQ IRQ_GPIO(10)
#define CMX270_GFXIRQ IRQ_GPIO(95)
#define CMX270_NANDIRQ IRQ_GPIO(89)
#define CMX270_MMC_IRQ IRQ_GPIO(83)
/* PCMCIA related definitions */
#define PCC_DETECT(x) (GPLR(84 - (x)) & GPIO_bit(84 - (x)))
#define PCC_READY(x) (GPLR(82 - (x)) & GPIO_bit(82 - (x)))
#define PCMCIA_S0_CD_VALID IRQ_GPIO(84)
#define PCMCIA_S0_CD_VALID_EDGE GPIO_BOTH_EDGES
#define PCMCIA_S1_CD_VALID IRQ_GPIO(83)
#define PCMCIA_S1_CD_VALID_EDGE GPIO_BOTH_EDGES
#define PCMCIA_S0_RDYINT IRQ_GPIO(82)
#define PCMCIA_S1_RDYINT IRQ_GPIO(81)
#define PCMCIA_RESET_GPIO 53
include/asm-arm/arch-pxa/hardware.h
View file @
a9da4f7e
...
@@ -69,6 +69,12 @@
...
@@ -69,6 +69,12 @@
_id == 0x212; \
_id == 0x212; \
})
})
#define __cpu_is_pxa255(id) \
({ \
unsigned int _id = (id) >> 4 & 0xfff; \
_id == 0x2d0; \
})
#define __cpu_is_pxa25x(id) \
#define __cpu_is_pxa25x(id) \
({ \
({ \
unsigned int _id = (id) >> 4 & 0xfff; \
unsigned int _id = (id) >> 4 & 0xfff; \
...
@@ -76,6 +82,7 @@
...
@@ -76,6 +82,7 @@
})
})
#else
#else
#define __cpu_is_pxa21x(id) (0)
#define __cpu_is_pxa21x(id) (0)
#define __cpu_is_pxa255(id) (0)
#define __cpu_is_pxa25x(id) (0)
#define __cpu_is_pxa25x(id) (0)
#endif
#endif
...
@@ -124,6 +131,11 @@
...
@@ -124,6 +131,11 @@
__cpu_is_pxa21x(read_cpuid_id()); \
__cpu_is_pxa21x(read_cpuid_id()); \
})
})
#define cpu_is_pxa255() \
({ \
__cpu_is_pxa255(read_cpuid_id()); \
})
#define cpu_is_pxa25x() \
#define cpu_is_pxa25x() \
({ \
({ \
__cpu_is_pxa25x(read_cpuid_id()); \
__cpu_is_pxa25x(read_cpuid_id()); \
...
...
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