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
155b2fd3
Commit
155b2fd3
authored
Sep 16, 2014
by
Shawn Guo
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'imx/soc' into imx/dt
parents
ee641009
64546e9f
Changes
39
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
521 additions
and
1990 deletions
+521
-1990
arch/arm/boot/dts/vf610-twr.dts
arch/arm/boot/dts/vf610-twr.dts
+0
-1
arch/arm/configs/imx_v4_v5_defconfig
arch/arm/configs/imx_v4_v5_defconfig
+2
-14
arch/arm/configs/imx_v6_v7_defconfig
arch/arm/configs/imx_v6_v7_defconfig
+4
-6
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/Kconfig
+8
-103
arch/arm/mach-imx/Makefile
arch/arm/mach-imx/Makefile
+3
-7
arch/arm/mach-imx/anatop.c
arch/arm/mach-imx/anatop.c
+13
-0
arch/arm/mach-imx/board-pcm038.h
arch/arm/mach-imx/board-pcm038.h
+0
-36
arch/arm/mach-imx/clk-gate-exclusive.c
arch/arm/mach-imx/clk-gate-exclusive.c
+94
-0
arch/arm/mach-imx/clk-imx6q.c
arch/arm/mach-imx/clk-imx6q.c
+82
-17
arch/arm/mach-imx/clk-imx6sl.c
arch/arm/mach-imx/clk-imx6sl.c
+86
-17
arch/arm/mach-imx/clk-imx6sx.c
arch/arm/mach-imx/clk-imx6sx.c
+54
-9
arch/arm/mach-imx/clk-pllv3.c
arch/arm/mach-imx/clk-pllv3.c
+0
-37
arch/arm/mach-imx/clk-vf610.c
arch/arm/mach-imx/clk-vf610.c
+19
-2
arch/arm/mach-imx/clk.h
arch/arm/mach-imx/clk.h
+3
-0
arch/arm/mach-imx/common.h
arch/arm/mach-imx/common.h
+0
-2
arch/arm/mach-imx/cpuidle-imx6q.c
arch/arm/mach-imx/cpuidle-imx6q.c
+0
-4
arch/arm/mach-imx/eukrea-baseboards.h
arch/arm/mach-imx/eukrea-baseboards.h
+1
-9
arch/arm/mach-imx/eukrea_mbimx27-baseboard.c
arch/arm/mach-imx/eukrea_mbimx27-baseboard.c
+0
-351
arch/arm/mach-imx/imx1-dt.c
arch/arm/mach-imx/imx1-dt.c
+26
-0
arch/arm/mach-imx/iomux-imx31.c
arch/arm/mach-imx/iomux-imx31.c
+0
-7
arch/arm/mach-imx/iomux-v1.c
arch/arm/mach-imx/iomux-v1.c
+0
-2
arch/arm/mach-imx/iomux-v3.c
arch/arm/mach-imx/iomux-v3.c
+0
-2
arch/arm/mach-imx/mach-armadillo5x0.c
arch/arm/mach-imx/mach-armadillo5x0.c
+1
-1
arch/arm/mach-imx/mach-cpuimx27.c
arch/arm/mach-imx/mach-cpuimx27.c
+0
-321
arch/arm/mach-imx/mach-imx6sx.c
arch/arm/mach-imx/mach-imx6sx.c
+3
-0
arch/arm/mach-imx/mach-mx1ads.c
arch/arm/mach-imx/mach-mx1ads.c
+0
-154
arch/arm/mach-imx/mach-mx31_3ds.c
arch/arm/mach-imx/mach-mx31_3ds.c
+2
-2
arch/arm/mach-imx/mach-mx31lite.c
arch/arm/mach-imx/mach-mx31lite.c
+1
-1
arch/arm/mach-imx/mach-mxt_td60.c
arch/arm/mach-imx/mach-mxt_td60.c
+0
-273
arch/arm/mach-imx/mach-pcm037.c
arch/arm/mach-imx/mach-pcm037.c
+2
-2
arch/arm/mach-imx/mach-pcm038.c
arch/arm/mach-imx/mach-pcm038.c
+0
-358
arch/arm/mach-imx/mxc.h
arch/arm/mach-imx/mxc.h
+2
-0
arch/arm/mach-imx/pcm970-baseboard.c
arch/arm/mach-imx/pcm970-baseboard.c
+0
-231
arch/arm/mach-imx/platsmp.c
arch/arm/mach-imx/platsmp.c
+0
-10
arch/arm/mach-imx/time.c
arch/arm/mach-imx/time.c
+26
-5
include/dt-bindings/clock/imx6qdl-clock.h
include/dt-bindings/clock/imx6qdl-clock.h
+32
-3
include/dt-bindings/clock/imx6sl-clock.h
include/dt-bindings/clock/imx6sl-clock.h
+29
-1
include/dt-bindings/clock/imx6sx-clock.h
include/dt-bindings/clock/imx6sx-clock.h
+24
-1
include/dt-bindings/clock/vf610-clock.h
include/dt-bindings/clock/vf610-clock.h
+4
-1
No files found.
arch/arm/boot/dts/vf610-twr.dts
View file @
155b2fd3
...
...
@@ -76,7 +76,6 @@ sound {
simple
-
audio
-
card
,
cpu
{
sound
-
dai
=
<&
sai2
>;
master
-
clkdir
-
out
;
frame
-
master
;
bitclock
-
master
;
};
...
...
arch/arm/configs/imx_v4_v5_defconfig
View file @
155b2fd3
...
...
@@ -21,8 +21,6 @@ CONFIG_ARCH_MULTI_V4T=y
CONFIG_ARCH_MULTI_V5=y
# CONFIG_ARCH_MULTI_V7 is not set
CONFIG_ARCH_MXC=y
CONFIG_MXC_IRQ_PRIOR=y
CONFIG_ARCH_MX1ADS=y
CONFIG_MACH_SCB9328=y
CONFIG_MACH_APF9328=y
CONFIG_MACH_MX21ADS=y
...
...
@@ -30,10 +28,6 @@ CONFIG_MACH_MX25_3DS=y
CONFIG_MACH_EUKREA_CPUIMX25SD=y
CONFIG_MACH_IMX25_DT=y
CONFIG_MACH_MX27ADS=y
CONFIG_MACH_PCM038=y
CONFIG_MACH_CPUIMX27=y
CONFIG_MACH_EUKREA_CPUIMX27_USESDHC2=y
CONFIG_MACH_EUKREA_CPUIMX27_USEUART4=y
CONFIG_MACH_MX27_3DS=y
CONFIG_MACH_IMX27_VISSTRIM_M10=y
CONFIG_MACH_PCA100=y
...
...
@@ -43,8 +37,6 @@ CONFIG_PREEMPT=y
CONFIG_AEABI=y
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_FPE_NWFPE=y
CONFIG_FPE_NWFPE_XP=y
CONFIG_PM_DEBUG=y
CONFIG_NET=y
CONFIG_PACKET=y
...
...
@@ -63,6 +55,7 @@ CONFIG_NETFILTER=y
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_IMX_WEIM=y
CONFIG_MTD=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_BLOCK=y
...
...
@@ -78,8 +71,8 @@ CONFIG_MTD_NAND_MXC=y
CONFIG_MTD_UBI=y
CONFIG_EEPROM_AT24=y
CONFIG_EEPROM_AT25=y
CONFIG_ATA=y
CONFIG_BLK_DEV_SD=y
CONFIG_ATA=y
CONFIG_PATA_IMX=y
CONFIG_NETDEVICES=y
CONFIG_CS89x0=y
...
...
@@ -102,10 +95,8 @@ CONFIG_SERIAL_8250=m
CONFIG_SERIAL_IMX=y
CONFIG_SERIAL_IMX_CONSOLE=y
# CONFIG_HW_RANDOM is not set
CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_IMX=y
CONFIG_SPI=y
CONFIG_SPI_IMX=y
CONFIG_SPI_SPIDEV=y
CONFIG_GPIO_SYSFS=y
...
...
@@ -132,10 +123,7 @@ CONFIG_VIDEO_CODA=y
CONFIG_SOC_CAMERA_OV2640=y
CONFIG_FB=y
CONFIG_FB_IMX=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_L4F00242T03=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_LOGO=y
CONFIG_SOUND=y
...
...
arch/arm/configs/imx_v6_v7_defconfig
View file @
155b2fd3
...
...
@@ -32,8 +32,8 @@ CONFIG_MACH_IMX35_DT=y
CONFIG_MACH_PCM043=y
CONFIG_MACH_MX35_3DS=y
CONFIG_MACH_VPR200=y
CONFIG_SOC_IMX51=y
CONFIG_SOC_IMX50=y
CONFIG_SOC_IMX51=y
CONFIG_SOC_IMX53=y
CONFIG_SOC_IMX6Q=y
CONFIG_SOC_IMX6SL=y
...
...
@@ -105,7 +105,6 @@ CONFIG_EEPROM_AT24=y
CONFIG_EEPROM_AT25=y
# CONFIG_SCSI_PROC_FS is not set
CONFIG_BLK_DEV_SD=y
CONFIG_SCSI_MULTI_LUN=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y
...
...
@@ -153,14 +152,12 @@ CONFIG_SERIAL_IMX_CONSOLE=y
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_MXC_RNGA=y
# CONFIG_I2C_COMPAT is not set
CONFIG_I2C_CHARDEV=y
# CONFIG_I2C_HELPER_AUTO is not set
CONFIG_I2C_ALGOPCF=m
CONFIG_I2C_ALGOPCA=m
CONFIG_I2C_IMX=y
CONFIG_SPI=y
CONFIG_SPI_IMX=y
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_MC9S08DZ60=y
...
...
@@ -198,7 +195,6 @@ CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_L4F00242T03=y
CONFIG_LCD_PLATFORM=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_PWM=y
CONFIG_BACKLIGHT_GPIO=y
CONFIG_FRAMEBUFFER_CONSOLE=y
...
...
@@ -206,6 +202,7 @@ CONFIG_LOGO=y
CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_FSL_SAI=y
CONFIG_SND_IMX_SOC=y
CONFIG_SND_SOC_PHYCORE_AC97=y
CONFIG_SND_SOC_EUKREA_TLV320=y
...
...
@@ -213,6 +210,7 @@ CONFIG_SND_SOC_IMX_WM8962=y
CONFIG_SND_SOC_IMX_SGTL5000=y
CONFIG_SND_SOC_IMX_SPDIF=y
CONFIG_SND_SOC_IMX_MC13783=y
CONFIG_SND_SIMPLE_CARD=y
CONFIG_USB=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_MXC=y
...
...
@@ -240,6 +238,7 @@ CONFIG_LEDS_TRIGGER_BACKLIGHT=y
CONFIG_LEDS_TRIGGER_GPIO=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
CONFIG_RTC_DRV_ISL1208=y
CONFIG_RTC_DRV_PCF8563=y
CONFIG_RTC_DRV_MC13XXX=y
CONFIG_RTC_DRV_MXC=y
...
...
@@ -254,7 +253,6 @@ CONFIG_DRM_IMX_FB_HELPER=y
CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
CONFIG_DRM_IMX_TVE=y
CONFIG_DRM_IMX_LDB=y
CONFIG_DRM_IMX_IPUV3_CORE=y
CONFIG_DRM_IMX_IPUV3=y
CONFIG_DRM_IMX_HDMI=y
# CONFIG_IOMMU_SUPPORT is not set
...
...
arch/arm/mach-imx/Kconfig
View file @
155b2fd3
...
...
@@ -69,6 +69,7 @@ config SOC_IMX1
select CPU_ARM920T
select IMX_HAVE_IOMUX_V1
select MXC_AVIC
select PINCTRL_IMX1
config SOC_IMX21
bool
...
...
@@ -108,17 +109,6 @@ config SOC_IMX35
if ARCH_MULTI_V4T
comment "MX1 platforms:"
config MACH_MXLADS
bool
config ARCH_MX1ADS
bool "MX1ADS platform"
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART
select MACH_MXLADS
select SOC_IMX1
help
Say Y here if you are using Motorola MX1ADS/MXLADS boards
config MACH_SCB9328
bool "Synertronixx scb9328"
...
...
@@ -135,6 +125,13 @@ config MACH_APF9328
help
Say Yes here if you are using the Armadeus APF9328 development board
config MACH_IMX1_DT
bool "Support i.MX1 platforms from device tree"
select SOC_IMX1
help
Include support for Freescale i.MX1 based platforms
using the device tree for discovery.
endif
if ARCH_MULTI_V5
...
...
@@ -223,86 +220,6 @@ config MACH_MX27ADS
Include support for MX27ADS platform. This includes specific
configurations for the board and its peripherals.
config MACH_PCM038
bool "Phytec phyCORE-i.MX27 CPU module (pcm038)"
select IMX_HAVE_PLATFORM_IMX2_WDT
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_EHCI
select IMX_HAVE_PLATFORM_MXC_NAND
select IMX_HAVE_PLATFORM_MXC_W1
select IMX_HAVE_PLATFORM_SPI_IMX
select USB_ULPI_VIEWPORT if USB_ULPI
select SOC_IMX27
help
Include support for phyCORE-i.MX27 (aka pcm038) platform. This
includes specific configurations for the module and its peripherals.
choice
prompt "Baseboard"
depends on MACH_PCM038
default MACH_PCM970_BASEBOARD
config MACH_PCM970_BASEBOARD
bool "PHYTEC PCM970 development board"
select IMX_HAVE_PLATFORM_IMX_FB
select IMX_HAVE_PLATFORM_MXC_MMC
help
This adds board specific devices that can be found on Phytec's
PCM970 evaluation board.
endchoice
config MACH_CPUIMX27
bool "Eukrea CPUIMX27 module"
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
select IMX_HAVE_PLATFORM_IMX2_WDT
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_EHCI
select IMX_HAVE_PLATFORM_MXC_NAND
select IMX_HAVE_PLATFORM_MXC_W1
select USB_ULPI_VIEWPORT if USB_ULPI
select SOC_IMX27
help
Include support for Eukrea CPUIMX27 platform. This includes
specific configurations for the module and its peripherals.
config MACH_EUKREA_CPUIMX27_USESDHC2
bool "CPUIMX27 integrates SDHC2 module"
depends on MACH_CPUIMX27
select IMX_HAVE_PLATFORM_MXC_MMC
help
This adds support for the internal SDHC2 used on CPUIMX27
for wifi or eMMC.
config MACH_EUKREA_CPUIMX27_USEUART4
bool "CPUIMX27 integrates UART4 module"
depends on MACH_CPUIMX27
help
This adds support for the internal UART4 used on CPUIMX27
for bluetooth.
choice
prompt "Baseboard"
depends on MACH_CPUIMX27
default MACH_EUKREA_MBIMX27_BASEBOARD
config MACH_EUKREA_MBIMX27_BASEBOARD
bool "Eukrea MBIMX27 development board"
select IMX_HAVE_PLATFORM_IMX_FB
select IMX_HAVE_PLATFORM_IMX_KEYPAD
select IMX_HAVE_PLATFORM_IMX_SSI
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_MMC
select IMX_HAVE_PLATFORM_SPI_IMX
select LEDS_GPIO_REGISTER
help
This adds board specific devices that can be found on Eukrea's
MBIMX27 evaluation board.
endchoice
config MACH_MX27_3DS
bool "MX27PDK platform"
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
...
...
@@ -359,18 +276,6 @@ config MACH_PCA100
Include support for phyCARD-s (aka pca100) platform. This
includes specific configurations for the module and its peripherals.
config MACH_MXT_TD60
bool "Maxtrack i-MXT TD60"
select IMX_HAVE_PLATFORM_IMX_FB
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_MMC
select IMX_HAVE_PLATFORM_MXC_NAND
select SOC_IMX27
help
Include support for i-MXT (aka td60) platform. This
includes specific configurations for the module and its peripherals.
config MACH_IMX27_DT
bool "Support i.MX27 platforms from device tree"
select SOC_IMX27
...
...
arch/arm/mach-imx/Makefile
View file @
155b2fd3
...
...
@@ -16,7 +16,8 @@ obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o clk-imx51-imx53.o $(imx5-pm-y)
obj-$(CONFIG_COMMON_CLK)
+=
clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o
\
clk-pfd.o clk-busy.o clk.o
\
clk-fixup-div.o clk-fixup-mux.o
clk-fixup-div.o clk-fixup-mux.o
\
clk-gate-exclusive.o
obj-$(CONFIG_IMX_HAVE_IOMUX_V1)
+=
iomux-v1.o
obj-$(CONFIG_ARCH_MXC_IOMUX_V3)
+=
iomux-v3.o
...
...
@@ -41,9 +42,9 @@ obj-y += ssi-fiq-ksym.o
endif
# i.MX1 based machines
obj-$(CONFIG_ARCH_MX1ADS)
+=
mach-mx1ads.o
obj-$(CONFIG_MACH_SCB9328)
+=
mach-scb9328.o
obj-$(CONFIG_MACH_APF9328)
+=
mach-apf9328.o
obj-$(CONFIG_MACH_IMX1_DT)
+=
imx1-dt.o
# i.MX21 based machines
obj-$(CONFIG_MACH_MX21ADS)
+=
mach-mx21ads.o
...
...
@@ -56,14 +57,9 @@ obj-$(CONFIG_MACH_IMX25_DT) += imx25-dt.o
# i.MX27 based machines
obj-$(CONFIG_MACH_MX27ADS)
+=
mach-mx27ads.o
obj-$(CONFIG_MACH_PCM038)
+=
mach-pcm038.o
obj-$(CONFIG_MACH_PCM970_BASEBOARD)
+=
pcm970-baseboard.o
obj-$(CONFIG_MACH_MX27_3DS)
+=
mach-mx27_3ds.o
obj-$(CONFIG_MACH_IMX27_VISSTRIM_M10)
+=
mach-imx27_visstrim_m10.o
obj-$(CONFIG_MACH_CPUIMX27)
+=
mach-cpuimx27.o
obj-$(CONFIG_MACH_EUKREA_MBIMX27_BASEBOARD)
+=
eukrea_mbimx27-baseboard.o
obj-$(CONFIG_MACH_PCA100)
+=
mach-pca100.o
obj-$(CONFIG_MACH_MXT_TD60)
+=
mach-mxt_td60.o
obj-$(CONFIG_MACH_IMX27_DT)
+=
imx27-dt.o
# i.MX31 based machines
...
...
arch/arm/mach-imx/anatop.c
View file @
155b2fd3
...
...
@@ -104,6 +104,19 @@ void __init imx_init_revision_from_anatop(void)
case
2
:
revision
=
IMX_CHIP_REVISION_1_2
;
break
;
case
3
:
revision
=
IMX_CHIP_REVISION_1_3
;
break
;
case
4
:
revision
=
IMX_CHIP_REVISION_1_4
;
break
;
case
5
:
/*
* i.MX6DQ TO1.5 is defined as Rev 1.3 in Data Sheet, marked
* as 'D' in Part Number last character.
*/
revision
=
IMX_CHIP_REVISION_1_5
;
break
;
default:
revision
=
IMX_CHIP_REVISION_UNKNOWN
;
}
...
...
arch/arm/mach-imx/board-pcm038.h
deleted
100644 → 0
View file @
ee641009
/*
* Copyright (C) 2008 Juergen Beisert (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.
*/
#ifndef __ASM_ARCH_MXC_BOARD_PCM038_H__
#define __ASM_ARCH_MXC_BOARD_PCM038_H__
#ifndef __ASSEMBLY__
/*
* This CPU module needs a baseboard to work. After basic initializing
* its own devices, it calls the baseboard's init function.
* TODO: Add your own baseboard init function and call it from
* inside pcm038_init().
*
* This example here is for the development board. Refer pcm970-baseboard.c
*/
extern
void
pcm970_baseboard_init
(
void
);
#endif
#endif
/* __ASM_ARCH_MXC_BOARD_PCM038_H__ */
arch/arm/mach-imx/clk-gate-exclusive.c
0 → 100644
View file @
155b2fd3
/*
* Copyright 2014 Freescale Semiconductor, Inc.
*
* 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/clk-provider.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/slab.h>
#include "clk.h"
/**
* struct clk_gate_exclusive - i.MX specific gate clock which is mutually
* exclusive with other gate clocks
*
* @gate: the parent class
* @exclusive_mask: mask of gate bits which are mutually exclusive to this
* gate clock
*
* The imx exclusive gate clock is a subclass of basic clk_gate
* with an addtional mask to indicate which other gate bits in the same
* register is mutually exclusive to this gate clock.
*/
struct
clk_gate_exclusive
{
struct
clk_gate
gate
;
u32
exclusive_mask
;
};
static
int
clk_gate_exclusive_enable
(
struct
clk_hw
*
hw
)
{
struct
clk_gate
*
gate
=
container_of
(
hw
,
struct
clk_gate
,
hw
);
struct
clk_gate_exclusive
*
exgate
=
container_of
(
gate
,
struct
clk_gate_exclusive
,
gate
);
u32
val
=
readl
(
gate
->
reg
);
if
(
val
&
exgate
->
exclusive_mask
)
return
-
EBUSY
;
return
clk_gate_ops
.
enable
(
hw
);
}
static
void
clk_gate_exclusive_disable
(
struct
clk_hw
*
hw
)
{
clk_gate_ops
.
disable
(
hw
);
}
static
int
clk_gate_exclusive_is_enabled
(
struct
clk_hw
*
hw
)
{
return
clk_gate_ops
.
is_enabled
(
hw
);
}
static
const
struct
clk_ops
clk_gate_exclusive_ops
=
{
.
enable
=
clk_gate_exclusive_enable
,
.
disable
=
clk_gate_exclusive_disable
,
.
is_enabled
=
clk_gate_exclusive_is_enabled
,
};
struct
clk
*
imx_clk_gate_exclusive
(
const
char
*
name
,
const
char
*
parent
,
void
__iomem
*
reg
,
u8
shift
,
u32
exclusive_mask
)
{
struct
clk_gate_exclusive
*
exgate
;
struct
clk_gate
*
gate
;
struct
clk
*
clk
;
struct
clk_init_data
init
;
if
(
exclusive_mask
==
0
)
return
ERR_PTR
(
-
EINVAL
);
exgate
=
kzalloc
(
sizeof
(
*
exgate
),
GFP_KERNEL
);
if
(
!
exgate
)
return
ERR_PTR
(
-
ENOMEM
);
gate
=
&
exgate
->
gate
;
init
.
name
=
name
;
init
.
ops
=
&
clk_gate_exclusive_ops
;
init
.
flags
=
CLK_SET_RATE_PARENT
;
init
.
parent_names
=
parent
?
&
parent
:
NULL
;
init
.
num_parents
=
parent
?
1
:
0
;
gate
->
reg
=
reg
;
gate
->
bit_idx
=
shift
;
gate
->
lock
=
&
imx_ccm_lock
;
gate
->
hw
.
init
=
&
init
;
exgate
->
exclusive_mask
=
exclusive_mask
;
clk
=
clk_register
(
NULL
,
&
gate
->
hw
);
if
(
IS_ERR
(
clk
))
kfree
(
exgate
);
return
clk
;
}
arch/arm/mach-imx/clk-imx6q.c
View file @
155b2fd3
This diff is collapsed.
Click to expand it.
arch/arm/mach-imx/clk-imx6sl.c
View file @
155b2fd3
This diff is collapsed.
Click to expand it.
arch/arm/mach-imx/clk-imx6sx.c
View file @
155b2fd3
...
...
@@ -81,6 +81,14 @@ static const char *lvds_sels[] = {
"arm"
,
"pll1_sys"
,
"dummy"
,
"dummy"
,
"dummy"
,
"dummy"
,
"dummy"
,
"pll5_video_div"
,
"dummy"
,
"dummy"
,
"pcie_ref_125m"
,
"dummy"
,
"usbphy1"
,
"usbphy2"
,
};
static
const
char
*
pll_bypass_src_sels
[]
=
{
"osc"
,
"lvds1_in"
,
};
static
const
char
*
pll1_bypass_sels
[]
=
{
"pll1"
,
"pll1_bypass_src"
,
};
static
const
char
*
pll2_bypass_sels
[]
=
{
"pll2"
,
"pll2_bypass_src"
,
};
static
const
char
*
pll3_bypass_sels
[]
=
{
"pll3"
,
"pll3_bypass_src"
,
};
static
const
char
*
pll4_bypass_sels
[]
=
{
"pll4"
,
"pll4_bypass_src"
,
};
static
const
char
*
pll5_bypass_sels
[]
=
{
"pll5"
,
"pll5_bypass_src"
,
};
static
const
char
*
pll6_bypass_sels
[]
=
{
"pll6"
,
"pll6_bypass_src"
,
};
static
const
char
*
pll7_bypass_sels
[]
=
{
"pll7"
,
"pll7_bypass_src"
,
};
static
struct
clk
*
clks
[
IMX6SX_CLK_CLK_END
];
static
struct
clk_onecell_data
clk_data
;
...
...
@@ -143,18 +151,54 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node)
clks
[
IMX6SX_CLK_IPP_DI0
]
=
of_clk_get_by_name
(
ccm_node
,
"ipp_di0"
);
clks
[
IMX6SX_CLK_IPP_DI1
]
=
of_clk_get_by_name
(
ccm_node
,
"ipp_di1"
);
/* Clock source from external clock via CLK1 PAD */
clks
[
IMX6SX_CLK_ANACLK1
]
=
imx_obtain_fixed_clock
(
"anaclk1"
,
0
);
np
=
of_find_compatible_node
(
NULL
,
NULL
,
"fsl,imx6sx-anatop"
);
base
=
of_iomap
(
np
,
0
);
WARN_ON
(
!
base
);
/* type name parent_name base div_mask */
clks
[
IMX6SX_CLK_PLL1_SYS
]
=
imx_clk_pllv3
(
IMX_PLLV3_SYS
,
"pll1_sys"
,
"osc"
,
base
,
0x7f
);
clks
[
IMX6SX_CLK_PLL2_BUS
]
=
imx_clk_pllv3
(
IMX_PLLV3_GENERIC
,
"pll2_bus"
,
"osc"
,
base
+
0x30
,
0x1
);
clks
[
IMX6SX_CLK_PLL3_USB_OTG
]
=
imx_clk_pllv3
(
IMX_PLLV3_USB
,
"pll3_usb_otg"
,
"osc"
,
base
+
0x10
,
0x3
);
clks
[
IMX6SX_CLK_PLL4_AUDIO
]
=
imx_clk_pllv3
(
IMX_PLLV3_AV
,
"pll4_audio"
,
"osc"
,
base
+
0x70
,
0x7f
);
clks
[
IMX6SX_CLK_PLL5_VIDEO
]
=
imx_clk_pllv3
(
IMX_PLLV3_AV
,
"pll5_video"
,
"osc"
,
base
+
0xa0
,
0x7f
);
clks
[
IMX6SX_CLK_PLL6_ENET
]
=
imx_clk_pllv3
(
IMX_PLLV3_ENET
,
"pll6_enet"
,
"osc"
,
base
+
0xe0
,
0x3
);
clks
[
IMX6SX_CLK_PLL7_USB_HOST
]
=
imx_clk_pllv3
(
IMX_PLLV3_USB
,
"pll7_usb_host"
,
"osc"
,
base
+
0x20
,
0x3
);
clks
[
IMX6SX_PLL1_BYPASS_SRC
]
=
imx_clk_mux
(
"pll1_bypass_src"
,
base
+
0x00
,
14
,
1
,
pll_bypass_src_sels
,
ARRAY_SIZE
(
pll_bypass_src_sels
));
clks
[
IMX6SX_PLL2_BYPASS_SRC
]
=
imx_clk_mux
(
"pll2_bypass_src"
,
base
+
0x30
,
14
,
1
,
pll_bypass_src_sels
,
ARRAY_SIZE
(
pll_bypass_src_sels
));
clks
[
IMX6SX_PLL3_BYPASS_SRC
]
=
imx_clk_mux
(
"pll3_bypass_src"
,
base
+
0x10
,
14
,
1
,
pll_bypass_src_sels
,
ARRAY_SIZE
(
pll_bypass_src_sels
));
clks
[
IMX6SX_PLL4_BYPASS_SRC
]
=
imx_clk_mux
(
"pll4_bypass_src"
,
base
+
0x70
,
14
,
1
,
pll_bypass_src_sels
,
ARRAY_SIZE
(
pll_bypass_src_sels
));
clks
[
IMX6SX_PLL5_BYPASS_SRC
]
=
imx_clk_mux
(
"pll5_bypass_src"
,
base
+
0xa0
,
14
,
1
,
pll_bypass_src_sels
,
ARRAY_SIZE
(
pll_bypass_src_sels
));
clks
[
IMX6SX_PLL6_BYPASS_SRC
]
=
imx_clk_mux
(
"pll6_bypass_src"
,
base
+
0xe0
,
14
,
1
,
pll_bypass_src_sels
,
ARRAY_SIZE
(
pll_bypass_src_sels
));
clks
[
IMX6SX_PLL7_BYPASS_SRC
]
=
imx_clk_mux
(
"pll7_bypass_src"
,
base
+
0x20
,
14
,
1
,
pll_bypass_src_sels
,
ARRAY_SIZE
(
pll_bypass_src_sels
));
/* type name parent_name base div_mask */
clks
[
IMX6SX_CLK_PLL1
]
=
imx_clk_pllv3
(
IMX_PLLV3_SYS
,
"pll1"
,
"pll1_bypass_src"
,
base
+
0x00
,
0x7f
);
clks
[
IMX6SX_CLK_PLL2
]
=
imx_clk_pllv3
(
IMX_PLLV3_GENERIC
,
"pll2"
,
"pll2_bypass_src"
,
base
+
0x30
,
0x1
);
clks
[
IMX6SX_CLK_PLL3
]
=
imx_clk_pllv3
(
IMX_PLLV3_USB
,
"pll3"
,
"pll3_bypass_src"
,
base
+
0x10
,
0x3
);
clks
[
IMX6SX_CLK_PLL4
]
=
imx_clk_pllv3
(
IMX_PLLV3_AV
,
"pll4"
,
"pll4_bypass_src"
,
base
+
0x70
,
0x7f
);
clks
[
IMX6SX_CLK_PLL5
]
=
imx_clk_pllv3
(
IMX_PLLV3_AV
,
"pll5"
,
"pll5_bypass_src"
,
base
+
0xa0
,
0x7f
);
clks
[
IMX6SX_CLK_PLL6
]
=
imx_clk_pllv3
(
IMX_PLLV3_ENET
,
"pll6"
,
"pll6_bypass_src"
,
base
+
0xe0
,
0x3
);
clks
[
IMX6SX_CLK_PLL7
]
=
imx_clk_pllv3
(
IMX_PLLV3_USB
,
"pll7"
,
"pll7_bypass_src"
,
base
+
0x20
,
0x3
);
clks
[
IMX6SX_PLL1_BYPASS
]
=
imx_clk_mux_flags
(
"pll1_bypass"
,
base
+
0x00
,
16
,
1
,
pll1_bypass_sels
,
ARRAY_SIZE
(
pll1_bypass_sels
),
CLK_SET_RATE_PARENT
);
clks
[
IMX6SX_PLL2_BYPASS
]
=
imx_clk_mux_flags
(
"pll2_bypass"
,
base
+
0x30
,
16
,
1
,
pll2_bypass_sels
,
ARRAY_SIZE
(
pll2_bypass_sels
),
CLK_SET_RATE_PARENT
);
clks
[
IMX6SX_PLL3_BYPASS
]
=
imx_clk_mux_flags
(
"pll3_bypass"
,
base
+
0x10
,
16
,
1
,
pll3_bypass_sels
,
ARRAY_SIZE
(
pll3_bypass_sels
),
CLK_SET_RATE_PARENT
);
clks
[
IMX6SX_PLL4_BYPASS
]
=
imx_clk_mux_flags
(
"pll4_bypass"
,
base
+
0x70
,
16
,
1
,
pll4_bypass_sels
,
ARRAY_SIZE
(
pll4_bypass_sels
),
CLK_SET_RATE_PARENT
);
clks
[
IMX6SX_PLL5_BYPASS
]
=
imx_clk_mux_flags
(
"pll5_bypass"
,
base
+
0xa0
,
16
,
1
,
pll5_bypass_sels
,
ARRAY_SIZE
(
pll5_bypass_sels
),
CLK_SET_RATE_PARENT
);
clks
[
IMX6SX_PLL6_BYPASS
]
=
imx_clk_mux_flags
(
"pll6_bypass"
,
base
+
0xe0
,
16
,
1
,
pll6_bypass_sels
,
ARRAY_SIZE
(
pll6_bypass_sels
),
CLK_SET_RATE_PARENT
);
clks
[
IMX6SX_PLL7_BYPASS
]
=
imx_clk_mux_flags
(
"pll7_bypass"
,
base
+
0x20
,
16
,
1
,
pll7_bypass_sels
,
ARRAY_SIZE
(
pll7_bypass_sels
),
CLK_SET_RATE_PARENT
);
/* Do not bypass PLLs initially */
clk_set_parent
(
clks
[
IMX6SX_PLL1_BYPASS
],
clks
[
IMX6SX_CLK_PLL1
]);
clk_set_parent
(
clks
[
IMX6SX_PLL2_BYPASS
],
clks
[
IMX6SX_CLK_PLL2
]);
clk_set_parent
(
clks
[
IMX6SX_PLL3_BYPASS
],
clks
[
IMX6SX_CLK_PLL3
]);
clk_set_parent
(
clks
[
IMX6SX_PLL4_BYPASS
],
clks
[
IMX6SX_CLK_PLL4
]);
clk_set_parent
(
clks
[
IMX6SX_PLL5_BYPASS
],
clks
[
IMX6SX_CLK_PLL5
]);
clk_set_parent
(
clks
[
IMX6SX_PLL6_BYPASS
],
clks
[
IMX6SX_CLK_PLL6
]);
clk_set_parent
(
clks
[
IMX6SX_PLL7_BYPASS
],
clks
[
IMX6SX_CLK_PLL7
]);
clks
[
IMX6SX_CLK_PLL1_SYS
]
=
imx_clk_gate
(
"pll1_sys"
,
"pll1_bypass"
,
base
+
0x00
,
13
);
clks
[
IMX6SX_CLK_PLL2_BUS
]
=
imx_clk_gate
(
"pll2_bus"
,
"pll2_bypass"
,
base
+
0x30
,
13
);
clks
[
IMX6SX_CLK_PLL3_USB_OTG
]
=
imx_clk_gate
(
"pll3_usb_otg"
,
"pll3_bypass"
,
base
+
0x10
,
13
);
clks
[
IMX6SX_CLK_PLL4_AUDIO
]
=
imx_clk_gate
(
"pll4_audio"
,
"pll4_bypass"
,
base
+
0x70
,
13
);
clks
[
IMX6SX_CLK_PLL5_VIDEO
]
=
imx_clk_gate
(
"pll5_video"
,
"pll5_bypass"
,
base
+
0xa0
,
13
);
clks
[
IMX6SX_CLK_PLL6_ENET
]
=
imx_clk_gate
(
"pll6_enet"
,
"pll6_bypass"
,
base
+
0xe0
,
13
);
clks
[
IMX6SX_CLK_PLL7_USB_HOST
]
=
imx_clk_gate
(
"pll7_usb_host"
,
"pll7_bypass"
,
base
+
0x20
,
13
);
/*
* Bit 20 is the reserved and read-only bit, we do this only for:
...
...
@@ -176,7 +220,8 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node)
clks
[
IMX6SX_CLK_PCIE_REF
]
=
imx_clk_fixed_factor
(
"pcie_ref"
,
"pll6_enet"
,
1
,
5
);
clks
[
IMX6SX_CLK_PCIE_REF_125M
]
=
imx_clk_gate
(
"pcie_ref_125m"
,
"pcie_ref"
,
base
+
0xe0
,
19
);
clks
[
IMX6SX_CLK_LVDS1_OUT
]
=
imx_clk_gate
(
"lvds1_out"
,
"lvds1_sel"
,
base
+
0x160
,
10
);
clks
[
IMX6SX_CLK_LVDS1_OUT
]
=
imx_clk_gate_exclusive
(
"lvds1_out"
,
"lvds1_sel"
,
base
+
0x160
,
10
,
BIT
(
12
));
clks
[
IMX6SX_CLK_LVDS1_IN
]
=
imx_clk_gate_exclusive
(
"lvds1_in"
,
"anaclk1"
,
base
+
0x160
,
12
,
BIT
(
10
));
clks
[
IMX6SX_CLK_ENET_REF
]
=
clk_register_divider_table
(
NULL
,
"enet_ref"
,
"pll6_enet"
,
0
,
base
+
0xe0
,
0
,
2
,
0
,
clk_enet_ref_table
,
...
...
arch/arm/mach-imx/clk-pllv3.c
View file @
155b2fd3
...
...
@@ -23,8 +23,6 @@
#define PLL_DENOM_OFFSET 0x20
#define BM_PLL_POWER (0x1 << 12)
#define BM_PLL_ENABLE (0x1 << 13)
#define BM_PLL_BYPASS (0x1 << 16)
#define BM_PLL_LOCK (0x1 << 31)
/**
...
...
@@ -84,10 +82,6 @@ static int clk_pllv3_prepare(struct clk_hw *hw)
if
(
ret
)
return
ret
;
val
=
readl_relaxed
(
pll
->
base
);
val
&=
~
BM_PLL_BYPASS
;
writel_relaxed
(
val
,
pll
->
base
);
return
0
;
}
...
...
@@ -97,7 +91,6 @@ static void clk_pllv3_unprepare(struct clk_hw *hw)
u32
val
;
val
=
readl_relaxed
(
pll
->
base
);
val
|=
BM_PLL_BYPASS
;
if
(
pll
->
powerup_set
)
val
&=
~
BM_PLL_POWER
;
else
...
...
@@ -105,28 +98,6 @@ static void clk_pllv3_unprepare(struct clk_hw *hw)
writel_relaxed
(
val
,
pll
->
base
);
}
static
int
clk_pllv3_enable
(
struct
clk_hw
*
hw
)
{
struct
clk_pllv3
*
pll
=
to_clk_pllv3
(
hw
);
u32
val
;
val
=
readl_relaxed
(
pll
->
base
);
val
|=
BM_PLL_ENABLE
;
writel_relaxed
(
val
,
pll
->
base
);
return
0
;
}
static
void
clk_pllv3_disable
(
struct
clk_hw
*
hw
)
{
struct
clk_pllv3
*
pll
=
to_clk_pllv3
(
hw
);
u32
val
;
val
=
readl_relaxed
(
pll
->
base
);
val
&=
~
BM_PLL_ENABLE
;
writel_relaxed
(
val
,
pll
->
base
);
}
static
unsigned
long
clk_pllv3_recalc_rate
(
struct
clk_hw
*
hw
,
unsigned
long
parent_rate
)
{
...
...
@@ -169,8 +140,6 @@ static int clk_pllv3_set_rate(struct clk_hw *hw, unsigned long rate,
static
const
struct
clk_ops
clk_pllv3_ops
=
{
.
prepare
=
clk_pllv3_prepare
,
.
unprepare
=
clk_pllv3_unprepare
,
.
enable
=
clk_pllv3_enable
,
.
disable
=
clk_pllv3_disable
,
.
recalc_rate
=
clk_pllv3_recalc_rate
,
.
round_rate
=
clk_pllv3_round_rate
,
.
set_rate
=
clk_pllv3_set_rate
,
...
...
@@ -225,8 +194,6 @@ static int clk_pllv3_sys_set_rate(struct clk_hw *hw, unsigned long rate,
static
const
struct
clk_ops
clk_pllv3_sys_ops
=
{
.
prepare
=
clk_pllv3_prepare
,
.
unprepare
=
clk_pllv3_unprepare
,
.
enable
=
clk_pllv3_enable
,
.
disable
=
clk_pllv3_disable
,
.
recalc_rate
=
clk_pllv3_sys_recalc_rate
,
.
round_rate
=
clk_pllv3_sys_round_rate
,
.
set_rate
=
clk_pllv3_sys_set_rate
,
...
...
@@ -299,8 +266,6 @@ static int clk_pllv3_av_set_rate(struct clk_hw *hw, unsigned long rate,
static
const
struct
clk_ops
clk_pllv3_av_ops
=
{
.
prepare
=
clk_pllv3_prepare
,
.
unprepare
=
clk_pllv3_unprepare
,
.
enable
=
clk_pllv3_enable
,
.
disable
=
clk_pllv3_disable
,
.
recalc_rate
=
clk_pllv3_av_recalc_rate
,
.
round_rate
=
clk_pllv3_av_round_rate
,
.
set_rate
=
clk_pllv3_av_set_rate
,
...
...
@@ -315,8 +280,6 @@ static unsigned long clk_pllv3_enet_recalc_rate(struct clk_hw *hw,
static
const
struct
clk_ops
clk_pllv3_enet_ops
=
{
.
prepare
=
clk_pllv3_prepare
,
.
unprepare
=
clk_pllv3_unprepare
,
.
enable
=
clk_pllv3_enable
,
.
disable
=
clk_pllv3_disable
,
.
recalc_rate
=
clk_pllv3_enet_recalc_rate
,
};
...
...
arch/arm/mach-imx/clk-vf610.c
View file @
155b2fd3
...
...
@@ -58,6 +58,8 @@
#define PFD_PLL1_BASE (anatop_base + 0x2b0)
#define PFD_PLL2_BASE (anatop_base + 0x100)
#define PFD_PLL3_BASE (anatop_base + 0xf0)
#define PLL3_CTRL (anatop_base + 0x10)
#define PLL7_CTRL (anatop_base + 0x20)
static
void
__iomem
*
anatop_base
;
static
void
__iomem
*
ccm_base
;
...
...
@@ -98,9 +100,15 @@ static struct clk_div_table pll4_main_div_table[] = {
static
struct
clk
*
clk
[
VF610_CLK_END
];
static
struct
clk_onecell_data
clk_data
;
static
unsigned
int
const
clks_init_on
[]
__initconst
=
{
VF610_CLK_SYS_BUS
,
VF610_CLK_DDR_SEL
,
};
static
void
__init
vf610_clocks_init
(
struct
device_node
*
ccm_node
)
{
struct
device_node
*
np
;
int
i
;
clk
[
VF610_CLK_DUMMY
]
=
imx_clk_fixed
(
"dummy"
,
0
);
clk
[
VF610_CLK_SIRC_128K
]
=
imx_clk_fixed
(
"sirc_128k"
,
128000
);
...
...
@@ -148,6 +156,9 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
clk
[
VF610_CLK_PLL5_MAIN
]
=
imx_clk_fixed_factor
(
"pll5_main"
,
"fast_clk_sel"
,
125
,
6
);
/* pll6: default 960Mhz */
clk
[
VF610_CLK_PLL6_MAIN
]
=
imx_clk_fixed_factor
(
"pll6_main"
,
"fast_clk_sel"
,
40
,
1
);
/* pll7: USB1 PLL at 480MHz */
clk
[
VF610_CLK_PLL7_MAIN
]
=
imx_clk_pllv3
(
IMX_PLLV3_USB
,
"pll7_main"
,
"fast_clk_sel"
,
PLL7_CTRL
,
0x2
);
clk
[
VF610_CLK_PLL1_PFD_SEL
]
=
imx_clk_mux
(
"pll1_pfd_sel"
,
CCM_CCSR
,
16
,
3
,
pll1_sels
,
5
);
clk
[
VF610_CLK_PLL2_PFD_SEL
]
=
imx_clk_mux
(
"pll2_pfd_sel"
,
CCM_CCSR
,
19
,
3
,
pll2_sels
,
5
);
clk
[
VF610_CLK_SYS_SEL
]
=
imx_clk_mux
(
"sys_sel"
,
CCM_CCSR
,
0
,
3
,
sys_sels
,
ARRAY_SIZE
(
sys_sels
));
...
...
@@ -160,8 +171,11 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
clk
[
VF610_CLK_PLL4_MAIN_DIV
]
=
clk_register_divider_table
(
NULL
,
"pll4_main_div"
,
"pll4_main"
,
0
,
CCM_CACRR
,
6
,
3
,
0
,
pll4_main_div_table
,
&
imx_ccm_lock
);
clk
[
VF610_CLK_PLL6_MAIN_DIV
]
=
imx_clk_divider
(
"pll6_main_div"
,
"pll6_main"
,
CCM_CACRR
,
21
,
1
);
clk
[
VF610_CLK_USBC0
]
=
imx_clk_gate2
(
"usbc0"
,
"pll3_main"
,
CCM_CCGR1
,
CCM_CCGRx_CGn
(
4
));
clk
[
VF610_CLK_USBC1
]
=
imx_clk_gate2
(
"usbc1"
,
"pll3_main"
,
CCM_CCGR7
,
CCM_CCGRx_CGn
(
4
));
clk
[
VF610_CLK_USBPHY0
]
=
imx_clk_gate
(
"usbphy0"
,
"pll3_main"
,
PLL3_CTRL
,
6
);
clk
[
VF610_CLK_USBPHY1
]
=
imx_clk_gate
(
"usbphy1"
,
"pll7_main"
,
PLL7_CTRL
,
6
);
clk
[
VF610_CLK_USBC0
]
=
imx_clk_gate2
(
"usbc0"
,
"ipg_bus"
,
CCM_CCGR1
,
CCM_CCGRx_CGn
(
4
));
clk
[
VF610_CLK_USBC1
]
=
imx_clk_gate2
(
"usbc1"
,
"ipg_bus"
,
CCM_CCGR7
,
CCM_CCGRx_CGn
(
4
));
clk
[
VF610_CLK_QSPI0_SEL
]
=
imx_clk_mux
(
"qspi0_sel"
,
CCM_CSCMR1
,
22
,
2
,
qspi_sels
,
4
);
clk
[
VF610_CLK_QSPI0_EN
]
=
imx_clk_gate
(
"qspi0_en"
,
"qspi0_sel"
,
CCM_CSCDR3
,
4
);
...
...
@@ -322,6 +336,9 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
clk_set_parent
(
clk
[
VF610_CLK_SAI2_SEL
],
clk
[
VF610_CLK_AUDIO_EXT
]);
clk_set_parent
(
clk
[
VF610_CLK_SAI3_SEL
],
clk
[
VF610_CLK_AUDIO_EXT
]);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
clks_init_on
);
i
++
)
clk_prepare_enable
(
clk
[
clks_init_on
[
i
]]);
/* Add the clocks to provider list */
clk_data
.
clks
=
clk
;
clk_data
.
clk_num
=
ARRAY_SIZE
(
clk
);
...
...
arch/arm/mach-imx/clk.h
View file @
155b2fd3
...
...
@@ -36,6 +36,9 @@ struct clk *clk_register_gate2(struct device *dev, const char *name,
struct
clk
*
imx_obtain_fixed_clock
(
const
char
*
name
,
unsigned
long
rate
);
struct
clk
*
imx_clk_gate_exclusive
(
const
char
*
name
,
const
char
*
parent
,
void
__iomem
*
reg
,
u8
shift
,
u32
exclusive_mask
);
static
inline
struct
clk
*
imx_clk_gate2
(
const
char
*
name
,
const
char
*
parent
,
void
__iomem
*
reg
,
u8
shift
)
{
...
...
arch/arm/mach-imx/common.h
View file @
155b2fd3
...
...
@@ -98,11 +98,9 @@ void imx_set_cpu_arg(int cpu, u32 arg);
void
v7_secondary_startup
(
void
);
void
imx_scu_map_io
(
void
);
void
imx_smp_prepare
(
void
);
void
imx_scu_standby_enable
(
void
);
#else
static
inline
void
imx_scu_map_io
(
void
)
{}
static
inline
void
imx_smp_prepare
(
void
)
{}
static
inline
void
imx_scu_standby_enable
(
void
)
{}
#endif
void
imx_src_init
(
void
);
void
imx_gpc_init
(
void
);
...
...
arch/arm/mach-imx/cpuidle-imx6q.c
View file @
155b2fd3
...
...
@@ -66,10 +66,6 @@ static struct cpuidle_driver imx6q_cpuidle_driver = {
int
__init
imx6q_cpuidle_init
(
void
)
{
/* Need to enable SCU standby for entering WAIT modes */
if
(
!
cpu_is_imx6sx
())
imx_scu_standby_enable
();
/* Set INT_MEM_CLK_LPM bit to get a reliable WAIT mode support */
imx6q_set_int_mem_clk_lpm
(
true
);
...
...
arch/arm/mach-imx/eukrea-baseboards.h
View file @
155b2fd3
...
...
@@ -27,23 +27,15 @@
* This CPU module needs a baseboard to work. After basic initializing
* its own devices, it calls baseboard's init function.
* TODO: Add your own baseboard init function and call it from
* inside eukrea_cpuimx25_init() eukrea_cpuimx27_init()
* eukrea_cpuimx35_init() eukrea_cpuimx51_init()
* or eukrea_cpuimx51sd_init().
* inside eukrea_cpuimx25_init() or eukrea_cpuimx35_init()
*
* This example here is for the development board. Refer
* mach-mx25/eukrea_mbimxsd-baseboard.c for cpuimx25
* mach-imx/eukrea_mbimx27-baseboard.c for cpuimx27
* mach-mx3/eukrea_mbimxsd-baseboard.c for cpuimx35
* mach-mx5/eukrea_mbimx51-baseboard.c for cpuimx51
* mach-mx5/eukrea_mbimxsd-baseboard.c for cpuimx51sd
*/
extern
void
eukrea_mbimxsd25_baseboard_init
(
void
);
extern
void
eukrea_mbimx27_baseboard_init
(
void
);
extern
void
eukrea_mbimxsd35_baseboard_init
(
void
);
extern
void
eukrea_mbimx51_baseboard_init
(
void
);
extern
void
eukrea_mbimxsd51_baseboard_init
(
void
);
#endif
...
...
arch/arm/mach-imx/eukrea_mbimx27-baseboard.c
deleted
100644 → 0
View file @
ee641009
/*
* Copyright (C) 2009-2010 Eric Benard - eric@eukrea.com
*
* Based on pcm970-baseboard.c which is :
* Copyright (C) 2008 Juergen Beisert (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/gpio.h>
#include <linux/irq.h>
#include <linux/platform_device.h>
#include <linux/spi/spi.h>
#include <linux/spi/ads7846.h>
#include <linux/backlight.h>
#include <video/platform_lcd.h>
#include <asm/mach/arch.h>
#include "common.h"
#include "devices-imx27.h"
#include "hardware.h"
#include "iomux-mx27.h"
static
const
int
eukrea_mbimx27_pins
[]
__initconst
=
{
/* UART2 */
PE3_PF_UART2_CTS
,
PE4_PF_UART2_RTS
,
PE6_PF_UART2_TXD
,
PE7_PF_UART2_RXD
,
/* UART3 */
PE8_PF_UART3_TXD
,
PE9_PF_UART3_RXD
,
PE10_PF_UART3_CTS
,
PE11_PF_UART3_RTS
,
/* UART4 */
#if !defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)
PB26_AF_UART4_RTS
,
PB28_AF_UART4_TXD
,
PB29_AF_UART4_CTS
,
PB31_AF_UART4_RXD
,
#endif
/* SDHC1*/
PE18_PF_SD1_D0
,
PE19_PF_SD1_D1
,
PE20_PF_SD1_D2
,
PE21_PF_SD1_D3
,
PE22_PF_SD1_CMD
,
PE23_PF_SD1_CLK
,
/* display */
PA5_PF_LSCLK
,
PA6_PF_LD0
,
PA7_PF_LD1
,
PA8_PF_LD2
,
PA9_PF_LD3
,
PA10_PF_LD4
,
PA11_PF_LD5
,
PA12_PF_LD6
,
PA13_PF_LD7
,
PA14_PF_LD8
,
PA15_PF_LD9
,
PA16_PF_LD10
,
PA17_PF_LD11
,
PA18_PF_LD12
,
PA19_PF_LD13
,
PA20_PF_LD14
,
PA21_PF_LD15
,
PA22_PF_LD16
,
PA23_PF_LD17
,
PA28_PF_HSYNC
,
PA29_PF_VSYNC
,
PA30_PF_CONTRAST
,
PA31_PF_OE_ACD
,
/* SPI1 */
PD29_PF_CSPI1_SCLK
,
PD30_PF_CSPI1_MISO
,
PD31_PF_CSPI1_MOSI
,
/* SSI4 */
#if defined(CONFIG_SND_SOC_EUKREA_TLV320) \
|| defined(CONFIG_SND_SOC_EUKREA_TLV320_MODULE)
PC16_PF_SSI4_FS
,
PC17_PF_SSI4_RXD
|
GPIO_PUEN
,
PC18_PF_SSI4_TXD
|
GPIO_PUEN
,
PC19_PF_SSI4_CLK
,
#endif
};
static
const
uint32_t
eukrea_mbimx27_keymap
[]
=
{
KEY
(
0
,
0
,
KEY_UP
),
KEY
(
0
,
1
,
KEY_DOWN
),
KEY
(
1
,
0
,
KEY_RIGHT
),
KEY
(
1
,
1
,
KEY_LEFT
),
};
static
const
struct
matrix_keymap_data
eukrea_mbimx27_keymap_data
__initconst
=
{
.
keymap
=
eukrea_mbimx27_keymap
,
.
keymap_size
=
ARRAY_SIZE
(
eukrea_mbimx27_keymap
),
};
static
const
struct
gpio_led
eukrea_mbimx27_gpio_leds
[]
__initconst
=
{
{
.
name
=
"led1"
,
.
default_trigger
=
"heartbeat"
,
.
active_low
=
1
,
.
gpio
=
GPIO_PORTF
|
16
,
},
{
.
name
=
"led2"
,
.
default_trigger
=
"none"
,
.
active_low
=
1
,
.
gpio
=
GPIO_PORTF
|
19
,
},
};
static
const
struct
gpio_led_platform_data
eukrea_mbimx27_gpio_led_info
__initconst
=
{
.
leds
=
eukrea_mbimx27_gpio_leds
,
.
num_leds
=
ARRAY_SIZE
(
eukrea_mbimx27_gpio_leds
),
};
static
struct
imx_fb_videomode
eukrea_mbimx27_modes
[]
=
{
{
.
mode
=
{
.
name
=
"CMO-QVGA"
,
.
refresh
=
60
,
.
xres
=
320
,
.
yres
=
240
,
.
pixclock
=
156000
,
.
hsync_len
=
30
,
.
left_margin
=
38
,
.
right_margin
=
20
,
.
vsync_len
=
3
,
.
upper_margin
=
15
,
.
lower_margin
=
4
,
},
.
pcr
=
0xFAD08B80
,
.
bpp
=
16
,
},
{
.
mode
=
{
.
name
=
"DVI-VGA"
,
.
refresh
=
60
,
.
xres
=
640
,
.
yres
=
480
,
.
pixclock
=
32000
,
.
hsync_len
=
1
,
.
left_margin
=
35
,
.
right_margin
=
0
,
.
vsync_len
=
1
,
.
upper_margin
=
7
,
.
lower_margin
=
0
,
},
.
pcr
=
0xFA208B80
,
.
bpp
=
16
,
},
{
.
mode
=
{
.
name
=
"DVI-SVGA"
,
.
refresh
=
60
,
.
xres
=
800
,
.
yres
=
600
,
.
pixclock
=
25000
,
.
hsync_len
=
1
,
.
left_margin
=
35
,
.
right_margin
=
0
,
.
vsync_len
=
1
,
.
upper_margin
=
7
,
.
lower_margin
=
0
,
},
.
pcr
=
0xFA208B80
,
.
bpp
=
16
,
},
};
static
const
struct
imx_fb_platform_data
eukrea_mbimx27_fb_data
__initconst
=
{
.
mode
=
eukrea_mbimx27_modes
,
.
num_modes
=
ARRAY_SIZE
(
eukrea_mbimx27_modes
),
.
pwmr
=
0x00A903FF
,
.
lscr1
=
0x00120300
,
.
dmacr
=
0x00040060
,
};
static
void
eukrea_mbimx27_bl_set_intensity
(
int
intensity
)
{
if
(
intensity
)
gpio_direction_output
(
GPIO_PORTE
|
5
,
1
);
else
gpio_direction_output
(
GPIO_PORTE
|
5
,
0
);
}
static
struct
generic_bl_info
eukrea_mbimx27_bl_info
=
{
.
name
=
"eukrea_mbimx27-bl"
,
.
max_intensity
=
0xff
,
.
default_intensity
=
0xff
,
.
set_bl_intensity
=
eukrea_mbimx27_bl_set_intensity
,
};
static
struct
platform_device
eukrea_mbimx27_bl_dev
=
{
.
name
=
"generic-bl"
,
.
id
=
1
,
.
dev
=
{
.
platform_data
=
&
eukrea_mbimx27_bl_info
,
},
};
static
void
eukrea_mbimx27_lcd_power_set
(
struct
plat_lcd_data
*
pd
,
unsigned
int
power
)
{
if
(
power
)
gpio_direction_output
(
GPIO_PORTA
|
25
,
1
);
else
gpio_direction_output
(
GPIO_PORTA
|
25
,
0
);
}
static
struct
plat_lcd_data
eukrea_mbimx27_lcd_power_data
=
{
.
set_power
=
eukrea_mbimx27_lcd_power_set
,
};
static
struct
platform_device
eukrea_mbimx27_lcd_powerdev
=
{
.
name
=
"platform-lcd"
,
.
dev
.
platform_data
=
&
eukrea_mbimx27_lcd_power_data
,
};
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
#define ADS7846_PENDOWN (GPIO_PORTD | 25)
static
void
__maybe_unused
ads7846_dev_init
(
void
)
{
if
(
gpio_request
(
ADS7846_PENDOWN
,
"ADS7846 pendown"
)
<
0
)
{
printk
(
KERN_ERR
"can't get ads7846 pen down GPIO
\n
"
);
return
;
}
gpio_direction_input
(
ADS7846_PENDOWN
);
}
static
int
ads7846_get_pendown_state
(
void
)
{
return
!
gpio_get_value
(
ADS7846_PENDOWN
);
}
static
struct
ads7846_platform_data
ads7846_config
__initdata
=
{
.
get_pendown_state
=
ads7846_get_pendown_state
,
.
keep_vref_on
=
1
,
};
static
struct
spi_board_info
__maybe_unused
eukrea_mbimx27_spi_board_info
[]
__initdata
=
{
[
0
]
=
{
.
modalias
=
"ads7846"
,
.
bus_num
=
0
,
.
chip_select
=
0
,
.
max_speed_hz
=
1500000
,
/* irq number is run-time assigned */
.
platform_data
=
&
ads7846_config
,
.
mode
=
SPI_MODE_2
,
},
};
static
int
eukrea_mbimx27_spi_cs
[]
=
{
GPIO_PORTD
|
28
};
static
const
struct
spi_imx_master
eukrea_mbimx27_spi0_data
__initconst
=
{
.
chipselect
=
eukrea_mbimx27_spi_cs
,
.
num_chipselect
=
ARRAY_SIZE
(
eukrea_mbimx27_spi_cs
),
};
static
struct
i2c_board_info
eukrea_mbimx27_i2c_devices
[]
=
{
{
I2C_BOARD_INFO
(
"tlv320aic23"
,
0x1a
),
},
};
static
const
struct
imxmmc_platform_data
sdhc_pdata
__initconst
=
{
.
dat3_card_detect
=
1
,
};
static
const
struct
imx_ssi_platform_data
eukrea_mbimx27_ssi_pdata
__initconst
=
{
.
flags
=
IMX_SSI_DMA
|
IMX_SSI_USE_I2S_SLAVE
,
};
/*
* system init for baseboard usage. Will be called by cpuimx27 init.
*
* Add platform devices present on this baseboard and init
* them from CPU side as far as required to use them later on
*/
void
__init
eukrea_mbimx27_baseboard_init
(
void
)
{
mxc_gpio_setup_multiple_pins
(
eukrea_mbimx27_pins
,
ARRAY_SIZE
(
eukrea_mbimx27_pins
),
"MBIMX27"
);
imx27_add_imx_uart1
(
&
uart_pdata
);
imx27_add_imx_uart2
(
&
uart_pdata
);
#if !defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)
imx27_add_imx_uart3
(
&
uart_pdata
);
#endif
imx27_add_imx_fb
(
&
eukrea_mbimx27_fb_data
);
imx27_add_mxc_mmc
(
0
,
&
sdhc_pdata
);
i2c_register_board_info
(
0
,
eukrea_mbimx27_i2c_devices
,
ARRAY_SIZE
(
eukrea_mbimx27_i2c_devices
));
imx27_add_imx_ssi
(
0
,
&
eukrea_mbimx27_ssi_pdata
);
#if defined(CONFIG_TOUCHSCREEN_ADS7846) \
|| defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
/* ADS7846 Touchscreen controller init */
mxc_gpio_mode
(
GPIO_PORTD
|
25
|
GPIO_GPIO
|
GPIO_IN
);
ads7846_dev_init
();
#endif
/* SPI_CS0 init */
mxc_gpio_mode
(
GPIO_PORTD
|
28
|
GPIO_GPIO
|
GPIO_OUT
);
imx27_add_spi_imx0
(
&
eukrea_mbimx27_spi0_data
);
eukrea_mbimx27_spi_board_info
[
0
].
irq
=
gpio_to_irq
(
IMX_GPIO_NR
(
4
,
25
));
spi_register_board_info
(
eukrea_mbimx27_spi_board_info
,
ARRAY_SIZE
(
eukrea_mbimx27_spi_board_info
));
/* Leds configuration */
mxc_gpio_mode
(
GPIO_PORTF
|
16
|
GPIO_GPIO
|
GPIO_OUT
);
mxc_gpio_mode
(
GPIO_PORTF
|
19
|
GPIO_GPIO
|
GPIO_OUT
);
/* Backlight */
mxc_gpio_mode
(
GPIO_PORTE
|
5
|
GPIO_GPIO
|
GPIO_OUT
);
gpio_request
(
GPIO_PORTE
|
5
,
"backlight"
);
platform_device_register
(
&
eukrea_mbimx27_bl_dev
);
/* LCD Reset */
mxc_gpio_mode
(
GPIO_PORTA
|
25
|
GPIO_GPIO
|
GPIO_OUT
);
gpio_request
(
GPIO_PORTA
|
25
,
"lcd_enable"
);
platform_device_register
(
&
eukrea_mbimx27_lcd_powerdev
);
imx27_add_imx_keypad
(
&
eukrea_mbimx27_keymap_data
);
gpio_led_register_device
(
-
1
,
&
eukrea_mbimx27_gpio_led_info
);
imx_add_platform_device
(
"eukrea_tlv320"
,
0
,
NULL
,
0
,
NULL
,
0
);
}
arch/arm/mach-imx/imx1-dt.c
0 → 100644
View file @
155b2fd3
/*
* Copyright (C) 2014 Alexander Shiyan <shc_work@mail.ru>
*
* 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.
*/
#include <linux/of_platform.h>
#include <asm/mach/arch.h>
#include "common.h"
static
const
char
*
const
imx1_dt_board_compat
[]
__initconst
=
{
"fsl,imx1"
,
NULL
};
DT_MACHINE_START
(
IMX1_DT
,
"Freescale i.MX1 (Device Tree Support)"
)
.
map_io
=
mx1_map_io
,
.
init_early
=
imx1_init_early
,
.
init_irq
=
mx1_init_irq
,
.
dt_compat
=
imx1_dt_board_compat
,
.
restart
=
mxc_restart
,
MACHINE_END
arch/arm/mach-imx/iomux-imx31.c
View file @
155b2fd3
...
...
@@ -64,7 +64,6 @@ int mxc_iomux_mode(unsigned int pin_mode)
return
ret
;
}
EXPORT_SYMBOL
(
mxc_iomux_mode
);
/*
* This function configures the pad value for a IOMUX pin.
...
...
@@ -90,7 +89,6 @@ void mxc_iomux_set_pad(enum iomux_pins pin, u32 config)
spin_unlock
(
&
gpio_mux_lock
);
}
EXPORT_SYMBOL
(
mxc_iomux_set_pad
);
/*
* allocs a single pin:
...
...
@@ -116,7 +114,6 @@ int mxc_iomux_alloc_pin(unsigned int pin, const char *label)
return
0
;
}
EXPORT_SYMBOL
(
mxc_iomux_alloc_pin
);
int
mxc_iomux_setup_multiple_pins
(
const
unsigned
int
*
pin_list
,
unsigned
count
,
const
char
*
label
)
...
...
@@ -137,7 +134,6 @@ int mxc_iomux_setup_multiple_pins(const unsigned int *pin_list, unsigned count,
mxc_iomux_release_multiple_pins
(
pin_list
,
i
);
return
ret
;
}
EXPORT_SYMBOL
(
mxc_iomux_setup_multiple_pins
);
void
mxc_iomux_release_pin
(
unsigned
int
pin
)
{
...
...
@@ -146,7 +142,6 @@ void mxc_iomux_release_pin(unsigned int pin)
if
(
pad
<
(
PIN_MAX
+
1
))
clear_bit
(
pad
,
mxc_pin_alloc_map
);
}
EXPORT_SYMBOL
(
mxc_iomux_release_pin
);
void
mxc_iomux_release_multiple_pins
(
const
unsigned
int
*
pin_list
,
int
count
)
{
...
...
@@ -158,7 +153,6 @@ void mxc_iomux_release_multiple_pins(const unsigned int *pin_list, int count)
p
++
;
}
}
EXPORT_SYMBOL
(
mxc_iomux_release_multiple_pins
);
/*
* This function enables/disables the general purpose function for a particular
...
...
@@ -178,4 +172,3 @@ void mxc_iomux_set_gpr(enum iomux_gp_func gp, bool en)
__raw_writel
(
l
,
IOMUXGPR
);
spin_unlock
(
&
gpio_mux_lock
);
}
EXPORT_SYMBOL
(
mxc_iomux_set_gpr
);
arch/arm/mach-imx/iomux-v1.c
View file @
155b2fd3
...
...
@@ -153,7 +153,6 @@ int mxc_gpio_mode(int gpio_mode)
return
0
;
}
EXPORT_SYMBOL
(
mxc_gpio_mode
);
static
int
imx_iomuxv1_setup_multiple
(
const
int
*
list
,
unsigned
count
)
{
...
...
@@ -178,7 +177,6 @@ int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count,
ret
=
imx_iomuxv1_setup_multiple
(
pin_list
,
count
);
return
ret
;
}
EXPORT_SYMBOL
(
mxc_gpio_setup_multiple_pins
);
int
__init
imx_iomuxv1_init
(
void
__iomem
*
base
,
int
numports
)
{
...
...
arch/arm/mach-imx/iomux-v3.c
View file @
155b2fd3
...
...
@@ -55,7 +55,6 @@ int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
return
0
;
}
EXPORT_SYMBOL
(
mxc_iomux_v3_setup_pad
);
int
mxc_iomux_v3_setup_multiple_pads
(
iomux_v3_cfg_t
*
pad_list
,
unsigned
count
)
{
...
...
@@ -71,7 +70,6 @@ int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count)
}
return
0
;
}
EXPORT_SYMBOL
(
mxc_iomux_v3_setup_multiple_pads
);
void
mxc_iomux_v3_init
(
void
__iomem
*
iomux_v3_base
)
{
...
...
arch/arm/mach-imx/mach-armadillo5x0.c
View file @
155b2fd3
...
...
@@ -537,7 +537,7 @@ static void __init armadillo5x0_init(void)
gpio_free
(
ARMADILLO5X0_RTC_GPIO
);
}
if
(
armadillo5x0_i2c_rtc
.
irq
==
0
)
pr_warn
ing
(
"armadillo5x0_init: failed to get RTC IRQ
\n
"
);
pr_warn
(
"armadillo5x0_init: failed to get RTC IRQ
\n
"
);
i2c_register_board_info
(
1
,
&
armadillo5x0_i2c_rtc
,
1
);
/* USB */
...
...
arch/arm/mach-imx/mach-cpuimx27.c
deleted
100644 → 0
View file @
ee641009
/*
* Copyright (C) 2009 Eric Benard - eric@eukrea.com
*
* Based on pcm038.c which is :
* Copyright 2007 Robert Schwebel <r.schwebel@pengutronix.de>, Pengutronix
* Copyright (C) 2008 Juergen Beisert (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/i2c.h>
#include <linux/io.h>
#include <linux/mtd/plat-ram.h>
#include <linux/mtd/physmap.h>
#include <linux/platform_device.h>
#include <linux/serial_8250.h>
#include <linux/usb/otg.h>
#include <linux/usb/ulpi.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include <asm/mach/map.h>
#include "common.h"
#include "devices-imx27.h"
#include "ehci.h"
#include "eukrea-baseboards.h"
#include "hardware.h"
#include "iomux-mx27.h"
#include "ulpi.h"
static
const
int
eukrea_cpuimx27_pins
[]
__initconst
=
{
/* UART1 */
PE12_PF_UART1_TXD
,
PE13_PF_UART1_RXD
,
PE14_PF_UART1_CTS
,
PE15_PF_UART1_RTS
,
/* UART4 */
#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)
PB26_AF_UART4_RTS
,
PB28_AF_UART4_TXD
,
PB29_AF_UART4_CTS
,
PB31_AF_UART4_RXD
,
#endif
/* FEC */
PD0_AIN_FEC_TXD0
,
PD1_AIN_FEC_TXD1
,
PD2_AIN_FEC_TXD2
,
PD3_AIN_FEC_TXD3
,
PD4_AOUT_FEC_RX_ER
,
PD5_AOUT_FEC_RXD1
,
PD6_AOUT_FEC_RXD2
,
PD7_AOUT_FEC_RXD3
,
PD8_AF_FEC_MDIO
,
PD9_AIN_FEC_MDC
,
PD10_AOUT_FEC_CRS
,
PD11_AOUT_FEC_TX_CLK
,
PD12_AOUT_FEC_RXD0
,
PD13_AOUT_FEC_RX_DV
,
PD14_AOUT_FEC_RX_CLK
,
PD15_AOUT_FEC_COL
,
PD16_AIN_FEC_TX_ER
,
PF23_AIN_FEC_TX_EN
,
/* I2C1 */
PD17_PF_I2C_DATA
,
PD18_PF_I2C_CLK
,
/* SDHC2 */
#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USESDHC2)
PB4_PF_SD2_D0
,
PB5_PF_SD2_D1
,
PB6_PF_SD2_D2
,
PB7_PF_SD2_D3
,
PB8_PF_SD2_CMD
,
PB9_PF_SD2_CLK
,
#endif
#if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE)
/* Quad UART's IRQ */
GPIO_PORTB
|
22
|
GPIO_GPIO
|
GPIO_IN
,
GPIO_PORTB
|
23
|
GPIO_GPIO
|
GPIO_IN
,
GPIO_PORTB
|
27
|
GPIO_GPIO
|
GPIO_IN
,
GPIO_PORTB
|
30
|
GPIO_GPIO
|
GPIO_IN
,
#endif
/* OTG */
PC7_PF_USBOTG_DATA5
,
PC8_PF_USBOTG_DATA6
,
PC9_PF_USBOTG_DATA0
,
PC10_PF_USBOTG_DATA2
,
PC11_PF_USBOTG_DATA1
,
PC12_PF_USBOTG_DATA4
,
PC13_PF_USBOTG_DATA3
,
PE0_PF_USBOTG_NXT
,
PE1_PF_USBOTG_STP
,
PE2_PF_USBOTG_DIR
,
PE24_PF_USBOTG_CLK
,
PE25_PF_USBOTG_DATA7
,
/* USBH2 */
PA0_PF_USBH2_CLK
,
PA1_PF_USBH2_DIR
,
PA2_PF_USBH2_DATA7
,
PA3_PF_USBH2_NXT
,
PA4_PF_USBH2_STP
,
PD19_AF_USBH2_DATA4
,
PD20_AF_USBH2_DATA3
,
PD21_AF_USBH2_DATA6
,
PD22_AF_USBH2_DATA0
,
PD23_AF_USBH2_DATA2
,
PD24_AF_USBH2_DATA1
,
PD26_AF_USBH2_DATA5
,
};
static
struct
physmap_flash_data
eukrea_cpuimx27_flash_data
=
{
.
width
=
2
,
};
static
struct
resource
eukrea_cpuimx27_flash_resource
=
{
.
start
=
0xc0000000
,
.
end
=
0xc3ffffff
,
.
flags
=
IORESOURCE_MEM
,
};
static
struct
platform_device
eukrea_cpuimx27_nor_mtd_device
=
{
.
name
=
"physmap-flash"
,
.
id
=
0
,
.
dev
=
{
.
platform_data
=
&
eukrea_cpuimx27_flash_data
,
},
.
num_resources
=
1
,
.
resource
=
&
eukrea_cpuimx27_flash_resource
,
};
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
static
const
struct
mxc_nand_platform_data
cpuimx27_nand_board_info
__initconst
=
{
.
width
=
1
,
.
hw_ecc
=
1
,
};
static
struct
platform_device
*
platform_devices
[]
__initdata
=
{
&
eukrea_cpuimx27_nor_mtd_device
,
};
static
const
struct
imxi2c_platform_data
cpuimx27_i2c1_data
__initconst
=
{
.
bitrate
=
100000
,
};
static
struct
i2c_board_info
eukrea_cpuimx27_i2c_devices
[]
=
{
{
I2C_BOARD_INFO
(
"pcf8563"
,
0x51
),
},
};
#if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE)
static
struct
plat_serial8250_port
serial_platform_data
[]
=
{
{
.
mapbase
=
(
unsigned
long
)(
MX27_CS3_BASE_ADDR
+
0x200000
),
/* irq number is run-time assigned */
.
uartclk
=
14745600
,
.
regshift
=
1
,
.
iotype
=
UPIO_MEM
,
.
flags
=
UPF_BOOT_AUTOCONF
|
UPF_SKIP_TEST
|
UPF_IOREMAP
,
},
{
.
mapbase
=
(
unsigned
long
)(
MX27_CS3_BASE_ADDR
+
0x400000
),
/* irq number is run-time assigned */
.
uartclk
=
14745600
,
.
regshift
=
1
,
.
iotype
=
UPIO_MEM
,
.
flags
=
UPF_BOOT_AUTOCONF
|
UPF_SKIP_TEST
|
UPF_IOREMAP
,
},
{
.
mapbase
=
(
unsigned
long
)(
MX27_CS3_BASE_ADDR
+
0x800000
),
/* irq number is run-time assigned */
.
uartclk
=
14745600
,
.
regshift
=
1
,
.
iotype
=
UPIO_MEM
,
.
flags
=
UPF_BOOT_AUTOCONF
|
UPF_SKIP_TEST
|
UPF_IOREMAP
,
},
{
.
mapbase
=
(
unsigned
long
)(
MX27_CS3_BASE_ADDR
+
0x1000000
),
/* irq number is run-time assigned */
.
uartclk
=
14745600
,
.
regshift
=
1
,
.
iotype
=
UPIO_MEM
,
.
flags
=
UPF_BOOT_AUTOCONF
|
UPF_SKIP_TEST
|
UPF_IOREMAP
,
},
{
}
};
static
struct
platform_device
serial_device
=
{
.
name
=
"serial8250"
,
.
id
=
0
,
.
dev
=
{
.
platform_data
=
serial_platform_data
,
},
};
#endif
static
int
eukrea_cpuimx27_otg_init
(
struct
platform_device
*
pdev
)
{
return
mx27_initialize_usb_hw
(
pdev
->
id
,
MXC_EHCI_INTERFACE_DIFF_UNI
);
}
static
struct
mxc_usbh_platform_data
otg_pdata
__initdata
=
{
.
init
=
eukrea_cpuimx27_otg_init
,
.
portsc
=
MXC_EHCI_MODE_ULPI
,
};
static
int
eukrea_cpuimx27_usbh2_init
(
struct
platform_device
*
pdev
)
{
return
mx27_initialize_usb_hw
(
pdev
->
id
,
MXC_EHCI_INTERFACE_DIFF_UNI
);
}
static
struct
mxc_usbh_platform_data
usbh2_pdata
__initdata
=
{
.
init
=
eukrea_cpuimx27_usbh2_init
,
.
portsc
=
MXC_EHCI_MODE_ULPI
,
};
static
const
struct
fsl_usb2_platform_data
otg_device_pdata
__initconst
=
{
.
operating_mode
=
FSL_USB2_DR_DEVICE
,
.
phy_mode
=
FSL_USB2_PHY_ULPI
,
};
static
bool
otg_mode_host
__initdata
;
static
int
__init
eukrea_cpuimx27_otg_mode
(
char
*
options
)
{
if
(
!
strcmp
(
options
,
"host"
))
otg_mode_host
=
true
;
else
if
(
!
strcmp
(
options
,
"device"
))
otg_mode_host
=
false
;
else
pr_info
(
"otg_mode neither
\"
host
\"
nor
\"
device
\"
. "
"Defaulting to device
\n
"
);
return
1
;
}
__setup
(
"otg_mode="
,
eukrea_cpuimx27_otg_mode
);
static
void
__init
eukrea_cpuimx27_init
(
void
)
{
imx27_soc_init
();
mxc_gpio_setup_multiple_pins
(
eukrea_cpuimx27_pins
,
ARRAY_SIZE
(
eukrea_cpuimx27_pins
),
"CPUIMX27"
);
imx27_add_imx_uart0
(
&
uart_pdata
);
imx27_add_mxc_nand
(
&
cpuimx27_nand_board_info
);
i2c_register_board_info
(
0
,
eukrea_cpuimx27_i2c_devices
,
ARRAY_SIZE
(
eukrea_cpuimx27_i2c_devices
));
imx27_add_imx_i2c
(
0
,
&
cpuimx27_i2c1_data
);
imx27_add_fec
(
NULL
);
platform_add_devices
(
platform_devices
,
ARRAY_SIZE
(
platform_devices
));
imx27_add_imx2_wdt
();
imx27_add_mxc_w1
();
#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USESDHC2)
/* SDHC2 can be used for Wifi */
imx27_add_mxc_mmc
(
1
,
NULL
);
#endif
#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)
/* in which case UART4 is also used for Bluetooth */
imx27_add_imx_uart3
(
&
uart_pdata
);
#endif
#if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE)
serial_platform_data
[
0
].
irq
=
IMX_GPIO_NR
(
2
,
23
);
serial_platform_data
[
1
].
irq
=
IMX_GPIO_NR
(
2
,
22
);
serial_platform_data
[
2
].
irq
=
IMX_GPIO_NR
(
2
,
27
);
serial_platform_data
[
3
].
irq
=
IMX_GPIO_NR
(
2
,
30
);
platform_device_register
(
&
serial_device
);
#endif
if
(
otg_mode_host
)
{
otg_pdata
.
otg
=
imx_otg_ulpi_create
(
ULPI_OTG_DRVVBUS
|
ULPI_OTG_DRVVBUS_EXT
);
if
(
otg_pdata
.
otg
)
imx27_add_mxc_ehci_otg
(
&
otg_pdata
);
}
else
{
imx27_add_fsl_usb2_udc
(
&
otg_device_pdata
);
}
usbh2_pdata
.
otg
=
imx_otg_ulpi_create
(
ULPI_OTG_DRVVBUS
|
ULPI_OTG_DRVVBUS_EXT
);
if
(
usbh2_pdata
.
otg
)
imx27_add_mxc_ehci_hs
(
2
,
&
usbh2_pdata
);
#ifdef CONFIG_MACH_EUKREA_MBIMX27_BASEBOARD
eukrea_mbimx27_baseboard_init
();
#endif
}
static
void
__init
eukrea_cpuimx27_timer_init
(
void
)
{
mx27_clocks_init
(
26000000
);
}
MACHINE_START
(
EUKREA_CPUIMX27
,
"EUKREA CPUIMX27"
)
.
atag_offset
=
0x100
,
.
map_io
=
mx27_map_io
,
.
init_early
=
imx27_init_early
,
.
init_irq
=
mx27_init_irq
,
.
init_time
=
eukrea_cpuimx27_timer_init
,
.
init_machine
=
eukrea_cpuimx27_init
,
.
restart
=
mxc_restart
,
MACHINE_END
arch/arm/mach-imx/mach-imx6sx.c
View file @
155b2fd3
...
...
@@ -42,6 +42,9 @@ static void __init imx6sx_init_irq(void)
static
void
__init
imx6sx_init_late
(
void
)
{
imx6q_cpuidle_init
();
if
(
IS_ENABLED
(
CONFIG_ARM_IMX6Q_CPUFREQ
))
platform_device_register_simple
(
"imx6q-cpufreq"
,
-
1
,
NULL
,
0
);
}
static
const
char
*
const
imx6sx_dt_compat
[]
__initconst
=
{
...
...
arch/arm/mach-imx/mach-mx1ads.c
deleted
100644 → 0
View file @
ee641009
/*
* arch/arm/mach-imx/mach-mx1ads.c
*
* Initially based on:
* linux-2.6.7-imx/arch/arm/mach-imx/scb9328.c
* Copyright (c) 2004 Sascha Hauer <sascha@saschahauer.de>
*
* 2004 (c) MontaVista Software, Inc.
*
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed "as is" without any
* warranty of any kind, whether express or implied.
*/
#include <linux/i2c.h>
#include <linux/i2c/pcf857x.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/mtd/physmap.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include "common.h"
#include "devices-imx1.h"
#include "hardware.h"
#include "iomux-mx1.h"
static
const
int
mx1ads_pins
[]
__initconst
=
{
/* UART1 */
PC9_PF_UART1_CTS
,
PC10_PF_UART1_RTS
,
PC11_PF_UART1_TXD
,
PC12_PF_UART1_RXD
,
/* UART2 */
PB28_PF_UART2_CTS
,
PB29_PF_UART2_RTS
,
PB30_PF_UART2_TXD
,
PB31_PF_UART2_RXD
,
/* I2C */
PA15_PF_I2C_SDA
,
PA16_PF_I2C_SCL
,
/* SPI */
PC13_PF_SPI1_SPI_RDY
,
PC14_PF_SPI1_SCLK
,
PC15_PF_SPI1_SS
,
PC16_PF_SPI1_MISO
,
PC17_PF_SPI1_MOSI
,
};
/*
* UARTs platform data
*/
static
const
struct
imxuart_platform_data
uart0_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
static
const
struct
imxuart_platform_data
uart1_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
/*
* Physmap flash
*/
static
const
struct
physmap_flash_data
mx1ads_flash_data
__initconst
=
{
.
width
=
4
,
/* bankwidth in bytes */
};
static
const
struct
resource
flash_resource
__initconst
=
{
.
start
=
MX1_CS0_PHYS
,
.
end
=
MX1_CS0_PHYS
+
SZ_32M
-
1
,
.
flags
=
IORESOURCE_MEM
,
};
/*
* I2C
*/
static
struct
pcf857x_platform_data
pcf857x_data
[]
=
{
{
.
gpio_base
=
4
*
32
,
},
{
.
gpio_base
=
4
*
32
+
16
,
}
};
static
const
struct
imxi2c_platform_data
mx1ads_i2c_data
__initconst
=
{
.
bitrate
=
100000
,
};
static
struct
i2c_board_info
mx1ads_i2c_devices
[]
=
{
{
I2C_BOARD_INFO
(
"pcf8575"
,
0x22
),
.
platform_data
=
&
pcf857x_data
[
0
],
},
{
I2C_BOARD_INFO
(
"pcf8575"
,
0x24
),
.
platform_data
=
&
pcf857x_data
[
1
],
},
};
/*
* Board init
*/
static
void
__init
mx1ads_init
(
void
)
{
imx1_soc_init
();
mxc_gpio_setup_multiple_pins
(
mx1ads_pins
,
ARRAY_SIZE
(
mx1ads_pins
),
"mx1ads"
);
/* UART */
imx1_add_imx_uart0
(
&
uart0_pdata
);
imx1_add_imx_uart1
(
&
uart1_pdata
);
/* Physmap flash */
platform_device_register_resndata
(
NULL
,
"physmap-flash"
,
0
,
&
flash_resource
,
1
,
&
mx1ads_flash_data
,
sizeof
(
mx1ads_flash_data
));
/* I2C */
i2c_register_board_info
(
0
,
mx1ads_i2c_devices
,
ARRAY_SIZE
(
mx1ads_i2c_devices
));
imx1_add_imx_i2c
(
&
mx1ads_i2c_data
);
}
static
void
__init
mx1ads_timer_init
(
void
)
{
mx1_clocks_init
(
32000
);
}
MACHINE_START
(
MX1ADS
,
"Freescale MX1ADS"
)
/* Maintainer: Sascha Hauer, Pengutronix */
.
atag_offset
=
0x100
,
.
map_io
=
mx1_map_io
,
.
init_early
=
imx1_init_early
,
.
init_irq
=
mx1_init_irq
,
.
init_time
=
mx1ads_timer_init
,
.
init_machine
=
mx1ads_init
,
.
restart
=
mxc_restart
,
MACHINE_END
MACHINE_START
(
MXLADS
,
"Freescale MXLADS"
)
.
atag_offset
=
0x100
,
.
map_io
=
mx1_map_io
,
.
init_early
=
imx1_init_early
,
.
init_irq
=
mx1_init_irq
,
.
init_time
=
mx1ads_timer_init
,
.
init_machine
=
mx1ads_init
,
.
restart
=
mxc_restart
,
MACHINE_END
arch/arm/mach-imx/mach-mx31_3ds.c
View file @
155b2fd3
...
...
@@ -307,7 +307,7 @@ static int mx31_3ds_sdhc1_init(struct device *dev,
ret
=
gpio_request_array
(
mx31_3ds_sdhc1_gpios
,
ARRAY_SIZE
(
mx31_3ds_sdhc1_gpios
));
if
(
ret
)
{
pr_warn
ing
(
"Unable to request the SD/MMC GPIOs.
\n
"
);
pr_warn
(
"Unable to request the SD/MMC GPIOs.
\n
"
);
return
ret
;
}
...
...
@@ -316,7 +316,7 @@ static int mx31_3ds_sdhc1_init(struct device *dev,
IRQF_TRIGGER_FALLING
|
IRQF_TRIGGER_RISING
,
"sdhc1-detect"
,
data
);
if
(
ret
)
{
pr_warn
ing
(
"Unable to request the SD/MMC card-detect IRQ.
\n
"
);
pr_warn
(
"Unable to request the SD/MMC card-detect IRQ.
\n
"
);
goto
gpio_free
;
}
...
...
arch/arm/mach-imx/mach-mx31lite.c
View file @
155b2fd3
...
...
@@ -270,7 +270,7 @@ static void __init mx31lite_init(void)
/* SMSC9117 IRQ pin */
ret
=
gpio_request
(
IOMUX_TO_GPIO
(
MX31_PIN_SFS6
),
"sms9117-irq"
);
if
(
ret
)
pr_warn
ing
(
"could not get LAN irq gpio
\n
"
);
pr_warn
(
"could not get LAN irq gpio
\n
"
);
else
{
gpio_direction_input
(
IOMUX_TO_GPIO
(
MX31_PIN_SFS6
));
smsc911x_resources
[
1
].
start
=
...
...
arch/arm/mach-imx/mach-mxt_td60.c
deleted
100644 → 0
View file @
ee641009
/*
* Copyright (C) 2000 Deep Blue Solutions Ltd
* Copyright (C) 2002 Shane Nay (shane@minirl.com)
* Copyright 2006-2007 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/platform_device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/map.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/physmap.h>
#include <linux/i2c.h>
#include <linux/irq.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include <asm/mach/map.h>
#include <linux/gpio.h>
#include <linux/platform_data/pca953x.h>
#include "common.h"
#include "devices-imx27.h"
#include "hardware.h"
#include "iomux-mx27.h"
static
const
int
mxt_td60_pins
[]
__initconst
=
{
/* UART0 */
PE12_PF_UART1_TXD
,
PE13_PF_UART1_RXD
,
PE14_PF_UART1_CTS
,
PE15_PF_UART1_RTS
,
/* UART1 */
PE3_PF_UART2_CTS
,
PE4_PF_UART2_RTS
,
PE6_PF_UART2_TXD
,
PE7_PF_UART2_RXD
,
/* UART2 */
PE8_PF_UART3_TXD
,
PE9_PF_UART3_RXD
,
PE10_PF_UART3_CTS
,
PE11_PF_UART3_RTS
,
/* FEC */
PD0_AIN_FEC_TXD0
,
PD1_AIN_FEC_TXD1
,
PD2_AIN_FEC_TXD2
,
PD3_AIN_FEC_TXD3
,
PD4_AOUT_FEC_RX_ER
,
PD5_AOUT_FEC_RXD1
,
PD6_AOUT_FEC_RXD2
,
PD7_AOUT_FEC_RXD3
,
PD8_AF_FEC_MDIO
,
PD9_AIN_FEC_MDC
,
PD10_AOUT_FEC_CRS
,
PD11_AOUT_FEC_TX_CLK
,
PD12_AOUT_FEC_RXD0
,
PD13_AOUT_FEC_RX_DV
,
PD14_AOUT_FEC_RX_CLK
,
PD15_AOUT_FEC_COL
,
PD16_AIN_FEC_TX_ER
,
PF23_AIN_FEC_TX_EN
,
/* I2C1 */
PD17_PF_I2C_DATA
,
PD18_PF_I2C_CLK
,
/* I2C2 */
PC5_PF_I2C2_SDA
,
PC6_PF_I2C2_SCL
,
/* FB */
PA5_PF_LSCLK
,
PA6_PF_LD0
,
PA7_PF_LD1
,
PA8_PF_LD2
,
PA9_PF_LD3
,
PA10_PF_LD4
,
PA11_PF_LD5
,
PA12_PF_LD6
,
PA13_PF_LD7
,
PA14_PF_LD8
,
PA15_PF_LD9
,
PA16_PF_LD10
,
PA17_PF_LD11
,
PA18_PF_LD12
,
PA19_PF_LD13
,
PA20_PF_LD14
,
PA21_PF_LD15
,
PA22_PF_LD16
,
PA23_PF_LD17
,
PA25_PF_CLS
,
PA27_PF_SPL_SPR
,
PA28_PF_HSYNC
,
PA29_PF_VSYNC
,
PA30_PF_CONTRAST
,
PA31_PF_OE_ACD
,
/* OWIRE */
PE16_AF_OWIRE
,
/* SDHC1*/
PE18_PF_SD1_D0
,
PE19_PF_SD1_D1
,
PE20_PF_SD1_D2
,
PE21_PF_SD1_D3
,
PE22_PF_SD1_CMD
,
PE23_PF_SD1_CLK
,
PF8_AF_ATA_IORDY
,
/* SDHC2*/
PB4_PF_SD2_D0
,
PB5_PF_SD2_D1
,
PB6_PF_SD2_D2
,
PB7_PF_SD2_D3
,
PB8_PF_SD2_CMD
,
PB9_PF_SD2_CLK
,
};
static
const
struct
mxc_nand_platform_data
mxt_td60_nand_board_info
__initconst
=
{
.
width
=
1
,
.
hw_ecc
=
1
,
};
static
const
struct
imxi2c_platform_data
mxt_td60_i2c0_data
__initconst
=
{
.
bitrate
=
100000
,
};
/* PCA9557 */
static
int
mxt_td60_pca9557_setup
(
struct
i2c_client
*
client
,
unsigned
gpio_base
,
unsigned
ngpio
,
void
*
context
)
{
static
int
mxt_td60_gpio_value
[]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
1
};
int
n
;
for
(
n
=
0
;
n
<
ARRAY_SIZE
(
mxt_td60_gpio_value
);
++
n
)
{
gpio_request
(
gpio_base
+
n
,
"MXT_TD60 GPIO Exp"
);
if
(
mxt_td60_gpio_value
[
n
]
<
0
)
gpio_direction_input
(
gpio_base
+
n
);
else
gpio_direction_output
(
gpio_base
+
n
,
mxt_td60_gpio_value
[
n
]);
gpio_export
(
gpio_base
+
n
,
0
);
}
return
0
;
}
static
struct
pca953x_platform_data
mxt_td60_pca9557_pdata
=
{
.
gpio_base
=
240
,
/* place PCA9557 after all MX27 gpio pins */
.
invert
=
0
,
/* Do not invert */
.
setup
=
mxt_td60_pca9557_setup
,
};
static
struct
i2c_board_info
mxt_td60_i2c_devices
[]
=
{
{
I2C_BOARD_INFO
(
"pca9557"
,
0x18
),
.
platform_data
=
&
mxt_td60_pca9557_pdata
,
},
};
static
const
struct
imxi2c_platform_data
mxt_td60_i2c1_data
__initconst
=
{
.
bitrate
=
100000
,
};
static
struct
i2c_board_info
mxt_td60_i2c2_devices
[]
=
{
};
static
struct
imx_fb_videomode
mxt_td60_modes
[]
=
{
{
.
mode
=
{
.
name
=
"Chimei LW700AT9003"
,
.
refresh
=
60
,
.
xres
=
800
,
.
yres
=
480
,
.
pixclock
=
30303
,
.
hsync_len
=
64
,
.
left_margin
=
0x67
,
.
right_margin
=
0x68
,
.
vsync_len
=
16
,
.
upper_margin
=
0x0f
,
.
lower_margin
=
0x0f
,
},
.
bpp
=
16
,
.
pcr
=
0xFA208B83
,
},
};
static
const
struct
imx_fb_platform_data
mxt_td60_fb_data
__initconst
=
{
.
mode
=
mxt_td60_modes
,
.
num_modes
=
ARRAY_SIZE
(
mxt_td60_modes
),
/*
* - HSYNC active high
* - VSYNC active high
* - clk notenabled while idle
* - clock inverted
* - data not inverted
* - data enable low active
* - enable sharp mode
*/
.
pwmr
=
0x00A903FF
,
.
lscr1
=
0x00120300
,
.
dmacr
=
0x00020010
,
};
static
int
mxt_td60_sdhc1_init
(
struct
device
*
dev
,
irq_handler_t
detect_irq
,
void
*
data
)
{
return
request_irq
(
gpio_to_irq
(
IMX_GPIO_NR
(
6
,
8
)),
detect_irq
,
IRQF_TRIGGER_FALLING
,
"sdhc1-card-detect"
,
data
);
}
static
void
mxt_td60_sdhc1_exit
(
struct
device
*
dev
,
void
*
data
)
{
free_irq
(
gpio_to_irq
(
IMX_GPIO_NR
(
6
,
8
)),
data
);
}
static
const
struct
imxmmc_platform_data
sdhc1_pdata
__initconst
=
{
.
init
=
mxt_td60_sdhc1_init
,
.
exit
=
mxt_td60_sdhc1_exit
,
};
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
static
void
__init
mxt_td60_board_init
(
void
)
{
imx27_soc_init
();
mxc_gpio_setup_multiple_pins
(
mxt_td60_pins
,
ARRAY_SIZE
(
mxt_td60_pins
),
"MXT_TD60"
);
imx27_add_imx_uart0
(
&
uart_pdata
);
imx27_add_imx_uart1
(
&
uart_pdata
);
imx27_add_imx_uart2
(
&
uart_pdata
);
imx27_add_mxc_nand
(
&
mxt_td60_nand_board_info
);
i2c_register_board_info
(
0
,
mxt_td60_i2c_devices
,
ARRAY_SIZE
(
mxt_td60_i2c_devices
));
i2c_register_board_info
(
1
,
mxt_td60_i2c2_devices
,
ARRAY_SIZE
(
mxt_td60_i2c2_devices
));
imx27_add_imx_i2c
(
0
,
&
mxt_td60_i2c0_data
);
imx27_add_imx_i2c
(
1
,
&
mxt_td60_i2c1_data
);
imx27_add_imx_fb
(
&
mxt_td60_fb_data
);
imx27_add_mxc_mmc
(
0
,
&
sdhc1_pdata
);
imx27_add_fec
(
NULL
);
}
static
void
__init
mxt_td60_timer_init
(
void
)
{
mx27_clocks_init
(
26000000
);
}
MACHINE_START
(
MXT_TD60
,
"Maxtrack i-MXT TD60"
)
/* maintainer: Maxtrack Industrial */
.
atag_offset
=
0x100
,
.
map_io
=
mx27_map_io
,
.
init_early
=
imx27_init_early
,
.
init_irq
=
mx27_init_irq
,
.
init_time
=
mxt_td60_timer_init
,
.
init_machine
=
mxt_td60_board_init
,
.
restart
=
mxc_restart
,
MACHINE_END
arch/arm/mach-imx/mach-pcm037.c
View file @
155b2fd3
...
...
@@ -58,7 +58,7 @@ static int __init pcm037_variant_setup(char *str)
if
(
!
strcmp
(
"eet"
,
str
))
pcm037_instance
=
PCM037_EET
;
else
if
(
strcmp
(
"pcm970"
,
str
))
pr_warn
ing
(
"Unknown pcm037 baseboard variant %s
\n
"
,
str
);
pr_warn
(
"Unknown pcm037 baseboard variant %s
\n
"
,
str
);
return
1
;
}
...
...
@@ -624,7 +624,7 @@ static void __init pcm037_init(void)
/* LAN9217 IRQ pin */
ret
=
gpio_request
(
IOMUX_TO_GPIO
(
MX31_PIN_GPIO3_1
),
"lan9217-irq"
);
if
(
ret
)
pr_warn
ing
(
"could not get LAN irq gpio
\n
"
);
pr_warn
(
"could not get LAN irq gpio
\n
"
);
else
{
gpio_direction_input
(
IOMUX_TO_GPIO
(
MX31_PIN_GPIO3_1
));
smsc911x_resources
[
1
].
start
=
...
...
arch/arm/mach-imx/mach-pcm038.c
deleted
100644 → 0
View file @
ee641009
/*
* Copyright 2007 Robert Schwebel <r.schwebel@pengutronix.de>, Pengutronix
* Copyright (C) 2008 Juergen Beisert (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/i2c.h>
#include <linux/platform_data/at24.h>
#include <linux/io.h>
#include <linux/mtd/plat-ram.h>
#include <linux/mtd/physmap.h>
#include <linux/platform_device.h>
#include <linux/regulator/machine.h>
#include <linux/mfd/mc13783.h>
#include <linux/spi/spi.h>
#include <linux/irq.h>
#include <linux/gpio.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include "board-pcm038.h"
#include "common.h"
#include "devices-imx27.h"
#include "ehci.h"
#include "hardware.h"
#include "iomux-mx27.h"
#include "ulpi.h"
static
const
int
pcm038_pins
[]
__initconst
=
{
/* UART1 */
PE12_PF_UART1_TXD
,
PE13_PF_UART1_RXD
,
PE14_PF_UART1_CTS
,
PE15_PF_UART1_RTS
,
/* UART2 */
PE3_PF_UART2_CTS
,
PE4_PF_UART2_RTS
,
PE6_PF_UART2_TXD
,
PE7_PF_UART2_RXD
,
/* UART3 */
PE8_PF_UART3_TXD
,
PE9_PF_UART3_RXD
,
PE10_PF_UART3_CTS
,
PE11_PF_UART3_RTS
,
/* FEC */
PD0_AIN_FEC_TXD0
,
PD1_AIN_FEC_TXD1
,
PD2_AIN_FEC_TXD2
,
PD3_AIN_FEC_TXD3
,
PD4_AOUT_FEC_RX_ER
,
PD5_AOUT_FEC_RXD1
,
PD6_AOUT_FEC_RXD2
,
PD7_AOUT_FEC_RXD3
,
PD8_AF_FEC_MDIO
,
PD9_AIN_FEC_MDC
,
PD10_AOUT_FEC_CRS
,
PD11_AOUT_FEC_TX_CLK
,
PD12_AOUT_FEC_RXD0
,
PD13_AOUT_FEC_RX_DV
,
PD14_AOUT_FEC_RX_CLK
,
PD15_AOUT_FEC_COL
,
PD16_AIN_FEC_TX_ER
,
PF23_AIN_FEC_TX_EN
,
/* I2C2 */
PC5_PF_I2C2_SDA
,
PC6_PF_I2C2_SCL
,
/* SPI1 */
PD25_PF_CSPI1_RDY
,
PD29_PF_CSPI1_SCLK
,
PD30_PF_CSPI1_MISO
,
PD31_PF_CSPI1_MOSI
,
/* SSI1 */
PC20_PF_SSI1_FS
,
PC21_PF_SSI1_RXD
,
PC22_PF_SSI1_TXD
,
PC23_PF_SSI1_CLK
,
/* SSI4 */
PC16_PF_SSI4_FS
,
PC17_PF_SSI4_RXD
,
PC18_PF_SSI4_TXD
,
PC19_PF_SSI4_CLK
,
/* USB host */
PA0_PF_USBH2_CLK
,
PA1_PF_USBH2_DIR
,
PA2_PF_USBH2_DATA7
,
PA3_PF_USBH2_NXT
,
PA4_PF_USBH2_STP
,
PD19_AF_USBH2_DATA4
,
PD20_AF_USBH2_DATA3
,
PD21_AF_USBH2_DATA6
,
PD22_AF_USBH2_DATA0
,
PD23_AF_USBH2_DATA2
,
PD24_AF_USBH2_DATA1
,
PD26_AF_USBH2_DATA5
,
};
/*
* Phytec's PCM038 comes with 2MiB battery buffered SRAM,
* 16 bit width
*/
static
struct
platdata_mtd_ram
pcm038_sram_data
=
{
.
bankwidth
=
2
,
};
static
struct
resource
pcm038_sram_resource
=
{
.
start
=
MX27_CS1_BASE_ADDR
,
.
end
=
MX27_CS1_BASE_ADDR
+
512
*
1024
-
1
,
.
flags
=
IORESOURCE_MEM
,
};
static
struct
platform_device
pcm038_sram_mtd_device
=
{
.
name
=
"mtd-ram"
,
.
id
=
0
,
.
dev
=
{
.
platform_data
=
&
pcm038_sram_data
,
},
.
num_resources
=
1
,
.
resource
=
&
pcm038_sram_resource
,
};
/*
* Phytec's phyCORE-i.MX27 comes with 32MiB flash,
* 16 bit width
*/
static
struct
physmap_flash_data
pcm038_flash_data
=
{
.
width
=
2
,
};
static
struct
resource
pcm038_flash_resource
=
{
.
start
=
0xc0000000
,
.
end
=
0xc1ffffff
,
.
flags
=
IORESOURCE_MEM
,
};
static
struct
platform_device
pcm038_nor_mtd_device
=
{
.
name
=
"physmap-flash"
,
.
id
=
0
,
.
dev
=
{
.
platform_data
=
&
pcm038_flash_data
,
},
.
num_resources
=
1
,
.
resource
=
&
pcm038_flash_resource
,
};
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
static
const
struct
mxc_nand_platform_data
pcm038_nand_board_info
__initconst
=
{
.
width
=
1
,
.
hw_ecc
=
1
,
};
static
struct
platform_device
*
platform_devices
[]
__initdata
=
{
&
pcm038_nor_mtd_device
,
&
pcm038_sram_mtd_device
,
};
/* On pcm038 there's a sram attached to CS1, we enable the chipselect here and
* setup other stuffs to access the sram. */
static
void
__init
pcm038_init_sram
(
void
)
{
__raw_writel
(
0x0000d843
,
MX27_IO_ADDRESS
(
MX27_WEIM_CSCRxU
(
1
)));
__raw_writel
(
0x22252521
,
MX27_IO_ADDRESS
(
MX27_WEIM_CSCRxL
(
1
)));
__raw_writel
(
0x22220a00
,
MX27_IO_ADDRESS
(
MX27_WEIM_CSCRxA
(
1
)));
}
static
const
struct
imxi2c_platform_data
pcm038_i2c1_data
__initconst
=
{
.
bitrate
=
100000
,
};
static
struct
at24_platform_data
board_eeprom
=
{
.
byte_len
=
4096
,
.
page_size
=
32
,
.
flags
=
AT24_FLAG_ADDR16
,
};
static
struct
i2c_board_info
pcm038_i2c_devices
[]
=
{
{
I2C_BOARD_INFO
(
"at24"
,
0x52
),
/* E0=0, E1=1, E2=0 */
.
platform_data
=
&
board_eeprom
,
},
{
I2C_BOARD_INFO
(
"pcf8563"
,
0x51
),
},
{
I2C_BOARD_INFO
(
"lm75"
,
0x4a
),
}
};
static
int
pcm038_spi_cs
[]
=
{
GPIO_PORTD
+
28
};
static
const
struct
spi_imx_master
pcm038_spi0_data
__initconst
=
{
.
chipselect
=
pcm038_spi_cs
,
.
num_chipselect
=
ARRAY_SIZE
(
pcm038_spi_cs
),
};
static
struct
regulator_consumer_supply
sdhc1_consumers
[]
=
{
{
.
dev_name
=
"imx21-mmc.1"
,
.
supply
=
"sdhc_vcc"
,
},
};
static
struct
regulator_init_data
sdhc1_data
=
{
.
constraints
=
{
.
min_uV
=
3000000
,
.
max_uV
=
3400000
,
.
valid_ops_mask
=
REGULATOR_CHANGE_VOLTAGE
|
REGULATOR_CHANGE_MODE
|
REGULATOR_CHANGE_STATUS
,
.
valid_modes_mask
=
REGULATOR_MODE_NORMAL
|
REGULATOR_MODE_FAST
,
.
always_on
=
0
,
.
boot_on
=
0
,
},
.
num_consumer_supplies
=
ARRAY_SIZE
(
sdhc1_consumers
),
.
consumer_supplies
=
sdhc1_consumers
,
};
static
struct
regulator_consumer_supply
cam_consumers
[]
=
{
{
.
dev_name
=
NULL
,
.
supply
=
"imx_cam_vcc"
,
},
};
static
struct
regulator_init_data
cam_data
=
{
.
constraints
=
{
.
min_uV
=
3000000
,
.
max_uV
=
3400000
,
.
valid_ops_mask
=
REGULATOR_CHANGE_VOLTAGE
|
REGULATOR_CHANGE_MODE
|
REGULATOR_CHANGE_STATUS
,
.
valid_modes_mask
=
REGULATOR_MODE_NORMAL
|
REGULATOR_MODE_FAST
,
.
always_on
=
0
,
.
boot_on
=
0
,
},
.
num_consumer_supplies
=
ARRAY_SIZE
(
cam_consumers
),
.
consumer_supplies
=
cam_consumers
,
};
static
struct
mc13xxx_regulator_init_data
pcm038_regulators
[]
=
{
{
.
id
=
MC13783_REG_VCAM
,
.
init_data
=
&
cam_data
,
},
{
.
id
=
MC13783_REG_VMMC1
,
.
init_data
=
&
sdhc1_data
,
},
};
static
struct
mc13xxx_platform_data
pcm038_pmic
=
{
.
regulators
=
{
.
regulators
=
pcm038_regulators
,
.
num_regulators
=
ARRAY_SIZE
(
pcm038_regulators
),
},
.
flags
=
MC13XXX_USE_ADC
|
MC13XXX_USE_TOUCHSCREEN
,
};
static
struct
spi_board_info
pcm038_spi_board_info
[]
__initdata
=
{
{
.
modalias
=
"mc13783"
,
/* irq number is run-time assigned */
.
max_speed_hz
=
300000
,
.
bus_num
=
0
,
.
chip_select
=
0
,
.
platform_data
=
&
pcm038_pmic
,
.
mode
=
SPI_CS_HIGH
,
}
};
static
int
pcm038_usbh2_init
(
struct
platform_device
*
pdev
)
{
return
mx27_initialize_usb_hw
(
pdev
->
id
,
MXC_EHCI_POWER_PINS_ENABLED
|
MXC_EHCI_INTERFACE_DIFF_UNI
);
}
static
const
struct
mxc_usbh_platform_data
usbh2_pdata
__initconst
=
{
.
init
=
pcm038_usbh2_init
,
.
portsc
=
MXC_EHCI_MODE_ULPI
,
};
static
void
__init
pcm038_init
(
void
)
{
imx27_soc_init
();
mxc_gpio_setup_multiple_pins
(
pcm038_pins
,
ARRAY_SIZE
(
pcm038_pins
),
"PCM038"
);
pcm038_init_sram
();
imx27_add_imx_uart0
(
&
uart_pdata
);
imx27_add_imx_uart1
(
&
uart_pdata
);
imx27_add_imx_uart2
(
&
uart_pdata
);
mxc_gpio_mode
(
PE16_AF_OWIRE
);
imx27_add_mxc_nand
(
&
pcm038_nand_board_info
);
/* only the i2c master 1 is used on this CPU card */
i2c_register_board_info
(
1
,
pcm038_i2c_devices
,
ARRAY_SIZE
(
pcm038_i2c_devices
));
imx27_add_imx_i2c
(
1
,
&
pcm038_i2c1_data
);
/* PE18 for user-LED D40 */
mxc_gpio_mode
(
GPIO_PORTE
|
18
|
GPIO_GPIO
|
GPIO_OUT
);
mxc_gpio_mode
(
GPIO_PORTD
|
28
|
GPIO_GPIO
|
GPIO_OUT
);
/* MC13783 IRQ */
mxc_gpio_mode
(
GPIO_PORTB
|
23
|
GPIO_GPIO
|
GPIO_IN
);
imx27_add_spi_imx0
(
&
pcm038_spi0_data
);
pcm038_spi_board_info
[
0
].
irq
=
gpio_to_irq
(
IMX_GPIO_NR
(
2
,
23
));
spi_register_board_info
(
pcm038_spi_board_info
,
ARRAY_SIZE
(
pcm038_spi_board_info
));
imx27_add_mxc_ehci_hs
(
2
,
&
usbh2_pdata
);
imx27_add_fec
(
NULL
);
platform_add_devices
(
platform_devices
,
ARRAY_SIZE
(
platform_devices
));
imx27_add_imx2_wdt
();
imx27_add_mxc_w1
();
#ifdef CONFIG_MACH_PCM970_BASEBOARD
pcm970_baseboard_init
();
#endif
}
static
void
__init
pcm038_timer_init
(
void
)
{
mx27_clocks_init
(
26000000
);
}
MACHINE_START
(
PCM038
,
"phyCORE-i.MX27"
)
.
atag_offset
=
0x100
,
.
map_io
=
mx27_map_io
,
.
init_early
=
imx27_init_early
,
.
init_irq
=
mx27_init_irq
,
.
init_time
=
pcm038_timer_init
,
.
init_machine
=
pcm038_init
,
.
restart
=
mxc_restart
,
MACHINE_END
arch/arm/mach-imx/mxc.h
View file @
155b2fd3
...
...
@@ -43,6 +43,8 @@
#define IMX_CHIP_REVISION_1_1 0x11
#define IMX_CHIP_REVISION_1_2 0x12
#define IMX_CHIP_REVISION_1_3 0x13
#define IMX_CHIP_REVISION_1_4 0x14
#define IMX_CHIP_REVISION_1_5 0x15
#define IMX_CHIP_REVISION_2_0 0x20
#define IMX_CHIP_REVISION_2_1 0x21
#define IMX_CHIP_REVISION_2_2 0x22
...
...
arch/arm/mach-imx/pcm970-baseboard.c
deleted
100644 → 0
View file @
ee641009
/*
* Copyright (C) 2008 Juergen Beisert (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/gpio.h>
#include <linux/irq.h>
#include <linux/platform_device.h>
#include <linux/can/platform/sja1000.h>
#include <asm/mach/arch.h>
#include "common.h"
#include "devices-imx27.h"
#include "hardware.h"
#include "iomux-mx27.h"
static
const
int
pcm970_pins
[]
__initconst
=
{
/* SDHC */
PB4_PF_SD2_D0
,
PB5_PF_SD2_D1
,
PB6_PF_SD2_D2
,
PB7_PF_SD2_D3
,
PB8_PF_SD2_CMD
,
PB9_PF_SD2_CLK
,
/* display */
PA5_PF_LSCLK
,
PA6_PF_LD0
,
PA7_PF_LD1
,
PA8_PF_LD2
,
PA9_PF_LD3
,
PA10_PF_LD4
,
PA11_PF_LD5
,
PA12_PF_LD6
,
PA13_PF_LD7
,
PA14_PF_LD8
,
PA15_PF_LD9
,
PA16_PF_LD10
,
PA17_PF_LD11
,
PA18_PF_LD12
,
PA19_PF_LD13
,
PA20_PF_LD14
,
PA21_PF_LD15
,
PA22_PF_LD16
,
PA23_PF_LD17
,
PA24_PF_REV
,
PA25_PF_CLS
,
PA26_PF_PS
,
PA27_PF_SPL_SPR
,
PA28_PF_HSYNC
,
PA29_PF_VSYNC
,
PA30_PF_CONTRAST
,
PA31_PF_OE_ACD
,
/*
* it seems the data line misses a pullup, so we must enable
* the internal pullup as a local workaround
*/
PD17_PF_I2C_DATA
|
GPIO_PUEN
,
PD18_PF_I2C_CLK
,
/* Camera */
PB10_PF_CSI_D0
,
PB11_PF_CSI_D1
,
PB12_PF_CSI_D2
,
PB13_PF_CSI_D3
,
PB14_PF_CSI_D4
,
PB15_PF_CSI_MCLK
,
PB16_PF_CSI_PIXCLK
,
PB17_PF_CSI_D5
,
PB18_PF_CSI_D6
,
PB19_PF_CSI_D7
,
PB20_PF_CSI_VSYNC
,
PB21_PF_CSI_HSYNC
,
};
static
int
pcm970_sdhc2_get_ro
(
struct
device
*
dev
)
{
return
gpio_get_value
(
GPIO_PORTC
+
28
);
}
static
int
pcm970_sdhc2_init
(
struct
device
*
dev
,
irq_handler_t
detect_irq
,
void
*
data
)
{
int
ret
;
ret
=
request_irq
(
gpio_to_irq
(
IMX_GPIO_NR
(
3
,
29
)),
detect_irq
,
IRQF_TRIGGER_FALLING
,
"imx-mmc-detect"
,
data
);
if
(
ret
)
return
ret
;
ret
=
gpio_request
(
GPIO_PORTC
+
28
,
"imx-mmc-ro"
);
if
(
ret
)
{
free_irq
(
gpio_to_irq
(
IMX_GPIO_NR
(
3
,
29
)),
data
);
return
ret
;
}
gpio_direction_input
(
GPIO_PORTC
+
28
);
return
0
;
}
static
void
pcm970_sdhc2_exit
(
struct
device
*
dev
,
void
*
data
)
{
free_irq
(
gpio_to_irq
(
IMX_GPIO_NR
(
3
,
29
)),
data
);
gpio_free
(
GPIO_PORTC
+
28
);
}
static
const
struct
imxmmc_platform_data
sdhc_pdata
__initconst
=
{
.
get_ro
=
pcm970_sdhc2_get_ro
,
.
init
=
pcm970_sdhc2_init
,
.
exit
=
pcm970_sdhc2_exit
,
};
static
struct
imx_fb_videomode
pcm970_modes
[]
=
{
{
.
mode
=
{
.
name
=
"Sharp-LQ035Q7"
,
.
refresh
=
60
,
.
xres
=
240
,
.
yres
=
320
,
.
pixclock
=
188679
,
/* in ps (5.3MHz) */
.
hsync_len
=
7
,
.
left_margin
=
5
,
.
right_margin
=
16
,
.
vsync_len
=
1
,
.
upper_margin
=
7
,
.
lower_margin
=
9
,
},
/*
* - HSYNC active high
* - VSYNC active high
* - clk notenabled while idle
* - clock not inverted
* - data not inverted
* - data enable low active
* - enable sharp mode
*/
.
pcr
=
0xF00080C0
,
.
bpp
=
16
,
},
{
.
mode
=
{
.
name
=
"TX090"
,
.
refresh
=
60
,
.
xres
=
240
,
.
yres
=
320
,
.
pixclock
=
38255
,
.
left_margin
=
144
,
.
right_margin
=
0
,
.
upper_margin
=
7
,
.
lower_margin
=
40
,
.
hsync_len
=
96
,
.
vsync_len
=
1
,
},
/*
* - HSYNC active low (1 << 22)
* - VSYNC active low (1 << 23)
* - clk notenabled while idle
* - clock not inverted
* - data not inverted
* - data enable low active
* - enable sharp mode
*/
.
pcr
=
0xF0008080
|
(
1
<<
22
)
|
(
1
<<
23
)
|
(
1
<<
19
),
.
bpp
=
32
,
},
};
static
const
struct
imx_fb_platform_data
pcm038_fb_data
__initconst
=
{
.
mode
=
pcm970_modes
,
.
num_modes
=
ARRAY_SIZE
(
pcm970_modes
),
.
pwmr
=
0x00A903FF
,
.
lscr1
=
0x00120300
,
.
dmacr
=
0x00020010
,
};
static
struct
resource
pcm970_sja1000_resources
[]
=
{
{
.
start
=
MX27_CS4_BASE_ADDR
,
.
end
=
MX27_CS4_BASE_ADDR
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
{
/* irq number is run-time assigned */
.
flags
=
IORESOURCE_IRQ
|
IORESOURCE_IRQ_LOWEDGE
,
},
};
static
struct
sja1000_platform_data
pcm970_sja1000_platform_data
=
{
.
osc_freq
=
16000000
,
.
ocr
=
OCR_TX1_PULLDOWN
|
OCR_TX0_PUSHPULL
,
.
cdr
=
CDR_CBP
,
};
static
struct
platform_device
pcm970_sja1000
=
{
.
name
=
"sja1000_platform"
,
.
dev
=
{
.
platform_data
=
&
pcm970_sja1000_platform_data
,
},
.
resource
=
pcm970_sja1000_resources
,
.
num_resources
=
ARRAY_SIZE
(
pcm970_sja1000_resources
),
};
/*
* system init for baseboard usage. Will be called by pcm038 init.
*
* Add platform devices present on this baseboard and init
* them from CPU side as far as required to use them later on
*/
void
__init
pcm970_baseboard_init
(
void
)
{
mxc_gpio_setup_multiple_pins
(
pcm970_pins
,
ARRAY_SIZE
(
pcm970_pins
),
"PCM970"
);
imx27_add_imx_fb
(
&
pcm038_fb_data
);
mxc_gpio_mode
(
GPIO_PORTC
|
28
|
GPIO_GPIO
|
GPIO_IN
);
imx27_add_mxc_mmc
(
1
,
&
sdhc_pdata
);
pcm970_sja1000_resources
[
1
].
start
=
gpio_to_irq
(
IMX_GPIO_NR
(
5
,
19
));
pcm970_sja1000_resources
[
1
].
end
=
gpio_to_irq
(
IMX_GPIO_NR
(
5
,
19
));
platform_device_register
(
&
pcm970_sja1000
);
}
arch/arm/mach-imx/platsmp.c
View file @
155b2fd3
...
...
@@ -20,8 +20,6 @@
#include "common.h"
#include "hardware.h"
#define SCU_STANDBY_ENABLE (1 << 5)
u32
g_diag_reg
;
static
void
__iomem
*
scu_base
;
...
...
@@ -45,14 +43,6 @@ void __init imx_scu_map_io(void)
scu_base
=
IMX_IO_ADDRESS
(
base
);
}
void
imx_scu_standby_enable
(
void
)
{
u32
val
=
readl_relaxed
(
scu_base
);
val
|=
SCU_STANDBY_ENABLE
;
writel_relaxed
(
val
,
scu_base
);
}
static
int
imx_boot_secondary
(
unsigned
int
cpu
,
struct
task_struct
*
idle
)
{
imx_set_cpu_jump
(
cpu
,
v7_secondary_startup
);
...
...
arch/arm/mach-imx/time.c
View file @
155b2fd3
...
...
@@ -60,17 +60,22 @@
#define MX2_TSTAT_CAPT (1 << 1)
#define MX2_TSTAT_COMP (1 << 0)
/* MX31, MX35, MX25, MX5 */
/* MX31, MX35, MX25, MX5
, MX6
*/
#define V2_TCTL_WAITEN (1 << 3)
/* Wait enable mode */
#define V2_TCTL_CLK_IPG (1 << 6)
#define V2_TCTL_CLK_PER (2 << 6)
#define V2_TCTL_CLK_OSC_DIV8 (5 << 6)
#define V2_TCTL_FRR (1 << 9)
#define V2_TCTL_24MEN (1 << 10)
#define V2_TPRER_PRE24M 12
#define V2_IR 0x0c
#define V2_TSTAT 0x08
#define V2_TSTAT_OF1 (1 << 0)
#define V2_TCN 0x24
#define V2_TCMP 0x10
#define V2_TIMER_RATE_OSC_DIV8 3000000
#define timer_is_v1() (cpu_is_mx1() || cpu_is_mx21() || cpu_is_mx27())
#define timer_is_v2() (!timer_is_v1())
...
...
@@ -312,10 +317,22 @@ static void __init _mxc_timer_init(int irq,
__raw_writel
(
0
,
timer_base
+
MXC_TCTL
);
__raw_writel
(
0
,
timer_base
+
MXC_TPRER
);
/* see datasheet note */
if
(
timer_is_v2
())
tctl_val
=
V2_TCTL_CLK_PER
|
V2_TCTL_FRR
|
V2_TCTL_WAITEN
|
MXC_TCTL_TEN
;
else
if
(
timer_is_v2
())
{
tctl_val
=
V2_TCTL_FRR
|
V2_TCTL_WAITEN
|
MXC_TCTL_TEN
;
if
(
clk_get_rate
(
clk_per
)
==
V2_TIMER_RATE_OSC_DIV8
)
{
tctl_val
|=
V2_TCTL_CLK_OSC_DIV8
;
if
(
cpu_is_imx6dl
()
||
cpu_is_imx6sx
())
{
/* 24 / 8 = 3 MHz */
__raw_writel
(
7
<<
V2_TPRER_PRE24M
,
timer_base
+
MXC_TPRER
);
tctl_val
|=
V2_TCTL_24MEN
;
}
}
else
{
tctl_val
|=
V2_TCTL_CLK_PER
;
}
}
else
{
tctl_val
=
MX1_2_TCTL_FRR
|
MX1_2_TCTL_CLK_PCLK1
|
MXC_TCTL_TEN
;
}
__raw_writel
(
tctl_val
,
timer_base
+
MXC_TCTL
);
...
...
@@ -349,9 +366,13 @@ static void __init mxc_timer_init_dt(struct device_node *np)
WARN_ON
(
!
timer_base
);
irq
=
irq_of_parse_and_map
(
np
,
0
);
clk_per
=
of_clk_get_by_name
(
np
,
"per"
);
clk_ipg
=
of_clk_get_by_name
(
np
,
"ipg"
);
/* Try osc_per first, and fall back to per otherwise */
clk_per
=
of_clk_get_by_name
(
np
,
"osc_per"
);
if
(
IS_ERR
(
clk_per
))
clk_per
=
of_clk_get_by_name
(
np
,
"per"
);
_mxc_timer_init
(
irq
,
clk_per
,
clk_ipg
);
}
CLOCKSOURCE_OF_DECLARE
(
mx1_timer
,
"fsl,imx1-gpt"
,
mxc_timer_init_dt
);
...
...
include/dt-bindings/clock/imx6qdl-clock.h
View file @
155b2fd3
...
...
@@ -128,7 +128,7 @@
#define IMX6Q_CLK_ECSPI5 116
#define IMX6DL_CLK_I2C4 116
#define IMX6QDL_CLK_ENET 117
#define IMX6QDL_CLK_ESAI 118
#define IMX6QDL_CLK_ESAI
_EXTAL
118
#define IMX6QDL_CLK_GPT_IPG 119
#define IMX6QDL_CLK_GPT_IPG_PER 120
#define IMX6QDL_CLK_GPU2D_CORE 121
...
...
@@ -218,7 +218,36 @@
#define IMX6QDL_CLK_LVDS2_SEL 205
#define IMX6QDL_CLK_LVDS1_GATE 206
#define IMX6QDL_CLK_LVDS2_GATE 207
#define IMX6QDL_CLK_ESAI_AHB 208
#define IMX6QDL_CLK_END 209
#define IMX6QDL_CLK_ESAI_IPG 208
#define IMX6QDL_CLK_ESAI_MEM 209
#define IMX6QDL_CLK_ASRC_IPG 210
#define IMX6QDL_CLK_ASRC_MEM 211
#define IMX6QDL_CLK_LVDS1_IN 212
#define IMX6QDL_CLK_LVDS2_IN 213
#define IMX6QDL_CLK_ANACLK1 214
#define IMX6QDL_CLK_ANACLK2 215
#define IMX6QDL_PLL1_BYPASS_SRC 216
#define IMX6QDL_PLL2_BYPASS_SRC 217
#define IMX6QDL_PLL3_BYPASS_SRC 218
#define IMX6QDL_PLL4_BYPASS_SRC 219
#define IMX6QDL_PLL5_BYPASS_SRC 220
#define IMX6QDL_PLL6_BYPASS_SRC 221
#define IMX6QDL_PLL7_BYPASS_SRC 222
#define IMX6QDL_CLK_PLL1 223
#define IMX6QDL_CLK_PLL2 224
#define IMX6QDL_CLK_PLL3 225
#define IMX6QDL_CLK_PLL4 226
#define IMX6QDL_CLK_PLL5 227
#define IMX6QDL_CLK_PLL6 228
#define IMX6QDL_CLK_PLL7 229
#define IMX6QDL_PLL1_BYPASS 230
#define IMX6QDL_PLL2_BYPASS 231
#define IMX6QDL_PLL3_BYPASS 232
#define IMX6QDL_PLL4_BYPASS 233
#define IMX6QDL_PLL5_BYPASS 234
#define IMX6QDL_PLL6_BYPASS 235
#define IMX6QDL_PLL7_BYPASS 236
#define IMX6QDL_CLK_GPT_3M 237
#define IMX6QDL_CLK_END 238
#endif
/* __DT_BINDINGS_CLOCK_IMX6QDL_H */
include/dt-bindings/clock/imx6sl-clock.h
View file @
155b2fd3
...
...
@@ -146,6 +146,34 @@
#define IMX6SL_CLK_PLL4_AUDIO_DIV 133
#define IMX6SL_CLK_SPBA 134
#define IMX6SL_CLK_ENET 135
#define IMX6SL_CLK_END 136
#define IMX6SL_CLK_LVDS1_SEL 136
#define IMX6SL_CLK_LVDS1_OUT 137
#define IMX6SL_CLK_LVDS1_IN 138
#define IMX6SL_CLK_ANACLK1 139
#define IMX6SL_PLL1_BYPASS_SRC 140
#define IMX6SL_PLL2_BYPASS_SRC 141
#define IMX6SL_PLL3_BYPASS_SRC 142
#define IMX6SL_PLL4_BYPASS_SRC 143
#define IMX6SL_PLL5_BYPASS_SRC 144
#define IMX6SL_PLL6_BYPASS_SRC 145
#define IMX6SL_PLL7_BYPASS_SRC 146
#define IMX6SL_CLK_PLL1 147
#define IMX6SL_CLK_PLL2 148
#define IMX6SL_CLK_PLL3 149
#define IMX6SL_CLK_PLL4 150
#define IMX6SL_CLK_PLL5 151
#define IMX6SL_CLK_PLL6 152
#define IMX6SL_CLK_PLL7 153
#define IMX6SL_PLL1_BYPASS 154
#define IMX6SL_PLL2_BYPASS 155
#define IMX6SL_PLL3_BYPASS 156
#define IMX6SL_PLL4_BYPASS 157
#define IMX6SL_PLL5_BYPASS 158
#define IMX6SL_PLL6_BYPASS 159
#define IMX6SL_PLL7_BYPASS 160
#define IMX6SL_CLK_SSI1_IPG 161
#define IMX6SL_CLK_SSI2_IPG 162
#define IMX6SL_CLK_SSI3_IPG 163
#define IMX6SL_CLK_END 164
#endif
/* __DT_BINDINGS_CLOCK_IMX6SL_H */
include/dt-bindings/clock/imx6sx-clock.h
View file @
155b2fd3
...
...
@@ -251,6 +251,29 @@
#define IMX6SX_CLK_SAI2_IPG 238
#define IMX6SX_CLK_ESAI_IPG 239
#define IMX6SX_CLK_ESAI_MEM 240
#define IMX6SX_CLK_CLK_END 241
#define IMX6SX_CLK_LVDS1_IN 241
#define IMX6SX_CLK_ANACLK1 242
#define IMX6SX_PLL1_BYPASS_SRC 243
#define IMX6SX_PLL2_BYPASS_SRC 244
#define IMX6SX_PLL3_BYPASS_SRC 245
#define IMX6SX_PLL4_BYPASS_SRC 246
#define IMX6SX_PLL5_BYPASS_SRC 247
#define IMX6SX_PLL6_BYPASS_SRC 248
#define IMX6SX_PLL7_BYPASS_SRC 249
#define IMX6SX_CLK_PLL1 250
#define IMX6SX_CLK_PLL2 251
#define IMX6SX_CLK_PLL3 252
#define IMX6SX_CLK_PLL4 253
#define IMX6SX_CLK_PLL5 254
#define IMX6SX_CLK_PLL6 255
#define IMX6SX_CLK_PLL7 256
#define IMX6SX_PLL1_BYPASS 257
#define IMX6SX_PLL2_BYPASS 258
#define IMX6SX_PLL3_BYPASS 259
#define IMX6SX_PLL4_BYPASS 260
#define IMX6SX_PLL5_BYPASS 261
#define IMX6SX_PLL6_BYPASS 262
#define IMX6SX_PLL7_BYPASS 263
#define IMX6SX_CLK_CLK_END 264
#endif
/* __DT_BINDINGS_CLOCK_IMX6SX_H */
include/dt-bindings/clock/vf610-clock.h
View file @
155b2fd3
...
...
@@ -166,6 +166,9 @@
#define VF610_CLK_DMAMUX3 153
#define VF610_CLK_FLEXCAN0_EN 154
#define VF610_CLK_FLEXCAN1_EN 155
#define VF610_CLK_END 156
#define VF610_CLK_PLL7_MAIN 156
#define VF610_CLK_USBPHY0 157
#define VF610_CLK_USBPHY1 158
#define VF610_CLK_END 159
#endif
/* __DT_BINDINGS_CLOCK_VF610_H */
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