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
9adaef9c
Commit
9adaef9c
authored
Sep 17, 2012
by
Shawn Guo
Browse files
Options
Browse Files
Download
Plain Diff
Merge tag 'mxs-dt-3.7' into mxs/dt-for-3.7-2
parents
4cbe5a55
13b4569b
Changes
47
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
47 changed files
with
485 additions
and
4096 deletions
+485
-4096
arch/arm/boot/dts/imx23-evk.dts
arch/arm/boot/dts/imx23-evk.dts
+2
-1
arch/arm/boot/dts/imx23-olinuxino.dts
arch/arm/boot/dts/imx23-olinuxino.dts
+31
-0
arch/arm/boot/dts/imx23-stmp378x_devb.dts
arch/arm/boot/dts/imx23-stmp378x_devb.dts
+1
-1
arch/arm/boot/dts/imx23.dtsi
arch/arm/boot/dts/imx23.dtsi
+11
-1
arch/arm/boot/dts/imx28-apx4devkit.dts
arch/arm/boot/dts/imx28-apx4devkit.dts
+1
-1
arch/arm/boot/dts/imx28-cfa10049.dts
arch/arm/boot/dts/imx28-cfa10049.dts
+99
-0
arch/arm/boot/dts/imx28-evk.dts
arch/arm/boot/dts/imx28-evk.dts
+28
-1
arch/arm/boot/dts/imx28-m28evk.dts
arch/arm/boot/dts/imx28-m28evk.dts
+75
-8
arch/arm/boot/dts/imx28-tx28.dts
arch/arm/boot/dts/imx28-tx28.dts
+21
-2
arch/arm/boot/dts/imx28.dtsi
arch/arm/boot/dts/imx28.dtsi
+86
-0
arch/arm/configs/mxs_defconfig
arch/arm/configs/mxs_defconfig
+0
-6
arch/arm/mach-mxs/Kconfig
arch/arm/mach-mxs/Kconfig
+0
-89
arch/arm/mach-mxs/Makefile
arch/arm/mach-mxs/Makefile
+1
-10
arch/arm/mach-mxs/Makefile.boot
arch/arm/mach-mxs/Makefile.boot
+1
-0
arch/arm/mach-mxs/devices-mx23.h
arch/arm/mach-mxs/devices-mx23.h
+0
-43
arch/arm/mach-mxs/devices-mx28.h
arch/arm/mach-mxs/devices-mx28.h
+0
-63
arch/arm/mach-mxs/devices.c
arch/arm/mach-mxs/devices.c
+0
-87
arch/arm/mach-mxs/devices/Kconfig
arch/arm/mach-mxs/devices/Kconfig
+0
-33
arch/arm/mach-mxs/devices/Makefile
arch/arm/mach-mxs/devices/Makefile
+0
-12
arch/arm/mach-mxs/devices/platform-auart.c
arch/arm/mach-mxs/devices/platform-auart.c
+0
-65
arch/arm/mach-mxs/devices/platform-dma.c
arch/arm/mach-mxs/devices/platform-dma.c
+0
-31
arch/arm/mach-mxs/devices/platform-fec.c
arch/arm/mach-mxs/devices/platform-fec.c
+0
-52
arch/arm/mach-mxs/devices/platform-flexcan.c
arch/arm/mach-mxs/devices/platform-flexcan.c
+0
-51
arch/arm/mach-mxs/devices/platform-gpio-mxs.c
arch/arm/mach-mxs/devices/platform-gpio-mxs.c
+0
-33
arch/arm/mach-mxs/devices/platform-gpmi-nand.c
arch/arm/mach-mxs/devices/platform-gpmi-nand.c
+0
-81
arch/arm/mach-mxs/devices/platform-mxs-i2c.c
arch/arm/mach-mxs/devices/platform-mxs-i2c.c
+0
-52
arch/arm/mach-mxs/devices/platform-mxs-mmc.c
arch/arm/mach-mxs/devices/platform-mxs-mmc.c
+0
-76
arch/arm/mach-mxs/devices/platform-mxs-pwm.c
arch/arm/mach-mxs/devices/platform-mxs-pwm.c
+0
-22
arch/arm/mach-mxs/devices/platform-mxs-saif.c
arch/arm/mach-mxs/devices/platform-mxs-saif.c
+0
-61
arch/arm/mach-mxs/devices/platform-mxsfb.c
arch/arm/mach-mxs/devices/platform-mxsfb.c
+0
-47
arch/arm/mach-mxs/devices/platform-rtc-stmp3xxx.c
arch/arm/mach-mxs/devices/platform-rtc-stmp3xxx.c
+0
-51
arch/arm/mach-mxs/include/mach/common.h
arch/arm/mach-mxs/include/mach/common.h
+0
-9
arch/arm/mach-mxs/include/mach/devices-common.h
arch/arm/mach-mxs/include/mach/devices-common.h
+0
-114
arch/arm/mach-mxs/include/mach/iomux-mx23.h
arch/arm/mach-mxs/include/mach/iomux-mx23.h
+0
-355
arch/arm/mach-mxs/include/mach/iomux-mx28.h
arch/arm/mach-mxs/include/mach/iomux-mx28.h
+0
-537
arch/arm/mach-mxs/include/mach/iomux.h
arch/arm/mach-mxs/include/mach/iomux.h
+0
-168
arch/arm/mach-mxs/iomux.c
arch/arm/mach-mxs/iomux.c
+0
-101
arch/arm/mach-mxs/mach-apx4devkit.c
arch/arm/mach-mxs/mach-apx4devkit.c
+0
-273
arch/arm/mach-mxs/mach-m28evk.c
arch/arm/mach-mxs/mach-m28evk.c
+0
-366
arch/arm/mach-mxs/mach-mx23evk.c
arch/arm/mach-mxs/mach-mx23evk.c
+0
-190
arch/arm/mach-mxs/mach-mx28evk.c
arch/arm/mach-mxs/mach-mx28evk.c
+0
-477
arch/arm/mach-mxs/mach-mxs.c
arch/arm/mach-mxs/mach-mxs.c
+128
-10
arch/arm/mach-mxs/mach-stmp378x_devb.c
arch/arm/mach-mxs/mach-stmp378x_devb.c
+0
-123
arch/arm/mach-mxs/mach-tx28.c
arch/arm/mach-mxs/mach-tx28.c
+0
-184
arch/arm/mach-mxs/mm.c
arch/arm/mach-mxs/mm.c
+0
-39
arch/arm/mach-mxs/module-tx28.c
arch/arm/mach-mxs/module-tx28.c
+0
-160
arch/arm/mach-mxs/module-tx28.h
arch/arm/mach-mxs/module-tx28.h
+0
-10
No files found.
arch/arm/boot/dts/imx23-evk.dts
View file @
9adaef9c
...
...
@@ -42,12 +42,13 @@ pinctrl@80018000 {
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
hog_pins_a
>;
hog_pins_a
:
hog
-
gpios
@
0
{
hog_pins_a
:
hog
@
0
{
reg
=
<
0
>;
fsl
,
pinmux
-
ids
=
<
0x1123
/*
MX23_PAD_LCD_RESET__GPIO_1_18
*/
0x11d3
/*
MX23_PAD_PWM3__GPIO_1_29
*/
0x11e3
/*
MX23_PAD_PWM4__GPIO_1_30
*/
0x2010
/*
MX23_PAD_SSP1_DETECT__SSP1_DETECT
*/
>;
fsl
,
drive
-
strength
=
<
0
>;
fsl
,
voltage
=
<
1
>;
...
...
arch/arm/boot/dts/imx23-olinuxino.dts
View file @
9adaef9c
...
...
@@ -31,6 +31,21 @@ ssp0: ssp@80010000 {
bus
-
width
=
<
4
>;
status
=
"okay"
;
};
pinctrl
@
80018000
{
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
hog_pins_a
>;
hog_pins_a
:
hog
@
0
{
reg
=
<
0
>;
fsl
,
pinmux
-
ids
=
<
0x2013
/*
MX23_PAD_SSP1_DETECT__GPIO_2_1
*/
>;
fsl
,
drive
-
strength
=
<
0
>;
fsl
,
voltage
=
<
1
>;
fsl
,
pull
-
up
=
<
0
>;
};
};
};
apbx
@
80040000
{
...
...
@@ -39,6 +54,22 @@ duart: serial@80070000 {
pinctrl
-
0
=
<&
duart_pins_a
>;
status
=
"okay"
;
};
auart0
:
serial
@
8006
c000
{
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
auart0_2pins_a
>;
status
=
"okay"
;
};
};
};
leds
{
compatible
=
"gpio-leds"
;
user
{
label
=
"green"
;
gpios
=
<&
gpio2
1
0
>;
linux
,
default
-
trigger
=
"default-on"
;
};
};
};
arch/arm/boot/dts/imx23-stmp378x_devb.dts
View file @
9adaef9c
...
...
@@ -36,7 +36,7 @@ pinctrl@80018000 {
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
hog_pins_a
>;
hog_pins_a
:
hog
-
gpios
@
0
{
hog_pins_a
:
hog
@
0
{
reg
=
<
0
>;
fsl
,
pinmux
-
ids
=
<
0x11d3
/*
MX23_PAD_PWM3__GPIO_1_29
*/
...
...
arch/arm/boot/dts/imx23.dtsi
View file @
9adaef9c
...
...
@@ -140,6 +140,17 @@ auart0_pins_a: auart0@0 {
fsl,pull-up = <0>;
};
auart0_2pins_a: auart0-2pins@0 {
reg = <0>;
fsl,pinmux-ids = <
0x01e2 /* MX23_PAD_I2C_SCL__AUART1_TX */
0x01f2 /* MX23_PAD_I2C_SDA__AUART1_RX */
>;
fsl,drive-strength = <0>;
fsl,voltage = <1>;
fsl,pull-up = <0>;
};
gpmi_pins_a: gpmi-nand@0 {
reg = <0>;
fsl,pinmux-ids = <
...
...
@@ -183,7 +194,6 @@ mmc0_4bit_pins_a: mmc0-4bit@0 {
0x2040 /* MX23_PAD_SSP1_DATA2__SSP1_DATA2 */
0x2050 /* MX23_PAD_SSP1_DATA3__SSP1_DATA3 */
0x2000 /* MX23_PAD_SSP1_CMD__SSP1_CMD */
0x2010 /* MX23_PAD_SSP1_DETECT__SSP1_DETECT */
0x2060 /* MX23_PAD_SSP1_SCK__SSP1_SCK */
>;
fsl,drive-strength = <1>;
...
...
arch/arm/boot/dts/imx28-apx4devkit.dts
View file @
9adaef9c
...
...
@@ -37,7 +37,7 @@ pinctrl@80018000 {
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
hog_pins_a
>;
hog_pins_a
:
hog
-
gpios
@
0
{
hog_pins_a
:
hog
@
0
{
reg
=
<
0
>;
fsl
,
pinmux
-
ids
=
<
0x0113
/*
MX28_PAD_GPMI_CE1N__GPIO_0_17
*/
...
...
arch/arm/boot/dts/imx28-cfa10049.dts
0 → 100644
View file @
9adaef9c
/*
*
Copyright
2012
Free
Electrons
*
*
The
code
contained
herein
is
licensed
under
the
GNU
General
Public
*
License
.
You
may
obtain
a
copy
of
the
GNU
General
Public
License
*
Version
2
or
later
at
the
following
locations
:
*
*
http
://
www
.
opensource
.
org
/
licenses
/
gpl
-
license
.
html
*
http
://
www
.
gnu
.
org
/
copyleft
/
gpl
.
html
*/
/*
*
The
CFA
-
10049
is
an
expansion
board
for
the
CFA
-
10036
module
,
thus
we
*
need
to
include
the
CFA
-
10036
DTS
.
*/
/
include
/
"imx28-cfa10036.dts"
/
{
model
=
"Crystalfontz CFA-10049 Board"
;
compatible
=
"crystalfontz,cfa10049"
,
"crystalfontz,cfa10036"
,
"fsl,imx28"
;
apb
@
80000000
{
apbh
@
80000000
{
pinctrl
@
80018000
{
spi3_pins_cfa10049
:
spi3
-
cfa10049
@
0
{
reg
=
<
0
>;
fsl
,
pinmux
-
ids
=
<
0x0181
/*
MX28_PAD_GPMI_RDN__SSP3_SCK
*/
0x01c1
/*
MX28_PAD_GPMI_RESETN__SSP3_CMD
*/
0x0111
/*
MX28_PAD_GPMI_CE1N__SSP3_D3
*/
0x01a2
/*
MX28_PAD_GPMI_ALE__SSP3_D4
*/
>;
fsl
,
drive
-
strength
=
<
1
>;
fsl
,
voltage
=
<
1
>;
fsl
,
pull
-
up
=
<
1
>;
};
};
ssp3
:
ssp
@
80016000
{
compatible
=
"fsl,imx28-spi"
;
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
spi3_pins_cfa10049
>;
status
=
"okay"
;
gpio5
:
gpio5
@
0
{
compatible
=
"fairchild,74hc595"
;
gpio
-
controller
;
#
gpio
-
cells
=
<
2
>;
reg
=
<
0
>;
registers
-
number
=
<
2
>;
spi
-
max
-
frequency
=
<
100000
>;
};
gpio6
:
gpio6
@
1
{
compatible
=
"fairchild,74hc595"
;
gpio
-
controller
;
#
gpio
-
cells
=
<
2
>;
reg
=
<
1
>;
registers
-
number
=
<
4
>;
spi
-
max
-
frequency
=
<
100000
>;
};
};
};
apbx
@
80040000
{
i2c1
:
i2c
@
8005
a000
{
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
i2c1_pins_a
>;
status
=
"okay"
;
};
usbphy1
:
usbphy
@
8007e000
{
status
=
"okay"
;
};
};
};
ahb
@
80080000
{
usb1
:
usb
@
80090000
{
vbus
-
supply
=
<&
reg_usb1_vbus
>;
pinctrl
-
0
=
<&
usbphy1_pins_a
>;
pinctrl
-
names
=
"default"
;
status
=
"okay"
;
};
};
regulators
{
compatible
=
"simple-bus"
;
reg_usb1_vbus
:
usb1_vbus
{
compatible
=
"regulator-fixed"
;
regulator
-
name
=
"usb1_vbus"
;
regulator
-
min
-
microvolt
=
<
5000000
>;
regulator
-
max
-
microvolt
=
<
5000000
>;
gpio
=
<&
gpio0
7
1
>;
};
};
};
arch/arm/boot/dts/imx28-evk.dts
View file @
9adaef9c
...
...
@@ -46,11 +46,28 @@ ssp1: ssp@80012000 {
wp
-
gpios
=
<&
gpio0
28
0
>;
};
ssp2
:
ssp
@
80014000
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
0
>;
compatible
=
"fsl,imx28-spi"
;
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
spi2_pins_a
>;
status
=
"okay"
;
flash
:
m25p80
@
0
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
compatible
=
"sst,sst25vf016b"
;
spi
-
max
-
frequency
=
<
40000000
>;
reg
=
<
0
>;
};
};
pinctrl
@
80018000
{
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
hog_pins_a
>;
hog_pins_a
:
hog
-
gpios
@
0
{
hog_pins_a
:
hog
@
0
{
reg
=
<
0
>;
fsl
,
pinmux
-
ids
=
<
0x20d3
/*
MX28_PAD_SSP1_CMD__GPIO_2_13
*/
...
...
@@ -128,6 +145,10 @@ saif1: saif@80046000 {
status
=
"okay"
;
};
lradc
@
80050000
{
status
=
"okay"
;
};
i2c0
:
i2c
@
80058000
{
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
i2c0_pins_a
>;
...
...
@@ -140,6 +161,12 @@ sgtl5000: codec@0a {
VDDIO
-
supply
=
<&
reg_3p3v
>;
};
at24
@
51
{
compatible
=
"at24,24c32"
;
pagesize
=
<
32
>;
reg
=
<
0x51
>;
};
};
pwm
:
pwm
@
80064000
{
...
...
arch/arm/boot/dts/imx28-m28evk.dts
View file @
9adaef9c
...
...
@@ -23,6 +23,8 @@ memory {
apb
@
80000000
{
apbh
@
80000000
{
gpmi
-
nand
@
8000
c000
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
gpmi_pins_a
&
gpmi_status_cfg
>;
status
=
"okay"
;
...
...
@@ -61,19 +63,40 @@ ssp0: ssp@80010000 {
&
mmc0_cd_cfg
&
mmc0_sck_cfg
>;
bus
-
width
=
<
8
>;
wp
-
gpios
=
<&
gpio3
10
1
>;
wp
-
gpios
=
<&
gpio3
10
0
>;
vmmc
-
supply
=
<&
reg_vddio_sd0
>;
status
=
"okay"
;
};
ssp2
:
ssp
@
80014000
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
0
>;
compatible
=
"fsl,imx28-spi"
;
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
spi2_pins_a
>;
status
=
"okay"
;
flash
:
m25p80
@
0
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
compatible
=
"m25p80"
;
spi
-
max
-
frequency
=
<
40000000
>;
reg
=
<
0
>;
};
};
pinctrl
@
80018000
{
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
hog_pins_a
>;
hog_pins_a
:
hog
-
gpios
@
0
{
hog_pins_a
:
hog
@
0
{
reg
=
<
0
>;
fsl
,
pinmux
-
ids
=
<
0x31c3
/*
MX28_PAD_PWM3__GPIO_3_28
*/
0x30a3
/*
MX28_PAD_AUART2_CTS__GPIO_3_10
*/
0x30b3
/*
MX28_PAD_AUART2_RTS__GPIO_3_11
*/
0x30c3
/*
MX28_PAD_AUART3_RX__GPIO_3_12
*/
0x30d3
/*
MX28_PAD_AUART3_TX__GPIO_3_13
*/
>;
fsl
,
drive
-
strength
=
<
0
>;
fsl
,
voltage
=
<
1
>;
...
...
@@ -129,6 +152,7 @@ saif1: saif@80046000 {
i2c0
:
i2c
@
80058000
{
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
i2c0_pins_a
>;
clock
-
frequency
=
<
400000
>;
status
=
"okay"
;
sgtl5000
:
codec
@
0
a
{
...
...
@@ -151,32 +175,51 @@ rtc: rtc@68 {
};
};
lradc
@
80050000
{
status
=
"okay"
;
};
duart
:
serial
@
80074000
{
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
duart_pins_a
>;
status
=
"okay"
;
};
auart0
:
serial
@
8006
a000
{
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
auart0_2pins_a
>;
usbphy0
:
usbphy
@
8007
c000
{
status
=
"okay"
;
};
auart3
:
serial
@
80070000
{
usbphy1
:
usbphy
@
8007e000
{
status
=
"okay"
;
};
auart0
:
serial
@
8006
a000
{
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
auart
3_
pins_a
>;
pinctrl
-
0
=
<&
auart
0_2
pins_a
>;
status
=
"okay"
;
};
};
};
ahb
@
80080000
{
usb0
:
usb
@
80080000
{
vbus
-
supply
=
<&
reg_usb0_vbus
>;
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
usbphy0_pins_a
>;
status
=
"okay"
;
};
usb1
:
usb
@
80090000
{
vbus
-
supply
=
<&
reg_usb1_vbus
>;
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
usbphy1_pins_a
>;
status
=
"okay"
;
};
mac0
:
ethernet
@
800f0000
{
phy
-
mode
=
"rmii"
;
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
mac0_pins_a
>;
phy
-
reset
-
gpios
=
<&
gpio3
11
0
>;
status
=
"okay"
;
};
...
...
@@ -198,6 +241,30 @@ reg_3p3v: 3p3v {
regulator
-
max
-
microvolt
=
<
3300000
>;
regulator
-
always
-
on
;
};
reg_vddio_sd0
:
vddio
-
sd0
{
compatible
=
"regulator-fixed"
;
regulator
-
name
=
"vddio-sd0"
;
regulator
-
min
-
microvolt
=
<
3300000
>;
regulator
-
max
-
microvolt
=
<
3300000
>;
gpio
=
<&
gpio3
28
0
>;
};
reg_usb0_vbus
:
usb0_vbus
{
compatible
=
"regulator-fixed"
;
regulator
-
name
=
"usb0_vbus"
;
regulator
-
min
-
microvolt
=
<
5000000
>;
regulator
-
max
-
microvolt
=
<
5000000
>;
gpio
=
<&
gpio3
12
0
>;
};
reg_usb1_vbus
:
usb1_vbus
{
compatible
=
"regulator-fixed"
;
regulator
-
name
=
"usb1_vbus"
;
regulator
-
min
-
microvolt
=
<
5000000
>;
regulator
-
max
-
microvolt
=
<
5000000
>;
gpio
=
<&
gpio3
13
0
>;
};
};
sound
{
...
...
arch/arm/boot/dts/imx28-tx28.dts
View file @
9adaef9c
...
...
@@ -25,7 +25,7 @@ pinctrl@80018000 {
pinctrl
-
names
=
"default"
;
pinctrl
-
0
=
<&
hog_pins_a
>;
hog_pins_a
:
hog
-
gpios
@
0
{
hog_pins_a
:
hog
@
0
{
reg
=
<
0
>;
fsl
,
pinmux
-
ids
=
<
0x40a3
/*
MX28_PAD_ENET0_RXD3__GPIO_4_10
*/
...
...
@@ -34,6 +34,24 @@ hog_pins_a: hog-gpios@0 {
fsl
,
voltage
=
<
1
>;
fsl
,
pull
-
up
=
<
0
>;
};
mac0_pins_gpio
:
mac0
-
gpio
-
mode
@
0
{
reg
=
<
0
>;
fsl
,
pinmux
-
ids
=
<
0x4003
/*
MX28_PAD_ENET0_MDC__GPIO_4_0
*/
0x4013
/*
MX28_PAD_ENET0_MDIO__GPIO_4_1
*/
0x4023
/*
MX28_PAD_ENET0_RX_EN__GPIO_4_2
*/
0x4033
/*
MX28_PAD_ENET0_RXD0__GPIO_4_3
*/
0x4043
/*
MX28_PAD_ENET0_RXD1__GPIO_4_4
*/
0x4063
/*
MX28_PAD_ENET0_TX_EN__GPIO_4_6
*/
0x4073
/*
MX28_PAD_ENET0_TXD0__GPIO_4_7
*/
0x4083
/*
MX28_PAD_ENET0_TXD1__GPIO_4_8
*/
0x4103
/*
MX28_PAD_ENET_CLK__GPIO_4_16
*/
>;
fsl
,
drive
-
strength
=
<
0
>;
fsl
,
voltage
=
<
1
>;
fsl
,
pull
-
up
=
<
0
>;
};
};
};
...
...
@@ -72,8 +90,9 @@ auart1: serial@8006c000 {
ahb
@
80080000
{
mac0
:
ethernet
@
800f0000
{
phy
-
mode
=
"rmii"
;
pinctrl
-
names
=
"default"
;
pinctrl
-
names
=
"default"
,
"gpio_mode"
;
pinctrl
-
0
=
<&
mac0_pins_a
>;
pinctrl
-
1
=
<&
mac0_pins_gpio
>;
status
=
"okay"
;
};
};
...
...
arch/arm/boot/dts/imx28.dtsi
View file @
9adaef9c
...
...
@@ -86,6 +86,8 @@ gpmi-nand@8000c000 {
};
ssp0: ssp@80010000 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x80010000 0x2000>;
interrupts = <96 82>;
fsl,ssp-dma-channel = <0>;
...
...
@@ -93,6 +95,8 @@ ssp0: ssp@80010000 {
};
ssp1: ssp@80012000 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x80012000 0x2000>;
interrupts = <97 83>;
fsl,ssp-dma-channel = <1>;
...
...
@@ -100,6 +104,8 @@ ssp1: ssp@80012000 {
};
ssp2: ssp@80014000 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x80014000 0x2000>;
interrupts = <98 84>;
fsl,ssp-dma-channel = <2>;
...
...
@@ -107,6 +113,8 @@ ssp2: ssp@80014000 {
};
ssp3: ssp@80016000 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x80016000 0x2000>;
interrupts = <99 85>;
fsl,ssp-dma-channel = <3>;
...
...
@@ -410,6 +418,28 @@ i2c0_pins_a: i2c0@0 {
fsl,pull-up = <1>;
};
i2c0_pins_b: i2c0@1 {
reg = <1>;
fsl,pinmux-ids = <
0x3001 /* MX28_PAD_AUART0_RX__I2C0_SCL */
0x3011 /* MX28_PAD_AUART0_TX__I2C0_SDA */
>;
fsl,drive-strength = <1>;
fsl,voltage = <1>;
fsl,pull-up = <1>;
};
i2c1_pins_a: i2c1@0 {
reg = <0>;
fsl,pinmux-ids = <
0x3101 /* MX28_PAD_PWM0__I2C1_SCL */
0x3111 /* MX28_PAD_PWM1__I2C1_SDA */
>;
fsl,drive-strength = <1>;
fsl,voltage = <1>;
fsl,pull-up = <1>;
};
saif0_pins_a: saif0@0 {
reg = <0>;
fsl,pinmux-ids = <
...
...
@@ -453,6 +483,16 @@ pwm2_pins_a: pwm2@0 {
fsl,pull-up = <0>;
};
pwm4_pins_a: pwm4@0 {
reg = <0>;
fsl,pinmux-ids = <
0x31d0 /* MX28_PAD_PWM4__PWM_4 */
>;
fsl,drive-strength = <0>;
fsl,voltage = <1>;
fsl,pull-up = <0>;
};
lcdif_24bit_pins_a: lcdif-24bit@0 {
reg = <0>;
fsl,pinmux-ids = <
...
...
@@ -507,6 +547,49 @@ can1_pins_a: can1@0 {
fsl,voltage = <1>;
fsl,pull-up = <0>;
};
spi2_pins_a: spi2@0 {
reg = <0>;
fsl,pinmux-ids = <
0x2100 /* MX28_PAD_SSP2_SCK__SSP2_SCK */
0x2110 /* MX28_PAD_SSP2_MOSI__SSP2_CMD */
0x2120 /* MX28_PAD_SSP2_MISO__SSP2_D0 */
0x2130 /* MX28_PAD_SSP2_SS0__SSP2_D3 */
>;
fsl,drive-strength = <1>;
fsl,voltage = <1>;
fsl,pull-up = <1>;
};
usbphy0_pins_a: usbphy0@0 {
reg = <0>;
fsl,pinmux-ids = <
0x2152 /* MX28_PAD_SSP2_SS2__USB0_OVERCURRENT */
>;
fsl,drive-strength = <2>;
fsl,voltage = <1>;
fsl,pull-up = <0>;
};
usbphy0_pins_b: usbphy0@1 {
reg = <1>;
fsl,pinmux-ids = <
0x3061 /* MX28_PAD_AUART1_CTS__USB0_OVERCURRENT */
>;
fsl,drive-strength = <2>;
fsl,voltage = <1>;
fsl,pull-up = <0>;
};
usbphy1_pins_a: usbphy1@0 {
reg = <0>;
fsl,pinmux-ids = <
0x2142 /* MX28_PAD_SSP2_SS1__USB1_OVERCURRENT */
>;
fsl,drive-strength = <2>;
fsl,voltage = <1>;
fsl,pull-up = <0>;
};
};
digctl@8001c000 {
...
...
@@ -638,7 +721,10 @@ saif1: saif@80046000 {
};
lradc@80050000 {
compatible = "fsl,imx28-lradc";
reg = <0x80050000 0x2000>;
interrupts = <10 14 15 16 17 18 19
20 21 22 23 24 25>;
status = "disabled";
};
...
...
arch/arm/configs/mxs_defconfig
View file @
9adaef9c
...
...
@@ -23,12 +23,6 @@ CONFIG_BLK_DEV_INTEGRITY=y
# CONFIG_IOSCHED_CFQ is not set
CONFIG_ARCH_MXS=y
CONFIG_MACH_MXS_DT=y
CONFIG_MACH_MX23EVK=y
CONFIG_MACH_MX28EVK=y
CONFIG_MACH_STMP378X_DEVB=y
CONFIG_MACH_TX28=y
CONFIG_MACH_M28EVK=y
CONFIG_MACH_APX4DEVKIT=y
# CONFIG_ARM_THUMB is not set
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
...
...
arch/arm/mach-mxs/Kconfig
View file @
9adaef9c
if ARCH_MXS
source "arch/arm/mach-mxs/devices/Kconfig"
config SOC_IMX23
bool
select ARM_AMBA
...
...
@@ -27,91 +25,4 @@ config MACH_MXS_DT
Include support for Freescale MXS platforms(i.MX23 and i.MX28)
using the device tree for discovery
config MACH_STMP378X_DEVB
bool "Support STMP378x_devb Platform"
select SOC_IMX23
select MXS_HAVE_AMBA_DUART
select MXS_HAVE_PLATFORM_AUART
select MXS_HAVE_PLATFORM_MXS_MMC
select MXS_HAVE_PLATFORM_RTC_STMP3XXX
help
Include support for STMP378x-devb platform. This includes specific
configurations for the board and its peripherals.
config MACH_MX23EVK
bool "Support MX23EVK Platform"
select SOC_IMX23
select MXS_HAVE_AMBA_DUART
select MXS_HAVE_PLATFORM_AUART
select MXS_HAVE_PLATFORM_MXS_MMC
select MXS_HAVE_PLATFORM_MXSFB
select MXS_HAVE_PLATFORM_RTC_STMP3XXX
help
Include support for MX23EVK platform. This includes specific
configurations for the board and its peripherals.
config MACH_MX28EVK
bool "Support MX28EVK Platform"
select SOC_IMX28
select LEDS_GPIO_REGISTER
select MXS_HAVE_AMBA_DUART
select MXS_HAVE_PLATFORM_AUART
select MXS_HAVE_PLATFORM_FEC
select MXS_HAVE_PLATFORM_FLEXCAN
select MXS_HAVE_PLATFORM_MXS_MMC
select MXS_HAVE_PLATFORM_MXSFB
select MXS_HAVE_PLATFORM_MXS_SAIF
select MXS_HAVE_PLATFORM_MXS_I2C
select MXS_HAVE_PLATFORM_RTC_STMP3XXX
help
Include support for MX28EVK platform. This includes specific
configurations for the board and its peripherals.
config MODULE_TX28
bool
select SOC_IMX28
select LEDS_GPIO_REGISTER
select MXS_HAVE_AMBA_DUART
select MXS_HAVE_PLATFORM_AUART
select MXS_HAVE_PLATFORM_FEC
select MXS_HAVE_PLATFORM_MXS_I2C
select MXS_HAVE_PLATFORM_MXS_MMC
select MXS_HAVE_PLATFORM_MXS_PWM
select MXS_HAVE_PLATFORM_RTC_STMP3XXX
config MODULE_M28
bool
select SOC_IMX28
select LEDS_GPIO_REGISTER
select MXS_HAVE_AMBA_DUART
select MXS_HAVE_PLATFORM_AUART
select MXS_HAVE_PLATFORM_FEC
select MXS_HAVE_PLATFORM_FLEXCAN
select MXS_HAVE_PLATFORM_MXS_I2C
select MXS_HAVE_PLATFORM_MXS_MMC
select MXS_HAVE_PLATFORM_MXSFB
config MODULE_APX4
bool
select SOC_IMX28
select LEDS_GPIO_REGISTER
select MXS_HAVE_AMBA_DUART
select MXS_HAVE_PLATFORM_AUART
select MXS_HAVE_PLATFORM_FEC
select MXS_HAVE_PLATFORM_MXS_I2C
select MXS_HAVE_PLATFORM_MXS_MMC
select MXS_HAVE_PLATFORM_MXS_SAIF
config MACH_TX28
bool "Ka-Ro TX28 module"
select MODULE_TX28
config MACH_M28EVK
bool "Support DENX M28EVK Platform"
select MODULE_M28
config MACH_APX4DEVKIT
bool "Support Bluegiga APX4 Development Kit"
select MODULE_APX4
endif
arch/arm/mach-mxs/Makefile
View file @
9adaef9c
# Common support
obj-y
:=
devices.o icoll.o iomux
.o ocotp.o system.o timer.o mm.o
obj-y
:=
icoll
.o ocotp.o system.o timer.o mm.o
obj-$(CONFIG_PM)
+=
pm.o
obj-$(CONFIG_MACH_MXS_DT)
+=
mach-mxs.o
obj-$(CONFIG_MACH_STMP378X_DEVB)
+=
mach-stmp378x_devb.o
obj-$(CONFIG_MACH_MX23EVK)
+=
mach-mx23evk.o
obj-$(CONFIG_MACH_MX28EVK)
+=
mach-mx28evk.o
obj-$(CONFIG_MACH_M28EVK)
+=
mach-m28evk.o
obj-$(CONFIG_MACH_APX4DEVKIT)
+=
mach-apx4devkit.o
obj-$(CONFIG_MODULE_TX28)
+=
module-tx28.o
obj-$(CONFIG_MACH_TX28)
+=
mach-tx28.o
obj-y
+=
devices/
arch/arm/mach-mxs/Makefile.boot
View file @
9adaef9c
...
...
@@ -5,6 +5,7 @@ dtb-y += imx23-evk.dtb \
imx23-stmp378x_devb.dtb
\
imx28-apx4devkit.dtb
\
imx28-cfa10036.dtb
\
imx28-cfa10049.dtb
\
imx28-evk.dtb
\
imx28-m28evk.dtb
\
imx28-tx28.dtb
\
arch/arm/mach-mxs/devices-mx23.h
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2010 Pengutronix
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
*
* Copyright 2010 Freescale Semiconductor, Inc. All Rights Reserved.
*
* 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 <mach/mx23.h>
#include <mach/devices-common.h>
#include <linux/mxsfb.h>
#include <linux/amba/bus.h>
static
inline
int
mx23_add_duart
(
void
)
{
struct
amba_device
*
d
;
d
=
amba_ahb_device_add
(
NULL
,
"duart"
,
MX23_DUART_BASE_ADDR
,
SZ_8K
,
MX23_INT_DUART
,
0
,
0
,
0
);
return
IS_ERR
(
d
)
?
PTR_ERR
(
d
)
:
0
;
}
extern
const
struct
mxs_auart_data
mx23_auart_data
[]
__initconst
;
#define mx23_add_auart(id) mxs_add_auart(&mx23_auart_data[id])
#define mx23_add_auart0() mx23_add_auart(0)
#define mx23_add_auart1() mx23_add_auart(1)
extern
const
struct
mxs_gpmi_nand_data
mx23_gpmi_nand_data
__initconst
;
#define mx23_add_gpmi_nand(pdata) \
mxs_add_gpmi_nand(pdata, &mx23_gpmi_nand_data)
extern
const
struct
mxs_mxs_mmc_data
mx23_mxs_mmc_data
[]
__initconst
;
#define mx23_add_mxs_mmc(id, pdata) \
mxs_add_mxs_mmc(&mx23_mxs_mmc_data[id], pdata)
#define mx23_add_mxs_pwm(id) mxs_add_mxs_pwm(MX23_PWM_BASE_ADDR, id)
struct
platform_device
*
__init
mx23_add_mxsfb
(
const
struct
mxsfb_platform_data
*
pdata
);
struct
platform_device
*
__init
mx23_add_rtc_stmp3xxx
(
void
);
arch/arm/mach-mxs/devices-mx28.h
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2010 Pengutronix
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
*
* Copyright 2010 Freescale Semiconductor, Inc. All Rights Reserved.
*
* 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 <mach/mx28.h>
#include <mach/devices-common.h>
#include <linux/mxsfb.h>
#include <linux/amba/bus.h>
static
inline
int
mx28_add_duart
(
void
)
{
struct
amba_device
*
d
;
d
=
amba_ahb_device_add
(
NULL
,
"duart"
,
MX28_DUART_BASE_ADDR
,
SZ_8K
,
MX28_INT_DUART
,
0
,
0
,
0
);
return
IS_ERR
(
d
)
?
PTR_ERR
(
d
)
:
0
;
}
extern
const
struct
mxs_auart_data
mx28_auart_data
[]
__initconst
;
#define mx28_add_auart(id) mxs_add_auart(&mx28_auart_data[id])
#define mx28_add_auart0() mx28_add_auart(0)
#define mx28_add_auart1() mx28_add_auart(1)
#define mx28_add_auart2() mx28_add_auart(2)
#define mx28_add_auart3() mx28_add_auart(3)
#define mx28_add_auart4() mx28_add_auart(4)
extern
const
struct
mxs_fec_data
mx28_fec_data
[]
__initconst
;
#define mx28_add_fec(id, pdata) \
mxs_add_fec(&mx28_fec_data[id], pdata)
extern
const
struct
mxs_flexcan_data
mx28_flexcan_data
[]
__initconst
;
#define mx28_add_flexcan(id, pdata) \
mxs_add_flexcan(&mx28_flexcan_data[id], pdata)
#define mx28_add_flexcan0(pdata) mx28_add_flexcan(0, pdata)
#define mx28_add_flexcan1(pdata) mx28_add_flexcan(1, pdata)
extern
const
struct
mxs_gpmi_nand_data
mx28_gpmi_nand_data
__initconst
;
#define mx28_add_gpmi_nand(pdata) \
mxs_add_gpmi_nand(pdata, &mx28_gpmi_nand_data)
extern
const
struct
mxs_mxs_i2c_data
mx28_mxs_i2c_data
[]
__initconst
;
#define mx28_add_mxs_i2c(id) mxs_add_mxs_i2c(&mx28_mxs_i2c_data[id])
extern
const
struct
mxs_mxs_mmc_data
mx28_mxs_mmc_data
[]
__initconst
;
#define mx28_add_mxs_mmc(id, pdata) \
mxs_add_mxs_mmc(&mx28_mxs_mmc_data[id], pdata)
#define mx28_add_mxs_pwm(id) mxs_add_mxs_pwm(MX28_PWM_BASE_ADDR, id)
struct
platform_device
*
__init
mx28_add_mxsfb
(
const
struct
mxsfb_platform_data
*
pdata
);
extern
const
struct
mxs_saif_data
mx28_saif_data
[]
__initconst
;
#define mx28_add_saif(id, pdata) \
mxs_add_saif(&mx28_saif_data[id], pdata)
struct
platform_device
*
__init
mx28_add_rtc_stmp3xxx
(
void
);
arch/arm/mach-mxs/devices.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright 2008 Sascha Hauer, kernel@pengutronix.de
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/amba/bus.h>
struct
platform_device
*
__init
mxs_add_platform_device_dmamask
(
const
char
*
name
,
int
id
,
const
struct
resource
*
res
,
unsigned
int
num_resources
,
const
void
*
data
,
size_t
size_data
,
u64
dmamask
)
{
int
ret
=
-
ENOMEM
;
struct
platform_device
*
pdev
;
pdev
=
platform_device_alloc
(
name
,
id
);
if
(
!
pdev
)
goto
err
;
if
(
dmamask
)
{
/*
* This memory isn't freed when the device is put,
* I don't have a nice idea for that though. Conceptually
* dma_mask in struct device should not be a pointer.
* See http://thread.gmane.org/gmane.linux.kernel.pci/9081
*/
pdev
->
dev
.
dma_mask
=
kmalloc
(
sizeof
(
*
pdev
->
dev
.
dma_mask
),
GFP_KERNEL
);
if
(
!
pdev
->
dev
.
dma_mask
)
/* ret is still -ENOMEM; */
goto
err
;
*
pdev
->
dev
.
dma_mask
=
dmamask
;
pdev
->
dev
.
coherent_dma_mask
=
dmamask
;
}
if
(
res
)
{
ret
=
platform_device_add_resources
(
pdev
,
res
,
num_resources
);
if
(
ret
)
goto
err
;
}
if
(
data
)
{
ret
=
platform_device_add_data
(
pdev
,
data
,
size_data
);
if
(
ret
)
goto
err
;
}
ret
=
platform_device_add
(
pdev
);
if
(
ret
)
{
err:
if
(
dmamask
)
kfree
(
pdev
->
dev
.
dma_mask
);
platform_device_put
(
pdev
);
return
ERR_PTR
(
ret
);
}
return
pdev
;
}
struct
device
mxs_apbh_bus
=
{
.
init_name
=
"mxs_apbh"
,
.
parent
=
&
platform_bus
,
};
static
int
__init
mxs_device_init
(
void
)
{
return
device_register
(
&
mxs_apbh_bus
);
}
core_initcall
(
mxs_device_init
);
arch/arm/mach-mxs/devices/Kconfig
deleted
100644 → 0
View file @
4cbe5a55
config MXS_HAVE_AMBA_DUART
bool
config MXS_HAVE_PLATFORM_AUART
bool
config MXS_HAVE_PLATFORM_FEC
bool
config MXS_HAVE_PLATFORM_FLEXCAN
select HAVE_CAN_FLEXCAN if CAN
bool
config MXS_HAVE_PLATFORM_GPMI_NAND
bool
config MXS_HAVE_PLATFORM_MXS_I2C
bool
config MXS_HAVE_PLATFORM_MXS_MMC
bool
config MXS_HAVE_PLATFORM_MXS_PWM
bool
config MXS_HAVE_PLATFORM_MXSFB
bool
config MXS_HAVE_PLATFORM_MXS_SAIF
bool
config MXS_HAVE_PLATFORM_RTC_STMP3XXX
bool
arch/arm/mach-mxs/devices/Makefile
deleted
100644 → 0
View file @
4cbe5a55
obj-$(CONFIG_MXS_HAVE_PLATFORM_AUART)
+=
platform-auart.o
obj-y
+=
platform-dma.o
obj-$(CONFIG_MXS_HAVE_PLATFORM_FEC)
+=
platform-fec.o
obj-$(CONFIG_MXS_HAVE_PLATFORM_FLEXCAN)
+=
platform-flexcan.o
obj-$(CONFIG_MXS_HAVE_PLATFORM_GPMI_NAND)
+=
platform-gpmi-nand.o
obj-$(CONFIG_MXS_HAVE_PLATFORM_MXS_I2C)
+=
platform-mxs-i2c.o
obj-$(CONFIG_MXS_HAVE_PLATFORM_MXS_MMC)
+=
platform-mxs-mmc.o
obj-$(CONFIG_MXS_HAVE_PLATFORM_MXS_PWM)
+=
platform-mxs-pwm.o
obj-y
+=
platform-gpio-mxs.o
obj-$(CONFIG_MXS_HAVE_PLATFORM_MXSFB)
+=
platform-mxsfb.o
obj-$(CONFIG_MXS_HAVE_PLATFORM_MXS_SAIF)
+=
platform-mxs-saif.o
obj-$(CONFIG_MXS_HAVE_PLATFORM_RTC_STMP3XXX)
+=
platform-rtc-stmp3xxx.o
arch/arm/mach-mxs/devices/platform-auart.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2010 Pengutronix
* Sascha Hauer <s.hauer@pengutronix.de>
*
* 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/dma-mapping.h>
#include <asm/sizes.h>
#include <mach/mx23.h>
#include <mach/mx28.h>
#include <mach/devices-common.h>
#define mxs_auart_data_entry_single(soc, _id, hwid) \
{ \
.id = _id, \
.iobase = soc ## _AUART ## hwid ## _BASE_ADDR, \
.irq = soc ## _INT_AUART ## hwid, \
}
#define mxs_auart_data_entry(soc, _id, hwid) \
[_id] = mxs_auart_data_entry_single(soc, _id, hwid)
#ifdef CONFIG_SOC_IMX23
const
struct
mxs_auart_data
mx23_auart_data
[]
__initconst
=
{
#define mx23_auart_data_entry(_id, hwid) \
mxs_auart_data_entry(MX23, _id, hwid)
mx23_auart_data_entry
(
0
,
1
),
mx23_auart_data_entry
(
1
,
2
),
};
#endif
#ifdef CONFIG_SOC_IMX28
const
struct
mxs_auart_data
mx28_auart_data
[]
__initconst
=
{
#define mx28_auart_data_entry(_id) \
mxs_auart_data_entry(MX28, _id, _id)
mx28_auart_data_entry
(
0
),
mx28_auart_data_entry
(
1
),
mx28_auart_data_entry
(
2
),
mx28_auart_data_entry
(
3
),
mx28_auart_data_entry
(
4
),
};
#endif
struct
platform_device
*
__init
mxs_add_auart
(
const
struct
mxs_auart_data
*
data
)
{
struct
resource
res
[]
=
{
{
.
start
=
data
->
iobase
,
.
end
=
data
->
iobase
+
SZ_8K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
start
=
data
->
irq
,
.
end
=
data
->
irq
,
.
flags
=
IORESOURCE_IRQ
,
},
};
return
mxs_add_platform_device_dmamask
(
"mxs-auart"
,
data
->
id
,
res
,
ARRAY_SIZE
(
res
),
NULL
,
0
,
DMA_BIT_MASK
(
32
));
}
arch/arm/mach-mxs/devices/platform-dma.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved.
*
* 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/compiler.h>
#include <linux/dma-mapping.h>
#include <linux/err.h>
#include <linux/init.h>
#include <mach/mx23.h>
#include <mach/mx28.h>
#include <mach/devices-common.h>
struct
platform_device
*
__init
mxs_add_dma
(
const
char
*
devid
,
resource_size_t
base
)
{
struct
resource
res
[]
=
{
{
.
start
=
base
,
.
end
=
base
+
SZ_8K
-
1
,
.
flags
=
IORESOURCE_MEM
,
}
};
return
mxs_add_platform_device_dmamask
(
devid
,
-
1
,
res
,
ARRAY_SIZE
(
res
),
NULL
,
0
,
DMA_BIT_MASK
(
32
));
}
arch/arm/mach-mxs/devices/platform-fec.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2010 Pengutronix
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
*
* 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/dma-mapping.h>
#include <asm/sizes.h>
#include <mach/mx28.h>
#include <mach/devices-common.h>
#define mxs_fec_data_entry_single(soc, _id) \
{ \
.id = _id, \
.iobase = soc ## _ENET_MAC ## _id ## _BASE_ADDR, \
.irq = soc ## _INT_ENET_MAC ## _id, \
}
#define mxs_fec_data_entry(soc, _id) \
[_id] = mxs_fec_data_entry_single(soc, _id)
#ifdef CONFIG_SOC_IMX28
const
struct
mxs_fec_data
mx28_fec_data
[]
__initconst
=
{
#define mx28_fec_data_entry(_id) \
mxs_fec_data_entry(MX28, _id)
mx28_fec_data_entry
(
0
),
mx28_fec_data_entry
(
1
),
};
#endif
struct
platform_device
*
__init
mxs_add_fec
(
const
struct
mxs_fec_data
*
data
,
const
struct
fec_platform_data
*
pdata
)
{
struct
resource
res
[]
=
{
{
.
start
=
data
->
iobase
,
.
end
=
data
->
iobase
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
start
=
data
->
irq
,
.
end
=
data
->
irq
,
.
flags
=
IORESOURCE_IRQ
,
},
};
return
mxs_add_platform_device_dmamask
(
"imx28-fec"
,
data
->
id
,
res
,
ARRAY_SIZE
(
res
),
pdata
,
sizeof
(
*
pdata
),
DMA_BIT_MASK
(
32
));
}
arch/arm/mach-mxs/devices/platform-flexcan.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2010, 2011 Pengutronix,
* Marc Kleine-Budde <kernel@pengutronix.de>
*
* 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 <asm/sizes.h>
#include <mach/mx28.h>
#include <mach/devices-common.h>
#define mxs_flexcan_data_entry_single(soc, _id, _hwid, _size) \
{ \
.id = _id, \
.iobase = soc ## _CAN ## _hwid ## _BASE_ADDR, \
.iosize = _size, \
.irq = soc ## _INT_CAN ## _hwid, \
}
#define mxs_flexcan_data_entry(soc, _id, _hwid, _size) \
[_id] = mxs_flexcan_data_entry_single(soc, _id, _hwid, _size)
#ifdef CONFIG_SOC_IMX28
const
struct
mxs_flexcan_data
mx28_flexcan_data
[]
__initconst
=
{
#define mx28_flexcan_data_entry(_id, _hwid) \
mxs_flexcan_data_entry_single(MX28, _id, _hwid, SZ_8K)
mx28_flexcan_data_entry
(
0
,
0
),
mx28_flexcan_data_entry
(
1
,
1
),
};
#endif
/* ifdef CONFIG_SOC_IMX28 */
struct
platform_device
*
__init
mxs_add_flexcan
(
const
struct
mxs_flexcan_data
*
data
,
const
struct
flexcan_platform_data
*
pdata
)
{
struct
resource
res
[]
=
{
{
.
start
=
data
->
iobase
,
.
end
=
data
->
iobase
+
data
->
iosize
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
start
=
data
->
irq
,
.
end
=
data
->
irq
,
.
flags
=
IORESOURCE_IRQ
,
},
};
return
mxs_add_platform_device
(
"flexcan"
,
data
->
id
,
res
,
ARRAY_SIZE
(
res
),
pdata
,
sizeof
(
*
pdata
));
}
arch/arm/mach-mxs/devices/platform-gpio-mxs.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved.
*
* 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/compiler.h>
#include <linux/err.h>
#include <linux/init.h>
#include <mach/mx23.h>
#include <mach/mx28.h>
#include <mach/devices-common.h>
struct
platform_device
*
__init
mxs_add_gpio
(
char
*
name
,
int
id
,
resource_size_t
iobase
,
int
irq
)
{
struct
resource
res
[]
=
{
{
.
start
=
iobase
,
.
end
=
iobase
+
SZ_8K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
start
=
irq
,
.
end
=
irq
,
.
flags
=
IORESOURCE_IRQ
,
},
};
return
platform_device_register_resndata
(
&
mxs_apbh_bus
,
name
,
id
,
res
,
ARRAY_SIZE
(
res
),
NULL
,
0
);
}
arch/arm/mach-mxs/devices/platform-gpmi-nand.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <asm/sizes.h>
#include <mach/mx23.h>
#include <mach/mx28.h>
#include <mach/devices-common.h>
#include <linux/dma-mapping.h>
#ifdef CONFIG_SOC_IMX23
const
struct
mxs_gpmi_nand_data
mx23_gpmi_nand_data
__initconst
=
{
.
devid
=
"imx23-gpmi-nand"
,
.
res
=
{
/* GPMI */
DEFINE_RES_MEM_NAMED
(
MX23_GPMI_BASE_ADDR
,
SZ_8K
,
GPMI_NAND_GPMI_REGS_ADDR_RES_NAME
),
DEFINE_RES_IRQ_NAMED
(
MX23_INT_GPMI_ATTENTION
,
GPMI_NAND_GPMI_INTERRUPT_RES_NAME
),
/* BCH */
DEFINE_RES_MEM_NAMED
(
MX23_BCH_BASE_ADDR
,
SZ_8K
,
GPMI_NAND_BCH_REGS_ADDR_RES_NAME
),
DEFINE_RES_IRQ_NAMED
(
MX23_INT_BCH
,
GPMI_NAND_BCH_INTERRUPT_RES_NAME
),
/* DMA */
DEFINE_RES_NAMED
(
MX23_DMA_GPMI0
,
MX23_DMA_GPMI3
-
MX23_DMA_GPMI0
+
1
,
GPMI_NAND_DMA_CHANNELS_RES_NAME
,
IORESOURCE_DMA
),
DEFINE_RES_IRQ_NAMED
(
MX23_INT_GPMI_DMA
,
GPMI_NAND_DMA_INTERRUPT_RES_NAME
),
},
};
#endif
#ifdef CONFIG_SOC_IMX28
const
struct
mxs_gpmi_nand_data
mx28_gpmi_nand_data
__initconst
=
{
.
devid
=
"imx28-gpmi-nand"
,
.
res
=
{
/* GPMI */
DEFINE_RES_MEM_NAMED
(
MX28_GPMI_BASE_ADDR
,
SZ_8K
,
GPMI_NAND_GPMI_REGS_ADDR_RES_NAME
),
DEFINE_RES_IRQ_NAMED
(
MX28_INT_GPMI
,
GPMI_NAND_GPMI_INTERRUPT_RES_NAME
),
/* BCH */
DEFINE_RES_MEM_NAMED
(
MX28_BCH_BASE_ADDR
,
SZ_8K
,
GPMI_NAND_BCH_REGS_ADDR_RES_NAME
),
DEFINE_RES_IRQ_NAMED
(
MX28_INT_BCH
,
GPMI_NAND_BCH_INTERRUPT_RES_NAME
),
/* DMA */
DEFINE_RES_NAMED
(
MX28_DMA_GPMI0
,
MX28_DMA_GPMI7
-
MX28_DMA_GPMI0
+
1
,
GPMI_NAND_DMA_CHANNELS_RES_NAME
,
IORESOURCE_DMA
),
DEFINE_RES_IRQ_NAMED
(
MX28_INT_GPMI_DMA
,
GPMI_NAND_DMA_INTERRUPT_RES_NAME
),
},
};
#endif
struct
platform_device
*
__init
mxs_add_gpmi_nand
(
const
struct
gpmi_nand_platform_data
*
pdata
,
const
struct
mxs_gpmi_nand_data
*
data
)
{
return
mxs_add_platform_device_dmamask
(
data
->
devid
,
-
1
,
data
->
res
,
GPMI_NAND_RES_SIZE
,
pdata
,
sizeof
(
*
pdata
),
DMA_BIT_MASK
(
32
));
}
arch/arm/mach-mxs/devices/platform-mxs-i2c.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2011 Pengutronix
* Wolfram Sang <w.sang@pengutronix.de>
*
* 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 <asm/sizes.h>
#include <mach/mx28.h>
#include <mach/devices-common.h>
#define mxs_i2c_data_entry_single(soc, _id) \
{ \
.id = _id, \
.iobase = soc ## _I2C ## _id ## _BASE_ADDR, \
.errirq = soc ## _INT_I2C ## _id ## _ERROR, \
.dmairq = soc ## _INT_I2C ## _id ## _DMA, \
}
#define mxs_i2c_data_entry(soc, _id) \
[_id] = mxs_i2c_data_entry_single(soc, _id)
#ifdef CONFIG_SOC_IMX28
const
struct
mxs_mxs_i2c_data
mx28_mxs_i2c_data
[]
__initconst
=
{
mxs_i2c_data_entry
(
MX28
,
0
),
mxs_i2c_data_entry
(
MX28
,
1
),
};
#endif
struct
platform_device
*
__init
mxs_add_mxs_i2c
(
const
struct
mxs_mxs_i2c_data
*
data
)
{
struct
resource
res
[]
=
{
{
.
start
=
data
->
iobase
,
.
end
=
data
->
iobase
+
SZ_8K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
start
=
data
->
errirq
,
.
end
=
data
->
errirq
,
.
flags
=
IORESOURCE_IRQ
,
},
{
.
start
=
data
->
dmairq
,
.
end
=
data
->
dmairq
,
.
flags
=
IORESOURCE_IRQ
,
},
};
return
mxs_add_platform_device
(
"mxs-i2c"
,
data
->
id
,
res
,
ARRAY_SIZE
(
res
),
NULL
,
0
);
}
arch/arm/mach-mxs/devices/platform-mxs-mmc.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2010 Pengutronix
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
*
* Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved.
*
* 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/compiler.h>
#include <linux/err.h>
#include <linux/init.h>
#include <mach/mx23.h>
#include <mach/mx28.h>
#include <mach/devices-common.h>
#define mxs_mxs_mmc_data_entry_single(soc, _devid, _id, hwid) \
{ \
.devid = _devid, \
.id = _id, \
.iobase = soc ## _SSP ## hwid ## _BASE_ADDR, \
.dma = soc ## _DMA_SSP ## hwid, \
.irq_err = soc ## _INT_SSP ## hwid ## _ERROR, \
.irq_dma = soc ## _INT_SSP ## hwid ## _DMA, \
}
#define mxs_mxs_mmc_data_entry(soc, _devid, _id, hwid) \
[_id] = mxs_mxs_mmc_data_entry_single(soc, _devid, _id, hwid)
#ifdef CONFIG_SOC_IMX23
const
struct
mxs_mxs_mmc_data
mx23_mxs_mmc_data
[]
__initconst
=
{
mxs_mxs_mmc_data_entry
(
MX23
,
"imx23-mmc"
,
0
,
1
),
mxs_mxs_mmc_data_entry
(
MX23
,
"imx23-mmc"
,
1
,
2
),
};
#endif
#ifdef CONFIG_SOC_IMX28
const
struct
mxs_mxs_mmc_data
mx28_mxs_mmc_data
[]
__initconst
=
{
mxs_mxs_mmc_data_entry
(
MX28
,
"imx28-mmc"
,
0
,
0
),
mxs_mxs_mmc_data_entry
(
MX28
,
"imx28-mmc"
,
1
,
1
),
mxs_mxs_mmc_data_entry
(
MX28
,
"imx28-mmc"
,
2
,
2
),
mxs_mxs_mmc_data_entry
(
MX28
,
"imx28-mmc"
,
3
,
3
),
};
#endif
struct
platform_device
*
__init
mxs_add_mxs_mmc
(
const
struct
mxs_mxs_mmc_data
*
data
,
const
struct
mxs_mmc_platform_data
*
pdata
)
{
struct
resource
res
[]
=
{
{
.
start
=
data
->
iobase
,
.
end
=
data
->
iobase
+
SZ_8K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
start
=
data
->
dma
,
.
end
=
data
->
dma
,
.
flags
=
IORESOURCE_DMA
,
},
{
.
start
=
data
->
irq_err
,
.
end
=
data
->
irq_err
,
.
flags
=
IORESOURCE_IRQ
,
},
{
.
start
=
data
->
irq_dma
,
.
end
=
data
->
irq_dma
,
.
flags
=
IORESOURCE_IRQ
,
},
};
return
mxs_add_platform_device
(
data
->
devid
,
data
->
id
,
res
,
ARRAY_SIZE
(
res
),
pdata
,
sizeof
(
*
pdata
));
}
arch/arm/mach-mxs/devices/platform-mxs-pwm.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2010 Pengutronix
* Sascha Hauer <s.hauer@pengutronix.de>
*
* 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 <asm/sizes.h>
#include <mach/devices-common.h>
struct
platform_device
*
__init
mxs_add_mxs_pwm
(
resource_size_t
iobase
,
int
id
)
{
struct
resource
res
=
{
.
flags
=
IORESOURCE_MEM
,
};
res
.
start
=
iobase
+
0x10
+
0x20
*
id
;
res
.
end
=
res
.
start
+
0x1f
;
return
mxs_add_platform_device
(
"mxs-pwm"
,
id
,
&
res
,
1
,
NULL
,
0
);
}
arch/arm/mach-mxs/devices/platform-mxs-saif.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved.
*
* 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/compiler.h>
#include <linux/err.h>
#include <linux/init.h>
#include <mach/mx23.h>
#include <mach/mx28.h>
#include <mach/devices-common.h>
#define mxs_saif_data_entry_single(soc, _id) \
{ \
.id = _id, \
.iobase = soc ## _SAIF ## _id ## _BASE_ADDR, \
.irq = soc ## _INT_SAIF ## _id, \
.dma = soc ## _DMA_SAIF ## _id, \
.dmairq = soc ## _INT_SAIF ## _id ##_DMA, \
}
#define mxs_saif_data_entry(soc, _id) \
[_id] = mxs_saif_data_entry_single(soc, _id)
#ifdef CONFIG_SOC_IMX28
const
struct
mxs_saif_data
mx28_saif_data
[]
__initconst
=
{
mxs_saif_data_entry
(
MX28
,
0
),
mxs_saif_data_entry
(
MX28
,
1
),
};
#endif
struct
platform_device
*
__init
mxs_add_saif
(
const
struct
mxs_saif_data
*
data
,
const
struct
mxs_saif_platform_data
*
pdata
)
{
struct
resource
res
[]
=
{
{
.
start
=
data
->
iobase
,
.
end
=
data
->
iobase
+
SZ_4K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
start
=
data
->
irq
,
.
end
=
data
->
irq
,
.
flags
=
IORESOURCE_IRQ
,
},
{
.
start
=
data
->
dma
,
.
end
=
data
->
dma
,
.
flags
=
IORESOURCE_DMA
,
},
{
.
start
=
data
->
dmairq
,
.
end
=
data
->
dmairq
,
.
flags
=
IORESOURCE_IRQ
,
},
};
return
mxs_add_platform_device
(
"mxs-saif"
,
data
->
id
,
res
,
ARRAY_SIZE
(
res
),
pdata
,
sizeof
(
*
pdata
));
}
arch/arm/mach-mxs/devices/platform-mxsfb.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2011 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
*
* 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/dma-mapping.h>
#include <asm/sizes.h>
#include <mach/mx23.h>
#include <mach/mx28.h>
#include <mach/devices-common.h>
#include <linux/mxsfb.h>
#ifdef CONFIG_SOC_IMX23
struct
platform_device
*
__init
mx23_add_mxsfb
(
const
struct
mxsfb_platform_data
*
pdata
)
{
struct
resource
res
[]
=
{
{
.
start
=
MX23_LCDIF_BASE_ADDR
,
.
end
=
MX23_LCDIF_BASE_ADDR
+
SZ_8K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
};
return
mxs_add_platform_device_dmamask
(
"imx23-fb"
,
-
1
,
res
,
ARRAY_SIZE
(
res
),
pdata
,
sizeof
(
*
pdata
),
DMA_BIT_MASK
(
32
));
}
#endif
/* ifdef CONFIG_SOC_IMX23 */
#ifdef CONFIG_SOC_IMX28
struct
platform_device
*
__init
mx28_add_mxsfb
(
const
struct
mxsfb_platform_data
*
pdata
)
{
struct
resource
res
[]
=
{
{
.
start
=
MX28_LCDIF_BASE_ADDR
,
.
end
=
MX28_LCDIF_BASE_ADDR
+
SZ_8K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
};
return
mxs_add_platform_device_dmamask
(
"imx28-fb"
,
-
1
,
res
,
ARRAY_SIZE
(
res
),
pdata
,
sizeof
(
*
pdata
),
DMA_BIT_MASK
(
32
));
}
#endif
/* ifdef CONFIG_SOC_IMX28 */
arch/arm/mach-mxs/devices/platform-rtc-stmp3xxx.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2011 Pengutronix, Wolfram Sang <w.sang@pengutronix.de>
*
* 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 <asm/sizes.h>
#include <mach/mx23.h>
#include <mach/mx28.h>
#include <mach/devices-common.h>
#ifdef CONFIG_SOC_IMX23
struct
platform_device
*
__init
mx23_add_rtc_stmp3xxx
(
void
)
{
struct
resource
res
[]
=
{
{
.
start
=
MX23_RTC_BASE_ADDR
,
.
end
=
MX23_RTC_BASE_ADDR
+
SZ_8K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
start
=
MX23_INT_RTC_ALARM
,
.
end
=
MX23_INT_RTC_ALARM
,
.
flags
=
IORESOURCE_IRQ
,
},
};
return
mxs_add_platform_device
(
"stmp3xxx-rtc"
,
0
,
res
,
ARRAY_SIZE
(
res
),
NULL
,
0
);
}
#endif
/* CONFIG_SOC_IMX23 */
#ifdef CONFIG_SOC_IMX28
struct
platform_device
*
__init
mx28_add_rtc_stmp3xxx
(
void
)
{
struct
resource
res
[]
=
{
{
.
start
=
MX28_RTC_BASE_ADDR
,
.
end
=
MX28_RTC_BASE_ADDR
+
SZ_8K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
.
start
=
MX28_INT_RTC_ALARM
,
.
end
=
MX28_INT_RTC_ALARM
,
.
flags
=
IORESOURCE_IRQ
,
},
};
return
mxs_add_platform_device
(
"stmp3xxx-rtc"
,
0
,
res
,
ARRAY_SIZE
(
res
),
NULL
,
0
);
}
#endif
/* CONFIG_SOC_IMX28 */
arch/arm/mach-mxs/include/mach/common.h
View file @
9adaef9c
...
...
@@ -17,21 +17,12 @@ extern void mxs_timer_init(int);
extern
void
mxs_restart
(
char
,
const
char
*
);
extern
int
mxs_saif_clkmux_select
(
unsigned
int
clkmux
);
extern
void
mx23_soc_init
(
void
);
extern
int
mx23_clocks_init
(
void
);
extern
void
mx23_map_io
(
void
);
extern
void
mx23_init_irq
(
void
);
extern
void
mx28_soc_init
(
void
);
extern
int
mx28_clocks_init
(
void
);
extern
void
mx28_map_io
(
void
);
extern
void
mx28_init_irq
(
void
);
extern
void
icoll_init_irq
(
void
);
extern
struct
platform_device
*
mxs_add_dma
(
const
char
*
devid
,
resource_size_t
base
);
extern
struct
platform_device
*
mxs_add_gpio
(
char
*
name
,
int
id
,
resource_size_t
iobase
,
int
irq
);
#endif
/* __MACH_MXS_COMMON_H__ */
arch/arm/mach-mxs/include/mach/devices-common.h
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2009-2010 Pengutronix
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
*
* 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/kernel.h>
#include <linux/platform_device.h>
#include <linux/init.h>
#include <linux/amba/bus.h>
extern
struct
device
mxs_apbh_bus
;
struct
platform_device
*
mxs_add_platform_device_dmamask
(
const
char
*
name
,
int
id
,
const
struct
resource
*
res
,
unsigned
int
num_resources
,
const
void
*
data
,
size_t
size_data
,
u64
dmamask
);
static
inline
struct
platform_device
*
mxs_add_platform_device
(
const
char
*
name
,
int
id
,
const
struct
resource
*
res
,
unsigned
int
num_resources
,
const
void
*
data
,
size_t
size_data
)
{
return
mxs_add_platform_device_dmamask
(
name
,
id
,
res
,
num_resources
,
data
,
size_data
,
0
);
}
/* auart */
struct
mxs_auart_data
{
int
id
;
resource_size_t
iobase
;
resource_size_t
iosize
;
resource_size_t
irq
;
};
struct
platform_device
*
__init
mxs_add_auart
(
const
struct
mxs_auart_data
*
data
);
/* fec */
#include <linux/fec.h>
struct
mxs_fec_data
{
int
id
;
resource_size_t
iobase
;
resource_size_t
iosize
;
resource_size_t
irq
;
};
struct
platform_device
*
__init
mxs_add_fec
(
const
struct
mxs_fec_data
*
data
,
const
struct
fec_platform_data
*
pdata
);
/* flexcan */
#include <linux/can/platform/flexcan.h>
struct
mxs_flexcan_data
{
int
id
;
resource_size_t
iobase
;
resource_size_t
iosize
;
resource_size_t
irq
;
};
struct
platform_device
*
__init
mxs_add_flexcan
(
const
struct
mxs_flexcan_data
*
data
,
const
struct
flexcan_platform_data
*
pdata
);
/* gpmi-nand */
#include <linux/mtd/gpmi-nand.h>
struct
mxs_gpmi_nand_data
{
const
char
*
devid
;
const
struct
resource
res
[
GPMI_NAND_RES_SIZE
];
};
struct
platform_device
*
__init
mxs_add_gpmi_nand
(
const
struct
gpmi_nand_platform_data
*
pdata
,
const
struct
mxs_gpmi_nand_data
*
data
);
/* i2c */
struct
mxs_mxs_i2c_data
{
int
id
;
resource_size_t
iobase
;
resource_size_t
errirq
;
resource_size_t
dmairq
;
};
struct
platform_device
*
__init
mxs_add_mxs_i2c
(
const
struct
mxs_mxs_i2c_data
*
data
);
/* mmc */
#include <linux/mmc/mxs-mmc.h>
struct
mxs_mxs_mmc_data
{
const
char
*
devid
;
int
id
;
resource_size_t
iobase
;
resource_size_t
dma
;
resource_size_t
irq_err
;
resource_size_t
irq_dma
;
};
struct
platform_device
*
__init
mxs_add_mxs_mmc
(
const
struct
mxs_mxs_mmc_data
*
data
,
const
struct
mxs_mmc_platform_data
*
pdata
);
/* pwm */
struct
platform_device
*
__init
mxs_add_mxs_pwm
(
resource_size_t
iobase
,
int
id
);
/* saif */
#include <sound/saif.h>
struct
mxs_saif_data
{
int
id
;
resource_size_t
iobase
;
resource_size_t
irq
;
resource_size_t
dma
;
resource_size_t
dmairq
;
};
struct
platform_device
*
__init
mxs_add_saif
(
const
struct
mxs_saif_data
*
data
,
const
struct
mxs_saif_platform_data
*
pdata
);
arch/arm/mach-mxs/include/mach/iomux-mx23.h
deleted
100644 → 0
View file @
4cbe5a55
This diff is collapsed.
Click to expand it.
arch/arm/mach-mxs/include/mach/iomux-mx28.h
deleted
100644 → 0
View file @
4cbe5a55
This diff is collapsed.
Click to expand it.
arch/arm/mach-mxs/include/mach/iomux.h
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH,
* <armlinux@phytec.de>
* Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
#ifndef __MACH_MXS_IOMUX_H__
#define __MACH_MXS_IOMUX_H__
/*
* IOMUX/PAD Bit field definitions
*
* PAD_BANK: 0..2 (3)
* PAD_PIN: 3..7 (5)
* PAD_MUXSEL: 8..9 (2)
* PAD_MA: 10..11 (2)
* PAD_MA_VALID: 12 (1)
* PAD_VOL: 13 (1)
* PAD_VOL_VALID: 14 (1)
* PAD_PULL: 15 (1)
* PAD_PULL_VALID: 16 (1)
* RESERVED: 17..31 (15)
*/
typedef
u32
iomux_cfg_t
;
#define MXS_PAD_BANK_SHIFT 0
#define MXS_PAD_BANK_MASK ((iomux_cfg_t)0x7 << MXS_PAD_BANK_SHIFT)
#define MXS_PAD_PIN_SHIFT 3
#define MXS_PAD_PIN_MASK ((iomux_cfg_t)0x1f << MXS_PAD_PIN_SHIFT)
#define MXS_PAD_MUXSEL_SHIFT 8
#define MXS_PAD_MUXSEL_MASK ((iomux_cfg_t)0x3 << MXS_PAD_MUXSEL_SHIFT)
#define MXS_PAD_MA_SHIFT 10
#define MXS_PAD_MA_MASK ((iomux_cfg_t)0x3 << MXS_PAD_MA_SHIFT)
#define MXS_PAD_MA_VALID_SHIFT 12
#define MXS_PAD_MA_VALID_MASK ((iomux_cfg_t)0x1 << MXS_PAD_MA_VALID_SHIFT)
#define MXS_PAD_VOL_SHIFT 13
#define MXS_PAD_VOL_MASK ((iomux_cfg_t)0x1 << MXS_PAD_VOL_SHIFT)
#define MXS_PAD_VOL_VALID_SHIFT 14
#define MXS_PAD_VOL_VALID_MASK ((iomux_cfg_t)0x1 << MXS_PAD_VOL_VALID_SHIFT)
#define MXS_PAD_PULL_SHIFT 15
#define MXS_PAD_PULL_MASK ((iomux_cfg_t)0x1 << MXS_PAD_PULL_SHIFT)
#define MXS_PAD_PULL_VALID_SHIFT 16
#define MXS_PAD_PULL_VALID_MASK ((iomux_cfg_t)0x1 << MXS_PAD_PULL_VALID_SHIFT)
#define PAD_MUXSEL_0 0
#define PAD_MUXSEL_1 1
#define PAD_MUXSEL_2 2
#define PAD_MUXSEL_GPIO 3
#define PAD_4MA 0
#define PAD_8MA 1
#define PAD_12MA 2
#define PAD_16MA 3
#define PAD_1V8 0
#define PAD_3V3 1
#define PAD_NOPULL 0
#define PAD_PULLUP 1
#define MXS_PAD_4MA ((PAD_4MA << MXS_PAD_MA_SHIFT) | \
MXS_PAD_MA_VALID_MASK)
#define MXS_PAD_8MA ((PAD_8MA << MXS_PAD_MA_SHIFT) | \
MXS_PAD_MA_VALID_MASK)
#define MXS_PAD_12MA ((PAD_12MA << MXS_PAD_MA_SHIFT) | \
MXS_PAD_MA_VALID_MASK)
#define MXS_PAD_16MA ((PAD_16MA << MXS_PAD_MA_SHIFT) | \
MXS_PAD_MA_VALID_MASK)
#define MXS_PAD_1V8 ((PAD_1V8 << MXS_PAD_VOL_SHIFT) | \
MXS_PAD_VOL_VALID_MASK)
#define MXS_PAD_3V3 ((PAD_3V3 << MXS_PAD_VOL_SHIFT) | \
MXS_PAD_VOL_VALID_MASK)
#define MXS_PAD_NOPULL ((PAD_NOPULL << MXS_PAD_PULL_SHIFT) | \
MXS_PAD_PULL_VALID_MASK)
#define MXS_PAD_PULLUP ((PAD_PULLUP << MXS_PAD_PULL_SHIFT) | \
MXS_PAD_PULL_VALID_MASK)
/* generic pad control used in most cases */
#define MXS_PAD_CTRL (MXS_PAD_4MA | MXS_PAD_3V3 | MXS_PAD_NOPULL)
#define MXS_IOMUX_PAD(_bank, _pin, _muxsel, _ma, _vol, _pull) \
(((iomux_cfg_t)(_bank) << MXS_PAD_BANK_SHIFT) | \
((iomux_cfg_t)(_pin) << MXS_PAD_PIN_SHIFT) | \
((iomux_cfg_t)(_muxsel) << MXS_PAD_MUXSEL_SHIFT) | \
((iomux_cfg_t)(_ma) << MXS_PAD_MA_SHIFT) | \
((iomux_cfg_t)(_vol) << MXS_PAD_VOL_SHIFT) | \
((iomux_cfg_t)(_pull) << MXS_PAD_PULL_SHIFT))
/*
* A pad becomes naked, when none of mA, vol or pull
* validity bits is set.
*/
#define MXS_IOMUX_PAD_NAKED(_bank, _pin, _muxsel) \
MXS_IOMUX_PAD(_bank, _pin, _muxsel, 0, 0, 0)
static
inline
unsigned
int
PAD_BANK
(
iomux_cfg_t
pad
)
{
return
(
pad
&
MXS_PAD_BANK_MASK
)
>>
MXS_PAD_BANK_SHIFT
;
}
static
inline
unsigned
int
PAD_PIN
(
iomux_cfg_t
pad
)
{
return
(
pad
&
MXS_PAD_PIN_MASK
)
>>
MXS_PAD_PIN_SHIFT
;
}
static
inline
unsigned
int
PAD_MUXSEL
(
iomux_cfg_t
pad
)
{
return
(
pad
&
MXS_PAD_MUXSEL_MASK
)
>>
MXS_PAD_MUXSEL_SHIFT
;
}
static
inline
unsigned
int
PAD_MA
(
iomux_cfg_t
pad
)
{
return
(
pad
&
MXS_PAD_MA_MASK
)
>>
MXS_PAD_MA_SHIFT
;
}
static
inline
unsigned
int
PAD_MA_VALID
(
iomux_cfg_t
pad
)
{
return
(
pad
&
MXS_PAD_MA_VALID_MASK
)
>>
MXS_PAD_MA_VALID_SHIFT
;
}
static
inline
unsigned
int
PAD_VOL
(
iomux_cfg_t
pad
)
{
return
(
pad
&
MXS_PAD_VOL_MASK
)
>>
MXS_PAD_VOL_SHIFT
;
}
static
inline
unsigned
int
PAD_VOL_VALID
(
iomux_cfg_t
pad
)
{
return
(
pad
&
MXS_PAD_VOL_VALID_MASK
)
>>
MXS_PAD_VOL_VALID_SHIFT
;
}
static
inline
unsigned
int
PAD_PULL
(
iomux_cfg_t
pad
)
{
return
(
pad
&
MXS_PAD_PULL_MASK
)
>>
MXS_PAD_PULL_SHIFT
;
}
static
inline
unsigned
int
PAD_PULL_VALID
(
iomux_cfg_t
pad
)
{
return
(
pad
&
MXS_PAD_PULL_VALID_MASK
)
>>
MXS_PAD_PULL_VALID_SHIFT
;
}
/*
* configures a single pad in the iomuxer
*/
int
mxs_iomux_setup_pad
(
iomux_cfg_t
pad
);
/*
* configures multiple pads
* convenient way to call the above function with tables
*/
int
mxs_iomux_setup_multiple_pads
(
const
iomux_cfg_t
*
pad_list
,
unsigned
count
);
#endif
/* __MACH_MXS_IOMUX_H__*/
arch/arm/mach-mxs/iomux.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright 2004-2006,2010 Freescale Semiconductor, Inc. All Rights Reserved.
* Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de>
* Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH,
* <armlinux@phytec.de>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/string.h>
#include <linux/gpio.h>
#include <asm/mach/map.h>
#include <mach/mxs.h>
#include <mach/iomux.h>
/*
* configures a single pad in the iomuxer
*/
int
mxs_iomux_setup_pad
(
iomux_cfg_t
pad
)
{
u32
reg
,
ofs
,
bp
,
bm
;
void
__iomem
*
iomux_base
=
MXS_IO_ADDRESS
(
MXS_PINCTRL_BASE_ADDR
);
/* muxsel */
ofs
=
0x100
;
ofs
+=
PAD_BANK
(
pad
)
*
0x20
+
PAD_PIN
(
pad
)
/
16
*
0x10
;
bp
=
PAD_PIN
(
pad
)
%
16
*
2
;
bm
=
0x3
<<
bp
;
reg
=
__raw_readl
(
iomux_base
+
ofs
);
reg
&=
~
bm
;
reg
|=
PAD_MUXSEL
(
pad
)
<<
bp
;
__raw_writel
(
reg
,
iomux_base
+
ofs
);
/* drive */
ofs
=
cpu_is_mx23
()
?
0x200
:
0x300
;
ofs
+=
PAD_BANK
(
pad
)
*
0x40
+
PAD_PIN
(
pad
)
/
8
*
0x10
;
/* mA */
if
(
PAD_MA_VALID
(
pad
))
{
bp
=
PAD_PIN
(
pad
)
%
8
*
4
;
bm
=
0x3
<<
bp
;
reg
=
__raw_readl
(
iomux_base
+
ofs
);
reg
&=
~
bm
;
reg
|=
PAD_MA
(
pad
)
<<
bp
;
__raw_writel
(
reg
,
iomux_base
+
ofs
);
}
/* vol */
if
(
PAD_VOL_VALID
(
pad
))
{
bp
=
PAD_PIN
(
pad
)
%
8
*
4
+
2
;
if
(
PAD_VOL
(
pad
))
__mxs_setl
(
1
<<
bp
,
iomux_base
+
ofs
);
else
__mxs_clrl
(
1
<<
bp
,
iomux_base
+
ofs
);
}
/* pull */
if
(
PAD_PULL_VALID
(
pad
))
{
ofs
=
cpu_is_mx23
()
?
0x400
:
0x600
;
ofs
+=
PAD_BANK
(
pad
)
*
0x10
;
bp
=
PAD_PIN
(
pad
);
if
(
PAD_PULL
(
pad
))
__mxs_setl
(
1
<<
bp
,
iomux_base
+
ofs
);
else
__mxs_clrl
(
1
<<
bp
,
iomux_base
+
ofs
);
}
return
0
;
}
int
mxs_iomux_setup_multiple_pads
(
const
iomux_cfg_t
*
pad_list
,
unsigned
count
)
{
const
iomux_cfg_t
*
p
=
pad_list
;
int
i
;
int
ret
;
for
(
i
=
0
;
i
<
count
;
i
++
)
{
ret
=
mxs_iomux_setup_pad
(
*
p
);
if
(
ret
)
return
ret
;
p
++
;
}
return
0
;
}
arch/arm/mach-mxs/mach-apx4devkit.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2011-2012
* Lauri Hintsala, Bluegiga, <lauri.hintsala@bluegiga.com>
* Veli-Pekka Peltola, Bluegiga, <veli-pekka.peltola@bluegiga.com>
*
* based on: mach-mx28evk.c
* Copyright 2010 Freescale Semiconductor, Inc. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/gpio.h>
#include <linux/leds.h>
#include <linux/clk.h>
#include <linux/i2c.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
#include <linux/micrel_phy.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include <mach/common.h>
#include <mach/digctl.h>
#include <mach/iomux-mx28.h>
#include "devices-mx28.h"
#define APX4DEVKIT_GPIO_USERLED MXS_GPIO_NR(3, 28)
static
const
iomux_cfg_t
apx4devkit_pads
[]
__initconst
=
{
/* duart */
MX28_PAD_PWM0__DUART_RX
|
MXS_PAD_CTRL
,
MX28_PAD_PWM1__DUART_TX
|
MXS_PAD_CTRL
,
/* auart0 */
MX28_PAD_AUART0_RX__AUART0_RX
|
MXS_PAD_CTRL
,
MX28_PAD_AUART0_TX__AUART0_TX
|
MXS_PAD_CTRL
,
MX28_PAD_AUART0_CTS__AUART0_CTS
|
MXS_PAD_CTRL
,
MX28_PAD_AUART0_RTS__AUART0_RTS
|
MXS_PAD_CTRL
,
/* auart1 */
MX28_PAD_AUART1_RX__AUART1_RX
|
MXS_PAD_CTRL
,
MX28_PAD_AUART1_TX__AUART1_TX
|
MXS_PAD_CTRL
,
/* auart2 */
MX28_PAD_SSP2_SCK__AUART2_RX
|
MXS_PAD_CTRL
,
MX28_PAD_SSP2_MOSI__AUART2_TX
|
MXS_PAD_CTRL
,
/* auart3 */
MX28_PAD_SSP2_MISO__AUART3_RX
|
MXS_PAD_CTRL
,
MX28_PAD_SSP2_SS0__AUART3_TX
|
MXS_PAD_CTRL
,
#define MXS_PAD_FEC (MXS_PAD_8MA | MXS_PAD_3V3 | MXS_PAD_PULLUP)
/* fec0 */
MX28_PAD_ENET0_MDC__ENET0_MDC
|
MXS_PAD_FEC
,
MX28_PAD_ENET0_MDIO__ENET0_MDIO
|
MXS_PAD_FEC
,
MX28_PAD_ENET0_RX_EN__ENET0_RX_EN
|
MXS_PAD_FEC
,
MX28_PAD_ENET0_RXD0__ENET0_RXD0
|
MXS_PAD_FEC
,
MX28_PAD_ENET0_RXD1__ENET0_RXD1
|
MXS_PAD_FEC
,
MX28_PAD_ENET0_TX_EN__ENET0_TX_EN
|
MXS_PAD_FEC
,
MX28_PAD_ENET0_TXD0__ENET0_TXD0
|
MXS_PAD_FEC
,
MX28_PAD_ENET0_TXD1__ENET0_TXD1
|
MXS_PAD_FEC
,
MX28_PAD_ENET_CLK__CLKCTRL_ENET
|
MXS_PAD_FEC
,
/* i2c */
MX28_PAD_I2C0_SCL__I2C0_SCL
,
MX28_PAD_I2C0_SDA__I2C0_SDA
,
/* mmc0 */
MX28_PAD_SSP0_DATA0__SSP0_D0
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DATA1__SSP0_D1
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DATA2__SSP0_D2
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DATA3__SSP0_D3
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DATA4__SSP0_D4
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DATA5__SSP0_D5
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DATA6__SSP0_D6
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DATA7__SSP0_D7
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_CMD__SSP0_CMD
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_NOPULL
),
MX28_PAD_SSP0_SCK__SSP0_SCK
|
(
MXS_PAD_12MA
|
MXS_PAD_3V3
|
MXS_PAD_NOPULL
),
/* led */
MX28_PAD_PWM3__GPIO_3_28
|
MXS_PAD_CTRL
,
/* saif0 & saif1 */
MX28_PAD_SAIF0_MCLK__SAIF0_MCLK
|
(
MXS_PAD_12MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SAIF0_LRCLK__SAIF0_LRCLK
|
(
MXS_PAD_12MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SAIF0_BITCLK__SAIF0_BITCLK
|
(
MXS_PAD_12MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SAIF0_SDATA0__SAIF0_SDATA0
|
(
MXS_PAD_12MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SAIF1_SDATA0__SAIF1_SDATA0
|
(
MXS_PAD_12MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
};
/* led */
static
const
struct
gpio_led
apx4devkit_leds
[]
__initconst
=
{
{
.
name
=
"user-led"
,
.
default_trigger
=
"heartbeat"
,
.
gpio
=
APX4DEVKIT_GPIO_USERLED
,
},
};
static
const
struct
gpio_led_platform_data
apx4devkit_led_data
__initconst
=
{
.
leds
=
apx4devkit_leds
,
.
num_leds
=
ARRAY_SIZE
(
apx4devkit_leds
),
};
static
const
struct
fec_platform_data
mx28_fec_pdata
__initconst
=
{
.
phy
=
PHY_INTERFACE_MODE_RMII
,
};
static
const
struct
mxs_mmc_platform_data
apx4devkit_mmc_pdata
__initconst
=
{
.
wp_gpio
=
-
EINVAL
,
.
flags
=
SLOTF_4_BIT_CAPABLE
,
};
static
const
struct
i2c_board_info
apx4devkit_i2c_boardinfo
[]
__initconst
=
{
{
I2C_BOARD_INFO
(
"sgtl5000"
,
0x0a
)
},
/* ASoC */
{
I2C_BOARD_INFO
(
"pcf8563"
,
0x51
)
},
/* RTC */
};
#if defined(CONFIG_REGULATOR_FIXED_VOLTAGE) || \
defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE)
static
struct
regulator_consumer_supply
apx4devkit_audio_consumer_supplies
[]
=
{
REGULATOR_SUPPLY
(
"VDDA"
,
"0-000a"
),
REGULATOR_SUPPLY
(
"VDDIO"
,
"0-000a"
),
};
static
struct
regulator_init_data
apx4devkit_vdd_reg_init_data
=
{
.
constraints
=
{
.
name
=
"3V3"
,
.
always_on
=
1
,
},
.
consumer_supplies
=
apx4devkit_audio_consumer_supplies
,
.
num_consumer_supplies
=
ARRAY_SIZE
(
apx4devkit_audio_consumer_supplies
),
};
static
struct
fixed_voltage_config
apx4devkit_vdd_pdata
=
{
.
supply_name
=
"board-3V3"
,
.
microvolts
=
3300000
,
.
gpio
=
-
EINVAL
,
.
enabled_at_boot
=
1
,
.
init_data
=
&
apx4devkit_vdd_reg_init_data
,
};
static
struct
platform_device
apx4devkit_voltage_regulator
=
{
.
name
=
"reg-fixed-voltage"
,
.
id
=
-
1
,
.
num_resources
=
0
,
.
dev
=
{
.
platform_data
=
&
apx4devkit_vdd_pdata
,
},
};
static
void
__init
apx4devkit_add_regulators
(
void
)
{
platform_device_register
(
&
apx4devkit_voltage_regulator
);
}
#else
static
void
__init
apx4devkit_add_regulators
(
void
)
{}
#endif
static
const
struct
mxs_saif_platform_data
apx4devkit_mxs_saif_pdata
[]
__initconst
=
{
/* working on EXTMSTR0 mode (saif0 master, saif1 slave) */
{
.
master_mode
=
1
,
.
master_id
=
0
,
},
{
.
master_mode
=
0
,
.
master_id
=
0
,
},
};
static
int
apx4devkit_phy_fixup
(
struct
phy_device
*
phy
)
{
phy
->
dev_flags
|=
MICREL_PHY_50MHZ_CLK
;
return
0
;
}
static
void
__init
apx4devkit_fec_phy_clk_enable
(
void
)
{
struct
clk
*
clk
;
/* Enable fec phy clock */
clk
=
clk_get_sys
(
"enet_out"
,
NULL
);
if
(
!
IS_ERR
(
clk
))
clk_prepare_enable
(
clk
);
}
static
void
__init
apx4devkit_init
(
void
)
{
mx28_soc_init
();
mxs_iomux_setup_multiple_pads
(
apx4devkit_pads
,
ARRAY_SIZE
(
apx4devkit_pads
));
mx28_add_duart
();
mx28_add_auart0
();
mx28_add_auart1
();
mx28_add_auart2
();
mx28_add_auart3
();
/*
* Register fixup for the Micrel KS8031 PHY clock
* (shares same ID with KS8051)
*/
phy_register_fixup_for_uid
(
PHY_ID_KS8051
,
MICREL_PHY_ID_MASK
,
apx4devkit_phy_fixup
);
apx4devkit_fec_phy_clk_enable
();
mx28_add_fec
(
0
,
&
mx28_fec_pdata
);
mx28_add_mxs_mmc
(
0
,
&
apx4devkit_mmc_pdata
);
gpio_led_register_device
(
0
,
&
apx4devkit_led_data
);
mxs_saif_clkmux_select
(
MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0
);
mx28_add_saif
(
0
,
&
apx4devkit_mxs_saif_pdata
[
0
]);
mx28_add_saif
(
1
,
&
apx4devkit_mxs_saif_pdata
[
1
]);
apx4devkit_add_regulators
();
mx28_add_mxs_i2c
(
0
);
i2c_register_board_info
(
0
,
apx4devkit_i2c_boardinfo
,
ARRAY_SIZE
(
apx4devkit_i2c_boardinfo
));
mxs_add_platform_device
(
"mxs-sgtl5000"
,
0
,
NULL
,
0
,
NULL
,
0
);
}
static
void
__init
apx4devkit_timer_init
(
void
)
{
mx28_clocks_init
();
}
static
struct
sys_timer
apx4devkit_timer
=
{
.
init
=
apx4devkit_timer_init
,
};
MACHINE_START
(
APX4DEVKIT
,
"Bluegiga APX4 Development Kit"
)
.
map_io
=
mx28_map_io
,
.
init_irq
=
mx28_init_irq
,
.
timer
=
&
apx4devkit_timer
,
.
init_machine
=
apx4devkit_init
,
.
restart
=
mxs_restart
,
MACHINE_END
arch/arm/mach-mxs/mach-m28evk.c
deleted
100644 → 0
View file @
4cbe5a55
This diff is collapsed.
Click to expand it.
arch/arm/mach-mxs/mach-mx23evk.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright 2010 Freescale Semiconductor, Inc. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/gpio.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include <mach/common.h>
#include <mach/iomux-mx23.h>
#include "devices-mx23.h"
#define MX23EVK_LCD_ENABLE MXS_GPIO_NR(1, 18)
#define MX23EVK_BL_ENABLE MXS_GPIO_NR(1, 28)
#define MX23EVK_MMC0_WRITE_PROTECT MXS_GPIO_NR(1, 30)
#define MX23EVK_MMC0_SLOT_POWER MXS_GPIO_NR(1, 29)
static
const
iomux_cfg_t
mx23evk_pads
[]
__initconst
=
{
/* duart */
MX23_PAD_PWM0__DUART_RX
|
MXS_PAD_CTRL
,
MX23_PAD_PWM1__DUART_TX
|
MXS_PAD_CTRL
,
/* auart */
MX23_PAD_AUART1_RX__AUART1_RX
|
MXS_PAD_CTRL
,
MX23_PAD_AUART1_TX__AUART1_TX
|
MXS_PAD_CTRL
,
MX23_PAD_AUART1_CTS__AUART1_CTS
|
MXS_PAD_CTRL
,
MX23_PAD_AUART1_RTS__AUART1_RTS
|
MXS_PAD_CTRL
,
/* mxsfb (lcdif) */
MX23_PAD_LCD_D00__LCD_D00
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D01__LCD_D01
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D02__LCD_D02
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D03__LCD_D03
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D04__LCD_D04
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D05__LCD_D05
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D06__LCD_D06
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D07__LCD_D07
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D08__LCD_D08
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D09__LCD_D09
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D10__LCD_D10
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D11__LCD_D11
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D12__LCD_D12
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D13__LCD_D13
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D14__LCD_D14
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D15__LCD_D15
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D16__LCD_D16
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_D17__LCD_D17
|
MXS_PAD_CTRL
,
MX23_PAD_GPMI_D08__LCD_D18
|
MXS_PAD_CTRL
,
MX23_PAD_GPMI_D09__LCD_D19
|
MXS_PAD_CTRL
,
MX23_PAD_GPMI_D10__LCD_D20
|
MXS_PAD_CTRL
,
MX23_PAD_GPMI_D11__LCD_D21
|
MXS_PAD_CTRL
,
MX23_PAD_GPMI_D12__LCD_D22
|
MXS_PAD_CTRL
,
MX23_PAD_GPMI_D13__LCD_D23
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_VSYNC__LCD_VSYNC
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_HSYNC__LCD_HSYNC
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_DOTCK__LCD_DOTCK
|
MXS_PAD_CTRL
,
MX23_PAD_LCD_ENABLE__LCD_ENABLE
|
MXS_PAD_CTRL
,
/* LCD panel enable */
MX23_PAD_LCD_RESET__GPIO_1_18
|
MXS_PAD_CTRL
,
/* backlight control */
MX23_PAD_PWM2__GPIO_1_28
|
MXS_PAD_CTRL
,
/* mmc */
MX23_PAD_SSP1_DATA0__SSP1_DATA0
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_SSP1_DATA1__SSP1_DATA1
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_SSP1_DATA2__SSP1_DATA2
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_SSP1_DATA3__SSP1_DATA3
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_GPMI_D08__SSP1_DATA4
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_GPMI_D09__SSP1_DATA5
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_GPMI_D10__SSP1_DATA6
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_GPMI_D11__SSP1_DATA7
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_SSP1_CMD__SSP1_CMD
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_SSP1_DETECT__SSP1_DETECT
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_NOPULL
),
MX23_PAD_SSP1_SCK__SSP1_SCK
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_NOPULL
),
/* write protect */
MX23_PAD_PWM4__GPIO_1_30
|
(
MXS_PAD_4MA
|
MXS_PAD_3V3
|
MXS_PAD_NOPULL
),
/* slot power enable */
MX23_PAD_PWM3__GPIO_1_29
|
(
MXS_PAD_4MA
|
MXS_PAD_3V3
|
MXS_PAD_NOPULL
),
};
/* mxsfb (lcdif) */
static
struct
fb_videomode
mx23evk_video_modes
[]
=
{
{
.
name
=
"Samsung-LMS430HF02"
,
.
refresh
=
60
,
.
xres
=
480
,
.
yres
=
272
,
.
pixclock
=
108096
,
/* picosecond (9.2 MHz) */
.
left_margin
=
15
,
.
right_margin
=
8
,
.
upper_margin
=
12
,
.
lower_margin
=
4
,
.
hsync_len
=
1
,
.
vsync_len
=
1
,
.
sync
=
FB_SYNC_DATA_ENABLE_HIGH_ACT
|
FB_SYNC_DOTCLK_FAILING_ACT
,
},
};
static
const
struct
mxsfb_platform_data
mx23evk_mxsfb_pdata
__initconst
=
{
.
mode_list
=
mx23evk_video_modes
,
.
mode_count
=
ARRAY_SIZE
(
mx23evk_video_modes
),
.
default_bpp
=
32
,
.
ld_intf_width
=
STMLCDIF_24BIT
,
};
static
struct
mxs_mmc_platform_data
mx23evk_mmc_pdata
__initdata
=
{
.
wp_gpio
=
MX23EVK_MMC0_WRITE_PROTECT
,
.
flags
=
SLOTF_8_BIT_CAPABLE
,
};
static
void
__init
mx23evk_init
(
void
)
{
int
ret
;
mx23_soc_init
();
mxs_iomux_setup_multiple_pads
(
mx23evk_pads
,
ARRAY_SIZE
(
mx23evk_pads
));
mx23_add_duart
();
mx23_add_auart0
();
/* power on mmc slot by writing 0 to the gpio */
ret
=
gpio_request_one
(
MX23EVK_MMC0_SLOT_POWER
,
GPIOF_OUT_INIT_LOW
,
"mmc0-slot-power"
);
if
(
ret
)
pr_warn
(
"failed to request gpio mmc0-slot-power: %d
\n
"
,
ret
);
mx23_add_mxs_mmc
(
0
,
&
mx23evk_mmc_pdata
);
ret
=
gpio_request_one
(
MX23EVK_LCD_ENABLE
,
GPIOF_DIR_OUT
,
"lcd-enable"
);
if
(
ret
)
pr_warn
(
"failed to request gpio lcd-enable: %d
\n
"
,
ret
);
else
gpio_set_value
(
MX23EVK_LCD_ENABLE
,
1
);
ret
=
gpio_request_one
(
MX23EVK_BL_ENABLE
,
GPIOF_DIR_OUT
,
"bl-enable"
);
if
(
ret
)
pr_warn
(
"failed to request gpio bl-enable: %d
\n
"
,
ret
);
else
gpio_set_value
(
MX23EVK_BL_ENABLE
,
1
);
mx23_add_mxsfb
(
&
mx23evk_mxsfb_pdata
);
mx23_add_rtc_stmp3xxx
();
}
static
void
__init
mx23evk_timer_init
(
void
)
{
mx23_clocks_init
();
}
static
struct
sys_timer
mx23evk_timer
=
{
.
init
=
mx23evk_timer_init
,
};
MACHINE_START
(
MX23EVK
,
"Freescale MX23 EVK"
)
/* Maintainer: Freescale Semiconductor, Inc. */
.
map_io
=
mx23_map_io
,
.
init_irq
=
mx23_init_irq
,
.
timer
=
&
mx23evk_timer
,
.
init_machine
=
mx23evk_init
,
.
restart
=
mxs_restart
,
MACHINE_END
arch/arm/mach-mxs/mach-mx28evk.c
deleted
100644 → 0
View file @
4cbe5a55
This diff is collapsed.
Click to expand it.
arch/arm/mach-mxs/mach-mxs.c
View file @
9adaef9c
...
...
@@ -12,8 +12,10 @@
#include <linux/clk.h>
#include <linux/clkdev.h>
#include <linux/can/platform/flexcan.h>
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/
init
.h>
#include <linux/
gpio
.h>
#include <linux/init.h>
#include <linux/irqdomain.h>
#include <linux/micrel_phy.h>
...
...
@@ -21,9 +23,12 @@
#include <linux/of_irq.h>
#include <linux/of_platform.h>
#include <linux/phy.h>
#include <linux/pinctrl/consumer.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include <mach/common.h>
#include <mach/digctl.h>
#include <mach/mxs.h>
static
struct
fb_videomode
mx23evk_video_modes
[]
=
{
{
...
...
@@ -99,9 +104,40 @@ static struct fb_videomode apx4devkit_video_modes[] = {
static
struct
mxsfb_platform_data
mxsfb_pdata
__initdata
;
/*
* MX28EVK_FLEXCAN_SWITCH is shared between both flexcan controllers
*/
#define MX28EVK_FLEXCAN_SWITCH MXS_GPIO_NR(2, 13)
static
int
flexcan0_en
,
flexcan1_en
;
static
void
mx28evk_flexcan_switch
(
void
)
{
if
(
flexcan0_en
||
flexcan1_en
)
gpio_set_value
(
MX28EVK_FLEXCAN_SWITCH
,
1
);
else
gpio_set_value
(
MX28EVK_FLEXCAN_SWITCH
,
0
);
}
static
void
mx28evk_flexcan0_switch
(
int
enable
)
{
flexcan0_en
=
enable
;
mx28evk_flexcan_switch
();
}
static
void
mx28evk_flexcan1_switch
(
int
enable
)
{
flexcan1_en
=
enable
;
mx28evk_flexcan_switch
();
}
static
struct
flexcan_platform_data
flexcan_pdata
[
2
];
static
struct
of_dev_auxdata
mxs_auxdata_lookup
[]
__initdata
=
{
OF_DEV_AUXDATA
(
"fsl,imx23-lcdif"
,
0x80030000
,
NULL
,
&
mxsfb_pdata
),
OF_DEV_AUXDATA
(
"fsl,imx28-lcdif"
,
0x80030000
,
NULL
,
&
mxsfb_pdata
),
OF_DEV_AUXDATA
(
"fsl,imx28-flexcan"
,
0x80032000
,
NULL
,
&
flexcan_pdata
[
0
]),
OF_DEV_AUXDATA
(
"fsl,imx28-flexcan"
,
0x80034000
,
NULL
,
&
flexcan_pdata
[
1
]),
{
/* sentinel */
}
};
...
...
@@ -237,11 +273,21 @@ static void __init imx28_evk_init(void)
mxsfb_pdata
.
mode_count
=
ARRAY_SIZE
(
mx28evk_video_modes
);
mxsfb_pdata
.
default_bpp
=
32
;
mxsfb_pdata
.
ld_intf_width
=
STMLCDIF_24BIT
;
mxs_saif_clkmux_select
(
MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0
);
}
static
void
__init
imx28_evk_post_init
(
void
)
{
if
(
!
gpio_request_one
(
MX28EVK_FLEXCAN_SWITCH
,
GPIOF_DIR_OUT
,
"flexcan-switch"
))
{
flexcan_pdata
[
0
].
transceiver_switch
=
mx28evk_flexcan0_switch
;
flexcan_pdata
[
1
].
transceiver_switch
=
mx28evk_flexcan1_switch
;
}
}
static
void
__init
m28evk_init
(
void
)
{
enable_clk_enet_out
();
update_fec_mac_prop
(
OUI_DENX
);
mxsfb_pdata
.
mode_list
=
m28evk_video_modes
;
...
...
@@ -270,6 +316,80 @@ static void __init apx4devkit_init(void)
mxsfb_pdata
.
ld_intf_width
=
STMLCDIF_24BIT
;
}
#define ENET0_MDC__GPIO_4_0 MXS_GPIO_NR(4, 0)
#define ENET0_MDIO__GPIO_4_1 MXS_GPIO_NR(4, 1)
#define ENET0_RX_EN__GPIO_4_2 MXS_GPIO_NR(4, 2)
#define ENET0_RXD0__GPIO_4_3 MXS_GPIO_NR(4, 3)
#define ENET0_RXD1__GPIO_4_4 MXS_GPIO_NR(4, 4)
#define ENET0_TX_EN__GPIO_4_6 MXS_GPIO_NR(4, 6)
#define ENET0_TXD0__GPIO_4_7 MXS_GPIO_NR(4, 7)
#define ENET0_TXD1__GPIO_4_8 MXS_GPIO_NR(4, 8)
#define ENET_CLK__GPIO_4_16 MXS_GPIO_NR(4, 16)
#define TX28_FEC_PHY_POWER MXS_GPIO_NR(3, 29)
#define TX28_FEC_PHY_RESET MXS_GPIO_NR(4, 13)
#define TX28_FEC_nINT MXS_GPIO_NR(4, 5)
static
const
struct
gpio
tx28_gpios
[]
__initconst
=
{
{
ENET0_MDC__GPIO_4_0
,
GPIOF_OUT_INIT_LOW
,
"GPIO_4_0"
},
{
ENET0_MDIO__GPIO_4_1
,
GPIOF_OUT_INIT_LOW
,
"GPIO_4_1"
},
{
ENET0_RX_EN__GPIO_4_2
,
GPIOF_OUT_INIT_LOW
,
"GPIO_4_2"
},
{
ENET0_RXD0__GPIO_4_3
,
GPIOF_OUT_INIT_LOW
,
"GPIO_4_3"
},
{
ENET0_RXD1__GPIO_4_4
,
GPIOF_OUT_INIT_LOW
,
"GPIO_4_4"
},
{
ENET0_TX_EN__GPIO_4_6
,
GPIOF_OUT_INIT_LOW
,
"GPIO_4_6"
},
{
ENET0_TXD0__GPIO_4_7
,
GPIOF_OUT_INIT_LOW
,
"GPIO_4_7"
},
{
ENET0_TXD1__GPIO_4_8
,
GPIOF_OUT_INIT_LOW
,
"GPIO_4_8"
},
{
ENET_CLK__GPIO_4_16
,
GPIOF_OUT_INIT_LOW
,
"GPIO_4_16"
},
{
TX28_FEC_PHY_POWER
,
GPIOF_OUT_INIT_LOW
,
"fec-phy-power"
},
{
TX28_FEC_PHY_RESET
,
GPIOF_OUT_INIT_LOW
,
"fec-phy-reset"
},
{
TX28_FEC_nINT
,
GPIOF_DIR_IN
,
"fec-int"
},
};
static
void
__init
tx28_post_init
(
void
)
{
struct
device_node
*
np
;
struct
platform_device
*
pdev
;
struct
pinctrl
*
pctl
;
int
ret
;
enable_clk_enet_out
();
np
=
of_find_compatible_node
(
NULL
,
NULL
,
"fsl,imx28-fec"
);
pdev
=
of_find_device_by_node
(
np
);
if
(
!
pdev
)
{
pr_err
(
"%s: failed to find fec device
\n
"
,
__func__
);
return
;
}
pctl
=
pinctrl_get_select
(
&
pdev
->
dev
,
"gpio_mode"
);
if
(
IS_ERR
(
pctl
))
{
pr_err
(
"%s: failed to get pinctrl state
\n
"
,
__func__
);
return
;
}
ret
=
gpio_request_array
(
tx28_gpios
,
ARRAY_SIZE
(
tx28_gpios
));
if
(
ret
)
{
pr_err
(
"%s: failed to request gpios: %d
\n
"
,
__func__
,
ret
);
return
;
}
/* Power up fec phy */
gpio_set_value
(
TX28_FEC_PHY_POWER
,
1
);
msleep
(
26
);
/* 25ms according to data sheet */
/* Mode strap pins */
gpio_set_value
(
ENET0_RX_EN__GPIO_4_2
,
1
);
gpio_set_value
(
ENET0_RXD0__GPIO_4_3
,
1
);
gpio_set_value
(
ENET0_RXD1__GPIO_4_4
,
1
);
udelay
(
100
);
/* minimum assertion time for nRST */
/* Deasserting FEC PHY RESET */
gpio_set_value
(
TX28_FEC_PHY_RESET
,
1
);
pinctrl_put
(
pctl
);
}
static
void
__init
mxs_machine_init
(
void
)
{
if
(
of_machine_is_compatible
(
"fsl,imx28-evk"
))
...
...
@@ -283,22 +403,20 @@ static void __init mxs_machine_init(void)
of_platform_populate
(
NULL
,
of_default_bus_match_table
,
mxs_auxdata_lookup
,
NULL
);
if
(
of_machine_is_compatible
(
"karo,tx28"
))
tx28_post_init
();
if
(
of_machine_is_compatible
(
"fsl,imx28-evk"
))
imx28_evk_post_init
();
}
static
const
char
*
imx23_dt_compat
[]
__initdata
=
{
"fsl,imx23-evk"
,
"fsl,stmp378x_devb"
"olimex,imx23-olinuxino"
,
"fsl,imx23"
,
NULL
,
};
static
const
char
*
imx28_dt_compat
[]
__initdata
=
{
"bluegiga,apx4devkit"
,
"crystalfontz,cfa10036"
,
"denx,m28evk"
,
"fsl,imx28-evk"
,
"karo,tx28"
,
"fsl,imx28"
,
NULL
,
};
...
...
arch/arm/mach-mxs/mach-stmp378x_devb.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* board setup for STMP378x-Development-Board
*
* based on mx23evk board setup and information gained form the original
* plat-stmp based board setup, now converted to mach-mxs.
*
* Copyright 2010 Freescale Semiconductor, Inc. All Rights Reserved.
* Copyright (C) 2011 Wolfram Sang, Pengutronix e.K.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/platform_device.h>
#include <linux/gpio.h>
#include <linux/spi/spi.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include <mach/common.h>
#include <mach/iomux-mx23.h>
#include "devices-mx23.h"
#define STMP378X_DEVB_MMC0_WRITE_PROTECT MXS_GPIO_NR(1, 30)
#define STMP378X_DEVB_MMC0_SLOT_POWER MXS_GPIO_NR(1, 29)
#define STMP378X_DEVB_PAD_AUART (MXS_PAD_4MA | MXS_PAD_1V8 | MXS_PAD_NOPULL)
static
const
iomux_cfg_t
stmp378x_dvb_pads
[]
__initconst
=
{
/* duart (extended setup missing in old boardcode, too */
MX23_PAD_PWM0__DUART_RX
,
MX23_PAD_PWM1__DUART_TX
,
/* auart */
MX23_PAD_AUART1_RX__AUART1_RX
|
STMP378X_DEVB_PAD_AUART
,
MX23_PAD_AUART1_TX__AUART1_TX
|
STMP378X_DEVB_PAD_AUART
,
MX23_PAD_AUART1_CTS__AUART1_CTS
|
STMP378X_DEVB_PAD_AUART
,
MX23_PAD_AUART1_RTS__AUART1_RTS
|
STMP378X_DEVB_PAD_AUART
,
/* mmc */
MX23_PAD_SSP1_DATA0__SSP1_DATA0
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_SSP1_DATA1__SSP1_DATA1
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_SSP1_DATA2__SSP1_DATA2
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_SSP1_DATA3__SSP1_DATA3
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_SSP1_CMD__SSP1_CMD
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX23_PAD_SSP1_DETECT__SSP1_DETECT
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_NOPULL
),
MX23_PAD_SSP1_SCK__SSP1_SCK
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_NOPULL
),
MX23_PAD_PWM4__GPIO_1_30
|
MXS_PAD_CTRL
,
/* write protect */
MX23_PAD_PWM3__GPIO_1_29
|
MXS_PAD_CTRL
,
/* power enable */
};
static
struct
mxs_mmc_platform_data
stmp378x_dvb_mmc_pdata
__initdata
=
{
.
wp_gpio
=
STMP378X_DEVB_MMC0_WRITE_PROTECT
,
};
static
struct
spi_board_info
spi_board_info
[]
__initdata
=
{
#if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE)
{
.
modalias
=
"enc28j60"
,
.
max_speed_hz
=
6
*
1000
*
1000
,
.
bus_num
=
1
,
.
chip_select
=
0
,
.
platform_data
=
NULL
,
},
#endif
};
static
void
__init
stmp378x_dvb_init
(
void
)
{
int
ret
;
mx23_soc_init
();
mxs_iomux_setup_multiple_pads
(
stmp378x_dvb_pads
,
ARRAY_SIZE
(
stmp378x_dvb_pads
));
mx23_add_duart
();
mx23_add_auart0
();
mx23_add_rtc_stmp3xxx
();
/* power on mmc slot */
ret
=
gpio_request_one
(
STMP378X_DEVB_MMC0_SLOT_POWER
,
GPIOF_OUT_INIT_LOW
,
"mmc0-slot-power"
);
if
(
ret
)
pr_warn
(
"could not power mmc (%d)
\n
"
,
ret
);
mx23_add_mxs_mmc
(
0
,
&
stmp378x_dvb_mmc_pdata
);
spi_register_board_info
(
spi_board_info
,
ARRAY_SIZE
(
spi_board_info
));
}
static
void
__init
stmp378x_dvb_timer_init
(
void
)
{
mx23_clocks_init
();
}
static
struct
sys_timer
stmp378x_dvb_timer
=
{
.
init
=
stmp378x_dvb_timer_init
,
};
MACHINE_START
(
STMP378X
,
"STMP378X"
)
.
map_io
=
mx23_map_io
,
.
init_irq
=
mx23_init_irq
,
.
timer
=
&
stmp378x_dvb_timer
,
.
init_machine
=
stmp378x_dvb_init
,
.
restart
=
mxs_restart
,
MACHINE_END
arch/arm/mach-mxs/mach-tx28.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2010 <LW@KARO-electronics.de>
*
* based on: mach-mx28_evk.c
* Copyright 2010 Freescale Semiconductor, Inc. All Rights Reserved.
*
* 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/kernel.h>
#include <linux/gpio.h>
#include <linux/leds.h>
#include <linux/platform_device.h>
#include <linux/spi/spi.h>
#include <linux/spi/spi_gpio.h>
#include <linux/i2c.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include <mach/common.h>
#include <mach/iomux-mx28.h>
#include "devices-mx28.h"
#include "module-tx28.h"
#define TX28_STK5_GPIO_LED MXS_GPIO_NR(4, 10)
static
const
iomux_cfg_t
tx28_stk5v3_pads
[]
__initconst
=
{
/* LED */
MX28_PAD_ENET0_RXD3__GPIO_4_10
|
MXS_PAD_3V3
|
MXS_PAD_4MA
|
MXS_PAD_NOPULL
,
/* framebuffer */
#define LCD_MODE (MXS_PAD_3V3 | MXS_PAD_4MA)
MX28_PAD_LCD_D00__LCD_D0
|
LCD_MODE
,
MX28_PAD_LCD_D01__LCD_D1
|
LCD_MODE
,
MX28_PAD_LCD_D02__LCD_D2
|
LCD_MODE
,
MX28_PAD_LCD_D03__LCD_D3
|
LCD_MODE
,
MX28_PAD_LCD_D04__LCD_D4
|
LCD_MODE
,
MX28_PAD_LCD_D05__LCD_D5
|
LCD_MODE
,
MX28_PAD_LCD_D06__LCD_D6
|
LCD_MODE
,
MX28_PAD_LCD_D07__LCD_D7
|
LCD_MODE
,
MX28_PAD_LCD_D08__LCD_D8
|
LCD_MODE
,
MX28_PAD_LCD_D09__LCD_D9
|
LCD_MODE
,
MX28_PAD_LCD_D10__LCD_D10
|
LCD_MODE
,
MX28_PAD_LCD_D11__LCD_D11
|
LCD_MODE
,
MX28_PAD_LCD_D12__LCD_D12
|
LCD_MODE
,
MX28_PAD_LCD_D13__LCD_D13
|
LCD_MODE
,
MX28_PAD_LCD_D14__LCD_D14
|
LCD_MODE
,
MX28_PAD_LCD_D15__LCD_D15
|
LCD_MODE
,
MX28_PAD_LCD_D16__LCD_D16
|
LCD_MODE
,
MX28_PAD_LCD_D17__LCD_D17
|
LCD_MODE
,
MX28_PAD_LCD_D18__LCD_D18
|
LCD_MODE
,
MX28_PAD_LCD_D19__LCD_D19
|
LCD_MODE
,
MX28_PAD_LCD_D20__LCD_D20
|
LCD_MODE
,
MX28_PAD_LCD_D21__LCD_D21
|
LCD_MODE
,
MX28_PAD_LCD_D22__LCD_D22
|
LCD_MODE
,
MX28_PAD_LCD_D23__LCD_D23
|
LCD_MODE
,
MX28_PAD_LCD_RD_E__LCD_VSYNC
|
LCD_MODE
,
MX28_PAD_LCD_WR_RWN__LCD_HSYNC
|
LCD_MODE
,
MX28_PAD_LCD_RS__LCD_DOTCLK
|
LCD_MODE
,
MX28_PAD_LCD_CS__LCD_CS
|
LCD_MODE
,
MX28_PAD_LCD_VSYNC__LCD_VSYNC
|
LCD_MODE
,
MX28_PAD_LCD_HSYNC__LCD_HSYNC
|
LCD_MODE
,
MX28_PAD_LCD_DOTCLK__LCD_DOTCLK
|
LCD_MODE
,
MX28_PAD_LCD_ENABLE__GPIO_1_31
|
LCD_MODE
,
MX28_PAD_LCD_RESET__GPIO_3_30
|
LCD_MODE
,
MX28_PAD_PWM0__PWM_0
|
LCD_MODE
,
/* UART1 */
MX28_PAD_AUART0_CTS__DUART_RX
,
MX28_PAD_AUART0_RTS__DUART_TX
,
MX28_PAD_AUART0_TX__DUART_RTS
,
MX28_PAD_AUART0_RX__DUART_CTS
,
/* UART2 */
MX28_PAD_AUART1_RX__AUART1_RX
,
MX28_PAD_AUART1_TX__AUART1_TX
,
MX28_PAD_AUART1_RTS__AUART1_RTS
,
MX28_PAD_AUART1_CTS__AUART1_CTS
,
/* CAN */
MX28_PAD_GPMI_RDY2__CAN0_TX
,
MX28_PAD_GPMI_RDY3__CAN0_RX
,
/* I2C */
MX28_PAD_I2C0_SCL__I2C0_SCL
,
MX28_PAD_I2C0_SDA__I2C0_SDA
,
/* TSC2007 */
MX28_PAD_SAIF0_MCLK__GPIO_3_20
|
MXS_PAD_3V3
|
MXS_PAD_4MA
|
MXS_PAD_PULLUP
,
/* MMC0 */
MX28_PAD_SSP0_DATA0__SSP0_D0
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DATA1__SSP0_D1
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DATA2__SSP0_D2
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DATA3__SSP0_D3
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_CMD__SSP0_CMD
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_PULLUP
),
MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT
|
(
MXS_PAD_8MA
|
MXS_PAD_3V3
|
MXS_PAD_NOPULL
),
MX28_PAD_SSP0_SCK__SSP0_SCK
|
(
MXS_PAD_12MA
|
MXS_PAD_3V3
|
MXS_PAD_NOPULL
),
};
static
const
struct
gpio_led
tx28_stk5v3_leds
[]
__initconst
=
{
{
.
name
=
"GPIO-LED"
,
.
default_trigger
=
"heartbeat"
,
.
gpio
=
TX28_STK5_GPIO_LED
,
},
};
static
const
struct
gpio_led_platform_data
tx28_stk5v3_led_data
__initconst
=
{
.
leds
=
tx28_stk5v3_leds
,
.
num_leds
=
ARRAY_SIZE
(
tx28_stk5v3_leds
),
};
static
struct
spi_board_info
tx28_spi_board_info
[]
=
{
{
.
modalias
=
"spidev"
,
.
max_speed_hz
=
20000000
,
.
bus_num
=
0
,
.
chip_select
=
1
,
.
controller_data
=
(
void
*
)
SPI_GPIO_NO_CHIPSELECT
,
.
mode
=
SPI_MODE_0
,
},
};
static
struct
i2c_board_info
tx28_stk5v3_i2c_boardinfo
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"ds1339"
,
0x68
),
},
};
static
struct
mxs_mmc_platform_data
tx28_mmc0_pdata
__initdata
=
{
.
wp_gpio
=
-
EINVAL
,
.
flags
=
SLOTF_4_BIT_CAPABLE
,
};
static
void
__init
tx28_stk5v3_init
(
void
)
{
mx28_soc_init
();
mxs_iomux_setup_multiple_pads
(
tx28_stk5v3_pads
,
ARRAY_SIZE
(
tx28_stk5v3_pads
));
mx28_add_duart
();
/* UART1 */
mx28_add_auart
(
1
);
/* UART2 */
tx28_add_fec0
();
/* spi via ssp will be added when available */
spi_register_board_info
(
tx28_spi_board_info
,
ARRAY_SIZE
(
tx28_spi_board_info
));
gpio_led_register_device
(
0
,
&
tx28_stk5v3_led_data
);
mx28_add_mxs_i2c
(
0
);
i2c_register_board_info
(
0
,
tx28_stk5v3_i2c_boardinfo
,
ARRAY_SIZE
(
tx28_stk5v3_i2c_boardinfo
));
mx28_add_mxs_mmc
(
0
,
&
tx28_mmc0_pdata
);
mx28_add_rtc_stmp3xxx
();
}
static
void
__init
tx28_timer_init
(
void
)
{
mx28_clocks_init
();
}
static
struct
sys_timer
tx28_timer
=
{
.
init
=
tx28_timer_init
,
};
MACHINE_START
(
TX28
,
"Ka-Ro electronics TX28 module"
)
.
map_io
=
mx28_map_io
,
.
init_irq
=
mx28_init_irq
,
.
timer
=
&
tx28_timer
,
.
init_machine
=
tx28_stk5v3_init
,
.
restart
=
mxs_restart
,
MACHINE_END
arch/arm/mach-mxs/mm.c
View file @
9adaef9c
...
...
@@ -13,14 +13,11 @@
#include <linux/mm.h>
#include <linux/init.h>
#include <linux/pinctrl/machine.h>
#include <asm/mach/map.h>
#include <mach/mx23.h>
#include <mach/mx28.h>
#include <mach/common.h>
#include <mach/iomux.h>
/*
* Define the MX23 memory map.
...
...
@@ -48,43 +45,7 @@ void __init mx23_map_io(void)
iotable_init
(
mx23_io_desc
,
ARRAY_SIZE
(
mx23_io_desc
));
}
void
__init
mx23_init_irq
(
void
)
{
icoll_init_irq
();
}
void
__init
mx28_map_io
(
void
)
{
iotable_init
(
mx28_io_desc
,
ARRAY_SIZE
(
mx28_io_desc
));
}
void
__init
mx28_init_irq
(
void
)
{
icoll_init_irq
();
}
void
__init
mx23_soc_init
(
void
)
{
pinctrl_provide_dummies
();
mxs_add_dma
(
"imx23-dma-apbh"
,
MX23_APBH_DMA_BASE_ADDR
);
mxs_add_dma
(
"imx23-dma-apbx"
,
MX23_APBX_DMA_BASE_ADDR
);
mxs_add_gpio
(
"imx23-gpio"
,
0
,
MX23_PINCTRL_BASE_ADDR
,
MX23_INT_GPIO0
);
mxs_add_gpio
(
"imx23-gpio"
,
1
,
MX23_PINCTRL_BASE_ADDR
,
MX23_INT_GPIO1
);
mxs_add_gpio
(
"imx23-gpio"
,
2
,
MX23_PINCTRL_BASE_ADDR
,
MX23_INT_GPIO2
);
}
void
__init
mx28_soc_init
(
void
)
{
pinctrl_provide_dummies
();
mxs_add_dma
(
"imx28-dma-apbh"
,
MX23_APBH_DMA_BASE_ADDR
);
mxs_add_dma
(
"imx28-dma-apbx"
,
MX23_APBX_DMA_BASE_ADDR
);
mxs_add_gpio
(
"imx28-gpio"
,
0
,
MX28_PINCTRL_BASE_ADDR
,
MX28_INT_GPIO0
);
mxs_add_gpio
(
"imx28-gpio"
,
1
,
MX28_PINCTRL_BASE_ADDR
,
MX28_INT_GPIO1
);
mxs_add_gpio
(
"imx28-gpio"
,
2
,
MX28_PINCTRL_BASE_ADDR
,
MX28_INT_GPIO2
);
mxs_add_gpio
(
"imx28-gpio"
,
3
,
MX28_PINCTRL_BASE_ADDR
,
MX28_INT_GPIO3
);
mxs_add_gpio
(
"imx28-gpio"
,
4
,
MX28_PINCTRL_BASE_ADDR
,
MX28_INT_GPIO4
);
}
arch/arm/mach-mxs/module-tx28.c
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2010 <LW@KARO-electronics.de>
*
* 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/delay.h>
#include <linux/fec.h>
#include <linux/gpio.h>
#include <mach/iomux-mx28.h>
#include "devices-mx28.h"
#include "module-tx28.h"
#define TX28_FEC_PHY_POWER MXS_GPIO_NR(3, 29)
#define TX28_FEC_PHY_RESET MXS_GPIO_NR(4, 13)
static
const
iomux_cfg_t
tx28_fec_gpio_pads
[]
__initconst
=
{
/* PHY POWER */
MX28_PAD_PWM4__GPIO_3_29
|
MXS_PAD_4MA
|
MXS_PAD_NOPULL
|
MXS_PAD_3V3
,
/* PHY RESET */
MX28_PAD_ENET0_RX_CLK__GPIO_4_13
|
MXS_PAD_4MA
|
MXS_PAD_NOPULL
|
MXS_PAD_3V3
,
/* Mode strap pins 0-2 */
MX28_PAD_ENET0_RXD0__GPIO_4_3
|
MXS_PAD_8MA
|
MXS_PAD_PULLUP
|
MXS_PAD_3V3
,
MX28_PAD_ENET0_RXD1__GPIO_4_4
|
MXS_PAD_8MA
|
MXS_PAD_PULLUP
|
MXS_PAD_3V3
,
MX28_PAD_ENET0_RX_EN__GPIO_4_2
|
MXS_PAD_8MA
|
MXS_PAD_PULLUP
|
MXS_PAD_3V3
,
/* nINT */
MX28_PAD_ENET0_TX_CLK__GPIO_4_5
|
MXS_PAD_4MA
|
MXS_PAD_NOPULL
|
MXS_PAD_3V3
,
MX28_PAD_ENET0_MDC__GPIO_4_0
,
MX28_PAD_ENET0_MDIO__GPIO_4_1
,
MX28_PAD_ENET0_TX_EN__GPIO_4_6
,
MX28_PAD_ENET0_TXD0__GPIO_4_7
,
MX28_PAD_ENET0_TXD1__GPIO_4_8
,
MX28_PAD_ENET_CLK__GPIO_4_16
,
};
#define FEC_MODE (MXS_PAD_8MA | MXS_PAD_PULLUP | MXS_PAD_3V3)
static
const
iomux_cfg_t
tx28_fec0_pads
[]
__initconst
=
{
MX28_PAD_ENET0_MDC__ENET0_MDC
|
FEC_MODE
,
MX28_PAD_ENET0_MDIO__ENET0_MDIO
|
FEC_MODE
,
MX28_PAD_ENET0_RX_EN__ENET0_RX_EN
|
FEC_MODE
,
MX28_PAD_ENET0_RXD0__ENET0_RXD0
|
FEC_MODE
,
MX28_PAD_ENET0_RXD1__ENET0_RXD1
|
FEC_MODE
,
MX28_PAD_ENET0_TX_EN__ENET0_TX_EN
|
FEC_MODE
,
MX28_PAD_ENET0_TXD0__ENET0_TXD0
|
FEC_MODE
,
MX28_PAD_ENET0_TXD1__ENET0_TXD1
|
FEC_MODE
,
MX28_PAD_ENET_CLK__CLKCTRL_ENET
|
FEC_MODE
,
};
static
const
iomux_cfg_t
tx28_fec1_pads
[]
__initconst
=
{
MX28_PAD_ENET0_RXD2__ENET1_RXD0
,
MX28_PAD_ENET0_RXD3__ENET1_RXD1
,
MX28_PAD_ENET0_TXD2__ENET1_TXD0
,
MX28_PAD_ENET0_TXD3__ENET1_TXD1
,
MX28_PAD_ENET0_COL__ENET1_TX_EN
,
MX28_PAD_ENET0_CRS__ENET1_RX_EN
,
};
static
const
struct
fec_platform_data
tx28_fec0_data
__initconst
=
{
.
phy
=
PHY_INTERFACE_MODE_RMII
,
};
static
const
struct
fec_platform_data
tx28_fec1_data
__initconst
=
{
.
phy
=
PHY_INTERFACE_MODE_RMII
,
};
int
__init
tx28_add_fec0
(
void
)
{
int
i
,
ret
;
pr_debug
(
"%s: Switching FEC PHY power off
\n
"
,
__func__
);
ret
=
mxs_iomux_setup_multiple_pads
(
tx28_fec_gpio_pads
,
ARRAY_SIZE
(
tx28_fec_gpio_pads
));
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
tx28_fec_gpio_pads
);
i
++
)
{
unsigned
int
gpio
=
MXS_GPIO_NR
(
PAD_BANK
(
tx28_fec_gpio_pads
[
i
]),
PAD_PIN
(
tx28_fec_gpio_pads
[
i
]));
ret
=
gpio_request
(
gpio
,
"FEC"
);
if
(
ret
)
{
pr_err
(
"Failed to request GPIO_%d_%d: %d
\n
"
,
PAD_BANK
(
tx28_fec_gpio_pads
[
i
]),
PAD_PIN
(
tx28_fec_gpio_pads
[
i
]),
ret
);
goto
free_gpios
;
}
ret
=
gpio_direction_output
(
gpio
,
0
);
if
(
ret
)
{
pr_err
(
"Failed to set direction of GPIO_%d_%d to output: %d
\n
"
,
gpio
/
32
+
1
,
gpio
%
32
,
ret
);
goto
free_gpios
;
}
}
/* Power up fec phy */
pr_debug
(
"%s: Switching FEC PHY power on
\n
"
,
__func__
);
ret
=
gpio_direction_output
(
TX28_FEC_PHY_POWER
,
1
);
if
(
ret
)
{
pr_err
(
"Failed to power on PHY: %d
\n
"
,
ret
);
goto
free_gpios
;
}
mdelay
(
26
);
/* 25ms according to data sheet */
/* nINT */
gpio_direction_input
(
MXS_GPIO_NR
(
4
,
5
));
/* Mode strap pins */
gpio_direction_output
(
MXS_GPIO_NR
(
4
,
2
),
1
);
gpio_direction_output
(
MXS_GPIO_NR
(
4
,
3
),
1
);
gpio_direction_output
(
MXS_GPIO_NR
(
4
,
4
),
1
);
udelay
(
100
);
/* minimum assertion time for nRST */
pr_debug
(
"%s: Deasserting FEC PHY RESET
\n
"
,
__func__
);
gpio_set_value
(
TX28_FEC_PHY_RESET
,
1
);
ret
=
mxs_iomux_setup_multiple_pads
(
tx28_fec0_pads
,
ARRAY_SIZE
(
tx28_fec0_pads
));
if
(
ret
)
{
pr_debug
(
"%s: mxs_iomux_setup_multiple_pads() failed with rc: %d
\n
"
,
__func__
,
ret
);
goto
free_gpios
;
}
pr_debug
(
"%s: Registering FEC0 device
\n
"
,
__func__
);
mx28_add_fec
(
0
,
&
tx28_fec0_data
);
return
0
;
free_gpios:
while
(
--
i
>=
0
)
{
unsigned
int
gpio
=
MXS_GPIO_NR
(
PAD_BANK
(
tx28_fec_gpio_pads
[
i
]),
PAD_PIN
(
tx28_fec_gpio_pads
[
i
]));
gpio_free
(
gpio
);
}
return
ret
;
}
int
__init
tx28_add_fec1
(
void
)
{
int
ret
;
ret
=
mxs_iomux_setup_multiple_pads
(
tx28_fec1_pads
,
ARRAY_SIZE
(
tx28_fec1_pads
));
if
(
ret
)
{
pr_debug
(
"%s: mxs_iomux_setup_multiple_pads() failed with rc: %d
\n
"
,
__func__
,
ret
);
return
ret
;
}
pr_debug
(
"%s: Registering FEC1 device
\n
"
,
__func__
);
mx28_add_fec
(
1
,
&
tx28_fec1_data
);
return
0
;
}
arch/arm/mach-mxs/module-tx28.h
deleted
100644 → 0
View file @
4cbe5a55
/*
* Copyright (C) 2010 Pengutronix
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
*
* 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.
*/
int
__init
tx28_add_fec0
(
void
);
int
__init
tx28_add_fec1
(
void
);
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