i.MX SoC update for 5.10:
- A series from Fabio Estevam to remove legacy non-DT i.MX platforms support and related board files. This is a natural move, as the platforms had been converted to DT for years, and we have not seen any users around these legacy non-DT support for a while. - Enable cpufreq support for i.MX7ULP platform. -----BEGIN PGP SIGNATURE----- iQFIBAABCgAyFiEEFmJXigPl4LoGSz08UFdYWoewfM4FAl9qmaAUHHNoYXduZ3Vv QGtlcm5lbC5vcmcACgkQUFdYWoewfM6OUAgAtFkBiF4YeAh7AoHbCHnecot5Ywbv cvv9dktXBJNjzZSIO8RbvDterNHuamQm433CDz9GYBb2hMWM0ZvlARn2lj+ixX0e vbQs2DUu7XNvxpGxsKCDbs9DNJmjsnfTLKjXd6D/OYD0+QRgYJJAqLt0rbzSqY3k 2R5yy3yLqJRQ5kGKDde+QQj2uFc1flfSsTXugbmYpsu3xPYXKmIwTqy4wgVUgXWg CUEZDXFi5Wny+uKMnVtojm0Xyj2+R8HutHWBmEgkhtItgjrf9+OamnIBtvCWUtXe +7PQswaZsdmbtzB0P9nHRsMjAEJhBxUmUb0X2piOI0vPfkGIBygDzs2nxQ== =QAok -----END PGP SIGNATURE----- Merge tag 'imx-soc-5.10' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into arm/soc i.MX SoC update for 5.10: - A series from Fabio Estevam to remove legacy non-DT i.MX platforms support and related board files. This is a natural move, as the platforms had been converted to DT for years, and we have not seen any users around these legacy non-DT support for a while. - Enable cpufreq support for i.MX7ULP platform. * tag 'imx-soc-5.10' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux: (26 commits) clk: imx: imx35: Remove mx35_clocks_init() clk: imx: imx31: Remove mx31_clocks_init() clk: imx: imx27: Remove mx27_clocks_init() ARM: imx: Remove unused definitions ARM: imx35: Retrieve the IIM base address from devicetree ARM: imx3: Retrieve the AVIC base address from devicetree ARM: imx3: Retrieve the CCM base address from devicetree ARM: imx31: Retrieve the IIM base address from devicetree ARM: imx27: Retrieve the CCM base address from devicetree ARM: imx27: Retrieve the SYSCTRL base address from devicetree ARM: imx: Remove remnant board file support pieces ARM: imx: Remove imx device directory ARM: imx: Remove iomux-v3 board code ARM: imx3: Remove imx3 soc_init() ARM: imx31: Remove remaining i.MX31 board code ARM: imx27: Retrieve AVIC base address from devicetree ARM: imx27: Get rid of mm-imx27.c ARM: imx27: Remove iomux-v1 board code ARM: imx27: Remove imx27_soc_init() ARM: imx7ulp: enable cpufreq ... Link: https://lore.kernel.org/r/20200923073009.23678-2-shawnguo@kernel.org Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
Коммит
accdab6d9e
|
@ -20,9 +20,9 @@ CONFIG_MACH_MX27ADS=y
|
|||
CONFIG_MACH_MX27_3DS=y
|
||||
CONFIG_MACH_IMX27_VISSTRIM_M10=y
|
||||
CONFIG_MACH_PCA100=y
|
||||
CONFIG_MACH_IMX27_DT=y
|
||||
CONFIG_SOC_IMX1=y
|
||||
CONFIG_SOC_IMX25=y
|
||||
CONFIG_SOC_IMX27=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
|
|
|
@ -15,20 +15,8 @@ CONFIG_PERF_EVENTS=y
|
|||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_ARCH_MULTI_V6=y
|
||||
CONFIG_ARCH_MXC=y
|
||||
CONFIG_MACH_MX31LILLY=y
|
||||
CONFIG_MACH_MX31LITE=y
|
||||
CONFIG_MACH_PCM037=y
|
||||
CONFIG_MACH_PCM037_EET=y
|
||||
CONFIG_MACH_MX31_3DS=y
|
||||
CONFIG_MACH_MX31MOBOARD=y
|
||||
CONFIG_MACH_QONG=y
|
||||
CONFIG_MACH_ARMADILLO5X0=y
|
||||
CONFIG_MACH_KZM_ARM11_01=y
|
||||
CONFIG_MACH_IMX31_DT=y
|
||||
CONFIG_MACH_IMX35_DT=y
|
||||
CONFIG_MACH_PCM043=y
|
||||
CONFIG_MACH_MX35_3DS=y
|
||||
CONFIG_MACH_VPR200=y
|
||||
CONFIG_SOC_IMX31=y
|
||||
CONFIG_SOC_IMX35=y
|
||||
CONFIG_SOC_IMX50=y
|
||||
CONFIG_SOC_IMX51=y
|
||||
CONFIG_SOC_IMX53=y
|
||||
|
|
|
@ -29,8 +29,8 @@ CONFIG_MACH_MX27ADS=y
|
|||
CONFIG_MACH_MX27_3DS=y
|
||||
CONFIG_MACH_IMX27_VISSTRIM_M10=y
|
||||
CONFIG_MACH_PCA100=y
|
||||
CONFIG_MACH_IMX27_DT=y
|
||||
CONFIG_SOC_IMX25=y
|
||||
CONFIG_SOC_IMX27=y
|
||||
CONFIG_ARCH_MVEBU=y
|
||||
CONFIG_MACH_KIRKWOOD=y
|
||||
CONFIG_ARCH_ORION5X=y
|
||||
|
|
|
@ -1,207 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
* Copyright (C) 2010 Jason Wang <jason77.wang@gmail.com>
|
||||
*/
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include "3ds_debugboard.h"
|
||||
#include "hardware.h"
|
||||
|
||||
/* LAN9217 ethernet base address */
|
||||
#define LAN9217_BASE_ADDR(n) (n + 0x0)
|
||||
/* External UART */
|
||||
#define UARTA_BASE_ADDR(n) (n + 0x8000)
|
||||
#define UARTB_BASE_ADDR(n) (n + 0x10000)
|
||||
|
||||
#define BOARD_IO_ADDR(n) (n + 0x20000)
|
||||
/* LED switchs */
|
||||
#define LED_SWITCH_REG 0x00
|
||||
/* buttons */
|
||||
#define SWITCH_BUTTONS_REG 0x08
|
||||
/* status, interrupt */
|
||||
#define INTR_STATUS_REG 0x10
|
||||
#define INTR_MASK_REG 0x38
|
||||
#define INTR_RESET_REG 0x20
|
||||
/* magic word for debug CPLD */
|
||||
#define MAGIC_NUMBER1_REG 0x40
|
||||
#define MAGIC_NUMBER2_REG 0x48
|
||||
/* CPLD code version */
|
||||
#define CPLD_CODE_VER_REG 0x50
|
||||
/* magic word for debug CPLD */
|
||||
#define MAGIC_NUMBER3_REG 0x58
|
||||
/* module reset register*/
|
||||
#define MODULE_RESET_REG 0x60
|
||||
/* CPU ID and Personality ID */
|
||||
#define MCU_BOARD_ID_REG 0x68
|
||||
|
||||
#define MXC_MAX_EXP_IO_LINES 16
|
||||
|
||||
/* interrupts like external uart , external ethernet etc*/
|
||||
#define EXPIO_INT_ENET 0
|
||||
#define EXPIO_INT_XUART_A 1
|
||||
#define EXPIO_INT_XUART_B 2
|
||||
#define EXPIO_INT_BUTTON_A 3
|
||||
#define EXPIO_INT_BUTTON_B 4
|
||||
|
||||
static void __iomem *brd_io;
|
||||
static struct irq_domain *domain;
|
||||
|
||||
static struct resource smsc911x_resources[] = {
|
||||
{
|
||||
.flags = IORESOURCE_MEM,
|
||||
} , {
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct smsc911x_platform_config smsc911x_config = {
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.flags = SMSC911X_USE_32BIT | SMSC911X_FORCE_INTERNAL_PHY,
|
||||
};
|
||||
|
||||
static struct platform_device smsc_lan9217_device = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &smsc911x_config,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(smsc911x_resources),
|
||||
.resource = smsc911x_resources,
|
||||
};
|
||||
|
||||
static void mxc_expio_irq_handler(struct irq_desc *desc)
|
||||
{
|
||||
u32 imr_val;
|
||||
u32 int_valid;
|
||||
u32 expio_irq;
|
||||
|
||||
/* irq = gpio irq number */
|
||||
desc->irq_data.chip->irq_mask(&desc->irq_data);
|
||||
|
||||
imr_val = imx_readw(brd_io + INTR_MASK_REG);
|
||||
int_valid = imx_readw(brd_io + INTR_STATUS_REG) & ~imr_val;
|
||||
|
||||
expio_irq = 0;
|
||||
for (; int_valid != 0; int_valid >>= 1, expio_irq++) {
|
||||
if ((int_valid & 1) == 0)
|
||||
continue;
|
||||
generic_handle_irq(irq_find_mapping(domain, expio_irq));
|
||||
}
|
||||
|
||||
desc->irq_data.chip->irq_ack(&desc->irq_data);
|
||||
desc->irq_data.chip->irq_unmask(&desc->irq_data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Disable an expio pin's interrupt by setting the bit in the imr.
|
||||
* Irq is an expio virtual irq number
|
||||
*/
|
||||
static void expio_mask_irq(struct irq_data *d)
|
||||
{
|
||||
u16 reg;
|
||||
u32 expio = d->hwirq;
|
||||
|
||||
reg = imx_readw(brd_io + INTR_MASK_REG);
|
||||
reg |= (1 << expio);
|
||||
imx_writew(reg, brd_io + INTR_MASK_REG);
|
||||
}
|
||||
|
||||
static void expio_ack_irq(struct irq_data *d)
|
||||
{
|
||||
u32 expio = d->hwirq;
|
||||
|
||||
imx_writew(1 << expio, brd_io + INTR_RESET_REG);
|
||||
imx_writew(0, brd_io + INTR_RESET_REG);
|
||||
expio_mask_irq(d);
|
||||
}
|
||||
|
||||
static void expio_unmask_irq(struct irq_data *d)
|
||||
{
|
||||
u16 reg;
|
||||
u32 expio = d->hwirq;
|
||||
|
||||
reg = imx_readw(brd_io + INTR_MASK_REG);
|
||||
reg &= ~(1 << expio);
|
||||
imx_writew(reg, brd_io + INTR_MASK_REG);
|
||||
}
|
||||
|
||||
static struct irq_chip expio_irq_chip = {
|
||||
.irq_ack = expio_ack_irq,
|
||||
.irq_mask = expio_mask_irq,
|
||||
.irq_unmask = expio_unmask_irq,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||
};
|
||||
|
||||
int __init mxc_expio_init(u32 base, u32 intr_gpio)
|
||||
{
|
||||
u32 p_irq = gpio_to_irq(intr_gpio);
|
||||
int irq_base;
|
||||
int i;
|
||||
|
||||
brd_io = ioremap(BOARD_IO_ADDR(base), SZ_4K);
|
||||
if (brd_io == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
if ((imx_readw(brd_io + MAGIC_NUMBER1_REG) != 0xAAAA) ||
|
||||
(imx_readw(brd_io + MAGIC_NUMBER2_REG) != 0x5555) ||
|
||||
(imx_readw(brd_io + MAGIC_NUMBER3_REG) != 0xCAFE)) {
|
||||
pr_info("3-Stack Debug board not detected\n");
|
||||
iounmap(brd_io);
|
||||
brd_io = NULL;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
pr_info("3-Stack Debug board detected, rev = 0x%04X\n",
|
||||
readw(brd_io + CPLD_CODE_VER_REG));
|
||||
|
||||
/*
|
||||
* Configure INT line as GPIO input
|
||||
*/
|
||||
gpio_request(intr_gpio, "expio_pirq");
|
||||
gpio_direction_input(intr_gpio);
|
||||
|
||||
/* disable the interrupt and clear the status */
|
||||
imx_writew(0, brd_io + INTR_MASK_REG);
|
||||
imx_writew(0xFFFF, brd_io + INTR_RESET_REG);
|
||||
imx_writew(0, brd_io + INTR_RESET_REG);
|
||||
imx_writew(0x1F, brd_io + INTR_MASK_REG);
|
||||
|
||||
irq_base = irq_alloc_descs(-1, 0, MXC_MAX_EXP_IO_LINES, numa_node_id());
|
||||
WARN_ON(irq_base < 0);
|
||||
|
||||
domain = irq_domain_add_legacy(NULL, MXC_MAX_EXP_IO_LINES, irq_base, 0,
|
||||
&irq_domain_simple_ops, NULL);
|
||||
WARN_ON(!domain);
|
||||
|
||||
for (i = irq_base; i < irq_base + MXC_MAX_EXP_IO_LINES; i++) {
|
||||
irq_set_chip_and_handler(i, &expio_irq_chip, handle_level_irq);
|
||||
irq_clear_status_flags(i, IRQ_NOREQUEST);
|
||||
}
|
||||
irq_set_irq_type(p_irq, IRQF_TRIGGER_LOW);
|
||||
irq_set_chained_handler(p_irq, mxc_expio_irq_handler);
|
||||
|
||||
/* Register Lan device on the debugboard */
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
|
||||
smsc911x_resources[0].start = LAN9217_BASE_ADDR(base);
|
||||
smsc911x_resources[0].end = LAN9217_BASE_ADDR(base) + 0x100 - 1;
|
||||
smsc911x_resources[1].start = irq_find_mapping(domain, EXPIO_INT_ENET);
|
||||
smsc911x_resources[1].end = irq_find_mapping(domain, EXPIO_INT_ENET);
|
||||
platform_device_register(&smsc_lan9217_device);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MXC_3DS_DB_H__
|
||||
#define __ASM_ARCH_MXC_3DS_DB_H__
|
||||
|
||||
extern int __init mxc_expio_init(u32 base, u32 intr_gpio);
|
||||
|
||||
#endif /* __ASM_ARCH_MXC_3DS_DB_H__ */
|
|
@ -47,371 +47,26 @@ config HAVE_IMX_SRC
|
|||
def_bool y if SMP
|
||||
select ARCH_HAS_RESET_CONTROLLER
|
||||
|
||||
config IMX_HAVE_IOMUX_V1
|
||||
bool
|
||||
|
||||
config ARCH_MXC_IOMUX_V3
|
||||
bool
|
||||
|
||||
config SOC_IMX21
|
||||
bool
|
||||
select CPU_ARM926T
|
||||
select IMX_HAVE_IOMUX_V1
|
||||
select MXC_AVIC
|
||||
|
||||
config SOC_IMX27
|
||||
bool
|
||||
select CPU_ARM926T
|
||||
select IMX_HAVE_IOMUX_V1
|
||||
select MXC_AVIC
|
||||
select PINCTRL_IMX27
|
||||
|
||||
config SOC_IMX31
|
||||
bool
|
||||
select CPU_V6
|
||||
select MXC_AVIC
|
||||
|
||||
config SOC_IMX35
|
||||
bool
|
||||
select ARCH_MXC_IOMUX_V3
|
||||
select MXC_AVIC
|
||||
select PINCTRL_IMX35
|
||||
|
||||
if ARCH_MULTI_V5
|
||||
|
||||
comment "MX21 platforms:"
|
||||
|
||||
config MACH_MX21ADS
|
||||
bool "MX21ADS platform"
|
||||
select IMX_HAVE_PLATFORM_IMX_FB
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
select IMX_HAVE_PLATFORM_MXC_NAND
|
||||
select SOC_IMX21
|
||||
help
|
||||
Include support for MX21ADS platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
comment "MX27 platforms:"
|
||||
|
||||
config MACH_MX27ADS
|
||||
bool "MX27ADS platform"
|
||||
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 IMX_HAVE_PLATFORM_MXC_W1
|
||||
select SOC_IMX27
|
||||
help
|
||||
Include support for MX27ADS platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
config MACH_MX27_3DS
|
||||
bool "MX27PDK platform"
|
||||
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
|
||||
select IMX_HAVE_PLATFORM_IMX2_WDT
|
||||
select IMX_HAVE_PLATFORM_IMX_FB
|
||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||
select IMX_HAVE_PLATFORM_IMX_KEYPAD
|
||||
select IMX_HAVE_PLATFORM_IMX_SSI
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_MX2_CAMERA
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
select IMX_HAVE_PLATFORM_SPI_IMX
|
||||
select MXC_DEBUG_BOARD
|
||||
select USB_ULPI_VIEWPORT if USB_ULPI
|
||||
select SOC_IMX27
|
||||
help
|
||||
Include support for MX27PDK platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
config MACH_IMX27_VISSTRIM_M10
|
||||
bool "Vista Silicon i.MX27 Visstrim_m10"
|
||||
select IMX_HAVE_PLATFORM_GPIO_KEYS
|
||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||
select IMX_HAVE_PLATFORM_IMX_SSI
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_MX2_CAMERA
|
||||
select IMX_HAVE_PLATFORM_MX2_EMMA
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
select LEDS_GPIO_REGISTER
|
||||
select SOC_IMX27
|
||||
help
|
||||
Include support for Visstrim_m10 platform and its different variants.
|
||||
This includes specific configurations for the board and its
|
||||
peripherals.
|
||||
|
||||
config MACH_PCA100
|
||||
bool "Phytec phyCARD-s (pca100)"
|
||||
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
|
||||
select IMX_HAVE_PLATFORM_IMX2_WDT
|
||||
select IMX_HAVE_PLATFORM_IMX_FB
|
||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||
select IMX_HAVE_PLATFORM_IMX_SSI
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
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 phyCARD-s (aka pca100) 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
|
||||
help
|
||||
Include support for Freescale i.MX27 based platforms
|
||||
using the device tree for discovery
|
||||
|
||||
endif
|
||||
|
||||
if ARCH_MULTI_V6
|
||||
|
||||
comment "MX31 platforms:"
|
||||
comment "ARM1136 platforms"
|
||||
|
||||
config MACH_MX31ADS
|
||||
bool "Support MX31ADS platforms"
|
||||
default y
|
||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||
select IMX_HAVE_PLATFORM_IMX_SSI
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select SOC_IMX31
|
||||
config SOC_IMX31
|
||||
bool "i.MX31 support"
|
||||
select CPU_V6
|
||||
select MXC_AVIC
|
||||
help
|
||||
Include support for MX31ADS platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
This enables support for Freescale i.MX31 processor
|
||||
|
||||
config MACH_MX31ADS_WM1133_EV1
|
||||
bool "Support Wolfson Microelectronics 1133-EV1 module"
|
||||
depends on MACH_MX31ADS
|
||||
depends on MFD_WM8350_I2C
|
||||
depends on REGULATOR_WM8350 = y
|
||||
config SOC_IMX35
|
||||
bool "i.MX35 support"
|
||||
select MXC_AVIC
|
||||
select PINCTRL_IMX35
|
||||
help
|
||||
Include support for the Wolfson Microelectronics 1133-EV1 PMU
|
||||
and audio module for the MX31ADS platform.
|
||||
|
||||
config MACH_MX31LILLY
|
||||
bool "Support MX31 LILLY-1131 platforms (INCO startec)"
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_IPU_CORE
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
select IMX_HAVE_PLATFORM_SPI_IMX
|
||||
select USB_ULPI_VIEWPORT if USB_ULPI
|
||||
select SOC_IMX31
|
||||
help
|
||||
Include support for mx31 based LILLY1131 modules. This includes
|
||||
specific configurations for the board and its peripherals.
|
||||
|
||||
config MACH_MX31LITE
|
||||
bool "Support MX31 LITEKIT (LogicPD)"
|
||||
select IMX_HAVE_PLATFORM_IMX2_WDT
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
select IMX_HAVE_PLATFORM_MXC_NAND
|
||||
select IMX_HAVE_PLATFORM_MXC_RTC
|
||||
select IMX_HAVE_PLATFORM_SPI_IMX
|
||||
select LEDS_GPIO_REGISTER
|
||||
select USB_ULPI_VIEWPORT if USB_ULPI
|
||||
select SOC_IMX31
|
||||
help
|
||||
Include support for MX31 LITEKIT platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
config MACH_PCM037
|
||||
bool "Support Phytec pcm037 (i.MX31) platforms"
|
||||
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_IPU_CORE
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
select IMX_HAVE_PLATFORM_MXC_NAND
|
||||
select IMX_HAVE_PLATFORM_MXC_W1
|
||||
select USB_ULPI_VIEWPORT if USB_ULPI
|
||||
select SOC_IMX31
|
||||
help
|
||||
Include support for Phytec pcm037 platform. This includes
|
||||
specific configurations for the board and its peripherals.
|
||||
|
||||
config MACH_PCM037_EET
|
||||
bool "Support pcm037 EET board extensions"
|
||||
depends on MACH_PCM037
|
||||
select IMX_HAVE_PLATFORM_GPIO_KEYS
|
||||
select IMX_HAVE_PLATFORM_SPI_IMX
|
||||
help
|
||||
Add support for PCM037 EET baseboard extensions. If you are using the
|
||||
OLED display with EET, use "video=mx3fb:CMEL-OLED" kernel
|
||||
command-line parameter.
|
||||
|
||||
config MACH_MX31_3DS
|
||||
bool "Support MX31PDK (3DS)"
|
||||
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
|
||||
select IMX_HAVE_PLATFORM_IMX2_WDT
|
||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||
select IMX_HAVE_PLATFORM_IMX_KEYPAD
|
||||
select IMX_HAVE_PLATFORM_IMX_SSI
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_IPU_CORE
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
select IMX_HAVE_PLATFORM_MXC_NAND
|
||||
select IMX_HAVE_PLATFORM_SPI_IMX
|
||||
select MXC_DEBUG_BOARD
|
||||
select USB_ULPI_VIEWPORT if USB_ULPI
|
||||
select SOC_IMX31
|
||||
help
|
||||
Include support for MX31PDK (3DS) platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
config MACH_MX31_3DS_MXC_NAND_USE_BBT
|
||||
bool "Make the MXC NAND driver use the in flash Bad Block Table"
|
||||
depends on MACH_MX31_3DS
|
||||
depends on MTD_NAND_MXC
|
||||
help
|
||||
Enable this if you want that the MXC NAND driver uses the in flash
|
||||
Bad Block Table to know what blocks are bad instead of scanning the
|
||||
entire flash looking for bad block markers.
|
||||
|
||||
config MACH_MX31MOBOARD
|
||||
bool "Support mx31moboard platforms (EPFL Mobots group)"
|
||||
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
|
||||
select IMX_HAVE_PLATFORM_IMX2_WDT
|
||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||
select IMX_HAVE_PLATFORM_IMX_SSI
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_IPU_CORE
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
select IMX_HAVE_PLATFORM_SPI_IMX
|
||||
select LEDS_GPIO_REGISTER
|
||||
select USB_ULPI_VIEWPORT if USB_ULPI
|
||||
select SOC_IMX31
|
||||
help
|
||||
Include support for mx31moboard platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
config MACH_QONG
|
||||
bool "Support Dave/DENX QongEVB-LITE platform"
|
||||
select IMX_HAVE_PLATFORM_IMX2_WDT
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select SOC_IMX31
|
||||
help
|
||||
Include support for Dave/DENX QongEVB-LITE platform. This includes
|
||||
specific configurations for the board and its peripherals.
|
||||
|
||||
config MACH_ARMADILLO5X0
|
||||
bool "Support Atmark Armadillo-500 Development Base Board"
|
||||
select IMX_HAVE_PLATFORM_GPIO_KEYS
|
||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_IPU_CORE
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
select IMX_HAVE_PLATFORM_MXC_NAND
|
||||
select USB_ULPI_VIEWPORT if USB_ULPI
|
||||
select SOC_IMX31
|
||||
help
|
||||
Include support for Atmark Armadillo-500 platform. This includes
|
||||
specific configurations for the board and its peripherals.
|
||||
|
||||
config MACH_KZM_ARM11_01
|
||||
bool "Support KZM-ARM11-01(Kyoto Microcomputer)"
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select SOC_IMX31
|
||||
help
|
||||
Include support for KZM-ARM11-01. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
config MACH_BUG
|
||||
bool "Support Buglabs BUGBase platform"
|
||||
default y
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select SOC_IMX31
|
||||
help
|
||||
Include support for BUGBase 1.3 platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
config MACH_IMX31_DT
|
||||
bool "Support i.MX31 platforms from device tree"
|
||||
select SOC_IMX31
|
||||
help
|
||||
Include support for Freescale i.MX31 based platforms
|
||||
using the device tree for discovery.
|
||||
|
||||
comment "MX35 platforms:"
|
||||
|
||||
config MACH_IMX35_DT
|
||||
bool "Support i.MX35 platforms from device tree"
|
||||
select SOC_IMX35
|
||||
help
|
||||
Include support for Freescale i.MX35 based platforms
|
||||
using the device tree for discovery.
|
||||
|
||||
config MACH_PCM043
|
||||
bool "Support Phytec pcm043 (i.MX35) platforms"
|
||||
select IMX_HAVE_PLATFORM_FLEXCAN
|
||||
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
|
||||
select IMX_HAVE_PLATFORM_IMX2_WDT
|
||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||
select IMX_HAVE_PLATFORM_IMX_SSI
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_IPU_CORE
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_NAND
|
||||
select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
|
||||
select USB_ULPI_VIEWPORT if USB_ULPI
|
||||
select SOC_IMX35
|
||||
help
|
||||
Include support for Phytec pcm043 platform. This includes
|
||||
specific configurations for the board and its peripherals.
|
||||
|
||||
config MACH_MX35_3DS
|
||||
bool "Support MX35PDK platform"
|
||||
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
|
||||
select IMX_HAVE_PLATFORM_IMX2_WDT
|
||||
select IMX_HAVE_PLATFORM_IMX_FB
|
||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_IPU_CORE
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_NAND
|
||||
select IMX_HAVE_PLATFORM_MXC_RTC
|
||||
select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
|
||||
select MXC_DEBUG_BOARD
|
||||
select SOC_IMX35
|
||||
help
|
||||
Include support for MX35PDK platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
|
||||
config MACH_VPR200
|
||||
bool "Support VPR200 platform"
|
||||
select IMX_HAVE_PLATFORM_FSL_USB2_UDC
|
||||
select IMX_HAVE_PLATFORM_GPIO_KEYS
|
||||
select IMX_HAVE_PLATFORM_IMX2_WDT
|
||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_IPU_CORE
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_NAND
|
||||
select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
|
||||
select SOC_IMX35
|
||||
help
|
||||
Include support for VPR200 platform. This includes specific
|
||||
configurations for the board and its peripherals.
|
||||
This enables support for Freescale i.MX31 processor
|
||||
|
||||
endif
|
||||
|
||||
comment "Device tree only"
|
||||
|
||||
if ARCH_MULTI_V4T
|
||||
|
||||
config SOC_IMX1
|
||||
|
@ -428,12 +83,20 @@ if ARCH_MULTI_V5
|
|||
|
||||
config SOC_IMX25
|
||||
bool "i.MX25 support"
|
||||
select ARCH_MXC_IOMUX_V3
|
||||
select CPU_ARM926T
|
||||
select MXC_AVIC
|
||||
select PINCTRL_IMX25
|
||||
help
|
||||
This enables support for Freescale i.MX25 processor
|
||||
|
||||
config SOC_IMX27
|
||||
bool "i.MX27 support"
|
||||
select CPU_ARM926T
|
||||
select MXC_AVIC
|
||||
select PINCTRL_IMX27
|
||||
help
|
||||
This enables support for Freescale i.MX27 processor
|
||||
|
||||
endif
|
||||
|
||||
if ARCH_MULTI_V7
|
||||
|
@ -541,10 +204,10 @@ config SOC_LS1021A
|
|||
|
||||
endif
|
||||
|
||||
comment "Cortex-A/Cortex-M asymmetric multiprocessing platforms"
|
||||
|
||||
if ARCH_MULTI_V7 || ARM_SINGLE_ARMV7M
|
||||
|
||||
comment "Cortex-A/Cortex-M asymmetric multiprocessing platforms"
|
||||
|
||||
config SOC_IMX7D_CA7
|
||||
bool
|
||||
select ARM_GIC
|
||||
|
@ -607,6 +270,4 @@ endchoice
|
|||
|
||||
endif
|
||||
|
||||
source "arch/arm/mach-imx/devices/Kconfig"
|
||||
|
||||
endif
|
||||
|
|
|
@ -1,22 +1,16 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
obj-y := cpu.o system.o irq-common.o
|
||||
|
||||
obj-$(CONFIG_SOC_IMX21) += mm-imx21.o
|
||||
|
||||
obj-$(CONFIG_SOC_IMX25) += cpu-imx25.o mach-imx25.o pm-imx25.o
|
||||
|
||||
obj-$(CONFIG_SOC_IMX27) += cpu-imx27.o pm-imx27.o
|
||||
obj-$(CONFIG_SOC_IMX27) += mm-imx27.o ehci-imx27.o
|
||||
obj-$(CONFIG_SOC_IMX27) += cpu-imx27.o pm-imx27.o mach-imx27.o
|
||||
|
||||
obj-$(CONFIG_SOC_IMX31) += mm-imx3.o cpu-imx31.o iomux-imx31.o ehci-imx31.o
|
||||
obj-$(CONFIG_SOC_IMX35) += mm-imx3.o cpu-imx35.o ehci-imx35.o
|
||||
obj-$(CONFIG_SOC_IMX31) += mm-imx3.o cpu-imx31.o mach-imx31.o
|
||||
obj-$(CONFIG_SOC_IMX35) += mm-imx3.o cpu-imx35.o mach-imx35.o
|
||||
|
||||
imx5-pm-$(CONFIG_PM) += pm-imx5.o
|
||||
obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o $(imx5-pm-y)
|
||||
|
||||
obj-$(CONFIG_IMX_HAVE_IOMUX_V1) += iomux-v1.o
|
||||
obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o
|
||||
|
||||
obj-$(CONFIG_MXC_TZIC) += tzic.o
|
||||
obj-$(CONFIG_MXC_AVIC) += avic.o
|
||||
|
||||
|
@ -37,37 +31,6 @@ obj-y += ssi-fiq.o
|
|||
obj-y += ssi-fiq-ksym.o
|
||||
endif
|
||||
|
||||
# i.MX21 based machines
|
||||
obj-$(CONFIG_MACH_MX21ADS) += mach-mx21ads.o
|
||||
|
||||
# i.MX27 based machines
|
||||
obj-$(CONFIG_MACH_MX27ADS) += mach-mx27ads.o
|
||||
obj-$(CONFIG_MACH_MX27_3DS) += mach-mx27_3ds.o
|
||||
obj-$(CONFIG_MACH_IMX27_VISSTRIM_M10) += mach-imx27_visstrim_m10.o
|
||||
obj-$(CONFIG_MACH_PCA100) += mach-pca100.o
|
||||
obj-$(CONFIG_MACH_IMX27_DT) += imx27-dt.o
|
||||
|
||||
# i.MX31 based machines
|
||||
obj-$(CONFIG_MACH_MX31ADS) += mach-mx31ads.o
|
||||
obj-$(CONFIG_MACH_MX31LILLY) += mach-mx31lilly.o mx31lilly-db.o
|
||||
obj-$(CONFIG_MACH_MX31LITE) += mach-mx31lite.o mx31lite-db.o
|
||||
obj-$(CONFIG_MACH_PCM037) += mach-pcm037.o
|
||||
obj-$(CONFIG_MACH_PCM037_EET) += mach-pcm037_eet.o
|
||||
obj-$(CONFIG_MACH_MX31_3DS) += mach-mx31_3ds.o
|
||||
obj-$(CONFIG_MACH_MX31MOBOARD) += mach-mx31moboard.o mx31moboard-devboard.o \
|
||||
mx31moboard-marxbot.o mx31moboard-smartbot.o
|
||||
obj-$(CONFIG_MACH_QONG) += mach-qong.o
|
||||
obj-$(CONFIG_MACH_ARMADILLO5X0) += mach-armadillo5x0.o
|
||||
obj-$(CONFIG_MACH_KZM_ARM11_01) += mach-kzm_arm11_01.o
|
||||
obj-$(CONFIG_MACH_BUG) += mach-bug.o
|
||||
obj-$(CONFIG_MACH_IMX31_DT) += imx31-dt.o
|
||||
|
||||
# i.MX35 based machines
|
||||
obj-$(CONFIG_MACH_PCM043) += mach-pcm043.o
|
||||
obj-$(CONFIG_MACH_MX35_3DS) += mach-mx35_3ds.o
|
||||
obj-$(CONFIG_MACH_VPR200) += mach-vpr200.o
|
||||
obj-$(CONFIG_MACH_IMX35_DT) += imx35-dt.o
|
||||
|
||||
obj-$(CONFIG_HAVE_IMX_ANATOP) += anatop.o
|
||||
obj-$(CONFIG_HAVE_IMX_GPC) += gpc.o
|
||||
obj-$(CONFIG_HAVE_IMX_MMDC) += mmdc.o
|
||||
|
@ -105,5 +68,3 @@ obj-$(CONFIG_SOC_IMX53) += mach-imx53.o
|
|||
obj-$(CONFIG_SOC_VF610) += mach-vf610.o
|
||||
|
||||
obj-$(CONFIG_SOC_LS1021A) += mach-ls1021a.o
|
||||
|
||||
obj-y += devices/
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
*
|
||||
* Based on code for mobots boards,
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MXC_BOARD_MX31LILLY_H__
|
||||
#define __ASM_ARCH_MXC_BOARD_MX31LILLY_H__
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
enum mx31lilly_boards {
|
||||
MX31LILLY_NOBOARD = 0,
|
||||
MX31LILLY_DB = 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* This CPU module needs a baseboard to work. After basic initializing
|
||||
* its own devices, it calls the baseboard's init function.
|
||||
*/
|
||||
|
||||
extern void mx31lilly_db_init(void);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* __ASM_ARCH_MXC_BOARD_MX31LILLY_H__ */
|
|
@ -1,29 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright 2007 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
* Copyright (C) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
*
|
||||
* Based on code for mobots boards,
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MXC_BOARD_MX31LITE_H__
|
||||
#define __ASM_ARCH_MXC_BOARD_MX31LITE_H__
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
enum mx31lite_boards {
|
||||
MX31LITE_NOBOARD = 0,
|
||||
MX31LITE_DB = 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* This CPU module needs a baseboard to work. After basic initializing
|
||||
* its own devices, it calls the baseboard's init function.
|
||||
*/
|
||||
|
||||
extern void mx31lite_db_init(void);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* __ASM_ARCH_MXC_BOARD_MX31LITE_H__ */
|
|
@ -1,30 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MXC_BOARD_MX31MOBOARD_H__
|
||||
#define __ASM_ARCH_MXC_BOARD_MX31MOBOARD_H__
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
enum mx31moboard_boards {
|
||||
MX31NOBOARD = 0,
|
||||
MX31DEVBOARD = 1,
|
||||
MX31MARXBOT = 2,
|
||||
MX31SMARTBOT = 3,
|
||||
MX31EYEBOT = 4,
|
||||
};
|
||||
|
||||
/*
|
||||
* This CPU module needs a baseboard to work. After basic initializing
|
||||
* its own devices, it calls the baseboard's init function.
|
||||
*/
|
||||
|
||||
extern void mx31moboard_devboard_init(void);
|
||||
extern void mx31moboard_marxbot_init(void);
|
||||
extern void mx31moboard_smartbot_init(int board);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* __ASM_ARCH_MXC_BOARD_MX31MOBOARD_H__ */
|
|
@ -17,29 +17,14 @@ struct device_node;
|
|||
enum mxc_cpu_pwr_mode;
|
||||
struct of_device_id;
|
||||
|
||||
void mx21_map_io(void);
|
||||
void mx27_map_io(void);
|
||||
void mx31_map_io(void);
|
||||
void mx35_map_io(void);
|
||||
void imx21_init_early(void);
|
||||
void imx27_init_early(void);
|
||||
void imx31_init_early(void);
|
||||
void imx35_init_early(void);
|
||||
void mxc_init_irq(void __iomem *);
|
||||
void mx21_init_irq(void);
|
||||
void mx27_init_irq(void);
|
||||
void mx31_init_irq(void);
|
||||
void mx35_init_irq(void);
|
||||
void imx21_soc_init(void);
|
||||
void imx27_soc_init(void);
|
||||
void imx31_soc_init(void);
|
||||
void imx35_soc_init(void);
|
||||
int mx21_clocks_init(unsigned long lref, unsigned long fref);
|
||||
int mx27_clocks_init(unsigned long fref);
|
||||
int mx31_clocks_init(unsigned long fref);
|
||||
int mx35_clocks_init(void);
|
||||
struct platform_device *mxc_register_gpio(char *name, int id,
|
||||
resource_size_t iobase, resource_size_t iosize, int irq, int irq_high);
|
||||
void mxc_set_cpu_type(unsigned int type);
|
||||
void mxc_restart(enum reboot_mode, const char *);
|
||||
void mxc_arch_reset_init(void __iomem *);
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include "hardware.h"
|
||||
|
@ -17,16 +18,23 @@ static int mx27_cpu_rev = -1;
|
|||
static int mx27_cpu_partnumber;
|
||||
|
||||
#define SYS_CHIP_ID 0x00 /* The offset of CHIP ID register */
|
||||
#define SYSCTRL_OFFSET 0x800 /* Offset from CCM base address */
|
||||
|
||||
static int mx27_read_cpu_rev(void)
|
||||
{
|
||||
void __iomem *ccm_base;
|
||||
struct device_node *np;
|
||||
u32 val;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx27-ccm");
|
||||
ccm_base = of_iomap(np, 0);
|
||||
BUG_ON(!ccm_base);
|
||||
/*
|
||||
* now we have access to the IO registers. As we need
|
||||
* the silicon revision very early we read it here to
|
||||
* avoid any further hooks
|
||||
*/
|
||||
val = imx_readl(MX27_IO_ADDRESS(MX27_SYSCTRL_BASE_ADDR + SYS_CHIP_ID));
|
||||
val = imx_readl(ccm_base + SYSCTRL_OFFSET + SYS_CHIP_ID);
|
||||
|
||||
mx27_cpu_partnumber = (int)((val >> 12) & 0xFFFF);
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "common.h"
|
||||
|
@ -32,10 +33,16 @@ static struct {
|
|||
|
||||
static int mx31_read_cpu_rev(void)
|
||||
{
|
||||
void __iomem *iim_base;
|
||||
struct device_node *np;
|
||||
u32 i, srev;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx31-iim");
|
||||
iim_base = of_iomap(np, 0);
|
||||
BUG_ON(!iim_base);
|
||||
|
||||
/* read SREV register from IIM module */
|
||||
srev = imx_readl(MX31_IO_ADDRESS(MX31_IIM_BASE_ADDR + MXC_IIMSREV));
|
||||
srev = imx_readl(iim_base + MXC_IIMSREV);
|
||||
srev &= 0xff;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(mx31_cpu_type); i++)
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "hardware.h"
|
||||
|
@ -14,9 +15,15 @@ static int mx35_cpu_rev = -1;
|
|||
|
||||
static int mx35_read_cpu_rev(void)
|
||||
{
|
||||
void __iomem *iim_base;
|
||||
struct device_node *np;
|
||||
u32 rev;
|
||||
|
||||
rev = imx_readl(MX35_IO_ADDRESS(MX35_IIM_BASE_ADDR + MXC_IIMSREV));
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx35-iim");
|
||||
iim_base = of_iomap(np, 0);
|
||||
BUG_ON(!iim_base);
|
||||
|
||||
rev = imx_readl(iim_base + MXC_IIMSREV);
|
||||
switch (rev) {
|
||||
case 0x00:
|
||||
return IMX_CHIP_REVISION_1_0;
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "devices/devices-common.h"
|
||||
|
||||
extern const struct imx_imx21_hcd_data imx21_imx21_hcd_data;
|
||||
#define imx21_add_imx21_hcd(pdata) \
|
||||
imx_add_imx21_hcd(&imx21_imx21_hcd_data, pdata)
|
||||
|
||||
extern const struct imx_imx2_wdt_data imx21_imx2_wdt_data;
|
||||
#define imx21_add_imx2_wdt() \
|
||||
imx_add_imx2_wdt(&imx21_imx2_wdt_data)
|
||||
|
||||
extern const struct imx_imx_fb_data imx21_imx_fb_data;
|
||||
#define imx21_add_imx_fb(pdata) \
|
||||
imx_add_imx_fb(&imx21_imx_fb_data, pdata)
|
||||
|
||||
extern const struct imx_imx_i2c_data imx21_imx_i2c_data;
|
||||
#define imx21_add_imx_i2c(pdata) \
|
||||
imx_add_imx_i2c(&imx21_imx_i2c_data, pdata)
|
||||
|
||||
extern const struct imx_imx_keypad_data imx21_imx_keypad_data;
|
||||
#define imx21_add_imx_keypad(pdata) \
|
||||
imx_add_imx_keypad(&imx21_imx_keypad_data, pdata)
|
||||
|
||||
extern const struct imx_imx_ssi_data imx21_imx_ssi_data[];
|
||||
#define imx21_add_imx_ssi(id, pdata) \
|
||||
imx_add_imx_ssi(&imx21_imx_ssi_data[id], pdata)
|
||||
|
||||
extern const struct imx_imx_uart_1irq_data imx21_imx_uart_data[];
|
||||
#define imx21_add_imx_uart(id, pdata) \
|
||||
imx_add_imx_uart_1irq(&imx21_imx_uart_data[id], pdata)
|
||||
#define imx21_add_imx_uart0(pdata) imx21_add_imx_uart(0, pdata)
|
||||
#define imx21_add_imx_uart1(pdata) imx21_add_imx_uart(1, pdata)
|
||||
#define imx21_add_imx_uart2(pdata) imx21_add_imx_uart(2, pdata)
|
||||
#define imx21_add_imx_uart3(pdata) imx21_add_imx_uart(3, pdata)
|
||||
|
||||
extern const struct imx_mxc_mmc_data imx21_mxc_mmc_data[];
|
||||
#define imx21_add_mxc_mmc(id, pdata) \
|
||||
imx_add_mxc_mmc(&imx21_mxc_mmc_data[id], pdata)
|
||||
|
||||
extern const struct imx_mxc_nand_data imx21_mxc_nand_data;
|
||||
#define imx21_add_mxc_nand(pdata) \
|
||||
imx_add_mxc_nand(&imx21_mxc_nand_data, pdata)
|
||||
|
||||
extern const struct imx_mxc_w1_data imx21_mxc_w1_data;
|
||||
#define imx21_add_mxc_w1() \
|
||||
imx_add_mxc_w1(&imx21_mxc_w1_data)
|
||||
|
||||
extern const struct imx_spi_imx_data imx21_cspi_data[];
|
||||
#define imx21_add_cspi(id, pdata) \
|
||||
imx_add_spi_imx(&imx21_cspi_data[id], pdata)
|
||||
#define imx21_add_spi_imx0(pdata) imx21_add_cspi(0, pdata)
|
||||
#define imx21_add_spi_imx1(pdata) imx21_add_cspi(1, pdata)
|
|
@ -1,86 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "devices/devices-common.h"
|
||||
|
||||
extern const struct imx_fec_data imx27_fec_data;
|
||||
#define imx27_add_fec(pdata) \
|
||||
imx_add_fec(&imx27_fec_data, pdata)
|
||||
|
||||
extern const struct imx_fsl_usb2_udc_data imx27_fsl_usb2_udc_data;
|
||||
#define imx27_add_fsl_usb2_udc(pdata) \
|
||||
imx_add_fsl_usb2_udc(&imx27_fsl_usb2_udc_data, pdata)
|
||||
|
||||
extern const struct imx_imx27_coda_data imx27_coda_data;
|
||||
#define imx27_add_coda() \
|
||||
imx_add_imx27_coda(&imx27_coda_data)
|
||||
|
||||
extern const struct imx_imx2_wdt_data imx27_imx2_wdt_data;
|
||||
#define imx27_add_imx2_wdt() \
|
||||
imx_add_imx2_wdt(&imx27_imx2_wdt_data)
|
||||
|
||||
extern const struct imx_imx_fb_data imx27_imx_fb_data;
|
||||
#define imx27_add_imx_fb(pdata) \
|
||||
imx_add_imx_fb(&imx27_imx_fb_data, pdata)
|
||||
|
||||
extern const struct imx_imx_i2c_data imx27_imx_i2c_data[];
|
||||
#define imx27_add_imx_i2c(id, pdata) \
|
||||
imx_add_imx_i2c(&imx27_imx_i2c_data[id], pdata)
|
||||
|
||||
extern const struct imx_imx_keypad_data imx27_imx_keypad_data;
|
||||
#define imx27_add_imx_keypad(pdata) \
|
||||
imx_add_imx_keypad(&imx27_imx_keypad_data, pdata)
|
||||
|
||||
extern const struct imx_imx_ssi_data imx27_imx_ssi_data[];
|
||||
#define imx27_add_imx_ssi(id, pdata) \
|
||||
imx_add_imx_ssi(&imx27_imx_ssi_data[id], pdata)
|
||||
|
||||
extern const struct imx_imx_uart_1irq_data imx27_imx_uart_data[];
|
||||
#define imx27_add_imx_uart(id, pdata) \
|
||||
imx_add_imx_uart_1irq(&imx27_imx_uart_data[id], pdata)
|
||||
#define imx27_add_imx_uart0(pdata) imx27_add_imx_uart(0, pdata)
|
||||
#define imx27_add_imx_uart1(pdata) imx27_add_imx_uart(1, pdata)
|
||||
#define imx27_add_imx_uart2(pdata) imx27_add_imx_uart(2, pdata)
|
||||
#define imx27_add_imx_uart3(pdata) imx27_add_imx_uart(3, pdata)
|
||||
#define imx27_add_imx_uart4(pdata) imx27_add_imx_uart(4, pdata)
|
||||
#define imx27_add_imx_uart5(pdata) imx27_add_imx_uart(5, pdata)
|
||||
|
||||
extern const struct imx_mx2_camera_data imx27_mx2_camera_data;
|
||||
#define imx27_add_mx2_camera(pdata) \
|
||||
imx_add_mx2_camera(&imx27_mx2_camera_data, pdata)
|
||||
|
||||
extern const struct imx_mx2_emma_data imx27_mx2_emmaprp_data;
|
||||
#define imx27_add_mx2_emmaprp() \
|
||||
imx_add_mx2_emmaprp(&imx27_mx2_emmaprp_data)
|
||||
|
||||
extern const struct imx_mxc_ehci_data imx27_mxc_ehci_otg_data;
|
||||
#define imx27_add_mxc_ehci_otg(pdata) \
|
||||
imx_add_mxc_ehci(&imx27_mxc_ehci_otg_data, pdata)
|
||||
extern const struct imx_mxc_ehci_data imx27_mxc_ehci_hs_data[];
|
||||
#define imx27_add_mxc_ehci_hs(id, pdata) \
|
||||
imx_add_mxc_ehci(&imx27_mxc_ehci_hs_data[id - 1], pdata)
|
||||
|
||||
extern const struct imx_mxc_mmc_data imx27_mxc_mmc_data[];
|
||||
#define imx27_add_mxc_mmc(id, pdata) \
|
||||
imx_add_mxc_mmc(&imx27_mxc_mmc_data[id], pdata)
|
||||
|
||||
extern const struct imx_mxc_nand_data imx27_mxc_nand_data;
|
||||
#define imx27_add_mxc_nand(pdata) \
|
||||
imx_add_mxc_nand(&imx27_mxc_nand_data, pdata)
|
||||
|
||||
extern const struct imx_mxc_w1_data imx27_mxc_w1_data;
|
||||
#define imx27_add_mxc_w1() \
|
||||
imx_add_mxc_w1(&imx27_mxc_w1_data)
|
||||
|
||||
extern const struct imx_spi_imx_data imx27_cspi_data[];
|
||||
#define imx27_add_cspi(id, gtable) \
|
||||
imx_add_spi_imx(&imx27_cspi_data[id], gtable)
|
||||
#define imx27_add_spi_imx0(gtable) imx27_add_cspi(0, gtable)
|
||||
#define imx27_add_spi_imx1(gtable) imx27_add_cspi(1, gtable)
|
||||
#define imx27_add_spi_imx2(gtable) imx27_add_cspi(2, gtable)
|
||||
|
||||
extern const struct imx_pata_imx_data imx27_pata_imx_data;
|
||||
#define imx27_add_pata_imx() \
|
||||
imx_add_pata_imx(&imx27_pata_imx_data)
|
|
@ -1,80 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "devices/devices-common.h"
|
||||
|
||||
extern const struct imx_fsl_usb2_udc_data imx31_fsl_usb2_udc_data;
|
||||
#define imx31_add_fsl_usb2_udc(pdata) \
|
||||
imx_add_fsl_usb2_udc(&imx31_fsl_usb2_udc_data, pdata)
|
||||
|
||||
extern const struct imx_imx2_wdt_data imx31_imx2_wdt_data;
|
||||
#define imx31_add_imx2_wdt() \
|
||||
imx_add_imx2_wdt(&imx31_imx2_wdt_data)
|
||||
|
||||
extern const struct imx_imx_i2c_data imx31_imx_i2c_data[];
|
||||
#define imx31_add_imx_i2c(id, pdata) \
|
||||
imx_add_imx_i2c(&imx31_imx_i2c_data[id], pdata)
|
||||
#define imx31_add_imx_i2c0(pdata) imx31_add_imx_i2c(0, pdata)
|
||||
#define imx31_add_imx_i2c1(pdata) imx31_add_imx_i2c(1, pdata)
|
||||
#define imx31_add_imx_i2c2(pdata) imx31_add_imx_i2c(2, pdata)
|
||||
|
||||
extern const struct imx_imx_keypad_data imx31_imx_keypad_data;
|
||||
#define imx31_add_imx_keypad(pdata) \
|
||||
imx_add_imx_keypad(&imx31_imx_keypad_data, pdata)
|
||||
|
||||
extern const struct imx_imx_ssi_data imx31_imx_ssi_data[];
|
||||
#define imx31_add_imx_ssi(id, pdata) \
|
||||
imx_add_imx_ssi(&imx31_imx_ssi_data[id], pdata)
|
||||
|
||||
extern const struct imx_imx_uart_1irq_data imx31_imx_uart_data[];
|
||||
#define imx31_add_imx_uart(id, pdata) \
|
||||
imx_add_imx_uart_1irq(&imx31_imx_uart_data[id], pdata)
|
||||
#define imx31_add_imx_uart0(pdata) imx31_add_imx_uart(0, pdata)
|
||||
#define imx31_add_imx_uart1(pdata) imx31_add_imx_uart(1, pdata)
|
||||
#define imx31_add_imx_uart2(pdata) imx31_add_imx_uart(2, pdata)
|
||||
#define imx31_add_imx_uart3(pdata) imx31_add_imx_uart(3, pdata)
|
||||
#define imx31_add_imx_uart4(pdata) imx31_add_imx_uart(4, pdata)
|
||||
|
||||
extern const struct imx_ipu_core_data imx31_ipu_core_data;
|
||||
#define imx31_add_ipu_core() \
|
||||
imx_add_ipu_core(&imx31_ipu_core_data)
|
||||
#define imx31_alloc_mx3_camera(pdata) \
|
||||
imx_alloc_mx3_camera(&imx31_ipu_core_data, pdata)
|
||||
#define imx31_add_mx3_sdc_fb(pdata) \
|
||||
imx_add_mx3_sdc_fb(&imx31_ipu_core_data, pdata)
|
||||
|
||||
extern const struct imx_mxc_ehci_data imx31_mxc_ehci_otg_data;
|
||||
#define imx31_add_mxc_ehci_otg(pdata) \
|
||||
imx_add_mxc_ehci(&imx31_mxc_ehci_otg_data, pdata)
|
||||
extern const struct imx_mxc_ehci_data imx31_mxc_ehci_hs_data[];
|
||||
#define imx31_add_mxc_ehci_hs(id, pdata) \
|
||||
imx_add_mxc_ehci(&imx31_mxc_ehci_hs_data[id - 1], pdata)
|
||||
|
||||
extern const struct imx_mxc_mmc_data imx31_mxc_mmc_data[];
|
||||
#define imx31_add_mxc_mmc(id, pdata) \
|
||||
imx_add_mxc_mmc(&imx31_mxc_mmc_data[id], pdata)
|
||||
|
||||
extern const struct imx_mxc_nand_data imx31_mxc_nand_data;
|
||||
#define imx31_add_mxc_nand(pdata) \
|
||||
imx_add_mxc_nand(&imx31_mxc_nand_data, pdata)
|
||||
|
||||
extern const struct imx_mxc_rtc_data imx31_mxc_rtc_data;
|
||||
#define imx31_add_mxc_rtc() \
|
||||
imx_add_mxc_rtc(&imx31_mxc_rtc_data)
|
||||
|
||||
extern const struct imx_mxc_w1_data imx31_mxc_w1_data;
|
||||
#define imx31_add_mxc_w1() \
|
||||
imx_add_mxc_w1(&imx31_mxc_w1_data)
|
||||
|
||||
extern const struct imx_spi_imx_data imx31_cspi_data[];
|
||||
#define imx31_add_cspi(id, gtable) \
|
||||
imx_add_spi_imx(&imx31_cspi_data[id], gtable)
|
||||
#define imx31_add_spi_imx0(gtable) imx31_add_cspi(0, gtable)
|
||||
#define imx31_add_spi_imx1(gtable) imx31_add_cspi(1, gtable)
|
||||
#define imx31_add_spi_imx2(gtable) imx31_add_cspi(2, gtable)
|
||||
|
||||
extern const struct imx_pata_imx_data imx31_pata_imx_data;
|
||||
#define imx31_add_pata_imx() \
|
||||
imx_add_pata_imx(&imx31_pata_imx_data)
|
|
@ -1,87 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "devices/devices-common.h"
|
||||
|
||||
extern const struct imx_fec_data imx35_fec_data;
|
||||
#define imx35_add_fec(pdata) \
|
||||
imx_add_fec(&imx35_fec_data, pdata)
|
||||
|
||||
extern const struct imx_fsl_usb2_udc_data imx35_fsl_usb2_udc_data;
|
||||
#define imx35_add_fsl_usb2_udc(pdata) \
|
||||
imx_add_fsl_usb2_udc(&imx35_fsl_usb2_udc_data, pdata)
|
||||
|
||||
extern const struct imx_flexcan_data imx35_flexcan_data[];
|
||||
#define imx35_add_flexcan(id) \
|
||||
imx_add_flexcan(&imx35_flexcan_data[id])
|
||||
#define imx35_add_flexcan0() imx35_add_flexcan(0)
|
||||
#define imx35_add_flexcan1() imx35_add_flexcan(1)
|
||||
|
||||
extern const struct imx_imx2_wdt_data imx35_imx2_wdt_data;
|
||||
#define imx35_add_imx2_wdt() \
|
||||
imx_add_imx2_wdt(&imx35_imx2_wdt_data)
|
||||
|
||||
extern const struct imx_imx_i2c_data imx35_imx_i2c_data[];
|
||||
#define imx35_add_imx_i2c(id, pdata) \
|
||||
imx_add_imx_i2c(&imx35_imx_i2c_data[id], pdata)
|
||||
#define imx35_add_imx_i2c0(pdata) imx35_add_imx_i2c(0, pdata)
|
||||
#define imx35_add_imx_i2c1(pdata) imx35_add_imx_i2c(1, pdata)
|
||||
#define imx35_add_imx_i2c2(pdata) imx35_add_imx_i2c(2, pdata)
|
||||
|
||||
extern const struct imx_imx_keypad_data imx35_imx_keypad_data;
|
||||
#define imx35_add_imx_keypad(pdata) \
|
||||
imx_add_imx_keypad(&imx35_imx_keypad_data, pdata)
|
||||
|
||||
extern const struct imx_imx_ssi_data imx35_imx_ssi_data[];
|
||||
#define imx35_add_imx_ssi(id, pdata) \
|
||||
imx_add_imx_ssi(&imx35_imx_ssi_data[id], pdata)
|
||||
|
||||
extern const struct imx_imx_uart_1irq_data imx35_imx_uart_data[];
|
||||
#define imx35_add_imx_uart(id, pdata) \
|
||||
imx_add_imx_uart_1irq(&imx35_imx_uart_data[id], pdata)
|
||||
#define imx35_add_imx_uart0(pdata) imx35_add_imx_uart(0, pdata)
|
||||
#define imx35_add_imx_uart1(pdata) imx35_add_imx_uart(1, pdata)
|
||||
#define imx35_add_imx_uart2(pdata) imx35_add_imx_uart(2, pdata)
|
||||
|
||||
extern const struct imx_ipu_core_data imx35_ipu_core_data;
|
||||
#define imx35_add_ipu_core() \
|
||||
imx_add_ipu_core(&imx35_ipu_core_data)
|
||||
#define imx35_alloc_mx3_camera(pdata) \
|
||||
imx_alloc_mx3_camera(&imx35_ipu_core_data, pdata)
|
||||
#define imx35_add_mx3_sdc_fb(pdata) \
|
||||
imx_add_mx3_sdc_fb(&imx35_ipu_core_data, pdata)
|
||||
|
||||
extern const struct imx_mxc_ehci_data imx35_mxc_ehci_otg_data;
|
||||
#define imx35_add_mxc_ehci_otg(pdata) \
|
||||
imx_add_mxc_ehci(&imx35_mxc_ehci_otg_data, pdata)
|
||||
extern const struct imx_mxc_ehci_data imx35_mxc_ehci_hs_data;
|
||||
#define imx35_add_mxc_ehci_hs(pdata) \
|
||||
imx_add_mxc_ehci(&imx35_mxc_ehci_hs_data, pdata)
|
||||
|
||||
extern const struct imx_mxc_nand_data imx35_mxc_nand_data;
|
||||
#define imx35_add_mxc_nand(pdata) \
|
||||
imx_add_mxc_nand(&imx35_mxc_nand_data, pdata)
|
||||
|
||||
extern const struct imx_mxc_rtc_data imx35_mxc_rtc_data;
|
||||
#define imx35_add_mxc_rtc() \
|
||||
imx_add_mxc_rtc(&imx35_mxc_rtc_data)
|
||||
|
||||
extern const struct imx_mxc_w1_data imx35_mxc_w1_data;
|
||||
#define imx35_add_mxc_w1() \
|
||||
imx_add_mxc_w1(&imx35_mxc_w1_data)
|
||||
|
||||
extern const struct imx_sdhci_esdhc_imx_data imx35_sdhci_esdhc_imx_data[];
|
||||
#define imx35_add_sdhci_esdhc_imx(id, pdata) \
|
||||
imx_add_sdhci_esdhc_imx(&imx35_sdhci_esdhc_imx_data[id], pdata)
|
||||
|
||||
extern const struct imx_spi_imx_data imx35_cspi_data[];
|
||||
#define imx35_add_cspi(id, pdata) \
|
||||
imx_add_spi_imx(&imx35_cspi_data[id], pdata)
|
||||
#define imx35_add_spi_imx0(pdata) imx35_add_cspi(0, pdata)
|
||||
#define imx35_add_spi_imx1(pdata) imx35_add_cspi(1, pdata)
|
||||
|
||||
extern const struct imx_pata_imx_data imx35_pata_imx_data;
|
||||
#define imx35_add_pata_imx() \
|
||||
imx_add_pata_imx(&imx35_pata_imx_data)
|
|
@ -1,71 +0,0 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
config IMX_HAVE_PLATFORM_FEC
|
||||
bool
|
||||
default y if SOC_IMX25 || SOC_IMX27 || SOC_IMX35
|
||||
|
||||
config IMX_HAVE_PLATFORM_FLEXCAN
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_FSL_USB2_UDC
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_GPIO_KEYS
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_IMX21_HCD
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_IMX27_CODA
|
||||
bool
|
||||
default y if SOC_IMX27
|
||||
|
||||
config IMX_HAVE_PLATFORM_IMX2_WDT
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_IMX_FB
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_IMX_I2C
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_IMX_KEYPAD
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_PATA_IMX
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_IMX_SSI
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_IMX_UART
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_IPU_CORE
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_MX2_CAMERA
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_MX2_EMMA
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_MXC_MMC
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_MXC_NAND
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_MXC_RTC
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_MXC_W1
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
|
||||
bool
|
||||
|
||||
config IMX_HAVE_PLATFORM_SPI_IMX
|
||||
bool
|
|
@ -1,28 +0,0 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
obj-y := devices.o
|
||||
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_FEC) += platform-fec.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_FLEXCAN) += platform-flexcan.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_FSL_USB2_UDC) += platform-fsl-usb2-udc.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_GPIO_KEYS) += platform-gpio_keys.o
|
||||
obj-y += platform-gpio-mxc.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX21_HCD) += platform-imx21-hcd.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX27_CODA) += platform-imx27-coda.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT) += platform-imx2-wdt.o
|
||||
obj-y += platform-imx-dma.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_FB) += platform-imx-fb.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_I2C) += platform-imx-i2c.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_KEYPAD) += platform-imx-keypad.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_PATA_IMX) += platform-pata_imx.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_SSI) += platform-imx-ssi.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UART) += platform-imx-uart.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_IPU_CORE) += platform-ipu-core.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_MX2_CAMERA) += platform-mx2-camera.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_EHCI) += platform-mxc-ehci.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_MMC) += platform-mxc-mmc.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_NAND) += platform-mxc_nand.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_RTC) += platform-mxc_rtc.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_W1) += platform-mxc_w1.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX) += platform-sdhci-esdhc-imx.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_SPI_IMX) += platform-spi_imx.o
|
||||
obj-$(CONFIG_IMX_HAVE_PLATFORM_MX2_EMMA) += platform-mx2-emma.o
|
|
@ -1,293 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (C) 2009-2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/platform_data/dma-imx-sdma.h>
|
||||
|
||||
extern struct device mxc_aips_bus;
|
||||
extern struct device mxc_ahb_bus;
|
||||
|
||||
static inline struct platform_device *imx_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)
|
||||
{
|
||||
struct platform_device_info pdevinfo = {
|
||||
.name = name,
|
||||
.id = id,
|
||||
.res = res,
|
||||
.num_res = num_resources,
|
||||
.data = data,
|
||||
.size_data = size_data,
|
||||
.dma_mask = dmamask,
|
||||
};
|
||||
return platform_device_register_full(&pdevinfo);
|
||||
}
|
||||
|
||||
static inline struct platform_device *imx_add_platform_device(
|
||||
const char *name, int id,
|
||||
const struct resource *res, unsigned int num_resources,
|
||||
const void *data, size_t size_data)
|
||||
{
|
||||
return imx_add_platform_device_dmamask(
|
||||
name, id, res, num_resources, data, size_data, 0);
|
||||
}
|
||||
|
||||
#include <linux/fec.h>
|
||||
struct imx_fec_data {
|
||||
const char *devid;
|
||||
resource_size_t iobase;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_fec(
|
||||
const struct imx_fec_data *data,
|
||||
const struct fec_platform_data *pdata);
|
||||
|
||||
struct imx_flexcan_data {
|
||||
int id;
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_flexcan(
|
||||
const struct imx_flexcan_data *data);
|
||||
|
||||
#include <linux/fsl_devices.h>
|
||||
struct imx_fsl_usb2_udc_data {
|
||||
const char *devid;
|
||||
resource_size_t iobase;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_fsl_usb2_udc(
|
||||
const struct imx_fsl_usb2_udc_data *data,
|
||||
const struct fsl_usb2_platform_data *pdata);
|
||||
|
||||
#include <linux/gpio_keys.h>
|
||||
struct platform_device *__init imx_add_gpio_keys(
|
||||
const struct gpio_keys_platform_data *pdata);
|
||||
|
||||
#include <linux/platform_data/usb-mx2.h>
|
||||
struct imx_imx21_hcd_data {
|
||||
resource_size_t iobase;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_imx21_hcd(
|
||||
const struct imx_imx21_hcd_data *data,
|
||||
const struct mx21_usbh_platform_data *pdata);
|
||||
|
||||
struct imx_imx27_coda_data {
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_imx27_coda(
|
||||
const struct imx_imx27_coda_data *data);
|
||||
|
||||
struct imx_imx2_wdt_data {
|
||||
int id;
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
};
|
||||
struct platform_device *__init imx_add_imx2_wdt(
|
||||
const struct imx_imx2_wdt_data *data);
|
||||
|
||||
struct imx_imxdi_rtc_data {
|
||||
resource_size_t iobase;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_imxdi_rtc(
|
||||
const struct imx_imxdi_rtc_data *data);
|
||||
|
||||
#include <linux/platform_data/video-imxfb.h>
|
||||
struct imx_imx_fb_data {
|
||||
const char *devid;
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_imx_fb(
|
||||
const struct imx_imx_fb_data *data,
|
||||
const struct imx_fb_platform_data *pdata);
|
||||
|
||||
#include <linux/platform_data/i2c-imx.h>
|
||||
struct imx_imx_i2c_data {
|
||||
const char *devid;
|
||||
int id;
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_imx_i2c(
|
||||
const struct imx_imx_i2c_data *data,
|
||||
const struct imxi2c_platform_data *pdata);
|
||||
|
||||
#include <linux/input/matrix_keypad.h>
|
||||
struct imx_imx_keypad_data {
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_imx_keypad(
|
||||
const struct imx_imx_keypad_data *data,
|
||||
const struct matrix_keymap_data *pdata);
|
||||
|
||||
#include <linux/platform_data/asoc-imx-ssi.h>
|
||||
struct imx_imx_ssi_data {
|
||||
int id;
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
resource_size_t irq;
|
||||
resource_size_t dmatx0;
|
||||
resource_size_t dmarx0;
|
||||
resource_size_t dmatx1;
|
||||
resource_size_t dmarx1;
|
||||
};
|
||||
struct platform_device *__init imx_add_imx_ssi(
|
||||
const struct imx_imx_ssi_data *data,
|
||||
const struct imx_ssi_platform_data *pdata);
|
||||
|
||||
#include <linux/platform_data/serial-imx.h>
|
||||
struct imx_imx_uart_1irq_data {
|
||||
int id;
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_imx_uart_1irq(
|
||||
const struct imx_imx_uart_1irq_data *data,
|
||||
const struct imxuart_platform_data *pdata);
|
||||
|
||||
#include <linux/platform_data/video-mx3fb.h>
|
||||
#include <linux/platform_data/media/camera-mx3.h>
|
||||
struct imx_ipu_core_data {
|
||||
resource_size_t iobase;
|
||||
resource_size_t synirq;
|
||||
resource_size_t errirq;
|
||||
};
|
||||
struct platform_device *__init imx_add_ipu_core(
|
||||
const struct imx_ipu_core_data *data);
|
||||
struct platform_device *__init imx_alloc_mx3_camera(
|
||||
const struct imx_ipu_core_data *data,
|
||||
const struct mx3_camera_pdata *pdata);
|
||||
struct platform_device *__init imx_add_mx3_sdc_fb(
|
||||
const struct imx_ipu_core_data *data,
|
||||
struct mx3fb_platform_data *pdata);
|
||||
|
||||
#include <linux/platform_data/media/camera-mx2.h>
|
||||
struct imx_mx2_camera_data {
|
||||
const char *devid;
|
||||
resource_size_t iobasecsi;
|
||||
resource_size_t iosizecsi;
|
||||
resource_size_t irqcsi;
|
||||
resource_size_t iobaseemmaprp;
|
||||
resource_size_t iosizeemmaprp;
|
||||
resource_size_t irqemmaprp;
|
||||
};
|
||||
struct platform_device *__init imx_add_mx2_camera(
|
||||
const struct imx_mx2_camera_data *data,
|
||||
const struct mx2_camera_platform_data *pdata);
|
||||
|
||||
|
||||
struct imx_mx2_emma_data {
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_mx2_emmaprp(
|
||||
const struct imx_mx2_emma_data *data);
|
||||
|
||||
#include <linux/platform_data/usb-ehci-mxc.h>
|
||||
struct imx_mxc_ehci_data {
|
||||
int id;
|
||||
resource_size_t iobase;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_mxc_ehci(
|
||||
const struct imx_mxc_ehci_data *data,
|
||||
const struct mxc_usbh_platform_data *pdata);
|
||||
|
||||
#include <linux/platform_data/mmc-mxcmmc.h>
|
||||
struct imx_mxc_mmc_data {
|
||||
const char *devid;
|
||||
int id;
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
resource_size_t irq;
|
||||
resource_size_t dmareq;
|
||||
};
|
||||
struct platform_device *__init imx_add_mxc_mmc(
|
||||
const struct imx_mxc_mmc_data *data,
|
||||
const struct imxmmc_platform_data *pdata);
|
||||
|
||||
#include <linux/platform_data/mtd-mxc_nand.h>
|
||||
struct imx_mxc_nand_data {
|
||||
const char *devid;
|
||||
/*
|
||||
* id is traditionally 0, but -1 is more appropriate. We use -1 for new
|
||||
* machines but don't change existing devices as the nand device usually
|
||||
* appears in the kernel command line to pass its partitioning.
|
||||
*/
|
||||
int id;
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
resource_size_t axibase;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_mxc_nand(
|
||||
const struct imx_mxc_nand_data *data,
|
||||
const struct mxc_nand_platform_data *pdata);
|
||||
|
||||
struct imx_pata_imx_data {
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_pata_imx(
|
||||
const struct imx_pata_imx_data *data);
|
||||
|
||||
/* mxc_rtc */
|
||||
struct imx_mxc_rtc_data {
|
||||
const char *devid;
|
||||
resource_size_t iobase;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_mxc_rtc(
|
||||
const struct imx_mxc_rtc_data *data);
|
||||
|
||||
/* mxc_w1 */
|
||||
struct imx_mxc_w1_data {
|
||||
resource_size_t iobase;
|
||||
};
|
||||
struct platform_device *__init imx_add_mxc_w1(
|
||||
const struct imx_mxc_w1_data *data);
|
||||
|
||||
#include <linux/platform_data/mmc-esdhc-imx.h>
|
||||
struct imx_sdhci_esdhc_imx_data {
|
||||
const char *devid;
|
||||
int id;
|
||||
resource_size_t iobase;
|
||||
resource_size_t irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_sdhci_esdhc_imx(
|
||||
const struct imx_sdhci_esdhc_imx_data *data,
|
||||
const struct esdhc_platform_data *pdata);
|
||||
|
||||
struct imx_spi_imx_data {
|
||||
const char *devid;
|
||||
int id;
|
||||
resource_size_t iobase;
|
||||
resource_size_t iosize;
|
||||
int irq;
|
||||
};
|
||||
struct platform_device *__init imx_add_spi_imx(
|
||||
const struct imx_spi_imx_data *data, struct gpiod_lookup_table *gtable);
|
||||
|
||||
struct platform_device *imx_add_imx_dma(char *name, resource_size_t iobase,
|
||||
int irq);
|
||||
struct platform_device *imx_add_imx_sdma(char *name,
|
||||
resource_size_t iobase, int irq, struct sdma_platform_data *pdata);
|
|
@ -1,35 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright 2008 Sascha Hauer, kernel@pengutronix.de
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include "../common.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
struct device mxc_aips_bus = {
|
||||
.init_name = "mxc_aips",
|
||||
};
|
||||
|
||||
struct device mxc_ahb_bus = {
|
||||
.init_name = "mxc_ahb",
|
||||
};
|
||||
|
||||
int __init mxc_device_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = device_register(&mxc_aips_bus);
|
||||
if (ret < 0)
|
||||
goto done;
|
||||
|
||||
ret = device_register(&mxc_ahb_bus);
|
||||
|
||||
done:
|
||||
return ret;
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_fec_data_entry_single(soc, _devid) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.iobase = soc ## _FEC_BASE_ADDR, \
|
||||
.irq = soc ## _INT_FEC, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_fec_data imx27_fec_data __initconst =
|
||||
imx_fec_data_entry_single(MX27, "imx27-fec");
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
/* i.mx35 has the i.mx27 type fec */
|
||||
const struct imx_fec_data imx35_fec_data __initconst =
|
||||
imx_fec_data_entry_single(MX35, "imx27-fec");
|
||||
#endif
|
||||
|
||||
struct platform_device *__init imx_add_fec(
|
||||
const struct imx_fec_data *data,
|
||||
const struct fec_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,
|
||||
},
|
||||
};
|
||||
|
||||
return imx_add_platform_device_dmamask(data->devid, 0,
|
||||
res, ARRAY_SIZE(res),
|
||||
pdata, sizeof(*pdata), DMA_BIT_MASK(32));
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix, Marc Kleine-Budde <kernel@pengutronix.de>
|
||||
*/
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_flexcan_data_entry_single(soc, _id, _hwid, _size) \
|
||||
{ \
|
||||
.id = _id, \
|
||||
.iobase = soc ## _CAN ## _hwid ## _BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.irq = soc ## _INT_CAN ## _hwid, \
|
||||
}
|
||||
|
||||
#define imx_flexcan_data_entry(soc, _id, _hwid, _size) \
|
||||
[_id] = imx_flexcan_data_entry_single(soc, _id, _hwid, _size)
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_flexcan_data imx35_flexcan_data[] __initconst = {
|
||||
#define imx35_flexcan_data_entry(_id, _hwid) \
|
||||
imx_flexcan_data_entry(MX35, _id, _hwid, SZ_16K)
|
||||
imx35_flexcan_data_entry(0, 1),
|
||||
imx35_flexcan_data_entry(1, 2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_flexcan(
|
||||
const struct imx_flexcan_data *data)
|
||||
{
|
||||
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 imx_add_platform_device("flexcan", data->id,
|
||||
res, ARRAY_SIZE(res), NULL, 0);
|
||||
}
|
|
@ -1,51 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_fsl_usb2_udc_data_entry_single(soc, _devid) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.iobase = soc ## _USB_OTG_BASE_ADDR, \
|
||||
.irq = soc ## _INT_USB_OTG, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_fsl_usb2_udc_data imx27_fsl_usb2_udc_data __initconst =
|
||||
imx_fsl_usb2_udc_data_entry_single(MX27, "imx-udc-mx27");
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_fsl_usb2_udc_data imx31_fsl_usb2_udc_data __initconst =
|
||||
imx_fsl_usb2_udc_data_entry_single(MX31, "imx-udc-mx27");
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_fsl_usb2_udc_data imx35_fsl_usb2_udc_data __initconst =
|
||||
imx_fsl_usb2_udc_data_entry_single(MX35, "imx-udc-mx27");
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_fsl_usb2_udc(
|
||||
const struct imx_fsl_usb2_udc_data *data,
|
||||
const struct fsl_usb2_platform_data *pdata)
|
||||
{
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = data->iobase,
|
||||
.end = data->iobase + SZ_512 - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = data->irq,
|
||||
.end = data->irq,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
return imx_add_platform_device_dmamask(data->devid, -1,
|
||||
res, ARRAY_SIZE(res),
|
||||
pdata, sizeof(*pdata), DMA_BIT_MASK(32));
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
* Copyright 2011 Linaro Limited
|
||||
*/
|
||||
#include "devices-common.h"
|
||||
#include "../common.h"
|
||||
|
||||
struct platform_device *__init mxc_register_gpio(char *name, int id,
|
||||
resource_size_t iobase, resource_size_t iosize, int irq, int irq_high)
|
||||
{
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = iobase,
|
||||
.end = iobase + iosize - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = irq,
|
||||
.end = irq,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}, {
|
||||
.start = irq_high,
|
||||
.end = irq_high,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
unsigned int nres;
|
||||
|
||||
nres = irq_high ? ARRAY_SIZE(res) : ARRAY_SIZE(res) - 1;
|
||||
return platform_device_register_resndata(&mxc_aips_bus, name, id, res, nres, NULL, 0);
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*/
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
struct platform_device *__init imx_add_gpio_keys(
|
||||
const struct gpio_keys_platform_data *pdata)
|
||||
{
|
||||
return imx_add_platform_device("gpio-keys", -1, NULL,
|
||||
0, pdata, sizeof(*pdata));
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "devices-common.h"
|
||||
|
||||
struct platform_device __init __maybe_unused *imx_add_imx_dma(char *name,
|
||||
resource_size_t iobase, int irq)
|
||||
{
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = iobase,
|
||||
.end = iobase + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = irq,
|
||||
.end = irq,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
return platform_device_register_resndata(&mxc_ahb_bus,
|
||||
name, -1, res, ARRAY_SIZE(res), NULL, 0);
|
||||
}
|
||||
|
||||
struct platform_device __init __maybe_unused *imx_add_imx_sdma(char *name,
|
||||
resource_size_t iobase, int irq, struct sdma_platform_data *pdata)
|
||||
{
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = iobase,
|
||||
.end = iobase + SZ_16K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = irq,
|
||||
.end = irq,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
return platform_device_register_resndata(&mxc_ahb_bus, name,
|
||||
-1, res, ARRAY_SIZE(res), pdata, sizeof(*pdata));
|
||||
}
|
|
@ -1,47 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_imx_fb_data_entry_single(soc, _devid, _size) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.iobase = soc ## _LCDC_BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.irq = soc ## _INT_LCDC, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX21
|
||||
const struct imx_imx_fb_data imx21_imx_fb_data __initconst =
|
||||
imx_imx_fb_data_entry_single(MX21, "imx21-fb", SZ_4K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX21 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_imx_fb_data imx27_imx_fb_data __initconst =
|
||||
imx_imx_fb_data_entry_single(MX27, "imx21-fb", SZ_4K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
struct platform_device *__init imx_add_imx_fb(
|
||||
const struct imx_imx_fb_data *data,
|
||||
const struct imx_fb_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 imx_add_platform_device_dmamask(data->devid, 0,
|
||||
res, ARRAY_SIZE(res),
|
||||
pdata, sizeof(*pdata), DMA_BIT_MASK(32));
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2009-2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_imx_i2c_data_entry_single(soc, _devid, _id, _hwid, _size) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.id = _id, \
|
||||
.iobase = soc ## _I2C ## _hwid ## _BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.irq = soc ## _INT_I2C ## _hwid, \
|
||||
}
|
||||
|
||||
#define imx_imx_i2c_data_entry(soc, _devid, _id, _hwid, _size) \
|
||||
[_id] = imx_imx_i2c_data_entry_single(soc, _devid, _id, _hwid, _size)
|
||||
|
||||
#ifdef CONFIG_SOC_IMX21
|
||||
const struct imx_imx_i2c_data imx21_imx_i2c_data __initconst =
|
||||
imx_imx_i2c_data_entry_single(MX21, "imx21-i2c", 0, , SZ_4K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX21 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_imx_i2c_data imx27_imx_i2c_data[] __initconst = {
|
||||
#define imx27_imx_i2c_data_entry(_id, _hwid) \
|
||||
imx_imx_i2c_data_entry(MX27, "imx21-i2c", _id, _hwid, SZ_4K)
|
||||
imx27_imx_i2c_data_entry(0, 1),
|
||||
imx27_imx_i2c_data_entry(1, 2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_imx_i2c_data imx31_imx_i2c_data[] __initconst = {
|
||||
#define imx31_imx_i2c_data_entry(_id, _hwid) \
|
||||
imx_imx_i2c_data_entry(MX31, "imx21-i2c", _id, _hwid, SZ_4K)
|
||||
imx31_imx_i2c_data_entry(0, 1),
|
||||
imx31_imx_i2c_data_entry(1, 2),
|
||||
imx31_imx_i2c_data_entry(2, 3),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_imx_i2c_data imx35_imx_i2c_data[] __initconst = {
|
||||
#define imx35_imx_i2c_data_entry(_id, _hwid) \
|
||||
imx_imx_i2c_data_entry(MX35, "imx21-i2c", _id, _hwid, SZ_4K)
|
||||
imx35_imx_i2c_data_entry(0, 1),
|
||||
imx35_imx_i2c_data_entry(1, 2),
|
||||
imx35_imx_i2c_data_entry(2, 3),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_imx_i2c(
|
||||
const struct imx_imx_i2c_data *data,
|
||||
const struct imxi2c_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 imx_add_platform_device(data->devid, data->id,
|
||||
res, ARRAY_SIZE(res),
|
||||
pdata, sizeof(*pdata));
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_imx_keypad_data_entry_single(soc, _size) \
|
||||
{ \
|
||||
.iobase = soc ## _KPP_BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.irq = soc ## _INT_KPP, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX21
|
||||
const struct imx_imx_keypad_data imx21_imx_keypad_data __initconst =
|
||||
imx_imx_keypad_data_entry_single(MX21, SZ_16);
|
||||
#endif /* ifdef CONFIG_SOC_IMX21 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_imx_keypad_data imx27_imx_keypad_data __initconst =
|
||||
imx_imx_keypad_data_entry_single(MX27, SZ_16);
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_imx_keypad_data imx31_imx_keypad_data __initconst =
|
||||
imx_imx_keypad_data_entry_single(MX31, SZ_16);
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_imx_keypad_data imx35_imx_keypad_data __initconst =
|
||||
imx_imx_keypad_data_entry_single(MX35, SZ_16);
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_imx_keypad(
|
||||
const struct imx_imx_keypad_data *data,
|
||||
const struct matrix_keymap_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 imx_add_platform_device("imx-keypad", -1,
|
||||
res, ARRAY_SIZE(res), pdata, sizeof(*pdata));
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_imx_ssi_data_entry(soc, _id, _hwid, _size) \
|
||||
[_id] = { \
|
||||
.id = _id, \
|
||||
.iobase = soc ## _SSI ## _hwid ## _BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.irq = soc ## _INT_SSI ## _hwid, \
|
||||
.dmatx0 = soc ## _DMA_REQ_SSI ## _hwid ## _TX0, \
|
||||
.dmarx0 = soc ## _DMA_REQ_SSI ## _hwid ## _RX0, \
|
||||
.dmatx1 = soc ## _DMA_REQ_SSI ## _hwid ## _TX1, \
|
||||
.dmarx1 = soc ## _DMA_REQ_SSI ## _hwid ## _RX1, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX21
|
||||
const struct imx_imx_ssi_data imx21_imx_ssi_data[] __initconst = {
|
||||
#define imx21_imx_ssi_data_entry(_id, _hwid) \
|
||||
imx_imx_ssi_data_entry(MX21, _id, _hwid, SZ_4K)
|
||||
imx21_imx_ssi_data_entry(0, 1),
|
||||
imx21_imx_ssi_data_entry(1, 2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX21 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_imx_ssi_data imx27_imx_ssi_data[] __initconst = {
|
||||
#define imx27_imx_ssi_data_entry(_id, _hwid) \
|
||||
imx_imx_ssi_data_entry(MX27, _id, _hwid, SZ_4K)
|
||||
imx27_imx_ssi_data_entry(0, 1),
|
||||
imx27_imx_ssi_data_entry(1, 2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_imx_ssi_data imx31_imx_ssi_data[] __initconst = {
|
||||
#define imx31_imx_ssi_data_entry(_id, _hwid) \
|
||||
imx_imx_ssi_data_entry(MX31, _id, _hwid, SZ_4K)
|
||||
imx31_imx_ssi_data_entry(0, 1),
|
||||
imx31_imx_ssi_data_entry(1, 2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_imx_ssi_data imx35_imx_ssi_data[] __initconst = {
|
||||
#define imx35_imx_ssi_data_entry(_id, _hwid) \
|
||||
imx_imx_ssi_data_entry(MX35, _id, _hwid, SZ_4K)
|
||||
imx35_imx_ssi_data_entry(0, 1),
|
||||
imx35_imx_ssi_data_entry(1, 2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_imx_ssi(
|
||||
const struct imx_imx_ssi_data *data,
|
||||
const struct imx_ssi_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,
|
||||
},
|
||||
#define DMARES(_name) { \
|
||||
.name = #_name, \
|
||||
.start = data->dma ## _name, \
|
||||
.end = data->dma ## _name, \
|
||||
.flags = IORESOURCE_DMA, \
|
||||
}
|
||||
DMARES(tx0),
|
||||
DMARES(rx0),
|
||||
DMARES(tx1),
|
||||
DMARES(rx1),
|
||||
};
|
||||
|
||||
return imx_add_platform_device("imx-ssi", data->id,
|
||||
res, ARRAY_SIZE(res),
|
||||
pdata, sizeof(*pdata));
|
||||
}
|
|
@ -1,92 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2009-2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_imx_uart_3irq_data_entry(soc, _id, _hwid, _size) \
|
||||
[_id] = { \
|
||||
.id = _id, \
|
||||
.iobase = soc ## _UART ## _hwid ## _BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.irqrx = soc ## _INT_UART ## _hwid ## RX, \
|
||||
.irqtx = soc ## _INT_UART ## _hwid ## TX, \
|
||||
.irqrts = soc ## _INT_UART ## _hwid ## RTS, \
|
||||
}
|
||||
|
||||
#define imx_imx_uart_1irq_data_entry(soc, _id, _hwid, _size) \
|
||||
[_id] = { \
|
||||
.id = _id, \
|
||||
.iobase = soc ## _UART ## _hwid ## _BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.irq = soc ## _INT_UART ## _hwid, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX21
|
||||
const struct imx_imx_uart_1irq_data imx21_imx_uart_data[] __initconst = {
|
||||
#define imx21_imx_uart_data_entry(_id, _hwid) \
|
||||
imx_imx_uart_1irq_data_entry(MX21, _id, _hwid, SZ_4K)
|
||||
imx21_imx_uart_data_entry(0, 1),
|
||||
imx21_imx_uart_data_entry(1, 2),
|
||||
imx21_imx_uart_data_entry(2, 3),
|
||||
imx21_imx_uart_data_entry(3, 4),
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_imx_uart_1irq_data imx27_imx_uart_data[] __initconst = {
|
||||
#define imx27_imx_uart_data_entry(_id, _hwid) \
|
||||
imx_imx_uart_1irq_data_entry(MX27, _id, _hwid, SZ_4K)
|
||||
imx27_imx_uart_data_entry(0, 1),
|
||||
imx27_imx_uart_data_entry(1, 2),
|
||||
imx27_imx_uart_data_entry(2, 3),
|
||||
imx27_imx_uart_data_entry(3, 4),
|
||||
imx27_imx_uart_data_entry(4, 5),
|
||||
imx27_imx_uart_data_entry(5, 6),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_imx_uart_1irq_data imx31_imx_uart_data[] __initconst = {
|
||||
#define imx31_imx_uart_data_entry(_id, _hwid) \
|
||||
imx_imx_uart_1irq_data_entry(MX31, _id, _hwid, SZ_4K)
|
||||
imx31_imx_uart_data_entry(0, 1),
|
||||
imx31_imx_uart_data_entry(1, 2),
|
||||
imx31_imx_uart_data_entry(2, 3),
|
||||
imx31_imx_uart_data_entry(3, 4),
|
||||
imx31_imx_uart_data_entry(4, 5),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_imx_uart_1irq_data imx35_imx_uart_data[] __initconst = {
|
||||
#define imx35_imx_uart_data_entry(_id, _hwid) \
|
||||
imx_imx_uart_1irq_data_entry(MX35, _id, _hwid, SZ_16K)
|
||||
imx35_imx_uart_data_entry(0, 1),
|
||||
imx35_imx_uart_data_entry(1, 2),
|
||||
imx35_imx_uart_data_entry(2, 3),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_imx_uart_1irq(
|
||||
const struct imx_imx_uart_1irq_data *data,
|
||||
const struct imxuart_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,
|
||||
},
|
||||
};
|
||||
|
||||
/* i.mx21 type uart runs on all i.mx except i.mx1 */
|
||||
return imx_add_platform_device("imx21-uart", data->id,
|
||||
res, ARRAY_SIZE(res), pdata, sizeof(*pdata));
|
||||
}
|
|
@ -1,52 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_imx2_wdt_data_entry_single(soc, _id, _hwid, _size) \
|
||||
{ \
|
||||
.id = _id, \
|
||||
.iobase = soc ## _WDOG ## _hwid ## _BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
}
|
||||
#define imx_imx2_wdt_data_entry(soc, _id, _hwid, _size) \
|
||||
[_id] = imx_imx2_wdt_data_entry_single(soc, _id, _hwid, _size)
|
||||
|
||||
#ifdef CONFIG_SOC_IMX21
|
||||
const struct imx_imx2_wdt_data imx21_imx2_wdt_data __initconst =
|
||||
imx_imx2_wdt_data_entry_single(MX21, 0, , SZ_4K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX21 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_imx2_wdt_data imx27_imx2_wdt_data __initconst =
|
||||
imx_imx2_wdt_data_entry_single(MX27, 0, , SZ_4K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_imx2_wdt_data imx31_imx2_wdt_data __initconst =
|
||||
imx_imx2_wdt_data_entry_single(MX31, 0, , SZ_16K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_imx2_wdt_data imx35_imx2_wdt_data __initconst =
|
||||
imx_imx2_wdt_data_entry_single(MX35, 0, , SZ_16K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_imx2_wdt(
|
||||
const struct imx_imx2_wdt_data *data)
|
||||
{
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = data->iobase,
|
||||
.end = data->iobase + data->iosize - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
return imx_add_platform_device("imx2-wdt", data->id,
|
||||
res, ARRAY_SIZE(res), NULL, 0);
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_imx21_hcd_data_entry_single(soc) \
|
||||
{ \
|
||||
.iobase = soc ## _USBOTG_BASE_ADDR, \
|
||||
.irq = soc ## _INT_USBHOST, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX21
|
||||
const struct imx_imx21_hcd_data imx21_imx21_hcd_data __initconst =
|
||||
imx_imx21_hcd_data_entry_single(MX21);
|
||||
#endif /* ifdef CONFIG_SOC_IMX21 */
|
||||
|
||||
struct platform_device *__init imx_add_imx21_hcd(
|
||||
const struct imx_imx21_hcd_data *data,
|
||||
const struct mx21_usbh_platform_data *pdata)
|
||||
{
|
||||
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 imx_add_platform_device_dmamask("imx21-hcd", 0,
|
||||
res, ARRAY_SIZE(res),
|
||||
pdata, sizeof(*pdata), DMA_BIT_MASK(32));
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2012 Vista Silicon
|
||||
* Javier Martin <javier.martin@vista-silicon.com>
|
||||
*/
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_imx27_coda_data imx27_coda_data __initconst = {
|
||||
.iobase = MX27_VPU_BASE_ADDR,
|
||||
.iosize = SZ_512,
|
||||
.irq = MX27_INT_VPU,
|
||||
};
|
||||
#endif
|
||||
|
||||
struct platform_device *__init imx_add_imx27_coda(
|
||||
const struct imx_imx27_coda_data *data)
|
||||
{
|
||||
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 imx_add_platform_device_dmamask("coda-imx27", 0, res, 2, NULL,
|
||||
0, DMA_BIT_MASK(32));
|
||||
}
|
|
@ -1,127 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2011 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_ipu_core_entry_single(soc) \
|
||||
{ \
|
||||
.iobase = soc ## _IPU_CTRL_BASE_ADDR, \
|
||||
.synirq = soc ## _INT_IPU_SYN, \
|
||||
.errirq = soc ## _INT_IPU_ERR, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_ipu_core_data imx31_ipu_core_data __initconst =
|
||||
imx_ipu_core_entry_single(MX31);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_ipu_core_data imx35_ipu_core_data __initconst =
|
||||
imx_ipu_core_entry_single(MX35);
|
||||
#endif
|
||||
|
||||
static struct platform_device *imx_ipu_coredev __initdata;
|
||||
|
||||
struct platform_device *__init imx_add_ipu_core(
|
||||
const struct imx_ipu_core_data *data)
|
||||
{
|
||||
/* The resource order is important! */
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = data->iobase,
|
||||
.end = data->iobase + 0x5f,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = data->iobase + 0x88,
|
||||
.end = data->iobase + 0xb3,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = data->synirq,
|
||||
.end = data->synirq,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}, {
|
||||
.start = data->errirq,
|
||||
.end = data->errirq,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
return imx_ipu_coredev = imx_add_platform_device("ipu-core", -1,
|
||||
res, ARRAY_SIZE(res), NULL, 0);
|
||||
}
|
||||
|
||||
struct platform_device *__init imx_alloc_mx3_camera(
|
||||
const struct imx_ipu_core_data *data,
|
||||
const struct mx3_camera_pdata *pdata)
|
||||
{
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = data->iobase + 0x60,
|
||||
.end = data->iobase + 0x87,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
int ret = -ENOMEM;
|
||||
struct platform_device *pdev;
|
||||
|
||||
if (IS_ERR_OR_NULL(imx_ipu_coredev))
|
||||
return ERR_PTR(-ENODEV);
|
||||
|
||||
pdev = platform_device_alloc("mx3-camera", 0);
|
||||
if (!pdev)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
pdev->dev.dma_mask = kmalloc(sizeof(*pdev->dev.dma_mask), GFP_KERNEL);
|
||||
if (!pdev->dev.dma_mask)
|
||||
goto err;
|
||||
|
||||
*pdev->dev.dma_mask = DMA_BIT_MASK(32);
|
||||
pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
|
||||
|
||||
ret = platform_device_add_resources(pdev, res, ARRAY_SIZE(res));
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
if (pdata) {
|
||||
struct mx3_camera_pdata *copied_pdata;
|
||||
|
||||
ret = platform_device_add_data(pdev, pdata, sizeof(*pdata));
|
||||
if (ret) {
|
||||
err:
|
||||
kfree(pdev->dev.dma_mask);
|
||||
platform_device_put(pdev);
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
copied_pdata = dev_get_platdata(&pdev->dev);
|
||||
copied_pdata->dma_dev = &imx_ipu_coredev->dev;
|
||||
}
|
||||
|
||||
return pdev;
|
||||
}
|
||||
|
||||
struct platform_device *__init imx_add_mx3_sdc_fb(
|
||||
const struct imx_ipu_core_data *data,
|
||||
struct mx3fb_platform_data *pdata)
|
||||
{
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = data->iobase + 0xb4,
|
||||
.end = data->iobase + 0x1bf,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
if (IS_ERR_OR_NULL(imx_ipu_coredev))
|
||||
return ERR_PTR(-ENODEV);
|
||||
|
||||
pdata->dma_dev = &imx_ipu_coredev->dev;
|
||||
|
||||
return imx_add_platform_device_dmamask("mx3_sdc_fb", -1,
|
||||
res, ARRAY_SIZE(res), pdata, sizeof(*pdata),
|
||||
DMA_BIT_MASK(32));
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_mx2_camera_data_entry_single(soc, _devid) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.iobasecsi = soc ## _CSI_BASE_ADDR, \
|
||||
.iosizecsi = SZ_4K, \
|
||||
.irqcsi = soc ## _INT_CSI, \
|
||||
}
|
||||
#define imx_mx2_camera_data_entry_single_emma(soc, _devid) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.iobasecsi = soc ## _CSI_BASE_ADDR, \
|
||||
.iosizecsi = SZ_32, \
|
||||
.irqcsi = soc ## _INT_CSI, \
|
||||
.iobaseemmaprp = soc ## _EMMAPRP_BASE_ADDR, \
|
||||
.iosizeemmaprp = SZ_32, \
|
||||
.irqemmaprp = soc ## _INT_EMMAPRP, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_mx2_camera_data imx27_mx2_camera_data __initconst =
|
||||
imx_mx2_camera_data_entry_single_emma(MX27, "imx27-camera");
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
struct platform_device *__init imx_add_mx2_camera(
|
||||
const struct imx_mx2_camera_data *data,
|
||||
const struct mx2_camera_platform_data *pdata)
|
||||
{
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = data->iobasecsi,
|
||||
.end = data->iobasecsi + data->iosizecsi - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = data->irqcsi,
|
||||
.end = data->irqcsi,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}, {
|
||||
.start = data->iobaseemmaprp,
|
||||
.end = data->iobaseemmaprp + data->iosizeemmaprp - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = data->irqemmaprp,
|
||||
.end = data->irqemmaprp,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
return imx_add_platform_device_dmamask(data->devid, 0,
|
||||
res, data->iobaseemmaprp ? 4 : 2,
|
||||
pdata, sizeof(*pdata), DMA_BIT_MASK(32));
|
||||
}
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_mx2_emmaprp_data_entry_single(soc) \
|
||||
{ \
|
||||
.iobase = soc ## _EMMAPRP_BASE_ADDR, \
|
||||
.iosize = SZ_256, \
|
||||
.irq = soc ## _INT_EMMAPRP, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_mx2_emma_data imx27_mx2_emmaprp_data __initconst =
|
||||
imx_mx2_emmaprp_data_entry_single(MX27);
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
struct platform_device *__init imx_add_mx2_emmaprp(
|
||||
const struct imx_mx2_emma_data *data)
|
||||
{
|
||||
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 imx_add_platform_device_dmamask("m2m-emmaprp", 0,
|
||||
res, 2, NULL, 0, DMA_BIT_MASK(32));
|
||||
}
|
|
@ -1,61 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_mxc_ehci_data_entry_single(soc, _id, hs) \
|
||||
{ \
|
||||
.id = _id, \
|
||||
.iobase = soc ## _USB_ ## hs ## _BASE_ADDR, \
|
||||
.irq = soc ## _INT_USB_ ## hs, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_mxc_ehci_data imx27_mxc_ehci_otg_data __initconst =
|
||||
imx_mxc_ehci_data_entry_single(MX27, 0, OTG);
|
||||
const struct imx_mxc_ehci_data imx27_mxc_ehci_hs_data[] __initconst = {
|
||||
imx_mxc_ehci_data_entry_single(MX27, 1, HS1),
|
||||
imx_mxc_ehci_data_entry_single(MX27, 2, HS2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_mxc_ehci_data imx31_mxc_ehci_otg_data __initconst =
|
||||
imx_mxc_ehci_data_entry_single(MX31, 0, OTG);
|
||||
const struct imx_mxc_ehci_data imx31_mxc_ehci_hs_data[] __initconst = {
|
||||
imx_mxc_ehci_data_entry_single(MX31, 1, HS1),
|
||||
imx_mxc_ehci_data_entry_single(MX31, 2, HS2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_mxc_ehci_data imx35_mxc_ehci_otg_data __initconst =
|
||||
imx_mxc_ehci_data_entry_single(MX35, 0, OTG);
|
||||
const struct imx_mxc_ehci_data imx35_mxc_ehci_hs_data __initconst =
|
||||
imx_mxc_ehci_data_entry_single(MX35, 1, HS);
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_mxc_ehci(
|
||||
const struct imx_mxc_ehci_data *data,
|
||||
const struct mxc_usbh_platform_data *pdata)
|
||||
{
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = data->iobase,
|
||||
.end = data->iobase + SZ_512 - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = data->irq,
|
||||
.end = data->irq,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
return imx_add_platform_device_dmamask("mxc-ehci", data->id,
|
||||
res, ARRAY_SIZE(res),
|
||||
pdata, sizeof(*pdata), DMA_BIT_MASK(32));
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_mxc_mmc_data_entry_single(soc, _devid, _id, _hwid, _size) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.id = _id, \
|
||||
.iobase = soc ## _SDHC ## _hwid ## _BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.irq = soc ## _INT_SDHC ## _hwid, \
|
||||
.dmareq = soc ## _DMA_REQ_SDHC ## _hwid, \
|
||||
}
|
||||
#define imx_mxc_mmc_data_entry(soc, _devid, _id, _hwid, _size) \
|
||||
[_id] = imx_mxc_mmc_data_entry_single(soc, _devid, _id, _hwid, _size)
|
||||
|
||||
#ifdef CONFIG_SOC_IMX21
|
||||
const struct imx_mxc_mmc_data imx21_mxc_mmc_data[] __initconst = {
|
||||
#define imx21_mxc_mmc_data_entry(_id, _hwid) \
|
||||
imx_mxc_mmc_data_entry(MX21, "imx21-mmc", _id, _hwid, SZ_4K)
|
||||
imx21_mxc_mmc_data_entry(0, 1),
|
||||
imx21_mxc_mmc_data_entry(1, 2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX21 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_mxc_mmc_data imx27_mxc_mmc_data[] __initconst = {
|
||||
#define imx27_mxc_mmc_data_entry(_id, _hwid) \
|
||||
imx_mxc_mmc_data_entry(MX27, "imx21-mmc", _id, _hwid, SZ_4K)
|
||||
imx27_mxc_mmc_data_entry(0, 1),
|
||||
imx27_mxc_mmc_data_entry(1, 2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_mxc_mmc_data imx31_mxc_mmc_data[] __initconst = {
|
||||
#define imx31_mxc_mmc_data_entry(_id, _hwid) \
|
||||
imx_mxc_mmc_data_entry(MX31, "imx31-mmc", _id, _hwid, SZ_16K)
|
||||
imx31_mxc_mmc_data_entry(0, 1),
|
||||
imx31_mxc_mmc_data_entry(1, 2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
struct platform_device *__init imx_add_mxc_mmc(
|
||||
const struct imx_mxc_mmc_data *data,
|
||||
const struct imxmmc_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,
|
||||
}, {
|
||||
.start = data->dmareq,
|
||||
.end = data->dmareq,
|
||||
.flags = IORESOURCE_DMA,
|
||||
},
|
||||
};
|
||||
return imx_add_platform_device_dmamask(data->devid, data->id,
|
||||
res, ARRAY_SIZE(res),
|
||||
pdata, sizeof(*pdata), DMA_BIT_MASK(32));
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2009-2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_mxc_nand_data_entry_single(soc, _devid, _size) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.iobase = soc ## _NFC_BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.irq = soc ## _INT_NFC \
|
||||
}
|
||||
|
||||
#define imx_mxc_nandv3_data_entry_single(soc, _devid, _size) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.id = -1, \
|
||||
.iobase = soc ## _NFC_BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.axibase = soc ## _NFC_AXI_BASE_ADDR, \
|
||||
.irq = soc ## _INT_NFC \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX21
|
||||
const struct imx_mxc_nand_data imx21_mxc_nand_data __initconst =
|
||||
imx_mxc_nand_data_entry_single(MX21, "imx21-nand", SZ_4K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX21 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst =
|
||||
imx_mxc_nand_data_entry_single(MX27, "imx27-nand", SZ_4K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_mxc_nand_data imx31_mxc_nand_data __initconst =
|
||||
imx_mxc_nand_data_entry_single(MX31, "imx27-nand", SZ_4K);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_mxc_nand_data imx35_mxc_nand_data __initconst =
|
||||
imx_mxc_nand_data_entry_single(MX35, "imx25-nand", SZ_8K);
|
||||
#endif
|
||||
|
||||
struct platform_device *__init imx_add_mxc_nand(
|
||||
const struct imx_mxc_nand_data *data,
|
||||
const struct mxc_nand_platform_data *pdata)
|
||||
{
|
||||
/* AXI has to come first, that's how the mxc_nand driver expect it */
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = data->iobase,
|
||||
.end = data->iobase + data->iosize - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = data->irq,
|
||||
.end = data->irq,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}, {
|
||||
.start = data->axibase,
|
||||
.end = data->axibase + SZ_16K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
return imx_add_platform_device(data->devid, data->id,
|
||||
res, ARRAY_SIZE(res) - !data->axibase,
|
||||
pdata, sizeof(*pdata));
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010-2011 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_mxc_rtc_data_entry_single(soc, _devid) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.iobase = soc ## _RTC_BASE_ADDR, \
|
||||
.irq = soc ## _INT_RTC, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_mxc_rtc_data imx31_mxc_rtc_data __initconst =
|
||||
imx_mxc_rtc_data_entry_single(MX31, "imx21-rtc");
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_mxc_rtc_data imx35_mxc_rtc_data __initconst =
|
||||
imx_mxc_rtc_data_entry_single(MX35, "imx21-rtc");
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_mxc_rtc(
|
||||
const struct imx_mxc_rtc_data *data)
|
||||
{
|
||||
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 imx_add_platform_device(data->devid, -1,
|
||||
res, ARRAY_SIZE(res), NULL, 0);
|
||||
}
|
|
@ -1,47 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_mxc_w1_data_entry_single(soc) \
|
||||
{ \
|
||||
.iobase = soc ## _OWIRE_BASE_ADDR, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX21
|
||||
const struct imx_mxc_w1_data imx21_mxc_w1_data __initconst =
|
||||
imx_mxc_w1_data_entry_single(MX21);
|
||||
#endif /* ifdef CONFIG_SOC_IMX21 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_mxc_w1_data imx27_mxc_w1_data __initconst =
|
||||
imx_mxc_w1_data_entry_single(MX27);
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_mxc_w1_data imx31_mxc_w1_data __initconst =
|
||||
imx_mxc_w1_data_entry_single(MX31);
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_mxc_w1_data imx35_mxc_w1_data __initconst =
|
||||
imx_mxc_w1_data_entry_single(MX35);
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_mxc_w1(
|
||||
const struct imx_mxc_w1_data *data)
|
||||
{
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = data->iobase,
|
||||
.end = data->iobase + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
return imx_add_platform_device("mxc_w1", 0,
|
||||
res, ARRAY_SIZE(res), NULL, 0);
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_pata_imx_data_entry_single(soc, _size) \
|
||||
{ \
|
||||
.iobase = soc ## _ATA_BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.irq = soc ## _INT_ATA, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_pata_imx_data imx27_pata_imx_data __initconst =
|
||||
imx_pata_imx_data_entry_single(MX27, SZ_4K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_pata_imx_data imx31_pata_imx_data __initconst =
|
||||
imx_pata_imx_data_entry_single(MX31, SZ_16K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_pata_imx_data imx35_pata_imx_data __initconst =
|
||||
imx_pata_imx_data_entry_single(MX35, SZ_16K);
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_pata_imx(
|
||||
const struct imx_pata_imx_data *data)
|
||||
{
|
||||
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 imx_add_platform_device("pata_imx", -1,
|
||||
res, ARRAY_SIZE(res), NULL, 0);
|
||||
}
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2010 Pengutronix, Wolfram Sang <kernel@pengutronix.de>
|
||||
*/
|
||||
|
||||
#include <linux/platform_data/mmc-esdhc-imx.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_sdhci_esdhc_imx_data_entry_single(soc, _devid, _id, hwid) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.id = _id, \
|
||||
.iobase = soc ## _ESDHC ## hwid ## _BASE_ADDR, \
|
||||
.irq = soc ## _INT_ESDHC ## hwid, \
|
||||
}
|
||||
|
||||
#define imx_sdhci_esdhc_imx_data_entry(soc, devid, id, hwid) \
|
||||
[id] = imx_sdhci_esdhc_imx_data_entry_single(soc, devid, id, hwid)
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_sdhci_esdhc_imx_data
|
||||
imx35_sdhci_esdhc_imx_data[] __initconst = {
|
||||
#define imx35_sdhci_esdhc_imx_data_entry(_id, _hwid) \
|
||||
imx_sdhci_esdhc_imx_data_entry(MX35, "sdhci-esdhc-imx35", _id, _hwid)
|
||||
imx35_sdhci_esdhc_imx_data_entry(0, 1),
|
||||
imx35_sdhci_esdhc_imx_data_entry(1, 2),
|
||||
imx35_sdhci_esdhc_imx_data_entry(2, 3),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
static const struct esdhc_platform_data default_esdhc_pdata __initconst = {
|
||||
.wp_type = ESDHC_WP_NONE,
|
||||
.cd_type = ESDHC_CD_NONE,
|
||||
};
|
||||
|
||||
struct platform_device *__init imx_add_sdhci_esdhc_imx(
|
||||
const struct imx_sdhci_esdhc_imx_data *data,
|
||||
const struct esdhc_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,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* If machine does not provide pdata, use the default one
|
||||
* which means no WP/CD support
|
||||
*/
|
||||
if (!pdata)
|
||||
pdata = &default_esdhc_pdata;
|
||||
|
||||
return imx_add_platform_device_dmamask(data->devid, data->id, res,
|
||||
ARRAY_SIZE(res), pdata, sizeof(*pdata),
|
||||
DMA_BIT_MASK(32));
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2009-2010 Pengutronix
|
||||
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
||||
*/
|
||||
#include <linux/gpio/machine.h>
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_spi_imx_data_entry_single(soc, type, _devid, _id, hwid, _size) \
|
||||
{ \
|
||||
.devid = _devid, \
|
||||
.id = _id, \
|
||||
.iobase = soc ## _ ## type ## hwid ## _BASE_ADDR, \
|
||||
.iosize = _size, \
|
||||
.irq = soc ## _INT_ ## type ## hwid, \
|
||||
}
|
||||
|
||||
#define imx_spi_imx_data_entry(soc, type, devid, id, hwid, size) \
|
||||
[id] = imx_spi_imx_data_entry_single(soc, type, devid, id, hwid, size)
|
||||
|
||||
#ifdef CONFIG_SOC_IMX21
|
||||
const struct imx_spi_imx_data imx21_cspi_data[] __initconst = {
|
||||
#define imx21_cspi_data_entry(_id, _hwid) \
|
||||
imx_spi_imx_data_entry(MX21, CSPI, "imx21-cspi", _id, _hwid, SZ_4K)
|
||||
imx21_cspi_data_entry(0, 1),
|
||||
imx21_cspi_data_entry(1, 2),
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SOC_IMX27
|
||||
const struct imx_spi_imx_data imx27_cspi_data[] __initconst = {
|
||||
#define imx27_cspi_data_entry(_id, _hwid) \
|
||||
imx_spi_imx_data_entry(MX27, CSPI, "imx27-cspi", _id, _hwid, SZ_4K)
|
||||
imx27_cspi_data_entry(0, 1),
|
||||
imx27_cspi_data_entry(1, 2),
|
||||
imx27_cspi_data_entry(2, 3),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX27 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
const struct imx_spi_imx_data imx31_cspi_data[] __initconst = {
|
||||
#define imx31_cspi_data_entry(_id, _hwid) \
|
||||
imx_spi_imx_data_entry(MX31, CSPI, "imx31-cspi", _id, _hwid, SZ_4K)
|
||||
imx31_cspi_data_entry(0, 1),
|
||||
imx31_cspi_data_entry(1, 2),
|
||||
imx31_cspi_data_entry(2, 3),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
#ifdef CONFIG_SOC_IMX35
|
||||
const struct imx_spi_imx_data imx35_cspi_data[] __initconst = {
|
||||
#define imx35_cspi_data_entry(_id, _hwid) \
|
||||
imx_spi_imx_data_entry(MX35, CSPI, "imx35-cspi", _id, _hwid, SZ_4K)
|
||||
imx35_cspi_data_entry(0, 1),
|
||||
imx35_cspi_data_entry(1, 2),
|
||||
};
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
||||
struct platform_device *__init imx_add_spi_imx(
|
||||
const struct imx_spi_imx_data *data, struct gpiod_lookup_table *gtable)
|
||||
{
|
||||
struct resource res[] = {
|
||||
{
|
||||
.start = data->iobase,
|
||||
.end = data->iobase + data->iosize - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = data->irq,
|
||||
.end = data->irq,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
if (gtable)
|
||||
gpiod_add_lookup_table(gtable);
|
||||
return imx_add_platform_device(data->devid, data->id,
|
||||
res, ARRAY_SIZE(res), NULL, 0);
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
* Copyright (C) 2010 Freescale Semiconductor, Inc.
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_data/usb-ehci-mxc.h>
|
||||
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
|
||||
#define USBCTRL_OTGBASE_OFFSET 0x600
|
||||
|
||||
#define MX27_OTG_SIC_SHIFT 29
|
||||
#define MX27_OTG_SIC_MASK (0x3 << MX27_OTG_SIC_SHIFT)
|
||||
#define MX27_OTG_PM_BIT (1 << 24)
|
||||
|
||||
#define MX27_H2_SIC_SHIFT 21
|
||||
#define MX27_H2_SIC_MASK (0x3 << MX27_H2_SIC_SHIFT)
|
||||
#define MX27_H2_PM_BIT (1 << 16)
|
||||
#define MX27_H2_DT_BIT (1 << 5)
|
||||
|
||||
#define MX27_H1_SIC_SHIFT 13
|
||||
#define MX27_H1_SIC_MASK (0x3 << MX27_H1_SIC_SHIFT)
|
||||
#define MX27_H1_PM_BIT (1 << 8)
|
||||
#define MX27_H1_DT_BIT (1 << 4)
|
||||
|
||||
int mx27_initialize_usb_hw(int port, unsigned int flags)
|
||||
{
|
||||
unsigned int v;
|
||||
|
||||
v = readl(MX27_IO_ADDRESS(MX27_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET));
|
||||
|
||||
switch (port) {
|
||||
case 0: /* OTG port */
|
||||
v &= ~(MX27_OTG_SIC_MASK | MX27_OTG_PM_BIT);
|
||||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX27_OTG_SIC_SHIFT;
|
||||
|
||||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
|
||||
v |= MX27_OTG_PM_BIT;
|
||||
break;
|
||||
case 1: /* H1 port */
|
||||
v &= ~(MX27_H1_SIC_MASK | MX27_H1_PM_BIT | MX27_H1_DT_BIT);
|
||||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX27_H1_SIC_SHIFT;
|
||||
|
||||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
|
||||
v |= MX27_H1_PM_BIT;
|
||||
|
||||
if (!(flags & MXC_EHCI_TTL_ENABLED))
|
||||
v |= MX27_H1_DT_BIT;
|
||||
|
||||
break;
|
||||
case 2: /* H2 port */
|
||||
v &= ~(MX27_H2_SIC_MASK | MX27_H2_PM_BIT | MX27_H2_DT_BIT);
|
||||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX27_H2_SIC_SHIFT;
|
||||
|
||||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
|
||||
v |= MX27_H2_PM_BIT;
|
||||
|
||||
if (!(flags & MXC_EHCI_TTL_ENABLED))
|
||||
v |= MX27_H2_DT_BIT;
|
||||
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
writel(v, MX27_IO_ADDRESS(MX27_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
* Copyright (C) 2010 Freescale Semiconductor, Inc.
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_data/usb-ehci-mxc.h>
|
||||
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
|
||||
#define USBCTRL_OTGBASE_OFFSET 0x600
|
||||
|
||||
#define MX31_OTG_SIC_SHIFT 29
|
||||
#define MX31_OTG_SIC_MASK (0x3 << MX31_OTG_SIC_SHIFT)
|
||||
#define MX31_OTG_PM_BIT (1 << 24)
|
||||
|
||||
#define MX31_H2_SIC_SHIFT 21
|
||||
#define MX31_H2_SIC_MASK (0x3 << MX31_H2_SIC_SHIFT)
|
||||
#define MX31_H2_PM_BIT (1 << 16)
|
||||
#define MX31_H2_DT_BIT (1 << 5)
|
||||
|
||||
#define MX31_H1_SIC_SHIFT 13
|
||||
#define MX31_H1_SIC_MASK (0x3 << MX31_H1_SIC_SHIFT)
|
||||
#define MX31_H1_PM_BIT (1 << 8)
|
||||
#define MX31_H1_DT_BIT (1 << 4)
|
||||
|
||||
int mx31_initialize_usb_hw(int port, unsigned int flags)
|
||||
{
|
||||
unsigned int v;
|
||||
|
||||
v = readl(MX31_IO_ADDRESS(MX31_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET));
|
||||
|
||||
switch (port) {
|
||||
case 0: /* OTG port */
|
||||
v &= ~(MX31_OTG_SIC_MASK | MX31_OTG_PM_BIT);
|
||||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX31_OTG_SIC_SHIFT;
|
||||
|
||||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
|
||||
v |= MX31_OTG_PM_BIT;
|
||||
|
||||
break;
|
||||
case 1: /* H1 port */
|
||||
v &= ~(MX31_H1_SIC_MASK | MX31_H1_PM_BIT | MX31_H1_DT_BIT);
|
||||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX31_H1_SIC_SHIFT;
|
||||
|
||||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
|
||||
v |= MX31_H1_PM_BIT;
|
||||
|
||||
if (!(flags & MXC_EHCI_TTL_ENABLED))
|
||||
v |= MX31_H1_DT_BIT;
|
||||
|
||||
break;
|
||||
case 2: /* H2 port */
|
||||
v &= ~(MX31_H2_SIC_MASK | MX31_H2_PM_BIT | MX31_H2_DT_BIT);
|
||||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX31_H2_SIC_SHIFT;
|
||||
|
||||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
|
||||
v |= MX31_H2_PM_BIT;
|
||||
|
||||
if (!(flags & MXC_EHCI_TTL_ENABLED))
|
||||
v |= MX31_H2_DT_BIT;
|
||||
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
writel(v, MX31_IO_ADDRESS(MX31_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET));
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,89 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
* Copyright (C) 2010 Freescale Semiconductor, Inc.
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_data/usb-ehci-mxc.h>
|
||||
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
|
||||
#define USBCTRL_OTGBASE_OFFSET 0x600
|
||||
|
||||
#define MX35_OTG_SIC_SHIFT 29
|
||||
#define MX35_OTG_SIC_MASK (0x3 << MX35_OTG_SIC_SHIFT)
|
||||
#define MX35_OTG_PM_BIT (1 << 24)
|
||||
#define MX35_OTG_PP_BIT (1 << 11)
|
||||
#define MX35_OTG_OCPOL_BIT (1 << 3)
|
||||
|
||||
#define MX35_H1_SIC_SHIFT 21
|
||||
#define MX35_H1_SIC_MASK (0x3 << MX35_H1_SIC_SHIFT)
|
||||
#define MX35_H1_PP_BIT (1 << 18)
|
||||
#define MX35_H1_PM_BIT (1 << 16)
|
||||
#define MX35_H1_IPPUE_UP_BIT (1 << 7)
|
||||
#define MX35_H1_IPPUE_DOWN_BIT (1 << 6)
|
||||
#define MX35_H1_TLL_BIT (1 << 5)
|
||||
#define MX35_H1_USBTE_BIT (1 << 4)
|
||||
#define MX35_H1_OCPOL_BIT (1 << 2)
|
||||
|
||||
int mx35_initialize_usb_hw(int port, unsigned int flags)
|
||||
{
|
||||
unsigned int v;
|
||||
|
||||
v = readl(MX35_IO_ADDRESS(MX35_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET));
|
||||
|
||||
switch (port) {
|
||||
case 0: /* OTG port */
|
||||
v &= ~(MX35_OTG_SIC_MASK | MX35_OTG_PM_BIT | MX35_OTG_PP_BIT |
|
||||
MX35_OTG_OCPOL_BIT);
|
||||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX35_OTG_SIC_SHIFT;
|
||||
|
||||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
|
||||
v |= MX35_OTG_PM_BIT;
|
||||
|
||||
if (flags & MXC_EHCI_PWR_PIN_ACTIVE_HIGH)
|
||||
v |= MX35_OTG_PP_BIT;
|
||||
|
||||
if (!(flags & MXC_EHCI_OC_PIN_ACTIVE_LOW))
|
||||
v |= MX35_OTG_OCPOL_BIT;
|
||||
|
||||
break;
|
||||
case 1: /* H1 port */
|
||||
v &= ~(MX35_H1_SIC_MASK | MX35_H1_PM_BIT | MX35_H1_PP_BIT |
|
||||
MX35_H1_OCPOL_BIT | MX35_H1_TLL_BIT | MX35_H1_USBTE_BIT |
|
||||
MX35_H1_IPPUE_DOWN_BIT | MX35_H1_IPPUE_UP_BIT);
|
||||
v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX35_H1_SIC_SHIFT;
|
||||
|
||||
if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
|
||||
v |= MX35_H1_PM_BIT;
|
||||
|
||||
if (flags & MXC_EHCI_PWR_PIN_ACTIVE_HIGH)
|
||||
v |= MX35_H1_PP_BIT;
|
||||
|
||||
if (!(flags & MXC_EHCI_OC_PIN_ACTIVE_LOW))
|
||||
v |= MX35_H1_OCPOL_BIT;
|
||||
|
||||
if (!(flags & MXC_EHCI_TTL_ENABLED))
|
||||
v |= MX35_H1_TLL_BIT;
|
||||
|
||||
if (flags & MXC_EHCI_INTERNAL_PHY)
|
||||
v |= MX35_H1_USBTE_BIT;
|
||||
|
||||
if (flags & MXC_EHCI_IPPUE_DOWN)
|
||||
v |= MX35_H1_IPPUE_DOWN_BIT;
|
||||
|
||||
if (flags & MXC_EHCI_IPPUE_UP)
|
||||
v |= MX35_H1_IPPUE_UP_BIT;
|
||||
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
writel(v, MX35_IO_ADDRESS(MX35_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET));
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef __MACH_IMX_EHCI_H
|
||||
#define __MACH_IMX_EHCI_H
|
||||
|
||||
/* values for portsc field */
|
||||
#define MXC_EHCI_PHY_LOW_POWER_SUSPEND (1 << 23)
|
||||
#define MXC_EHCI_FORCE_FS (1 << 24)
|
||||
#define MXC_EHCI_UTMI_8BIT (0 << 28)
|
||||
#define MXC_EHCI_UTMI_16BIT (1 << 28)
|
||||
#define MXC_EHCI_SERIAL (1 << 29)
|
||||
#define MXC_EHCI_MODE_UTMI (0 << 30)
|
||||
#define MXC_EHCI_MODE_PHILIPS (1 << 30)
|
||||
#define MXC_EHCI_MODE_ULPI (2 << 30)
|
||||
#define MXC_EHCI_MODE_SERIAL (3 << 30)
|
||||
|
||||
/* values for flags field */
|
||||
#define MXC_EHCI_INTERFACE_DIFF_UNI (0 << 0)
|
||||
#define MXC_EHCI_INTERFACE_DIFF_BI (1 << 0)
|
||||
#define MXC_EHCI_INTERFACE_SINGLE_UNI (2 << 0)
|
||||
#define MXC_EHCI_INTERFACE_SINGLE_BI (3 << 0)
|
||||
#define MXC_EHCI_INTERFACE_MASK (0xf)
|
||||
|
||||
#define MXC_EHCI_POWER_PINS_ENABLED (1 << 5)
|
||||
#define MXC_EHCI_PWR_PIN_ACTIVE_HIGH (1 << 6)
|
||||
#define MXC_EHCI_OC_PIN_ACTIVE_LOW (1 << 7)
|
||||
#define MXC_EHCI_TTL_ENABLED (1 << 8)
|
||||
|
||||
#define MXC_EHCI_INTERNAL_PHY (1 << 9)
|
||||
#define MXC_EHCI_IPPUE_DOWN (1 << 10)
|
||||
#define MXC_EHCI_IPPUE_UP (1 << 11)
|
||||
#define MXC_EHCI_WAKEUP_ENABLED (1 << 12)
|
||||
#define MXC_EHCI_ITC_NO_THRESHOLD (1 << 13)
|
||||
|
||||
#define MXC_USBCTRL_OFFSET 0
|
||||
#define MXC_USB_PHY_CTR_FUNC_OFFSET 0x8
|
||||
#define MXC_USB_PHY_CTR_FUNC2_OFFSET 0xc
|
||||
#define MXC_USBH2CTRL_OFFSET 0x14
|
||||
|
||||
int mx25_initialize_usb_hw(int port, unsigned int flags);
|
||||
int mx31_initialize_usb_hw(int port, unsigned int flags);
|
||||
int mx35_initialize_usb_hw(int port, unsigned int flags);
|
||||
int mx27_initialize_usb_hw(int port, unsigned int flags);
|
||||
|
||||
#endif /* __MACH_IMX_EHCI_H */
|
|
@ -97,7 +97,6 @@
|
|||
#include "mx31.h"
|
||||
#include "mx35.h"
|
||||
#include "mx2x.h"
|
||||
#include "mx21.h"
|
||||
#include "mx27.h"
|
||||
|
||||
#define imx_map_entry(soc, name, _type) { \
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright 2012 Sascha Hauer, Pengutronix
|
||||
*/
|
||||
|
||||
#include <linux/irq.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "mx27.h"
|
||||
|
||||
static const char * const imx27_dt_board_compat[] __initconst = {
|
||||
"fsl,imx27",
|
||||
NULL
|
||||
};
|
||||
|
||||
DT_MACHINE_START(IMX27_DT, "Freescale i.MX27 (Device Tree Support)")
|
||||
.map_io = mx27_map_io,
|
||||
.init_early = imx27_init_early,
|
||||
.init_irq = mx27_init_irq,
|
||||
.init_late = imx27_pm_init,
|
||||
.dt_compat = imx27_dt_board_compat,
|
||||
MACHINE_END
|
|
@ -1,161 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright 2004-2006 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
* Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de>
|
||||
* Copyright (C) 2009 by Valentin Longchamp <valentin.longchamp@epfl.ch>
|
||||
*/
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
|
||||
/*
|
||||
* IOMUX register (base) addresses
|
||||
*/
|
||||
#define IOMUX_BASE MX31_IO_ADDRESS(MX31_IOMUXC_BASE_ADDR)
|
||||
#define IOMUXINT_OBS1 (IOMUX_BASE + 0x000)
|
||||
#define IOMUXINT_OBS2 (IOMUX_BASE + 0x004)
|
||||
#define IOMUXGPR (IOMUX_BASE + 0x008)
|
||||
#define IOMUXSW_MUX_CTL (IOMUX_BASE + 0x00C)
|
||||
#define IOMUXSW_PAD_CTL (IOMUX_BASE + 0x154)
|
||||
|
||||
static DEFINE_SPINLOCK(gpio_mux_lock);
|
||||
|
||||
#define IOMUX_REG_MASK (IOMUX_PADNUM_MASK & ~0x3)
|
||||
|
||||
static DECLARE_BITMAP(mxc_pin_alloc_map, NB_PORTS * 32);
|
||||
/*
|
||||
* set the mode for a IOMUX pin.
|
||||
*/
|
||||
void mxc_iomux_mode(unsigned int pin_mode)
|
||||
{
|
||||
u32 field;
|
||||
u32 l;
|
||||
u32 mode;
|
||||
void __iomem *reg;
|
||||
|
||||
reg = IOMUXSW_MUX_CTL + (pin_mode & IOMUX_REG_MASK);
|
||||
field = pin_mode & 0x3;
|
||||
mode = (pin_mode & IOMUX_MODE_MASK) >> IOMUX_MODE_SHIFT;
|
||||
|
||||
spin_lock(&gpio_mux_lock);
|
||||
|
||||
l = imx_readl(reg);
|
||||
l &= ~(0xff << (field * 8));
|
||||
l |= mode << (field * 8);
|
||||
imx_writel(l, reg);
|
||||
|
||||
spin_unlock(&gpio_mux_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* This function configures the pad value for a IOMUX pin.
|
||||
*/
|
||||
void mxc_iomux_set_pad(enum iomux_pins pin, u32 config)
|
||||
{
|
||||
u32 field, l;
|
||||
void __iomem *reg;
|
||||
|
||||
pin &= IOMUX_PADNUM_MASK;
|
||||
reg = IOMUXSW_PAD_CTL + (pin + 2) / 3 * 4;
|
||||
field = (pin + 2) % 3;
|
||||
|
||||
pr_debug("%s: reg offset = 0x%x, field = %d\n",
|
||||
__func__, (pin + 2) / 3, field);
|
||||
|
||||
spin_lock(&gpio_mux_lock);
|
||||
|
||||
l = imx_readl(reg);
|
||||
l &= ~(0x1ff << (field * 10));
|
||||
l |= config << (field * 10);
|
||||
imx_writel(l, reg);
|
||||
|
||||
spin_unlock(&gpio_mux_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* allocs a single pin:
|
||||
* - reserves the pin so that it is not claimed by another driver
|
||||
* - setups the iomux according to the configuration
|
||||
*/
|
||||
int mxc_iomux_alloc_pin(unsigned int pin, const char *label)
|
||||
{
|
||||
unsigned pad = pin & IOMUX_PADNUM_MASK;
|
||||
|
||||
if (pad >= (PIN_MAX + 1)) {
|
||||
printk(KERN_ERR "mxc_iomux: Attempt to request nonexistent pin %u for \"%s\"\n",
|
||||
pad, label ? label : "?");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (test_and_set_bit(pad, mxc_pin_alloc_map)) {
|
||||
printk(KERN_ERR "mxc_iomux: pin %u already used. Allocation for \"%s\" failed\n",
|
||||
pad, label ? label : "?");
|
||||
return -EBUSY;
|
||||
}
|
||||
mxc_iomux_mode(pin);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mxc_iomux_setup_multiple_pins(const unsigned int *pin_list, unsigned count,
|
||||
const char *label)
|
||||
{
|
||||
const unsigned int *p = pin_list;
|
||||
int i;
|
||||
int ret = -EINVAL;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
ret = mxc_iomux_alloc_pin(*p, label);
|
||||
if (ret)
|
||||
goto setup_error;
|
||||
p++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
setup_error:
|
||||
mxc_iomux_release_multiple_pins(pin_list, i);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void mxc_iomux_release_pin(unsigned int pin)
|
||||
{
|
||||
unsigned pad = pin & IOMUX_PADNUM_MASK;
|
||||
|
||||
if (pad < (PIN_MAX + 1))
|
||||
clear_bit(pad, mxc_pin_alloc_map);
|
||||
}
|
||||
|
||||
void mxc_iomux_release_multiple_pins(const unsigned int *pin_list, int count)
|
||||
{
|
||||
const unsigned int *p = pin_list;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
mxc_iomux_release_pin(*p);
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This function enables/disables the general purpose function for a particular
|
||||
* signal.
|
||||
*/
|
||||
void mxc_iomux_set_gpr(enum iomux_gp_func gp, bool en)
|
||||
{
|
||||
u32 l;
|
||||
|
||||
spin_lock(&gpio_mux_lock);
|
||||
l = imx_readl(IOMUXGPR);
|
||||
if (en)
|
||||
l |= gp;
|
||||
else
|
||||
l &= ~gp;
|
||||
|
||||
imx_writel(l, IOMUXGPR);
|
||||
spin_unlock(&gpio_mux_lock);
|
||||
}
|
|
@ -1,109 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2009 by Holger Schurig <hs4233@mail.mn-solutions.de>
|
||||
*/
|
||||
#ifndef __MACH_IOMUX_MX21_H__
|
||||
#define __MACH_IOMUX_MX21_H__
|
||||
|
||||
#include "iomux-mx2x.h"
|
||||
#include "iomux-v1.h"
|
||||
|
||||
/* Primary GPIO pin functions */
|
||||
|
||||
#define PB22_PF_USBH1_BYP (GPIO_PORTB | GPIO_PF | 22)
|
||||
#define PB25_PF_USBH1_ON (GPIO_PORTB | GPIO_PF | 25)
|
||||
#define PC5_PF_USBOTG_SDA (GPIO_PORTC | GPIO_PF | 5)
|
||||
#define PC6_PF_USBOTG_SCL (GPIO_PORTC | GPIO_PF | 6)
|
||||
#define PC7_PF_USBOTG_ON (GPIO_PORTC | GPIO_PF | 7)
|
||||
#define PC8_PF_USBOTG_FS (GPIO_PORTC | GPIO_PF | 8)
|
||||
#define PC9_PF_USBOTG_OE (GPIO_PORTC | GPIO_PF | 9)
|
||||
#define PC10_PF_USBOTG_TXDM (GPIO_PORTC | GPIO_PF | 10)
|
||||
#define PC11_PF_USBOTG_TXDP (GPIO_PORTC | GPIO_PF | 11)
|
||||
#define PC12_PF_USBOTG_RXDM (GPIO_PORTC | GPIO_PF | 12)
|
||||
#define PC13_PF_USBOTG_RXDP (GPIO_PORTC | GPIO_PF | 13)
|
||||
#define PC16_PF_SAP_FS (GPIO_PORTC | GPIO_PF | 16)
|
||||
#define PC17_PF_SAP_RXD (GPIO_PORTC | GPIO_PF | 17)
|
||||
#define PC18_PF_SAP_TXD (GPIO_PORTC | GPIO_PF | 18)
|
||||
#define PC19_PF_SAP_CLK (GPIO_PORTC | GPIO_PF | 19)
|
||||
#define PE0_PF_TEST_WB2 (GPIO_PORTE | GPIO_PF | 0)
|
||||
#define PE1_PF_TEST_WB1 (GPIO_PORTE | GPIO_PF | 1)
|
||||
#define PE2_PF_TEST_WB0 (GPIO_PORTE | GPIO_PF | 2)
|
||||
#define PF1_PF_NFCE (GPIO_PORTF | GPIO_PF | 1)
|
||||
#define PF3_PF_NFCLE (GPIO_PORTF | GPIO_PF | 3)
|
||||
#define PF7_PF_NFIO0 (GPIO_PORTF | GPIO_PF | 7)
|
||||
#define PF8_PF_NFIO1 (GPIO_PORTF | GPIO_PF | 8)
|
||||
#define PF9_PF_NFIO2 (GPIO_PORTF | GPIO_PF | 9)
|
||||
#define PF10_PF_NFIO3 (GPIO_PORTF | GPIO_PF | 10)
|
||||
#define PF11_PF_NFIO4 (GPIO_PORTF | GPIO_PF | 11)
|
||||
#define PF12_PF_NFIO5 (GPIO_PORTF | GPIO_PF | 12)
|
||||
#define PF13_PF_NFIO6 (GPIO_PORTF | GPIO_PF | 13)
|
||||
#define PF14_PF_NFIO7 (GPIO_PORTF | GPIO_PF | 14)
|
||||
#define PF16_PF_RES (GPIO_PORTF | GPIO_PF | 16)
|
||||
|
||||
/* Alternate GPIO pin functions */
|
||||
|
||||
#define PA5_AF_BMI_CLK_CS (GPIO_PORTA | GPIO_AF | 5)
|
||||
#define PA6_AF_BMI_D0 (GPIO_PORTA | GPIO_AF | 6)
|
||||
#define PA7_AF_BMI_D1 (GPIO_PORTA | GPIO_AF | 7)
|
||||
#define PA8_AF_BMI_D2 (GPIO_PORTA | GPIO_AF | 8)
|
||||
#define PA9_AF_BMI_D3 (GPIO_PORTA | GPIO_AF | 9)
|
||||
#define PA10_AF_BMI_D4 (GPIO_PORTA | GPIO_AF | 10)
|
||||
#define PA11_AF_BMI_D5 (GPIO_PORTA | GPIO_AF | 11)
|
||||
#define PA12_AF_BMI_D6 (GPIO_PORTA | GPIO_AF | 12)
|
||||
#define PA13_AF_BMI_D7 (GPIO_PORTA | GPIO_AF | 13)
|
||||
#define PA14_AF_BMI_D8 (GPIO_PORTA | GPIO_AF | 14)
|
||||
#define PA15_AF_BMI_D9 (GPIO_PORTA | GPIO_AF | 15)
|
||||
#define PA16_AF_BMI_D10 (GPIO_PORTA | GPIO_AF | 16)
|
||||
#define PA17_AF_BMI_D11 (GPIO_PORTA | GPIO_AF | 17)
|
||||
#define PA18_AF_BMI_D12 (GPIO_PORTA | GPIO_AF | 18)
|
||||
#define PA19_AF_BMI_D13 (GPIO_PORTA | GPIO_AF | 19)
|
||||
#define PA20_AF_BMI_D14 (GPIO_PORTA | GPIO_AF | 20)
|
||||
#define PA21_AF_BMI_D15 (GPIO_PORTA | GPIO_AF | 21)
|
||||
#define PA22_AF_BMI_READ_REQ (GPIO_PORTA | GPIO_AF | 22)
|
||||
#define PA23_AF_BMI_WRITE (GPIO_PORTA | GPIO_AF | 23)
|
||||
#define PA29_AF_BMI_RX_FULL (GPIO_PORTA | GPIO_AF | 29)
|
||||
#define PA30_AF_BMI_READ (GPIO_PORTA | GPIO_AF | 30)
|
||||
|
||||
/* AIN GPIO pin functions */
|
||||
|
||||
#define PC14_AIN_SYS_CLK (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 14)
|
||||
#define PD21_AIN_USBH2_FS (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 21)
|
||||
#define PD22_AIN_USBH2_OE (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 22)
|
||||
#define PD23_AIN_USBH2_TXDM (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 23)
|
||||
#define PD24_AIN_USBH2_TXDP (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 24)
|
||||
#define PE8_AIN_IR_TXD (GPIO_PORTE | GPIO_AIN | GPIO_OUT | 8)
|
||||
#define PF0_AIN_PC_RST (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 0)
|
||||
#define PF1_AIN_PC_CE1 (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 1)
|
||||
#define PF2_AIN_PC_CE2 (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 2)
|
||||
#define PF3_AIN_PC_POE (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 3)
|
||||
#define PF4_AIN_PC_OE (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 4)
|
||||
#define PF5_AIN_PC_RW (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 5)
|
||||
|
||||
/* BIN GPIO pin functions */
|
||||
|
||||
#define PC14_BIN_SYS_CLK (GPIO_PORTC | GPIO_BIN | GPIO_OUT | 14)
|
||||
#define PD27_BIN_EXT_DMA_GRANT (GPIO_PORTD | GPIO_BIN | GPIO_OUT | 27)
|
||||
|
||||
/* CIN GPIO pin functions */
|
||||
|
||||
#define PB26_CIN_USBH1_RXDAT (GPIO_PORTB | GPIO_CIN | GPIO_OUT | 26)
|
||||
|
||||
/* AOUT GPIO pin functions */
|
||||
|
||||
#define PA29_AOUT_BMI_WAIT (GPIO_PORTA | GPIO_AOUT | GPIO_IN | 29)
|
||||
#define PD19_AOUT_USBH2_RXDM (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 19)
|
||||
#define PD20_AOUT_USBH2_RXDP (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 20)
|
||||
#define PD25_AOUT_EXT_DMAREQ (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 25)
|
||||
#define PD26_AOUT_USBOTG_RXDAT (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 26)
|
||||
#define PE9_AOUT_IR_RXD (GPIO_PORTE | GPIO_AOUT | GPIO_IN | 9)
|
||||
#define PF6_AOUT_PC_BVD2 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 6)
|
||||
#define PF7_AOUT_PC_BVD1 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 7)
|
||||
#define PF8_AOUT_PC_VS2 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 8)
|
||||
#define PF9_AOUT_PC_VS1 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 9)
|
||||
#define PF10_AOUT_PC_WP (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 10)
|
||||
#define PF11_AOUT_PC_READY (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 11)
|
||||
#define PF12_AOUT_PC_WAIT (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 12)
|
||||
#define PF13_AOUT_PC_CD2 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 13)
|
||||
#define PF14_AOUT_PC_CD1 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 14)
|
||||
|
||||
#endif /* ifndef __MACH_IOMUX_MX21_H__ */
|
|
@ -1,192 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de>
|
||||
* Copyright (C) 2009 by Holger Schurig <hs4233@mail.mn-solutions.de>
|
||||
*/
|
||||
#ifndef __MACH_IOMUX_MX27_H__
|
||||
#define __MACH_IOMUX_MX27_H__
|
||||
|
||||
#include "iomux-mx2x.h"
|
||||
#include "iomux-v1.h"
|
||||
|
||||
/* Primary GPIO pin functions */
|
||||
|
||||
#define PA0_PF_USBH2_CLK (GPIO_PORTA | GPIO_PF | 0)
|
||||
#define PA1_PF_USBH2_DIR (GPIO_PORTA | GPIO_PF | 1)
|
||||
#define PA2_PF_USBH2_DATA7 (GPIO_PORTA | GPIO_PF | 2)
|
||||
#define PA3_PF_USBH2_NXT (GPIO_PORTA | GPIO_PF | 3)
|
||||
#define PA4_PF_USBH2_STP (GPIO_PORTA | GPIO_PF | 4)
|
||||
#define PB22_PF_USBH1_SUSP (GPIO_PORTB | GPIO_PF | 22)
|
||||
#define PB25_PF_USBH1_RCV (GPIO_PORTB | GPIO_PF | 25)
|
||||
#define PC5_PF_I2C2_SDA (GPIO_PORTC | GPIO_PF | GPIO_IN | 5)
|
||||
#define PC6_PF_I2C2_SCL (GPIO_PORTC | GPIO_PF | GPIO_IN | 6)
|
||||
#define PC7_PF_USBOTG_DATA5 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 7)
|
||||
#define PC8_PF_USBOTG_DATA6 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 8)
|
||||
#define PC9_PF_USBOTG_DATA0 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 9)
|
||||
#define PC10_PF_USBOTG_DATA2 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 10)
|
||||
#define PC11_PF_USBOTG_DATA1 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 11)
|
||||
#define PC12_PF_USBOTG_DATA4 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 12)
|
||||
#define PC13_PF_USBOTG_DATA3 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 13)
|
||||
#define PC16_PF_SSI4_FS (GPIO_PORTC | GPIO_PF | GPIO_IN | 16)
|
||||
#define PC17_PF_SSI4_RXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 17)
|
||||
#define PC18_PF_SSI4_TXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 18)
|
||||
#define PC19_PF_SSI4_CLK (GPIO_PORTC | GPIO_PF | GPIO_IN | 19)
|
||||
#define PD0_PF_SD3_CMD (GPIO_PORTD | GPIO_PF | 0)
|
||||
#define PD1_PF_SD3_CLK (GPIO_PORTD | GPIO_PF | 1)
|
||||
#define PD2_PF_ATA_DATA0 (GPIO_PORTD | GPIO_PF | 2)
|
||||
#define PD3_PF_ATA_DATA1 (GPIO_PORTD | GPIO_PF | 3)
|
||||
#define PD4_PF_ATA_DATA2 (GPIO_PORTD | GPIO_PF | 4)
|
||||
#define PD5_PF_ATA_DATA3 (GPIO_PORTD | GPIO_PF | 5)
|
||||
#define PD6_PF_ATA_DATA4 (GPIO_PORTD | GPIO_PF | 6)
|
||||
#define PD7_PF_ATA_DATA5 (GPIO_PORTD | GPIO_PF | 7)
|
||||
#define PD8_PF_ATA_DATA6 (GPIO_PORTD | GPIO_PF | 8)
|
||||
#define PD9_PF_ATA_DATA7 (GPIO_PORTD | GPIO_PF | 9)
|
||||
#define PD10_PF_ATA_DATA8 (GPIO_PORTD | GPIO_PF | 10)
|
||||
#define PD11_PF_ATA_DATA9 (GPIO_PORTD | GPIO_PF | 11)
|
||||
#define PD12_PF_ATA_DATA10 (GPIO_PORTD | GPIO_PF | 12)
|
||||
#define PD13_PF_ATA_DATA11 (GPIO_PORTD | GPIO_PF | 13)
|
||||
#define PD14_PF_ATA_DATA12 (GPIO_PORTD | GPIO_PF | 14)
|
||||
#define PD15_PF_ATA_DATA13 (GPIO_PORTD | GPIO_PF | 15)
|
||||
#define PD16_PF_ATA_DATA14 (GPIO_PORTD | GPIO_PF | 16)
|
||||
#define PE0_PF_USBOTG_NXT (GPIO_PORTE | GPIO_PF | GPIO_OUT | 0)
|
||||
#define PE1_PF_USBOTG_STP (GPIO_PORTE | GPIO_PF | GPIO_OUT | 1)
|
||||
#define PE2_PF_USBOTG_DIR (GPIO_PORTE | GPIO_PF | GPIO_OUT | 2)
|
||||
#define PE24_PF_USBOTG_CLK (GPIO_PORTE | GPIO_PF | GPIO_OUT | 24)
|
||||
#define PE25_PF_USBOTG_DATA7 (GPIO_PORTE | GPIO_PF | GPIO_OUT | 25)
|
||||
#define PF1_PF_NFCLE (GPIO_PORTF | GPIO_PF | 1)
|
||||
#define PF3_PF_NFCE (GPIO_PORTF | GPIO_PF | 3)
|
||||
#define PF7_PF_PC_POE (GPIO_PORTF | GPIO_PF | 7)
|
||||
#define PF8_PF_PC_RW (GPIO_PORTF | GPIO_PF | 8)
|
||||
#define PF9_PF_PC_IOIS16 (GPIO_PORTF | GPIO_PF | 9)
|
||||
#define PF10_PF_PC_RST (GPIO_PORTF | GPIO_PF | 10)
|
||||
#define PF11_PF_PC_BVD2 (GPIO_PORTF | GPIO_PF | 11)
|
||||
#define PF12_PF_PC_BVD1 (GPIO_PORTF | GPIO_PF | 12)
|
||||
#define PF13_PF_PC_VS2 (GPIO_PORTF | GPIO_PF | 13)
|
||||
#define PF14_PF_PC_VS1 (GPIO_PORTF | GPIO_PF | 14)
|
||||
#define PF16_PF_PC_PWRON (GPIO_PORTF | GPIO_PF | 16)
|
||||
#define PF17_PF_PC_READY (GPIO_PORTF | GPIO_PF | 17)
|
||||
#define PF18_PF_PC_WAIT (GPIO_PORTF | GPIO_PF | 18)
|
||||
#define PF19_PF_PC_CD2 (GPIO_PORTF | GPIO_PF | 19)
|
||||
#define PF20_PF_PC_CD1 (GPIO_PORTF | GPIO_PF | 20)
|
||||
#define PF23_PF_ATA_DATA15 (GPIO_PORTF | GPIO_PF | 23)
|
||||
|
||||
/* Alternate GPIO pin functions */
|
||||
|
||||
#define PB4_AF_MSHC_DATA0 (GPIO_PORTB | GPIO_AF | GPIO_OUT | 4)
|
||||
#define PB5_AF_MSHC_DATA1 (GPIO_PORTB | GPIO_AF | GPIO_OUT | 5)
|
||||
#define PB6_AF_MSHC_DATA2 (GPIO_PORTB | GPIO_AF | GPIO_OUT | 6)
|
||||
#define PB7_AF_MSHC_DATA4 (GPIO_PORTB | GPIO_AF | GPIO_OUT | 7)
|
||||
#define PB8_AF_MSHC_BS (GPIO_PORTB | GPIO_AF | GPIO_OUT | 8)
|
||||
#define PB9_AF_MSHC_SCLK (GPIO_PORTB | GPIO_AF | GPIO_OUT | 9)
|
||||
#define PB10_AF_UART6_TXD (GPIO_PORTB | GPIO_AF | GPIO_OUT | 10)
|
||||
#define PB11_AF_UART6_RXD (GPIO_PORTB | GPIO_AF | GPIO_IN | 11)
|
||||
#define PB12_AF_UART6_CTS (GPIO_PORTB | GPIO_AF | GPIO_OUT | 12)
|
||||
#define PB13_AF_UART6_RTS (GPIO_PORTB | GPIO_AF | GPIO_IN | 13)
|
||||
#define PB18_AF_UART5_TXD (GPIO_PORTB | GPIO_AF | GPIO_OUT | 18)
|
||||
#define PB19_AF_UART5_RXD (GPIO_PORTB | GPIO_AF | GPIO_IN | 19)
|
||||
#define PB20_AF_UART5_CTS (GPIO_PORTB | GPIO_AF | GPIO_OUT | 20)
|
||||
#define PB21_AF_UART5_RTS (GPIO_PORTB | GPIO_AF | GPIO_IN | 21)
|
||||
#define PC8_AF_FEC_MDIO (GPIO_PORTC | GPIO_AF | GPIO_IN | 8)
|
||||
#define PC24_AF_GPT5_TOUT (GPIO_PORTC | GPIO_AF | 24)
|
||||
#define PC25_AF_GPT5_TIN (GPIO_PORTC | GPIO_AF | 25)
|
||||
#define PC26_AF_GPT4_TOUT (GPIO_PORTC | GPIO_AF | 26)
|
||||
#define PC27_AF_GPT4_TIN (GPIO_PORTC | GPIO_AF | 27)
|
||||
#define PD1_AF_ETMTRACE_PKT15 (GPIO_PORTD | GPIO_AF | 1)
|
||||
#define PD6_AF_ETMTRACE_PKT14 (GPIO_PORTD | GPIO_AF | 6)
|
||||
#define PD7_AF_ETMTRACE_PKT13 (GPIO_PORTD | GPIO_AF | 7)
|
||||
#define PD9_AF_ETMTRACE_PKT12 (GPIO_PORTD | GPIO_AF | 9)
|
||||
#define PD2_AF_SD3_D0 (GPIO_PORTD | GPIO_AF | 2)
|
||||
#define PD3_AF_SD3_D1 (GPIO_PORTD | GPIO_AF | 3)
|
||||
#define PD4_AF_SD3_D2 (GPIO_PORTD | GPIO_AF | 4)
|
||||
#define PD5_AF_SD3_D3 (GPIO_PORTD | GPIO_AF | 5)
|
||||
#define PD8_AF_FEC_MDIO (GPIO_PORTD | GPIO_AF | GPIO_IN | 8)
|
||||
#define PD10_AF_ETMTRACE_PKT11 (GPIO_PORTD | GPIO_AF | 10)
|
||||
#define PD11_AF_ETMTRACE_PKT10 (GPIO_PORTD | GPIO_AF | 11)
|
||||
#define PD12_AF_ETMTRACE_PKT9 (GPIO_PORTD | GPIO_AF | 12)
|
||||
#define PD13_AF_ETMTRACE_PKT8 (GPIO_PORTD | GPIO_AF | 13)
|
||||
#define PD14_AF_ETMTRACE_PKT7 (GPIO_PORTD | GPIO_AF | 14)
|
||||
#define PD15_AF_ETMTRACE_PKT6 (GPIO_PORTD | GPIO_AF | 15)
|
||||
#define PD16_AF_ETMTRACE_PKT5 (GPIO_PORTD | GPIO_AF | 16)
|
||||
#define PF1_AF_ETMTRACE_PKT0 (GPIO_PORTF | GPIO_AF | 1)
|
||||
#define PF3_AF_ETMTRACE_PKT2 (GPIO_PORTF | GPIO_AF | 3)
|
||||
#define PF5_AF_ETMPIPESTAT11 (GPIO_PORTF | GPIO_AF | 5)
|
||||
#define PF7_AF_ATA_BUFFER_EN (GPIO_PORTF | GPIO_AF | 7)
|
||||
#define PF8_AF_ATA_IORDY (GPIO_PORTF | GPIO_AF | 8)
|
||||
#define PF9_AF_ATA_INTRQ (GPIO_PORTF | GPIO_AF | 9)
|
||||
#define PF10_AF_ATA_RESET (GPIO_PORTF | GPIO_AF | 10)
|
||||
#define PF11_AF_ATA_DMACK (GPIO_PORTF | GPIO_AF | 11)
|
||||
#define PF12_AF_ATA_DMAREQ (GPIO_PORTF | GPIO_AF | 12)
|
||||
#define PF13_AF_ATA_DA0 (GPIO_PORTF | GPIO_AF | 13)
|
||||
#define PF14_AF_ATA_DA1 (GPIO_PORTF | GPIO_AF | 14)
|
||||
#define PF15_AF_ETMTRACE_SYNC (GPIO_PORTF | GPIO_AF | 15)
|
||||
#define PF16_AF_ATA_DA2 (GPIO_PORTF | GPIO_AF | 16)
|
||||
#define PF17_AF_ATA_CS0 (GPIO_PORTF | GPIO_AF | 17)
|
||||
#define PF18_AF_ATA_CS1 (GPIO_PORTF | GPIO_AF | 18)
|
||||
#define PF19_AF_ATA_DIOW (GPIO_PORTF | GPIO_AF | 19)
|
||||
#define PF20_AF_ATA_DIOR (GPIO_PORTF | GPIO_AF | 20)
|
||||
#define PF22_AF_ETMTRACE_CLK (GPIO_PORTF | GPIO_AF | 22)
|
||||
#define PF23_AF_ETMTRACE_PKT4 (GPIO_PORTF | GPIO_AF | 23)
|
||||
|
||||
/* AIN GPIO pin functions */
|
||||
|
||||
#define PC14_AIN_SSI1_MCLK (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 14)
|
||||
#define PC15_AIN_GPT6_TOUT (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 15)
|
||||
#define PD0_AIN_FEC_TXD0 (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 0)
|
||||
#define PD1_AIN_FEC_TXD1 (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 1)
|
||||
#define PD2_AIN_FEC_TXD2 (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 2)
|
||||
#define PD3_AIN_FEC_TXD3 (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 3)
|
||||
#define PD9_AIN_FEC_MDC (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 9)
|
||||
#define PD16_AIN_FEC_TX_ER (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 16)
|
||||
#define PD27_AIN_EXT_DMA_GRANT (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 27)
|
||||
#define PF23_AIN_FEC_TX_EN (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 23)
|
||||
|
||||
/* BIN GPIO pin functions */
|
||||
|
||||
#define PC14_BIN_SSI2_MCLK (GPIO_PORTC | GPIO_BIN | GPIO_OUT | 14)
|
||||
|
||||
/* CIN GPIO pin functions */
|
||||
|
||||
#define PD2_CIN_SLCDC1_DAT0 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 2)
|
||||
#define PD3_CIN_SLCDC1_DAT1 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 3)
|
||||
#define PD4_CIN_SLCDC1_DAT2 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 4)
|
||||
#define PD5_CIN_SLCDC1_DAT3 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 5)
|
||||
#define PD6_CIN_SLCDC1_DAT4 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 6)
|
||||
#define PD7_CIN_SLCDC1_DAT5 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 7)
|
||||
#define PD8_CIN_SLCDC1_DAT6 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 8)
|
||||
#define PD9_CIN_SLCDC1_DAT7 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 9)
|
||||
#define PD10_CIN_SLCDC1_DAT8 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 10)
|
||||
#define PD11_CIN_SLCDC1_DAT9 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 11)
|
||||
#define PD12_CIN_SLCDC1_DAT10 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 12)
|
||||
#define PD13_CIN_SLCDC1_DAT11 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 13)
|
||||
#define PD14_CIN_SLCDC1_DAT12 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 14)
|
||||
#define PD15_CIN_SLCDC1_DAT13 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 15)
|
||||
#define PD16_CIN_SLCDC1_DAT14 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 16)
|
||||
#define PD23_CIN_SLCDC1_DAT15 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 23)
|
||||
#define PF27_CIN_EXT_DMA_GRANT (GPIO_PORTF | GPIO_CIN | GPIO_OUT | 27)
|
||||
/* LCDC_TESTx on PBxx omitted, because it's not clear what they do */
|
||||
|
||||
/* AOUT GPIO pin functions */
|
||||
|
||||
#define PC14_AOUT_GPT6_TIN (GPIO_PORTC | GPIO_AOUT | GPIO_IN | 14)
|
||||
#define PD4_AOUT_FEC_RX_ER (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 4)
|
||||
#define PD5_AOUT_FEC_RXD1 (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 5)
|
||||
#define PD6_AOUT_FEC_RXD2 (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 6)
|
||||
#define PD7_AOUT_FEC_RXD3 (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 7)
|
||||
#define PD10_AOUT_FEC_CRS (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 10)
|
||||
#define PD11_AOUT_FEC_TX_CLK (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 11)
|
||||
#define PD12_AOUT_FEC_RXD0 (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 12)
|
||||
#define PD13_AOUT_FEC_RX_DV (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 13)
|
||||
#define PD14_AOUT_FEC_RX_CLK (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 14)
|
||||
#define PD15_AOUT_FEC_COL (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 15)
|
||||
|
||||
/* BOUT GPIO pin functions */
|
||||
|
||||
#define PC17_BOUT_PC_IOIS16 (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 17)
|
||||
#define PC18_BOUT_PC_BVD2 (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 18)
|
||||
#define PC19_BOUT_PC_BVD1 (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 19)
|
||||
#define PC28_BOUT_PC_BVD2 (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 28)
|
||||
#define PC29_BOUT_PC_VS1 (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 29)
|
||||
#define PC30_BOUT_PC_READY (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 30)
|
||||
#define PC31_BOUT_PC_WAIT (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 31)
|
||||
|
||||
#endif /* __MACH_IOMUX_MX27_H__ */
|
|
@ -1,217 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de>
|
||||
* Copyright (C) 2009 by Holger Schurig <hs4233@mail.mn-solutions.de>
|
||||
*/
|
||||
#ifndef __MACH_IOMUX_MX2x_H__
|
||||
#define __MACH_IOMUX_MX2x_H__
|
||||
|
||||
/* Primary GPIO pin functions */
|
||||
|
||||
#define PA5_PF_LSCLK (GPIO_PORTA | GPIO_PF | GPIO_OUT | 5)
|
||||
#define PA6_PF_LD0 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 6)
|
||||
#define PA7_PF_LD1 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 7)
|
||||
#define PA8_PF_LD2 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 8)
|
||||
#define PA9_PF_LD3 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 9)
|
||||
#define PA10_PF_LD4 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 10)
|
||||
#define PA11_PF_LD5 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 11)
|
||||
#define PA12_PF_LD6 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 12)
|
||||
#define PA13_PF_LD7 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 13)
|
||||
#define PA14_PF_LD8 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 14)
|
||||
#define PA15_PF_LD9 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 15)
|
||||
#define PA16_PF_LD10 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 16)
|
||||
#define PA17_PF_LD11 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 17)
|
||||
#define PA18_PF_LD12 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 18)
|
||||
#define PA19_PF_LD13 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 19)
|
||||
#define PA20_PF_LD14 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 20)
|
||||
#define PA21_PF_LD15 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 21)
|
||||
#define PA22_PF_LD16 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 22)
|
||||
#define PA23_PF_LD17 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 23)
|
||||
#define PA24_PF_REV (GPIO_PORTA | GPIO_PF | GPIO_OUT | 24)
|
||||
#define PA25_PF_CLS (GPIO_PORTA | GPIO_PF | GPIO_OUT | 25)
|
||||
#define PA26_PF_PS (GPIO_PORTA | GPIO_PF | GPIO_OUT | 26)
|
||||
#define PA27_PF_SPL_SPR (GPIO_PORTA | GPIO_PF | GPIO_OUT | 27)
|
||||
#define PA28_PF_HSYNC (GPIO_PORTA | GPIO_PF | GPIO_OUT | 28)
|
||||
#define PA29_PF_VSYNC (GPIO_PORTA | GPIO_PF | GPIO_OUT | 29)
|
||||
#define PA30_PF_CONTRAST (GPIO_PORTA | GPIO_PF | GPIO_OUT | 30)
|
||||
#define PA31_PF_OE_ACD (GPIO_PORTA | GPIO_PF | GPIO_OUT | 31)
|
||||
#define PB4_PF_SD2_D0 (GPIO_PORTB | GPIO_PF | 4)
|
||||
#define PB5_PF_SD2_D1 (GPIO_PORTB | GPIO_PF | 5)
|
||||
#define PB6_PF_SD2_D2 (GPIO_PORTB | GPIO_PF | 6)
|
||||
#define PB7_PF_SD2_D3 (GPIO_PORTB | GPIO_PF | 7)
|
||||
#define PB8_PF_SD2_CMD (GPIO_PORTB | GPIO_PF | 8)
|
||||
#define PB9_PF_SD2_CLK (GPIO_PORTB | GPIO_PF | 9)
|
||||
#define PB10_PF_CSI_D0 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 10)
|
||||
#define PB11_PF_CSI_D1 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 11)
|
||||
#define PB12_PF_CSI_D2 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 12)
|
||||
#define PB13_PF_CSI_D3 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 13)
|
||||
#define PB14_PF_CSI_D4 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 14)
|
||||
#define PB15_PF_CSI_MCLK (GPIO_PORTB | GPIO_PF | GPIO_OUT | 15)
|
||||
#define PB16_PF_CSI_PIXCLK (GPIO_PORTB | GPIO_PF | GPIO_OUT | 16)
|
||||
#define PB17_PF_CSI_D5 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 17)
|
||||
#define PB18_PF_CSI_D6 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 18)
|
||||
#define PB19_PF_CSI_D7 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 19)
|
||||
#define PB20_PF_CSI_VSYNC (GPIO_PORTB | GPIO_PF | GPIO_OUT | 20)
|
||||
#define PB21_PF_CSI_HSYNC (GPIO_PORTB | GPIO_PF | GPIO_OUT | 21)
|
||||
#define PB23_PF_USB_PWR (GPIO_PORTB | GPIO_PF | 23)
|
||||
#define PB24_PF_USB_OC (GPIO_PORTB | GPIO_PF | 24)
|
||||
#define PB26_PF_USBH1_FS (GPIO_PORTB | GPIO_PF | 26)
|
||||
#define PB27_PF_USBH1_OE (GPIO_PORTB | GPIO_PF | 27)
|
||||
#define PB28_PF_USBH1_TXDM (GPIO_PORTB | GPIO_PF | 28)
|
||||
#define PB29_PF_USBH1_TXDP (GPIO_PORTB | GPIO_PF | 29)
|
||||
#define PB30_PF_USBH1_RXDM (GPIO_PORTB | GPIO_PF | 30)
|
||||
#define PB31_PF_USBH1_RXDP (GPIO_PORTB | GPIO_PF | 31)
|
||||
#define PC14_PF_TOUT (GPIO_PORTC | GPIO_PF | 14)
|
||||
#define PC15_PF_TIN (GPIO_PORTC | GPIO_PF | 15)
|
||||
#define PC20_PF_SSI1_FS (GPIO_PORTC | GPIO_PF | GPIO_IN | 20)
|
||||
#define PC21_PF_SSI1_RXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 21)
|
||||
#define PC22_PF_SSI1_TXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 22)
|
||||
#define PC23_PF_SSI1_CLK (GPIO_PORTC | GPIO_PF | GPIO_IN | 23)
|
||||
#define PC24_PF_SSI2_FS (GPIO_PORTC | GPIO_PF | GPIO_IN | 24)
|
||||
#define PC25_PF_SSI2_RXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 25)
|
||||
#define PC26_PF_SSI2_TXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 26)
|
||||
#define PC27_PF_SSI2_CLK (GPIO_PORTC | GPIO_PF | GPIO_IN | 27)
|
||||
#define PC28_PF_SSI3_FS (GPIO_PORTC | GPIO_PF | GPIO_IN | 28)
|
||||
#define PC29_PF_SSI3_RXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 29)
|
||||
#define PC30_PF_SSI3_TXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 30)
|
||||
#define PC31_PF_SSI3_CLK (GPIO_PORTC | GPIO_PF | GPIO_IN | 31)
|
||||
#define PD17_PF_I2C_DATA (GPIO_PORTD | GPIO_PF | GPIO_OUT | 17)
|
||||
#define PD18_PF_I2C_CLK (GPIO_PORTD | GPIO_PF | GPIO_OUT | 18)
|
||||
#define PD19_PF_CSPI2_SS2 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 19)
|
||||
#define PD20_PF_CSPI2_SS1 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 20)
|
||||
#define PD21_PF_CSPI2_SS0 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 21)
|
||||
#define PD22_PF_CSPI2_SCLK (GPIO_PORTD | GPIO_PF | GPIO_OUT | 22)
|
||||
#define PD23_PF_CSPI2_MISO (GPIO_PORTD | GPIO_PF | GPIO_IN | 23)
|
||||
#define PD24_PF_CSPI2_MOSI (GPIO_PORTD | GPIO_PF | GPIO_OUT | 24)
|
||||
#define PD25_PF_CSPI1_RDY (GPIO_PORTD | GPIO_PF | GPIO_OUT | 25)
|
||||
#define PD26_PF_CSPI1_SS2 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 26)
|
||||
#define PD27_PF_CSPI1_SS1 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 27)
|
||||
#define PD28_PF_CSPI1_SS0 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 28)
|
||||
#define PD29_PF_CSPI1_SCLK (GPIO_PORTD | GPIO_PF | GPIO_OUT | 29)
|
||||
#define PD30_PF_CSPI1_MISO (GPIO_PORTD | GPIO_PF | GPIO_IN | 30)
|
||||
#define PD31_PF_CSPI1_MOSI (GPIO_PORTD | GPIO_PF | GPIO_OUT | 31)
|
||||
#define PE3_PF_UART2_CTS (GPIO_PORTE | GPIO_PF | GPIO_OUT | 3)
|
||||
#define PE4_PF_UART2_RTS (GPIO_PORTE | GPIO_PF | GPIO_IN | 4)
|
||||
#define PE5_PF_PWMO (GPIO_PORTE | GPIO_PF | 5)
|
||||
#define PE6_PF_UART2_TXD (GPIO_PORTE | GPIO_PF | GPIO_OUT | 6)
|
||||
#define PE7_PF_UART2_RXD (GPIO_PORTE | GPIO_PF | GPIO_IN | 7)
|
||||
#define PE8_PF_UART3_TXD (GPIO_PORTE | GPIO_PF | GPIO_OUT | 8)
|
||||
#define PE9_PF_UART3_RXD (GPIO_PORTE | GPIO_PF | GPIO_IN | 9)
|
||||
#define PE10_PF_UART3_CTS (GPIO_PORTE | GPIO_PF | GPIO_OUT | 10)
|
||||
#define PE11_PF_UART3_RTS (GPIO_PORTE | GPIO_PF | GPIO_IN | 11)
|
||||
#define PE12_PF_UART1_TXD (GPIO_PORTE | GPIO_PF | GPIO_OUT | 12)
|
||||
#define PE13_PF_UART1_RXD (GPIO_PORTE | GPIO_PF | GPIO_IN | 13)
|
||||
#define PE14_PF_UART1_CTS (GPIO_PORTE | GPIO_PF | GPIO_OUT | 14)
|
||||
#define PE15_PF_UART1_RTS (GPIO_PORTE | GPIO_PF | GPIO_IN | 15)
|
||||
#define PE16_PF_RTCK (GPIO_PORTE | GPIO_PF | GPIO_OUT | 16)
|
||||
#define PE17_PF_RESET_OUT (GPIO_PORTE | GPIO_PF | 17)
|
||||
#define PE18_PF_SD1_D0 (GPIO_PORTE | GPIO_PF | 18)
|
||||
#define PE19_PF_SD1_D1 (GPIO_PORTE | GPIO_PF | 19)
|
||||
#define PE20_PF_SD1_D2 (GPIO_PORTE | GPIO_PF | 20)
|
||||
#define PE21_PF_SD1_D3 (GPIO_PORTE | GPIO_PF | 21)
|
||||
#define PE22_PF_SD1_CMD (GPIO_PORTE | GPIO_PF | 22)
|
||||
#define PE23_PF_SD1_CLK (GPIO_PORTE | GPIO_PF | 23)
|
||||
#define PF0_PF_NRFB (GPIO_PORTF | GPIO_PF | 0)
|
||||
#define PF2_PF_NFWP (GPIO_PORTF | GPIO_PF | 2)
|
||||
#define PF4_PF_NFALE (GPIO_PORTF | GPIO_PF | 4)
|
||||
#define PF5_PF_NFRE (GPIO_PORTF | GPIO_PF | 5)
|
||||
#define PF6_PF_NFWE (GPIO_PORTF | GPIO_PF | 6)
|
||||
#define PF15_PF_CLKO (GPIO_PORTF | GPIO_PF | 15)
|
||||
#define PF21_PF_CS4 (GPIO_PORTF | GPIO_PF | 21)
|
||||
#define PF22_PF_CS5 (GPIO_PORTF | GPIO_PF | 22)
|
||||
|
||||
/* Alternate GPIO pin functions */
|
||||
|
||||
#define PB26_AF_UART4_RTS (GPIO_PORTB | GPIO_AF | GPIO_IN | 26)
|
||||
#define PB28_AF_UART4_TXD (GPIO_PORTB | GPIO_AF | GPIO_OUT | 28)
|
||||
#define PB29_AF_UART4_CTS (GPIO_PORTB | GPIO_AF | GPIO_OUT | 29)
|
||||
#define PB31_AF_UART4_RXD (GPIO_PORTB | GPIO_AF | GPIO_IN | 31)
|
||||
#define PC28_AF_SLCDC2_D0 (GPIO_PORTC | GPIO_AF | 28)
|
||||
#define PC29_AF_SLCDC2_RS (GPIO_PORTC | GPIO_AF | 29)
|
||||
#define PC30_AF_SLCDC2_CS (GPIO_PORTC | GPIO_AF | 30)
|
||||
#define PC31_AF_SLCDC2_CLK (GPIO_PORTC | GPIO_AF | 31)
|
||||
#define PD19_AF_USBH2_DATA4 (GPIO_PORTD | GPIO_AF | 19)
|
||||
#define PD20_AF_USBH2_DATA3 (GPIO_PORTD | GPIO_AF | 20)
|
||||
#define PD21_AF_USBH2_DATA6 (GPIO_PORTD | GPIO_AF | 21)
|
||||
#define PD22_AF_USBH2_DATA0 (GPIO_PORTD | GPIO_AF | 22)
|
||||
#define PD23_AF_USBH2_DATA2 (GPIO_PORTD | GPIO_AF | 23)
|
||||
#define PD24_AF_USBH2_DATA1 (GPIO_PORTD | GPIO_AF | 24)
|
||||
#define PD26_AF_USBH2_DATA5 (GPIO_PORTD | GPIO_AF | 26)
|
||||
#define PE0_AF_KP_COL6 (GPIO_PORTE | GPIO_AF | 0)
|
||||
#define PE1_AF_KP_ROW6 (GPIO_PORTE | GPIO_AF | 1)
|
||||
#define PE2_AF_KP_ROW7 (GPIO_PORTE | GPIO_AF | 2)
|
||||
#define PE3_AF_KP_COL7 (GPIO_PORTE | GPIO_AF | 3)
|
||||
#define PE4_AF_KP_ROW7 (GPIO_PORTE | GPIO_AF | 4)
|
||||
#define PE6_AF_KP_COL6 (GPIO_PORTE | GPIO_AF | 6)
|
||||
#define PE7_AF_KP_ROW6 (GPIO_PORTE | GPIO_AF | 7)
|
||||
#define PE16_AF_OWIRE (GPIO_PORTE | GPIO_AF | 16)
|
||||
#define PE18_AF_CSPI3_MISO (GPIO_PORTE | GPIO_AF | GPIO_IN | 18)
|
||||
#define PE21_AF_CSPI3_SS (GPIO_PORTE | GPIO_AF | GPIO_OUT | 21)
|
||||
#define PE22_AF_CSPI3_MOSI (GPIO_PORTE | GPIO_AF | GPIO_OUT | 22)
|
||||
#define PE23_AF_CSPI3_SCLK (GPIO_PORTE | GPIO_AF | GPIO_OUT | 23)
|
||||
|
||||
/* AIN GPIO pin functions */
|
||||
|
||||
#define PA6_AIN_SLCDC1_DAT0 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 6)
|
||||
#define PA7_AIN_SLCDC1_DAT1 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 7)
|
||||
#define PA8_AIN_SLCDC1_DAT2 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 8)
|
||||
#define PA0_AIN_SLCDC1_DAT3 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 0)
|
||||
#define PA11_AIN_SLCDC1_DAT5 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 11)
|
||||
#define PA13_AIN_SLCDC1_DAT7 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 13)
|
||||
#define PA15_AIN_SLCDC1_DAT9 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 15)
|
||||
#define PA17_AIN_SLCDC1_DAT11 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 17)
|
||||
#define PA19_AIN_SLCDC1_DAT13 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 19)
|
||||
#define PA21_AIN_SLCDC1_DAT15 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 21)
|
||||
#define PA22_AIN_EXT_DMAGRANT (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 22)
|
||||
#define PA24_AIN_SLCDC1_D0 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 24)
|
||||
#define PA25_AIN_SLCDC1_RS (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 25)
|
||||
#define PA26_AIN_SLCDC1_CS (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 26)
|
||||
#define PA27_AIN_SLCDC1_CLK (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 27)
|
||||
#define PB6_AIN_SLCDC1_D0 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 6)
|
||||
#define PB7_AIN_SLCDC1_RS (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 7)
|
||||
#define PB8_AIN_SLCDC1_CS (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 8)
|
||||
#define PB9_AIN_SLCDC1_CLK (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 9)
|
||||
#define PB25_AIN_SLCDC1_DAT0 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 25)
|
||||
#define PB26_AIN_SLCDC1_DAT1 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 26)
|
||||
#define PB27_AIN_SLCDC1_DAT2 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 27)
|
||||
#define PB28_AIN_SLCDC1_DAT3 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 28)
|
||||
#define PB29_AIN_SLCDC1_DAT4 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 29)
|
||||
#define PB30_AIN_SLCDC1_DAT5 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 30)
|
||||
#define PB31_AIN_SLCDC1_DAT6 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 31)
|
||||
#define PC5_AIN_SLCDC1_DAT7 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 5)
|
||||
#define PC6_AIN_SLCDC1_DAT8 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 6)
|
||||
#define PC7_AIN_SLCDC1_DAT9 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 7)
|
||||
#define PC8_AIN_SLCDC1_DAT10 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 8)
|
||||
#define PC9_AIN_SLCDC1_DAT11 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 9)
|
||||
#define PC10_AIN_SLCDC1_DAT12 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 10)
|
||||
#define PC11_AIN_SLCDC1_DAT13 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 11)
|
||||
#define PC12_AIN_SLCDC1_DAT14 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 12)
|
||||
#define PC13_AIN_SLCDC1_DAT15 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 13)
|
||||
#define PE5_AIN_PC_SPKOUT (GPIO_PORTE | GPIO_AIN | GPIO_OUT | 5)
|
||||
|
||||
/* BIN GPIO pin functions */
|
||||
|
||||
#define PE5_BIN_TOUT2 (GPIO_PORTE | GPIO_BIN | GPIO_OUT | 5)
|
||||
|
||||
/* CIN GPIO pin functions */
|
||||
|
||||
#define PA14_CIN_SLCDC1_DAT0 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 14)
|
||||
#define PA15_CIN_SLCDC1_DAT1 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 15)
|
||||
#define PA16_CIN_SLCDC1_DAT2 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 16)
|
||||
#define PA17_CIN_SLCDC1_DAT3 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 17)
|
||||
#define PA18_CIN_SLCDC1_DAT4 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 18)
|
||||
#define PA19_CIN_SLCDC1_DAT5 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 19)
|
||||
#define PA20_CIN_SLCDC1_DAT6 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 20)
|
||||
#define PA21_CIN_SLCDC1_DAT7 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 21)
|
||||
#define PB30_CIN_UART4_CTS (GPIO_PORTB | GPIO_CIN | GPIO_OUT | 30)
|
||||
#define PE5_CIN_TOUT3 (GPIO_PORTE | GPIO_CIN | GPIO_OUT | 5)
|
||||
|
||||
/* AOUT GPIO pin functions */
|
||||
|
||||
#define PB29_AOUT_UART4_RXD (GPIO_PORTB | GPIO_AOUT | GPIO_IN | 29)
|
||||
#define PB31_AOUT_UART4_RTS (GPIO_PORTB | GPIO_AOUT | GPIO_IN | 31)
|
||||
#define PC8_AOUT_USBOTG_TXR_INT (GPIO_PORTC | GPIO_AOUT | GPIO_IN | 8)
|
||||
#define PC15_AOUT_WKGD (GPIO_PORTC | GPIO_AOUT | GPIO_IN | 15)
|
||||
#define PF21_AOUT_DTACK (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 21)
|
||||
|
||||
#endif /* ifndef __MACH_IOMUX_MX2x_H__ */
|
|
@ -1,706 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright 2004-2006 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
* Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de>
|
||||
*/
|
||||
#ifndef __MACH_IOMUX_MX3_H__
|
||||
#define __MACH_IOMUX_MX3_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
/*
|
||||
* various IOMUX output functions
|
||||
*/
|
||||
|
||||
#define IOMUX_OCONFIG_GPIO (0 << 4) /* used as GPIO */
|
||||
#define IOMUX_OCONFIG_FUNC (1 << 4) /* used as function */
|
||||
#define IOMUX_OCONFIG_ALT1 (2 << 4) /* used as alternate function 1 */
|
||||
#define IOMUX_OCONFIG_ALT2 (3 << 4) /* used as alternate function 2 */
|
||||
#define IOMUX_OCONFIG_ALT3 (4 << 4) /* used as alternate function 3 */
|
||||
#define IOMUX_OCONFIG_ALT4 (5 << 4) /* used as alternate function 4 */
|
||||
#define IOMUX_OCONFIG_ALT5 (6 << 4) /* used as alternate function 5 */
|
||||
#define IOMUX_OCONFIG_ALT6 (7 << 4) /* used as alternate function 6 */
|
||||
#define IOMUX_ICONFIG_NONE 0 /* not configured for input */
|
||||
#define IOMUX_ICONFIG_GPIO 1 /* used as GPIO */
|
||||
#define IOMUX_ICONFIG_FUNC 2 /* used as function */
|
||||
#define IOMUX_ICONFIG_ALT1 4 /* used as alternate function 1 */
|
||||
#define IOMUX_ICONFIG_ALT2 8 /* used as alternate function 2 */
|
||||
|
||||
#define IOMUX_CONFIG_GPIO (IOMUX_OCONFIG_GPIO | IOMUX_ICONFIG_GPIO)
|
||||
#define IOMUX_CONFIG_FUNC (IOMUX_OCONFIG_FUNC | IOMUX_ICONFIG_FUNC)
|
||||
#define IOMUX_CONFIG_ALT1 (IOMUX_OCONFIG_ALT1 | IOMUX_ICONFIG_ALT1)
|
||||
#define IOMUX_CONFIG_ALT2 (IOMUX_OCONFIG_ALT2 | IOMUX_ICONFIG_ALT2)
|
||||
|
||||
/*
|
||||
* various IOMUX pad functions
|
||||
*/
|
||||
enum iomux_pad_config {
|
||||
PAD_CTL_NOLOOPBACK = 0x0 << 9,
|
||||
PAD_CTL_LOOPBACK = 0x1 << 9,
|
||||
PAD_CTL_PKE_NONE = 0x0 << 8,
|
||||
PAD_CTL_PKE_ENABLE = 0x1 << 8,
|
||||
PAD_CTL_PUE_KEEPER = 0x0 << 7,
|
||||
PAD_CTL_PUE_PUD = 0x1 << 7,
|
||||
PAD_CTL_100K_PD = 0x0 << 5,
|
||||
PAD_CTL_100K_PU = 0x1 << 5,
|
||||
PAD_CTL_47K_PU = 0x2 << 5,
|
||||
PAD_CTL_22K_PU = 0x3 << 5,
|
||||
PAD_CTL_HYS_CMOS = 0x0 << 4,
|
||||
PAD_CTL_HYS_SCHMITZ = 0x1 << 4,
|
||||
PAD_CTL_ODE_CMOS = 0x0 << 3,
|
||||
PAD_CTL_ODE_OpenDrain = 0x1 << 3,
|
||||
PAD_CTL_DRV_NORMAL = 0x0 << 1,
|
||||
PAD_CTL_DRV_HIGH = 0x1 << 1,
|
||||
PAD_CTL_DRV_MAX = 0x2 << 1,
|
||||
PAD_CTL_SRE_SLOW = 0x0 << 0,
|
||||
PAD_CTL_SRE_FAST = 0x1 << 0
|
||||
};
|
||||
|
||||
/*
|
||||
* various IOMUX general purpose functions
|
||||
*/
|
||||
enum iomux_gp_func {
|
||||
MUX_PGP_FIRI = 1 << 0,
|
||||
MUX_DDR_MODE = 1 << 1,
|
||||
MUX_PGP_CSPI_BB = 1 << 2,
|
||||
MUX_PGP_ATA_1 = 1 << 3,
|
||||
MUX_PGP_ATA_2 = 1 << 4,
|
||||
MUX_PGP_ATA_3 = 1 << 5,
|
||||
MUX_PGP_ATA_4 = 1 << 6,
|
||||
MUX_PGP_ATA_5 = 1 << 7,
|
||||
MUX_PGP_ATA_6 = 1 << 8,
|
||||
MUX_PGP_ATA_7 = 1 << 9,
|
||||
MUX_PGP_ATA_8 = 1 << 10,
|
||||
MUX_PGP_UH2 = 1 << 11,
|
||||
MUX_SDCTL_CSD0_SEL = 1 << 12,
|
||||
MUX_SDCTL_CSD1_SEL = 1 << 13,
|
||||
MUX_CSPI1_UART3 = 1 << 14,
|
||||
MUX_EXTDMAREQ2_MBX_SEL = 1 << 15,
|
||||
MUX_TAMPER_DETECT_EN = 1 << 16,
|
||||
MUX_PGP_USB_4WIRE = 1 << 17,
|
||||
MUX_PGP_USB_COMMON = 1 << 18,
|
||||
MUX_SDHC_MEMSTICK1 = 1 << 19,
|
||||
MUX_SDHC_MEMSTICK2 = 1 << 20,
|
||||
MUX_PGP_SPLL_BYP = 1 << 21,
|
||||
MUX_PGP_UPLL_BYP = 1 << 22,
|
||||
MUX_PGP_MSHC1_CLK_SEL = 1 << 23,
|
||||
MUX_PGP_MSHC2_CLK_SEL = 1 << 24,
|
||||
MUX_CSPI3_UART5_SEL = 1 << 25,
|
||||
MUX_PGP_ATA_9 = 1 << 26,
|
||||
MUX_PGP_USB_SUSPEND = 1 << 27,
|
||||
MUX_PGP_USB_OTG_LOOPBACK = 1 << 28,
|
||||
MUX_PGP_USB_HS1_LOOPBACK = 1 << 29,
|
||||
MUX_PGP_USB_HS2_LOOPBACK = 1 << 30,
|
||||
MUX_CLKO_DDR_MODE = 1 << 31,
|
||||
};
|
||||
|
||||
/*
|
||||
* setups a single pin:
|
||||
* - reserves the pin so that it is not claimed by another driver
|
||||
* - setups the iomux according to the configuration
|
||||
* - if the pin is configured as a GPIO, we claim it through kernel gpiolib
|
||||
*/
|
||||
int mxc_iomux_alloc_pin(unsigned int pin, const char *label);
|
||||
/*
|
||||
* setups multiple pins
|
||||
* convenient way to call the above function with tables
|
||||
*/
|
||||
int mxc_iomux_setup_multiple_pins(const unsigned int *pin_list, unsigned count,
|
||||
const char *label);
|
||||
|
||||
/*
|
||||
* releases a single pin:
|
||||
* - make it available for a future use by another driver
|
||||
* - frees the GPIO if the pin was configured as GPIO
|
||||
* - DOES NOT reconfigure the IOMUX in its reset state
|
||||
*/
|
||||
void mxc_iomux_release_pin(unsigned int pin);
|
||||
/*
|
||||
* releases multiple pins
|
||||
* convenvient way to call the above function with tables
|
||||
*/
|
||||
void mxc_iomux_release_multiple_pins(const unsigned int *pin_list, int count);
|
||||
|
||||
/*
|
||||
* This function enables/disables the general purpose function for a particular
|
||||
* signal.
|
||||
*/
|
||||
void mxc_iomux_set_gpr(enum iomux_gp_func, bool en);
|
||||
|
||||
/*
|
||||
* This function only configures the iomux hardware.
|
||||
* It is called by the setup functions and should not be called directly anymore.
|
||||
* It is here visible for backward compatibility
|
||||
*/
|
||||
void mxc_iomux_mode(unsigned int pin_mode);
|
||||
|
||||
#define IOMUX_PADNUM_MASK 0x1ff
|
||||
#define IOMUX_GPIONUM_SHIFT 9
|
||||
#define IOMUX_GPIONUM_MASK (0xff << IOMUX_GPIONUM_SHIFT)
|
||||
#define IOMUX_MODE_SHIFT 17
|
||||
#define IOMUX_MODE_MASK (0xff << IOMUX_MODE_SHIFT)
|
||||
|
||||
#define IOMUX_PIN(gpionum, padnum) \
|
||||
(((gpionum << IOMUX_GPIONUM_SHIFT) & IOMUX_GPIONUM_MASK) | \
|
||||
(padnum & IOMUX_PADNUM_MASK))
|
||||
|
||||
#define IOMUX_MODE(pin, mode) (pin | mode << IOMUX_MODE_SHIFT)
|
||||
|
||||
#define IOMUX_TO_GPIO(iomux_pin) \
|
||||
((iomux_pin & IOMUX_GPIONUM_MASK) >> IOMUX_GPIONUM_SHIFT)
|
||||
|
||||
/*
|
||||
* This enumeration is constructed based on the Section
|
||||
* "sw_pad_ctl & sw_mux_ctl details" of the MX31 IC Spec. Each enumerated
|
||||
* value is constructed based on the rules described above.
|
||||
*/
|
||||
|
||||
enum iomux_pins {
|
||||
MX31_PIN_TTM_PAD = IOMUX_PIN(0xff, 0),
|
||||
MX31_PIN_CSPI3_SPI_RDY = IOMUX_PIN(0xff, 1),
|
||||
MX31_PIN_CSPI3_SCLK = IOMUX_PIN(0xff, 2),
|
||||
MX31_PIN_CSPI3_MISO = IOMUX_PIN(0xff, 3),
|
||||
MX31_PIN_CSPI3_MOSI = IOMUX_PIN(0xff, 4),
|
||||
MX31_PIN_CLKSS = IOMUX_PIN(0xff, 5),
|
||||
MX31_PIN_CE_CONTROL = IOMUX_PIN(0xff, 6),
|
||||
MX31_PIN_ATA_RESET_B = IOMUX_PIN(95, 7),
|
||||
MX31_PIN_ATA_DMACK = IOMUX_PIN(94, 8),
|
||||
MX31_PIN_ATA_DIOW = IOMUX_PIN(93, 9),
|
||||
MX31_PIN_ATA_DIOR = IOMUX_PIN(92, 10),
|
||||
MX31_PIN_ATA_CS1 = IOMUX_PIN(91, 11),
|
||||
MX31_PIN_ATA_CS0 = IOMUX_PIN(90, 12),
|
||||
MX31_PIN_SD1_DATA3 = IOMUX_PIN(63, 13),
|
||||
MX31_PIN_SD1_DATA2 = IOMUX_PIN(62, 14),
|
||||
MX31_PIN_SD1_DATA1 = IOMUX_PIN(61, 15),
|
||||
MX31_PIN_SD1_DATA0 = IOMUX_PIN(60, 16),
|
||||
MX31_PIN_SD1_CLK = IOMUX_PIN(59, 17),
|
||||
MX31_PIN_SD1_CMD = IOMUX_PIN(58, 18),
|
||||
MX31_PIN_D3_SPL = IOMUX_PIN(0xff, 19),
|
||||
MX31_PIN_D3_CLS = IOMUX_PIN(0xff, 20),
|
||||
MX31_PIN_D3_REV = IOMUX_PIN(0xff, 21),
|
||||
MX31_PIN_CONTRAST = IOMUX_PIN(0xff, 22),
|
||||
MX31_PIN_VSYNC3 = IOMUX_PIN(0xff, 23),
|
||||
MX31_PIN_READ = IOMUX_PIN(0xff, 24),
|
||||
MX31_PIN_WRITE = IOMUX_PIN(0xff, 25),
|
||||
MX31_PIN_PAR_RS = IOMUX_PIN(0xff, 26),
|
||||
MX31_PIN_SER_RS = IOMUX_PIN(89, 27),
|
||||
MX31_PIN_LCS1 = IOMUX_PIN(88, 28),
|
||||
MX31_PIN_LCS0 = IOMUX_PIN(87, 29),
|
||||
MX31_PIN_SD_D_CLK = IOMUX_PIN(86, 30),
|
||||
MX31_PIN_SD_D_IO = IOMUX_PIN(85, 31),
|
||||
MX31_PIN_SD_D_I = IOMUX_PIN(84, 32),
|
||||
MX31_PIN_DRDY0 = IOMUX_PIN(0xff, 33),
|
||||
MX31_PIN_FPSHIFT = IOMUX_PIN(0xff, 34),
|
||||
MX31_PIN_HSYNC = IOMUX_PIN(0xff, 35),
|
||||
MX31_PIN_VSYNC0 = IOMUX_PIN(0xff, 36),
|
||||
MX31_PIN_LD17 = IOMUX_PIN(0xff, 37),
|
||||
MX31_PIN_LD16 = IOMUX_PIN(0xff, 38),
|
||||
MX31_PIN_LD15 = IOMUX_PIN(0xff, 39),
|
||||
MX31_PIN_LD14 = IOMUX_PIN(0xff, 40),
|
||||
MX31_PIN_LD13 = IOMUX_PIN(0xff, 41),
|
||||
MX31_PIN_LD12 = IOMUX_PIN(0xff, 42),
|
||||
MX31_PIN_LD11 = IOMUX_PIN(0xff, 43),
|
||||
MX31_PIN_LD10 = IOMUX_PIN(0xff, 44),
|
||||
MX31_PIN_LD9 = IOMUX_PIN(0xff, 45),
|
||||
MX31_PIN_LD8 = IOMUX_PIN(0xff, 46),
|
||||
MX31_PIN_LD7 = IOMUX_PIN(0xff, 47),
|
||||
MX31_PIN_LD6 = IOMUX_PIN(0xff, 48),
|
||||
MX31_PIN_LD5 = IOMUX_PIN(0xff, 49),
|
||||
MX31_PIN_LD4 = IOMUX_PIN(0xff, 50),
|
||||
MX31_PIN_LD3 = IOMUX_PIN(0xff, 51),
|
||||
MX31_PIN_LD2 = IOMUX_PIN(0xff, 52),
|
||||
MX31_PIN_LD1 = IOMUX_PIN(0xff, 53),
|
||||
MX31_PIN_LD0 = IOMUX_PIN(0xff, 54),
|
||||
MX31_PIN_USBH2_DATA1 = IOMUX_PIN(0xff, 55),
|
||||
MX31_PIN_USBH2_DATA0 = IOMUX_PIN(0xff, 56),
|
||||
MX31_PIN_USBH2_NXT = IOMUX_PIN(0xff, 57),
|
||||
MX31_PIN_USBH2_STP = IOMUX_PIN(0xff, 58),
|
||||
MX31_PIN_USBH2_DIR = IOMUX_PIN(0xff, 59),
|
||||
MX31_PIN_USBH2_CLK = IOMUX_PIN(0xff, 60),
|
||||
MX31_PIN_USBOTG_DATA7 = IOMUX_PIN(0xff, 61),
|
||||
MX31_PIN_USBOTG_DATA6 = IOMUX_PIN(0xff, 62),
|
||||
MX31_PIN_USBOTG_DATA5 = IOMUX_PIN(0xff, 63),
|
||||
MX31_PIN_USBOTG_DATA4 = IOMUX_PIN(0xff, 64),
|
||||
MX31_PIN_USBOTG_DATA3 = IOMUX_PIN(0xff, 65),
|
||||
MX31_PIN_USBOTG_DATA2 = IOMUX_PIN(0xff, 66),
|
||||
MX31_PIN_USBOTG_DATA1 = IOMUX_PIN(0xff, 67),
|
||||
MX31_PIN_USBOTG_DATA0 = IOMUX_PIN(0xff, 68),
|
||||
MX31_PIN_USBOTG_NXT = IOMUX_PIN(0xff, 69),
|
||||
MX31_PIN_USBOTG_STP = IOMUX_PIN(0xff, 70),
|
||||
MX31_PIN_USBOTG_DIR = IOMUX_PIN(0xff, 71),
|
||||
MX31_PIN_USBOTG_CLK = IOMUX_PIN(0xff, 72),
|
||||
MX31_PIN_USB_BYP = IOMUX_PIN(31, 73),
|
||||
MX31_PIN_USB_OC = IOMUX_PIN(30, 74),
|
||||
MX31_PIN_USB_PWR = IOMUX_PIN(29, 75),
|
||||
MX31_PIN_SJC_MOD = IOMUX_PIN(0xff, 76),
|
||||
MX31_PIN_DE_B = IOMUX_PIN(0xff, 77),
|
||||
MX31_PIN_TRSTB = IOMUX_PIN(0xff, 78),
|
||||
MX31_PIN_TDO = IOMUX_PIN(0xff, 79),
|
||||
MX31_PIN_TDI = IOMUX_PIN(0xff, 80),
|
||||
MX31_PIN_TMS = IOMUX_PIN(0xff, 81),
|
||||
MX31_PIN_TCK = IOMUX_PIN(0xff, 82),
|
||||
MX31_PIN_RTCK = IOMUX_PIN(0xff, 83),
|
||||
MX31_PIN_KEY_COL7 = IOMUX_PIN(57, 84),
|
||||
MX31_PIN_KEY_COL6 = IOMUX_PIN(56, 85),
|
||||
MX31_PIN_KEY_COL5 = IOMUX_PIN(55, 86),
|
||||
MX31_PIN_KEY_COL4 = IOMUX_PIN(54, 87),
|
||||
MX31_PIN_KEY_COL3 = IOMUX_PIN(0xff, 88),
|
||||
MX31_PIN_KEY_COL2 = IOMUX_PIN(0xff, 89),
|
||||
MX31_PIN_KEY_COL1 = IOMUX_PIN(0xff, 90),
|
||||
MX31_PIN_KEY_COL0 = IOMUX_PIN(0xff, 91),
|
||||
MX31_PIN_KEY_ROW7 = IOMUX_PIN(53, 92),
|
||||
MX31_PIN_KEY_ROW6 = IOMUX_PIN(52, 93),
|
||||
MX31_PIN_KEY_ROW5 = IOMUX_PIN(51, 94),
|
||||
MX31_PIN_KEY_ROW4 = IOMUX_PIN(50, 95),
|
||||
MX31_PIN_KEY_ROW3 = IOMUX_PIN(0xff, 96),
|
||||
MX31_PIN_KEY_ROW2 = IOMUX_PIN(0xff, 97),
|
||||
MX31_PIN_KEY_ROW1 = IOMUX_PIN(0xff, 98),
|
||||
MX31_PIN_KEY_ROW0 = IOMUX_PIN(0xff, 99),
|
||||
MX31_PIN_BATT_LINE = IOMUX_PIN(49, 100),
|
||||
MX31_PIN_CTS2 = IOMUX_PIN(0xff, 101),
|
||||
MX31_PIN_RTS2 = IOMUX_PIN(0xff, 102),
|
||||
MX31_PIN_TXD2 = IOMUX_PIN(28, 103),
|
||||
MX31_PIN_RXD2 = IOMUX_PIN(27, 104),
|
||||
MX31_PIN_DTR_DCE2 = IOMUX_PIN(48, 105),
|
||||
MX31_PIN_DCD_DTE1 = IOMUX_PIN(47, 106),
|
||||
MX31_PIN_RI_DTE1 = IOMUX_PIN(46, 107),
|
||||
MX31_PIN_DSR_DTE1 = IOMUX_PIN(45, 108),
|
||||
MX31_PIN_DTR_DTE1 = IOMUX_PIN(44, 109),
|
||||
MX31_PIN_DCD_DCE1 = IOMUX_PIN(43, 110),
|
||||
MX31_PIN_RI_DCE1 = IOMUX_PIN(42, 111),
|
||||
MX31_PIN_DSR_DCE1 = IOMUX_PIN(41, 112),
|
||||
MX31_PIN_DTR_DCE1 = IOMUX_PIN(40, 113),
|
||||
MX31_PIN_CTS1 = IOMUX_PIN(39, 114),
|
||||
MX31_PIN_RTS1 = IOMUX_PIN(38, 115),
|
||||
MX31_PIN_TXD1 = IOMUX_PIN(37, 116),
|
||||
MX31_PIN_RXD1 = IOMUX_PIN(36, 117),
|
||||
MX31_PIN_CSPI2_SPI_RDY = IOMUX_PIN(0xff, 118),
|
||||
MX31_PIN_CSPI2_SCLK = IOMUX_PIN(0xff, 119),
|
||||
MX31_PIN_CSPI2_SS2 = IOMUX_PIN(0xff, 120),
|
||||
MX31_PIN_CSPI2_SS1 = IOMUX_PIN(0xff, 121),
|
||||
MX31_PIN_CSPI2_SS0 = IOMUX_PIN(0xff, 122),
|
||||
MX31_PIN_CSPI2_MISO = IOMUX_PIN(0xff, 123),
|
||||
MX31_PIN_CSPI2_MOSI = IOMUX_PIN(0xff, 124),
|
||||
MX31_PIN_CSPI1_SPI_RDY = IOMUX_PIN(0xff, 125),
|
||||
MX31_PIN_CSPI1_SCLK = IOMUX_PIN(0xff, 126),
|
||||
MX31_PIN_CSPI1_SS2 = IOMUX_PIN(0xff, 127),
|
||||
MX31_PIN_CSPI1_SS1 = IOMUX_PIN(0xff, 128),
|
||||
MX31_PIN_CSPI1_SS0 = IOMUX_PIN(0xff, 129),
|
||||
MX31_PIN_CSPI1_MISO = IOMUX_PIN(0xff, 130),
|
||||
MX31_PIN_CSPI1_MOSI = IOMUX_PIN(0xff, 131),
|
||||
MX31_PIN_SFS6 = IOMUX_PIN(26, 132),
|
||||
MX31_PIN_SCK6 = IOMUX_PIN(25, 133),
|
||||
MX31_PIN_SRXD6 = IOMUX_PIN(24, 134),
|
||||
MX31_PIN_STXD6 = IOMUX_PIN(23, 135),
|
||||
MX31_PIN_SFS5 = IOMUX_PIN(0xff, 136),
|
||||
MX31_PIN_SCK5 = IOMUX_PIN(0xff, 137),
|
||||
MX31_PIN_SRXD5 = IOMUX_PIN(22, 138),
|
||||
MX31_PIN_STXD5 = IOMUX_PIN(21, 139),
|
||||
MX31_PIN_SFS4 = IOMUX_PIN(0xff, 140),
|
||||
MX31_PIN_SCK4 = IOMUX_PIN(0xff, 141),
|
||||
MX31_PIN_SRXD4 = IOMUX_PIN(20, 142),
|
||||
MX31_PIN_STXD4 = IOMUX_PIN(19, 143),
|
||||
MX31_PIN_SFS3 = IOMUX_PIN(0xff, 144),
|
||||
MX31_PIN_SCK3 = IOMUX_PIN(0xff, 145),
|
||||
MX31_PIN_SRXD3 = IOMUX_PIN(18, 146),
|
||||
MX31_PIN_STXD3 = IOMUX_PIN(17, 147),
|
||||
MX31_PIN_I2C_DAT = IOMUX_PIN(0xff, 148),
|
||||
MX31_PIN_I2C_CLK = IOMUX_PIN(0xff, 149),
|
||||
MX31_PIN_CSI_PIXCLK = IOMUX_PIN(83, 150),
|
||||
MX31_PIN_CSI_HSYNC = IOMUX_PIN(82, 151),
|
||||
MX31_PIN_CSI_VSYNC = IOMUX_PIN(81, 152),
|
||||
MX31_PIN_CSI_MCLK = IOMUX_PIN(80, 153),
|
||||
MX31_PIN_CSI_D15 = IOMUX_PIN(79, 154),
|
||||
MX31_PIN_CSI_D14 = IOMUX_PIN(78, 155),
|
||||
MX31_PIN_CSI_D13 = IOMUX_PIN(77, 156),
|
||||
MX31_PIN_CSI_D12 = IOMUX_PIN(76, 157),
|
||||
MX31_PIN_CSI_D11 = IOMUX_PIN(75, 158),
|
||||
MX31_PIN_CSI_D10 = IOMUX_PIN(74, 159),
|
||||
MX31_PIN_CSI_D9 = IOMUX_PIN(73, 160),
|
||||
MX31_PIN_CSI_D8 = IOMUX_PIN(72, 161),
|
||||
MX31_PIN_CSI_D7 = IOMUX_PIN(71, 162),
|
||||
MX31_PIN_CSI_D6 = IOMUX_PIN(70, 163),
|
||||
MX31_PIN_CSI_D5 = IOMUX_PIN(69, 164),
|
||||
MX31_PIN_CSI_D4 = IOMUX_PIN(68, 165),
|
||||
MX31_PIN_M_GRANT = IOMUX_PIN(0xff, 166),
|
||||
MX31_PIN_M_REQUEST = IOMUX_PIN(0xff, 167),
|
||||
MX31_PIN_PC_POE = IOMUX_PIN(0xff, 168),
|
||||
MX31_PIN_PC_RW_B = IOMUX_PIN(0xff, 169),
|
||||
MX31_PIN_IOIS16 = IOMUX_PIN(0xff, 170),
|
||||
MX31_PIN_PC_RST = IOMUX_PIN(0xff, 171),
|
||||
MX31_PIN_PC_BVD2 = IOMUX_PIN(0xff, 172),
|
||||
MX31_PIN_PC_BVD1 = IOMUX_PIN(0xff, 173),
|
||||
MX31_PIN_PC_VS2 = IOMUX_PIN(0xff, 174),
|
||||
MX31_PIN_PC_VS1 = IOMUX_PIN(0xff, 175),
|
||||
MX31_PIN_PC_PWRON = IOMUX_PIN(0xff, 176),
|
||||
MX31_PIN_PC_READY = IOMUX_PIN(0xff, 177),
|
||||
MX31_PIN_PC_WAIT_B = IOMUX_PIN(0xff, 178),
|
||||
MX31_PIN_PC_CD2_B = IOMUX_PIN(0xff, 179),
|
||||
MX31_PIN_PC_CD1_B = IOMUX_PIN(0xff, 180),
|
||||
MX31_PIN_D0 = IOMUX_PIN(0xff, 181),
|
||||
MX31_PIN_D1 = IOMUX_PIN(0xff, 182),
|
||||
MX31_PIN_D2 = IOMUX_PIN(0xff, 183),
|
||||
MX31_PIN_D3 = IOMUX_PIN(0xff, 184),
|
||||
MX31_PIN_D4 = IOMUX_PIN(0xff, 185),
|
||||
MX31_PIN_D5 = IOMUX_PIN(0xff, 186),
|
||||
MX31_PIN_D6 = IOMUX_PIN(0xff, 187),
|
||||
MX31_PIN_D7 = IOMUX_PIN(0xff, 188),
|
||||
MX31_PIN_D8 = IOMUX_PIN(0xff, 189),
|
||||
MX31_PIN_D9 = IOMUX_PIN(0xff, 190),
|
||||
MX31_PIN_D10 = IOMUX_PIN(0xff, 191),
|
||||
MX31_PIN_D11 = IOMUX_PIN(0xff, 192),
|
||||
MX31_PIN_D12 = IOMUX_PIN(0xff, 193),
|
||||
MX31_PIN_D13 = IOMUX_PIN(0xff, 194),
|
||||
MX31_PIN_D14 = IOMUX_PIN(0xff, 195),
|
||||
MX31_PIN_D15 = IOMUX_PIN(0xff, 196),
|
||||
MX31_PIN_NFRB = IOMUX_PIN(16, 197),
|
||||
MX31_PIN_NFCE_B = IOMUX_PIN(15, 198),
|
||||
MX31_PIN_NFWP_B = IOMUX_PIN(14, 199),
|
||||
MX31_PIN_NFCLE = IOMUX_PIN(13, 200),
|
||||
MX31_PIN_NFALE = IOMUX_PIN(12, 201),
|
||||
MX31_PIN_NFRE_B = IOMUX_PIN(11, 202),
|
||||
MX31_PIN_NFWE_B = IOMUX_PIN(10, 203),
|
||||
MX31_PIN_SDQS3 = IOMUX_PIN(0xff, 204),
|
||||
MX31_PIN_SDQS2 = IOMUX_PIN(0xff, 205),
|
||||
MX31_PIN_SDQS1 = IOMUX_PIN(0xff, 206),
|
||||
MX31_PIN_SDQS0 = IOMUX_PIN(0xff, 207),
|
||||
MX31_PIN_SDCLK_B = IOMUX_PIN(0xff, 208),
|
||||
MX31_PIN_SDCLK = IOMUX_PIN(0xff, 209),
|
||||
MX31_PIN_SDCKE1 = IOMUX_PIN(0xff, 210),
|
||||
MX31_PIN_SDCKE0 = IOMUX_PIN(0xff, 211),
|
||||
MX31_PIN_SDWE = IOMUX_PIN(0xff, 212),
|
||||
MX31_PIN_CAS = IOMUX_PIN(0xff, 213),
|
||||
MX31_PIN_RAS = IOMUX_PIN(0xff, 214),
|
||||
MX31_PIN_RW = IOMUX_PIN(0xff, 215),
|
||||
MX31_PIN_BCLK = IOMUX_PIN(0xff, 216),
|
||||
MX31_PIN_LBA = IOMUX_PIN(0xff, 217),
|
||||
MX31_PIN_ECB = IOMUX_PIN(0xff, 218),
|
||||
MX31_PIN_CS5 = IOMUX_PIN(0xff, 219),
|
||||
MX31_PIN_CS4 = IOMUX_PIN(0xff, 220),
|
||||
MX31_PIN_CS3 = IOMUX_PIN(0xff, 221),
|
||||
MX31_PIN_CS2 = IOMUX_PIN(0xff, 222),
|
||||
MX31_PIN_CS1 = IOMUX_PIN(0xff, 223),
|
||||
MX31_PIN_CS0 = IOMUX_PIN(0xff, 224),
|
||||
MX31_PIN_OE = IOMUX_PIN(0xff, 225),
|
||||
MX31_PIN_EB1 = IOMUX_PIN(0xff, 226),
|
||||
MX31_PIN_EB0 = IOMUX_PIN(0xff, 227),
|
||||
MX31_PIN_DQM3 = IOMUX_PIN(0xff, 228),
|
||||
MX31_PIN_DQM2 = IOMUX_PIN(0xff, 229),
|
||||
MX31_PIN_DQM1 = IOMUX_PIN(0xff, 230),
|
||||
MX31_PIN_DQM0 = IOMUX_PIN(0xff, 231),
|
||||
MX31_PIN_SD31 = IOMUX_PIN(0xff, 232),
|
||||
MX31_PIN_SD30 = IOMUX_PIN(0xff, 233),
|
||||
MX31_PIN_SD29 = IOMUX_PIN(0xff, 234),
|
||||
MX31_PIN_SD28 = IOMUX_PIN(0xff, 235),
|
||||
MX31_PIN_SD27 = IOMUX_PIN(0xff, 236),
|
||||
MX31_PIN_SD26 = IOMUX_PIN(0xff, 237),
|
||||
MX31_PIN_SD25 = IOMUX_PIN(0xff, 238),
|
||||
MX31_PIN_SD24 = IOMUX_PIN(0xff, 239),
|
||||
MX31_PIN_SD23 = IOMUX_PIN(0xff, 240),
|
||||
MX31_PIN_SD22 = IOMUX_PIN(0xff, 241),
|
||||
MX31_PIN_SD21 = IOMUX_PIN(0xff, 242),
|
||||
MX31_PIN_SD20 = IOMUX_PIN(0xff, 243),
|
||||
MX31_PIN_SD19 = IOMUX_PIN(0xff, 244),
|
||||
MX31_PIN_SD18 = IOMUX_PIN(0xff, 245),
|
||||
MX31_PIN_SD17 = IOMUX_PIN(0xff, 246),
|
||||
MX31_PIN_SD16 = IOMUX_PIN(0xff, 247),
|
||||
MX31_PIN_SD15 = IOMUX_PIN(0xff, 248),
|
||||
MX31_PIN_SD14 = IOMUX_PIN(0xff, 249),
|
||||
MX31_PIN_SD13 = IOMUX_PIN(0xff, 250),
|
||||
MX31_PIN_SD12 = IOMUX_PIN(0xff, 251),
|
||||
MX31_PIN_SD11 = IOMUX_PIN(0xff, 252),
|
||||
MX31_PIN_SD10 = IOMUX_PIN(0xff, 253),
|
||||
MX31_PIN_SD9 = IOMUX_PIN(0xff, 254),
|
||||
MX31_PIN_SD8 = IOMUX_PIN(0xff, 255),
|
||||
MX31_PIN_SD7 = IOMUX_PIN(0xff, 256),
|
||||
MX31_PIN_SD6 = IOMUX_PIN(0xff, 257),
|
||||
MX31_PIN_SD5 = IOMUX_PIN(0xff, 258),
|
||||
MX31_PIN_SD4 = IOMUX_PIN(0xff, 259),
|
||||
MX31_PIN_SD3 = IOMUX_PIN(0xff, 260),
|
||||
MX31_PIN_SD2 = IOMUX_PIN(0xff, 261),
|
||||
MX31_PIN_SD1 = IOMUX_PIN(0xff, 262),
|
||||
MX31_PIN_SD0 = IOMUX_PIN(0xff, 263),
|
||||
MX31_PIN_SDBA0 = IOMUX_PIN(0xff, 264),
|
||||
MX31_PIN_SDBA1 = IOMUX_PIN(0xff, 265),
|
||||
MX31_PIN_A25 = IOMUX_PIN(0xff, 266),
|
||||
MX31_PIN_A24 = IOMUX_PIN(0xff, 267),
|
||||
MX31_PIN_A23 = IOMUX_PIN(0xff, 268),
|
||||
MX31_PIN_A22 = IOMUX_PIN(0xff, 269),
|
||||
MX31_PIN_A21 = IOMUX_PIN(0xff, 270),
|
||||
MX31_PIN_A20 = IOMUX_PIN(0xff, 271),
|
||||
MX31_PIN_A19 = IOMUX_PIN(0xff, 272),
|
||||
MX31_PIN_A18 = IOMUX_PIN(0xff, 273),
|
||||
MX31_PIN_A17 = IOMUX_PIN(0xff, 274),
|
||||
MX31_PIN_A16 = IOMUX_PIN(0xff, 275),
|
||||
MX31_PIN_A14 = IOMUX_PIN(0xff, 276),
|
||||
MX31_PIN_A15 = IOMUX_PIN(0xff, 277),
|
||||
MX31_PIN_A13 = IOMUX_PIN(0xff, 278),
|
||||
MX31_PIN_A12 = IOMUX_PIN(0xff, 279),
|
||||
MX31_PIN_A11 = IOMUX_PIN(0xff, 280),
|
||||
MX31_PIN_MA10 = IOMUX_PIN(0xff, 281),
|
||||
MX31_PIN_A10 = IOMUX_PIN(0xff, 282),
|
||||
MX31_PIN_A9 = IOMUX_PIN(0xff, 283),
|
||||
MX31_PIN_A8 = IOMUX_PIN(0xff, 284),
|
||||
MX31_PIN_A7 = IOMUX_PIN(0xff, 285),
|
||||
MX31_PIN_A6 = IOMUX_PIN(0xff, 286),
|
||||
MX31_PIN_A5 = IOMUX_PIN(0xff, 287),
|
||||
MX31_PIN_A4 = IOMUX_PIN(0xff, 288),
|
||||
MX31_PIN_A3 = IOMUX_PIN(0xff, 289),
|
||||
MX31_PIN_A2 = IOMUX_PIN(0xff, 290),
|
||||
MX31_PIN_A1 = IOMUX_PIN(0xff, 291),
|
||||
MX31_PIN_A0 = IOMUX_PIN(0xff, 292),
|
||||
MX31_PIN_VPG1 = IOMUX_PIN(0xff, 293),
|
||||
MX31_PIN_VPG0 = IOMUX_PIN(0xff, 294),
|
||||
MX31_PIN_DVFS1 = IOMUX_PIN(0xff, 295),
|
||||
MX31_PIN_DVFS0 = IOMUX_PIN(0xff, 296),
|
||||
MX31_PIN_VSTBY = IOMUX_PIN(0xff, 297),
|
||||
MX31_PIN_POWER_FAIL = IOMUX_PIN(0xff, 298),
|
||||
MX31_PIN_CKIL = IOMUX_PIN(0xff, 299),
|
||||
MX31_PIN_BOOT_MODE4 = IOMUX_PIN(0xff, 300),
|
||||
MX31_PIN_BOOT_MODE3 = IOMUX_PIN(0xff, 301),
|
||||
MX31_PIN_BOOT_MODE2 = IOMUX_PIN(0xff, 302),
|
||||
MX31_PIN_BOOT_MODE1 = IOMUX_PIN(0xff, 303),
|
||||
MX31_PIN_BOOT_MODE0 = IOMUX_PIN(0xff, 304),
|
||||
MX31_PIN_CLKO = IOMUX_PIN(0xff, 305),
|
||||
MX31_PIN_POR_B = IOMUX_PIN(0xff, 306),
|
||||
MX31_PIN_RESET_IN_B = IOMUX_PIN(0xff, 307),
|
||||
MX31_PIN_CKIH = IOMUX_PIN(0xff, 308),
|
||||
MX31_PIN_SIMPD0 = IOMUX_PIN(35, 309),
|
||||
MX31_PIN_SRX0 = IOMUX_PIN(34, 310),
|
||||
MX31_PIN_STX0 = IOMUX_PIN(33, 311),
|
||||
MX31_PIN_SVEN0 = IOMUX_PIN(32, 312),
|
||||
MX31_PIN_SRST0 = IOMUX_PIN(67, 313),
|
||||
MX31_PIN_SCLK0 = IOMUX_PIN(66, 314),
|
||||
MX31_PIN_GPIO3_1 = IOMUX_PIN(65, 315),
|
||||
MX31_PIN_GPIO3_0 = IOMUX_PIN(64, 316),
|
||||
MX31_PIN_GPIO1_6 = IOMUX_PIN( 6, 317),
|
||||
MX31_PIN_GPIO1_5 = IOMUX_PIN( 5, 318),
|
||||
MX31_PIN_GPIO1_4 = IOMUX_PIN( 4, 319),
|
||||
MX31_PIN_GPIO1_3 = IOMUX_PIN( 3, 320),
|
||||
MX31_PIN_GPIO1_2 = IOMUX_PIN( 2, 321),
|
||||
MX31_PIN_GPIO1_1 = IOMUX_PIN( 1, 322),
|
||||
MX31_PIN_GPIO1_0 = IOMUX_PIN( 0, 323),
|
||||
MX31_PIN_PWMO = IOMUX_PIN( 9, 324),
|
||||
MX31_PIN_WATCHDOG_RST = IOMUX_PIN(0xff, 325),
|
||||
MX31_PIN_COMPARE = IOMUX_PIN( 8, 326),
|
||||
MX31_PIN_CAPTURE = IOMUX_PIN( 7, 327),
|
||||
};
|
||||
|
||||
#define PIN_MAX 327
|
||||
#define NB_PORTS 12 /* NB_PINS/32, we chose 32 pins per "PORT" */
|
||||
|
||||
/*
|
||||
* Convenience values for use with mxc_iomux_mode()
|
||||
*
|
||||
* Format here is MX31_PIN_(pin name)__(function)
|
||||
*/
|
||||
#define MX31_PIN_CSPI3_MOSI__RXD3 IOMUX_MODE(MX31_PIN_CSPI3_MOSI, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI3_MISO__TXD3 IOMUX_MODE(MX31_PIN_CSPI3_MISO, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI3_SCLK__RTS3 IOMUX_MODE(MX31_PIN_CSPI3_SCLK, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI3_SPI_RDY__CTS3 IOMUX_MODE(MX31_PIN_CSPI3_SPI_RDY, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CTS1__CTS1 IOMUX_MODE(MX31_PIN_CTS1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_RTS1__RTS1 IOMUX_MODE(MX31_PIN_RTS1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_RTS1__SFS IOMUX_MODE(MX31_PIN_RTS1, IOMUX_CONFIG_ALT2)
|
||||
#define MX31_PIN_TXD1__TXD1 IOMUX_MODE(MX31_PIN_TXD1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_TXD1__SCK IOMUX_MODE(MX31_PIN_TXD1, IOMUX_CONFIG_ALT2)
|
||||
#define MX31_PIN_RXD1__RXD1 IOMUX_MODE(MX31_PIN_RXD1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_RXD1__STXDA IOMUX_MODE(MX31_PIN_RXD1, IOMUX_CONFIG_ALT2)
|
||||
#define MX31_PIN_DCD_DCE1__DCD_DCE1 IOMUX_MODE(MX31_PIN_DCD_DCE1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_RI_DCE1__RI_DCE1 IOMUX_MODE(MX31_PIN_RI_DCE1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_DSR_DCE1__DSR_DCE1 IOMUX_MODE(MX31_PIN_DSR_DCE1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_DTR_DCE1__DTR_DCE1 IOMUX_MODE(MX31_PIN_DTR_DCE1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_DTR_DCE1__SRXDA IOMUX_MODE(MX31_PIN_DTR_DCE1, IOMUX_CONFIG_ALT2)
|
||||
#define MX31_PIN_CTS2__CTS2 IOMUX_MODE(MX31_PIN_CTS2, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_RTS2__RTS2 IOMUX_MODE(MX31_PIN_RTS2, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_TXD2__TXD2 IOMUX_MODE(MX31_PIN_TXD2, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_RXD2__RXD2 IOMUX_MODE(MX31_PIN_RXD2, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_DCD_DTE1__DCD_DTE2 IOMUX_MODE(MX31_PIN_DCD_DTE1, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_RI_DTE1__RI_DTE2 IOMUX_MODE(MX31_PIN_RI_DTE1, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_DSR_DTE1__DSR_DTE2 IOMUX_MODE(MX31_PIN_DSR_DTE1, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_DTR_DTE1__DTR_DTE2 IOMUX_MODE(MX31_PIN_DTR_DTE1, IOMUX_OCONFIG_ALT3 | IOMUX_ICONFIG_NONE)
|
||||
#define MX31_PIN_PC_RST__CTS5 IOMUX_MODE(MX31_PIN_PC_RST, IOMUX_CONFIG_ALT2)
|
||||
#define MX31_PIN_PC_VS2__RTS5 IOMUX_MODE(MX31_PIN_PC_VS2, IOMUX_CONFIG_ALT2)
|
||||
#define MX31_PIN_PC_BVD2__TXD5 IOMUX_MODE(MX31_PIN_PC_BVD2, IOMUX_CONFIG_ALT2)
|
||||
#define MX31_PIN_PC_BVD1__RXD5 IOMUX_MODE(MX31_PIN_PC_BVD1, IOMUX_CONFIG_ALT2)
|
||||
#define MX31_PIN_CSPI1_MOSI__MOSI IOMUX_MODE(MX31_PIN_CSPI1_MOSI, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI1_MISO__MISO IOMUX_MODE(MX31_PIN_CSPI1_MISO, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI1_SCLK__SCLK IOMUX_MODE(MX31_PIN_CSPI1_SCLK, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI1_SPI_RDY__SPI_RDY IOMUX_MODE(MX31_PIN_CSPI1_SPI_RDY, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI1_SS0__SS0 IOMUX_MODE(MX31_PIN_CSPI1_SS0, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI1_SS1__SS1 IOMUX_MODE(MX31_PIN_CSPI1_SS1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI1_SS2__SS2 IOMUX_MODE(MX31_PIN_CSPI1_SS2, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI2_MOSI__MOSI IOMUX_MODE(MX31_PIN_CSPI2_MOSI, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI2_MOSI__SCL IOMUX_MODE(MX31_PIN_CSPI2_MOSI, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI2_MISO__MISO IOMUX_MODE(MX31_PIN_CSPI2_MISO, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI2_MISO__SDA IOMUX_MODE(MX31_PIN_CSPI2_MISO, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI2_SCLK__SCLK IOMUX_MODE(MX31_PIN_CSPI2_SCLK, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI2_SPI_RDY__SPI_RDY IOMUX_MODE(MX31_PIN_CSPI2_SPI_RDY, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI2_SS0__SS0 IOMUX_MODE(MX31_PIN_CSPI2_SS0, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI2_SS1__SS1 IOMUX_MODE(MX31_PIN_CSPI2_SS1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI2_SS2__SS2 IOMUX_MODE(MX31_PIN_CSPI2_SS2, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI3_MOSI__MOSI IOMUX_MODE(MX31_PIN_CSPI3_MOSI, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI3_MISO__MISO IOMUX_MODE(MX31_PIN_CSPI3_MISO, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI3_SCLK__SCLK IOMUX_MODE(MX31_PIN_CSPI3_SCLK, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI3_SPI_RDY__SPI_RDY IOMUX_MODE(MX31_PIN_CSPI3_SPI_RDY, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_BATT_LINE__OWIRE IOMUX_MODE(MX31_PIN_BATT_LINE, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CS4__CS4 IOMUX_MODE(MX31_PIN_CS4, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SD1_DATA3__SD1_DATA3 IOMUX_MODE(MX31_PIN_SD1_DATA3, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SD1_DATA2__SD1_DATA2 IOMUX_MODE(MX31_PIN_SD1_DATA2, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SD1_DATA1__SD1_DATA1 IOMUX_MODE(MX31_PIN_SD1_DATA1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SD1_DATA0__SD1_DATA0 IOMUX_MODE(MX31_PIN_SD1_DATA0, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SD1_CLK__SD1_CLK IOMUX_MODE(MX31_PIN_SD1_CLK, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SD1_CMD__SD1_CMD IOMUX_MODE(MX31_PIN_SD1_CMD, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_ATA_CS0__GPIO3_26 IOMUX_MODE(MX31_PIN_ATA_CS0, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_ATA_CS1__GPIO3_27 IOMUX_MODE(MX31_PIN_ATA_CS1, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_PC_PWRON__SD2_DATA3 IOMUX_MODE(MX31_PIN_PC_PWRON, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_PC_VS1__SD2_DATA2 IOMUX_MODE(MX31_PIN_PC_VS1, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_PC_READY__SD2_DATA1 IOMUX_MODE(MX31_PIN_PC_READY, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_PC_WAIT_B__SD2_DATA0 IOMUX_MODE(MX31_PIN_PC_WAIT_B, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_PC_CD2_B__SD2_CLK IOMUX_MODE(MX31_PIN_PC_CD2_B, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_PC_CD1_B__SD2_CMD IOMUX_MODE(MX31_PIN_PC_CD1_B, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_ATA_DIOR__GPIO3_28 IOMUX_MODE(MX31_PIN_ATA_DIOR, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_ATA_DIOW__GPIO3_29 IOMUX_MODE(MX31_PIN_ATA_DIOW, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_LD0__LD0 IOMUX_MODE(MX31_PIN_LD0, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD1__LD1 IOMUX_MODE(MX31_PIN_LD1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD2__LD2 IOMUX_MODE(MX31_PIN_LD2, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD3__LD3 IOMUX_MODE(MX31_PIN_LD3, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD4__LD4 IOMUX_MODE(MX31_PIN_LD4, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD5__LD5 IOMUX_MODE(MX31_PIN_LD5, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD6__LD6 IOMUX_MODE(MX31_PIN_LD6, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD7__LD7 IOMUX_MODE(MX31_PIN_LD7, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD8__LD8 IOMUX_MODE(MX31_PIN_LD8, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD9__LD9 IOMUX_MODE(MX31_PIN_LD9, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD10__LD10 IOMUX_MODE(MX31_PIN_LD10, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD11__LD11 IOMUX_MODE(MX31_PIN_LD11, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD12__LD12 IOMUX_MODE(MX31_PIN_LD12, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD13__LD13 IOMUX_MODE(MX31_PIN_LD13, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD14__LD14 IOMUX_MODE(MX31_PIN_LD14, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD15__LD15 IOMUX_MODE(MX31_PIN_LD15, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD16__LD16 IOMUX_MODE(MX31_PIN_LD16, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_LD17__LD17 IOMUX_MODE(MX31_PIN_LD17, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_VSYNC3__VSYNC3 IOMUX_MODE(MX31_PIN_VSYNC3, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_HSYNC__HSYNC IOMUX_MODE(MX31_PIN_HSYNC, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_FPSHIFT__FPSHIFT IOMUX_MODE(MX31_PIN_FPSHIFT, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_DRDY0__DRDY0 IOMUX_MODE(MX31_PIN_DRDY0, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_D3_REV__D3_REV IOMUX_MODE(MX31_PIN_D3_REV, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CONTRAST__CONTRAST IOMUX_MODE(MX31_PIN_CONTRAST, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_D3_SPL__D3_SPL IOMUX_MODE(MX31_PIN_D3_SPL, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_D3_CLS__D3_CLS IOMUX_MODE(MX31_PIN_D3_CLS, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_GPIO1_1__GPIO IOMUX_MODE(MX31_PIN_GPIO1_1, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_DCD_DTE1__I2C2_SDA IOMUX_MODE(MX31_PIN_DCD_DTE1, IOMUX_CONFIG_ALT2)
|
||||
#define MX31_PIN_RI_DTE1__I2C2_SCL IOMUX_MODE(MX31_PIN_RI_DTE1, IOMUX_CONFIG_ALT2)
|
||||
#define MX31_PIN_CSPI2_SS2__I2C3_SDA IOMUX_MODE(MX31_PIN_CSPI2_SS2, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI2_SCLK__I2C3_SCL IOMUX_MODE(MX31_PIN_CSPI2_SCLK, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSI_D4__CSI_D4 IOMUX_MODE(MX31_PIN_CSI_D4, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_D5__CSI_D5 IOMUX_MODE(MX31_PIN_CSI_D5, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_D6__CSI_D6 IOMUX_MODE(MX31_PIN_CSI_D6, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_D7__CSI_D7 IOMUX_MODE(MX31_PIN_CSI_D7, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_D8__CSI_D8 IOMUX_MODE(MX31_PIN_CSI_D8, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_D9__CSI_D9 IOMUX_MODE(MX31_PIN_CSI_D9, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_D10__CSI_D10 IOMUX_MODE(MX31_PIN_CSI_D10, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_D11__CSI_D11 IOMUX_MODE(MX31_PIN_CSI_D11, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_D12__CSI_D12 IOMUX_MODE(MX31_PIN_CSI_D12, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_D13__CSI_D13 IOMUX_MODE(MX31_PIN_CSI_D13, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_D14__CSI_D14 IOMUX_MODE(MX31_PIN_CSI_D14, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_D15__CSI_D15 IOMUX_MODE(MX31_PIN_CSI_D15, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_HSYNC__CSI_HSYNC IOMUX_MODE(MX31_PIN_CSI_HSYNC, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_MCLK__CSI_MCLK IOMUX_MODE(MX31_PIN_CSI_MCLK, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_PIXCLK__CSI_PIXCLK IOMUX_MODE(MX31_PIN_CSI_PIXCLK, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSI_VSYNC__CSI_VSYNC IOMUX_MODE(MX31_PIN_CSI_VSYNC, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_GPIO3_0__GPIO3_0 IOMUX_MODE(MX31_PIN_GPIO3_0, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_GPIO3_1__GPIO3_1 IOMUX_MODE(MX31_PIN_GPIO3_1, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_TXD2__GPIO1_28 IOMUX_MODE(MX31_PIN_TXD2, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_CSI_D4__GPIO3_4 IOMUX_MODE(MX31_PIN_CSI_D4, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_CSI_D5__GPIO3_5 IOMUX_MODE(MX31_PIN_CSI_D5, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_USBOTG_DATA0__USBOTG_DATA0 IOMUX_MODE(MX31_PIN_USBOTG_DATA0, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBOTG_DATA1__USBOTG_DATA1 IOMUX_MODE(MX31_PIN_USBOTG_DATA1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBOTG_DATA2__USBOTG_DATA2 IOMUX_MODE(MX31_PIN_USBOTG_DATA2, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBOTG_DATA3__USBOTG_DATA3 IOMUX_MODE(MX31_PIN_USBOTG_DATA3, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBOTG_DATA4__USBOTG_DATA4 IOMUX_MODE(MX31_PIN_USBOTG_DATA4, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBOTG_DATA5__USBOTG_DATA5 IOMUX_MODE(MX31_PIN_USBOTG_DATA5, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBOTG_DATA6__USBOTG_DATA6 IOMUX_MODE(MX31_PIN_USBOTG_DATA6, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBOTG_DATA7__USBOTG_DATA7 IOMUX_MODE(MX31_PIN_USBOTG_DATA7, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBOTG_CLK__USBOTG_CLK IOMUX_MODE(MX31_PIN_USBOTG_CLK, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBOTG_DIR__USBOTG_DIR IOMUX_MODE(MX31_PIN_USBOTG_DIR, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBOTG_NXT__USBOTG_NXT IOMUX_MODE(MX31_PIN_USBOTG_NXT, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBOTG_STP__USBOTG_STP IOMUX_MODE(MX31_PIN_USBOTG_STP, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_CSPI1_MOSI__USBH1_RXDM IOMUX_MODE(MX31_PIN_CSPI1_MOSI, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI1_MISO__USBH1_RXDP IOMUX_MODE(MX31_PIN_CSPI1_MISO, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI1_SS0__USBH1_TXDM IOMUX_MODE(MX31_PIN_CSPI1_SS0, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI1_SS1__USBH1_TXDP IOMUX_MODE(MX31_PIN_CSPI1_SS1, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI1_SS2__USBH1_RCV IOMUX_MODE(MX31_PIN_CSPI1_SS2, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI1_SCLK__USBH1_OEB IOMUX_MODE(MX31_PIN_CSPI1_SCLK, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_CSPI1_SPI_RDY__USBH1_FS IOMUX_MODE(MX31_PIN_CSPI1_SPI_RDY, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_SFS6__USBH1_SUSPEND IOMUX_MODE(MX31_PIN_SFS6, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_NFRE_B__GPIO1_11 IOMUX_MODE(MX31_PIN_NFRE_B, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_NFALE__GPIO1_12 IOMUX_MODE(MX31_PIN_NFALE, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_USBH2_DATA0__USBH2_DATA0 IOMUX_MODE(MX31_PIN_USBH2_DATA0, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBH2_DATA1__USBH2_DATA1 IOMUX_MODE(MX31_PIN_USBH2_DATA1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_STXD3__USBH2_DATA2 IOMUX_MODE(MX31_PIN_STXD3, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SRXD3__USBH2_DATA3 IOMUX_MODE(MX31_PIN_SRXD3, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SCK3__USBH2_DATA4 IOMUX_MODE(MX31_PIN_SCK3, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SFS3__USBH2_DATA5 IOMUX_MODE(MX31_PIN_SFS3, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_STXD6__USBH2_DATA6 IOMUX_MODE(MX31_PIN_STXD6, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SRXD6__USBH2_DATA7 IOMUX_MODE(MX31_PIN_SRXD6, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBH2_CLK__USBH2_CLK IOMUX_MODE(MX31_PIN_USBH2_CLK, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBH2_DIR__USBH2_DIR IOMUX_MODE(MX31_PIN_USBH2_DIR, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBH2_NXT__USBH2_NXT IOMUX_MODE(MX31_PIN_USBH2_NXT, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_USBH2_STP__USBH2_STP IOMUX_MODE(MX31_PIN_USBH2_STP, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SCK6__GPIO1_25 IOMUX_MODE(MX31_PIN_SCK6, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_USB_OC__GPIO1_30 IOMUX_MODE(MX31_PIN_USB_OC, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_I2C_DAT__I2C1_SDA IOMUX_MODE(MX31_PIN_I2C_DAT, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_I2C_CLK__I2C1_SCL IOMUX_MODE(MX31_PIN_I2C_CLK, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_GPIO1_0__GPIO1_0 IOMUX_MODE(MX31_PIN_GPIO1_0, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_SVEN0__GPIO2_0 IOMUX_MODE(MX31_PIN_SVEN0, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_STX0__GPIO2_1 IOMUX_MODE(MX31_PIN_STX0, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_SRX0__GPIO2_2 IOMUX_MODE(MX31_PIN_SRX0, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_SIMPD0__GPIO2_3 IOMUX_MODE(MX31_PIN_SIMPD0, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_DTR_DCE1__GPIO2_8 IOMUX_MODE(MX31_PIN_DTR_DCE1, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_DSR_DCE1__GPIO2_9 IOMUX_MODE(MX31_PIN_DSR_DCE1, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_RI_DCE1__GPIO2_10 IOMUX_MODE(MX31_PIN_RI_DCE1, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_DCD_DCE1__GPIO2_11 IOMUX_MODE(MX31_PIN_DCD_DCE1, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_STXD5__GPIO1_21 IOMUX_MODE(MX31_PIN_STXD5, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_SRXD5__GPIO1_22 IOMUX_MODE(MX31_PIN_SRXD5, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_GPIO1_3__GPIO1_3 IOMUX_MODE(MX31_PIN_GPIO1_3, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_CSPI2_SS1__CSPI3_SS1 IOMUX_MODE(MX31_PIN_CSPI2_SS1, IOMUX_CONFIG_ALT1)
|
||||
#define MX31_PIN_RTS1__GPIO2_6 IOMUX_MODE(MX31_PIN_RTS1, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_CTS1__GPIO2_7 IOMUX_MODE(MX31_PIN_CTS1, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_LCS0__GPIO3_23 IOMUX_MODE(MX31_PIN_LCS0, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_STXD4__STXD4 IOMUX_MODE(MX31_PIN_STXD4, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SRXD4__SRXD4 IOMUX_MODE(MX31_PIN_SRXD4, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SCK4__SCK4 IOMUX_MODE(MX31_PIN_SCK4, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SFS4__SFS4 IOMUX_MODE(MX31_PIN_SFS4, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_STXD5__STXD5 IOMUX_MODE(MX31_PIN_STXD5, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SRXD5__SRXD5 IOMUX_MODE(MX31_PIN_SRXD5, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SCK5__SCK5 IOMUX_MODE(MX31_PIN_SCK5, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_SFS5__SFS5 IOMUX_MODE(MX31_PIN_SFS5, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_ROW0_KEY_ROW0 IOMUX_MODE(MX31_PIN_KEY_ROW0, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_ROW1_KEY_ROW1 IOMUX_MODE(MX31_PIN_KEY_ROW1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_ROW2_KEY_ROW2 IOMUX_MODE(MX31_PIN_KEY_ROW2, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_ROW3_KEY_ROW3 IOMUX_MODE(MX31_PIN_KEY_ROW3, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_ROW4_KEY_ROW4 IOMUX_MODE(MX31_PIN_KEY_ROW4, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_ROW4_GPIO IOMUX_MODE(MX31_PIN_KEY_ROW4, IOMUX_CONFIG_GPIO)
|
||||
#define MX31_PIN_KEY_ROW5_KEY_ROW5 IOMUX_MODE(MX31_PIN_KEY_ROW5, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_ROW6_KEY_ROW6 IOMUX_MODE(MX31_PIN_KEY_ROW6, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_ROW7_KEY_ROW7 IOMUX_MODE(MX31_PIN_KEY_ROW7, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_COL0_KEY_COL0 IOMUX_MODE(MX31_PIN_KEY_COL0, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_COL1_KEY_COL1 IOMUX_MODE(MX31_PIN_KEY_COL1, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_COL2_KEY_COL2 IOMUX_MODE(MX31_PIN_KEY_COL2, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_COL3_KEY_COL3 IOMUX_MODE(MX31_PIN_KEY_COL3, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_COL4_KEY_COL4 IOMUX_MODE(MX31_PIN_KEY_COL4, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_COL5_KEY_COL5 IOMUX_MODE(MX31_PIN_KEY_COL5, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_COL6_KEY_COL6 IOMUX_MODE(MX31_PIN_KEY_COL6, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_KEY_COL7_KEY_COL7 IOMUX_MODE(MX31_PIN_KEY_COL7, IOMUX_CONFIG_FUNC)
|
||||
#define MX31_PIN_WATCHDOG_RST__WATCHDOG_RST IOMUX_MODE(MX31_PIN_WATCHDOG_RST, IOMUX_CONFIG_FUNC)
|
||||
|
||||
|
||||
/*
|
||||
* XXX: The SS0, SS1, SS2, SS3 lines of spi3 are multiplexed with cspi2_ss0,
|
||||
* cspi2_ss1, cspi1_ss0 cspi1_ss1
|
||||
*/
|
||||
|
||||
/*
|
||||
* This function configures the pad value for a IOMUX pin.
|
||||
*/
|
||||
void mxc_iomux_set_pad(enum iomux_pins, u32);
|
||||
|
||||
#endif /* ifndef __MACH_IOMUX_MX3_H__ */
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,174 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* arch/arm/plat-mxc/iomux-v1.c
|
||||
*
|
||||
* Copyright (C) 2004 Sascha Hauer, Synertronixx GmbH
|
||||
* Copyright (C) 2009 Uwe Kleine-Koenig, Pengutronix
|
||||
*
|
||||
* Common code for i.MX1, i.MX21 and i.MX27
|
||||
*/
|
||||
|
||||
#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 "hardware.h"
|
||||
#include "iomux-v1.h"
|
||||
|
||||
static void __iomem *imx_iomuxv1_baseaddr;
|
||||
static unsigned imx_iomuxv1_numports;
|
||||
|
||||
static inline unsigned long imx_iomuxv1_readl(unsigned offset)
|
||||
{
|
||||
return imx_readl(imx_iomuxv1_baseaddr + offset);
|
||||
}
|
||||
|
||||
static inline void imx_iomuxv1_writel(unsigned long val, unsigned offset)
|
||||
{
|
||||
imx_writel(val, imx_iomuxv1_baseaddr + offset);
|
||||
}
|
||||
|
||||
static inline void imx_iomuxv1_rmwl(unsigned offset,
|
||||
unsigned long mask, unsigned long value)
|
||||
{
|
||||
unsigned long reg = imx_iomuxv1_readl(offset);
|
||||
|
||||
reg &= ~mask;
|
||||
reg |= value;
|
||||
|
||||
imx_iomuxv1_writel(reg, offset);
|
||||
}
|
||||
|
||||
static inline void imx_iomuxv1_set_puen(
|
||||
unsigned int port, unsigned int pin, int on)
|
||||
{
|
||||
unsigned long mask = 1 << pin;
|
||||
|
||||
imx_iomuxv1_rmwl(MXC_PUEN(port), mask, on ? mask : 0);
|
||||
}
|
||||
|
||||
static inline void imx_iomuxv1_set_ddir(
|
||||
unsigned int port, unsigned int pin, int out)
|
||||
{
|
||||
unsigned long mask = 1 << pin;
|
||||
|
||||
imx_iomuxv1_rmwl(MXC_DDIR(port), mask, out ? mask : 0);
|
||||
}
|
||||
|
||||
static inline void imx_iomuxv1_set_gpr(
|
||||
unsigned int port, unsigned int pin, int af)
|
||||
{
|
||||
unsigned long mask = 1 << pin;
|
||||
|
||||
imx_iomuxv1_rmwl(MXC_GPR(port), mask, af ? mask : 0);
|
||||
}
|
||||
|
||||
static inline void imx_iomuxv1_set_gius(
|
||||
unsigned int port, unsigned int pin, int inuse)
|
||||
{
|
||||
unsigned long mask = 1 << pin;
|
||||
|
||||
imx_iomuxv1_rmwl(MXC_GIUS(port), mask, inuse ? mask : 0);
|
||||
}
|
||||
|
||||
static inline void imx_iomuxv1_set_ocr(
|
||||
unsigned int port, unsigned int pin, unsigned int ocr)
|
||||
{
|
||||
unsigned long shift = (pin & 0xf) << 1;
|
||||
unsigned long mask = 3 << shift;
|
||||
unsigned long value = ocr << shift;
|
||||
unsigned long offset = pin < 16 ? MXC_OCR1(port) : MXC_OCR2(port);
|
||||
|
||||
imx_iomuxv1_rmwl(offset, mask, value);
|
||||
}
|
||||
|
||||
static inline void imx_iomuxv1_set_iconfa(
|
||||
unsigned int port, unsigned int pin, unsigned int aout)
|
||||
{
|
||||
unsigned long shift = (pin & 0xf) << 1;
|
||||
unsigned long mask = 3 << shift;
|
||||
unsigned long value = aout << shift;
|
||||
unsigned long offset = pin < 16 ? MXC_ICONFA1(port) : MXC_ICONFA2(port);
|
||||
|
||||
imx_iomuxv1_rmwl(offset, mask, value);
|
||||
}
|
||||
|
||||
static inline void imx_iomuxv1_set_iconfb(
|
||||
unsigned int port, unsigned int pin, unsigned int bout)
|
||||
{
|
||||
unsigned long shift = (pin & 0xf) << 1;
|
||||
unsigned long mask = 3 << shift;
|
||||
unsigned long value = bout << shift;
|
||||
unsigned long offset = pin < 16 ? MXC_ICONFB1(port) : MXC_ICONFB2(port);
|
||||
|
||||
imx_iomuxv1_rmwl(offset, mask, value);
|
||||
}
|
||||
|
||||
int mxc_gpio_mode(int gpio_mode)
|
||||
{
|
||||
unsigned int pin = gpio_mode & GPIO_PIN_MASK;
|
||||
unsigned int port = (gpio_mode & GPIO_PORT_MASK) >> GPIO_PORT_SHIFT;
|
||||
unsigned int ocr = (gpio_mode & GPIO_OCR_MASK) >> GPIO_OCR_SHIFT;
|
||||
unsigned int aout = (gpio_mode >> GPIO_AOUT_SHIFT) & 3;
|
||||
unsigned int bout = (gpio_mode >> GPIO_BOUT_SHIFT) & 3;
|
||||
|
||||
if (port >= imx_iomuxv1_numports)
|
||||
return -EINVAL;
|
||||
|
||||
/* Pullup enable */
|
||||
imx_iomuxv1_set_puen(port, pin, gpio_mode & GPIO_PUEN);
|
||||
|
||||
/* Data direction */
|
||||
imx_iomuxv1_set_ddir(port, pin, gpio_mode & GPIO_OUT);
|
||||
|
||||
/* Primary / alternate function */
|
||||
imx_iomuxv1_set_gpr(port, pin, gpio_mode & GPIO_AF);
|
||||
|
||||
/* use as gpio? */
|
||||
imx_iomuxv1_set_gius(port, pin, !(gpio_mode & (GPIO_PF | GPIO_AF)));
|
||||
|
||||
imx_iomuxv1_set_ocr(port, pin, ocr);
|
||||
|
||||
imx_iomuxv1_set_iconfa(port, pin, aout);
|
||||
|
||||
imx_iomuxv1_set_iconfb(port, pin, bout);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int imx_iomuxv1_setup_multiple(const int *list, unsigned count)
|
||||
{
|
||||
size_t i;
|
||||
int ret = 0;
|
||||
|
||||
for (i = 0; i < count; ++i) {
|
||||
ret = mxc_gpio_mode(list[i]);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count,
|
||||
const char *label)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = imx_iomuxv1_setup_multiple(pin_list, count);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int __init imx_iomuxv1_init(void __iomem *base, int numports)
|
||||
{
|
||||
imx_iomuxv1_baseaddr = base;
|
||||
imx_iomuxv1_numports = numports;
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,81 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de>
|
||||
* Copyright (C) 2009 by Holger Schurig <hs4233@mail.mn-solutions.de>
|
||||
*/
|
||||
#ifndef __MACH_IOMUX_V1_H__
|
||||
#define __MACH_IOMUX_V1_H__
|
||||
|
||||
/*
|
||||
* GPIO Module and I/O Multiplexer
|
||||
* x = 0..3 for reg_A, reg_B, reg_C, reg_D
|
||||
*/
|
||||
#define MXC_DDIR(x) (0x00 + ((x) << 8))
|
||||
#define MXC_OCR1(x) (0x04 + ((x) << 8))
|
||||
#define MXC_OCR2(x) (0x08 + ((x) << 8))
|
||||
#define MXC_ICONFA1(x) (0x0c + ((x) << 8))
|
||||
#define MXC_ICONFA2(x) (0x10 + ((x) << 8))
|
||||
#define MXC_ICONFB1(x) (0x14 + ((x) << 8))
|
||||
#define MXC_ICONFB2(x) (0x18 + ((x) << 8))
|
||||
#define MXC_DR(x) (0x1c + ((x) << 8))
|
||||
#define MXC_GIUS(x) (0x20 + ((x) << 8))
|
||||
#define MXC_SSR(x) (0x24 + ((x) << 8))
|
||||
#define MXC_ICR1(x) (0x28 + ((x) << 8))
|
||||
#define MXC_ICR2(x) (0x2c + ((x) << 8))
|
||||
#define MXC_IMR(x) (0x30 + ((x) << 8))
|
||||
#define MXC_ISR(x) (0x34 + ((x) << 8))
|
||||
#define MXC_GPR(x) (0x38 + ((x) << 8))
|
||||
#define MXC_SWR(x) (0x3c + ((x) << 8))
|
||||
#define MXC_PUEN(x) (0x40 + ((x) << 8))
|
||||
|
||||
#define MX1_NUM_GPIO_PORT 4
|
||||
#define MX21_NUM_GPIO_PORT 6
|
||||
#define MX27_NUM_GPIO_PORT 6
|
||||
|
||||
#define GPIO_PIN_MASK 0x1f
|
||||
|
||||
#define GPIO_PORT_SHIFT 5
|
||||
#define GPIO_PORT_MASK (0x7 << GPIO_PORT_SHIFT)
|
||||
|
||||
#define GPIO_PORTA (0 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTB (1 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTC (2 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTD (3 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTE (4 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTF (5 << GPIO_PORT_SHIFT)
|
||||
|
||||
#define GPIO_OUT (1 << 8)
|
||||
#define GPIO_IN (0 << 8)
|
||||
#define GPIO_PUEN (1 << 9)
|
||||
|
||||
#define GPIO_PF (1 << 10)
|
||||
#define GPIO_AF (1 << 11)
|
||||
|
||||
#define GPIO_OCR_SHIFT 12
|
||||
#define GPIO_OCR_MASK (3 << GPIO_OCR_SHIFT)
|
||||
#define GPIO_AIN (0 << GPIO_OCR_SHIFT)
|
||||
#define GPIO_BIN (1 << GPIO_OCR_SHIFT)
|
||||
#define GPIO_CIN (2 << GPIO_OCR_SHIFT)
|
||||
#define GPIO_GPIO (3 << GPIO_OCR_SHIFT)
|
||||
|
||||
#define GPIO_AOUT_SHIFT 14
|
||||
#define GPIO_AOUT_MASK (3 << GPIO_AOUT_SHIFT)
|
||||
#define GPIO_AOUT (0 << GPIO_AOUT_SHIFT)
|
||||
#define GPIO_AOUT_ISR (1 << GPIO_AOUT_SHIFT)
|
||||
#define GPIO_AOUT_0 (2 << GPIO_AOUT_SHIFT)
|
||||
#define GPIO_AOUT_1 (3 << GPIO_AOUT_SHIFT)
|
||||
|
||||
#define GPIO_BOUT_SHIFT 16
|
||||
#define GPIO_BOUT_MASK (3 << GPIO_BOUT_SHIFT)
|
||||
#define GPIO_BOUT (0 << GPIO_BOUT_SHIFT)
|
||||
#define GPIO_BOUT_ISR (1 << GPIO_BOUT_SHIFT)
|
||||
#define GPIO_BOUT_0 (2 << GPIO_BOUT_SHIFT)
|
||||
#define GPIO_BOUT_1 (3 << GPIO_BOUT_SHIFT)
|
||||
|
||||
extern int mxc_gpio_mode(int gpio_mode);
|
||||
extern int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count,
|
||||
const char *label);
|
||||
|
||||
extern int imx_iomuxv1_init(void __iomem *base, int numports);
|
||||
|
||||
#endif /* __MACH_IOMUX_V1_H__ */
|
|
@ -1,65 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright 2004-2006 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>
|
||||
*/
|
||||
#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 "hardware.h"
|
||||
#include "iomux-v3.h"
|
||||
|
||||
static void __iomem *base;
|
||||
|
||||
/*
|
||||
* configures a single pad in the iomuxer
|
||||
*/
|
||||
int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
|
||||
{
|
||||
u32 mux_ctrl_ofs = (pad & MUX_CTRL_OFS_MASK) >> MUX_CTRL_OFS_SHIFT;
|
||||
u32 mux_mode = (pad & MUX_MODE_MASK) >> MUX_MODE_SHIFT;
|
||||
u32 sel_input_ofs = (pad & MUX_SEL_INPUT_OFS_MASK) >> MUX_SEL_INPUT_OFS_SHIFT;
|
||||
u32 sel_input = (pad & MUX_SEL_INPUT_MASK) >> MUX_SEL_INPUT_SHIFT;
|
||||
u32 pad_ctrl_ofs = (pad & MUX_PAD_CTRL_OFS_MASK) >> MUX_PAD_CTRL_OFS_SHIFT;
|
||||
u32 pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT;
|
||||
|
||||
if (mux_ctrl_ofs)
|
||||
imx_writel(mux_mode, base + mux_ctrl_ofs);
|
||||
|
||||
if (sel_input_ofs)
|
||||
imx_writel(sel_input, base + sel_input_ofs);
|
||||
|
||||
if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs)
|
||||
imx_writel(pad_ctrl, base + pad_ctrl_ofs);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mxc_iomux_v3_setup_multiple_pads(const iomux_v3_cfg_t *pad_list,
|
||||
unsigned count)
|
||||
{
|
||||
const iomux_v3_cfg_t *p = pad_list;
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
ret = mxc_iomux_v3_setup_pad(*p);
|
||||
if (ret)
|
||||
return ret;
|
||||
p++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mxc_iomux_v3_init(void __iomem *iomux_v3_base)
|
||||
{
|
||||
base = iomux_v3_base;
|
||||
}
|
|
@ -1,130 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH,
|
||||
* <armlinux@phytec.de>
|
||||
*/
|
||||
|
||||
#ifndef __MACH_IOMUX_V3_H__
|
||||
#define __MACH_IOMUX_V3_H__
|
||||
|
||||
/*
|
||||
* build IOMUX_PAD structure
|
||||
*
|
||||
* This iomux scheme is based around pads, which are the physical balls
|
||||
* on the processor.
|
||||
*
|
||||
* - Each pad has a pad control register (IOMUXC_SW_PAD_CTRL_x) which controls
|
||||
* things like driving strength and pullup/pulldown.
|
||||
* - Each pad can have but not necessarily does have an output routing register
|
||||
* (IOMUXC_SW_MUX_CTL_PAD_x).
|
||||
* - Each pad can have but not necessarily does have an input routing register
|
||||
* (IOMUXC_x_SELECT_INPUT)
|
||||
*
|
||||
* The three register sets do not have a fixed offset to each other,
|
||||
* hence we order this table by pad control registers (which all pads
|
||||
* have) and put the optional i/o routing registers into additional
|
||||
* fields.
|
||||
*
|
||||
* The naming convention for the pad modes is MX35_PAD_<padname>__<padmode>
|
||||
* If <padname> or <padmode> refers to a GPIO, it is named
|
||||
* GPIO_<unit>_<num>
|
||||
*
|
||||
* IOMUX/PAD Bit field definitions
|
||||
*
|
||||
* MUX_CTRL_OFS: 0..11 (12)
|
||||
* PAD_CTRL_OFS: 12..23 (12)
|
||||
* SEL_INPUT_OFS: 24..35 (12)
|
||||
* MUX_MODE + SION: 36..40 (5)
|
||||
* PAD_CTRL + NO_PAD_CTRL: 41..57 (17)
|
||||
* SEL_INP: 58..61 (4)
|
||||
* reserved: 63 (1)
|
||||
*/
|
||||
|
||||
typedef u64 iomux_v3_cfg_t;
|
||||
|
||||
#define MUX_CTRL_OFS_SHIFT 0
|
||||
#define MUX_CTRL_OFS_MASK ((iomux_v3_cfg_t)0xfff << MUX_CTRL_OFS_SHIFT)
|
||||
#define MUX_PAD_CTRL_OFS_SHIFT 12
|
||||
#define MUX_PAD_CTRL_OFS_MASK ((iomux_v3_cfg_t)0xfff << MUX_PAD_CTRL_OFS_SHIFT)
|
||||
#define MUX_SEL_INPUT_OFS_SHIFT 24
|
||||
#define MUX_SEL_INPUT_OFS_MASK ((iomux_v3_cfg_t)0xfff << MUX_SEL_INPUT_OFS_SHIFT)
|
||||
|
||||
#define MUX_MODE_SHIFT 36
|
||||
#define MUX_MODE_MASK ((iomux_v3_cfg_t)0x1f << MUX_MODE_SHIFT)
|
||||
#define MUX_PAD_CTRL_SHIFT 41
|
||||
#define MUX_PAD_CTRL_MASK ((iomux_v3_cfg_t)0x1ffff << MUX_PAD_CTRL_SHIFT)
|
||||
#define MUX_SEL_INPUT_SHIFT 58
|
||||
#define MUX_SEL_INPUT_MASK ((iomux_v3_cfg_t)0xf << MUX_SEL_INPUT_SHIFT)
|
||||
|
||||
#define MUX_PAD_CTRL(x) ((iomux_v3_cfg_t)(x) << MUX_PAD_CTRL_SHIFT)
|
||||
|
||||
#define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _sel_input_ofs, \
|
||||
_sel_input, _pad_ctrl) \
|
||||
(((iomux_v3_cfg_t)(_mux_ctrl_ofs) << MUX_CTRL_OFS_SHIFT) | \
|
||||
((iomux_v3_cfg_t)(_mux_mode) << MUX_MODE_SHIFT) | \
|
||||
((iomux_v3_cfg_t)(_pad_ctrl_ofs) << MUX_PAD_CTRL_OFS_SHIFT) | \
|
||||
((iomux_v3_cfg_t)(_pad_ctrl) << MUX_PAD_CTRL_SHIFT) | \
|
||||
((iomux_v3_cfg_t)(_sel_input_ofs) << MUX_SEL_INPUT_OFS_SHIFT) | \
|
||||
((iomux_v3_cfg_t)(_sel_input) << MUX_SEL_INPUT_SHIFT))
|
||||
|
||||
#define NEW_PAD_CTRL(cfg, pad) (((cfg) & ~MUX_PAD_CTRL_MASK) | MUX_PAD_CTRL(pad))
|
||||
/*
|
||||
* Use to set PAD control
|
||||
*/
|
||||
|
||||
#define NO_PAD_CTRL (1 << 16)
|
||||
#define PAD_CTL_DVS (1 << 13)
|
||||
#define PAD_CTL_HYS (1 << 8)
|
||||
|
||||
#define PAD_CTL_PKE (1 << 7)
|
||||
#define PAD_CTL_PUE (1 << 6 | PAD_CTL_PKE)
|
||||
#define PAD_CTL_PUS_100K_DOWN (0 << 4 | PAD_CTL_PUE)
|
||||
#define PAD_CTL_PUS_47K_UP (1 << 4 | PAD_CTL_PUE)
|
||||
#define PAD_CTL_PUS_100K_UP (2 << 4 | PAD_CTL_PUE)
|
||||
#define PAD_CTL_PUS_22K_UP (3 << 4 | PAD_CTL_PUE)
|
||||
|
||||
#define PAD_CTL_ODE (1 << 3)
|
||||
|
||||
#define PAD_CTL_DSE_LOW (0 << 1)
|
||||
#define PAD_CTL_DSE_MED (1 << 1)
|
||||
#define PAD_CTL_DSE_HIGH (2 << 1)
|
||||
#define PAD_CTL_DSE_MAX (3 << 1)
|
||||
|
||||
#define PAD_CTL_SRE_FAST (1 << 0)
|
||||
#define PAD_CTL_SRE_SLOW (0 << 0)
|
||||
|
||||
#define IOMUX_CONFIG_SION (0x1 << 4)
|
||||
|
||||
#define MX51_NUM_GPIO_PORT 4
|
||||
|
||||
#define GPIO_PIN_MASK 0x1f
|
||||
|
||||
#define GPIO_PORT_SHIFT 5
|
||||
#define GPIO_PORT_MASK (0x7 << GPIO_PORT_SHIFT)
|
||||
|
||||
#define GPIO_PORTA (0 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTB (1 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTC (2 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTD (3 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTE (4 << GPIO_PORT_SHIFT)
|
||||
#define GPIO_PORTF (5 << GPIO_PORT_SHIFT)
|
||||
|
||||
/*
|
||||
* setups a single pad in the iomuxer
|
||||
*/
|
||||
int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad);
|
||||
|
||||
/*
|
||||
* setups multiple pads
|
||||
* convenient way to call the above function with tables
|
||||
*/
|
||||
int mxc_iomux_v3_setup_multiple_pads(const iomux_v3_cfg_t *pad_list,
|
||||
unsigned count);
|
||||
|
||||
/*
|
||||
* Initialise the iomux controller
|
||||
*/
|
||||
void mxc_iomux_v3_init(void __iomem *iomux_v3_base);
|
||||
|
||||
#endif /* __MACH_IOMUX_V3_H__*/
|
||||
|
|
@ -1,562 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* armadillo5x0.c
|
||||
*
|
||||
* Copyright 2009 Alberto Panizzo <maramaopercheseimorto@gmail.com>
|
||||
* updates in http://alberdroid.blogspot.com/
|
||||
*
|
||||
* Based on Atmark Techno, Inc. armadillo 500 BSP 2008
|
||||
* Based on mx31ads.c and pcm037.c Great Work!
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/memory.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "crmregs-imx3.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
static int armadillo5x0_pins[] = {
|
||||
/* UART1 */
|
||||
MX31_PIN_CTS1__CTS1,
|
||||
MX31_PIN_RTS1__RTS1,
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1,
|
||||
/* UART2 */
|
||||
MX31_PIN_CTS2__CTS2,
|
||||
MX31_PIN_RTS2__RTS2,
|
||||
MX31_PIN_TXD2__TXD2,
|
||||
MX31_PIN_RXD2__RXD2,
|
||||
/* LAN9118_IRQ */
|
||||
IOMUX_MODE(MX31_PIN_GPIO1_0, IOMUX_CONFIG_GPIO),
|
||||
/* SDHC1 */
|
||||
MX31_PIN_SD1_DATA3__SD1_DATA3,
|
||||
MX31_PIN_SD1_DATA2__SD1_DATA2,
|
||||
MX31_PIN_SD1_DATA1__SD1_DATA1,
|
||||
MX31_PIN_SD1_DATA0__SD1_DATA0,
|
||||
MX31_PIN_SD1_CLK__SD1_CLK,
|
||||
MX31_PIN_SD1_CMD__SD1_CMD,
|
||||
/* Framebuffer */
|
||||
MX31_PIN_LD0__LD0,
|
||||
MX31_PIN_LD1__LD1,
|
||||
MX31_PIN_LD2__LD2,
|
||||
MX31_PIN_LD3__LD3,
|
||||
MX31_PIN_LD4__LD4,
|
||||
MX31_PIN_LD5__LD5,
|
||||
MX31_PIN_LD6__LD6,
|
||||
MX31_PIN_LD7__LD7,
|
||||
MX31_PIN_LD8__LD8,
|
||||
MX31_PIN_LD9__LD9,
|
||||
MX31_PIN_LD10__LD10,
|
||||
MX31_PIN_LD11__LD11,
|
||||
MX31_PIN_LD12__LD12,
|
||||
MX31_PIN_LD13__LD13,
|
||||
MX31_PIN_LD14__LD14,
|
||||
MX31_PIN_LD15__LD15,
|
||||
MX31_PIN_LD16__LD16,
|
||||
MX31_PIN_LD17__LD17,
|
||||
MX31_PIN_VSYNC3__VSYNC3,
|
||||
MX31_PIN_HSYNC__HSYNC,
|
||||
MX31_PIN_FPSHIFT__FPSHIFT,
|
||||
MX31_PIN_DRDY0__DRDY0,
|
||||
IOMUX_MODE(MX31_PIN_LCS1, IOMUX_CONFIG_GPIO), /*ADV7125_PSAVE*/
|
||||
/* I2C2 */
|
||||
MX31_PIN_CSPI2_MOSI__SCL,
|
||||
MX31_PIN_CSPI2_MISO__SDA,
|
||||
/* OTG */
|
||||
MX31_PIN_USBOTG_DATA0__USBOTG_DATA0,
|
||||
MX31_PIN_USBOTG_DATA1__USBOTG_DATA1,
|
||||
MX31_PIN_USBOTG_DATA2__USBOTG_DATA2,
|
||||
MX31_PIN_USBOTG_DATA3__USBOTG_DATA3,
|
||||
MX31_PIN_USBOTG_DATA4__USBOTG_DATA4,
|
||||
MX31_PIN_USBOTG_DATA5__USBOTG_DATA5,
|
||||
MX31_PIN_USBOTG_DATA6__USBOTG_DATA6,
|
||||
MX31_PIN_USBOTG_DATA7__USBOTG_DATA7,
|
||||
MX31_PIN_USBOTG_CLK__USBOTG_CLK,
|
||||
MX31_PIN_USBOTG_DIR__USBOTG_DIR,
|
||||
MX31_PIN_USBOTG_NXT__USBOTG_NXT,
|
||||
MX31_PIN_USBOTG_STP__USBOTG_STP,
|
||||
/* USB host 2 */
|
||||
IOMUX_MODE(MX31_PIN_USBH2_CLK, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_DIR, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_NXT, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_STP, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_DATA0, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_DATA1, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_STXD3, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_SRXD3, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_SCK3, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_SFS3, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_STXD6, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_SRXD6, IOMUX_CONFIG_FUNC),
|
||||
};
|
||||
|
||||
/* USB */
|
||||
|
||||
#define OTG_RESET IOMUX_TO_GPIO(MX31_PIN_STXD4)
|
||||
#define USBH2_RESET IOMUX_TO_GPIO(MX31_PIN_SCK6)
|
||||
#define USBH2_CS IOMUX_TO_GPIO(MX31_PIN_GPIO1_3)
|
||||
|
||||
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||
|
||||
static int usbotg_init(struct platform_device *pdev)
|
||||
{
|
||||
int err;
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA2, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA4, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA5, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA7, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_CLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DIR, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_NXT, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_STP, USB_PAD_CFG);
|
||||
|
||||
/* Chip already enabled by hardware */
|
||||
/* OTG phy reset*/
|
||||
err = gpio_request(OTG_RESET, "USB-OTG-RESET");
|
||||
if (err) {
|
||||
pr_err("Failed to request the usb otg reset gpio\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
err = gpio_direction_output(OTG_RESET, 1/*HIGH*/);
|
||||
if (err) {
|
||||
pr_err("Failed to reset the usb otg phy\n");
|
||||
goto otg_free_reset;
|
||||
}
|
||||
|
||||
gpio_set_value(OTG_RESET, 0/*LOW*/);
|
||||
mdelay(5);
|
||||
gpio_set_value(OTG_RESET, 1/*HIGH*/);
|
||||
mdelay(10);
|
||||
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED |
|
||||
MXC_EHCI_INTERFACE_DIFF_UNI);
|
||||
|
||||
otg_free_reset:
|
||||
gpio_free(OTG_RESET);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int usbh2_init(struct platform_device *pdev)
|
||||
{
|
||||
int err;
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_CLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DIR, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_NXT, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_STP, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SFS3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SCK3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD3, USB_PAD_CFG);
|
||||
|
||||
mxc_iomux_set_gpr(MUX_PGP_UH2, true);
|
||||
|
||||
|
||||
/* Enable the chip */
|
||||
err = gpio_request(USBH2_CS, "USB-H2-CS");
|
||||
if (err) {
|
||||
pr_err("Failed to request the usb host 2 CS gpio\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
err = gpio_direction_output(USBH2_CS, 0/*Enabled*/);
|
||||
if (err) {
|
||||
pr_err("Failed to drive the usb host 2 CS gpio\n");
|
||||
goto h2_free_cs;
|
||||
}
|
||||
|
||||
/* H2 phy reset*/
|
||||
err = gpio_request(USBH2_RESET, "USB-H2-RESET");
|
||||
if (err) {
|
||||
pr_err("Failed to request the usb host 2 reset gpio\n");
|
||||
goto h2_free_cs;
|
||||
}
|
||||
|
||||
err = gpio_direction_output(USBH2_RESET, 1/*HIGH*/);
|
||||
if (err) {
|
||||
pr_err("Failed to reset the usb host 2 phy\n");
|
||||
goto h2_free_reset;
|
||||
}
|
||||
|
||||
gpio_set_value(USBH2_RESET, 0/*LOW*/);
|
||||
mdelay(5);
|
||||
gpio_set_value(USBH2_RESET, 1/*HIGH*/);
|
||||
mdelay(10);
|
||||
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED |
|
||||
MXC_EHCI_INTERFACE_DIFF_UNI);
|
||||
|
||||
h2_free_reset:
|
||||
gpio_free(USBH2_RESET);
|
||||
h2_free_cs:
|
||||
gpio_free(USBH2_CS);
|
||||
return err;
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data usbotg_pdata __initdata = {
|
||||
.init = usbotg_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||
};
|
||||
|
||||
static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
|
||||
.init = usbh2_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||
};
|
||||
|
||||
/* RTC over I2C*/
|
||||
#define ARMADILLO5X0_RTC_GPIO IOMUX_TO_GPIO(MX31_PIN_SRXD4)
|
||||
|
||||
static struct i2c_board_info armadillo5x0_i2c_rtc = {
|
||||
I2C_BOARD_INFO("s35390a", 0x30),
|
||||
};
|
||||
|
||||
/* GPIO BUTTONS */
|
||||
static struct gpio_keys_button armadillo5x0_buttons[] = {
|
||||
{
|
||||
.code = KEY_ENTER, /*28*/
|
||||
.gpio = IOMUX_TO_GPIO(MX31_PIN_SCLK0),
|
||||
.active_low = 1,
|
||||
.desc = "menu",
|
||||
.wakeup = 1,
|
||||
}, {
|
||||
.code = KEY_BACK, /*158*/
|
||||
.gpio = IOMUX_TO_GPIO(MX31_PIN_SRST0),
|
||||
.active_low = 1,
|
||||
.desc = "back",
|
||||
.wakeup = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static const struct gpio_keys_platform_data
|
||||
armadillo5x0_button_data __initconst = {
|
||||
.buttons = armadillo5x0_buttons,
|
||||
.nbuttons = ARRAY_SIZE(armadillo5x0_buttons),
|
||||
};
|
||||
|
||||
/*
|
||||
* NAND Flash
|
||||
*/
|
||||
static const struct mxc_nand_platform_data
|
||||
armadillo5x0_nand_board_info __initconst = {
|
||||
.width = 1,
|
||||
.hw_ecc = 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* MTD NOR Flash
|
||||
*/
|
||||
static struct mtd_partition armadillo5x0_nor_flash_partitions[] = {
|
||||
{
|
||||
.name = "nor.bootloader",
|
||||
.offset = 0x00000000,
|
||||
.size = 4*32*1024,
|
||||
}, {
|
||||
.name = "nor.kernel",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 16*128*1024,
|
||||
}, {
|
||||
.name = "nor.userland",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 110*128*1024,
|
||||
}, {
|
||||
.name = "nor.config",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 1*128*1024,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct physmap_flash_data
|
||||
armadillo5x0_nor_flash_pdata __initconst = {
|
||||
.width = 2,
|
||||
.parts = armadillo5x0_nor_flash_partitions,
|
||||
.nr_parts = ARRAY_SIZE(armadillo5x0_nor_flash_partitions),
|
||||
};
|
||||
|
||||
static const struct resource armadillo5x0_nor_flash_resource __initconst = {
|
||||
.flags = IORESOURCE_MEM,
|
||||
.start = MX31_CS0_BASE_ADDR,
|
||||
.end = MX31_CS0_BASE_ADDR + SZ_64M - 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* FB support
|
||||
*/
|
||||
static const struct fb_videomode fb_modedb[] = {
|
||||
{ /* 640x480 @ 60 Hz */
|
||||
.name = "CRT-VGA",
|
||||
.refresh = 60,
|
||||
.xres = 640,
|
||||
.yres = 480,
|
||||
.pixclock = 39721,
|
||||
.left_margin = 35,
|
||||
.right_margin = 115,
|
||||
.upper_margin = 43,
|
||||
.lower_margin = 1,
|
||||
.hsync_len = 10,
|
||||
.vsync_len = 1,
|
||||
.sync = FB_SYNC_OE_ACT_HIGH,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
}, {/* 800x600 @ 56 Hz */
|
||||
.name = "CRT-SVGA",
|
||||
.refresh = 56,
|
||||
.xres = 800,
|
||||
.yres = 600,
|
||||
.pixclock = 30000,
|
||||
.left_margin = 30,
|
||||
.right_margin = 108,
|
||||
.upper_margin = 13,
|
||||
.lower_margin = 10,
|
||||
.hsync_len = 10,
|
||||
.vsync_len = 1,
|
||||
.sync = FB_SYNC_OE_ACT_HIGH | FB_SYNC_HOR_HIGH_ACT |
|
||||
FB_SYNC_VERT_HIGH_ACT,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct mx3fb_platform_data mx3fb_pdata __initdata = {
|
||||
.name = "CRT-VGA",
|
||||
.mode = fb_modedb,
|
||||
.num_modes = ARRAY_SIZE(fb_modedb),
|
||||
};
|
||||
|
||||
/*
|
||||
* SDHC 1
|
||||
* MMC support
|
||||
*/
|
||||
static int armadillo5x0_sdhc1_get_ro(struct device *dev)
|
||||
{
|
||||
return gpio_get_value(IOMUX_TO_GPIO(MX31_PIN_ATA_RESET_B));
|
||||
}
|
||||
|
||||
static int armadillo5x0_sdhc1_init(struct device *dev,
|
||||
irq_handler_t detect_irq, void *data)
|
||||
{
|
||||
int ret;
|
||||
int gpio_det, gpio_wp;
|
||||
|
||||
gpio_det = IOMUX_TO_GPIO(MX31_PIN_ATA_DMACK);
|
||||
gpio_wp = IOMUX_TO_GPIO(MX31_PIN_ATA_RESET_B);
|
||||
|
||||
ret = gpio_request(gpio_det, "sdhc-card-detect");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
gpio_direction_input(gpio_det);
|
||||
|
||||
ret = gpio_request(gpio_wp, "sdhc-write-protect");
|
||||
if (ret)
|
||||
goto err_gpio_free;
|
||||
|
||||
gpio_direction_input(gpio_wp);
|
||||
|
||||
/* When supported the trigger type have to be BOTH */
|
||||
ret = request_irq(gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_ATA_DMACK)),
|
||||
detect_irq, IRQF_TRIGGER_FALLING,
|
||||
"sdhc-detect", data);
|
||||
|
||||
if (ret)
|
||||
goto err_gpio_free_2;
|
||||
|
||||
return 0;
|
||||
|
||||
err_gpio_free_2:
|
||||
gpio_free(gpio_wp);
|
||||
|
||||
err_gpio_free:
|
||||
gpio_free(gpio_det);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
static void armadillo5x0_sdhc1_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_ATA_DMACK)), data);
|
||||
gpio_free(IOMUX_TO_GPIO(MX31_PIN_ATA_DMACK));
|
||||
gpio_free(IOMUX_TO_GPIO(MX31_PIN_ATA_RESET_B));
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data sdhc_pdata __initconst = {
|
||||
.get_ro = armadillo5x0_sdhc1_get_ro,
|
||||
.init = armadillo5x0_sdhc1_init,
|
||||
.exit = armadillo5x0_sdhc1_exit,
|
||||
};
|
||||
|
||||
/*
|
||||
* SMSC 9118
|
||||
* Network support
|
||||
*/
|
||||
static struct resource armadillo5x0_smc911x_resources[] = {
|
||||
{
|
||||
.start = MX31_CS3_BASE_ADDR,
|
||||
.end = MX31_CS3_BASE_ADDR + SZ_32M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
/* irq number is run-time assigned */
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct smsc911x_platform_config smsc911x_info = {
|
||||
.flags = SMSC911X_USE_16BIT,
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
|
||||
};
|
||||
|
||||
static struct platform_device armadillo5x0_smc911x_device = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(armadillo5x0_smc911x_resources),
|
||||
.resource = armadillo5x0_smc911x_resources,
|
||||
.dev = {
|
||||
.platform_data = &smsc911x_info,
|
||||
},
|
||||
};
|
||||
|
||||
/* UART device data */
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&armadillo5x0_smc911x_device,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||
};
|
||||
|
||||
/*
|
||||
* Perform board specific initializations
|
||||
*/
|
||||
static void __init armadillo5x0_init(void)
|
||||
{
|
||||
imx31_soc_init();
|
||||
|
||||
mxc_iomux_setup_multiple_pins(armadillo5x0_pins,
|
||||
ARRAY_SIZE(armadillo5x0_pins), "armadillo5x0");
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
|
||||
imx31_add_imx_i2c1(NULL);
|
||||
|
||||
/* Register UART */
|
||||
imx31_add_imx_uart0(&uart_pdata);
|
||||
imx31_add_imx_uart1(&uart_pdata);
|
||||
|
||||
/* Register FB */
|
||||
imx31_add_ipu_core();
|
||||
imx31_add_mx3_sdc_fb(&mx3fb_pdata);
|
||||
|
||||
/* Register NOR Flash */
|
||||
platform_device_register_resndata(NULL, "physmap-flash", -1,
|
||||
&armadillo5x0_nor_flash_resource, 1,
|
||||
&armadillo5x0_nor_flash_pdata,
|
||||
sizeof(armadillo5x0_nor_flash_pdata));
|
||||
|
||||
/* Register NAND Flash */
|
||||
imx31_add_mxc_nand(&armadillo5x0_nand_board_info);
|
||||
|
||||
/* set NAND page size to 2k if not configured via boot mode pins */
|
||||
imx_writel(imx_readl(mx3_ccm_base + MXC_CCM_RCSR) | (1 << 30),
|
||||
mx3_ccm_base + MXC_CCM_RCSR);
|
||||
}
|
||||
|
||||
static void __init armadillo5x0_late(void)
|
||||
{
|
||||
armadillo5x0_smc911x_resources[1].start =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_0));
|
||||
armadillo5x0_smc911x_resources[1].end =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_0));
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
imx_add_gpio_keys(&armadillo5x0_button_data);
|
||||
|
||||
/* SMSC9118 IRQ pin */
|
||||
gpio_direction_input(MX31_PIN_GPIO1_0);
|
||||
|
||||
/* Register SDHC */
|
||||
imx31_add_mxc_mmc(0, &sdhc_pdata);
|
||||
|
||||
/* RTC */
|
||||
/* Get RTC IRQ and register the chip */
|
||||
if (!gpio_request(ARMADILLO5X0_RTC_GPIO, "rtc")) {
|
||||
if (!gpio_direction_input(ARMADILLO5X0_RTC_GPIO))
|
||||
armadillo5x0_i2c_rtc.irq =
|
||||
gpio_to_irq(ARMADILLO5X0_RTC_GPIO);
|
||||
else
|
||||
gpio_free(ARMADILLO5X0_RTC_GPIO);
|
||||
}
|
||||
|
||||
if (armadillo5x0_i2c_rtc.irq == 0)
|
||||
pr_warn("armadillo5x0_init: failed to get RTC IRQ\n");
|
||||
i2c_register_board_info(1, &armadillo5x0_i2c_rtc, 1);
|
||||
|
||||
/* USB */
|
||||
usbotg_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
|
||||
ULPI_OTG_DRVVBUS_EXT);
|
||||
if (usbotg_pdata.otg)
|
||||
imx31_add_mxc_ehci_otg(&usbotg_pdata);
|
||||
usbh2_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
|
||||
ULPI_OTG_DRVVBUS_EXT);
|
||||
if (usbh2_pdata.otg)
|
||||
imx31_add_mxc_ehci_hs(2, &usbh2_pdata);
|
||||
}
|
||||
|
||||
static void __init armadillo5x0_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
MACHINE_START(ARMADILLO5X0, "Armadillo-500")
|
||||
/* Maintainer: Alberto Panizzo */
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx31_map_io,
|
||||
.init_early = imx31_init_early,
|
||||
.init_irq = mx31_init_irq,
|
||||
.init_time = armadillo5x0_timer_init,
|
||||
.init_machine = armadillo5x0_init,
|
||||
.init_late = armadillo5x0_late,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,54 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2000 Deep Blue Solutions Ltd
|
||||
* Copyright (C) 2002 Shane Nay (shane@minirl.com)
|
||||
* Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
* Copyright 2011 Denis 'GNUtoo' Carikli <GNUtoo@no-log.org>
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static const unsigned int bug_pins[] __initconst = {
|
||||
MX31_PIN_PC_RST__CTS5,
|
||||
MX31_PIN_PC_VS2__RTS5,
|
||||
MX31_PIN_PC_BVD2__TXD5,
|
||||
MX31_PIN_PC_BVD1__RXD5,
|
||||
};
|
||||
|
||||
static void __init bug_board_init(void)
|
||||
{
|
||||
imx31_soc_init();
|
||||
|
||||
mxc_iomux_setup_multiple_pins(bug_pins,
|
||||
ARRAY_SIZE(bug_pins), "uart-4");
|
||||
imx31_add_imx_uart4(&uart_pdata);
|
||||
}
|
||||
|
||||
static void __init bug_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
MACHINE_START(BUG, "BugLabs BUGBase")
|
||||
.map_io = mx31_map_io,
|
||||
.init_early = imx31_init_early,
|
||||
.init_irq = mx31_init_irq,
|
||||
.init_time = bug_timer_init,
|
||||
.init_machine = bug_board_init,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -0,0 +1,81 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright 2012 Sascha Hauer, Pengutronix
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/mm.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "hardware.h"
|
||||
#include "mx27.h"
|
||||
|
||||
/* MX27 memory map definition */
|
||||
static struct map_desc imx27_io_desc[] __initdata = {
|
||||
/*
|
||||
* this fixed mapping covers:
|
||||
* - AIPI1
|
||||
* - AIPI2
|
||||
* - AITC
|
||||
* - ROM Patch
|
||||
* - and some reserved space
|
||||
*/
|
||||
imx_map_entry(MX27, AIPI, MT_DEVICE),
|
||||
/*
|
||||
* this fixed mapping covers:
|
||||
* - CSI
|
||||
* - ATA
|
||||
*/
|
||||
imx_map_entry(MX27, SAHB1, MT_DEVICE),
|
||||
/*
|
||||
* this fixed mapping covers:
|
||||
* - EMI
|
||||
*/
|
||||
imx_map_entry(MX27, X_MEMC, MT_DEVICE),
|
||||
};
|
||||
|
||||
/*
|
||||
* Initialize the memory map. It is called during the
|
||||
* system startup to create static physical to virtual
|
||||
* memory map for the IO modules.
|
||||
*/
|
||||
static void __init mx27_map_io(void)
|
||||
{
|
||||
iotable_init(imx27_io_desc, ARRAY_SIZE(imx27_io_desc));
|
||||
}
|
||||
|
||||
static void __init imx27_init_early(void)
|
||||
{
|
||||
mxc_set_cpu_type(MXC_CPU_MX27);
|
||||
}
|
||||
|
||||
static void __init mx27_init_irq(void)
|
||||
{
|
||||
void __iomem *avic_base;
|
||||
struct device_node *np;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,avic");
|
||||
avic_base = of_iomap(np, 0);
|
||||
BUG_ON(!avic_base);
|
||||
mxc_init_irq(avic_base);
|
||||
}
|
||||
|
||||
static const char * const imx27_dt_board_compat[] __initconst = {
|
||||
"fsl,imx27",
|
||||
NULL
|
||||
};
|
||||
|
||||
DT_MACHINE_START(IMX27_DT, "Freescale i.MX27 (Device Tree Support)")
|
||||
.map_io = mx27_map_io,
|
||||
.init_early = imx27_init_early,
|
||||
.init_irq = mx27_init_irq,
|
||||
.init_late = imx27_pm_init,
|
||||
.dt_compat = imx27_dt_board_compat,
|
||||
MACHINE_END
|
|
@ -1,562 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* mach-imx27_visstrim_m10.c
|
||||
*
|
||||
* Copyright 2010 Javier Martin <javier.martin@vista-silicon.com>
|
||||
*
|
||||
* Based on mach-pcm038.c, mach-pca100.c, mach-mx27ads.c and others.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/platform_data/pca953x.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/platform_data/asoc-mx27vis.h>
|
||||
#include <sound/tlv320aic32x4.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/system_info.h>
|
||||
#include <asm/memblock.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices-imx27.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx27.h"
|
||||
|
||||
#define TVP5150_RSTN (GPIO_PORTC + 18)
|
||||
#define TVP5150_PWDN (GPIO_PORTC + 19)
|
||||
#define OTG_PHY_CS_GPIO (GPIO_PORTF + 17)
|
||||
#define SDHC1_IRQ_GPIO IMX_GPIO_NR(2, 25)
|
||||
|
||||
#define VERSION_MASK 0x7
|
||||
#define MOTHERBOARD_SHIFT 4
|
||||
#define EXPBOARD_SHIFT 0
|
||||
|
||||
#define MOTHERBOARD_BIT2 (GPIO_PORTD + 31)
|
||||
#define MOTHERBOARD_BIT1 (GPIO_PORTD + 30)
|
||||
#define MOTHERBOARD_BIT0 (GPIO_PORTD + 29)
|
||||
|
||||
#define EXPBOARD_BIT2 (GPIO_PORTD + 25)
|
||||
#define EXPBOARD_BIT1 (GPIO_PORTD + 27)
|
||||
#define EXPBOARD_BIT0 (GPIO_PORTD + 28)
|
||||
|
||||
#define AMP_GAIN_0 (GPIO_PORTF + 9)
|
||||
#define AMP_GAIN_1 (GPIO_PORTF + 8)
|
||||
#define AMP_MUTE_SDL (GPIO_PORTE + 5)
|
||||
#define AMP_MUTE_SDR (GPIO_PORTF + 7)
|
||||
|
||||
static const int visstrim_m10_pins[] __initconst = {
|
||||
/* UART1 (console) */
|
||||
PE12_PF_UART1_TXD,
|
||||
PE13_PF_UART1_RXD,
|
||||
PE14_PF_UART1_CTS,
|
||||
PE15_PF_UART1_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,
|
||||
/* SSI1 */
|
||||
PC20_PF_SSI1_FS,
|
||||
PC21_PF_SSI1_RXD,
|
||||
PC22_PF_SSI1_TXD,
|
||||
PC23_PF_SSI1_CLK,
|
||||
/* 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,
|
||||
/* Both I2Cs */
|
||||
PD17_PF_I2C_DATA,
|
||||
PD18_PF_I2C_CLK,
|
||||
PC5_PF_I2C2_SDA,
|
||||
PC6_PF_I2C2_SCL,
|
||||
/* USB OTG */
|
||||
OTG_PHY_CS_GPIO | GPIO_GPIO | GPIO_OUT,
|
||||
PC9_PF_USBOTG_DATA0,
|
||||
PC11_PF_USBOTG_DATA1,
|
||||
PC10_PF_USBOTG_DATA2,
|
||||
PC13_PF_USBOTG_DATA3,
|
||||
PC12_PF_USBOTG_DATA4,
|
||||
PC7_PF_USBOTG_DATA5,
|
||||
PC8_PF_USBOTG_DATA6,
|
||||
PE25_PF_USBOTG_DATA7,
|
||||
PE24_PF_USBOTG_CLK,
|
||||
PE2_PF_USBOTG_DIR,
|
||||
PE0_PF_USBOTG_NXT,
|
||||
PE1_PF_USBOTG_STP,
|
||||
PB23_PF_USB_PWR,
|
||||
PB24_PF_USB_OC,
|
||||
/* CSI */
|
||||
TVP5150_RSTN | GPIO_GPIO | GPIO_OUT,
|
||||
TVP5150_PWDN | GPIO_GPIO | GPIO_OUT,
|
||||
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,
|
||||
/* mother board version */
|
||||
MOTHERBOARD_BIT2 | GPIO_GPIO | GPIO_IN | GPIO_PUEN,
|
||||
MOTHERBOARD_BIT1 | GPIO_GPIO | GPIO_IN | GPIO_PUEN,
|
||||
MOTHERBOARD_BIT0 | GPIO_GPIO | GPIO_IN | GPIO_PUEN,
|
||||
/* expansion board version */
|
||||
EXPBOARD_BIT2 | GPIO_GPIO | GPIO_IN | GPIO_PUEN,
|
||||
EXPBOARD_BIT1 | GPIO_GPIO | GPIO_IN | GPIO_PUEN,
|
||||
EXPBOARD_BIT0 | GPIO_GPIO | GPIO_IN | GPIO_PUEN,
|
||||
/* Audio AMP control */
|
||||
AMP_GAIN_0 | GPIO_GPIO | GPIO_OUT,
|
||||
AMP_GAIN_1 | GPIO_GPIO | GPIO_OUT,
|
||||
AMP_MUTE_SDL | GPIO_GPIO | GPIO_OUT,
|
||||
AMP_MUTE_SDR | GPIO_GPIO | GPIO_OUT,
|
||||
};
|
||||
|
||||
static struct gpio visstrim_m10_version_gpios[] = {
|
||||
{ EXPBOARD_BIT0, GPIOF_IN, "exp-version-0" },
|
||||
{ EXPBOARD_BIT1, GPIOF_IN, "exp-version-1" },
|
||||
{ EXPBOARD_BIT2, GPIOF_IN, "exp-version-2" },
|
||||
{ MOTHERBOARD_BIT0, GPIOF_IN, "mother-version-0" },
|
||||
{ MOTHERBOARD_BIT1, GPIOF_IN, "mother-version-1" },
|
||||
{ MOTHERBOARD_BIT2, GPIOF_IN, "mother-version-2" },
|
||||
};
|
||||
|
||||
static const struct gpio visstrim_m10_gpios[] __initconst = {
|
||||
{
|
||||
.gpio = TVP5150_RSTN,
|
||||
.flags = GPIOF_DIR_OUT | GPIOF_INIT_HIGH,
|
||||
.label = "tvp5150_rstn",
|
||||
},
|
||||
{
|
||||
.gpio = TVP5150_PWDN,
|
||||
.flags = GPIOF_DIR_OUT | GPIOF_INIT_LOW,
|
||||
.label = "tvp5150_pwdn",
|
||||
},
|
||||
{
|
||||
.gpio = OTG_PHY_CS_GPIO,
|
||||
.flags = GPIOF_DIR_OUT | GPIOF_INIT_LOW,
|
||||
.label = "usbotg_cs",
|
||||
},
|
||||
{
|
||||
.gpio = AMP_GAIN_0,
|
||||
.flags = GPIOF_DIR_OUT,
|
||||
.label = "amp-gain-0",
|
||||
},
|
||||
{
|
||||
.gpio = AMP_GAIN_1,
|
||||
.flags = GPIOF_DIR_OUT,
|
||||
.label = "amp-gain-1",
|
||||
},
|
||||
{
|
||||
.gpio = AMP_MUTE_SDL,
|
||||
.flags = GPIOF_DIR_OUT,
|
||||
.label = "amp-mute-sdl",
|
||||
},
|
||||
{
|
||||
.gpio = AMP_MUTE_SDR,
|
||||
.flags = GPIOF_DIR_OUT,
|
||||
.label = "amp-mute-sdr",
|
||||
},
|
||||
};
|
||||
|
||||
/* Camera */
|
||||
static struct mx2_camera_platform_data visstrim_camera = {
|
||||
.flags = MX2_CAMERA_CCIR | MX2_CAMERA_CCIR_INTERLACE |
|
||||
MX2_CAMERA_PCLK_SAMPLE_RISING,
|
||||
.clk = 100000,
|
||||
};
|
||||
|
||||
static phys_addr_t mx2_camera_base __initdata;
|
||||
#define MX2_CAMERA_BUF_SIZE SZ_8M
|
||||
|
||||
static void __init visstrim_analog_camera_init(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
|
||||
gpio_set_value(TVP5150_PWDN, 1);
|
||||
ndelay(1);
|
||||
gpio_set_value(TVP5150_RSTN, 0);
|
||||
ndelay(500);
|
||||
gpio_set_value(TVP5150_RSTN, 1);
|
||||
ndelay(200000);
|
||||
|
||||
pdev = imx27_add_mx2_camera(&visstrim_camera);
|
||||
if (IS_ERR(pdev))
|
||||
return;
|
||||
|
||||
dma_declare_coherent_memory(&pdev->dev, mx2_camera_base,
|
||||
mx2_camera_base, MX2_CAMERA_BUF_SIZE);
|
||||
}
|
||||
|
||||
static void __init visstrim_reserve(void)
|
||||
{
|
||||
/* reserve 4 MiB for mx2-camera */
|
||||
mx2_camera_base = arm_memblock_steal(3 * MX2_CAMERA_BUF_SIZE,
|
||||
MX2_CAMERA_BUF_SIZE);
|
||||
}
|
||||
|
||||
/* GPIOs used as events for applications */
|
||||
static struct gpio_keys_button visstrim_gpio_keys[] = {
|
||||
{
|
||||
.type = EV_KEY,
|
||||
.code = KEY_RESTART,
|
||||
.gpio = (GPIO_PORTC + 15),
|
||||
.desc = "Default config",
|
||||
.active_low = 0,
|
||||
.wakeup = 1,
|
||||
},
|
||||
{
|
||||
.type = EV_KEY,
|
||||
.code = KEY_RECORD,
|
||||
.gpio = (GPIO_PORTF + 14),
|
||||
.desc = "Record",
|
||||
.active_low = 0,
|
||||
.wakeup = 1,
|
||||
},
|
||||
{
|
||||
.type = EV_KEY,
|
||||
.code = KEY_STOP,
|
||||
.gpio = (GPIO_PORTF + 13),
|
||||
.desc = "Stop",
|
||||
.active_low = 0,
|
||||
.wakeup = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static const struct gpio_keys_platform_data
|
||||
visstrim_gpio_keys_platform_data __initconst = {
|
||||
.buttons = visstrim_gpio_keys,
|
||||
.nbuttons = ARRAY_SIZE(visstrim_gpio_keys),
|
||||
};
|
||||
|
||||
/* led */
|
||||
static const struct gpio_led visstrim_m10_leds[] __initconst = {
|
||||
{
|
||||
.name = "visstrim:ld0",
|
||||
.default_trigger = "nand-disk",
|
||||
.gpio = (GPIO_PORTC + 29),
|
||||
},
|
||||
{
|
||||
.name = "visstrim:ld1",
|
||||
.default_trigger = "nand-disk",
|
||||
.gpio = (GPIO_PORTC + 24),
|
||||
},
|
||||
{
|
||||
.name = "visstrim:ld2",
|
||||
.default_trigger = "nand-disk",
|
||||
.gpio = (GPIO_PORTC + 28),
|
||||
},
|
||||
{
|
||||
.name = "visstrim:ld3",
|
||||
.default_trigger = "nand-disk",
|
||||
.gpio = (GPIO_PORTC + 25),
|
||||
},
|
||||
};
|
||||
|
||||
static const struct gpio_led_platform_data visstrim_m10_led_data __initconst = {
|
||||
.leds = visstrim_m10_leds,
|
||||
.num_leds = ARRAY_SIZE(visstrim_m10_leds),
|
||||
};
|
||||
|
||||
/* Visstrim_SM10 has a microSD slot connected to sdhc1 */
|
||||
static int visstrim_m10_sdhc1_init(struct device *dev,
|
||||
irq_handler_t detect_irq, void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = request_irq(gpio_to_irq(SDHC1_IRQ_GPIO), detect_irq,
|
||||
IRQF_TRIGGER_FALLING, "mmc-detect", data);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void visstrim_m10_sdhc1_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(SDHC1_IRQ_GPIO), data);
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data visstrim_m10_sdhc_pdata __initconst = {
|
||||
.init = visstrim_m10_sdhc1_init,
|
||||
.exit = visstrim_m10_sdhc1_exit,
|
||||
};
|
||||
|
||||
/* Visstrim_SM10 NOR flash */
|
||||
static struct physmap_flash_data visstrim_m10_flash_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource visstrim_m10_flash_resource = {
|
||||
.start = 0xc0000000,
|
||||
.end = 0xc0000000 + SZ_64M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device visstrim_m10_nor_mtd_device = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &visstrim_m10_flash_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &visstrim_m10_flash_resource,
|
||||
};
|
||||
|
||||
static struct platform_device *platform_devices[] __initdata = {
|
||||
&visstrim_m10_nor_mtd_device,
|
||||
};
|
||||
|
||||
/* Visstrim_M10 uses UART0 as console */
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
/* I2C */
|
||||
static const struct imxi2c_platform_data visstrim_m10_i2c_data __initconst = {
|
||||
.bitrate = 100000,
|
||||
};
|
||||
|
||||
static struct pca953x_platform_data visstrim_m10_pca9555_pdata = {
|
||||
.gpio_base = 240, /* After MX27 internal GPIOs */
|
||||
.invert = 0,
|
||||
};
|
||||
|
||||
static struct aic32x4_pdata visstrim_m10_aic32x4_pdata = {
|
||||
.power_cfg = AIC32X4_PWR_MICBIAS_2075_LDOIN |
|
||||
AIC32X4_PWR_AVDD_DVDD_WEAK_DISABLE |
|
||||
AIC32X4_PWR_AIC32X4_LDO_ENABLE |
|
||||
AIC32X4_PWR_CMMODE_LDOIN_RANGE_18_36 |
|
||||
AIC32X4_PWR_CMMODE_HP_LDOIN_POWERED,
|
||||
.micpga_routing = AIC32X4_MICPGA_ROUTE_LMIC_IN2R_10K |
|
||||
AIC32X4_MICPGA_ROUTE_RMIC_IN1L_10K,
|
||||
.swapdacs = false,
|
||||
};
|
||||
|
||||
static struct i2c_board_info visstrim_m10_i2c_devices[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("pca9555", 0x20),
|
||||
.platform_data = &visstrim_m10_pca9555_pdata,
|
||||
},
|
||||
{
|
||||
I2C_BOARD_INFO("tlv320aic32x4", 0x18),
|
||||
.platform_data = &visstrim_m10_aic32x4_pdata,
|
||||
},
|
||||
{
|
||||
I2C_BOARD_INFO("m41t00", 0x68),
|
||||
}
|
||||
};
|
||||
|
||||
/* USB OTG */
|
||||
static int otg_phy_init(struct platform_device *pdev)
|
||||
{
|
||||
return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
|
||||
}
|
||||
|
||||
static const struct mxc_usbh_platform_data
|
||||
visstrim_m10_usbotg_pdata __initconst = {
|
||||
.init = otg_phy_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||
};
|
||||
|
||||
/* SSI */
|
||||
static const struct imx_ssi_platform_data visstrim_m10_ssi_pdata __initconst = {
|
||||
.flags = IMX_SSI_DMA | IMX_SSI_SYN,
|
||||
};
|
||||
|
||||
/* coda */
|
||||
|
||||
static void __init visstrim_coda_init(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
|
||||
pdev = imx27_add_coda();
|
||||
dma_declare_coherent_memory(&pdev->dev,
|
||||
mx2_camera_base + MX2_CAMERA_BUF_SIZE,
|
||||
mx2_camera_base + MX2_CAMERA_BUF_SIZE,
|
||||
MX2_CAMERA_BUF_SIZE);
|
||||
}
|
||||
|
||||
/* DMA deinterlace */
|
||||
static struct platform_device visstrim_deinterlace = {
|
||||
.name = "m2m-deinterlace",
|
||||
.id = 0,
|
||||
};
|
||||
|
||||
static void __init visstrim_deinterlace_init(void)
|
||||
{
|
||||
int ret = -ENOMEM;
|
||||
struct platform_device *pdev = &visstrim_deinterlace;
|
||||
|
||||
ret = platform_device_register(pdev);
|
||||
|
||||
dma_declare_coherent_memory(&pdev->dev,
|
||||
mx2_camera_base + 2 * MX2_CAMERA_BUF_SIZE,
|
||||
mx2_camera_base + 2 * MX2_CAMERA_BUF_SIZE,
|
||||
MX2_CAMERA_BUF_SIZE);
|
||||
}
|
||||
|
||||
/* Emma-PrP for format conversion */
|
||||
static void __init visstrim_emmaprp_init(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
int ret;
|
||||
|
||||
pdev = imx27_add_mx2_emmaprp();
|
||||
if (IS_ERR(pdev))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Use the same memory area as the analog camera since both
|
||||
* devices are, by nature, exclusive.
|
||||
*/
|
||||
ret = dma_declare_coherent_memory(&pdev->dev,
|
||||
mx2_camera_base, mx2_camera_base,
|
||||
MX2_CAMERA_BUF_SIZE);
|
||||
if (ret)
|
||||
pr_err("Failed to declare memory for emmaprp\n");
|
||||
}
|
||||
|
||||
/* Audio */
|
||||
static const struct snd_mx27vis_platform_data snd_mx27vis_pdata __initconst = {
|
||||
.amp_gain0_gpio = AMP_GAIN_0,
|
||||
.amp_gain1_gpio = AMP_GAIN_1,
|
||||
.amp_mutel_gpio = AMP_MUTE_SDL,
|
||||
.amp_muter_gpio = AMP_MUTE_SDR,
|
||||
};
|
||||
|
||||
static void __init visstrim_m10_revision(void)
|
||||
{
|
||||
int exp_version = 0;
|
||||
int mo_version = 0;
|
||||
int ret;
|
||||
|
||||
ret = gpio_request_array(visstrim_m10_version_gpios,
|
||||
ARRAY_SIZE(visstrim_m10_version_gpios));
|
||||
if (ret) {
|
||||
pr_err("Failed to request version gpios");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Get expansion board version (negative logic) */
|
||||
exp_version |= !gpio_get_value(EXPBOARD_BIT2) << 2;
|
||||
exp_version |= !gpio_get_value(EXPBOARD_BIT1) << 1;
|
||||
exp_version |= !gpio_get_value(EXPBOARD_BIT0);
|
||||
|
||||
/* Get mother board version (negative logic) */
|
||||
mo_version |= !gpio_get_value(MOTHERBOARD_BIT2) << 2;
|
||||
mo_version |= !gpio_get_value(MOTHERBOARD_BIT1) << 1;
|
||||
mo_version |= !gpio_get_value(MOTHERBOARD_BIT0);
|
||||
|
||||
system_rev = 0x27000;
|
||||
system_rev |= (mo_version << MOTHERBOARD_SHIFT);
|
||||
system_rev |= (exp_version << EXPBOARD_SHIFT);
|
||||
}
|
||||
|
||||
static void __init visstrim_m10_board_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
imx27_soc_init();
|
||||
visstrim_m10_revision();
|
||||
|
||||
ret = mxc_gpio_setup_multiple_pins(visstrim_m10_pins,
|
||||
ARRAY_SIZE(visstrim_m10_pins), "VISSTRIM_M10");
|
||||
if (ret)
|
||||
pr_err("Failed to setup pins (%d)\n", ret);
|
||||
|
||||
imx27_add_imx_ssi(0, &visstrim_m10_ssi_pdata);
|
||||
imx27_add_imx_uart0(&uart_pdata);
|
||||
|
||||
imx27_add_imx_i2c(0, &visstrim_m10_i2c_data);
|
||||
imx27_add_imx_i2c(1, &visstrim_m10_i2c_data);
|
||||
i2c_register_board_info(0, visstrim_m10_i2c_devices,
|
||||
ARRAY_SIZE(visstrim_m10_i2c_devices));
|
||||
|
||||
imx27_add_mxc_mmc(0, &visstrim_m10_sdhc_pdata);
|
||||
imx27_add_mxc_ehci_otg(&visstrim_m10_usbotg_pdata);
|
||||
imx27_add_fec(NULL);
|
||||
|
||||
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
|
||||
}
|
||||
|
||||
static void __init visstrim_m10_late_init(void)
|
||||
{
|
||||
int mo_version, ret;
|
||||
|
||||
ret = gpio_request_array(visstrim_m10_gpios,
|
||||
ARRAY_SIZE(visstrim_m10_gpios));
|
||||
if (ret)
|
||||
pr_err("Failed to request gpios (%d)\n", ret);
|
||||
|
||||
imx_add_gpio_keys(&visstrim_gpio_keys_platform_data);
|
||||
|
||||
imx_add_platform_device("mx27vis", 0, NULL, 0, &snd_mx27vis_pdata,
|
||||
sizeof(snd_mx27vis_pdata));
|
||||
|
||||
gpio_led_register_device(0, &visstrim_m10_led_data);
|
||||
|
||||
/* Use mother board version to decide what video devices we shall use */
|
||||
mo_version = (system_rev >> MOTHERBOARD_SHIFT) & VERSION_MASK;
|
||||
if (mo_version & 0x1) {
|
||||
visstrim_emmaprp_init();
|
||||
|
||||
/*
|
||||
* Despite not being used, tvp5150 must be
|
||||
* powered on to avoid I2C problems. To minimize
|
||||
* power consupmtion keep reset enabled.
|
||||
*/
|
||||
gpio_set_value(TVP5150_PWDN, 1);
|
||||
ndelay(1);
|
||||
gpio_set_value(TVP5150_RSTN, 0);
|
||||
} else {
|
||||
visstrim_deinterlace_init();
|
||||
visstrim_analog_camera_init();
|
||||
}
|
||||
|
||||
visstrim_coda_init();
|
||||
}
|
||||
|
||||
static void __init visstrim_m10_timer_init(void)
|
||||
{
|
||||
mx27_clocks_init((unsigned long)25000000);
|
||||
}
|
||||
|
||||
MACHINE_START(IMX27_VISSTRIM_M10, "Vista Silicon Visstrim_M10")
|
||||
.atag_offset = 0x100,
|
||||
.reserve = visstrim_reserve,
|
||||
.map_io = mx27_map_io,
|
||||
.init_early = imx27_init_early,
|
||||
.init_irq = mx27_init_irq,
|
||||
.init_time = visstrim_m10_timer_init,
|
||||
.init_machine = visstrim_m10_board_init,
|
||||
.init_late = visstrim_m10_late_init,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -67,6 +67,9 @@ static const char *const imx7ulp_dt_compat[] __initconst = {
|
|||
|
||||
static void __init imx7ulp_init_late(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_ARM_IMX_CPUFREQ_DT))
|
||||
platform_device_register_simple("imx-cpufreq-dt", -1, NULL, 0);
|
||||
|
||||
imx7ulp_cpuidle_init();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,291 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* KZM-ARM11-01 support
|
||||
* Copyright (C) 2009 Yoichi Yuasa <yuasa@linux-mips.org>
|
||||
*
|
||||
* based on code for MX31ADS,
|
||||
* Copyright (C) 2000 Deep Blue Solutions Ltd
|
||||
* Copyright (C) 2002 Shane Nay (shane@minirl.com)
|
||||
* Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/serial_8250.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/memory.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/irq.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
|
||||
#define KZM_ARM11_IO_ADDRESS(x) (IOMEM( \
|
||||
IMX_IO_P2V_MODULE(x, MX31_CS4) ?: \
|
||||
IMX_IO_P2V_MODULE(x, MX31_CS5)) ?: \
|
||||
MX31_IO_ADDRESS(x))
|
||||
|
||||
/*
|
||||
* KZM-ARM11-01 Board Control Registers on FPGA
|
||||
*/
|
||||
#define KZM_ARM11_CTL1 (MX31_CS4_BASE_ADDR + 0x1000)
|
||||
#define KZM_ARM11_CTL2 (MX31_CS4_BASE_ADDR + 0x1001)
|
||||
#define KZM_ARM11_RSW1 (MX31_CS4_BASE_ADDR + 0x1002)
|
||||
#define KZM_ARM11_BACK_LIGHT (MX31_CS4_BASE_ADDR + 0x1004)
|
||||
#define KZM_ARM11_FPGA_REV (MX31_CS4_BASE_ADDR + 0x1008)
|
||||
#define KZM_ARM11_7SEG_LED (MX31_CS4_BASE_ADDR + 0x1010)
|
||||
#define KZM_ARM11_LEDS (MX31_CS4_BASE_ADDR + 0x1020)
|
||||
#define KZM_ARM11_DIPSW2 (MX31_CS4_BASE_ADDR + 0x1003)
|
||||
|
||||
/*
|
||||
* External UART for touch panel on FPGA
|
||||
*/
|
||||
#define KZM_ARM11_16550 (MX31_CS4_BASE_ADDR + 0x1050)
|
||||
|
||||
#if IS_ENABLED(CONFIG_SERIAL_8250)
|
||||
/*
|
||||
* KZM-ARM11-01 has an external UART on FPGA
|
||||
*/
|
||||
static struct plat_serial8250_port serial_platform_data[] = {
|
||||
{
|
||||
.membase = KZM_ARM11_IO_ADDRESS(KZM_ARM11_16550),
|
||||
.mapbase = KZM_ARM11_16550,
|
||||
/* irq number is run-time assigned */
|
||||
.irqflags = IRQ_TYPE_EDGE_RISING,
|
||||
.uartclk = 14745600,
|
||||
.regshift = 0,
|
||||
.iotype = UPIO_MEM,
|
||||
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
|
||||
UPF_BUGGY_UART,
|
||||
},
|
||||
{},
|
||||
};
|
||||
|
||||
static struct resource serial8250_resources[] = {
|
||||
{
|
||||
.start = KZM_ARM11_16550,
|
||||
.end = KZM_ARM11_16550 + 0x10,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
/* irq number is run-time assigned */
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device serial_device = {
|
||||
.name = "serial8250",
|
||||
.id = PLAT8250_DEV_PLATFORM,
|
||||
.dev = {
|
||||
.platform_data = serial_platform_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(serial8250_resources),
|
||||
.resource = serial8250_resources,
|
||||
};
|
||||
|
||||
static int __init kzm_init_ext_uart(void)
|
||||
{
|
||||
u8 tmp;
|
||||
|
||||
/*
|
||||
* GPIO 1-1: external UART interrupt line
|
||||
*/
|
||||
mxc_iomux_mode(IOMUX_MODE(MX31_PIN_GPIO1_1, IOMUX_CONFIG_GPIO));
|
||||
gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1), "ext-uart-int");
|
||||
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1));
|
||||
|
||||
/*
|
||||
* Unmask UART interrupt
|
||||
*/
|
||||
tmp = __raw_readb(KZM_ARM11_IO_ADDRESS(KZM_ARM11_CTL1));
|
||||
tmp |= 0x2;
|
||||
__raw_writeb(tmp, KZM_ARM11_IO_ADDRESS(KZM_ARM11_CTL1));
|
||||
|
||||
serial_platform_data[0].irq =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1));
|
||||
serial8250_resources[1].start =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1));
|
||||
serial8250_resources[1].end =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1));
|
||||
|
||||
return platform_device_register(&serial_device);
|
||||
}
|
||||
#else
|
||||
static inline int kzm_init_ext_uart(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* SMSC LAN9118
|
||||
*/
|
||||
#if IS_ENABLED(CONFIG_SMSC911X)
|
||||
static struct smsc911x_platform_config kzm_smsc9118_config = {
|
||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_HIGH,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
|
||||
.flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
|
||||
};
|
||||
|
||||
static struct resource kzm_smsc9118_resources[] = {
|
||||
{
|
||||
.start = MX31_CS5_BASE_ADDR,
|
||||
.end = MX31_CS5_BASE_ADDR + SZ_128K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
/* irq number is run-time assigned */
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device kzm_smsc9118_device = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(kzm_smsc9118_resources),
|
||||
.resource = kzm_smsc9118_resources,
|
||||
.dev = {
|
||||
.platform_data = &kzm_smsc9118_config,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||
};
|
||||
|
||||
static int __init kzm_init_smsc9118(void)
|
||||
{
|
||||
/*
|
||||
* GPIO 1-2: SMSC9118 interrupt line
|
||||
*/
|
||||
mxc_iomux_mode(IOMUX_MODE(MX31_PIN_GPIO1_2, IOMUX_CONFIG_GPIO));
|
||||
gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2), "smsc9118-int");
|
||||
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2));
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
|
||||
kzm_smsc9118_resources[1].start =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2));
|
||||
kzm_smsc9118_resources[1].end =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2));
|
||||
|
||||
return platform_device_register(&kzm_smsc9118_device);
|
||||
}
|
||||
#else
|
||||
static inline int kzm_init_smsc9118(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_SERIAL_IMX)
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static void __init kzm_init_imx_uart(void)
|
||||
{
|
||||
imx31_add_imx_uart0(&uart_pdata);
|
||||
imx31_add_imx_uart1(&uart_pdata);
|
||||
}
|
||||
#else
|
||||
static inline void kzm_init_imx_uart(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static int kzm_pins[] __initdata = {
|
||||
MX31_PIN_CTS1__CTS1,
|
||||
MX31_PIN_RTS1__RTS1,
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1,
|
||||
MX31_PIN_DCD_DCE1__DCD_DCE1,
|
||||
MX31_PIN_RI_DCE1__RI_DCE1,
|
||||
MX31_PIN_DSR_DCE1__DSR_DCE1,
|
||||
MX31_PIN_DTR_DCE1__DTR_DCE1,
|
||||
MX31_PIN_CTS2__CTS2,
|
||||
MX31_PIN_RTS2__RTS2,
|
||||
MX31_PIN_TXD2__TXD2,
|
||||
MX31_PIN_RXD2__RXD2,
|
||||
MX31_PIN_DCD_DTE1__DCD_DTE2,
|
||||
MX31_PIN_RI_DTE1__RI_DTE2,
|
||||
MX31_PIN_DSR_DTE1__DSR_DTE2,
|
||||
MX31_PIN_DTR_DTE1__DTR_DTE2,
|
||||
};
|
||||
|
||||
/*
|
||||
* Board specific initialization.
|
||||
*/
|
||||
static void __init kzm_board_init(void)
|
||||
{
|
||||
imx31_soc_init();
|
||||
|
||||
mxc_iomux_setup_multiple_pins(kzm_pins,
|
||||
ARRAY_SIZE(kzm_pins), "kzm");
|
||||
kzm_init_imx_uart();
|
||||
|
||||
pr_info("Clock input source is 26MHz\n");
|
||||
}
|
||||
|
||||
static void __init kzm_late_init(void)
|
||||
{
|
||||
kzm_init_ext_uart();
|
||||
kzm_init_smsc9118();
|
||||
}
|
||||
|
||||
/*
|
||||
* This structure defines static mappings for the kzm-arm11-01 board.
|
||||
*/
|
||||
static struct map_desc kzm_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = (unsigned long)MX31_CS4_BASE_ADDR_VIRT,
|
||||
.pfn = __phys_to_pfn(MX31_CS4_BASE_ADDR),
|
||||
.length = MX31_CS4_SIZE,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
{
|
||||
.virtual = (unsigned long)MX31_CS5_BASE_ADDR_VIRT,
|
||||
.pfn = __phys_to_pfn(MX31_CS5_BASE_ADDR),
|
||||
.length = MX31_CS5_SIZE,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* Set up static virtual mappings.
|
||||
*/
|
||||
static void __init kzm_map_io(void)
|
||||
{
|
||||
mx31_map_io();
|
||||
iotable_init(kzm_io_desc, ARRAY_SIZE(kzm_io_desc));
|
||||
}
|
||||
|
||||
static void __init kzm_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
MACHINE_START(KZM_ARM11_01, "Kyoto Microcomputer Co., Ltd. KZM-ARM11-01")
|
||||
.atag_offset = 0x100,
|
||||
.map_io = kzm_map_io,
|
||||
.init_early = imx31_init_early,
|
||||
.init_irq = mx31_init_irq,
|
||||
.init_time = kzm_timer_init,
|
||||
.init_machine = kzm_board_init,
|
||||
.init_late = kzm_late_init,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,338 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2000 Deep Blue Solutions Ltd
|
||||
* Copyright (C) 2002 Shane Nay (shane@minirl.com)
|
||||
* Copyright 2006-2007 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices-imx21.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx21.h"
|
||||
|
||||
#define MX21ADS_CS8900A_REG (MX21_CS1_BASE_ADDR + 0x000000)
|
||||
#define MX21ADS_ST16C255_IOBASE_REG (MX21_CS1_BASE_ADDR + 0x200000)
|
||||
#define MX21ADS_VERSION_REG (MX21_CS1_BASE_ADDR + 0x400000)
|
||||
#define MX21ADS_IO_REG (MX21_CS1_BASE_ADDR + 0x800000)
|
||||
|
||||
#define MX21ADS_MMC_CD IMX_GPIO_NR(4, 25)
|
||||
#define MX21ADS_CS8900A_IRQ_GPIO IMX_GPIO_NR(5, 11)
|
||||
#define MX21ADS_MMGPIO_BASE (6 * 32)
|
||||
|
||||
/* MX21ADS_IO_REG bit definitions */
|
||||
#define MX21ADS_IO_SD_WP (MX21ADS_MMGPIO_BASE + 0)
|
||||
#define MX21ADS_IO_TP6 (MX21ADS_IO_SD_WP)
|
||||
#define MX21ADS_IO_SW_SEL (MX21ADS_MMGPIO_BASE + 1)
|
||||
#define MX21ADS_IO_TP7 (MX21ADS_IO_SW_SEL)
|
||||
#define MX21ADS_IO_RESET_E_UART (MX21ADS_MMGPIO_BASE + 2)
|
||||
#define MX21ADS_IO_RESET_BASE (MX21ADS_MMGPIO_BASE + 3)
|
||||
#define MX21ADS_IO_CSI_CTL2 (MX21ADS_MMGPIO_BASE + 4)
|
||||
#define MX21ADS_IO_CSI_CTL1 (MX21ADS_MMGPIO_BASE + 5)
|
||||
#define MX21ADS_IO_CSI_CTL0 (MX21ADS_MMGPIO_BASE + 6)
|
||||
#define MX21ADS_IO_UART1_EN (MX21ADS_MMGPIO_BASE + 7)
|
||||
#define MX21ADS_IO_UART4_EN (MX21ADS_MMGPIO_BASE + 8)
|
||||
#define MX21ADS_IO_LCDON (MX21ADS_MMGPIO_BASE + 9)
|
||||
#define MX21ADS_IO_IRDA_EN (MX21ADS_MMGPIO_BASE + 10)
|
||||
#define MX21ADS_IO_IRDA_FIR_SEL (MX21ADS_MMGPIO_BASE + 11)
|
||||
#define MX21ADS_IO_IRDA_MD0_B (MX21ADS_MMGPIO_BASE + 12)
|
||||
#define MX21ADS_IO_IRDA_MD1 (MX21ADS_MMGPIO_BASE + 13)
|
||||
#define MX21ADS_IO_LED4_ON (MX21ADS_MMGPIO_BASE + 14)
|
||||
#define MX21ADS_IO_LED3_ON (MX21ADS_MMGPIO_BASE + 15)
|
||||
|
||||
static const int mx21ads_pins[] __initconst = {
|
||||
|
||||
/* CS8900A */
|
||||
(GPIO_PORTE | GPIO_GPIO | GPIO_IN | 11),
|
||||
|
||||
/* UART1 */
|
||||
PE12_PF_UART1_TXD,
|
||||
PE13_PF_UART1_RXD,
|
||||
PE14_PF_UART1_CTS,
|
||||
PE15_PF_UART1_RTS,
|
||||
|
||||
/* UART3 (IrDA) - only TXD and RXD */
|
||||
PE8_PF_UART3_TXD,
|
||||
PE9_PF_UART3_RXD,
|
||||
|
||||
/* UART4 */
|
||||
PB26_AF_UART4_RTS,
|
||||
PB28_AF_UART4_TXD,
|
||||
PB29_AF_UART4_CTS,
|
||||
PB31_AF_UART4_RXD,
|
||||
|
||||
/* LCDC */
|
||||
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,
|
||||
PA24_PF_REV, /* Sharp panel dedicated signal */
|
||||
PA25_PF_CLS, /* Sharp panel dedicated signal */
|
||||
PA26_PF_PS, /* Sharp panel dedicated signal */
|
||||
PA27_PF_SPL_SPR, /* Sharp panel dedicated signal */
|
||||
PA28_PF_HSYNC,
|
||||
PA29_PF_VSYNC,
|
||||
PA30_PF_CONTRAST,
|
||||
PA31_PF_OE_ACD,
|
||||
|
||||
/* MMC/SDHC */
|
||||
PE18_PF_SD1_D0,
|
||||
PE19_PF_SD1_D1,
|
||||
PE20_PF_SD1_D2,
|
||||
PE21_PF_SD1_D3,
|
||||
PE22_PF_SD1_CMD,
|
||||
PE23_PF_SD1_CLK,
|
||||
|
||||
/* NFC */
|
||||
PF0_PF_NRFB,
|
||||
PF1_PF_NFCE,
|
||||
PF2_PF_NFWP,
|
||||
PF3_PF_NFCLE,
|
||||
PF4_PF_NFALE,
|
||||
PF5_PF_NFRE,
|
||||
PF6_PF_NFWE,
|
||||
PF7_PF_NFIO0,
|
||||
PF8_PF_NFIO1,
|
||||
PF9_PF_NFIO2,
|
||||
PF10_PF_NFIO3,
|
||||
PF11_PF_NFIO4,
|
||||
PF12_PF_NFIO5,
|
||||
PF13_PF_NFIO6,
|
||||
PF14_PF_NFIO7,
|
||||
};
|
||||
|
||||
/* ADS's NOR flash: 2x AM29BDS128HE9VKI on 32-bit bus */
|
||||
static struct physmap_flash_data mx21ads_flash_data = {
|
||||
.width = 4,
|
||||
};
|
||||
|
||||
static struct resource mx21ads_flash_resource =
|
||||
DEFINE_RES_MEM(MX21_CS0_BASE_ADDR, SZ_32M);
|
||||
|
||||
static struct platform_device mx21ads_nor_mtd_device = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &mx21ads_flash_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &mx21ads_flash_resource,
|
||||
};
|
||||
|
||||
static struct resource mx21ads_cs8900_resources[] __initdata = {
|
||||
DEFINE_RES_MEM(MX21ADS_CS8900A_REG, SZ_1K),
|
||||
/* irq number is run-time assigned */
|
||||
DEFINE_RES_IRQ(-1),
|
||||
};
|
||||
|
||||
static const struct platform_device_info mx21ads_cs8900_devinfo __initconst = {
|
||||
.name = "cs89x0",
|
||||
.id = 0,
|
||||
.res = mx21ads_cs8900_resources,
|
||||
.num_res = ARRAY_SIZE(mx21ads_cs8900_resources),
|
||||
};
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata_rts __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata_norts __initconst = {
|
||||
};
|
||||
|
||||
static struct resource mx21ads_mmgpio_resource =
|
||||
DEFINE_RES_MEM_NAMED(MX21ADS_IO_REG, SZ_2, "dat");
|
||||
|
||||
static struct bgpio_pdata mx21ads_mmgpio_pdata = {
|
||||
.label = "mx21ads-mmgpio",
|
||||
.base = MX21ADS_MMGPIO_BASE,
|
||||
.ngpio = 16,
|
||||
};
|
||||
|
||||
static struct platform_device mx21ads_mmgpio = {
|
||||
.name = "basic-mmio-gpio",
|
||||
.id = PLATFORM_DEVID_AUTO,
|
||||
.resource = &mx21ads_mmgpio_resource,
|
||||
.num_resources = 1,
|
||||
.dev = {
|
||||
.platform_data = &mx21ads_mmgpio_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply mx21ads_lcd_regulator_consumer =
|
||||
REGULATOR_SUPPLY("lcd", "imx-fb.0");
|
||||
|
||||
static struct regulator_init_data mx21ads_lcd_regulator_init_data = {
|
||||
.constraints = {
|
||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.consumer_supplies = &mx21ads_lcd_regulator_consumer,
|
||||
.num_consumer_supplies = 1,
|
||||
};
|
||||
|
||||
static struct fixed_voltage_config mx21ads_lcd_regulator_pdata = {
|
||||
.supply_name = "LCD",
|
||||
.microvolts = 3300000,
|
||||
.init_data = &mx21ads_lcd_regulator_init_data,
|
||||
};
|
||||
|
||||
static struct platform_device mx21ads_lcd_regulator = {
|
||||
.name = "reg-fixed-voltage",
|
||||
.id = PLATFORM_DEVID_AUTO,
|
||||
.dev = {
|
||||
.platform_data = &mx21ads_lcd_regulator_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpiod_lookup_table mx21ads_lcd_regulator_gpiod_table = {
|
||||
.dev_id = "reg-fixed-voltage.0", /* Let's hope ID 0 is what we get */
|
||||
.table = {
|
||||
GPIO_LOOKUP("mx21ads-mmgpio", 9, NULL, GPIO_ACTIVE_HIGH),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* Connected is a portrait Sharp-QVGA display
|
||||
* of type: LQ035Q7DB02
|
||||
*/
|
||||
static struct imx_fb_videomode mx21ads_modes[] = {
|
||||
{
|
||||
.mode = {
|
||||
.name = "Sharp-LQ035Q7",
|
||||
.refresh = 60,
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.pixclock = 188679, /* in ps (5.3MHz) */
|
||||
.hsync_len = 2,
|
||||
.left_margin = 6,
|
||||
.right_margin = 16,
|
||||
.vsync_len = 1,
|
||||
.upper_margin = 8,
|
||||
.lower_margin = 10,
|
||||
},
|
||||
.pcr = 0xfb108bc7,
|
||||
.bpp = 16,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct imx_fb_platform_data mx21ads_fb_data __initconst = {
|
||||
.mode = mx21ads_modes,
|
||||
.num_modes = ARRAY_SIZE(mx21ads_modes),
|
||||
|
||||
.pwmr = 0x00a903ff,
|
||||
.lscr1 = 0x00120300,
|
||||
.dmacr = 0x00020008,
|
||||
};
|
||||
|
||||
static int mx21ads_sdhc_get_ro(struct device *dev)
|
||||
{
|
||||
return gpio_get_value(MX21ADS_IO_SD_WP);
|
||||
}
|
||||
|
||||
static int mx21ads_sdhc_init(struct device *dev, irq_handler_t detect_irq,
|
||||
void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(MX21ADS_IO_SD_WP, "mmc-ro");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return request_irq(gpio_to_irq(MX21ADS_MMC_CD), detect_irq,
|
||||
IRQF_TRIGGER_FALLING, "mmc-detect", data);
|
||||
}
|
||||
|
||||
static void mx21ads_sdhc_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(MX21ADS_MMC_CD), data);
|
||||
gpio_free(MX21ADS_IO_SD_WP);
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data mx21ads_sdhc_pdata __initconst = {
|
||||
.ocr_avail = MMC_VDD_29_30 | MMC_VDD_30_31, /* 3.0V */
|
||||
.get_ro = mx21ads_sdhc_get_ro,
|
||||
.init = mx21ads_sdhc_init,
|
||||
.exit = mx21ads_sdhc_exit,
|
||||
};
|
||||
|
||||
static const struct mxc_nand_platform_data
|
||||
mx21ads_nand_board_info __initconst = {
|
||||
.width = 1,
|
||||
.hw_ecc = 1,
|
||||
};
|
||||
|
||||
static struct platform_device *platform_devices[] __initdata = {
|
||||
&mx21ads_mmgpio,
|
||||
&mx21ads_lcd_regulator,
|
||||
&mx21ads_nor_mtd_device,
|
||||
};
|
||||
|
||||
static void __init mx21ads_board_init(void)
|
||||
{
|
||||
imx21_soc_init();
|
||||
|
||||
mxc_gpio_setup_multiple_pins(mx21ads_pins, ARRAY_SIZE(mx21ads_pins),
|
||||
"mx21ads");
|
||||
|
||||
imx21_add_imx_uart0(&uart_pdata_rts);
|
||||
imx21_add_imx_uart2(&uart_pdata_norts);
|
||||
imx21_add_imx_uart3(&uart_pdata_rts);
|
||||
imx21_add_mxc_nand(&mx21ads_nand_board_info);
|
||||
|
||||
imx21_add_imx_fb(&mx21ads_fb_data);
|
||||
}
|
||||
|
||||
static void __init mx21ads_late_init(void)
|
||||
{
|
||||
imx21_add_mxc_mmc(0, &mx21ads_sdhc_pdata);
|
||||
|
||||
gpiod_add_lookup_table(&mx21ads_lcd_regulator_gpiod_table);
|
||||
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
|
||||
|
||||
mx21ads_cs8900_resources[1].start =
|
||||
gpio_to_irq(MX21ADS_CS8900A_IRQ_GPIO);
|
||||
mx21ads_cs8900_resources[1].end =
|
||||
gpio_to_irq(MX21ADS_CS8900A_IRQ_GPIO);
|
||||
platform_device_register_full(&mx21ads_cs8900_devinfo);
|
||||
}
|
||||
|
||||
static void __init mx21ads_timer_init(void)
|
||||
{
|
||||
mx21_clocks_init(32768, 26000000);
|
||||
}
|
||||
|
||||
MACHINE_START(MX21ADS, "Freescale i.MX21ADS")
|
||||
/* maintainer: Freescale Semiconductor, Inc. */
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx21_map_io,
|
||||
.init_early = imx21_init_early,
|
||||
.init_irq = mx21_init_irq,
|
||||
.init_time = mx21ads_timer_init,
|
||||
.init_machine = mx21ads_board_init,
|
||||
.init_late = mx21ads_late_init,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,470 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright 2009 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*
|
||||
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
*/
|
||||
|
||||
/*
|
||||
* This machine is known as:
|
||||
* - i.MX27 3-Stack Development System
|
||||
* - i.MX27 Platform Development Kit (i.MX27 PDK)
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/mfd/mc13783.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#include "3ds_debugboard.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx27.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx27.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
#define SD1_EN_GPIO IMX_GPIO_NR(2, 25)
|
||||
#define OTG_PHY_RESET_GPIO IMX_GPIO_NR(2, 23)
|
||||
#define SPI2_SS0 IMX_GPIO_NR(4, 21)
|
||||
#define PMIC_INT IMX_GPIO_NR(3, 14)
|
||||
#define SPI1_SS0 IMX_GPIO_NR(4, 28)
|
||||
#define SD1_CD IMX_GPIO_NR(2, 26)
|
||||
#define LCD_RESET IMX_GPIO_NR(1, 3)
|
||||
#define LCD_ENABLE IMX_GPIO_NR(1, 31)
|
||||
|
||||
static const int mx27pdk_pins[] __initconst = {
|
||||
/* UART1 */
|
||||
PE12_PF_UART1_TXD,
|
||||
PE13_PF_UART1_RXD,
|
||||
PE14_PF_UART1_CTS,
|
||||
PE15_PF_UART1_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,
|
||||
/* 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,
|
||||
SD1_EN_GPIO | GPIO_GPIO | GPIO_OUT,
|
||||
/* OTG */
|
||||
OTG_PHY_RESET_GPIO | GPIO_GPIO | GPIO_OUT,
|
||||
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,
|
||||
/* CSPI1 */
|
||||
PD31_PF_CSPI1_MOSI,
|
||||
PD30_PF_CSPI1_MISO,
|
||||
PD29_PF_CSPI1_SCLK,
|
||||
PD25_PF_CSPI1_RDY,
|
||||
SPI1_SS0 | GPIO_GPIO | GPIO_OUT,
|
||||
/* CSPI2 */
|
||||
PD22_PF_CSPI2_SCLK,
|
||||
PD23_PF_CSPI2_MISO,
|
||||
PD24_PF_CSPI2_MOSI,
|
||||
SPI2_SS0 | GPIO_GPIO | GPIO_OUT,
|
||||
/* I2C1 */
|
||||
PD17_PF_I2C_DATA,
|
||||
PD18_PF_I2C_CLK,
|
||||
/* PMIC INT */
|
||||
PMIC_INT | GPIO_GPIO | GPIO_IN,
|
||||
/* LCD */
|
||||
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,
|
||||
LCD_ENABLE | GPIO_GPIO | GPIO_OUT,
|
||||
LCD_RESET | GPIO_GPIO | GPIO_OUT,
|
||||
/* SSI4 */
|
||||
PC16_PF_SSI4_FS,
|
||||
PC17_PF_SSI4_RXD,
|
||||
PC18_PF_SSI4_TXD,
|
||||
PC19_PF_SSI4_CLK,
|
||||
};
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
/*
|
||||
* Matrix keyboard
|
||||
*/
|
||||
|
||||
static const uint32_t mx27_3ds_keymap[] = {
|
||||
KEY(0, 0, KEY_UP),
|
||||
KEY(0, 1, KEY_DOWN),
|
||||
KEY(1, 0, KEY_RIGHT),
|
||||
KEY(1, 1, KEY_LEFT),
|
||||
KEY(1, 2, KEY_ENTER),
|
||||
KEY(2, 0, KEY_F6),
|
||||
KEY(2, 1, KEY_F8),
|
||||
KEY(2, 2, KEY_F9),
|
||||
KEY(2, 3, KEY_F10),
|
||||
};
|
||||
|
||||
static const struct matrix_keymap_data mx27_3ds_keymap_data __initconst = {
|
||||
.keymap = mx27_3ds_keymap,
|
||||
.keymap_size = ARRAY_SIZE(mx27_3ds_keymap),
|
||||
};
|
||||
|
||||
static int mx27_3ds_sdhc1_init(struct device *dev, irq_handler_t detect_irq,
|
||||
void *data)
|
||||
{
|
||||
return request_irq(gpio_to_irq(SD1_CD), detect_irq,
|
||||
IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, "sdhc1-card-detect", data);
|
||||
}
|
||||
|
||||
static void mx27_3ds_sdhc1_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(SD1_CD), data);
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data sdhc1_pdata __initconst = {
|
||||
.init = mx27_3ds_sdhc1_init,
|
||||
.exit = mx27_3ds_sdhc1_exit,
|
||||
};
|
||||
|
||||
static void mx27_3ds_sdhc1_enable_level_translator(void)
|
||||
{
|
||||
/* Turn on TXB0108 OE pin */
|
||||
gpio_request(SD1_EN_GPIO, "sd1_enable");
|
||||
gpio_direction_output(SD1_EN_GPIO, 1);
|
||||
}
|
||||
|
||||
|
||||
static int otg_phy_init(void)
|
||||
{
|
||||
gpio_request(OTG_PHY_RESET_GPIO, "usb-otg-reset");
|
||||
gpio_direction_output(OTG_PHY_RESET_GPIO, 0);
|
||||
mdelay(1);
|
||||
gpio_set_value(OTG_PHY_RESET_GPIO, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mx27_3ds_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 = mx27_3ds_otg_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 mx27_3ds_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=", mx27_3ds_otg_mode);
|
||||
|
||||
/* Regulators */
|
||||
static struct regulator_init_data gpo_init = {
|
||||
.constraints = {
|
||||
.boot_on = 1,
|
||||
.always_on = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply vmmc1_consumers[] = {
|
||||
REGULATOR_SUPPLY("vcore", "spi0.0"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data vmmc1_init = {
|
||||
.constraints = {
|
||||
.min_uV = 2800000,
|
||||
.max_uV = 2800000,
|
||||
.apply_uV = 1,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(vmmc1_consumers),
|
||||
.consumer_supplies = vmmc1_consumers,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply vgen_consumers[] = {
|
||||
REGULATOR_SUPPLY("vdd", "spi0.0"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data vgen_init = {
|
||||
.constraints = {
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(vgen_consumers),
|
||||
.consumer_supplies = vgen_consumers,
|
||||
};
|
||||
|
||||
static struct mc13xxx_regulator_init_data mx27_3ds_regulators[] = {
|
||||
{
|
||||
.id = MC13783_REG_VMMC1,
|
||||
.init_data = &vmmc1_init,
|
||||
}, {
|
||||
.id = MC13783_REG_VGEN,
|
||||
.init_data = &vgen_init,
|
||||
}, {
|
||||
.id = MC13783_REG_GPO1, /* Turn on 1.8V */
|
||||
.init_data = &gpo_init,
|
||||
}, {
|
||||
.id = MC13783_REG_GPO3, /* Turn on 3.3V */
|
||||
.init_data = &gpo_init,
|
||||
},
|
||||
};
|
||||
|
||||
/* MC13783 */
|
||||
static struct mc13xxx_codec_platform_data mx27_3ds_codec = {
|
||||
.dac_ssi_port = MC13783_SSI1_PORT,
|
||||
.adc_ssi_port = MC13783_SSI1_PORT,
|
||||
};
|
||||
|
||||
static struct mc13xxx_platform_data mc13783_pdata = {
|
||||
.regulators = {
|
||||
.regulators = mx27_3ds_regulators,
|
||||
.num_regulators = ARRAY_SIZE(mx27_3ds_regulators),
|
||||
|
||||
},
|
||||
.flags = MC13XXX_USE_TOUCHSCREEN | MC13XXX_USE_RTC |
|
||||
MC13XXX_USE_CODEC,
|
||||
.codec = &mx27_3ds_codec,
|
||||
};
|
||||
|
||||
static struct imx_ssi_platform_data mx27_3ds_ssi_pdata = {
|
||||
.flags = IMX_SSI_DMA | IMX_SSI_NET,
|
||||
};
|
||||
|
||||
/* SPI */
|
||||
static struct gpiod_lookup_table mx27_spi1_gpiod_table = {
|
||||
.dev_id = "imx27-cspi.0", /* Actual device name for spi1 */
|
||||
.table = {
|
||||
/*
|
||||
* The i.MX27 has the i.MX21 GPIO controller, the SPI1 CS GPIO
|
||||
* SPI1_SS0 is numbered IMX_GPIO_NR(4, 28).
|
||||
*
|
||||
* This is in "bank 4" which is subtracted by one in the macro
|
||||
* so this is actually bank 3 on "imx21-gpio.3".
|
||||
*/
|
||||
GPIO_LOOKUP_IDX("imx21-gpio.3", 28, "cs", 0, GPIO_ACTIVE_LOW),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpiod_lookup_table mx27_spi2_gpiod_table = {
|
||||
.dev_id = "imx27-cspi.1", /* Actual device name for spi2 */
|
||||
.table = {
|
||||
/*
|
||||
* The i.MX27 has the i.MX21 GPIO controller, the SPI2 CS GPIO
|
||||
* SPI2_SS0 is numbered IMX_GPIO_NR(4, 21).
|
||||
*
|
||||
* This is in "bank 4" which is subtracted by one in the macro
|
||||
* so this is actually bank 3 on "imx21-gpio.3".
|
||||
*/
|
||||
GPIO_LOOKUP_IDX("imx21-gpio.3", 21, "cs", 0, GPIO_ACTIVE_LOW),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
static struct imx_fb_videomode mx27_3ds_modes[] = {
|
||||
{ /* 480x640 @ 60 Hz */
|
||||
.mode = {
|
||||
.name = "Epson-VGA",
|
||||
.refresh = 60,
|
||||
.xres = 480,
|
||||
.yres = 640,
|
||||
.pixclock = 41701,
|
||||
.left_margin = 20,
|
||||
.right_margin = 41,
|
||||
.upper_margin = 10,
|
||||
.lower_margin = 5,
|
||||
.hsync_len = 20,
|
||||
.vsync_len = 10,
|
||||
.sync = FB_SYNC_OE_ACT_HIGH |
|
||||
FB_SYNC_CLK_INVERT,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
},
|
||||
.bpp = 16,
|
||||
.pcr = 0xFAC08B82,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct imx_fb_platform_data mx27_3ds_fb_data __initconst = {
|
||||
.mode = mx27_3ds_modes,
|
||||
.num_modes = ARRAY_SIZE(mx27_3ds_modes),
|
||||
.pwmr = 0x00A903FF,
|
||||
.lscr1 = 0x00120300,
|
||||
.dmacr = 0x00020010,
|
||||
};
|
||||
|
||||
/* LCD */
|
||||
static struct gpiod_lookup_table mx27_3ds_lcd_gpiod_table = {
|
||||
.dev_id = "spi0.0", /* Bus 0 chipselect 0 */
|
||||
.table = {
|
||||
/*
|
||||
* The i.MX27 has the i.MX21 GPIO controller, the GPIOs
|
||||
* numbered IMX_GPIO_NR(1, 3) and IMX_GPIO_NR(1, 31)
|
||||
* are in "bank 1" which is subtracted by one in the macro
|
||||
* so these are actually bank 0 on "imx21-gpio.0".
|
||||
*/
|
||||
GPIO_LOOKUP("imx21-gpio.0", 3, "reset", GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP("imx21-gpio.0", 31, "enable", GPIO_ACTIVE_HIGH),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
static struct spi_board_info mx27_3ds_spi_devs[] __initdata = {
|
||||
{
|
||||
.modalias = "mc13783",
|
||||
.max_speed_hz = 1000000,
|
||||
.bus_num = 1,
|
||||
.chip_select = 0, /* SS0 */
|
||||
.platform_data = &mc13783_pdata,
|
||||
/* irq number is run-time assigned */
|
||||
.mode = SPI_CS_HIGH,
|
||||
}, {
|
||||
.modalias = "l4f00242t03",
|
||||
.max_speed_hz = 5000000,
|
||||
.bus_num = 0,
|
||||
.chip_select = 0, /* SS0 */
|
||||
},
|
||||
};
|
||||
|
||||
static const struct imxi2c_platform_data mx27_3ds_i2c0_data __initconst = {
|
||||
.bitrate = 100000,
|
||||
};
|
||||
|
||||
static void __init mx27pdk_init(void)
|
||||
{
|
||||
imx27_soc_init();
|
||||
|
||||
mxc_gpio_setup_multiple_pins(mx27pdk_pins, ARRAY_SIZE(mx27pdk_pins),
|
||||
"mx27pdk");
|
||||
imx27_add_imx_uart0(&uart_pdata);
|
||||
imx27_add_fec(NULL);
|
||||
imx27_add_imx_keypad(&mx27_3ds_keymap_data);
|
||||
imx27_add_imx2_wdt();
|
||||
|
||||
imx27_add_spi_imx1(&mx27_spi2_gpiod_table);
|
||||
imx27_add_spi_imx0(&mx27_spi1_gpiod_table);
|
||||
|
||||
imx27_add_imx_i2c(0, &mx27_3ds_i2c0_data);
|
||||
imx27_add_imx_fb(&mx27_3ds_fb_data);
|
||||
|
||||
imx27_add_imx_ssi(0, &mx27_3ds_ssi_pdata);
|
||||
}
|
||||
|
||||
static void __init mx27pdk_late_init(void)
|
||||
{
|
||||
mx27_3ds_sdhc1_enable_level_translator();
|
||||
imx27_add_mxc_mmc(0, &sdhc1_pdata);
|
||||
|
||||
otg_phy_init();
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
if (!otg_mode_host)
|
||||
imx27_add_fsl_usb2_udc(&otg_device_pdata);
|
||||
|
||||
gpiod_add_lookup_table(&mx27_3ds_lcd_gpiod_table);
|
||||
mx27_3ds_spi_devs[0].irq = gpio_to_irq(PMIC_INT);
|
||||
spi_register_board_info(mx27_3ds_spi_devs,
|
||||
ARRAY_SIZE(mx27_3ds_spi_devs));
|
||||
|
||||
if (mxc_expio_init(MX27_CS5_BASE_ADDR, IMX_GPIO_NR(3, 28)))
|
||||
pr_warn("Init of the debugboard failed, all devices on the debugboard are unusable.\n");
|
||||
|
||||
|
||||
imx_add_platform_device("imx_mc13783", 0, NULL, 0, NULL, 0);
|
||||
}
|
||||
|
||||
static void __init mx27pdk_timer_init(void)
|
||||
{
|
||||
mx27_clocks_init(26000000);
|
||||
}
|
||||
|
||||
MACHINE_START(MX27_3DS, "Freescale MX27PDK")
|
||||
/* maintainer: Freescale Semiconductor, Inc. */
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx27_map_io,
|
||||
.init_early = imx27_init_early,
|
||||
.init_irq = mx27_init_irq,
|
||||
.init_time = mx27pdk_timer_init,
|
||||
.init_machine = mx27pdk_init,
|
||||
.init_late = mx27pdk_late_init,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,407 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2000 Deep Blue Solutions Ltd
|
||||
* Copyright (C) 2002 Shane Nay (shane@minirl.com)
|
||||
* Copyright 2006-2007 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*/
|
||||
#include <linux/gpio/driver.h>
|
||||
/* Needed for gpio_to_irq() */
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#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 <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.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 "hardware.h"
|
||||
#include "iomux-mx27.h"
|
||||
|
||||
/*
|
||||
* Base address of PBC controller, CS4
|
||||
*/
|
||||
#define PBC_BASE_ADDRESS 0xf4300000
|
||||
#define PBC_REG_ADDR(offset) (void __force __iomem *) \
|
||||
(PBC_BASE_ADDRESS + (offset))
|
||||
|
||||
/* When the PBC address connection is fixed in h/w, defined as 1 */
|
||||
#define PBC_ADDR_SH 0
|
||||
|
||||
/* Offsets for the PBC Controller register */
|
||||
/*
|
||||
* PBC Board version register offset
|
||||
*/
|
||||
#define PBC_VERSION_REG PBC_REG_ADDR(0x00000 >> PBC_ADDR_SH)
|
||||
/*
|
||||
* PBC Board control register 1 set address.
|
||||
*/
|
||||
#define PBC_BCTRL1_SET_REG PBC_REG_ADDR(0x00008 >> PBC_ADDR_SH)
|
||||
/*
|
||||
* PBC Board control register 1 clear address.
|
||||
*/
|
||||
#define PBC_BCTRL1_CLEAR_REG PBC_REG_ADDR(0x0000C >> PBC_ADDR_SH)
|
||||
|
||||
/* PBC Board Control Register 1 bit definitions */
|
||||
#define PBC_BCTRL1_LCDON 0x0800 /* Enable the LCD */
|
||||
|
||||
/* to determine the correct external crystal reference */
|
||||
#define CKIH_27MHZ_BIT_SET (1 << 3)
|
||||
|
||||
static const int mx27ads_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,
|
||||
/* UART3 */
|
||||
PB26_AF_UART4_RTS,
|
||||
PB28_AF_UART4_TXD,
|
||||
PB29_AF_UART4_CTS,
|
||||
PB31_AF_UART4_RXD,
|
||||
/* UART4 */
|
||||
PB18_AF_UART5_TXD,
|
||||
PB19_AF_UART5_RXD,
|
||||
PB20_AF_UART5_CTS,
|
||||
PB21_AF_UART5_RTS,
|
||||
/* UART5 */
|
||||
PB10_AF_UART6_TXD,
|
||||
PB12_AF_UART6_CTS,
|
||||
PB11_AF_UART6_RXD,
|
||||
PB13_AF_UART6_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,
|
||||
/* 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,
|
||||
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,
|
||||
/* 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,
|
||||
/* 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
|
||||
mx27ads_nand_board_info __initconst = {
|
||||
.width = 1,
|
||||
.hw_ecc = 1,
|
||||
};
|
||||
|
||||
/* ADS's NOR flash */
|
||||
static struct physmap_flash_data mx27ads_flash_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource mx27ads_flash_resource = {
|
||||
.start = 0xc0000000,
|
||||
.end = 0xc0000000 + 0x02000000 - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
|
||||
};
|
||||
|
||||
static struct platform_device mx27ads_nor_mtd_device = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &mx27ads_flash_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &mx27ads_flash_resource,
|
||||
};
|
||||
|
||||
static const struct imxi2c_platform_data mx27ads_i2c1_data __initconst = {
|
||||
.bitrate = 100000,
|
||||
};
|
||||
|
||||
static struct i2c_board_info mx27ads_i2c_devices[] = {
|
||||
};
|
||||
|
||||
static void vgpio_set(struct gpio_chip *chip, unsigned offset, int value)
|
||||
{
|
||||
if (value)
|
||||
imx_writew(PBC_BCTRL1_LCDON, PBC_BCTRL1_SET_REG);
|
||||
else
|
||||
imx_writew(PBC_BCTRL1_LCDON, PBC_BCTRL1_CLEAR_REG);
|
||||
}
|
||||
|
||||
static int vgpio_dir_out(struct gpio_chip *chip, unsigned offset, int value)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MX27ADS_LCD_GPIO (6 * 32)
|
||||
|
||||
static struct regulator_consumer_supply mx27ads_lcd_regulator_consumer =
|
||||
REGULATOR_SUPPLY("lcd", "imx-fb.0");
|
||||
|
||||
static struct regulator_init_data mx27ads_lcd_regulator_init_data = {
|
||||
.constraints = {
|
||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.consumer_supplies = &mx27ads_lcd_regulator_consumer,
|
||||
.num_consumer_supplies = 1,
|
||||
};
|
||||
|
||||
static struct fixed_voltage_config mx27ads_lcd_regulator_pdata = {
|
||||
.supply_name = "LCD",
|
||||
.microvolts = 3300000,
|
||||
.init_data = &mx27ads_lcd_regulator_init_data,
|
||||
};
|
||||
|
||||
static struct gpiod_lookup_table mx27ads_lcd_regulator_gpiod_table = {
|
||||
.dev_id = "reg-fixed-voltage.0", /* Let's hope ID 0 is what we get */
|
||||
.table = {
|
||||
GPIO_LOOKUP("LCD", 0, NULL, GPIO_ACTIVE_LOW),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
static void __init mx27ads_regulator_init(void)
|
||||
{
|
||||
struct gpio_chip *vchip;
|
||||
|
||||
vchip = kzalloc(sizeof(*vchip), GFP_KERNEL);
|
||||
vchip->owner = THIS_MODULE;
|
||||
vchip->label = "LCD";
|
||||
vchip->base = MX27ADS_LCD_GPIO;
|
||||
vchip->ngpio = 1;
|
||||
vchip->direction_output = vgpio_dir_out;
|
||||
vchip->set = vgpio_set;
|
||||
gpiochip_add_data(vchip, NULL);
|
||||
|
||||
gpiod_add_lookup_table(&mx27ads_lcd_regulator_gpiod_table);
|
||||
|
||||
platform_device_register_data(NULL, "reg-fixed-voltage",
|
||||
PLATFORM_DEVID_AUTO,
|
||||
&mx27ads_lcd_regulator_pdata,
|
||||
sizeof(mx27ads_lcd_regulator_pdata));
|
||||
}
|
||||
|
||||
static struct imx_fb_videomode mx27ads_modes[] = {
|
||||
{
|
||||
.mode = {
|
||||
.name = "Sharp-LQ035Q7",
|
||||
.refresh = 60,
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.pixclock = 188679, /* in ps (5.3MHz) */
|
||||
.hsync_len = 1,
|
||||
.left_margin = 9,
|
||||
.right_margin = 16,
|
||||
.vsync_len = 1,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 9,
|
||||
},
|
||||
.bpp = 16,
|
||||
.pcr = 0xFB008BC0,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct imx_fb_platform_data mx27ads_fb_data __initconst = {
|
||||
.mode = mx27ads_modes,
|
||||
.num_modes = ARRAY_SIZE(mx27ads_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 mx27ads_sdhc1_init(struct device *dev, irq_handler_t detect_irq,
|
||||
void *data)
|
||||
{
|
||||
return request_irq(gpio_to_irq(IMX_GPIO_NR(5, 21)), detect_irq,
|
||||
IRQF_TRIGGER_RISING, "sdhc1-card-detect", data);
|
||||
}
|
||||
|
||||
static int mx27ads_sdhc2_init(struct device *dev, irq_handler_t detect_irq,
|
||||
void *data)
|
||||
{
|
||||
return request_irq(gpio_to_irq(IMX_GPIO_NR(2, 7)), detect_irq,
|
||||
IRQF_TRIGGER_RISING, "sdhc2-card-detect", data);
|
||||
}
|
||||
|
||||
static void mx27ads_sdhc1_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(IMX_GPIO_NR(5, 21)), data);
|
||||
}
|
||||
|
||||
static void mx27ads_sdhc2_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(IMX_GPIO_NR(2, 7)), data);
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data sdhc1_pdata __initconst = {
|
||||
.init = mx27ads_sdhc1_init,
|
||||
.exit = mx27ads_sdhc1_exit,
|
||||
};
|
||||
|
||||
static const struct imxmmc_platform_data sdhc2_pdata __initconst = {
|
||||
.init = mx27ads_sdhc2_init,
|
||||
.exit = mx27ads_sdhc2_exit,
|
||||
};
|
||||
|
||||
static struct platform_device *platform_devices[] __initdata = {
|
||||
&mx27ads_nor_mtd_device,
|
||||
};
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static void __init mx27ads_board_init(void)
|
||||
{
|
||||
imx27_soc_init();
|
||||
|
||||
mxc_gpio_setup_multiple_pins(mx27ads_pins, ARRAY_SIZE(mx27ads_pins),
|
||||
"mx27ads");
|
||||
|
||||
imx27_add_imx_uart0(&uart_pdata);
|
||||
imx27_add_imx_uart1(&uart_pdata);
|
||||
imx27_add_imx_uart2(&uart_pdata);
|
||||
imx27_add_imx_uart3(&uart_pdata);
|
||||
imx27_add_imx_uart4(&uart_pdata);
|
||||
imx27_add_imx_uart5(&uart_pdata);
|
||||
imx27_add_mxc_nand(&mx27ads_nand_board_info);
|
||||
|
||||
/* only the i2c master 1 is used on this CPU card */
|
||||
i2c_register_board_info(1, mx27ads_i2c_devices,
|
||||
ARRAY_SIZE(mx27ads_i2c_devices));
|
||||
imx27_add_imx_i2c(1, &mx27ads_i2c1_data);
|
||||
imx27_add_imx_fb(&mx27ads_fb_data);
|
||||
|
||||
imx27_add_fec(NULL);
|
||||
imx27_add_mxc_w1();
|
||||
}
|
||||
|
||||
static void __init mx27ads_late_init(void)
|
||||
{
|
||||
mx27ads_regulator_init();
|
||||
|
||||
imx27_add_mxc_mmc(0, &sdhc1_pdata);
|
||||
imx27_add_mxc_mmc(1, &sdhc2_pdata);
|
||||
|
||||
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
|
||||
}
|
||||
|
||||
static void __init mx27ads_timer_init(void)
|
||||
{
|
||||
unsigned long fref = 26000000;
|
||||
|
||||
if ((imx_readw(PBC_VERSION_REG) & CKIH_27MHZ_BIT_SET) == 0)
|
||||
fref = 27000000;
|
||||
|
||||
mx27_clocks_init(fref);
|
||||
}
|
||||
|
||||
static struct map_desc mx27ads_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = PBC_BASE_ADDRESS,
|
||||
.pfn = __phys_to_pfn(MX27_CS4_BASE_ADDR),
|
||||
.length = SZ_1M,
|
||||
.type = MT_DEVICE,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init mx27ads_map_io(void)
|
||||
{
|
||||
mx27_map_io();
|
||||
iotable_init(mx27ads_io_desc, ARRAY_SIZE(mx27ads_io_desc));
|
||||
}
|
||||
|
||||
MACHINE_START(MX27ADS, "Freescale i.MX27ADS")
|
||||
/* maintainer: Freescale Semiconductor, Inc. */
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx27ads_map_io,
|
||||
.init_early = imx27_init_early,
|
||||
.init_irq = mx27_init_irq,
|
||||
.init_time = mx27ads_timer_init,
|
||||
.init_machine = mx27ads_board_init,
|
||||
.init_late = mx27ads_late_init,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,615 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright 2008 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mfd/mc13783.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/regulator/machine.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/memory.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "3ds_debugboard.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
static int mx31_3ds_pins[] = {
|
||||
/* UART1 */
|
||||
MX31_PIN_CTS1__CTS1,
|
||||
MX31_PIN_RTS1__RTS1,
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1,
|
||||
IOMUX_MODE(MX31_PIN_GPIO1_1, IOMUX_CONFIG_GPIO),
|
||||
/*SPI0*/
|
||||
IOMUX_MODE(MX31_PIN_DSR_DCE1, IOMUX_CONFIG_ALT1),
|
||||
IOMUX_MODE(MX31_PIN_RI_DCE1, IOMUX_CONFIG_ALT1),
|
||||
/* SPI 1 */
|
||||
MX31_PIN_CSPI2_SCLK__SCLK,
|
||||
MX31_PIN_CSPI2_MOSI__MOSI,
|
||||
MX31_PIN_CSPI2_MISO__MISO,
|
||||
MX31_PIN_CSPI2_SPI_RDY__SPI_RDY,
|
||||
MX31_PIN_CSPI2_SS0__SS0,
|
||||
MX31_PIN_CSPI2_SS2__SS2, /*CS for MC13783 */
|
||||
/* MC13783 IRQ */
|
||||
IOMUX_MODE(MX31_PIN_GPIO1_3, IOMUX_CONFIG_GPIO),
|
||||
/* USB OTG reset */
|
||||
IOMUX_MODE(MX31_PIN_USB_PWR, IOMUX_CONFIG_GPIO),
|
||||
/* USB OTG */
|
||||
MX31_PIN_USBOTG_DATA0__USBOTG_DATA0,
|
||||
MX31_PIN_USBOTG_DATA1__USBOTG_DATA1,
|
||||
MX31_PIN_USBOTG_DATA2__USBOTG_DATA2,
|
||||
MX31_PIN_USBOTG_DATA3__USBOTG_DATA3,
|
||||
MX31_PIN_USBOTG_DATA4__USBOTG_DATA4,
|
||||
MX31_PIN_USBOTG_DATA5__USBOTG_DATA5,
|
||||
MX31_PIN_USBOTG_DATA6__USBOTG_DATA6,
|
||||
MX31_PIN_USBOTG_DATA7__USBOTG_DATA7,
|
||||
MX31_PIN_USBOTG_CLK__USBOTG_CLK,
|
||||
MX31_PIN_USBOTG_DIR__USBOTG_DIR,
|
||||
MX31_PIN_USBOTG_NXT__USBOTG_NXT,
|
||||
MX31_PIN_USBOTG_STP__USBOTG_STP,
|
||||
/*Keyboard*/
|
||||
MX31_PIN_KEY_ROW0_KEY_ROW0,
|
||||
MX31_PIN_KEY_ROW1_KEY_ROW1,
|
||||
MX31_PIN_KEY_ROW2_KEY_ROW2,
|
||||
MX31_PIN_KEY_COL0_KEY_COL0,
|
||||
MX31_PIN_KEY_COL1_KEY_COL1,
|
||||
MX31_PIN_KEY_COL2_KEY_COL2,
|
||||
MX31_PIN_KEY_COL3_KEY_COL3,
|
||||
/* USB Host 2 */
|
||||
IOMUX_MODE(MX31_PIN_USBH2_CLK, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_DIR, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_NXT, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_STP, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_DATA0, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_DATA1, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_PC_VS2, IOMUX_CONFIG_ALT1),
|
||||
IOMUX_MODE(MX31_PIN_PC_BVD1, IOMUX_CONFIG_ALT1),
|
||||
IOMUX_MODE(MX31_PIN_PC_BVD2, IOMUX_CONFIG_ALT1),
|
||||
IOMUX_MODE(MX31_PIN_PC_RST, IOMUX_CONFIG_ALT1),
|
||||
IOMUX_MODE(MX31_PIN_IOIS16, IOMUX_CONFIG_ALT1),
|
||||
IOMUX_MODE(MX31_PIN_PC_RW_B, IOMUX_CONFIG_ALT1),
|
||||
/* USB Host2 reset */
|
||||
IOMUX_MODE(MX31_PIN_USB_BYP, IOMUX_CONFIG_GPIO),
|
||||
/* I2C1 */
|
||||
MX31_PIN_I2C_CLK__I2C1_SCL,
|
||||
MX31_PIN_I2C_DAT__I2C1_SDA,
|
||||
/* SDHC1 */
|
||||
MX31_PIN_SD1_DATA3__SD1_DATA3,
|
||||
MX31_PIN_SD1_DATA2__SD1_DATA2,
|
||||
MX31_PIN_SD1_DATA1__SD1_DATA1,
|
||||
MX31_PIN_SD1_DATA0__SD1_DATA0,
|
||||
MX31_PIN_SD1_CLK__SD1_CLK,
|
||||
MX31_PIN_SD1_CMD__SD1_CMD,
|
||||
MX31_PIN_GPIO3_1__GPIO3_1, /* Card detect */
|
||||
MX31_PIN_GPIO3_0__GPIO3_0, /* OE */
|
||||
/* Framebuffer */
|
||||
MX31_PIN_LD0__LD0,
|
||||
MX31_PIN_LD1__LD1,
|
||||
MX31_PIN_LD2__LD2,
|
||||
MX31_PIN_LD3__LD3,
|
||||
MX31_PIN_LD4__LD4,
|
||||
MX31_PIN_LD5__LD5,
|
||||
MX31_PIN_LD6__LD6,
|
||||
MX31_PIN_LD7__LD7,
|
||||
MX31_PIN_LD8__LD8,
|
||||
MX31_PIN_LD9__LD9,
|
||||
MX31_PIN_LD10__LD10,
|
||||
MX31_PIN_LD11__LD11,
|
||||
MX31_PIN_LD12__LD12,
|
||||
MX31_PIN_LD13__LD13,
|
||||
MX31_PIN_LD14__LD14,
|
||||
MX31_PIN_LD15__LD15,
|
||||
MX31_PIN_LD16__LD16,
|
||||
MX31_PIN_LD17__LD17,
|
||||
MX31_PIN_VSYNC3__VSYNC3,
|
||||
MX31_PIN_HSYNC__HSYNC,
|
||||
MX31_PIN_FPSHIFT__FPSHIFT,
|
||||
MX31_PIN_CONTRAST__CONTRAST,
|
||||
/* SSI */
|
||||
MX31_PIN_STXD4__STXD4,
|
||||
MX31_PIN_SRXD4__SRXD4,
|
||||
MX31_PIN_SCK4__SCK4,
|
||||
MX31_PIN_SFS4__SFS4,
|
||||
};
|
||||
|
||||
/*
|
||||
* FB support
|
||||
*/
|
||||
static const struct fb_videomode fb_modedb[] = {
|
||||
{ /* 480x640 @ 60 Hz */
|
||||
.name = "Epson-VGA",
|
||||
.refresh = 60,
|
||||
.xres = 480,
|
||||
.yres = 640,
|
||||
.pixclock = 41701,
|
||||
.left_margin = 20,
|
||||
.right_margin = 41,
|
||||
.upper_margin = 10,
|
||||
.lower_margin = 5,
|
||||
.hsync_len = 20,
|
||||
.vsync_len = 10,
|
||||
.sync = FB_SYNC_OE_ACT_HIGH | FB_SYNC_CLK_INVERT,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct mx3fb_platform_data mx3fb_pdata __initdata = {
|
||||
.name = "Epson-VGA",
|
||||
.mode = fb_modedb,
|
||||
.num_modes = ARRAY_SIZE(fb_modedb),
|
||||
};
|
||||
|
||||
/* LCD */
|
||||
static struct gpiod_lookup_table mx31_3ds_lcd_gpiod_table = {
|
||||
.dev_id = "spi0.2", /* Bus 0 chipselect 2 */
|
||||
.table = {
|
||||
/*
|
||||
* "reset" has IOMUX_TO_GPIO(IOMUX_PIN(88, 28)).
|
||||
* The macro only shifts 88 to bits 9..16 and then
|
||||
* mask it and shift it back. The GPIO number is 88.
|
||||
* 88 is 2*32+24
|
||||
*/
|
||||
GPIO_LOOKUP("imx31-gpio.2", 24, "reset", GPIO_ACTIVE_HIGH),
|
||||
/*
|
||||
* Same reasoning as above for
|
||||
* IOMUX_TO_GPIO(IOMUX_PIN(89, 27), pin 89 is 2*32+25.
|
||||
*/
|
||||
GPIO_LOOKUP("imx31-gpio.2", 25, "enable", GPIO_ACTIVE_HIGH),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* Support for SD card slot in personality board
|
||||
*/
|
||||
#define MX31_3DS_GPIO_SDHC1_CD IOMUX_TO_GPIO(MX31_PIN_GPIO3_1)
|
||||
#define MX31_3DS_GPIO_SDHC1_BE IOMUX_TO_GPIO(MX31_PIN_GPIO3_0)
|
||||
|
||||
static struct gpio mx31_3ds_sdhc1_gpios[] = {
|
||||
{ MX31_3DS_GPIO_SDHC1_CD, GPIOF_IN, "sdhc1-card-detect" },
|
||||
{ MX31_3DS_GPIO_SDHC1_BE, GPIOF_OUT_INIT_LOW, "sdhc1-bus-en" },
|
||||
};
|
||||
|
||||
static int mx31_3ds_sdhc1_init(struct device *dev,
|
||||
irq_handler_t detect_irq,
|
||||
void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request_array(mx31_3ds_sdhc1_gpios,
|
||||
ARRAY_SIZE(mx31_3ds_sdhc1_gpios));
|
||||
if (ret) {
|
||||
pr_warn("Unable to request the SD/MMC GPIOs.\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = request_irq(gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1)),
|
||||
detect_irq,
|
||||
IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
|
||||
"sdhc1-detect", data);
|
||||
if (ret) {
|
||||
pr_warn("Unable to request the SD/MMC card-detect IRQ.\n");
|
||||
goto gpio_free;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
gpio_free:
|
||||
gpio_free_array(mx31_3ds_sdhc1_gpios,
|
||||
ARRAY_SIZE(mx31_3ds_sdhc1_gpios));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void mx31_3ds_sdhc1_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1)), data);
|
||||
gpio_free_array(mx31_3ds_sdhc1_gpios,
|
||||
ARRAY_SIZE(mx31_3ds_sdhc1_gpios));
|
||||
}
|
||||
|
||||
static void mx31_3ds_sdhc1_setpower(struct device *dev, unsigned int vdd)
|
||||
{
|
||||
/*
|
||||
* While the voltage stuff is done by the driver, activate the
|
||||
* Buffer Enable Pin only if there is a card in slot to fix the card
|
||||
* voltage issue caused by bi-directional chip TXB0108 on 3Stack.
|
||||
* Done here because at this stage we have for sure a debounced value
|
||||
* of the presence of the card, showed by the value of vdd.
|
||||
* 7 == ilog2(MMC_VDD_165_195)
|
||||
*/
|
||||
if (vdd > 7)
|
||||
gpio_set_value(MX31_3DS_GPIO_SDHC1_BE, 1);
|
||||
else
|
||||
gpio_set_value(MX31_3DS_GPIO_SDHC1_BE, 0);
|
||||
}
|
||||
|
||||
static struct imxmmc_platform_data sdhc1_pdata = {
|
||||
.init = mx31_3ds_sdhc1_init,
|
||||
.exit = mx31_3ds_sdhc1_exit,
|
||||
.setpower = mx31_3ds_sdhc1_setpower,
|
||||
};
|
||||
|
||||
/*
|
||||
* Matrix keyboard
|
||||
*/
|
||||
|
||||
static const uint32_t mx31_3ds_keymap[] = {
|
||||
KEY(0, 0, KEY_UP),
|
||||
KEY(0, 1, KEY_DOWN),
|
||||
KEY(1, 0, KEY_RIGHT),
|
||||
KEY(1, 1, KEY_LEFT),
|
||||
KEY(1, 2, KEY_ENTER),
|
||||
KEY(2, 0, KEY_F6),
|
||||
KEY(2, 1, KEY_F8),
|
||||
KEY(2, 2, KEY_F9),
|
||||
KEY(2, 3, KEY_F10),
|
||||
};
|
||||
|
||||
static const struct matrix_keymap_data mx31_3ds_keymap_data __initconst = {
|
||||
.keymap = mx31_3ds_keymap,
|
||||
.keymap_size = ARRAY_SIZE(mx31_3ds_keymap),
|
||||
};
|
||||
|
||||
/* Regulators */
|
||||
static struct regulator_init_data pwgtx_init = {
|
||||
.constraints = {
|
||||
.boot_on = 1,
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_init_data gpo_init = {
|
||||
.constraints = {
|
||||
.boot_on = 1,
|
||||
.always_on = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply vmmc2_consumers[] = {
|
||||
REGULATOR_SUPPLY("vmmc", "imx31-mmc.0"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data vmmc2_init = {
|
||||
.constraints = {
|
||||
.min_uV = 3000000,
|
||||
.max_uV = 3000000,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(vmmc2_consumers),
|
||||
.consumer_supplies = vmmc2_consumers,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply vmmc1_consumers[] = {
|
||||
REGULATOR_SUPPLY("vcore", "spi0.0"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data vmmc1_init = {
|
||||
.constraints = {
|
||||
.min_uV = 2800000,
|
||||
.max_uV = 2800000,
|
||||
.apply_uV = 1,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(vmmc1_consumers),
|
||||
.consumer_supplies = vmmc1_consumers,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply vgen_consumers[] = {
|
||||
REGULATOR_SUPPLY("vdd", "spi0.0"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data vgen_init = {
|
||||
.constraints = {
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.apply_uV = 1,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(vgen_consumers),
|
||||
.consumer_supplies = vgen_consumers,
|
||||
};
|
||||
|
||||
static struct mc13xxx_regulator_init_data mx31_3ds_regulators[] = {
|
||||
{
|
||||
.id = MC13783_REG_PWGT1SPI, /* Power Gate for ARM core. */
|
||||
.init_data = &pwgtx_init,
|
||||
}, {
|
||||
.id = MC13783_REG_PWGT2SPI, /* Power Gate for L2 Cache. */
|
||||
.init_data = &pwgtx_init,
|
||||
}, {
|
||||
|
||||
.id = MC13783_REG_GPO1, /* Turn on 1.8V */
|
||||
.init_data = &gpo_init,
|
||||
}, {
|
||||
.id = MC13783_REG_GPO3, /* Turn on 3.3V */
|
||||
.init_data = &gpo_init,
|
||||
}, {
|
||||
.id = MC13783_REG_VMMC2, /* Power MMC/SD, WiFi/Bluetooth. */
|
||||
.init_data = &vmmc2_init,
|
||||
}, {
|
||||
.id = MC13783_REG_VMMC1, /* Power LCD, CMOS, FM, GPS, Accel. */
|
||||
.init_data = &vmmc1_init,
|
||||
}, {
|
||||
.id = MC13783_REG_VGEN, /* Power LCD */
|
||||
.init_data = &vgen_init,
|
||||
},
|
||||
};
|
||||
|
||||
/* MC13783 */
|
||||
static struct mc13xxx_codec_platform_data mx31_3ds_codec = {
|
||||
.dac_ssi_port = MC13783_SSI1_PORT,
|
||||
.adc_ssi_port = MC13783_SSI1_PORT,
|
||||
};
|
||||
|
||||
static struct mc13xxx_platform_data mc13783_pdata = {
|
||||
.regulators = {
|
||||
.regulators = mx31_3ds_regulators,
|
||||
.num_regulators = ARRAY_SIZE(mx31_3ds_regulators),
|
||||
},
|
||||
.codec = &mx31_3ds_codec,
|
||||
.flags = MC13XXX_USE_TOUCHSCREEN | MC13XXX_USE_RTC | MC13XXX_USE_CODEC,
|
||||
|
||||
};
|
||||
|
||||
static struct imx_ssi_platform_data mx31_3ds_ssi_pdata = {
|
||||
.flags = IMX_SSI_DMA | IMX_SSI_NET,
|
||||
};
|
||||
|
||||
static struct spi_board_info mx31_3ds_spi_devs[] __initdata = {
|
||||
{
|
||||
.modalias = "mc13783",
|
||||
.max_speed_hz = 1000000,
|
||||
.bus_num = 1,
|
||||
.chip_select = 2, /* SS2 */
|
||||
.platform_data = &mc13783_pdata,
|
||||
/* irq number is run-time assigned */
|
||||
.mode = SPI_CS_HIGH,
|
||||
}, {
|
||||
.modalias = "l4f00242t03",
|
||||
.max_speed_hz = 5000000,
|
||||
.bus_num = 0,
|
||||
.chip_select = 2, /* SS2 */
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* NAND Flash
|
||||
*/
|
||||
static const struct mxc_nand_platform_data
|
||||
mx31_3ds_nand_board_info __initconst = {
|
||||
.width = 1,
|
||||
.hw_ecc = 1,
|
||||
#ifdef CONFIG_MACH_MX31_3DS_MXC_NAND_USE_BBT
|
||||
.flash_bbt = 1,
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
* USB OTG
|
||||
*/
|
||||
|
||||
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||
|
||||
#define USBOTG_RST_B IOMUX_TO_GPIO(MX31_PIN_USB_PWR)
|
||||
#define USBH2_RST_B IOMUX_TO_GPIO(MX31_PIN_USB_BYP)
|
||||
|
||||
static int mx31_3ds_usbotg_init(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA2, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA4, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA5, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA7, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_CLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DIR, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_NXT, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_STP, USB_PAD_CFG);
|
||||
|
||||
err = gpio_request(USBOTG_RST_B, "otgusb-reset");
|
||||
if (err) {
|
||||
pr_err("Failed to request the USB OTG reset gpio\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
err = gpio_direction_output(USBOTG_RST_B, 0);
|
||||
if (err) {
|
||||
pr_err("Failed to drive the USB OTG reset gpio\n");
|
||||
goto usbotg_free_reset;
|
||||
}
|
||||
|
||||
mdelay(1);
|
||||
gpio_set_value(USBOTG_RST_B, 1);
|
||||
return 0;
|
||||
|
||||
usbotg_free_reset:
|
||||
gpio_free(USBOTG_RST_B);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int mx31_3ds_otg_init(struct platform_device *pdev)
|
||||
{
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
|
||||
}
|
||||
|
||||
static int mx31_3ds_host2_init(struct platform_device *pdev)
|
||||
{
|
||||
int err;
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_CLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DIR, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_NXT, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_STP, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_PC_VS2, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_PC_BVD1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_PC_BVD2, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_PC_RST, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_IOIS16, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_PC_RW_B, USB_PAD_CFG);
|
||||
|
||||
err = gpio_request(USBH2_RST_B, "usbh2-reset");
|
||||
if (err) {
|
||||
pr_err("Failed to request the USB Host 2 reset gpio\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
err = gpio_direction_output(USBH2_RST_B, 0);
|
||||
if (err) {
|
||||
pr_err("Failed to drive the USB Host 2 reset gpio\n");
|
||||
goto usbotg_free_reset;
|
||||
}
|
||||
|
||||
mdelay(1);
|
||||
gpio_set_value(USBH2_RST_B, 1);
|
||||
|
||||
mdelay(10);
|
||||
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
|
||||
|
||||
usbotg_free_reset:
|
||||
gpio_free(USBH2_RST_B);
|
||||
return err;
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data otg_pdata __initdata = {
|
||||
.init = mx31_3ds_otg_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI,
|
||||
};
|
||||
|
||||
static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
|
||||
.init = mx31_3ds_host2_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI,
|
||||
};
|
||||
|
||||
static const struct fsl_usb2_platform_data usbotg_pdata __initconst = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_ULPI,
|
||||
};
|
||||
|
||||
static bool otg_mode_host __initdata;
|
||||
|
||||
static int __init mx31_3ds_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=", mx31_3ds_otg_mode);
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static const struct imxi2c_platform_data mx31_3ds_i2c0_data __initconst = {
|
||||
.bitrate = 100000,
|
||||
};
|
||||
|
||||
static void __init mx31_3ds_init(void)
|
||||
{
|
||||
imx31_soc_init();
|
||||
|
||||
/* Configure SPI1 IOMUX */
|
||||
mxc_iomux_set_gpr(MUX_PGP_CSPI_BB, true);
|
||||
|
||||
mxc_iomux_setup_multiple_pins(mx31_3ds_pins, ARRAY_SIZE(mx31_3ds_pins),
|
||||
"mx31_3ds");
|
||||
|
||||
imx31_add_imx_uart0(&uart_pdata);
|
||||
imx31_add_mxc_nand(&mx31_3ds_nand_board_info);
|
||||
|
||||
imx31_add_spi_imx1(NULL);
|
||||
|
||||
imx31_add_imx_keypad(&mx31_3ds_keymap_data);
|
||||
|
||||
imx31_add_imx2_wdt();
|
||||
imx31_add_imx_i2c0(&mx31_3ds_i2c0_data);
|
||||
|
||||
imx31_add_spi_imx0(NULL);
|
||||
imx31_add_ipu_core();
|
||||
imx31_add_mx3_sdc_fb(&mx3fb_pdata);
|
||||
|
||||
imx31_add_imx_ssi(0, &mx31_3ds_ssi_pdata);
|
||||
|
||||
imx_add_platform_device("imx_mc13783", 0, NULL, 0, NULL, 0);
|
||||
}
|
||||
|
||||
static void __init mx31_3ds_late(void)
|
||||
{
|
||||
gpiod_add_lookup_table(&mx31_3ds_lcd_gpiod_table);
|
||||
mx31_3ds_spi_devs[0].irq = gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_3));
|
||||
spi_register_board_info(mx31_3ds_spi_devs,
|
||||
ARRAY_SIZE(mx31_3ds_spi_devs));
|
||||
|
||||
mx31_3ds_usbotg_init();
|
||||
if (otg_mode_host) {
|
||||
otg_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
|
||||
ULPI_OTG_DRVVBUS_EXT);
|
||||
if (otg_pdata.otg)
|
||||
imx31_add_mxc_ehci_otg(&otg_pdata);
|
||||
}
|
||||
usbh2_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
|
||||
ULPI_OTG_DRVVBUS_EXT);
|
||||
if (usbh2_pdata.otg)
|
||||
imx31_add_mxc_ehci_hs(2, &usbh2_pdata);
|
||||
|
||||
if (!otg_mode_host)
|
||||
imx31_add_fsl_usb2_udc(&usbotg_pdata);
|
||||
|
||||
if (mxc_expio_init(MX31_CS5_BASE_ADDR, IOMUX_TO_GPIO(MX31_PIN_GPIO1_1)))
|
||||
printk(KERN_WARNING "Init of the debug board failed, all "
|
||||
"devices on the debug board are unusable.\n");
|
||||
|
||||
imx31_add_mxc_mmc(0, &sdhc1_pdata);
|
||||
}
|
||||
|
||||
static void __init mx31_3ds_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
MACHINE_START(MX31_3DS, "Freescale MX31PDK (3DS)")
|
||||
/* Maintainer: Freescale Semiconductor, Inc. */
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx31_map_io,
|
||||
.init_early = imx31_init_early,
|
||||
.init_irq = mx31_init_irq,
|
||||
.init_time = mx31_3ds_timer_init,
|
||||
.init_machine = mx31_3ds_init,
|
||||
.init_late = mx31_3ds_late,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,579 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2000 Deep Blue Solutions Ltd
|
||||
* Copyright (C) 2002 Shane Nay (shane@minirl.com)
|
||||
* Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/serial_8250.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/irqdomain.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/memory.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#ifdef CONFIG_MACH_MX31ADS_WM1133_EV1
|
||||
#include <linux/mfd/wm8350/audio.h>
|
||||
#include <linux/mfd/wm8350/core.h>
|
||||
#include <linux/mfd/wm8350/pmic.h>
|
||||
#endif
|
||||
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
|
||||
/* Base address of PBC controller */
|
||||
#define PBC_BASE_ADDRESS MX31_CS4_BASE_ADDR_VIRT
|
||||
|
||||
/* PBC Board interrupt status register */
|
||||
#define PBC_INTSTATUS 0x000016
|
||||
|
||||
/* PBC Board interrupt current status register */
|
||||
#define PBC_INTCURR_STATUS 0x000018
|
||||
|
||||
/* PBC Interrupt mask register set address */
|
||||
#define PBC_INTMASK_SET 0x00001A
|
||||
|
||||
/* PBC Interrupt mask register clear address */
|
||||
#define PBC_INTMASK_CLEAR 0x00001C
|
||||
|
||||
/* External UART A */
|
||||
#define PBC_SC16C652_UARTA 0x010000
|
||||
|
||||
/* External UART B */
|
||||
#define PBC_SC16C652_UARTB 0x010010
|
||||
|
||||
#define PBC_INTSTATUS_REG (PBC_INTSTATUS + PBC_BASE_ADDRESS)
|
||||
#define PBC_INTMASK_SET_REG (PBC_INTMASK_SET + PBC_BASE_ADDRESS)
|
||||
#define PBC_INTMASK_CLEAR_REG (PBC_INTMASK_CLEAR + PBC_BASE_ADDRESS)
|
||||
|
||||
#define EXPIO_INT_XUART_INTA 10
|
||||
#define EXPIO_INT_XUART_INTB 11
|
||||
|
||||
#define MXC_MAX_EXP_IO_LINES 16
|
||||
|
||||
/* CS8900 */
|
||||
#define EXPIO_INT_ENET_INT 8
|
||||
#define CS4_CS8900_MMIO_START 0x20000
|
||||
|
||||
static struct irq_domain *domain;
|
||||
|
||||
/*
|
||||
* The serial port definition structure.
|
||||
*/
|
||||
static struct plat_serial8250_port serial_platform_data[] = {
|
||||
{
|
||||
.membase = (void *)(PBC_BASE_ADDRESS + PBC_SC16C652_UARTA),
|
||||
.mapbase = (unsigned long)(MX31_CS4_BASE_ADDR + PBC_SC16C652_UARTA),
|
||||
.uartclk = 14745600,
|
||||
.regshift = 0,
|
||||
.iotype = UPIO_MEM,
|
||||
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ,
|
||||
}, {
|
||||
.membase = (void *)(PBC_BASE_ADDRESS + PBC_SC16C652_UARTB),
|
||||
.mapbase = (unsigned long)(MX31_CS4_BASE_ADDR + PBC_SC16C652_UARTB),
|
||||
.uartclk = 14745600,
|
||||
.regshift = 0,
|
||||
.iotype = UPIO_MEM,
|
||||
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ,
|
||||
},
|
||||
{},
|
||||
};
|
||||
|
||||
static struct platform_device serial_device = {
|
||||
.name = "serial8250",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = serial_platform_data,
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource mx31ads_cs8900_resources[] __initdata = {
|
||||
DEFINE_RES_MEM(MX31_CS4_BASE_ADDR + CS4_CS8900_MMIO_START, SZ_64K),
|
||||
DEFINE_RES_IRQ(-1),
|
||||
};
|
||||
|
||||
static const struct platform_device_info mx31ads_cs8900_devinfo __initconst = {
|
||||
.name = "cs89x0",
|
||||
.id = 0,
|
||||
.res = mx31ads_cs8900_resources,
|
||||
.num_res = ARRAY_SIZE(mx31ads_cs8900_resources),
|
||||
};
|
||||
|
||||
static int __init mxc_init_extuart(void)
|
||||
{
|
||||
serial_platform_data[0].irq = irq_find_mapping(domain,
|
||||
EXPIO_INT_XUART_INTA);
|
||||
serial_platform_data[1].irq = irq_find_mapping(domain,
|
||||
EXPIO_INT_XUART_INTB);
|
||||
return platform_device_register(&serial_device);
|
||||
}
|
||||
|
||||
static void __init mxc_init_ext_ethernet(void)
|
||||
{
|
||||
mx31ads_cs8900_resources[1].start =
|
||||
irq_find_mapping(domain, EXPIO_INT_ENET_INT);
|
||||
mx31ads_cs8900_resources[1].end =
|
||||
irq_find_mapping(domain, EXPIO_INT_ENET_INT);
|
||||
platform_device_register_full(
|
||||
(struct platform_device_info *)&mx31ads_cs8900_devinfo);
|
||||
}
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static unsigned int uart_pins[] = {
|
||||
MX31_PIN_CTS1__CTS1,
|
||||
MX31_PIN_RTS1__RTS1,
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1
|
||||
};
|
||||
|
||||
static inline void mxc_init_imx_uart(void)
|
||||
{
|
||||
mxc_iomux_setup_multiple_pins(uart_pins, ARRAY_SIZE(uart_pins), "uart-0");
|
||||
imx31_add_imx_uart0(&uart_pdata);
|
||||
}
|
||||
|
||||
static void mx31ads_expio_irq_handler(struct irq_desc *desc)
|
||||
{
|
||||
u32 imr_val;
|
||||
u32 int_valid;
|
||||
u32 expio_irq;
|
||||
|
||||
imr_val = imx_readw(PBC_INTMASK_SET_REG);
|
||||
int_valid = imx_readw(PBC_INTSTATUS_REG) & imr_val;
|
||||
|
||||
expio_irq = 0;
|
||||
for (; int_valid != 0; int_valid >>= 1, expio_irq++) {
|
||||
if ((int_valid & 1) == 0)
|
||||
continue;
|
||||
|
||||
generic_handle_irq(irq_find_mapping(domain, expio_irq));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Disable an expio pin's interrupt by setting the bit in the imr.
|
||||
* @param d an expio virtual irq description
|
||||
*/
|
||||
static void expio_mask_irq(struct irq_data *d)
|
||||
{
|
||||
u32 expio = d->hwirq;
|
||||
/* mask the interrupt */
|
||||
imx_writew(1 << expio, PBC_INTMASK_CLEAR_REG);
|
||||
imx_readw(PBC_INTMASK_CLEAR_REG);
|
||||
}
|
||||
|
||||
/*
|
||||
* Acknowledge an expanded io pin's interrupt by clearing the bit in the isr.
|
||||
* @param d an expio virtual irq description
|
||||
*/
|
||||
static void expio_ack_irq(struct irq_data *d)
|
||||
{
|
||||
u32 expio = d->hwirq;
|
||||
/* clear the interrupt status */
|
||||
imx_writew(1 << expio, PBC_INTSTATUS_REG);
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable a expio pin's interrupt by clearing the bit in the imr.
|
||||
* @param d an expio virtual irq description
|
||||
*/
|
||||
static void expio_unmask_irq(struct irq_data *d)
|
||||
{
|
||||
u32 expio = d->hwirq;
|
||||
/* unmask the interrupt */
|
||||
imx_writew(1 << expio, PBC_INTMASK_SET_REG);
|
||||
}
|
||||
|
||||
static struct irq_chip expio_irq_chip = {
|
||||
.name = "EXPIO(CPLD)",
|
||||
.irq_ack = expio_ack_irq,
|
||||
.irq_mask = expio_mask_irq,
|
||||
.irq_unmask = expio_unmask_irq,
|
||||
};
|
||||
|
||||
static void __init mx31ads_init_expio(void)
|
||||
{
|
||||
int irq_base;
|
||||
int i, irq;
|
||||
|
||||
printk(KERN_INFO "MX31ADS EXPIO(CPLD) hardware\n");
|
||||
|
||||
/*
|
||||
* Configure INT line as GPIO input
|
||||
*/
|
||||
mxc_iomux_alloc_pin(IOMUX_MODE(MX31_PIN_GPIO1_4, IOMUX_CONFIG_GPIO), "expio");
|
||||
|
||||
/* disable the interrupt and clear the status */
|
||||
imx_writew(0xFFFF, PBC_INTMASK_CLEAR_REG);
|
||||
imx_writew(0xFFFF, PBC_INTSTATUS_REG);
|
||||
|
||||
irq_base = irq_alloc_descs(-1, 0, MXC_MAX_EXP_IO_LINES, numa_node_id());
|
||||
WARN_ON(irq_base < 0);
|
||||
|
||||
domain = irq_domain_add_legacy(NULL, MXC_MAX_EXP_IO_LINES, irq_base, 0,
|
||||
&irq_domain_simple_ops, NULL);
|
||||
WARN_ON(!domain);
|
||||
|
||||
for (i = irq_base; i < irq_base + MXC_MAX_EXP_IO_LINES; i++) {
|
||||
irq_set_chip_and_handler(i, &expio_irq_chip, handle_level_irq);
|
||||
irq_clear_status_flags(i, IRQ_NOREQUEST);
|
||||
}
|
||||
irq = gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_4));
|
||||
irq_set_irq_type(irq, IRQ_TYPE_LEVEL_HIGH);
|
||||
irq_set_chained_handler(irq, mx31ads_expio_irq_handler);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MACH_MX31ADS_WM1133_EV1
|
||||
/* This section defines setup for the Wolfson Microelectronics
|
||||
* 1133-EV1 PMU/audio board. When other PMU boards are supported the
|
||||
* regulator definitions may be shared with them, but for now they can
|
||||
* only be used with this board so would generate warnings about
|
||||
* unused statics and some of the configuration is specific to this
|
||||
* module.
|
||||
*/
|
||||
|
||||
/* CPU */
|
||||
static struct regulator_consumer_supply sw1a_consumers[] = {
|
||||
{
|
||||
.supply = "cpu_vcc",
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data sw1a_data = {
|
||||
.constraints = {
|
||||
.name = "SW1A",
|
||||
.min_uV = 1275000,
|
||||
.max_uV = 1600000,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_MODE,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL |
|
||||
REGULATOR_MODE_FAST,
|
||||
.state_mem = {
|
||||
.uV = 1400000,
|
||||
.mode = REGULATOR_MODE_NORMAL,
|
||||
.enabled = 1,
|
||||
},
|
||||
.initial_state = PM_SUSPEND_MEM,
|
||||
.always_on = 1,
|
||||
.boot_on = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(sw1a_consumers),
|
||||
.consumer_supplies = sw1a_consumers,
|
||||
};
|
||||
|
||||
/* System IO - High */
|
||||
static struct regulator_init_data viohi_data = {
|
||||
.constraints = {
|
||||
.name = "VIOHO",
|
||||
.min_uV = 2800000,
|
||||
.max_uV = 2800000,
|
||||
.state_mem = {
|
||||
.uV = 2800000,
|
||||
.mode = REGULATOR_MODE_NORMAL,
|
||||
.enabled = 1,
|
||||
},
|
||||
.initial_state = PM_SUSPEND_MEM,
|
||||
.always_on = 1,
|
||||
.boot_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* System IO - Low */
|
||||
static struct regulator_init_data violo_data = {
|
||||
.constraints = {
|
||||
.name = "VIOLO",
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.state_mem = {
|
||||
.uV = 1800000,
|
||||
.mode = REGULATOR_MODE_NORMAL,
|
||||
.enabled = 1,
|
||||
},
|
||||
.initial_state = PM_SUSPEND_MEM,
|
||||
.always_on = 1,
|
||||
.boot_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* DDR RAM */
|
||||
static struct regulator_init_data sw2a_data = {
|
||||
.constraints = {
|
||||
.name = "SW2A",
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||
.state_mem = {
|
||||
.uV = 1800000,
|
||||
.mode = REGULATOR_MODE_NORMAL,
|
||||
.enabled = 1,
|
||||
},
|
||||
.state_disk = {
|
||||
.mode = REGULATOR_MODE_NORMAL,
|
||||
.enabled = 0,
|
||||
},
|
||||
.always_on = 1,
|
||||
.boot_on = 1,
|
||||
.initial_state = PM_SUSPEND_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_init_data ldo1_data = {
|
||||
.constraints = {
|
||||
.name = "VCAM/VMMC1/VMMC2",
|
||||
.min_uV = 2800000,
|
||||
.max_uV = 2800000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
.apply_uV = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply ldo2_consumers[] = {
|
||||
{ .supply = "AVDD", .dev_name = "1-001a" },
|
||||
{ .supply = "HPVDD", .dev_name = "1-001a" },
|
||||
};
|
||||
|
||||
/* CODEC and SIM */
|
||||
static struct regulator_init_data ldo2_data = {
|
||||
.constraints = {
|
||||
.name = "VESIM/VSIM/AVDD",
|
||||
.min_uV = 3300000,
|
||||
.max_uV = 3300000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
.apply_uV = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(ldo2_consumers),
|
||||
.consumer_supplies = ldo2_consumers,
|
||||
};
|
||||
|
||||
/* General */
|
||||
static struct regulator_init_data vdig_data = {
|
||||
.constraints = {
|
||||
.name = "VDIG",
|
||||
.min_uV = 1500000,
|
||||
.max_uV = 1500000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||
.apply_uV = 1,
|
||||
.always_on = 1,
|
||||
.boot_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* Tranceivers */
|
||||
static struct regulator_init_data ldo4_data = {
|
||||
.constraints = {
|
||||
.name = "VRF1/CVDD_2.775",
|
||||
.min_uV = 2500000,
|
||||
.max_uV = 2500000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||
.apply_uV = 1,
|
||||
.always_on = 1,
|
||||
.boot_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct wm8350_led_platform_data wm8350_led_data = {
|
||||
.name = "wm8350:white",
|
||||
.default_trigger = "heartbeat",
|
||||
.max_uA = 27899,
|
||||
};
|
||||
|
||||
static struct wm8350_audio_platform_data imx32ads_wm8350_setup = {
|
||||
.vmid_discharge_msecs = 1000,
|
||||
.drain_msecs = 30,
|
||||
.cap_discharge_msecs = 700,
|
||||
.vmid_charge_msecs = 700,
|
||||
.vmid_s_curve = WM8350_S_CURVE_SLOW,
|
||||
.dis_out4 = WM8350_DISCHARGE_SLOW,
|
||||
.dis_out3 = WM8350_DISCHARGE_SLOW,
|
||||
.dis_out2 = WM8350_DISCHARGE_SLOW,
|
||||
.dis_out1 = WM8350_DISCHARGE_SLOW,
|
||||
.vroi_out4 = WM8350_TIE_OFF_500R,
|
||||
.vroi_out3 = WM8350_TIE_OFF_500R,
|
||||
.vroi_out2 = WM8350_TIE_OFF_500R,
|
||||
.vroi_out1 = WM8350_TIE_OFF_500R,
|
||||
.vroi_enable = 0,
|
||||
.codec_current_on = WM8350_CODEC_ISEL_1_0,
|
||||
.codec_current_standby = WM8350_CODEC_ISEL_0_5,
|
||||
.codec_current_charge = WM8350_CODEC_ISEL_1_5,
|
||||
};
|
||||
|
||||
static int mx31_wm8350_init(struct wm8350 *wm8350)
|
||||
{
|
||||
wm8350_gpio_config(wm8350, 0, WM8350_GPIO_DIR_IN,
|
||||
WM8350_GPIO0_PWR_ON_IN, WM8350_GPIO_ACTIVE_LOW,
|
||||
WM8350_GPIO_PULL_UP, WM8350_GPIO_INVERT_OFF,
|
||||
WM8350_GPIO_DEBOUNCE_ON);
|
||||
|
||||
wm8350_gpio_config(wm8350, 3, WM8350_GPIO_DIR_IN,
|
||||
WM8350_GPIO3_PWR_OFF_IN, WM8350_GPIO_ACTIVE_HIGH,
|
||||
WM8350_GPIO_PULL_DOWN, WM8350_GPIO_INVERT_OFF,
|
||||
WM8350_GPIO_DEBOUNCE_ON);
|
||||
|
||||
wm8350_gpio_config(wm8350, 4, WM8350_GPIO_DIR_IN,
|
||||
WM8350_GPIO4_MR_IN, WM8350_GPIO_ACTIVE_HIGH,
|
||||
WM8350_GPIO_PULL_DOWN, WM8350_GPIO_INVERT_OFF,
|
||||
WM8350_GPIO_DEBOUNCE_OFF);
|
||||
|
||||
wm8350_gpio_config(wm8350, 7, WM8350_GPIO_DIR_IN,
|
||||
WM8350_GPIO7_HIBERNATE_IN, WM8350_GPIO_ACTIVE_HIGH,
|
||||
WM8350_GPIO_PULL_DOWN, WM8350_GPIO_INVERT_OFF,
|
||||
WM8350_GPIO_DEBOUNCE_OFF);
|
||||
|
||||
wm8350_gpio_config(wm8350, 6, WM8350_GPIO_DIR_OUT,
|
||||
WM8350_GPIO6_SDOUT_OUT, WM8350_GPIO_ACTIVE_HIGH,
|
||||
WM8350_GPIO_PULL_NONE, WM8350_GPIO_INVERT_OFF,
|
||||
WM8350_GPIO_DEBOUNCE_OFF);
|
||||
|
||||
wm8350_gpio_config(wm8350, 8, WM8350_GPIO_DIR_OUT,
|
||||
WM8350_GPIO8_VCC_FAULT_OUT, WM8350_GPIO_ACTIVE_LOW,
|
||||
WM8350_GPIO_PULL_NONE, WM8350_GPIO_INVERT_OFF,
|
||||
WM8350_GPIO_DEBOUNCE_OFF);
|
||||
|
||||
wm8350_gpio_config(wm8350, 9, WM8350_GPIO_DIR_OUT,
|
||||
WM8350_GPIO9_BATT_FAULT_OUT, WM8350_GPIO_ACTIVE_LOW,
|
||||
WM8350_GPIO_PULL_NONE, WM8350_GPIO_INVERT_OFF,
|
||||
WM8350_GPIO_DEBOUNCE_OFF);
|
||||
|
||||
wm8350_register_regulator(wm8350, WM8350_DCDC_1, &sw1a_data);
|
||||
wm8350_register_regulator(wm8350, WM8350_DCDC_3, &viohi_data);
|
||||
wm8350_register_regulator(wm8350, WM8350_DCDC_4, &violo_data);
|
||||
wm8350_register_regulator(wm8350, WM8350_DCDC_6, &sw2a_data);
|
||||
wm8350_register_regulator(wm8350, WM8350_LDO_1, &ldo1_data);
|
||||
wm8350_register_regulator(wm8350, WM8350_LDO_2, &ldo2_data);
|
||||
wm8350_register_regulator(wm8350, WM8350_LDO_3, &vdig_data);
|
||||
wm8350_register_regulator(wm8350, WM8350_LDO_4, &ldo4_data);
|
||||
|
||||
/* LEDs */
|
||||
wm8350_dcdc_set_slot(wm8350, WM8350_DCDC_5, 1, 1,
|
||||
WM8350_DC5_ERRACT_SHUTDOWN_CONV);
|
||||
wm8350_isink_set_flash(wm8350, WM8350_ISINK_A,
|
||||
WM8350_ISINK_FLASH_DISABLE,
|
||||
WM8350_ISINK_FLASH_TRIG_BIT,
|
||||
WM8350_ISINK_FLASH_DUR_32MS,
|
||||
WM8350_ISINK_FLASH_ON_INSTANT,
|
||||
WM8350_ISINK_FLASH_OFF_INSTANT,
|
||||
WM8350_ISINK_FLASH_MODE_EN);
|
||||
wm8350_dcdc25_set_mode(wm8350, WM8350_DCDC_5,
|
||||
WM8350_ISINK_MODE_BOOST,
|
||||
WM8350_ISINK_ILIM_NORMAL,
|
||||
WM8350_DC5_RMP_20V,
|
||||
WM8350_DC5_FBSRC_ISINKA);
|
||||
wm8350_register_led(wm8350, 0, WM8350_DCDC_5, WM8350_ISINK_A,
|
||||
&wm8350_led_data);
|
||||
|
||||
wm8350->codec.platform_data = &imx32ads_wm8350_setup;
|
||||
|
||||
regulator_has_full_constraints();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct wm8350_platform_data __initdata mx31_wm8350_pdata = {
|
||||
.init = mx31_wm8350_init,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct i2c_board_info __initdata mx31ads_i2c1_devices[] = {
|
||||
#ifdef CONFIG_MACH_MX31ADS_WM1133_EV1
|
||||
{
|
||||
I2C_BOARD_INFO("wm8350", 0x1a),
|
||||
.platform_data = &mx31_wm8350_pdata,
|
||||
/* irq number is run-time assigned */
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
static void __init mxc_init_i2c(void)
|
||||
{
|
||||
#ifdef CONFIG_MACH_MX31ADS_WM1133_EV1
|
||||
mx31ads_i2c1_devices[0].irq =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_3));
|
||||
#endif
|
||||
i2c_register_board_info(1, mx31ads_i2c1_devices,
|
||||
ARRAY_SIZE(mx31ads_i2c1_devices));
|
||||
|
||||
mxc_iomux_mode(IOMUX_MODE(MX31_PIN_CSPI2_MOSI, IOMUX_CONFIG_ALT1));
|
||||
mxc_iomux_mode(IOMUX_MODE(MX31_PIN_CSPI2_MISO, IOMUX_CONFIG_ALT1));
|
||||
|
||||
imx31_add_imx_i2c1(NULL);
|
||||
}
|
||||
|
||||
static unsigned int ssi_pins[] = {
|
||||
MX31_PIN_SFS5__SFS5,
|
||||
MX31_PIN_SCK5__SCK5,
|
||||
MX31_PIN_SRXD5__SRXD5,
|
||||
MX31_PIN_STXD5__STXD5,
|
||||
};
|
||||
|
||||
static void __init mxc_init_audio(void)
|
||||
{
|
||||
imx31_add_imx_ssi(0, NULL);
|
||||
mxc_iomux_setup_multiple_pins(ssi_pins, ARRAY_SIZE(ssi_pins), "ssi");
|
||||
}
|
||||
|
||||
/*
|
||||
* Static mappings, starting from the CS4 start address up to the start address
|
||||
* of the CS8900.
|
||||
*/
|
||||
static struct map_desc mx31ads_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = (unsigned long)MX31_CS4_BASE_ADDR_VIRT,
|
||||
.pfn = __phys_to_pfn(MX31_CS4_BASE_ADDR),
|
||||
.length = CS4_CS8900_MMIO_START,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
};
|
||||
|
||||
static void __init mx31ads_map_io(void)
|
||||
{
|
||||
mx31_map_io();
|
||||
iotable_init(mx31ads_io_desc, ARRAY_SIZE(mx31ads_io_desc));
|
||||
}
|
||||
|
||||
static void __init mx31ads_init(void)
|
||||
{
|
||||
imx31_soc_init();
|
||||
|
||||
mxc_init_imx_uart();
|
||||
mxc_init_audio();
|
||||
}
|
||||
|
||||
static void __init mx31ads_late(void)
|
||||
{
|
||||
mx31ads_init_expio();
|
||||
mxc_init_extuart();
|
||||
mxc_init_i2c();
|
||||
mxc_init_ext_ethernet();
|
||||
}
|
||||
|
||||
static void __init mx31ads_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
MACHINE_START(MX31ADS, "Freescale MX31ADS")
|
||||
/* Maintainer: Freescale Semiconductor, Inc. */
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx31ads_map_io,
|
||||
.init_early = imx31_init_early,
|
||||
.init_irq = mx31_init_irq,
|
||||
.init_time = mx31ads_timer_init,
|
||||
.init_machine = mx31ads_init,
|
||||
.init_late = mx31ads_late,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,312 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* LILLY-1131 module support
|
||||
*
|
||||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
*
|
||||
* based on code for other MX31 boards,
|
||||
*
|
||||
* Copyright 2005-2007 Freescale Semiconductor
|
||||
* Copyright (c) 2009 Alberto Panizzo <maramaopercheseimorto@gmail.com>
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/mfd/mc13783.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "board-mx31lilly.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
/*
|
||||
* This file contains module-specific initialization routines for LILLY-1131.
|
||||
* Initialization of peripherals found on the baseboard is implemented in the
|
||||
* appropriate baseboard support code.
|
||||
*/
|
||||
|
||||
static unsigned int mx31lilly_pins[] __initdata = {
|
||||
MX31_PIN_CTS1__CTS1,
|
||||
MX31_PIN_RTS1__RTS1,
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1,
|
||||
MX31_PIN_CTS2__CTS2,
|
||||
MX31_PIN_RTS2__RTS2,
|
||||
MX31_PIN_TXD2__TXD2,
|
||||
MX31_PIN_RXD2__RXD2,
|
||||
MX31_PIN_CSPI3_MOSI__RXD3,
|
||||
MX31_PIN_CSPI3_MISO__TXD3,
|
||||
MX31_PIN_CSPI3_SCLK__RTS3,
|
||||
MX31_PIN_CSPI3_SPI_RDY__CTS3,
|
||||
};
|
||||
|
||||
/* UART */
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
/* SMSC ethernet support */
|
||||
|
||||
static struct resource smsc91x_resources[] = {
|
||||
{
|
||||
.start = MX31_CS4_BASE_ADDR,
|
||||
.end = MX31_CS4_BASE_ADDR + 0xffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
/* irq number is run-time assigned */
|
||||
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_FALLING,
|
||||
}
|
||||
};
|
||||
|
||||
static struct smsc911x_platform_config smsc911x_config = {
|
||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
|
||||
.flags = SMSC911X_USE_32BIT |
|
||||
SMSC911X_SAVE_MAC_ADDRESS |
|
||||
SMSC911X_FORCE_INTERNAL_PHY,
|
||||
};
|
||||
|
||||
static struct platform_device smsc91x_device = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(smsc91x_resources),
|
||||
.resource = smsc91x_resources,
|
||||
.dev = {
|
||||
.platform_data = &smsc911x_config,
|
||||
}
|
||||
};
|
||||
|
||||
/* NOR flash */
|
||||
static struct physmap_flash_data nor_flash_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource nor_flash_resource = {
|
||||
.start = 0xa0000000,
|
||||
.end = 0xa1ffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device physmap_flash_device = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &nor_flash_data,
|
||||
},
|
||||
.resource = &nor_flash_resource,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
/* USB */
|
||||
|
||||
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||
|
||||
static int usbh1_init(struct platform_device *pdev)
|
||||
{
|
||||
int pins[] = {
|
||||
MX31_PIN_CSPI1_MOSI__USBH1_RXDM,
|
||||
MX31_PIN_CSPI1_MISO__USBH1_RXDP,
|
||||
MX31_PIN_CSPI1_SS0__USBH1_TXDM,
|
||||
MX31_PIN_CSPI1_SS1__USBH1_TXDP,
|
||||
MX31_PIN_CSPI1_SS2__USBH1_RCV,
|
||||
MX31_PIN_CSPI1_SCLK__USBH1_OEB,
|
||||
MX31_PIN_CSPI1_SPI_RDY__USBH1_FS,
|
||||
};
|
||||
|
||||
mxc_iomux_setup_multiple_pins(pins, ARRAY_SIZE(pins), "USB H1");
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_MOSI, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_MISO, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS2, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SCLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SPI_RDY, USB_PAD_CFG);
|
||||
|
||||
mxc_iomux_set_gpr(MUX_PGP_USB_SUSPEND, true);
|
||||
|
||||
mdelay(10);
|
||||
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED |
|
||||
MXC_EHCI_INTERFACE_SINGLE_UNI);
|
||||
}
|
||||
|
||||
static int usbh2_init(struct platform_device *pdev)
|
||||
{
|
||||
int pins[] = {
|
||||
MX31_PIN_USBH2_DATA0__USBH2_DATA0,
|
||||
MX31_PIN_USBH2_DATA1__USBH2_DATA1,
|
||||
MX31_PIN_USBH2_CLK__USBH2_CLK,
|
||||
MX31_PIN_USBH2_DIR__USBH2_DIR,
|
||||
MX31_PIN_USBH2_NXT__USBH2_NXT,
|
||||
MX31_PIN_USBH2_STP__USBH2_STP,
|
||||
};
|
||||
|
||||
mxc_iomux_setup_multiple_pins(pins, ARRAY_SIZE(pins), "USB H2");
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_CLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DIR, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_NXT, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_STP, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SFS3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SCK3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD3, USB_PAD_CFG);
|
||||
|
||||
mxc_iomux_set_gpr(MUX_PGP_UH2, true);
|
||||
|
||||
/* chip select */
|
||||
mxc_iomux_alloc_pin(IOMUX_MODE(MX31_PIN_DTR_DCE1, IOMUX_CONFIG_GPIO),
|
||||
"USBH2_CS");
|
||||
gpio_request(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1), "USBH2 CS");
|
||||
gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1), 0);
|
||||
|
||||
mdelay(10);
|
||||
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
|
||||
}
|
||||
|
||||
static const struct mxc_usbh_platform_data usbh1_pdata __initconst = {
|
||||
.init = usbh1_init,
|
||||
.portsc = MXC_EHCI_MODE_UTMI | MXC_EHCI_SERIAL,
|
||||
};
|
||||
|
||||
static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
|
||||
.init = usbh2_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||
};
|
||||
|
||||
static void __init lilly1131_usb_init(void)
|
||||
{
|
||||
imx31_add_mxc_ehci_hs(1, &usbh1_pdata);
|
||||
|
||||
usbh2_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
|
||||
ULPI_OTG_DRVVBUS_EXT);
|
||||
if (usbh2_pdata.otg)
|
||||
imx31_add_mxc_ehci_hs(2, &usbh2_pdata);
|
||||
}
|
||||
|
||||
static struct mc13xxx_platform_data mc13783_pdata __initdata = {
|
||||
.flags = MC13XXX_USE_RTC | MC13XXX_USE_TOUCHSCREEN,
|
||||
};
|
||||
|
||||
static struct spi_board_info mc13783_dev __initdata = {
|
||||
.modalias = "mc13783",
|
||||
.max_speed_hz = 1000000,
|
||||
.bus_num = 1,
|
||||
.chip_select = 0,
|
||||
.platform_data = &mc13783_pdata,
|
||||
/* irq number is run-time assigned */
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&smsc91x_device,
|
||||
&physmap_flash_device,
|
||||
};
|
||||
|
||||
static int mx31lilly_baseboard;
|
||||
core_param(mx31lilly_baseboard, mx31lilly_baseboard, int, 0444);
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||
};
|
||||
|
||||
static void __init mx31lilly_board_init(void)
|
||||
{
|
||||
imx31_soc_init();
|
||||
|
||||
mxc_iomux_setup_multiple_pins(mx31lilly_pins,
|
||||
ARRAY_SIZE(mx31lilly_pins), "mx31lily");
|
||||
|
||||
imx31_add_imx_uart0(&uart_pdata);
|
||||
imx31_add_imx_uart1(&uart_pdata);
|
||||
imx31_add_imx_uart2(&uart_pdata);
|
||||
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CS4__CS4, "Ethernet CS");
|
||||
|
||||
/* SPI */
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI1_SCLK__SCLK, "SPI1_CLK");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI1_MOSI__MOSI, "SPI1_TX");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI1_MISO__MISO, "SPI1_RX");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI1_SPI_RDY__SPI_RDY, "SPI1_RDY");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI1_SS0__SS0, "SPI1_SS0");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI1_SS1__SS1, "SPI1_SS1");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI1_SS2__SS2, "SPI1_SS2");
|
||||
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI2_SCLK__SCLK, "SPI2_CLK");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI2_MOSI__MOSI, "SPI2_TX");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI2_MISO__MISO, "SPI2_RX");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI2_SPI_RDY__SPI_RDY, "SPI2_RDY");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI2_SS0__SS0, "SPI2_SS0");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI2_SS1__SS1, "SPI2_SS1");
|
||||
mxc_iomux_alloc_pin(MX31_PIN_CSPI2_SS2__SS2, "SPI2_SS2");
|
||||
|
||||
imx31_add_spi_imx0(NULL);
|
||||
imx31_add_spi_imx1(NULL);
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
}
|
||||
|
||||
static void __init mx31lilly_late_init(void)
|
||||
{
|
||||
if (mx31lilly_baseboard == MX31LILLY_DB)
|
||||
mx31lilly_db_init();
|
||||
|
||||
mc13783_dev.irq = gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_3));
|
||||
spi_register_board_info(&mc13783_dev, 1);
|
||||
|
||||
smsc91x_resources[1].start =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_0));
|
||||
smsc91x_resources[1].end =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_0));
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
/* USB */
|
||||
lilly1131_usb_init();
|
||||
}
|
||||
|
||||
static void __init mx31lilly_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
MACHINE_START(LILLY1131, "INCO startec LILLY-1131")
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx31_map_io,
|
||||
.init_early = imx31_init_early,
|
||||
.init_irq = mx31_init_irq,
|
||||
.init_time = mx31lilly_timer_init,
|
||||
.init_machine = mx31lilly_board_init,
|
||||
.init_late = mx31lilly_late_init,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,290 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2000 Deep Blue Solutions Ltd
|
||||
* Copyright (C) 2002 Shane Nay (shane@minirl.com)
|
||||
* Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
* Copyright (C) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/mfd/mc13783.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/setup.h>
|
||||
|
||||
#include "board-mx31lite.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
/*
|
||||
* This file contains the module-specific initialization routines.
|
||||
*/
|
||||
|
||||
static unsigned int mx31lite_pins[] = {
|
||||
/* UART1 */
|
||||
MX31_PIN_CTS1__CTS1,
|
||||
MX31_PIN_RTS1__RTS1,
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1,
|
||||
/* SPI 0 */
|
||||
MX31_PIN_CSPI1_SCLK__SCLK,
|
||||
MX31_PIN_CSPI1_MOSI__MOSI,
|
||||
MX31_PIN_CSPI1_MISO__MISO,
|
||||
MX31_PIN_CSPI1_SPI_RDY__SPI_RDY,
|
||||
MX31_PIN_CSPI1_SS0__SS0,
|
||||
MX31_PIN_CSPI1_SS1__SS1,
|
||||
MX31_PIN_CSPI1_SS2__SS2,
|
||||
/* LAN9117 IRQ pin */
|
||||
IOMUX_MODE(MX31_PIN_SFS6, IOMUX_CONFIG_GPIO),
|
||||
/* SPI 1 */
|
||||
MX31_PIN_CSPI2_SCLK__SCLK,
|
||||
MX31_PIN_CSPI2_MOSI__MOSI,
|
||||
MX31_PIN_CSPI2_MISO__MISO,
|
||||
MX31_PIN_CSPI2_SPI_RDY__SPI_RDY,
|
||||
MX31_PIN_CSPI2_SS0__SS0,
|
||||
MX31_PIN_CSPI2_SS1__SS1,
|
||||
MX31_PIN_CSPI2_SS2__SS2,
|
||||
};
|
||||
|
||||
/* UART */
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static const struct mxc_nand_platform_data
|
||||
mx31lite_nand_board_info __initconst = {
|
||||
.width = 1,
|
||||
.hw_ecc = 1,
|
||||
};
|
||||
|
||||
static struct smsc911x_platform_config smsc911x_config = {
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
|
||||
.flags = SMSC911X_USE_16BIT,
|
||||
};
|
||||
|
||||
static struct resource smsc911x_resources[] = {
|
||||
{
|
||||
.start = MX31_CS4_BASE_ADDR,
|
||||
.end = MX31_CS4_BASE_ADDR + 0x100,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
/* irq number is run-time assigned */
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device smsc911x_device = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(smsc911x_resources),
|
||||
.resource = smsc911x_resources,
|
||||
.dev = {
|
||||
.platform_data = &smsc911x_config,
|
||||
},
|
||||
};
|
||||
|
||||
static struct mc13xxx_platform_data mc13783_pdata __initdata = {
|
||||
.flags = MC13XXX_USE_RTC,
|
||||
};
|
||||
|
||||
static struct spi_board_info mc13783_spi_dev __initdata = {
|
||||
.modalias = "mc13783",
|
||||
.max_speed_hz = 1000000,
|
||||
.bus_num = 1,
|
||||
.chip_select = 0,
|
||||
.platform_data = &mc13783_pdata,
|
||||
/* irq number is run-time assigned */
|
||||
};
|
||||
|
||||
/*
|
||||
* USB
|
||||
*/
|
||||
|
||||
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||
|
||||
static int usbh2_init(struct platform_device *pdev)
|
||||
{
|
||||
int pins[] = {
|
||||
MX31_PIN_USBH2_DATA0__USBH2_DATA0,
|
||||
MX31_PIN_USBH2_DATA1__USBH2_DATA1,
|
||||
MX31_PIN_USBH2_CLK__USBH2_CLK,
|
||||
MX31_PIN_USBH2_DIR__USBH2_DIR,
|
||||
MX31_PIN_USBH2_NXT__USBH2_NXT,
|
||||
MX31_PIN_USBH2_STP__USBH2_STP,
|
||||
};
|
||||
|
||||
mxc_iomux_setup_multiple_pins(pins, ARRAY_SIZE(pins), "USB H2");
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_CLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DIR, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_NXT, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_STP, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SFS3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SCK3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD3, USB_PAD_CFG);
|
||||
|
||||
mxc_iomux_set_gpr(MUX_PGP_UH2, true);
|
||||
|
||||
/* chip select */
|
||||
mxc_iomux_alloc_pin(IOMUX_MODE(MX31_PIN_DTR_DCE1, IOMUX_CONFIG_GPIO),
|
||||
"USBH2_CS");
|
||||
gpio_request(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1), "USBH2 CS");
|
||||
gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1), 0);
|
||||
|
||||
mdelay(10);
|
||||
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
|
||||
.init = usbh2_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||
};
|
||||
|
||||
/*
|
||||
* NOR flash
|
||||
*/
|
||||
|
||||
static struct physmap_flash_data nor_flash_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource nor_flash_resource = {
|
||||
.start = 0xa0000000,
|
||||
.end = 0xa1ffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device physmap_flash_device = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &nor_flash_data,
|
||||
},
|
||||
.resource = &nor_flash_resource,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* This structure defines the MX31 memory map.
|
||||
*/
|
||||
static struct map_desc mx31lite_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = (unsigned long)MX31_CS4_BASE_ADDR_VIRT,
|
||||
.pfn = __phys_to_pfn(MX31_CS4_BASE_ADDR),
|
||||
.length = MX31_CS4_SIZE,
|
||||
.type = MT_DEVICE
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* Set up static virtual mappings.
|
||||
*/
|
||||
static void __init mx31lite_map_io(void)
|
||||
{
|
||||
mx31_map_io();
|
||||
iotable_init(mx31lite_io_desc, ARRAY_SIZE(mx31lite_io_desc));
|
||||
}
|
||||
|
||||
static int mx31lite_baseboard;
|
||||
core_param(mx31lite_baseboard, mx31lite_baseboard, int, 0444);
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||
};
|
||||
|
||||
static void __init mx31lite_init(void)
|
||||
{
|
||||
imx31_soc_init();
|
||||
|
||||
mxc_iomux_setup_multiple_pins(mx31lite_pins, ARRAY_SIZE(mx31lite_pins),
|
||||
"mx31lite");
|
||||
|
||||
imx31_add_imx_uart0(&uart_pdata);
|
||||
imx31_add_spi_imx0(NULL);
|
||||
|
||||
/* NOR and NAND flash */
|
||||
platform_device_register(&physmap_flash_device);
|
||||
imx31_add_mxc_nand(&mx31lite_nand_board_info);
|
||||
|
||||
imx31_add_spi_imx1(NULL);
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
}
|
||||
|
||||
static void __init mx31lite_late(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (mx31lite_baseboard == MX31LITE_DB)
|
||||
mx31lite_db_init();
|
||||
|
||||
mc13783_spi_dev.irq = gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_3));
|
||||
spi_register_board_info(&mc13783_spi_dev, 1);
|
||||
|
||||
/* USB */
|
||||
usbh2_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
|
||||
ULPI_OTG_DRVVBUS_EXT);
|
||||
if (usbh2_pdata.otg)
|
||||
imx31_add_mxc_ehci_hs(2, &usbh2_pdata);
|
||||
|
||||
/* SMSC9117 IRQ pin */
|
||||
ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_SFS6), "sms9117-irq");
|
||||
if (ret)
|
||||
pr_warn("could not get LAN irq gpio\n");
|
||||
else {
|
||||
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_SFS6));
|
||||
smsc911x_resources[1].start =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_SFS6));
|
||||
smsc911x_resources[1].end =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_SFS6));
|
||||
platform_device_register(&smsc911x_device);
|
||||
}
|
||||
}
|
||||
|
||||
static void __init mx31lite_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
MACHINE_START(MX31LITE, "LogicPD i.MX31 SOM")
|
||||
/* Maintainer: Freescale Semiconductor, Inc. */
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx31lite_map_io,
|
||||
.init_early = imx31_init_early,
|
||||
.init_irq = mx31_init_irq,
|
||||
.init_time = mx31lite_timer_init,
|
||||
.init_machine = mx31lite_init,
|
||||
.init_late = mx31lite_late,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,581 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2008 Valentin Longchamp, EPFL Mobots group
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/mfd/mc13783.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/input.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 <asm/memblock.h>
|
||||
#include <linux/platform_data/asoc-imx-ssi.h>
|
||||
|
||||
#include "board-mx31moboard.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
static unsigned int moboard_pins[] = {
|
||||
/* UART0 */
|
||||
MX31_PIN_TXD1__TXD1, MX31_PIN_RXD1__RXD1,
|
||||
MX31_PIN_CTS1__GPIO2_7,
|
||||
/* UART4 */
|
||||
MX31_PIN_PC_RST__CTS5, MX31_PIN_PC_VS2__RTS5,
|
||||
MX31_PIN_PC_BVD2__TXD5, MX31_PIN_PC_BVD1__RXD5,
|
||||
/* I2C0 */
|
||||
MX31_PIN_I2C_DAT__I2C1_SDA, MX31_PIN_I2C_CLK__I2C1_SCL,
|
||||
/* I2C1 */
|
||||
MX31_PIN_DCD_DTE1__I2C2_SDA, MX31_PIN_RI_DTE1__I2C2_SCL,
|
||||
/* SDHC1 */
|
||||
MX31_PIN_SD1_DATA3__SD1_DATA3, MX31_PIN_SD1_DATA2__SD1_DATA2,
|
||||
MX31_PIN_SD1_DATA1__SD1_DATA1, MX31_PIN_SD1_DATA0__SD1_DATA0,
|
||||
MX31_PIN_SD1_CLK__SD1_CLK, MX31_PIN_SD1_CMD__SD1_CMD,
|
||||
MX31_PIN_ATA_CS0__GPIO3_26, MX31_PIN_ATA_CS1__GPIO3_27,
|
||||
/* USB reset */
|
||||
MX31_PIN_GPIO1_0__GPIO1_0,
|
||||
/* USB OTG */
|
||||
MX31_PIN_USBOTG_DATA0__USBOTG_DATA0,
|
||||
MX31_PIN_USBOTG_DATA1__USBOTG_DATA1,
|
||||
MX31_PIN_USBOTG_DATA2__USBOTG_DATA2,
|
||||
MX31_PIN_USBOTG_DATA3__USBOTG_DATA3,
|
||||
MX31_PIN_USBOTG_DATA4__USBOTG_DATA4,
|
||||
MX31_PIN_USBOTG_DATA5__USBOTG_DATA5,
|
||||
MX31_PIN_USBOTG_DATA6__USBOTG_DATA6,
|
||||
MX31_PIN_USBOTG_DATA7__USBOTG_DATA7,
|
||||
MX31_PIN_USBOTG_CLK__USBOTG_CLK, MX31_PIN_USBOTG_DIR__USBOTG_DIR,
|
||||
MX31_PIN_USBOTG_NXT__USBOTG_NXT, MX31_PIN_USBOTG_STP__USBOTG_STP,
|
||||
MX31_PIN_USB_OC__GPIO1_30,
|
||||
/* USB H2 */
|
||||
MX31_PIN_USBH2_DATA0__USBH2_DATA0,
|
||||
MX31_PIN_USBH2_DATA1__USBH2_DATA1,
|
||||
MX31_PIN_STXD3__USBH2_DATA2, MX31_PIN_SRXD3__USBH2_DATA3,
|
||||
MX31_PIN_SCK3__USBH2_DATA4, MX31_PIN_SFS3__USBH2_DATA5,
|
||||
MX31_PIN_STXD6__USBH2_DATA6, MX31_PIN_SRXD6__USBH2_DATA7,
|
||||
MX31_PIN_USBH2_CLK__USBH2_CLK, MX31_PIN_USBH2_DIR__USBH2_DIR,
|
||||
MX31_PIN_USBH2_NXT__USBH2_NXT, MX31_PIN_USBH2_STP__USBH2_STP,
|
||||
MX31_PIN_SCK6__GPIO1_25,
|
||||
/* LEDs */
|
||||
MX31_PIN_SVEN0__GPIO2_0, MX31_PIN_STX0__GPIO2_1,
|
||||
MX31_PIN_SRX0__GPIO2_2, MX31_PIN_SIMPD0__GPIO2_3,
|
||||
/* SPI1 */
|
||||
MX31_PIN_CSPI2_MOSI__MOSI, MX31_PIN_CSPI2_MISO__MISO,
|
||||
MX31_PIN_CSPI2_SCLK__SCLK, MX31_PIN_CSPI2_SPI_RDY__SPI_RDY,
|
||||
MX31_PIN_CSPI2_SS0__SS0, MX31_PIN_CSPI2_SS2__SS2,
|
||||
/* Atlas IRQ */
|
||||
MX31_PIN_GPIO1_3__GPIO1_3,
|
||||
/* SPI2 */
|
||||
MX31_PIN_CSPI3_MOSI__MOSI, MX31_PIN_CSPI3_MISO__MISO,
|
||||
MX31_PIN_CSPI3_SCLK__SCLK, MX31_PIN_CSPI3_SPI_RDY__SPI_RDY,
|
||||
MX31_PIN_CSPI2_SS1__CSPI3_SS1,
|
||||
/* SSI */
|
||||
MX31_PIN_STXD4__STXD4, MX31_PIN_SRXD4__SRXD4,
|
||||
MX31_PIN_SCK4__SCK4, MX31_PIN_SFS4__SFS4,
|
||||
};
|
||||
|
||||
static struct physmap_flash_data mx31moboard_flash_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource mx31moboard_flash_resource = {
|
||||
.start = 0xa0000000,
|
||||
.end = 0xa1ffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device mx31moboard_flash = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &mx31moboard_flash_data,
|
||||
},
|
||||
.resource = &mx31moboard_flash_resource,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
static void __init moboard_uart0_init(void)
|
||||
{
|
||||
if (!gpio_request(IOMUX_TO_GPIO(MX31_PIN_CTS1), "uart0-cts-hack")) {
|
||||
gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_CTS1), 0);
|
||||
gpio_free(IOMUX_TO_GPIO(MX31_PIN_CTS1));
|
||||
}
|
||||
}
|
||||
|
||||
static const struct imxuart_platform_data uart0_pdata __initconst = {
|
||||
};
|
||||
|
||||
static const struct imxuart_platform_data uart4_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static const struct imxi2c_platform_data moboard_i2c0_data __initconst = {
|
||||
.bitrate = 400000,
|
||||
};
|
||||
|
||||
static const struct imxi2c_platform_data moboard_i2c1_data __initconst = {
|
||||
.bitrate = 100000,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply sdhc_consumers[] = {
|
||||
{
|
||||
.dev_name = "imx31-mmc.0",
|
||||
.supply = "sdhc0_vcc",
|
||||
},
|
||||
{
|
||||
.dev_name = "imx31-mmc.1",
|
||||
.supply = "sdhc1_vcc",
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_init_data sdhc_vreg_data = {
|
||||
.constraints = {
|
||||
.min_uV = 2700000,
|
||||
.max_uV = 3000000,
|
||||
.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 = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(sdhc_consumers),
|
||||
.consumer_supplies = sdhc_consumers,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply cam_consumers[] = {
|
||||
{
|
||||
.dev_name = "mx3_camera.0",
|
||||
.supply = "cam_vcc",
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_init_data cam_vreg_data = {
|
||||
.constraints = {
|
||||
.min_uV = 2700000,
|
||||
.max_uV = 3000000,
|
||||
.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 = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(cam_consumers),
|
||||
.consumer_supplies = cam_consumers,
|
||||
};
|
||||
|
||||
static struct mc13xxx_regulator_init_data moboard_regulators[] = {
|
||||
{
|
||||
.id = MC13783_REG_VMMC1,
|
||||
.init_data = &sdhc_vreg_data,
|
||||
},
|
||||
{
|
||||
.id = MC13783_REG_VCAM,
|
||||
.init_data = &cam_vreg_data,
|
||||
},
|
||||
};
|
||||
|
||||
static struct mc13xxx_led_platform_data moboard_led[] = {
|
||||
{
|
||||
.id = MC13783_LED_R1,
|
||||
.name = "coreboard-led-4:red",
|
||||
},
|
||||
{
|
||||
.id = MC13783_LED_G1,
|
||||
.name = "coreboard-led-4:green",
|
||||
},
|
||||
{
|
||||
.id = MC13783_LED_B1,
|
||||
.name = "coreboard-led-4:blue",
|
||||
},
|
||||
{
|
||||
.id = MC13783_LED_R2,
|
||||
.name = "coreboard-led-5:red",
|
||||
},
|
||||
{
|
||||
.id = MC13783_LED_G2,
|
||||
.name = "coreboard-led-5:green",
|
||||
},
|
||||
{
|
||||
.id = MC13783_LED_B2,
|
||||
.name = "coreboard-led-5:blue",
|
||||
},
|
||||
};
|
||||
|
||||
static struct mc13xxx_leds_platform_data moboard_leds = {
|
||||
.num_leds = ARRAY_SIZE(moboard_led),
|
||||
.led = moboard_led,
|
||||
.led_control[0] = MC13783_LED_C0_ENABLE | MC13783_LED_C0_ABMODE(0),
|
||||
.led_control[1] = MC13783_LED_C1_SLEWLIM,
|
||||
.led_control[2] = MC13783_LED_C2_SLEWLIM,
|
||||
.led_control[3] = MC13783_LED_C3_PERIOD(0) |
|
||||
MC13783_LED_C3_CURRENT_R1(2) |
|
||||
MC13783_LED_C3_CURRENT_G1(2) |
|
||||
MC13783_LED_C3_CURRENT_B1(2),
|
||||
.led_control[4] = MC13783_LED_C4_PERIOD(0) |
|
||||
MC13783_LED_C4_CURRENT_R2(3) |
|
||||
MC13783_LED_C4_CURRENT_G2(3) |
|
||||
MC13783_LED_C4_CURRENT_B2(3),
|
||||
};
|
||||
|
||||
static struct mc13xxx_buttons_platform_data moboard_buttons = {
|
||||
.b1on_flags = MC13783_BUTTON_DBNC_750MS | MC13783_BUTTON_ENABLE |
|
||||
MC13783_BUTTON_POL_INVERT,
|
||||
.b1on_key = KEY_POWER,
|
||||
};
|
||||
|
||||
static struct mc13xxx_codec_platform_data moboard_codec = {
|
||||
.dac_ssi_port = MC13783_SSI1_PORT,
|
||||
.adc_ssi_port = MC13783_SSI1_PORT,
|
||||
};
|
||||
|
||||
static struct mc13xxx_platform_data moboard_pmic = {
|
||||
.regulators = {
|
||||
.regulators = moboard_regulators,
|
||||
.num_regulators = ARRAY_SIZE(moboard_regulators),
|
||||
},
|
||||
.leds = &moboard_leds,
|
||||
.buttons = &moboard_buttons,
|
||||
.codec = &moboard_codec,
|
||||
.flags = MC13XXX_USE_RTC | MC13XXX_USE_ADC | MC13XXX_USE_CODEC,
|
||||
};
|
||||
|
||||
static struct imx_ssi_platform_data moboard_ssi_pdata = {
|
||||
.flags = IMX_SSI_DMA | IMX_SSI_NET,
|
||||
};
|
||||
|
||||
static struct spi_board_info moboard_spi_board_info[] __initdata = {
|
||||
{
|
||||
.modalias = "mc13783",
|
||||
/* irq number is run-time assigned */
|
||||
.max_speed_hz = 300000,
|
||||
.bus_num = 1,
|
||||
.chip_select = 0,
|
||||
.platform_data = &moboard_pmic,
|
||||
.mode = SPI_CS_HIGH,
|
||||
},
|
||||
};
|
||||
|
||||
#define SDHC1_CD IOMUX_TO_GPIO(MX31_PIN_ATA_CS0)
|
||||
#define SDHC1_WP IOMUX_TO_GPIO(MX31_PIN_ATA_CS1)
|
||||
|
||||
static int moboard_sdhc1_get_ro(struct device *dev)
|
||||
{
|
||||
return !gpio_get_value(SDHC1_WP);
|
||||
}
|
||||
|
||||
static int moboard_sdhc1_init(struct device *dev, irq_handler_t detect_irq,
|
||||
void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(SDHC1_CD, "sdhc-detect");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
gpio_direction_input(SDHC1_CD);
|
||||
|
||||
ret = gpio_request(SDHC1_WP, "sdhc-wp");
|
||||
if (ret)
|
||||
goto err_gpio_free;
|
||||
gpio_direction_input(SDHC1_WP);
|
||||
|
||||
ret = request_irq(gpio_to_irq(SDHC1_CD), detect_irq,
|
||||
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
|
||||
"sdhc1-card-detect", data);
|
||||
if (ret)
|
||||
goto err_gpio_free_2;
|
||||
|
||||
return 0;
|
||||
|
||||
err_gpio_free_2:
|
||||
gpio_free(SDHC1_WP);
|
||||
err_gpio_free:
|
||||
gpio_free(SDHC1_CD);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void moboard_sdhc1_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(SDHC1_CD), data);
|
||||
gpio_free(SDHC1_WP);
|
||||
gpio_free(SDHC1_CD);
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data sdhc1_pdata __initconst = {
|
||||
.get_ro = moboard_sdhc1_get_ro,
|
||||
.init = moboard_sdhc1_init,
|
||||
.exit = moboard_sdhc1_exit,
|
||||
};
|
||||
|
||||
/*
|
||||
* this pin is dedicated for all mx31moboard systems, so we do it here
|
||||
*/
|
||||
#define USB_RESET_B IOMUX_TO_GPIO(MX31_PIN_GPIO1_0)
|
||||
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS)
|
||||
|
||||
#define OTG_EN_B IOMUX_TO_GPIO(MX31_PIN_USB_OC)
|
||||
#define USBH2_EN_B IOMUX_TO_GPIO(MX31_PIN_SCK6)
|
||||
|
||||
static void usb_xcvr_reset(void)
|
||||
{
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA0, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA1, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA2, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA3, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA4, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA5, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA6, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA7, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_CLK, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DIR, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_NXT, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_STP, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
|
||||
mxc_iomux_set_gpr(MUX_PGP_UH2, true);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_CLK, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DIR, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_NXT, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_STP, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA0, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA1, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD6, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD6, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_SFS3, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_SCK3, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD3, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD3, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
|
||||
gpio_request(OTG_EN_B, "usb-udc-en");
|
||||
gpio_direction_output(OTG_EN_B, 0);
|
||||
gpio_request(USBH2_EN_B, "usbh2-en");
|
||||
gpio_direction_output(USBH2_EN_B, 0);
|
||||
|
||||
gpio_request(USB_RESET_B, "usb-reset");
|
||||
gpio_direction_output(USB_RESET_B, 0);
|
||||
mdelay(1);
|
||||
gpio_set_value(USB_RESET_B, 1);
|
||||
mdelay(1);
|
||||
}
|
||||
|
||||
static int moboard_usbh2_init_hw(struct platform_device *pdev)
|
||||
{
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
|
||||
.init = moboard_usbh2_init_hw,
|
||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||
};
|
||||
|
||||
static int __init moboard_usbh2_init(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
|
||||
usbh2_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
|
||||
ULPI_OTG_DRVVBUS_EXT);
|
||||
if (!usbh2_pdata.otg)
|
||||
return -ENODEV;
|
||||
|
||||
pdev = imx31_add_mxc_ehci_hs(2, &usbh2_pdata);
|
||||
|
||||
return PTR_ERR_OR_ZERO(pdev);
|
||||
}
|
||||
|
||||
static const struct gpio_led mx31moboard_leds[] __initconst = {
|
||||
{
|
||||
.name = "coreboard-led-0:red:running",
|
||||
.default_trigger = "heartbeat",
|
||||
.gpio = IOMUX_TO_GPIO(MX31_PIN_SVEN0),
|
||||
}, {
|
||||
.name = "coreboard-led-1:red",
|
||||
.gpio = IOMUX_TO_GPIO(MX31_PIN_STX0),
|
||||
}, {
|
||||
.name = "coreboard-led-2:red",
|
||||
.gpio = IOMUX_TO_GPIO(MX31_PIN_SRX0),
|
||||
}, {
|
||||
.name = "coreboard-led-3:red",
|
||||
.gpio = IOMUX_TO_GPIO(MX31_PIN_SIMPD0),
|
||||
},
|
||||
};
|
||||
|
||||
static const struct gpio_led_platform_data mx31moboard_led_pdata __initconst = {
|
||||
.num_leds = ARRAY_SIZE(mx31moboard_leds),
|
||||
.leds = mx31moboard_leds,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&mx31moboard_flash,
|
||||
};
|
||||
|
||||
static struct mx3_camera_pdata camera_pdata __initdata = {
|
||||
.flags = MX3_CAMERA_DATAWIDTH_8 | MX3_CAMERA_DATAWIDTH_10,
|
||||
.mclk_10khz = 4800,
|
||||
};
|
||||
|
||||
static phys_addr_t mx3_camera_base __initdata;
|
||||
#define MX3_CAMERA_BUF_SIZE SZ_4M
|
||||
|
||||
static int __init mx31moboard_init_cam(void)
|
||||
{
|
||||
int ret;
|
||||
struct platform_device *pdev;
|
||||
|
||||
imx31_add_ipu_core();
|
||||
|
||||
pdev = imx31_alloc_mx3_camera(&camera_pdata);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
|
||||
ret = dma_declare_coherent_memory(&pdev->dev,
|
||||
mx3_camera_base, mx3_camera_base,
|
||||
MX3_CAMERA_BUF_SIZE);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
ret = platform_device_add(pdev);
|
||||
if (ret)
|
||||
err:
|
||||
platform_device_put(pdev);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
static void mx31moboard_poweroff(void)
|
||||
{
|
||||
struct clk *clk = clk_get_sys("imx2-wdt.0", NULL);
|
||||
|
||||
if (!IS_ERR(clk))
|
||||
clk_prepare_enable(clk);
|
||||
|
||||
mxc_iomux_mode(MX31_PIN_WATCHDOG_RST__WATCHDOG_RST);
|
||||
|
||||
imx_writew(1 << 6 | 1 << 2, MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
|
||||
}
|
||||
|
||||
static int mx31moboard_baseboard;
|
||||
core_param(mx31moboard_baseboard, mx31moboard_baseboard, int, 0444);
|
||||
|
||||
/*
|
||||
* Board specific initialization.
|
||||
*/
|
||||
static void __init mx31moboard_init(void)
|
||||
{
|
||||
imx31_soc_init();
|
||||
|
||||
mxc_iomux_setup_multiple_pins(moboard_pins, ARRAY_SIZE(moboard_pins),
|
||||
"moboard");
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
imx31_add_imx2_wdt();
|
||||
|
||||
imx31_add_imx_uart0(&uart0_pdata);
|
||||
imx31_add_imx_uart4(&uart4_pdata);
|
||||
|
||||
imx31_add_imx_i2c0(&moboard_i2c0_data);
|
||||
imx31_add_imx_i2c1(&moboard_i2c1_data);
|
||||
|
||||
imx31_add_spi_imx1(NULL);
|
||||
imx31_add_spi_imx2(NULL);
|
||||
|
||||
mx31moboard_init_cam();
|
||||
|
||||
imx31_add_imx_ssi(0, &moboard_ssi_pdata);
|
||||
|
||||
pm_power_off = mx31moboard_poweroff;
|
||||
}
|
||||
|
||||
static void __init mx31moboard_late(void)
|
||||
{
|
||||
gpio_led_register_device(-1, &mx31moboard_led_pdata);
|
||||
|
||||
moboard_uart0_init();
|
||||
|
||||
gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_3), "pmic-irq");
|
||||
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_3));
|
||||
moboard_spi_board_info[0].irq =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_3));
|
||||
spi_register_board_info(moboard_spi_board_info,
|
||||
ARRAY_SIZE(moboard_spi_board_info));
|
||||
|
||||
imx31_add_mxc_mmc(0, &sdhc1_pdata);
|
||||
|
||||
usb_xcvr_reset();
|
||||
moboard_usbh2_init();
|
||||
|
||||
imx_add_platform_device("imx_mc13783", 0, NULL, 0, NULL, 0);
|
||||
|
||||
switch (mx31moboard_baseboard) {
|
||||
case MX31NOBOARD:
|
||||
break;
|
||||
case MX31DEVBOARD:
|
||||
mx31moboard_devboard_init();
|
||||
break;
|
||||
case MX31MARXBOT:
|
||||
mx31moboard_marxbot_init();
|
||||
break;
|
||||
case MX31SMARTBOT:
|
||||
case MX31EYEBOT:
|
||||
mx31moboard_smartbot_init(mx31moboard_baseboard);
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "Illegal mx31moboard_baseboard type %d\n",
|
||||
mx31moboard_baseboard);
|
||||
}
|
||||
}
|
||||
|
||||
static void __init mx31moboard_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
static void __init mx31moboard_reserve(void)
|
||||
{
|
||||
/* reserve 4 MiB for mx3-camera */
|
||||
mx3_camera_base = arm_memblock_steal(MX3_CAMERA_BUF_SIZE,
|
||||
MX3_CAMERA_BUF_SIZE);
|
||||
}
|
||||
|
||||
MACHINE_START(MX31MOBOARD, "EPFL Mobots mx31moboard")
|
||||
/* Maintainer: Philippe Retornaz, EPFL Mobots group */
|
||||
.atag_offset = 0x100,
|
||||
.reserve = mx31moboard_reserve,
|
||||
.map_io = mx31_map_io,
|
||||
.init_early = imx31_init_early,
|
||||
.init_irq = mx31_init_irq,
|
||||
.init_time = mx31moboard_timer_init,
|
||||
.init_machine = mx31moboard_init,
|
||||
.init_late = mx31moboard_late,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,516 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright 2009 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
* Copyright (C) 2009 Marc Kleine-Budde, Pengutronix
|
||||
*
|
||||
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
*
|
||||
* Copyright (C) 2011 Meprolight, Ltd.
|
||||
* Alex Gershgorin <alexg@meprolight.com>
|
||||
*
|
||||
* Modified from i.MX31 3-Stack Development System
|
||||
*/
|
||||
|
||||
/*
|
||||
* This machine is known as:
|
||||
* - i.MX35 3-Stack Development System
|
||||
* - i.MX35 Platform Development Kit (i.MX35 PDK)
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/usb/otg.h>
|
||||
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/mfd/mc13892.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <video/platform_lcd.h>
|
||||
|
||||
#include "3ds_debugboard.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx35.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx35.h"
|
||||
|
||||
#define GPIO_MC9S08DZ60_GPS_ENABLE 0
|
||||
#define GPIO_MC9S08DZ60_HDD_ENABLE 4
|
||||
#define GPIO_MC9S08DZ60_WIFI_ENABLE 5
|
||||
#define GPIO_MC9S08DZ60_LCD_ENABLE 6
|
||||
#define GPIO_MC9S08DZ60_SPEAKER_ENABLE 8
|
||||
|
||||
static const struct fb_videomode fb_modedb[] = {
|
||||
{
|
||||
/* 800x480 @ 55 Hz */
|
||||
.name = "Ceramate-CLAA070VC01",
|
||||
.refresh = 55,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
.pixclock = 40000,
|
||||
.left_margin = 40,
|
||||
.right_margin = 40,
|
||||
.upper_margin = 5,
|
||||
.lower_margin = 5,
|
||||
.hsync_len = 20,
|
||||
.vsync_len = 10,
|
||||
.sync = FB_SYNC_OE_ACT_HIGH,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct mx3fb_platform_data mx3fb_pdata __initdata = {
|
||||
.name = "Ceramate-CLAA070VC01",
|
||||
.mode = fb_modedb,
|
||||
.num_modes = ARRAY_SIZE(fb_modedb),
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata i2c_devices_3ds[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("mc9s08dz60", 0x69),
|
||||
},
|
||||
};
|
||||
|
||||
static int lcd_power_gpio = -ENXIO;
|
||||
|
||||
static int mc9s08dz60_gpiochip_match(struct gpio_chip *chip, void *data)
|
||||
{
|
||||
return !strcmp(chip->label, data);
|
||||
}
|
||||
|
||||
static void mx35_3ds_lcd_set_power(
|
||||
struct plat_lcd_data *pd, unsigned int power)
|
||||
{
|
||||
struct gpio_chip *chip;
|
||||
|
||||
if (!gpio_is_valid(lcd_power_gpio)) {
|
||||
chip = gpiochip_find(
|
||||
"mc9s08dz60", mc9s08dz60_gpiochip_match);
|
||||
if (chip) {
|
||||
lcd_power_gpio =
|
||||
chip->base + GPIO_MC9S08DZ60_LCD_ENABLE;
|
||||
if (gpio_request(lcd_power_gpio, "lcd_power") < 0) {
|
||||
pr_err("error: gpio already requested!\n");
|
||||
lcd_power_gpio = -ENXIO;
|
||||
}
|
||||
} else {
|
||||
pr_err("error: didn't find mc9s08dz60 gpio chip\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (gpio_is_valid(lcd_power_gpio))
|
||||
gpio_set_value_cansleep(lcd_power_gpio, power);
|
||||
}
|
||||
|
||||
static struct plat_lcd_data mx35_3ds_lcd_data = {
|
||||
.set_power = mx35_3ds_lcd_set_power,
|
||||
};
|
||||
|
||||
static struct platform_device mx35_3ds_lcd = {
|
||||
.name = "platform-lcd",
|
||||
.dev.platform_data = &mx35_3ds_lcd_data,
|
||||
};
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static struct physmap_flash_data mx35pdk_flash_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource mx35pdk_flash_resource = {
|
||||
.start = MX35_CS0_BASE_ADDR,
|
||||
.end = MX35_CS0_BASE_ADDR + SZ_64M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device mx35pdk_flash = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &mx35pdk_flash_data,
|
||||
},
|
||||
.resource = &mx35pdk_flash_resource,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
static const struct mxc_nand_platform_data mx35pdk_nand_board_info __initconst = {
|
||||
.width = 1,
|
||||
.hw_ecc = 1,
|
||||
.flash_bbt = 1,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&mx35pdk_flash,
|
||||
};
|
||||
|
||||
static const iomux_v3_cfg_t mx35pdk_pads[] __initconst = {
|
||||
/* UART1 */
|
||||
MX35_PAD_CTS1__UART1_CTS,
|
||||
MX35_PAD_RTS1__UART1_RTS,
|
||||
MX35_PAD_TXD1__UART1_TXD_MUX,
|
||||
MX35_PAD_RXD1__UART1_RXD_MUX,
|
||||
/* FEC */
|
||||
MX35_PAD_FEC_TX_CLK__FEC_TX_CLK,
|
||||
MX35_PAD_FEC_RX_CLK__FEC_RX_CLK,
|
||||
MX35_PAD_FEC_RX_DV__FEC_RX_DV,
|
||||
MX35_PAD_FEC_COL__FEC_COL,
|
||||
MX35_PAD_FEC_RDATA0__FEC_RDATA_0,
|
||||
MX35_PAD_FEC_TDATA0__FEC_TDATA_0,
|
||||
MX35_PAD_FEC_TX_EN__FEC_TX_EN,
|
||||
MX35_PAD_FEC_MDC__FEC_MDC,
|
||||
MX35_PAD_FEC_MDIO__FEC_MDIO,
|
||||
MX35_PAD_FEC_TX_ERR__FEC_TX_ERR,
|
||||
MX35_PAD_FEC_RX_ERR__FEC_RX_ERR,
|
||||
MX35_PAD_FEC_CRS__FEC_CRS,
|
||||
MX35_PAD_FEC_RDATA1__FEC_RDATA_1,
|
||||
MX35_PAD_FEC_TDATA1__FEC_TDATA_1,
|
||||
MX35_PAD_FEC_RDATA2__FEC_RDATA_2,
|
||||
MX35_PAD_FEC_TDATA2__FEC_TDATA_2,
|
||||
MX35_PAD_FEC_RDATA3__FEC_RDATA_3,
|
||||
MX35_PAD_FEC_TDATA3__FEC_TDATA_3,
|
||||
/* USBOTG */
|
||||
MX35_PAD_USBOTG_PWR__USB_TOP_USBOTG_PWR,
|
||||
MX35_PAD_USBOTG_OC__USB_TOP_USBOTG_OC,
|
||||
/* USBH1 */
|
||||
MX35_PAD_I2C2_CLK__USB_TOP_USBH2_PWR,
|
||||
MX35_PAD_I2C2_DAT__USB_TOP_USBH2_OC,
|
||||
/* SDCARD */
|
||||
MX35_PAD_SD1_CMD__ESDHC1_CMD,
|
||||
MX35_PAD_SD1_CLK__ESDHC1_CLK,
|
||||
MX35_PAD_SD1_DATA0__ESDHC1_DAT0,
|
||||
MX35_PAD_SD1_DATA1__ESDHC1_DAT1,
|
||||
MX35_PAD_SD1_DATA2__ESDHC1_DAT2,
|
||||
MX35_PAD_SD1_DATA3__ESDHC1_DAT3,
|
||||
/* I2C1 */
|
||||
MX35_PAD_I2C1_CLK__I2C1_SCL,
|
||||
MX35_PAD_I2C1_DAT__I2C1_SDA,
|
||||
/* Display */
|
||||
MX35_PAD_LD0__IPU_DISPB_DAT_0,
|
||||
MX35_PAD_LD1__IPU_DISPB_DAT_1,
|
||||
MX35_PAD_LD2__IPU_DISPB_DAT_2,
|
||||
MX35_PAD_LD3__IPU_DISPB_DAT_3,
|
||||
MX35_PAD_LD4__IPU_DISPB_DAT_4,
|
||||
MX35_PAD_LD5__IPU_DISPB_DAT_5,
|
||||
MX35_PAD_LD6__IPU_DISPB_DAT_6,
|
||||
MX35_PAD_LD7__IPU_DISPB_DAT_7,
|
||||
MX35_PAD_LD8__IPU_DISPB_DAT_8,
|
||||
MX35_PAD_LD9__IPU_DISPB_DAT_9,
|
||||
MX35_PAD_LD10__IPU_DISPB_DAT_10,
|
||||
MX35_PAD_LD11__IPU_DISPB_DAT_11,
|
||||
MX35_PAD_LD12__IPU_DISPB_DAT_12,
|
||||
MX35_PAD_LD13__IPU_DISPB_DAT_13,
|
||||
MX35_PAD_LD14__IPU_DISPB_DAT_14,
|
||||
MX35_PAD_LD15__IPU_DISPB_DAT_15,
|
||||
MX35_PAD_LD16__IPU_DISPB_DAT_16,
|
||||
MX35_PAD_LD17__IPU_DISPB_DAT_17,
|
||||
MX35_PAD_D3_HSYNC__IPU_DISPB_D3_HSYNC,
|
||||
MX35_PAD_D3_FPSHIFT__IPU_DISPB_D3_CLK,
|
||||
MX35_PAD_D3_DRDY__IPU_DISPB_D3_DRDY,
|
||||
MX35_PAD_CONTRAST__IPU_DISPB_CONTR,
|
||||
MX35_PAD_D3_VSYNC__IPU_DISPB_D3_VSYNC,
|
||||
MX35_PAD_D3_REV__IPU_DISPB_D3_REV,
|
||||
MX35_PAD_D3_CLS__IPU_DISPB_D3_CLS,
|
||||
/*PMIC IRQ*/
|
||||
MX35_PAD_GPIO2_0__GPIO2_0,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply sw1_consumers[] = {
|
||||
{
|
||||
.supply = "cpu_vcc",
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply vcam_consumers[] = {
|
||||
/* sgtl5000 */
|
||||
REGULATOR_SUPPLY("VDDA", "0-000a"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data sw1_init = {
|
||||
.constraints = {
|
||||
.name = "SW1",
|
||||
.min_uV = 600000,
|
||||
.max_uV = 1375000,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
.valid_modes_mask = 0,
|
||||
.always_on = 1,
|
||||
.boot_on = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(sw1_consumers),
|
||||
.consumer_supplies = sw1_consumers,
|
||||
};
|
||||
|
||||
static struct regulator_init_data sw2_init = {
|
||||
.constraints = {
|
||||
.name = "SW2",
|
||||
.always_on = 1,
|
||||
.boot_on = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data sw3_init = {
|
||||
.constraints = {
|
||||
.name = "SW3",
|
||||
.always_on = 1,
|
||||
.boot_on = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data sw4_init = {
|
||||
.constraints = {
|
||||
.name = "SW4",
|
||||
.always_on = 1,
|
||||
.boot_on = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data viohi_init = {
|
||||
.constraints = {
|
||||
.name = "VIOHI",
|
||||
.boot_on = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data vusb_init = {
|
||||
.constraints = {
|
||||
.name = "VUSB",
|
||||
.boot_on = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data vdig_init = {
|
||||
.constraints = {
|
||||
.name = "VDIG",
|
||||
.boot_on = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data vpll_init = {
|
||||
.constraints = {
|
||||
.name = "VPLL",
|
||||
.boot_on = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data vusb2_init = {
|
||||
.constraints = {
|
||||
.name = "VUSB2",
|
||||
.boot_on = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data vvideo_init = {
|
||||
.constraints = {
|
||||
.name = "VVIDEO",
|
||||
.boot_on = 1
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data vcam_init = {
|
||||
.constraints = {
|
||||
.name = "VCAM",
|
||||
.min_uV = 2500000,
|
||||
.max_uV = 3000000,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_MODE,
|
||||
.valid_modes_mask = REGULATOR_MODE_FAST | REGULATOR_MODE_NORMAL,
|
||||
.boot_on = 1
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(vcam_consumers),
|
||||
.consumer_supplies = vcam_consumers,
|
||||
};
|
||||
|
||||
static struct regulator_init_data vgen1_init = {
|
||||
.constraints = {
|
||||
.name = "VGEN1",
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data vgen2_init = {
|
||||
.constraints = {
|
||||
.name = "VGEN2",
|
||||
.boot_on = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data vgen3_init = {
|
||||
.constraints = {
|
||||
.name = "VGEN3",
|
||||
}
|
||||
};
|
||||
|
||||
static struct mc13xxx_regulator_init_data mx35_3ds_regulators[] = {
|
||||
{ .id = MC13892_SW1, .init_data = &sw1_init },
|
||||
{ .id = MC13892_SW2, .init_data = &sw2_init },
|
||||
{ .id = MC13892_SW3, .init_data = &sw3_init },
|
||||
{ .id = MC13892_SW4, .init_data = &sw4_init },
|
||||
{ .id = MC13892_VIOHI, .init_data = &viohi_init },
|
||||
{ .id = MC13892_VPLL, .init_data = &vpll_init },
|
||||
{ .id = MC13892_VDIG, .init_data = &vdig_init },
|
||||
{ .id = MC13892_VUSB2, .init_data = &vusb2_init },
|
||||
{ .id = MC13892_VVIDEO, .init_data = &vvideo_init },
|
||||
{ .id = MC13892_VCAM, .init_data = &vcam_init },
|
||||
{ .id = MC13892_VGEN1, .init_data = &vgen1_init },
|
||||
{ .id = MC13892_VGEN2, .init_data = &vgen2_init },
|
||||
{ .id = MC13892_VGEN3, .init_data = &vgen3_init },
|
||||
{ .id = MC13892_VUSB, .init_data = &vusb_init },
|
||||
};
|
||||
|
||||
static struct mc13xxx_platform_data mx35_3ds_mc13892_data = {
|
||||
.flags = MC13XXX_USE_RTC | MC13XXX_USE_TOUCHSCREEN,
|
||||
.regulators = {
|
||||
.num_regulators = ARRAY_SIZE(mx35_3ds_regulators),
|
||||
.regulators = mx35_3ds_regulators,
|
||||
},
|
||||
};
|
||||
|
||||
#define GPIO_PMIC_INT IMX_GPIO_NR(2, 0)
|
||||
|
||||
static struct i2c_board_info mx35_3ds_i2c_mc13892 = {
|
||||
|
||||
I2C_BOARD_INFO("mc13892", 0x08),
|
||||
.platform_data = &mx35_3ds_mc13892_data,
|
||||
/* irq number is run-time assigned */
|
||||
};
|
||||
|
||||
static void __init imx35_3ds_init_mc13892(void)
|
||||
{
|
||||
int ret = gpio_request_one(GPIO_PMIC_INT, GPIOF_DIR_IN, "pmic irq");
|
||||
|
||||
if (ret) {
|
||||
pr_err("failed to get pmic irq: %d\n", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
mx35_3ds_i2c_mc13892.irq = gpio_to_irq(GPIO_PMIC_INT);
|
||||
i2c_register_board_info(0, &mx35_3ds_i2c_mc13892, 1);
|
||||
}
|
||||
|
||||
static int mx35_3ds_otg_init(struct platform_device *pdev)
|
||||
{
|
||||
return mx35_initialize_usb_hw(pdev->id, MXC_EHCI_INTERNAL_PHY);
|
||||
}
|
||||
|
||||
/* OTG config */
|
||||
static const struct fsl_usb2_platform_data usb_otg_pdata __initconst = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_UTMI_WIDE,
|
||||
.workaround = FLS_USB2_WORKAROUND_ENGCM09152,
|
||||
/*
|
||||
* ENGCM09152 also requires a hardware change.
|
||||
* Please check the MX35 Chip Errata document for details.
|
||||
*/
|
||||
};
|
||||
|
||||
static struct mxc_usbh_platform_data otg_pdata __initdata = {
|
||||
.init = mx35_3ds_otg_init,
|
||||
.portsc = MXC_EHCI_MODE_UTMI,
|
||||
};
|
||||
|
||||
static int mx35_3ds_usbh_init(struct platform_device *pdev)
|
||||
{
|
||||
return mx35_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_SINGLE_UNI |
|
||||
MXC_EHCI_INTERNAL_PHY);
|
||||
}
|
||||
|
||||
/* USB HOST config */
|
||||
static const struct mxc_usbh_platform_data usb_host_pdata __initconst = {
|
||||
.init = mx35_3ds_usbh_init,
|
||||
.portsc = MXC_EHCI_MODE_SERIAL,
|
||||
};
|
||||
|
||||
static bool otg_mode_host __initdata;
|
||||
|
||||
static int __init mx35_3ds_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=", mx35_3ds_otg_mode);
|
||||
|
||||
static const struct imxi2c_platform_data mx35_3ds_i2c0_data __initconst = {
|
||||
.bitrate = 100000,
|
||||
};
|
||||
|
||||
/*
|
||||
* Board specific initialization.
|
||||
*/
|
||||
static void __init mx35_3ds_init(void)
|
||||
{
|
||||
imx35_soc_init();
|
||||
|
||||
mxc_iomux_v3_setup_multiple_pads(mx35pdk_pads, ARRAY_SIZE(mx35pdk_pads));
|
||||
|
||||
imx35_add_fec(NULL);
|
||||
imx35_add_imx2_wdt();
|
||||
imx35_add_mxc_rtc();
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
imx35_add_imx_uart0(&uart_pdata);
|
||||
|
||||
if (otg_mode_host)
|
||||
imx35_add_mxc_ehci_otg(&otg_pdata);
|
||||
|
||||
imx35_add_mxc_ehci_hs(&usb_host_pdata);
|
||||
|
||||
if (!otg_mode_host)
|
||||
imx35_add_fsl_usb2_udc(&usb_otg_pdata);
|
||||
|
||||
imx35_add_mxc_nand(&mx35pdk_nand_board_info);
|
||||
imx35_add_sdhci_esdhc_imx(0, NULL);
|
||||
|
||||
imx35_add_imx_i2c0(&mx35_3ds_i2c0_data);
|
||||
|
||||
i2c_register_board_info(
|
||||
0, i2c_devices_3ds, ARRAY_SIZE(i2c_devices_3ds));
|
||||
|
||||
imx35_add_ipu_core();
|
||||
}
|
||||
|
||||
static void __init mx35_3ds_late_init(void)
|
||||
{
|
||||
struct platform_device *imx35_fb_pdev;
|
||||
|
||||
if (mxc_expio_init(MX35_CS5_BASE_ADDR, IMX_GPIO_NR(1, 1)))
|
||||
pr_warn("Init of the debugboard failed, all "
|
||||
"devices on the debugboard are unusable.\n");
|
||||
|
||||
imx35_fb_pdev = imx35_add_mx3_sdc_fb(&mx3fb_pdata);
|
||||
mx35_3ds_lcd.dev.parent = &imx35_fb_pdev->dev;
|
||||
platform_device_register(&mx35_3ds_lcd);
|
||||
|
||||
imx35_3ds_init_mc13892();
|
||||
}
|
||||
|
||||
static void __init mx35pdk_timer_init(void)
|
||||
{
|
||||
mx35_clocks_init();
|
||||
}
|
||||
|
||||
MACHINE_START(MX35_3DS, "Freescale MX35PDK")
|
||||
/* Maintainer: Freescale Semiconductor, Inc */
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx35_map_io,
|
||||
.init_early = imx35_init_early,
|
||||
.init_irq = mx35_init_irq,
|
||||
.init_time = mx35pdk_timer_init,
|
||||
.init_machine = mx35_3ds_init,
|
||||
.init_late = mx35_3ds_late_init,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,426 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright 2007 Robert Schwebel <r.schwebel@pengutronix.de>, Pengutronix
|
||||
* Copyright (C) 2009 Sascha Hauer (kernel@pengutronix.de)
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/eeprom.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices-imx27.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx27.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
#define OTG_PHY_CS_GPIO (GPIO_PORTB + 23)
|
||||
#define USBH2_PHY_CS_GPIO (GPIO_PORTB + 24)
|
||||
#define SPI1_SS0 (GPIO_PORTD + 28)
|
||||
#define SPI1_SS1 (GPIO_PORTD + 27)
|
||||
#define SD2_CD (GPIO_PORTC + 29)
|
||||
|
||||
static const int pca100_pins[] __initconst = {
|
||||
/* UART1 */
|
||||
PE12_PF_UART1_TXD,
|
||||
PE13_PF_UART1_RXD,
|
||||
PE14_PF_UART1_CTS,
|
||||
PE15_PF_UART1_RTS,
|
||||
/* 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,
|
||||
SD2_CD | GPIO_GPIO | GPIO_IN,
|
||||
/* 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,
|
||||
/* SSI1 */
|
||||
PC20_PF_SSI1_FS,
|
||||
PC21_PF_SSI1_RXD,
|
||||
PC22_PF_SSI1_TXD,
|
||||
PC23_PF_SSI1_CLK,
|
||||
/* onboard I2C */
|
||||
PC5_PF_I2C2_SDA,
|
||||
PC6_PF_I2C2_SCL,
|
||||
/* external I2C */
|
||||
PD17_PF_I2C_DATA,
|
||||
PD18_PF_I2C_CLK,
|
||||
/* SPI1 */
|
||||
PD25_PF_CSPI1_RDY,
|
||||
PD29_PF_CSPI1_SCLK,
|
||||
PD30_PF_CSPI1_MISO,
|
||||
PD31_PF_CSPI1_MOSI,
|
||||
/* OTG */
|
||||
OTG_PHY_CS_GPIO | GPIO_GPIO | GPIO_OUT,
|
||||
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 */
|
||||
USBH2_PHY_CS_GPIO | GPIO_GPIO | GPIO_OUT,
|
||||
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,
|
||||
/* 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,
|
||||
PA26_PF_PS,
|
||||
PA28_PF_HSYNC,
|
||||
PA29_PF_VSYNC,
|
||||
PA31_PF_OE_ACD,
|
||||
/* free GPIO */
|
||||
GPIO_PORTC | 31 | GPIO_GPIO | GPIO_IN, /* GPIO0_IRQ */
|
||||
GPIO_PORTC | 25 | GPIO_GPIO | GPIO_IN, /* GPIO1_IRQ */
|
||||
GPIO_PORTE | 5 | GPIO_GPIO | GPIO_IN, /* GPIO2_IRQ */
|
||||
};
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static const struct mxc_nand_platform_data
|
||||
pca100_nand_board_info __initconst = {
|
||||
.width = 1,
|
||||
.hw_ecc = 1,
|
||||
};
|
||||
|
||||
static const struct imxi2c_platform_data pca100_i2c1_data __initconst = {
|
||||
.bitrate = 100000,
|
||||
};
|
||||
|
||||
static const struct property_entry board_eeprom_properties[] = {
|
||||
PROPERTY_ENTRY_U32("pagesize", 32),
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct i2c_board_info pca100_i2c_devices[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("24c32", 0x52), /* E0=0, E1=1, E2=0 */
|
||||
.properties = board_eeprom_properties,
|
||||
}, {
|
||||
I2C_BOARD_INFO("pcf8563", 0x51),
|
||||
}, {
|
||||
I2C_BOARD_INFO("lm75", 0x4a),
|
||||
}
|
||||
};
|
||||
|
||||
static struct spi_eeprom at25320 = {
|
||||
.name = "at25320an",
|
||||
.byte_len = 4096,
|
||||
.page_size = 32,
|
||||
.flags = EE_ADDR2,
|
||||
};
|
||||
|
||||
static struct spi_board_info pca100_spi_board_info[] __initdata = {
|
||||
{
|
||||
.modalias = "at25",
|
||||
.max_speed_hz = 30000,
|
||||
.bus_num = 0,
|
||||
.chip_select = 1,
|
||||
.platform_data = &at25320,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpiod_lookup_table pca100_spi0_gpiod_table = {
|
||||
.dev_id = "imx27-cspi.0", /* Actual device name for spi0 */
|
||||
.table = {
|
||||
/*
|
||||
* The i.MX27 has the i.MX21 GPIO controller, port D is
|
||||
* bank 3 and thus named "imx21-gpio.3".
|
||||
* SPI1_SS0 is GPIO_PORTD + 28
|
||||
* SPI1_SS1 is GPIO_PORTD + 27
|
||||
*/
|
||||
GPIO_LOOKUP_IDX("imx21-gpio.3", 28, "cs", 0, GPIO_ACTIVE_LOW),
|
||||
GPIO_LOOKUP_IDX("imx21-gpio.3", 27, "cs", 1, GPIO_ACTIVE_LOW),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
static void pca100_ac97_warm_reset(struct snd_ac97 *ac97)
|
||||
{
|
||||
mxc_gpio_mode(GPIO_PORTC | 20 | GPIO_GPIO | GPIO_OUT);
|
||||
gpio_set_value(GPIO_PORTC + 20, 1);
|
||||
udelay(2);
|
||||
gpio_set_value(GPIO_PORTC + 20, 0);
|
||||
mxc_gpio_mode(PC20_PF_SSI1_FS);
|
||||
msleep(2);
|
||||
}
|
||||
|
||||
static void pca100_ac97_cold_reset(struct snd_ac97 *ac97)
|
||||
{
|
||||
mxc_gpio_mode(GPIO_PORTC | 20 | GPIO_GPIO | GPIO_OUT); /* FS */
|
||||
gpio_set_value(GPIO_PORTC + 20, 0);
|
||||
mxc_gpio_mode(GPIO_PORTC | 22 | GPIO_GPIO | GPIO_OUT); /* TX */
|
||||
gpio_set_value(GPIO_PORTC + 22, 0);
|
||||
mxc_gpio_mode(GPIO_PORTC | 28 | GPIO_GPIO | GPIO_OUT); /* reset */
|
||||
gpio_set_value(GPIO_PORTC + 28, 0);
|
||||
udelay(10);
|
||||
gpio_set_value(GPIO_PORTC + 28, 1);
|
||||
mxc_gpio_mode(PC20_PF_SSI1_FS);
|
||||
mxc_gpio_mode(PC22_PF_SSI1_TXD);
|
||||
msleep(2);
|
||||
}
|
||||
|
||||
static const struct imx_ssi_platform_data pca100_ssi_pdata __initconst = {
|
||||
.ac97_reset = pca100_ac97_cold_reset,
|
||||
.ac97_warm_reset = pca100_ac97_warm_reset,
|
||||
.flags = IMX_SSI_USE_AC97,
|
||||
};
|
||||
|
||||
static int pca100_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)
|
||||
printk(KERN_ERR
|
||||
"pca100: Failed to request irq for sd/mmc detection\n");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void pca100_sdhc2_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(IMX_GPIO_NR(3, 29)), data);
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data sdhc_pdata __initconst = {
|
||||
.init = pca100_sdhc2_init,
|
||||
.exit = pca100_sdhc2_exit,
|
||||
};
|
||||
|
||||
static int otg_phy_init(struct platform_device *pdev)
|
||||
{
|
||||
gpio_set_value(OTG_PHY_CS_GPIO, 0);
|
||||
|
||||
mdelay(10);
|
||||
|
||||
return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data otg_pdata __initdata = {
|
||||
.init = otg_phy_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI,
|
||||
};
|
||||
|
||||
static int usbh2_phy_init(struct platform_device *pdev)
|
||||
{
|
||||
gpio_set_value(USBH2_PHY_CS_GPIO, 0);
|
||||
|
||||
mdelay(10);
|
||||
|
||||
return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
|
||||
.init = usbh2_phy_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 pca100_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=", pca100_otg_mode);
|
||||
|
||||
/* framebuffer info */
|
||||
static struct imx_fb_videomode pca100_fb_modes[] = {
|
||||
{
|
||||
.mode = {
|
||||
.name = "EMERGING-ETV570G0DHU",
|
||||
.refresh = 60,
|
||||
.xres = 640,
|
||||
.yres = 480,
|
||||
.pixclock = 39722, /* in ps (25.175 MHz) */
|
||||
.hsync_len = 30,
|
||||
.left_margin = 114,
|
||||
.right_margin = 16,
|
||||
.vsync_len = 3,
|
||||
.upper_margin = 32,
|
||||
.lower_margin = 0,
|
||||
},
|
||||
/*
|
||||
* TFT
|
||||
* Pixel pol active high
|
||||
* HSYNC active low
|
||||
* VSYNC active low
|
||||
* use HSYNC for ACD count
|
||||
* line clock disable while idle
|
||||
* always enable line clock even if no data
|
||||
*/
|
||||
.pcr = 0xf0c08080,
|
||||
.bpp = 16,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct imx_fb_platform_data pca100_fb_data __initconst = {
|
||||
.mode = pca100_fb_modes,
|
||||
.num_modes = ARRAY_SIZE(pca100_fb_modes),
|
||||
|
||||
.pwmr = 0x00A903FF,
|
||||
.lscr1 = 0x00120300,
|
||||
.dmacr = 0x00020010,
|
||||
};
|
||||
|
||||
static void __init pca100_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
imx27_soc_init();
|
||||
|
||||
ret = mxc_gpio_setup_multiple_pins(pca100_pins,
|
||||
ARRAY_SIZE(pca100_pins), "PCA100");
|
||||
if (ret)
|
||||
printk(KERN_ERR "pca100: Failed to setup pins (%d)\n", ret);
|
||||
|
||||
imx27_add_imx_uart0(&uart_pdata);
|
||||
|
||||
imx27_add_mxc_nand(&pca100_nand_board_info);
|
||||
|
||||
/* only the i2c master 1 is used on this CPU card */
|
||||
i2c_register_board_info(1, pca100_i2c_devices,
|
||||
ARRAY_SIZE(pca100_i2c_devices));
|
||||
|
||||
imx27_add_imx_i2c(1, &pca100_i2c1_data);
|
||||
|
||||
mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_IN);
|
||||
mxc_gpio_mode(GPIO_PORTD | 27 | GPIO_GPIO | GPIO_IN);
|
||||
spi_register_board_info(pca100_spi_board_info,
|
||||
ARRAY_SIZE(pca100_spi_board_info));
|
||||
imx27_add_spi_imx0(&pca100_spi0_gpiod_table);
|
||||
|
||||
imx27_add_imx_fb(&pca100_fb_data);
|
||||
|
||||
imx27_add_fec(NULL);
|
||||
imx27_add_imx2_wdt();
|
||||
imx27_add_mxc_w1();
|
||||
}
|
||||
|
||||
static void __init pca100_late_init(void)
|
||||
{
|
||||
imx27_add_imx_ssi(0, &pca100_ssi_pdata);
|
||||
|
||||
imx27_add_mxc_mmc(1, &sdhc_pdata);
|
||||
|
||||
gpio_request(OTG_PHY_CS_GPIO, "usb-otg-cs");
|
||||
gpio_direction_output(OTG_PHY_CS_GPIO, 1);
|
||||
gpio_request(USBH2_PHY_CS_GPIO, "usb-host2-cs");
|
||||
gpio_direction_output(USBH2_PHY_CS_GPIO, 1);
|
||||
|
||||
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 {
|
||||
gpio_set_value(OTG_PHY_CS_GPIO, 0);
|
||||
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);
|
||||
}
|
||||
|
||||
static void __init pca100_timer_init(void)
|
||||
{
|
||||
mx27_clocks_init(26000000);
|
||||
}
|
||||
|
||||
MACHINE_START(PCA100, "phyCARD-i.MX27")
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx27_map_io,
|
||||
.init_early = imx27_init_early,
|
||||
.init_irq = mx27_init_irq,
|
||||
.init_machine = pca100_init,
|
||||
.init_late = pca100_late_init,
|
||||
.init_time = pca100_timer_init,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,585 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2008 Sascha Hauer, Pengutronix
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/mtd/plat-ram.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/can/platform/sja1000.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.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-imx31.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
#include "pcm037.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
static enum pcm037_board_variant pcm037_instance = PCM037_PCM970;
|
||||
|
||||
static int __init pcm037_variant_setup(char *str)
|
||||
{
|
||||
if (!strcmp("eet", str))
|
||||
pcm037_instance = PCM037_EET;
|
||||
else if (strcmp("pcm970", str))
|
||||
pr_warn("Unknown pcm037 baseboard variant %s\n", str);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Supported values: "pcm970" (default) and "eet" */
|
||||
__setup("pcm037_variant=", pcm037_variant_setup);
|
||||
|
||||
enum pcm037_board_variant pcm037_variant(void)
|
||||
{
|
||||
return pcm037_instance;
|
||||
}
|
||||
|
||||
/* UART1 with RTS/CTS handshake signals */
|
||||
static unsigned int pcm037_uart1_handshake_pins[] = {
|
||||
MX31_PIN_CTS1__CTS1,
|
||||
MX31_PIN_RTS1__RTS1,
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1,
|
||||
};
|
||||
|
||||
/* UART1 without RTS/CTS handshake signals */
|
||||
static unsigned int pcm037_uart1_pins[] = {
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1,
|
||||
};
|
||||
|
||||
static unsigned int pcm037_pins[] = {
|
||||
/* I2C */
|
||||
MX31_PIN_CSPI2_MOSI__SCL,
|
||||
MX31_PIN_CSPI2_MISO__SDA,
|
||||
MX31_PIN_CSPI2_SS2__I2C3_SDA,
|
||||
MX31_PIN_CSPI2_SCLK__I2C3_SCL,
|
||||
/* SDHC1 */
|
||||
MX31_PIN_SD1_DATA3__SD1_DATA3,
|
||||
MX31_PIN_SD1_DATA2__SD1_DATA2,
|
||||
MX31_PIN_SD1_DATA1__SD1_DATA1,
|
||||
MX31_PIN_SD1_DATA0__SD1_DATA0,
|
||||
MX31_PIN_SD1_CLK__SD1_CLK,
|
||||
MX31_PIN_SD1_CMD__SD1_CMD,
|
||||
IOMUX_MODE(MX31_PIN_SCK6, IOMUX_CONFIG_GPIO), /* card detect */
|
||||
IOMUX_MODE(MX31_PIN_SFS6, IOMUX_CONFIG_GPIO), /* write protect */
|
||||
/* SPI1 */
|
||||
MX31_PIN_CSPI1_MOSI__MOSI,
|
||||
MX31_PIN_CSPI1_MISO__MISO,
|
||||
MX31_PIN_CSPI1_SCLK__SCLK,
|
||||
MX31_PIN_CSPI1_SPI_RDY__SPI_RDY,
|
||||
MX31_PIN_CSPI1_SS0__SS0,
|
||||
MX31_PIN_CSPI1_SS1__SS1,
|
||||
MX31_PIN_CSPI1_SS2__SS2,
|
||||
/* UART2 */
|
||||
MX31_PIN_TXD2__TXD2,
|
||||
MX31_PIN_RXD2__RXD2,
|
||||
MX31_PIN_CTS2__CTS2,
|
||||
MX31_PIN_RTS2__RTS2,
|
||||
/* UART3 */
|
||||
MX31_PIN_CSPI3_MOSI__RXD3,
|
||||
MX31_PIN_CSPI3_MISO__TXD3,
|
||||
MX31_PIN_CSPI3_SCLK__RTS3,
|
||||
MX31_PIN_CSPI3_SPI_RDY__CTS3,
|
||||
/* LAN9217 irq pin */
|
||||
IOMUX_MODE(MX31_PIN_GPIO3_1, IOMUX_CONFIG_GPIO),
|
||||
/* Onewire */
|
||||
MX31_PIN_BATT_LINE__OWIRE,
|
||||
/* Framebuffer */
|
||||
MX31_PIN_LD0__LD0,
|
||||
MX31_PIN_LD1__LD1,
|
||||
MX31_PIN_LD2__LD2,
|
||||
MX31_PIN_LD3__LD3,
|
||||
MX31_PIN_LD4__LD4,
|
||||
MX31_PIN_LD5__LD5,
|
||||
MX31_PIN_LD6__LD6,
|
||||
MX31_PIN_LD7__LD7,
|
||||
MX31_PIN_LD8__LD8,
|
||||
MX31_PIN_LD9__LD9,
|
||||
MX31_PIN_LD10__LD10,
|
||||
MX31_PIN_LD11__LD11,
|
||||
MX31_PIN_LD12__LD12,
|
||||
MX31_PIN_LD13__LD13,
|
||||
MX31_PIN_LD14__LD14,
|
||||
MX31_PIN_LD15__LD15,
|
||||
MX31_PIN_LD16__LD16,
|
||||
MX31_PIN_LD17__LD17,
|
||||
MX31_PIN_VSYNC3__VSYNC3,
|
||||
MX31_PIN_HSYNC__HSYNC,
|
||||
MX31_PIN_FPSHIFT__FPSHIFT,
|
||||
MX31_PIN_DRDY0__DRDY0,
|
||||
MX31_PIN_D3_REV__D3_REV,
|
||||
MX31_PIN_CONTRAST__CONTRAST,
|
||||
MX31_PIN_D3_SPL__D3_SPL,
|
||||
MX31_PIN_D3_CLS__D3_CLS,
|
||||
MX31_PIN_LCS0__GPIO3_23,
|
||||
/* GPIO */
|
||||
IOMUX_MODE(MX31_PIN_ATA_DMACK, IOMUX_CONFIG_GPIO),
|
||||
/* OTG */
|
||||
MX31_PIN_USBOTG_DATA0__USBOTG_DATA0,
|
||||
MX31_PIN_USBOTG_DATA1__USBOTG_DATA1,
|
||||
MX31_PIN_USBOTG_DATA2__USBOTG_DATA2,
|
||||
MX31_PIN_USBOTG_DATA3__USBOTG_DATA3,
|
||||
MX31_PIN_USBOTG_DATA4__USBOTG_DATA4,
|
||||
MX31_PIN_USBOTG_DATA5__USBOTG_DATA5,
|
||||
MX31_PIN_USBOTG_DATA6__USBOTG_DATA6,
|
||||
MX31_PIN_USBOTG_DATA7__USBOTG_DATA7,
|
||||
MX31_PIN_USBOTG_CLK__USBOTG_CLK,
|
||||
MX31_PIN_USBOTG_DIR__USBOTG_DIR,
|
||||
MX31_PIN_USBOTG_NXT__USBOTG_NXT,
|
||||
MX31_PIN_USBOTG_STP__USBOTG_STP,
|
||||
/* USB host 2 */
|
||||
IOMUX_MODE(MX31_PIN_USBH2_CLK, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_DIR, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_NXT, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_STP, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_DATA0, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_USBH2_DATA1, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_STXD3, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_SRXD3, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_SCK3, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_SFS3, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_STXD6, IOMUX_CONFIG_FUNC),
|
||||
IOMUX_MODE(MX31_PIN_SRXD6, IOMUX_CONFIG_FUNC),
|
||||
};
|
||||
|
||||
static struct physmap_flash_data pcm037_flash_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource pcm037_flash_resource = {
|
||||
.start = 0xa0000000,
|
||||
.end = 0xa1ffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device pcm037_flash = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &pcm037_flash_data,
|
||||
},
|
||||
.resource = &pcm037_flash_resource,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static struct resource smsc911x_resources[] = {
|
||||
{
|
||||
.start = MX31_CS1_BASE_ADDR + 0x300,
|
||||
.end = MX31_CS1_BASE_ADDR + 0x300 + SZ_64K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
/* irq number is run-time assigned */
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct smsc911x_platform_config smsc911x_info = {
|
||||
.flags = SMSC911X_USE_32BIT | SMSC911X_FORCE_INTERNAL_PHY |
|
||||
SMSC911X_SAVE_MAC_ADDRESS,
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
|
||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
};
|
||||
|
||||
static struct platform_device pcm037_eth = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(smsc911x_resources),
|
||||
.resource = smsc911x_resources,
|
||||
.dev = {
|
||||
.platform_data = &smsc911x_info,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platdata_mtd_ram pcm038_sram_data = {
|
||||
.bankwidth = 2,
|
||||
};
|
||||
|
||||
static struct resource pcm038_sram_resource = {
|
||||
.start = MX31_CS4_BASE_ADDR,
|
||||
.end = MX31_CS4_BASE_ADDR + 512 * 1024 - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device pcm037_sram_device = {
|
||||
.name = "mtd-ram",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &pcm038_sram_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &pcm038_sram_resource,
|
||||
};
|
||||
|
||||
static const struct mxc_nand_platform_data
|
||||
pcm037_nand_board_info __initconst = {
|
||||
.width = 1,
|
||||
.hw_ecc = 1,
|
||||
};
|
||||
|
||||
static const struct imxi2c_platform_data pcm037_i2c1_data __initconst = {
|
||||
.bitrate = 100000,
|
||||
};
|
||||
|
||||
static const struct imxi2c_platform_data pcm037_i2c2_data __initconst = {
|
||||
.bitrate = 20000,
|
||||
};
|
||||
|
||||
static const struct property_entry board_eeprom_properties[] = {
|
||||
PROPERTY_ENTRY_U32("pagesize", 32),
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct i2c_board_info pcm037_i2c_devices[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("24c32", 0x52), /* E0=0, E1=1, E2=0 */
|
||||
.properties = board_eeprom_properties,
|
||||
}, {
|
||||
I2C_BOARD_INFO("pcf8563", 0x51),
|
||||
}
|
||||
};
|
||||
|
||||
/* Not connected by default */
|
||||
#ifdef PCM970_SDHC_RW_SWITCH
|
||||
static int pcm970_sdhc1_get_ro(struct device *dev)
|
||||
{
|
||||
return gpio_get_value(IOMUX_TO_GPIO(MX31_PIN_SFS6));
|
||||
}
|
||||
#endif
|
||||
|
||||
#define SDHC1_GPIO_WP IOMUX_TO_GPIO(MX31_PIN_SFS6)
|
||||
#define SDHC1_GPIO_DET IOMUX_TO_GPIO(MX31_PIN_SCK6)
|
||||
|
||||
static int pcm970_sdhc1_init(struct device *dev, irq_handler_t detect_irq,
|
||||
void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(SDHC1_GPIO_DET, "sdhc-detect");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
gpio_direction_input(SDHC1_GPIO_DET);
|
||||
|
||||
#ifdef PCM970_SDHC_RW_SWITCH
|
||||
ret = gpio_request(SDHC1_GPIO_WP, "sdhc-wp");
|
||||
if (ret)
|
||||
goto err_gpio_free;
|
||||
gpio_direction_input(SDHC1_GPIO_WP);
|
||||
#endif
|
||||
|
||||
ret = request_irq(gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_SCK6)), detect_irq,
|
||||
IRQF_TRIGGER_FALLING, "sdhc-detect", data);
|
||||
if (ret)
|
||||
goto err_gpio_free_2;
|
||||
|
||||
return 0;
|
||||
|
||||
err_gpio_free_2:
|
||||
#ifdef PCM970_SDHC_RW_SWITCH
|
||||
gpio_free(SDHC1_GPIO_WP);
|
||||
err_gpio_free:
|
||||
#endif
|
||||
gpio_free(SDHC1_GPIO_DET);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void pcm970_sdhc1_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_SCK6)), data);
|
||||
gpio_free(SDHC1_GPIO_DET);
|
||||
gpio_free(SDHC1_GPIO_WP);
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data sdhc_pdata __initconst = {
|
||||
#ifdef PCM970_SDHC_RW_SWITCH
|
||||
.get_ro = pcm970_sdhc1_get_ro,
|
||||
#endif
|
||||
.init = pcm970_sdhc1_init,
|
||||
.exit = pcm970_sdhc1_exit,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&pcm037_flash,
|
||||
&pcm037_sram_device,
|
||||
};
|
||||
|
||||
static const struct fb_videomode fb_modedb[] = {
|
||||
{
|
||||
/* 240x320 @ 60 Hz Sharp */
|
||||
.name = "Sharp-LQ035Q7DH06-QVGA",
|
||||
.refresh = 60,
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.pixclock = 185925,
|
||||
.left_margin = 9,
|
||||
.right_margin = 16,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 9,
|
||||
.hsync_len = 1,
|
||||
.vsync_len = 1,
|
||||
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_SHARP_MODE |
|
||||
FB_SYNC_CLK_INVERT | FB_SYNC_CLK_IDLE_EN,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
}, {
|
||||
/* 240x320 @ 60 Hz */
|
||||
.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,
|
||||
.sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
}, {
|
||||
/* 240x320 @ 60 Hz */
|
||||
.name = "CMEL-OLED",
|
||||
.refresh = 60,
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.pixclock = 185925,
|
||||
.left_margin = 9,
|
||||
.right_margin = 16,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 9,
|
||||
.hsync_len = 1,
|
||||
.vsync_len = 1,
|
||||
.sync = FB_SYNC_OE_ACT_HIGH | FB_SYNC_CLK_INVERT,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct mx3fb_platform_data mx3fb_pdata = {
|
||||
.name = "Sharp-LQ035Q7DH06-QVGA",
|
||||
.mode = fb_modedb,
|
||||
.num_modes = ARRAY_SIZE(fb_modedb),
|
||||
};
|
||||
|
||||
static struct resource pcm970_sja1000_resources[] = {
|
||||
{
|
||||
.start = MX31_CS5_BASE_ADDR,
|
||||
.end = MX31_CS5_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),
|
||||
};
|
||||
|
||||
static int pcm037_otg_init(struct platform_device *pdev)
|
||||
{
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data otg_pdata __initdata = {
|
||||
.init = pcm037_otg_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI,
|
||||
};
|
||||
|
||||
static int pcm037_usbh2_init(struct platform_device *pdev)
|
||||
{
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
|
||||
.init = pcm037_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 pcm037_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=", pcm037_otg_mode);
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||
};
|
||||
|
||||
/*
|
||||
* Board specific initialization.
|
||||
*/
|
||||
static void __init pcm037_init(void)
|
||||
{
|
||||
imx31_soc_init();
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
|
||||
mxc_iomux_set_gpr(MUX_PGP_UH2, 1);
|
||||
|
||||
mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins),
|
||||
"pcm037");
|
||||
|
||||
#define H2_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS \
|
||||
| PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_CLK, H2_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DIR, H2_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_NXT, H2_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_STP, H2_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA0, H2_PAD_CFG); /* USBH2_DATA0 */
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA1, H2_PAD_CFG); /* USBH2_DATA1 */
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD6, H2_PAD_CFG); /* USBH2_DATA2 */
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD6, H2_PAD_CFG); /* USBH2_DATA3 */
|
||||
mxc_iomux_set_pad(MX31_PIN_SFS3, H2_PAD_CFG); /* USBH2_DATA4 */
|
||||
mxc_iomux_set_pad(MX31_PIN_SCK3, H2_PAD_CFG); /* USBH2_DATA5 */
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD3, H2_PAD_CFG); /* USBH2_DATA6 */
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD3, H2_PAD_CFG); /* USBH2_DATA7 */
|
||||
|
||||
if (pcm037_variant() == PCM037_EET)
|
||||
mxc_iomux_setup_multiple_pins(pcm037_uart1_pins,
|
||||
ARRAY_SIZE(pcm037_uart1_pins), "pcm037_uart1");
|
||||
else
|
||||
mxc_iomux_setup_multiple_pins(pcm037_uart1_handshake_pins,
|
||||
ARRAY_SIZE(pcm037_uart1_handshake_pins),
|
||||
"pcm037_uart1");
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
imx31_add_imx2_wdt();
|
||||
imx31_add_imx_uart0(&uart_pdata);
|
||||
/* XXX: should't this have .flags = 0 (i.e. no RTSCTS) on PCM037_EET? */
|
||||
imx31_add_imx_uart1(&uart_pdata);
|
||||
imx31_add_imx_uart2(&uart_pdata);
|
||||
|
||||
imx31_add_mxc_w1();
|
||||
|
||||
/* I2C adapters and devices */
|
||||
i2c_register_board_info(1, pcm037_i2c_devices,
|
||||
ARRAY_SIZE(pcm037_i2c_devices));
|
||||
|
||||
imx31_add_imx_i2c1(&pcm037_i2c1_data);
|
||||
imx31_add_imx_i2c2(&pcm037_i2c2_data);
|
||||
|
||||
imx31_add_mxc_nand(&pcm037_nand_board_info);
|
||||
imx31_add_ipu_core();
|
||||
imx31_add_mx3_sdc_fb(&mx3fb_pdata);
|
||||
|
||||
if (otg_mode_host) {
|
||||
otg_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
|
||||
ULPI_OTG_DRVVBUS_EXT);
|
||||
if (otg_pdata.otg)
|
||||
imx31_add_mxc_ehci_otg(&otg_pdata);
|
||||
}
|
||||
|
||||
usbh2_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
|
||||
ULPI_OTG_DRVVBUS_EXT);
|
||||
if (usbh2_pdata.otg)
|
||||
imx31_add_mxc_ehci_hs(2, &usbh2_pdata);
|
||||
|
||||
if (!otg_mode_host)
|
||||
imx31_add_fsl_usb2_udc(&otg_device_pdata);
|
||||
}
|
||||
|
||||
static void __init pcm037_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
static void __init pcm037_init_late(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* LAN9217 IRQ pin */
|
||||
ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1), "lan9217-irq");
|
||||
if (!ret) {
|
||||
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1));
|
||||
smsc911x_resources[1].start =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1));
|
||||
smsc911x_resources[1].end =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1));
|
||||
platform_device_register(&pcm037_eth);
|
||||
} else {
|
||||
pr_warn("could not get LAN irq gpio\n");
|
||||
}
|
||||
|
||||
imx31_add_mxc_mmc(0, &sdhc_pdata);
|
||||
|
||||
pcm970_sja1000_resources[1].start =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(IOMUX_PIN(48, 105)));
|
||||
pcm970_sja1000_resources[1].end =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(IOMUX_PIN(48, 105)));
|
||||
platform_device_register(&pcm970_sja1000);
|
||||
|
||||
pcm037_eet_init_devices();
|
||||
}
|
||||
|
||||
MACHINE_START(PCM037, "Phytec Phycore pcm037")
|
||||
/* Maintainer: Pengutronix */
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx31_map_io,
|
||||
.init_early = imx31_init_early,
|
||||
.init_irq = mx31_init_irq,
|
||||
.init_time = pcm037_timer_init,
|
||||
.init_machine = pcm037_init,
|
||||
.init_late = pcm037_init_late,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,166 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2009
|
||||
* Guennadi Liakhovetski, DENX Software Engineering, <lg@denx.de>
|
||||
*/
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/spi/spi.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include "pcm037.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "iomux-mx3.h"
|
||||
|
||||
static unsigned int pcm037_eet_pins[] = {
|
||||
/* Reserve and hardwire GPIO 57 high - S6E63D6 chipselect */
|
||||
IOMUX_MODE(MX31_PIN_KEY_COL7, IOMUX_CONFIG_GPIO),
|
||||
/* GPIO keys */
|
||||
IOMUX_MODE(MX31_PIN_GPIO1_0, IOMUX_CONFIG_GPIO), /* 0 */
|
||||
IOMUX_MODE(MX31_PIN_GPIO1_1, IOMUX_CONFIG_GPIO), /* 1 */
|
||||
IOMUX_MODE(MX31_PIN_GPIO1_2, IOMUX_CONFIG_GPIO), /* 2 */
|
||||
IOMUX_MODE(MX31_PIN_GPIO1_3, IOMUX_CONFIG_GPIO), /* 3 */
|
||||
IOMUX_MODE(MX31_PIN_SVEN0, IOMUX_CONFIG_GPIO), /* 32 */
|
||||
IOMUX_MODE(MX31_PIN_STX0, IOMUX_CONFIG_GPIO), /* 33 */
|
||||
IOMUX_MODE(MX31_PIN_SRX0, IOMUX_CONFIG_GPIO), /* 34 */
|
||||
IOMUX_MODE(MX31_PIN_SIMPD0, IOMUX_CONFIG_GPIO), /* 35 */
|
||||
IOMUX_MODE(MX31_PIN_RTS1, IOMUX_CONFIG_GPIO), /* 38 */
|
||||
IOMUX_MODE(MX31_PIN_CTS1, IOMUX_CONFIG_GPIO), /* 39 */
|
||||
IOMUX_MODE(MX31_PIN_KEY_ROW4, IOMUX_CONFIG_GPIO), /* 50 */
|
||||
IOMUX_MODE(MX31_PIN_KEY_ROW5, IOMUX_CONFIG_GPIO), /* 51 */
|
||||
IOMUX_MODE(MX31_PIN_KEY_ROW6, IOMUX_CONFIG_GPIO), /* 52 */
|
||||
IOMUX_MODE(MX31_PIN_KEY_ROW7, IOMUX_CONFIG_GPIO), /* 53 */
|
||||
|
||||
/* LEDs */
|
||||
IOMUX_MODE(MX31_PIN_DTR_DTE1, IOMUX_CONFIG_GPIO), /* 44 */
|
||||
IOMUX_MODE(MX31_PIN_DSR_DTE1, IOMUX_CONFIG_GPIO), /* 45 */
|
||||
IOMUX_MODE(MX31_PIN_KEY_COL5, IOMUX_CONFIG_GPIO), /* 55 */
|
||||
IOMUX_MODE(MX31_PIN_KEY_COL6, IOMUX_CONFIG_GPIO), /* 56 */
|
||||
};
|
||||
|
||||
/* SPI */
|
||||
static struct spi_board_info pcm037_spi_dev[] = {
|
||||
{
|
||||
.modalias = "dac124s085",
|
||||
.max_speed_hz = 400000,
|
||||
.bus_num = 0,
|
||||
.chip_select = 1, /* Index in pcm037_spi1_cs[] */
|
||||
.mode = SPI_CPHA,
|
||||
},
|
||||
};
|
||||
|
||||
/* GPIO-keys input device */
|
||||
static struct gpio_keys_button pcm037_gpio_keys[] = {
|
||||
{
|
||||
.type = EV_KEY,
|
||||
.code = KEY_L,
|
||||
.gpio = 0,
|
||||
.desc = "Wheel Manual",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = KEY_A,
|
||||
.gpio = 1,
|
||||
.desc = "Wheel AF",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = KEY_V,
|
||||
.gpio = 2,
|
||||
.desc = "Wheel View",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = KEY_M,
|
||||
.gpio = 3,
|
||||
.desc = "Wheel Menu",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = KEY_UP,
|
||||
.gpio = 32,
|
||||
.desc = "Nav Pad Up",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = KEY_RIGHT,
|
||||
.gpio = 33,
|
||||
.desc = "Nav Pad Right",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = KEY_DOWN,
|
||||
.gpio = 34,
|
||||
.desc = "Nav Pad Down",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = KEY_LEFT,
|
||||
.gpio = 35,
|
||||
.desc = "Nav Pad Left",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = KEY_ENTER,
|
||||
.gpio = 38,
|
||||
.desc = "Nav Pad Ok",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = KEY_O,
|
||||
.gpio = 39,
|
||||
.desc = "Wheel Off",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = BTN_FORWARD,
|
||||
.gpio = 50,
|
||||
.desc = "Focus Forward",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = BTN_BACK,
|
||||
.gpio = 51,
|
||||
.desc = "Focus Backward",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = BTN_MIDDLE,
|
||||
.gpio = 52,
|
||||
.desc = "Release Half",
|
||||
.wakeup = 0,
|
||||
}, {
|
||||
.type = EV_KEY,
|
||||
.code = BTN_EXTRA,
|
||||
.gpio = 53,
|
||||
.desc = "Release Full",
|
||||
.wakeup = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct gpio_keys_platform_data
|
||||
pcm037_gpio_keys_platform_data __initconst = {
|
||||
.buttons = pcm037_gpio_keys,
|
||||
.nbuttons = ARRAY_SIZE(pcm037_gpio_keys),
|
||||
.rep = 0, /* No auto-repeat */
|
||||
};
|
||||
|
||||
int __init pcm037_eet_init_devices(void)
|
||||
{
|
||||
if (pcm037_variant() != PCM037_EET)
|
||||
return 0;
|
||||
|
||||
mxc_iomux_setup_multiple_pins(pcm037_eet_pins,
|
||||
ARRAY_SIZE(pcm037_eet_pins), "pcm037_eet");
|
||||
|
||||
/* SPI */
|
||||
spi_register_board_info(pcm037_spi_dev, ARRAY_SIZE(pcm037_spi_dev));
|
||||
imx31_add_spi_imx0(NULL);
|
||||
|
||||
imx_add_gpio_keys(&pcm037_gpio_keys_platform_data);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,412 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2009 Sascha Hauer, Pengutronix
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/mtd/plat-ram.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/smc911x.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/property.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-imx35.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx35.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
static const struct fb_videomode fb_modedb[] = {
|
||||
{
|
||||
/* 240x320 @ 60 Hz */
|
||||
.name = "Sharp-LQ035Q7",
|
||||
.refresh = 60,
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.pixclock = 185925,
|
||||
.left_margin = 9,
|
||||
.right_margin = 16,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 9,
|
||||
.hsync_len = 1,
|
||||
.vsync_len = 1,
|
||||
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_SHARP_MODE | FB_SYNC_CLK_INVERT | FB_SYNC_CLK_IDLE_EN,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
}, {
|
||||
/* 240x320 @ 60 Hz */
|
||||
.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,
|
||||
.sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct mx3fb_platform_data mx3fb_pdata __initdata = {
|
||||
.name = "Sharp-LQ035Q7",
|
||||
.mode = fb_modedb,
|
||||
.num_modes = ARRAY_SIZE(fb_modedb),
|
||||
};
|
||||
|
||||
static struct physmap_flash_data pcm043_flash_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource pcm043_flash_resource = {
|
||||
.start = 0xa0000000,
|
||||
.end = 0xa1ffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device pcm043_flash = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &pcm043_flash_data,
|
||||
},
|
||||
.resource = &pcm043_flash_resource,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static const struct imxi2c_platform_data pcm043_i2c0_data __initconst = {
|
||||
.bitrate = 50000,
|
||||
};
|
||||
|
||||
static const struct property_entry board_eeprom_properties[] = {
|
||||
PROPERTY_ENTRY_U32("pagesize", 32),
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct i2c_board_info pcm043_i2c_devices[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("24c32", 0x52), /* E0=0, E1=1, E2=0 */
|
||||
.properties = board_eeprom_properties,
|
||||
}, {
|
||||
I2C_BOARD_INFO("pcf8563", 0x51),
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&pcm043_flash,
|
||||
};
|
||||
|
||||
static const iomux_v3_cfg_t pcm043_pads[] __initconst = {
|
||||
/* UART1 */
|
||||
MX35_PAD_CTS1__UART1_CTS,
|
||||
MX35_PAD_RTS1__UART1_RTS,
|
||||
MX35_PAD_TXD1__UART1_TXD_MUX,
|
||||
MX35_PAD_RXD1__UART1_RXD_MUX,
|
||||
/* UART2 */
|
||||
MX35_PAD_CTS2__UART2_CTS,
|
||||
MX35_PAD_RTS2__UART2_RTS,
|
||||
MX35_PAD_TXD2__UART2_TXD_MUX,
|
||||
MX35_PAD_RXD2__UART2_RXD_MUX,
|
||||
/* FEC */
|
||||
MX35_PAD_FEC_TX_CLK__FEC_TX_CLK,
|
||||
MX35_PAD_FEC_RX_CLK__FEC_RX_CLK,
|
||||
MX35_PAD_FEC_RX_DV__FEC_RX_DV,
|
||||
MX35_PAD_FEC_COL__FEC_COL,
|
||||
MX35_PAD_FEC_RDATA0__FEC_RDATA_0,
|
||||
MX35_PAD_FEC_TDATA0__FEC_TDATA_0,
|
||||
MX35_PAD_FEC_TX_EN__FEC_TX_EN,
|
||||
MX35_PAD_FEC_MDC__FEC_MDC,
|
||||
MX35_PAD_FEC_MDIO__FEC_MDIO,
|
||||
MX35_PAD_FEC_TX_ERR__FEC_TX_ERR,
|
||||
MX35_PAD_FEC_RX_ERR__FEC_RX_ERR,
|
||||
MX35_PAD_FEC_CRS__FEC_CRS,
|
||||
MX35_PAD_FEC_RDATA1__FEC_RDATA_1,
|
||||
MX35_PAD_FEC_TDATA1__FEC_TDATA_1,
|
||||
MX35_PAD_FEC_RDATA2__FEC_RDATA_2,
|
||||
MX35_PAD_FEC_TDATA2__FEC_TDATA_2,
|
||||
MX35_PAD_FEC_RDATA3__FEC_RDATA_3,
|
||||
MX35_PAD_FEC_TDATA3__FEC_TDATA_3,
|
||||
/* I2C1 */
|
||||
MX35_PAD_I2C1_CLK__I2C1_SCL,
|
||||
MX35_PAD_I2C1_DAT__I2C1_SDA,
|
||||
/* Display */
|
||||
MX35_PAD_LD0__IPU_DISPB_DAT_0,
|
||||
MX35_PAD_LD1__IPU_DISPB_DAT_1,
|
||||
MX35_PAD_LD2__IPU_DISPB_DAT_2,
|
||||
MX35_PAD_LD3__IPU_DISPB_DAT_3,
|
||||
MX35_PAD_LD4__IPU_DISPB_DAT_4,
|
||||
MX35_PAD_LD5__IPU_DISPB_DAT_5,
|
||||
MX35_PAD_LD6__IPU_DISPB_DAT_6,
|
||||
MX35_PAD_LD7__IPU_DISPB_DAT_7,
|
||||
MX35_PAD_LD8__IPU_DISPB_DAT_8,
|
||||
MX35_PAD_LD9__IPU_DISPB_DAT_9,
|
||||
MX35_PAD_LD10__IPU_DISPB_DAT_10,
|
||||
MX35_PAD_LD11__IPU_DISPB_DAT_11,
|
||||
MX35_PAD_LD12__IPU_DISPB_DAT_12,
|
||||
MX35_PAD_LD13__IPU_DISPB_DAT_13,
|
||||
MX35_PAD_LD14__IPU_DISPB_DAT_14,
|
||||
MX35_PAD_LD15__IPU_DISPB_DAT_15,
|
||||
MX35_PAD_LD16__IPU_DISPB_DAT_16,
|
||||
MX35_PAD_LD17__IPU_DISPB_DAT_17,
|
||||
MX35_PAD_D3_HSYNC__IPU_DISPB_D3_HSYNC,
|
||||
MX35_PAD_D3_FPSHIFT__IPU_DISPB_D3_CLK,
|
||||
MX35_PAD_D3_DRDY__IPU_DISPB_D3_DRDY,
|
||||
MX35_PAD_CONTRAST__IPU_DISPB_CONTR,
|
||||
MX35_PAD_D3_VSYNC__IPU_DISPB_D3_VSYNC,
|
||||
MX35_PAD_D3_REV__IPU_DISPB_D3_REV,
|
||||
MX35_PAD_D3_CLS__IPU_DISPB_D3_CLS,
|
||||
/* gpio */
|
||||
MX35_PAD_ATA_CS0__GPIO2_6,
|
||||
/* USB host */
|
||||
MX35_PAD_I2C2_CLK__USB_TOP_USBH2_PWR,
|
||||
MX35_PAD_I2C2_DAT__USB_TOP_USBH2_OC,
|
||||
/* SSI */
|
||||
MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS,
|
||||
MX35_PAD_STXD4__AUDMUX_AUD4_TXD,
|
||||
MX35_PAD_SRXD4__AUDMUX_AUD4_RXD,
|
||||
MX35_PAD_SCK4__AUDMUX_AUD4_TXC,
|
||||
/* CAN2 */
|
||||
MX35_PAD_TX5_RX0__CAN2_TXCAN,
|
||||
MX35_PAD_TX4_RX1__CAN2_RXCAN,
|
||||
/* esdhc */
|
||||
MX35_PAD_SD1_CMD__ESDHC1_CMD,
|
||||
MX35_PAD_SD1_CLK__ESDHC1_CLK,
|
||||
MX35_PAD_SD1_DATA0__ESDHC1_DAT0,
|
||||
MX35_PAD_SD1_DATA1__ESDHC1_DAT1,
|
||||
MX35_PAD_SD1_DATA2__ESDHC1_DAT2,
|
||||
MX35_PAD_SD1_DATA3__ESDHC1_DAT3,
|
||||
MX35_PAD_ATA_DATA10__GPIO2_23, /* WriteProtect */
|
||||
MX35_PAD_ATA_DATA11__GPIO2_24, /* CardDetect */
|
||||
};
|
||||
|
||||
#define AC97_GPIO_TXFS IMX_GPIO_NR(2, 31)
|
||||
#define AC97_GPIO_TXD IMX_GPIO_NR(2, 28)
|
||||
#define AC97_GPIO_RESET IMX_GPIO_NR(2, 0)
|
||||
|
||||
static void pcm043_ac97_warm_reset(struct snd_ac97 *ac97)
|
||||
{
|
||||
iomux_v3_cfg_t txfs_gpio = MX35_PAD_STXFS4__GPIO2_31;
|
||||
iomux_v3_cfg_t txfs = MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS;
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(AC97_GPIO_TXFS, "SSI");
|
||||
if (ret) {
|
||||
printk("failed to get GPIO_TXFS: %d\n", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
mxc_iomux_v3_setup_pad(txfs_gpio);
|
||||
|
||||
/* warm reset */
|
||||
gpio_direction_output(AC97_GPIO_TXFS, 1);
|
||||
udelay(2);
|
||||
gpio_set_value(AC97_GPIO_TXFS, 0);
|
||||
|
||||
gpio_free(AC97_GPIO_TXFS);
|
||||
mxc_iomux_v3_setup_pad(txfs);
|
||||
}
|
||||
|
||||
static void pcm043_ac97_cold_reset(struct snd_ac97 *ac97)
|
||||
{
|
||||
iomux_v3_cfg_t txfs_gpio = MX35_PAD_STXFS4__GPIO2_31;
|
||||
iomux_v3_cfg_t txfs = MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS;
|
||||
iomux_v3_cfg_t txd_gpio = MX35_PAD_STXD4__GPIO2_28;
|
||||
iomux_v3_cfg_t txd = MX35_PAD_STXD4__AUDMUX_AUD4_TXD;
|
||||
iomux_v3_cfg_t reset_gpio = MX35_PAD_SD2_CMD__GPIO2_0;
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(AC97_GPIO_TXFS, "SSI");
|
||||
if (ret)
|
||||
goto err1;
|
||||
|
||||
ret = gpio_request(AC97_GPIO_TXD, "SSI");
|
||||
if (ret)
|
||||
goto err2;
|
||||
|
||||
ret = gpio_request(AC97_GPIO_RESET, "SSI");
|
||||
if (ret)
|
||||
goto err3;
|
||||
|
||||
mxc_iomux_v3_setup_pad(txfs_gpio);
|
||||
mxc_iomux_v3_setup_pad(txd_gpio);
|
||||
mxc_iomux_v3_setup_pad(reset_gpio);
|
||||
|
||||
gpio_direction_output(AC97_GPIO_TXFS, 0);
|
||||
gpio_direction_output(AC97_GPIO_TXD, 0);
|
||||
|
||||
/* cold reset */
|
||||
gpio_direction_output(AC97_GPIO_RESET, 0);
|
||||
udelay(10);
|
||||
gpio_direction_output(AC97_GPIO_RESET, 1);
|
||||
|
||||
mxc_iomux_v3_setup_pad(txd);
|
||||
mxc_iomux_v3_setup_pad(txfs);
|
||||
|
||||
gpio_free(AC97_GPIO_RESET);
|
||||
err3:
|
||||
gpio_free(AC97_GPIO_TXD);
|
||||
err2:
|
||||
gpio_free(AC97_GPIO_TXFS);
|
||||
err1:
|
||||
if (ret)
|
||||
printk("%s failed with %d\n", __func__, ret);
|
||||
mdelay(1);
|
||||
}
|
||||
|
||||
static const struct imx_ssi_platform_data pcm043_ssi_pdata __initconst = {
|
||||
.ac97_reset = pcm043_ac97_cold_reset,
|
||||
.ac97_warm_reset = pcm043_ac97_warm_reset,
|
||||
.flags = IMX_SSI_USE_AC97,
|
||||
};
|
||||
|
||||
static const struct mxc_nand_platform_data
|
||||
pcm037_nand_board_info __initconst = {
|
||||
.width = 1,
|
||||
.hw_ecc = 1,
|
||||
};
|
||||
|
||||
static int pcm043_otg_init(struct platform_device *pdev)
|
||||
{
|
||||
return mx35_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data otg_pdata __initdata = {
|
||||
.init = pcm043_otg_init,
|
||||
.portsc = MXC_EHCI_MODE_UTMI,
|
||||
};
|
||||
|
||||
static int pcm043_usbh1_init(struct platform_device *pdev)
|
||||
{
|
||||
return mx35_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_SINGLE_UNI |
|
||||
MXC_EHCI_INTERNAL_PHY | MXC_EHCI_IPPUE_DOWN);
|
||||
}
|
||||
|
||||
static const struct mxc_usbh_platform_data usbh1_pdata __initconst = {
|
||||
.init = pcm043_usbh1_init,
|
||||
.portsc = MXC_EHCI_MODE_SERIAL,
|
||||
};
|
||||
|
||||
static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_UTMI,
|
||||
};
|
||||
|
||||
static bool otg_mode_host __initdata;
|
||||
|
||||
static int __init pcm043_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=", pcm043_otg_mode);
|
||||
|
||||
static struct esdhc_platform_data sd1_pdata = {
|
||||
.wp_type = ESDHC_WP_GPIO,
|
||||
.cd_type = ESDHC_CD_GPIO,
|
||||
};
|
||||
|
||||
static struct gpiod_lookup_table sd1_gpio_table = {
|
||||
.dev_id = "sdhci-esdhc-imx35.0",
|
||||
.table = {
|
||||
/* Card detect: bank 2 offset 24 */
|
||||
GPIO_LOOKUP("imx35-gpio.2", 24, "cd", GPIO_ACTIVE_LOW),
|
||||
/* Write protect: bank 2 offset 23 */
|
||||
GPIO_LOOKUP("imx35-gpio.2", 23, "wp", GPIO_ACTIVE_LOW),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* Board specific initialization.
|
||||
*/
|
||||
static void __init pcm043_init(void)
|
||||
{
|
||||
imx35_soc_init();
|
||||
|
||||
mxc_iomux_v3_setup_multiple_pads(pcm043_pads, ARRAY_SIZE(pcm043_pads));
|
||||
|
||||
imx35_add_fec(NULL);
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
imx35_add_imx2_wdt();
|
||||
|
||||
imx35_add_imx_uart0(&uart_pdata);
|
||||
imx35_add_mxc_nand(&pcm037_nand_board_info);
|
||||
|
||||
imx35_add_imx_uart1(&uart_pdata);
|
||||
|
||||
i2c_register_board_info(0, pcm043_i2c_devices,
|
||||
ARRAY_SIZE(pcm043_i2c_devices));
|
||||
|
||||
imx35_add_imx_i2c0(&pcm043_i2c0_data);
|
||||
|
||||
imx35_add_ipu_core();
|
||||
imx35_add_mx3_sdc_fb(&mx3fb_pdata);
|
||||
|
||||
if (otg_mode_host) {
|
||||
otg_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
|
||||
ULPI_OTG_DRVVBUS_EXT);
|
||||
if (otg_pdata.otg)
|
||||
imx35_add_mxc_ehci_otg(&otg_pdata);
|
||||
}
|
||||
imx35_add_mxc_ehci_hs(&usbh1_pdata);
|
||||
|
||||
if (!otg_mode_host)
|
||||
imx35_add_fsl_usb2_udc(&otg_device_pdata);
|
||||
|
||||
imx35_add_flexcan1();
|
||||
}
|
||||
|
||||
static void __init pcm043_late_init(void)
|
||||
{
|
||||
imx35_add_imx_ssi(0, &pcm043_ssi_pdata);
|
||||
|
||||
gpiod_add_lookup_table(&sd1_gpio_table);
|
||||
imx35_add_sdhci_esdhc_imx(0, &sd1_pdata);
|
||||
}
|
||||
|
||||
static void __init pcm043_timer_init(void)
|
||||
{
|
||||
mx35_clocks_init();
|
||||
}
|
||||
|
||||
MACHINE_START(PCM043, "Phytec Phycore pcm043")
|
||||
/* Maintainer: Pengutronix */
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx35_map_io,
|
||||
.init_early = imx35_init_early,
|
||||
.init_irq = mx35_init_irq,
|
||||
.init_time = pcm043_timer_init,
|
||||
.init_machine = pcm043_init,
|
||||
.init_late = pcm043_late_init,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,262 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2009 Ilya Yanok, Emcraft Systems Ltd, <yanok@emcraft.com>
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/mtd/platnand.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/setup.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
|
||||
/* FPGA defines */
|
||||
#define QONG_FPGA_VERSION(major, minor, rev) \
|
||||
(((major & 0xF) << 12) | ((minor & 0xF) << 8) | (rev & 0xFF))
|
||||
|
||||
#define QONG_FPGA_BASEADDR MX31_CS1_BASE_ADDR
|
||||
#define QONG_FPGA_PERIPH_SIZE (1 << 24)
|
||||
|
||||
#define QONG_FPGA_CTRL_BASEADDR QONG_FPGA_BASEADDR
|
||||
#define QONG_FPGA_CTRL_SIZE 0x10
|
||||
/* FPGA control registers */
|
||||
#define QONG_FPGA_CTRL_VERSION 0x00
|
||||
|
||||
#define QONG_DNET_ID 1
|
||||
#define QONG_DNET_BASEADDR \
|
||||
(QONG_FPGA_BASEADDR + QONG_DNET_ID * QONG_FPGA_PERIPH_SIZE)
|
||||
#define QONG_DNET_SIZE 0x00001000
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static int uart_pins[] = {
|
||||
MX31_PIN_CTS1__CTS1,
|
||||
MX31_PIN_RTS1__RTS1,
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1
|
||||
};
|
||||
|
||||
static inline void __init mxc_init_imx_uart(void)
|
||||
{
|
||||
mxc_iomux_setup_multiple_pins(uart_pins, ARRAY_SIZE(uart_pins),
|
||||
"uart-0");
|
||||
imx31_add_imx_uart0(&uart_pdata);
|
||||
}
|
||||
|
||||
static struct resource dnet_resources[] = {
|
||||
{
|
||||
.name = "dnet-memory",
|
||||
.start = QONG_DNET_BASEADDR,
|
||||
.end = QONG_DNET_BASEADDR + QONG_DNET_SIZE - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
/* irq number is run-time assigned */
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device dnet_device = {
|
||||
.name = "dnet",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(dnet_resources),
|
||||
.resource = dnet_resources,
|
||||
};
|
||||
|
||||
static int __init qong_init_dnet(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
dnet_resources[1].start =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1));
|
||||
dnet_resources[1].end =
|
||||
gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1));
|
||||
ret = platform_device_register(&dnet_device);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* MTD NOR flash */
|
||||
|
||||
static struct physmap_flash_data qong_flash_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource qong_flash_resource = {
|
||||
.start = MX31_CS0_BASE_ADDR,
|
||||
.end = MX31_CS0_BASE_ADDR + SZ_128M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device qong_nor_mtd_device = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &qong_flash_data,
|
||||
},
|
||||
.resource = &qong_flash_resource,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
static void qong_init_nor_mtd(void)
|
||||
{
|
||||
(void)platform_device_register(&qong_nor_mtd_device);
|
||||
}
|
||||
|
||||
/*
|
||||
* Hardware specific access to control-lines
|
||||
*/
|
||||
static void qong_nand_cmd_ctrl(struct nand_chip *nand_chip, int cmd,
|
||||
unsigned int ctrl)
|
||||
{
|
||||
if (cmd == NAND_CMD_NONE)
|
||||
return;
|
||||
|
||||
if (ctrl & NAND_CLE)
|
||||
writeb(cmd, nand_chip->legacy.IO_ADDR_W + (1 << 24));
|
||||
else
|
||||
writeb(cmd, nand_chip->legacy.IO_ADDR_W + (1 << 23));
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the Device Ready pin.
|
||||
*/
|
||||
static int qong_nand_device_ready(struct nand_chip *chip)
|
||||
{
|
||||
return gpio_get_value(IOMUX_TO_GPIO(MX31_PIN_NFRB));
|
||||
}
|
||||
|
||||
static void qong_nand_select_chip(struct nand_chip *chip, int cs)
|
||||
{
|
||||
if (cs >= 0)
|
||||
gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), 0);
|
||||
else
|
||||
gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), 1);
|
||||
}
|
||||
|
||||
static struct platform_nand_data qong_nand_data = {
|
||||
.chip = {
|
||||
.nr_chips = 1,
|
||||
.chip_delay = 20,
|
||||
.options = 0,
|
||||
},
|
||||
.ctrl = {
|
||||
.cmd_ctrl = qong_nand_cmd_ctrl,
|
||||
.dev_ready = qong_nand_device_ready,
|
||||
.select_chip = qong_nand_select_chip,
|
||||
}
|
||||
};
|
||||
|
||||
static struct resource qong_nand_resource = {
|
||||
.start = MX31_CS3_BASE_ADDR,
|
||||
.end = MX31_CS3_BASE_ADDR + SZ_32M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device qong_nand_device = {
|
||||
.name = "gen_nand",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &qong_nand_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &qong_nand_resource,
|
||||
};
|
||||
|
||||
static void __init qong_init_nand_mtd(void)
|
||||
{
|
||||
/* init CS */
|
||||
imx_writel(0x00004f00, MX31_IO_ADDRESS(MX31_WEIM_CSCRxU(3)));
|
||||
imx_writel(0x20013b31, MX31_IO_ADDRESS(MX31_WEIM_CSCRxL(3)));
|
||||
imx_writel(0x00020800, MX31_IO_ADDRESS(MX31_WEIM_CSCRxA(3)));
|
||||
|
||||
mxc_iomux_set_gpr(MUX_SDCTL_CSD1_SEL, true);
|
||||
|
||||
/* enable pin */
|
||||
mxc_iomux_mode(IOMUX_MODE(MX31_PIN_NFCE_B, IOMUX_CONFIG_GPIO));
|
||||
if (!gpio_request(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), "nand_enable"))
|
||||
gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), 0);
|
||||
|
||||
/* ready/busy pin */
|
||||
mxc_iomux_mode(IOMUX_MODE(MX31_PIN_NFRB, IOMUX_CONFIG_GPIO));
|
||||
if (!gpio_request(IOMUX_TO_GPIO(MX31_PIN_NFRB), "nand_rdy"))
|
||||
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_NFRB));
|
||||
|
||||
/* write protect pin */
|
||||
mxc_iomux_mode(IOMUX_MODE(MX31_PIN_NFWP_B, IOMUX_CONFIG_GPIO));
|
||||
if (!gpio_request(IOMUX_TO_GPIO(MX31_PIN_NFWP_B), "nand_wp"))
|
||||
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_NFWP_B));
|
||||
|
||||
platform_device_register(&qong_nand_device);
|
||||
}
|
||||
|
||||
static void __init qong_init_fpga(void)
|
||||
{
|
||||
void __iomem *regs;
|
||||
u32 fpga_ver;
|
||||
|
||||
regs = ioremap(QONG_FPGA_CTRL_BASEADDR, QONG_FPGA_CTRL_SIZE);
|
||||
if (!regs) {
|
||||
printk(KERN_ERR "%s: failed to map registers, aborting.\n",
|
||||
__func__);
|
||||
return;
|
||||
}
|
||||
|
||||
fpga_ver = readl(regs + QONG_FPGA_CTRL_VERSION);
|
||||
iounmap(regs);
|
||||
printk(KERN_INFO "Qong FPGA version %d.%d.%d\n",
|
||||
(fpga_ver & 0xF000) >> 12,
|
||||
(fpga_ver & 0x0F00) >> 8, fpga_ver & 0x00FF);
|
||||
if (fpga_ver < QONG_FPGA_VERSION(0, 8, 7)) {
|
||||
printk(KERN_ERR "qong: Unexpected FPGA version, FPGA-based "
|
||||
"devices won't be registered!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* register FPGA-based devices */
|
||||
qong_init_nand_mtd();
|
||||
qong_init_dnet();
|
||||
}
|
||||
|
||||
/*
|
||||
* Board specific initialization.
|
||||
*/
|
||||
static void __init qong_init(void)
|
||||
{
|
||||
imx31_soc_init();
|
||||
|
||||
mxc_init_imx_uart();
|
||||
qong_init_nor_mtd();
|
||||
imx31_add_imx2_wdt();
|
||||
}
|
||||
|
||||
static void __init qong_timer_init(void)
|
||||
{
|
||||
mx31_clocks_init(26000000);
|
||||
}
|
||||
|
||||
MACHINE_START(QONG, "Dave/DENX QongEVB-LITE")
|
||||
/* Maintainer: DENX Software Engineering GmbH */
|
||||
.atag_offset = 0x100,
|
||||
.map_io = mx31_map_io,
|
||||
.init_early = imx31_init_early,
|
||||
.init_irq = mx31_init_irq,
|
||||
.init_time = qong_timer_init,
|
||||
.init_machine = qong_init,
|
||||
.init_late = qong_init_fpga,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,306 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright 2009 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
* Copyright (C) 2009 Marc Kleine-Budde, Pengutronix
|
||||
* Copyright 2010 Creative Product Design
|
||||
*
|
||||
* Derived from mx35 3stack.
|
||||
* Original author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/mfd/mc13xxx.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices-imx35.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx35.h"
|
||||
|
||||
#define GPIO_LCDPWR IMX_GPIO_NR(1, 2)
|
||||
#define GPIO_PMIC_INT IMX_GPIO_NR(2, 0)
|
||||
|
||||
#define GPIO_BUTTON1 IMX_GPIO_NR(1, 4)
|
||||
#define GPIO_BUTTON2 IMX_GPIO_NR(1, 5)
|
||||
#define GPIO_BUTTON3 IMX_GPIO_NR(1, 7)
|
||||
#define GPIO_BUTTON4 IMX_GPIO_NR(1, 8)
|
||||
#define GPIO_BUTTON5 IMX_GPIO_NR(1, 9)
|
||||
#define GPIO_BUTTON6 IMX_GPIO_NR(1, 10)
|
||||
#define GPIO_BUTTON7 IMX_GPIO_NR(1, 11)
|
||||
#define GPIO_BUTTON8 IMX_GPIO_NR(1, 12)
|
||||
|
||||
static const struct fb_videomode fb_modedb[] = {
|
||||
{
|
||||
/* 800x480 @ 60 Hz */
|
||||
.name = "PT0708048",
|
||||
.refresh = 60,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
.pixclock = KHZ2PICOS(33260),
|
||||
.left_margin = 50,
|
||||
.right_margin = 156,
|
||||
.upper_margin = 10,
|
||||
.lower_margin = 10,
|
||||
.hsync_len = 1, /* note: DE only display */
|
||||
.vsync_len = 1, /* note: DE only display */
|
||||
.sync = FB_SYNC_CLK_IDLE_EN | FB_SYNC_OE_ACT_HIGH,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
}, {
|
||||
/* 800x480 @ 60 Hz */
|
||||
.name = "CTP-CLAA070LC0ACW",
|
||||
.refresh = 60,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
.pixclock = KHZ2PICOS(27000),
|
||||
.left_margin = 50,
|
||||
.right_margin = 50, /* whole line should have 900 clocks */
|
||||
.upper_margin = 10,
|
||||
.lower_margin = 10, /* whole frame should have 500 lines */
|
||||
.hsync_len = 1, /* note: DE only display */
|
||||
.vsync_len = 1, /* note: DE only display */
|
||||
.sync = FB_SYNC_CLK_IDLE_EN | FB_SYNC_OE_ACT_HIGH,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
}
|
||||
};
|
||||
|
||||
static struct mx3fb_platform_data mx3fb_pdata __initdata = {
|
||||
.name = "PT0708048",
|
||||
.mode = fb_modedb,
|
||||
.num_modes = ARRAY_SIZE(fb_modedb),
|
||||
};
|
||||
|
||||
static struct physmap_flash_data vpr200_flash_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource vpr200_flash_resource = {
|
||||
.start = MX35_CS0_BASE_ADDR,
|
||||
.end = MX35_CS0_BASE_ADDR + SZ_64M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device vpr200_flash = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &vpr200_flash_data,
|
||||
},
|
||||
.resource = &vpr200_flash_resource,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
static const struct mxc_nand_platform_data
|
||||
vpr200_nand_board_info __initconst = {
|
||||
.width = 1,
|
||||
.hw_ecc = 1,
|
||||
.flash_bbt = 1,
|
||||
};
|
||||
|
||||
#define VPR_KEY_DEBOUNCE 500
|
||||
static struct gpio_keys_button vpr200_gpio_keys_table[] = {
|
||||
{KEY_F2, GPIO_BUTTON1, 1, "vpr-keys: F2", 0, VPR_KEY_DEBOUNCE},
|
||||
{KEY_F3, GPIO_BUTTON2, 1, "vpr-keys: F3", 0, VPR_KEY_DEBOUNCE},
|
||||
{KEY_F4, GPIO_BUTTON3, 1, "vpr-keys: F4", 0, VPR_KEY_DEBOUNCE},
|
||||
{KEY_F5, GPIO_BUTTON4, 1, "vpr-keys: F5", 0, VPR_KEY_DEBOUNCE},
|
||||
{KEY_F6, GPIO_BUTTON5, 1, "vpr-keys: F6", 0, VPR_KEY_DEBOUNCE},
|
||||
{KEY_F7, GPIO_BUTTON6, 1, "vpr-keys: F7", 0, VPR_KEY_DEBOUNCE},
|
||||
{KEY_F8, GPIO_BUTTON7, 1, "vpr-keys: F8", 1, VPR_KEY_DEBOUNCE},
|
||||
{KEY_F9, GPIO_BUTTON8, 1, "vpr-keys: F9", 1, VPR_KEY_DEBOUNCE},
|
||||
};
|
||||
|
||||
static const struct gpio_keys_platform_data
|
||||
vpr200_gpio_keys_data __initconst = {
|
||||
.buttons = vpr200_gpio_keys_table,
|
||||
.nbuttons = ARRAY_SIZE(vpr200_gpio_keys_table),
|
||||
};
|
||||
|
||||
static struct mc13xxx_platform_data vpr200_pmic = {
|
||||
.flags = MC13XXX_USE_ADC | MC13XXX_USE_TOUCHSCREEN,
|
||||
};
|
||||
|
||||
static const struct imxi2c_platform_data vpr200_i2c0_data __initconst = {
|
||||
.bitrate = 50000,
|
||||
};
|
||||
|
||||
static struct i2c_board_info vpr200_i2c_devices[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("24c02", 0x50), /* E0=0, E1=0, E2=0 */
|
||||
}, {
|
||||
I2C_BOARD_INFO("mc13892", 0x08),
|
||||
.platform_data = &vpr200_pmic,
|
||||
/* irq number is run-time assigned */
|
||||
}
|
||||
};
|
||||
|
||||
static const iomux_v3_cfg_t vpr200_pads[] __initconst = {
|
||||
/* UART1 */
|
||||
MX35_PAD_TXD1__UART1_TXD_MUX,
|
||||
MX35_PAD_RXD1__UART1_RXD_MUX,
|
||||
/* UART3 */
|
||||
MX35_PAD_ATA_DATA10__UART3_RXD_MUX,
|
||||
MX35_PAD_ATA_DATA11__UART3_TXD_MUX,
|
||||
/* FEC */
|
||||
MX35_PAD_FEC_TX_CLK__FEC_TX_CLK,
|
||||
MX35_PAD_FEC_RX_CLK__FEC_RX_CLK,
|
||||
MX35_PAD_FEC_RX_DV__FEC_RX_DV,
|
||||
MX35_PAD_FEC_COL__FEC_COL,
|
||||
MX35_PAD_FEC_RDATA0__FEC_RDATA_0,
|
||||
MX35_PAD_FEC_TDATA0__FEC_TDATA_0,
|
||||
MX35_PAD_FEC_TX_EN__FEC_TX_EN,
|
||||
MX35_PAD_FEC_MDC__FEC_MDC,
|
||||
MX35_PAD_FEC_MDIO__FEC_MDIO,
|
||||
MX35_PAD_FEC_TX_ERR__FEC_TX_ERR,
|
||||
MX35_PAD_FEC_RX_ERR__FEC_RX_ERR,
|
||||
MX35_PAD_FEC_CRS__FEC_CRS,
|
||||
MX35_PAD_FEC_RDATA1__FEC_RDATA_1,
|
||||
MX35_PAD_FEC_TDATA1__FEC_TDATA_1,
|
||||
MX35_PAD_FEC_RDATA2__FEC_RDATA_2,
|
||||
MX35_PAD_FEC_TDATA2__FEC_TDATA_2,
|
||||
MX35_PAD_FEC_RDATA3__FEC_RDATA_3,
|
||||
MX35_PAD_FEC_TDATA3__FEC_TDATA_3,
|
||||
/* Display */
|
||||
MX35_PAD_LD0__IPU_DISPB_DAT_0,
|
||||
MX35_PAD_LD1__IPU_DISPB_DAT_1,
|
||||
MX35_PAD_LD2__IPU_DISPB_DAT_2,
|
||||
MX35_PAD_LD3__IPU_DISPB_DAT_3,
|
||||
MX35_PAD_LD4__IPU_DISPB_DAT_4,
|
||||
MX35_PAD_LD5__IPU_DISPB_DAT_5,
|
||||
MX35_PAD_LD6__IPU_DISPB_DAT_6,
|
||||
MX35_PAD_LD7__IPU_DISPB_DAT_7,
|
||||
MX35_PAD_LD8__IPU_DISPB_DAT_8,
|
||||
MX35_PAD_LD9__IPU_DISPB_DAT_9,
|
||||
MX35_PAD_LD10__IPU_DISPB_DAT_10,
|
||||
MX35_PAD_LD11__IPU_DISPB_DAT_11,
|
||||
MX35_PAD_LD12__IPU_DISPB_DAT_12,
|
||||
MX35_PAD_LD13__IPU_DISPB_DAT_13,
|
||||
MX35_PAD_LD14__IPU_DISPB_DAT_14,
|
||||
MX35_PAD_LD15__IPU_DISPB_DAT_15,
|
||||
MX35_PAD_LD16__IPU_DISPB_DAT_16,
|
||||
MX35_PAD_LD17__IPU_DISPB_DAT_17,
|
||||
MX35_PAD_D3_FPSHIFT__IPU_DISPB_D3_CLK,
|
||||
MX35_PAD_D3_DRDY__IPU_DISPB_D3_DRDY,
|
||||
MX35_PAD_CONTRAST__IPU_DISPB_CONTR,
|
||||
/* LCD Enable */
|
||||
MX35_PAD_D3_VSYNC__GPIO1_2,
|
||||
/* USBOTG */
|
||||
MX35_PAD_USBOTG_PWR__USB_TOP_USBOTG_PWR,
|
||||
MX35_PAD_USBOTG_OC__USB_TOP_USBOTG_OC,
|
||||
/* SDCARD */
|
||||
MX35_PAD_SD1_CMD__ESDHC1_CMD,
|
||||
MX35_PAD_SD1_CLK__ESDHC1_CLK,
|
||||
MX35_PAD_SD1_DATA0__ESDHC1_DAT0,
|
||||
MX35_PAD_SD1_DATA1__ESDHC1_DAT1,
|
||||
MX35_PAD_SD1_DATA2__ESDHC1_DAT2,
|
||||
MX35_PAD_SD1_DATA3__ESDHC1_DAT3,
|
||||
/* PMIC */
|
||||
MX35_PAD_GPIO2_0__GPIO2_0,
|
||||
/* GPIO keys */
|
||||
MX35_PAD_SCKR__GPIO1_4,
|
||||
MX35_PAD_COMPARE__GPIO1_5,
|
||||
MX35_PAD_SCKT__GPIO1_7,
|
||||
MX35_PAD_FST__GPIO1_8,
|
||||
MX35_PAD_HCKT__GPIO1_9,
|
||||
MX35_PAD_TX5_RX0__GPIO1_10,
|
||||
MX35_PAD_TX4_RX1__GPIO1_11,
|
||||
MX35_PAD_TX3_RX2__GPIO1_12,
|
||||
};
|
||||
|
||||
/* USB Device config */
|
||||
static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_UTMI,
|
||||
.workaround = FLS_USB2_WORKAROUND_ENGCM09152,
|
||||
};
|
||||
|
||||
static int vpr200_usbh_init(struct platform_device *pdev)
|
||||
{
|
||||
return mx35_initialize_usb_hw(pdev->id,
|
||||
MXC_EHCI_INTERFACE_SINGLE_UNI | MXC_EHCI_INTERNAL_PHY);
|
||||
}
|
||||
|
||||
/* USB HOST config */
|
||||
static const struct mxc_usbh_platform_data usb_host_pdata __initconst = {
|
||||
.init = vpr200_usbh_init,
|
||||
.portsc = MXC_EHCI_MODE_SERIAL,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&vpr200_flash,
|
||||
};
|
||||
|
||||
/*
|
||||
* Board specific initialization.
|
||||
*/
|
||||
static void __init vpr200_board_init(void)
|
||||
{
|
||||
imx35_soc_init();
|
||||
|
||||
mxc_iomux_v3_setup_multiple_pads(vpr200_pads, ARRAY_SIZE(vpr200_pads));
|
||||
|
||||
imx35_add_fec(NULL);
|
||||
imx35_add_imx2_wdt();
|
||||
|
||||
imx35_add_imx_uart0(NULL);
|
||||
imx35_add_imx_uart2(NULL);
|
||||
|
||||
imx35_add_ipu_core();
|
||||
imx35_add_mx3_sdc_fb(&mx3fb_pdata);
|
||||
|
||||
imx35_add_fsl_usb2_udc(&otg_device_pdata);
|
||||
imx35_add_mxc_ehci_hs(&usb_host_pdata);
|
||||
|
||||
imx35_add_mxc_nand(&vpr200_nand_board_info);
|
||||
imx35_add_sdhci_esdhc_imx(0, NULL);
|
||||
}
|
||||
|
||||
static void __init vpr200_late_init(void)
|
||||
{
|
||||
imx_add_gpio_keys(&vpr200_gpio_keys_data);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
if (0 != gpio_request(GPIO_LCDPWR, "LCDPWR"))
|
||||
printk(KERN_WARNING "vpr200: Couldn't get LCDPWR gpio\n");
|
||||
else
|
||||
gpio_direction_output(GPIO_LCDPWR, 0);
|
||||
|
||||
if (0 != gpio_request(GPIO_PMIC_INT, "PMIC_INT"))
|
||||
printk(KERN_WARNING "vpr200: Couldn't get PMIC_INT gpio\n");
|
||||
else
|
||||
gpio_direction_input(GPIO_PMIC_INT);
|
||||
|
||||
vpr200_i2c_devices[1].irq = gpio_to_irq(GPIO_PMIC_INT);
|
||||
i2c_register_board_info(0, vpr200_i2c_devices,
|
||||
ARRAY_SIZE(vpr200_i2c_devices));
|
||||
|
||||
imx35_add_imx_i2c0(&vpr200_i2c0_data);
|
||||
}
|
||||
|
||||
static void __init vpr200_timer_init(void)
|
||||
{
|
||||
mx35_clocks_init();
|
||||
}
|
||||
|
||||
MACHINE_START(VPR200, "VPR200")
|
||||
/* Maintainer: Creative Product Design */
|
||||
.map_io = mx35_map_io,
|
||||
.init_early = imx35_init_early,
|
||||
.init_irq = mx35_init_irq,
|
||||
.init_time = vpr200_timer_init,
|
||||
.init_machine = vpr200_board_init,
|
||||
.init_late = vpr200_late_init,
|
||||
.restart = mxc_restart,
|
||||
MACHINE_END
|
|
@ -1,84 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* arch/arm/mach-imx/mm-imx21.c
|
||||
*
|
||||
* Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de)
|
||||
*/
|
||||
|
||||
#include <linux/mm.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/pinctrl/machine.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices/devices-common.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-v1.h"
|
||||
|
||||
/* MX21 memory map definition */
|
||||
static struct map_desc imx21_io_desc[] __initdata = {
|
||||
/*
|
||||
* this fixed mapping covers:
|
||||
* - AIPI1
|
||||
* - AIPI2
|
||||
* - AITC
|
||||
* - ROM Patch
|
||||
* - and some reserved space
|
||||
*/
|
||||
imx_map_entry(MX21, AIPI, MT_DEVICE),
|
||||
/*
|
||||
* this fixed mapping covers:
|
||||
* - CSI
|
||||
* - ATA
|
||||
*/
|
||||
imx_map_entry(MX21, SAHB1, MT_DEVICE),
|
||||
/*
|
||||
* this fixed mapping covers:
|
||||
* - EMI
|
||||
*/
|
||||
imx_map_entry(MX21, X_MEMC, MT_DEVICE),
|
||||
};
|
||||
|
||||
/*
|
||||
* Initialize the memory map. It is called during the
|
||||
* system startup to create static physical to virtual
|
||||
* memory map for the IO modules.
|
||||
*/
|
||||
void __init mx21_map_io(void)
|
||||
{
|
||||
iotable_init(imx21_io_desc, ARRAY_SIZE(imx21_io_desc));
|
||||
}
|
||||
|
||||
void __init imx21_init_early(void)
|
||||
{
|
||||
mxc_set_cpu_type(MXC_CPU_MX21);
|
||||
imx_iomuxv1_init(MX21_IO_ADDRESS(MX21_GPIO_BASE_ADDR),
|
||||
MX21_NUM_GPIO_PORT);
|
||||
}
|
||||
|
||||
void __init mx21_init_irq(void)
|
||||
{
|
||||
mxc_init_irq(MX21_IO_ADDRESS(MX21_AVIC_BASE_ADDR));
|
||||
}
|
||||
|
||||
static const struct resource imx21_audmux_res[] __initconst = {
|
||||
DEFINE_RES_MEM(MX21_AUDMUX_BASE_ADDR, SZ_4K),
|
||||
};
|
||||
|
||||
void __init imx21_soc_init(void)
|
||||
{
|
||||
mxc_arch_reset_init(MX21_IO_ADDRESS(MX21_WDOG_BASE_ADDR));
|
||||
mxc_device_init();
|
||||
|
||||
mxc_register_gpio("imx21-gpio", 0, MX21_GPIO1_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);
|
||||
mxc_register_gpio("imx21-gpio", 1, MX21_GPIO2_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);
|
||||
mxc_register_gpio("imx21-gpio", 2, MX21_GPIO3_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);
|
||||
mxc_register_gpio("imx21-gpio", 3, MX21_GPIO4_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);
|
||||
mxc_register_gpio("imx21-gpio", 4, MX21_GPIO5_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);
|
||||
mxc_register_gpio("imx21-gpio", 5, MX21_GPIO6_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);
|
||||
|
||||
pinctrl_provide_dummies();
|
||||
imx_add_imx_dma("imx21-dma", MX21_DMA_BASE_ADDR, MX21_INT_DMACH0);
|
||||
platform_device_register_simple("imx21-audmux", 0, imx21_audmux_res,
|
||||
ARRAY_SIZE(imx21_audmux_res));
|
||||
}
|
|
@ -1,88 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* arch/arm/mach-imx/mm-imx27.c
|
||||
*
|
||||
* Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de)
|
||||
*/
|
||||
|
||||
#include <linux/mm.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/pinctrl/machine.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices/devices-common.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-v1.h"
|
||||
|
||||
/* MX27 memory map definition */
|
||||
static struct map_desc imx27_io_desc[] __initdata = {
|
||||
/*
|
||||
* this fixed mapping covers:
|
||||
* - AIPI1
|
||||
* - AIPI2
|
||||
* - AITC
|
||||
* - ROM Patch
|
||||
* - and some reserved space
|
||||
*/
|
||||
imx_map_entry(MX27, AIPI, MT_DEVICE),
|
||||
/*
|
||||
* this fixed mapping covers:
|
||||
* - CSI
|
||||
* - ATA
|
||||
*/
|
||||
imx_map_entry(MX27, SAHB1, MT_DEVICE),
|
||||
/*
|
||||
* this fixed mapping covers:
|
||||
* - EMI
|
||||
*/
|
||||
imx_map_entry(MX27, X_MEMC, MT_DEVICE),
|
||||
};
|
||||
|
||||
/*
|
||||
* Initialize the memory map. It is called during the
|
||||
* system startup to create static physical to virtual
|
||||
* memory map for the IO modules.
|
||||
*/
|
||||
void __init mx27_map_io(void)
|
||||
{
|
||||
iotable_init(imx27_io_desc, ARRAY_SIZE(imx27_io_desc));
|
||||
}
|
||||
|
||||
void __init imx27_init_early(void)
|
||||
{
|
||||
mxc_set_cpu_type(MXC_CPU_MX27);
|
||||
imx_iomuxv1_init(MX27_IO_ADDRESS(MX27_GPIO_BASE_ADDR),
|
||||
MX27_NUM_GPIO_PORT);
|
||||
}
|
||||
|
||||
void __init mx27_init_irq(void)
|
||||
{
|
||||
mxc_init_irq(MX27_IO_ADDRESS(MX27_AVIC_BASE_ADDR));
|
||||
}
|
||||
|
||||
static const struct resource imx27_audmux_res[] __initconst = {
|
||||
DEFINE_RES_MEM(MX27_AUDMUX_BASE_ADDR, SZ_4K),
|
||||
};
|
||||
|
||||
void __init imx27_soc_init(void)
|
||||
{
|
||||
mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR));
|
||||
mxc_device_init();
|
||||
|
||||
/* i.mx27 has the i.mx21 type gpio */
|
||||
mxc_register_gpio("imx21-gpio", 0, MX27_GPIO1_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
|
||||
mxc_register_gpio("imx21-gpio", 1, MX27_GPIO2_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
|
||||
mxc_register_gpio("imx21-gpio", 2, MX27_GPIO3_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
|
||||
mxc_register_gpio("imx21-gpio", 3, MX27_GPIO4_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
|
||||
mxc_register_gpio("imx21-gpio", 4, MX27_GPIO5_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
|
||||
mxc_register_gpio("imx21-gpio", 5, MX27_GPIO6_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
|
||||
|
||||
pinctrl_provide_dummies();
|
||||
imx_add_imx_dma("imx27-dma", MX27_DMA_BASE_ADDR, MX27_INT_DMACH0);
|
||||
/* imx27 has the imx21 type audmux */
|
||||
platform_device_register_simple("imx21-audmux", 0, imx27_audmux_res,
|
||||
ARRAY_SIZE(imx27_audmux_res));
|
||||
|
||||
imx27_pm_init();
|
||||
}
|
|
@ -11,6 +11,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/pinctrl/machine.h>
|
||||
|
||||
#include <asm/system_misc.h>
|
||||
|
@ -19,9 +20,7 @@
|
|||
|
||||
#include "common.h"
|
||||
#include "crmregs-imx3.h"
|
||||
#include "devices/devices-common.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-v3.h"
|
||||
|
||||
void __iomem *mx3_ccm_base;
|
||||
|
||||
|
@ -71,40 +70,6 @@ static void __iomem *imx3_ioremap_caller(phys_addr_t phys_addr, size_t size,
|
|||
return __arm_ioremap_caller(phys_addr, size, mtype, caller);
|
||||
}
|
||||
|
||||
static void __init imx3_init_l2x0(void)
|
||||
{
|
||||
#ifdef CONFIG_CACHE_L2X0
|
||||
void __iomem *l2x0_base;
|
||||
void __iomem *clkctl_base;
|
||||
|
||||
/*
|
||||
* First of all, we must repair broken chip settings. There are some
|
||||
* i.MX35 CPUs in the wild, comming with bogus L2 cache settings. These
|
||||
* misconfigured CPUs will run amok immediately when the L2 cache gets enabled.
|
||||
* Workaraound is to setup the correct register setting prior enabling the
|
||||
* L2 cache. This should not hurt already working CPUs, as they are using the
|
||||
* same value.
|
||||
*/
|
||||
#define L2_MEM_VAL 0x10
|
||||
|
||||
clkctl_base = ioremap(MX35_CLKCTL_BASE_ADDR, 4096);
|
||||
if (clkctl_base != NULL) {
|
||||
writel(0x00000515, clkctl_base + L2_MEM_VAL);
|
||||
iounmap(clkctl_base);
|
||||
} else {
|
||||
pr_err("L2 cache: Cannot fix timing. Trying to continue without\n");
|
||||
}
|
||||
|
||||
l2x0_base = ioremap(MX3x_L2CC_BASE_ADDR, 4096);
|
||||
if (!l2x0_base) {
|
||||
printk(KERN_ERR "remapping L2 cache area failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
l2x0_init(l2x0_base, 0x00030024, 0x00000000);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_IMX31
|
||||
static struct map_desc mx31_io_desc[] __initdata = {
|
||||
imx_map_entry(MX31, X_MEMC, MT_DEVICE),
|
||||
|
@ -135,70 +100,26 @@ static void imx31_idle(void)
|
|||
|
||||
void __init imx31_init_early(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
||||
mxc_set_cpu_type(MXC_CPU_MX31);
|
||||
arch_ioremap_caller = imx3_ioremap_caller;
|
||||
arm_pm_idle = imx31_idle;
|
||||
mx3_ccm_base = MX31_IO_ADDRESS(MX31_CCM_BASE_ADDR);
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx31-ccm");
|
||||
mx3_ccm_base = of_iomap(np, 0);
|
||||
BUG_ON(!mx3_ccm_base);
|
||||
}
|
||||
|
||||
void __init mx31_init_irq(void)
|
||||
{
|
||||
mxc_init_irq(MX31_IO_ADDRESS(MX31_AVIC_BASE_ADDR));
|
||||
}
|
||||
void __iomem *avic_base;
|
||||
struct device_node *np;
|
||||
|
||||
static struct sdma_script_start_addrs imx31_to1_sdma_script __initdata = {
|
||||
.per_2_per_addr = 1677,
|
||||
};
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx31-avic");
|
||||
avic_base = of_iomap(np, 0);
|
||||
BUG_ON(!avic_base);
|
||||
|
||||
static struct sdma_script_start_addrs imx31_to2_sdma_script __initdata = {
|
||||
.ap_2_ap_addr = 423,
|
||||
.ap_2_bp_addr = 829,
|
||||
.bp_2_ap_addr = 1029,
|
||||
};
|
||||
|
||||
static struct sdma_platform_data imx31_sdma_pdata __initdata = {
|
||||
.fw_name = "sdma-imx31-to2.bin",
|
||||
.script_addrs = &imx31_to2_sdma_script,
|
||||
};
|
||||
|
||||
static const struct resource imx31_audmux_res[] __initconst = {
|
||||
DEFINE_RES_MEM(MX31_AUDMUX_BASE_ADDR, SZ_16K),
|
||||
};
|
||||
|
||||
static const struct resource imx31_rnga_res[] __initconst = {
|
||||
DEFINE_RES_MEM(MX31_RNGA_BASE_ADDR, SZ_16K),
|
||||
};
|
||||
|
||||
void __init imx31_soc_init(void)
|
||||
{
|
||||
int to_version = mx31_revision() >> 4;
|
||||
|
||||
imx3_init_l2x0();
|
||||
|
||||
mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
|
||||
mxc_device_init();
|
||||
|
||||
mxc_register_gpio("imx31-gpio", 0, MX31_GPIO1_BASE_ADDR, SZ_16K, MX31_INT_GPIO1, 0);
|
||||
mxc_register_gpio("imx31-gpio", 1, MX31_GPIO2_BASE_ADDR, SZ_16K, MX31_INT_GPIO2, 0);
|
||||
mxc_register_gpio("imx31-gpio", 2, MX31_GPIO3_BASE_ADDR, SZ_16K, MX31_INT_GPIO3, 0);
|
||||
|
||||
pinctrl_provide_dummies();
|
||||
|
||||
if (to_version == 1) {
|
||||
strncpy(imx31_sdma_pdata.fw_name, "sdma-imx31-to1.bin",
|
||||
strlen(imx31_sdma_pdata.fw_name));
|
||||
imx31_sdma_pdata.script_addrs = &imx31_to1_sdma_script;
|
||||
}
|
||||
|
||||
imx_add_imx_sdma("imx31-sdma", MX31_SDMA_BASE_ADDR, MX31_INT_SDMA, &imx31_sdma_pdata);
|
||||
|
||||
imx_set_aips(MX31_IO_ADDRESS(MX31_AIPS1_BASE_ADDR));
|
||||
imx_set_aips(MX31_IO_ADDRESS(MX31_AIPS2_BASE_ADDR));
|
||||
|
||||
platform_device_register_simple("imx31-audmux", 0, imx31_audmux_res,
|
||||
ARRAY_SIZE(imx31_audmux_res));
|
||||
platform_device_register_simple("mxc_rnga", -1, imx31_rnga_res,
|
||||
ARRAY_SIZE(imx31_rnga_res));
|
||||
mxc_init_irq(avic_base);
|
||||
}
|
||||
#endif /* ifdef CONFIG_SOC_IMX31 */
|
||||
|
||||
|
@ -228,85 +149,25 @@ static void imx35_idle(void)
|
|||
|
||||
void __init imx35_init_early(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
||||
mxc_set_cpu_type(MXC_CPU_MX35);
|
||||
mxc_iomux_v3_init(MX35_IO_ADDRESS(MX35_IOMUXC_BASE_ADDR));
|
||||
arm_pm_idle = imx35_idle;
|
||||
arch_ioremap_caller = imx3_ioremap_caller;
|
||||
mx3_ccm_base = MX35_IO_ADDRESS(MX35_CCM_BASE_ADDR);
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx35-ccm");
|
||||
mx3_ccm_base = of_iomap(np, 0);
|
||||
BUG_ON(!mx3_ccm_base);
|
||||
}
|
||||
|
||||
void __init mx35_init_irq(void)
|
||||
{
|
||||
mxc_init_irq(MX35_IO_ADDRESS(MX35_AVIC_BASE_ADDR));
|
||||
}
|
||||
void __iomem *avic_base;
|
||||
struct device_node *np;
|
||||
|
||||
static struct sdma_script_start_addrs imx35_to1_sdma_script __initdata = {
|
||||
.ap_2_ap_addr = 642,
|
||||
.uart_2_mcu_addr = 817,
|
||||
.mcu_2_app_addr = 747,
|
||||
.uartsh_2_mcu_addr = 1183,
|
||||
.per_2_shp_addr = 1033,
|
||||
.mcu_2_shp_addr = 961,
|
||||
.ata_2_mcu_addr = 1333,
|
||||
.mcu_2_ata_addr = 1252,
|
||||
.app_2_mcu_addr = 683,
|
||||
.shp_2_per_addr = 1111,
|
||||
.shp_2_mcu_addr = 892,
|
||||
};
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx35-avic");
|
||||
avic_base = of_iomap(np, 0);
|
||||
BUG_ON(!avic_base);
|
||||
|
||||
static struct sdma_script_start_addrs imx35_to2_sdma_script __initdata = {
|
||||
.ap_2_ap_addr = 729,
|
||||
.uart_2_mcu_addr = 904,
|
||||
.per_2_app_addr = 1597,
|
||||
.mcu_2_app_addr = 834,
|
||||
.uartsh_2_mcu_addr = 1270,
|
||||
.per_2_shp_addr = 1120,
|
||||
.mcu_2_shp_addr = 1048,
|
||||
.ata_2_mcu_addr = 1429,
|
||||
.mcu_2_ata_addr = 1339,
|
||||
.app_2_per_addr = 1531,
|
||||
.app_2_mcu_addr = 770,
|
||||
.shp_2_per_addr = 1198,
|
||||
.shp_2_mcu_addr = 979,
|
||||
};
|
||||
|
||||
static struct sdma_platform_data imx35_sdma_pdata __initdata = {
|
||||
.fw_name = "sdma-imx35-to2.bin",
|
||||
.script_addrs = &imx35_to2_sdma_script,
|
||||
};
|
||||
|
||||
static const struct resource imx35_audmux_res[] __initconst = {
|
||||
DEFINE_RES_MEM(MX35_AUDMUX_BASE_ADDR, SZ_16K),
|
||||
};
|
||||
|
||||
void __init imx35_soc_init(void)
|
||||
{
|
||||
int to_version = mx35_revision() >> 4;
|
||||
|
||||
imx3_init_l2x0();
|
||||
|
||||
mxc_arch_reset_init(MX35_IO_ADDRESS(MX35_WDOG_BASE_ADDR));
|
||||
mxc_device_init();
|
||||
|
||||
mxc_register_gpio("imx35-gpio", 0, MX35_GPIO1_BASE_ADDR, SZ_16K, MX35_INT_GPIO1, 0);
|
||||
mxc_register_gpio("imx35-gpio", 1, MX35_GPIO2_BASE_ADDR, SZ_16K, MX35_INT_GPIO2, 0);
|
||||
mxc_register_gpio("imx35-gpio", 2, MX35_GPIO3_BASE_ADDR, SZ_16K, MX35_INT_GPIO3, 0);
|
||||
|
||||
pinctrl_provide_dummies();
|
||||
if (to_version == 1) {
|
||||
strncpy(imx35_sdma_pdata.fw_name, "sdma-imx35-to1.bin",
|
||||
strlen(imx35_sdma_pdata.fw_name));
|
||||
imx35_sdma_pdata.script_addrs = &imx35_to1_sdma_script;
|
||||
}
|
||||
|
||||
imx_add_imx_sdma("imx35-sdma", MX35_SDMA_BASE_ADDR, MX35_INT_SDMA, &imx35_sdma_pdata);
|
||||
|
||||
/* Setup AIPS registers */
|
||||
imx_set_aips(MX35_IO_ADDRESS(MX35_AIPS1_BASE_ADDR));
|
||||
imx_set_aips(MX35_IO_ADDRESS(MX35_AIPS2_BASE_ADDR));
|
||||
|
||||
/* i.mx35 has the i.mx31 type audmux */
|
||||
platform_device_register_simple("imx31-audmux", 0, imx35_audmux_res,
|
||||
ARRAY_SIZE(imx35_audmux_res));
|
||||
mxc_init_irq(avic_base);
|
||||
}
|
||||
#endif /* ifdef CONFIG_SOC_IMX35 */
|
||||
|
|
|
@ -1,176 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
* Copyright 2008 Juergen Beisert, kernel@pengutronix.de
|
||||
* Copyright 2009 Holger Schurig, hs4233@mail.mn-solutions.de
|
||||
*
|
||||
* This contains i.MX21-specific hardware definitions. For those
|
||||
* hardware pieces that are common between i.MX21 and i.MX27, have a
|
||||
* look at mx2x.h.
|
||||
*/
|
||||
|
||||
#ifndef __MACH_MX21_H__
|
||||
#define __MACH_MX21_H__
|
||||
|
||||
#define MX21_AIPI_BASE_ADDR 0x10000000
|
||||
#define MX21_AIPI_SIZE SZ_1M
|
||||
#define MX21_DMA_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x01000)
|
||||
#define MX21_WDOG_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x02000)
|
||||
#define MX21_GPT1_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x03000)
|
||||
#define MX21_GPT2_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x04000)
|
||||
#define MX21_GPT3_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x05000)
|
||||
#define MX21_PWM_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x06000)
|
||||
#define MX21_RTC_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x07000)
|
||||
#define MX21_KPP_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x08000)
|
||||
#define MX21_OWIRE_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x09000)
|
||||
#define MX21_UART1_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x0a000)
|
||||
#define MX21_UART2_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x0b000)
|
||||
#define MX21_UART3_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x0c000)
|
||||
#define MX21_UART4_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x0d000)
|
||||
#define MX21_CSPI1_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x0e000)
|
||||
#define MX21_CSPI2_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x0f000)
|
||||
#define MX21_SSI1_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x10000)
|
||||
#define MX21_SSI2_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x11000)
|
||||
#define MX21_I2C_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x12000)
|
||||
#define MX21_SDHC1_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x13000)
|
||||
#define MX21_SDHC2_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x14000)
|
||||
#define MX21_GPIO_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x15000)
|
||||
#define MX21_GPIO1_BASE_ADDR (MX21_GPIO_BASE_ADDR + 0x000)
|
||||
#define MX21_GPIO2_BASE_ADDR (MX21_GPIO_BASE_ADDR + 0x100)
|
||||
#define MX21_GPIO3_BASE_ADDR (MX21_GPIO_BASE_ADDR + 0x200)
|
||||
#define MX21_GPIO4_BASE_ADDR (MX21_GPIO_BASE_ADDR + 0x300)
|
||||
#define MX21_GPIO5_BASE_ADDR (MX21_GPIO_BASE_ADDR + 0x400)
|
||||
#define MX21_GPIO6_BASE_ADDR (MX21_GPIO_BASE_ADDR + 0x500)
|
||||
#define MX21_AUDMUX_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x16000)
|
||||
#define MX21_CSPI3_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x17000)
|
||||
#define MX21_LCDC_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x21000)
|
||||
#define MX21_SLCDC_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x22000)
|
||||
#define MX21_USBOTG_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x24000)
|
||||
#define MX21_EMMA_PP_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x26000)
|
||||
#define MX21_EMMA_PRP_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x26400)
|
||||
#define MX21_CCM_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x27000)
|
||||
#define MX21_SYSCTRL_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x27800)
|
||||
#define MX21_JAM_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x3e000)
|
||||
#define MX21_MAX_BASE_ADDR (MX21_AIPI_BASE_ADDR + 0x3f000)
|
||||
|
||||
#define MX21_AVIC_BASE_ADDR 0x10040000
|
||||
|
||||
#define MX21_SAHB1_BASE_ADDR 0x80000000
|
||||
#define MX21_SAHB1_SIZE SZ_1M
|
||||
#define MX21_CSI_BASE_ADDR (MX2x_SAHB1_BASE_ADDR + 0x0000)
|
||||
|
||||
/* Memory regions and CS */
|
||||
#define MX21_SDRAM_BASE_ADDR 0xc0000000
|
||||
#define MX21_CSD1_BASE_ADDR 0xc4000000
|
||||
|
||||
#define MX21_CS0_BASE_ADDR 0xc8000000
|
||||
#define MX21_CS1_BASE_ADDR 0xcc000000
|
||||
#define MX21_CS2_BASE_ADDR 0xd0000000
|
||||
#define MX21_CS3_BASE_ADDR 0xd1000000
|
||||
#define MX21_CS4_BASE_ADDR 0xd2000000
|
||||
#define MX21_PCMCIA_MEM_BASE_ADDR 0xd4000000
|
||||
#define MX21_CS5_BASE_ADDR 0xdd000000
|
||||
|
||||
/* NAND, SDRAM, WEIM etc controllers */
|
||||
#define MX21_X_MEMC_BASE_ADDR 0xdf000000
|
||||
#define MX21_X_MEMC_SIZE SZ_256K
|
||||
|
||||
#define MX21_SDRAMC_BASE_ADDR (MX21_X_MEMC_BASE_ADDR + 0x0000)
|
||||
#define MX21_EIM_BASE_ADDR (MX21_X_MEMC_BASE_ADDR + 0x1000)
|
||||
#define MX21_PCMCIA_CTL_BASE_ADDR (MX21_X_MEMC_BASE_ADDR + 0x2000)
|
||||
#define MX21_NFC_BASE_ADDR (MX21_X_MEMC_BASE_ADDR + 0x3000)
|
||||
|
||||
#define MX21_IRAM_BASE_ADDR 0xffffe800 /* internal ram */
|
||||
|
||||
#define MX21_IO_P2V(x) IMX_IO_P2V(x)
|
||||
#define MX21_IO_ADDRESS(x) IOMEM(MX21_IO_P2V(x))
|
||||
|
||||
/* fixed interrupt numbers */
|
||||
#include <asm/irq.h>
|
||||
#define MX21_INT_CSPI3 (NR_IRQS_LEGACY + 6)
|
||||
#define MX21_INT_GPIO (NR_IRQS_LEGACY + 8)
|
||||
#define MX21_INT_FIRI (NR_IRQS_LEGACY + 9)
|
||||
#define MX21_INT_SDHC2 (NR_IRQS_LEGACY + 10)
|
||||
#define MX21_INT_SDHC1 (NR_IRQS_LEGACY + 11)
|
||||
#define MX21_INT_I2C (NR_IRQS_LEGACY + 12)
|
||||
#define MX21_INT_SSI2 (NR_IRQS_LEGACY + 13)
|
||||
#define MX21_INT_SSI1 (NR_IRQS_LEGACY + 14)
|
||||
#define MX21_INT_CSPI2 (NR_IRQS_LEGACY + 15)
|
||||
#define MX21_INT_CSPI1 (NR_IRQS_LEGACY + 16)
|
||||
#define MX21_INT_UART4 (NR_IRQS_LEGACY + 17)
|
||||
#define MX21_INT_UART3 (NR_IRQS_LEGACY + 18)
|
||||
#define MX21_INT_UART2 (NR_IRQS_LEGACY + 19)
|
||||
#define MX21_INT_UART1 (NR_IRQS_LEGACY + 20)
|
||||
#define MX21_INT_KPP (NR_IRQS_LEGACY + 21)
|
||||
#define MX21_INT_RTC (NR_IRQS_LEGACY + 22)
|
||||
#define MX21_INT_PWM (NR_IRQS_LEGACY + 23)
|
||||
#define MX21_INT_GPT3 (NR_IRQS_LEGACY + 24)
|
||||
#define MX21_INT_GPT2 (NR_IRQS_LEGACY + 25)
|
||||
#define MX21_INT_GPT1 (NR_IRQS_LEGACY + 26)
|
||||
#define MX21_INT_WDOG (NR_IRQS_LEGACY + 27)
|
||||
#define MX21_INT_PCMCIA (NR_IRQS_LEGACY + 28)
|
||||
#define MX21_INT_NFC (NR_IRQS_LEGACY + 29)
|
||||
#define MX21_INT_BMI (NR_IRQS_LEGACY + 30)
|
||||
#define MX21_INT_CSI (NR_IRQS_LEGACY + 31)
|
||||
#define MX21_INT_DMACH0 (NR_IRQS_LEGACY + 32)
|
||||
#define MX21_INT_DMACH1 (NR_IRQS_LEGACY + 33)
|
||||
#define MX21_INT_DMACH2 (NR_IRQS_LEGACY + 34)
|
||||
#define MX21_INT_DMACH3 (NR_IRQS_LEGACY + 35)
|
||||
#define MX21_INT_DMACH4 (NR_IRQS_LEGACY + 36)
|
||||
#define MX21_INT_DMACH5 (NR_IRQS_LEGACY + 37)
|
||||
#define MX21_INT_DMACH6 (NR_IRQS_LEGACY + 38)
|
||||
#define MX21_INT_DMACH7 (NR_IRQS_LEGACY + 39)
|
||||
#define MX21_INT_DMACH8 (NR_IRQS_LEGACY + 40)
|
||||
#define MX21_INT_DMACH9 (NR_IRQS_LEGACY + 41)
|
||||
#define MX21_INT_DMACH10 (NR_IRQS_LEGACY + 42)
|
||||
#define MX21_INT_DMACH11 (NR_IRQS_LEGACY + 43)
|
||||
#define MX21_INT_DMACH12 (NR_IRQS_LEGACY + 44)
|
||||
#define MX21_INT_DMACH13 (NR_IRQS_LEGACY + 45)
|
||||
#define MX21_INT_DMACH14 (NR_IRQS_LEGACY + 46)
|
||||
#define MX21_INT_DMACH15 (NR_IRQS_LEGACY + 47)
|
||||
#define MX21_INT_EMMAENC (NR_IRQS_LEGACY + 49)
|
||||
#define MX21_INT_EMMADEC (NR_IRQS_LEGACY + 50)
|
||||
#define MX21_INT_EMMAPRP (NR_IRQS_LEGACY + 51)
|
||||
#define MX21_INT_EMMAPP (NR_IRQS_LEGACY + 52)
|
||||
#define MX21_INT_USBWKUP (NR_IRQS_LEGACY + 53)
|
||||
#define MX21_INT_USBDMA (NR_IRQS_LEGACY + 54)
|
||||
#define MX21_INT_USBHOST (NR_IRQS_LEGACY + 55)
|
||||
#define MX21_INT_USBFUNC (NR_IRQS_LEGACY + 56)
|
||||
#define MX21_INT_USBMNP (NR_IRQS_LEGACY + 57)
|
||||
#define MX21_INT_USBCTRL (NR_IRQS_LEGACY + 58)
|
||||
#define MX21_INT_SLCDC (NR_IRQS_LEGACY + 60)
|
||||
#define MX21_INT_LCDC (NR_IRQS_LEGACY + 61)
|
||||
|
||||
/* fixed DMA request numbers */
|
||||
#define MX21_DMA_REQ_CSPI3_RX 1
|
||||
#define MX21_DMA_REQ_CSPI3_TX 2
|
||||
#define MX21_DMA_REQ_EXT 3
|
||||
#define MX21_DMA_REQ_FIRI_RX 4
|
||||
#define MX21_DMA_REQ_SDHC2 6
|
||||
#define MX21_DMA_REQ_SDHC1 7
|
||||
#define MX21_DMA_REQ_SSI2_RX0 8
|
||||
#define MX21_DMA_REQ_SSI2_TX0 9
|
||||
#define MX21_DMA_REQ_SSI2_RX1 10
|
||||
#define MX21_DMA_REQ_SSI2_TX1 11
|
||||
#define MX21_DMA_REQ_SSI1_RX0 12
|
||||
#define MX21_DMA_REQ_SSI1_TX0 13
|
||||
#define MX21_DMA_REQ_SSI1_RX1 14
|
||||
#define MX21_DMA_REQ_SSI1_TX1 15
|
||||
#define MX21_DMA_REQ_CSPI2_RX 16
|
||||
#define MX21_DMA_REQ_CSPI2_TX 17
|
||||
#define MX21_DMA_REQ_CSPI1_RX 18
|
||||
#define MX21_DMA_REQ_CSPI1_TX 19
|
||||
#define MX21_DMA_REQ_UART4_RX 20
|
||||
#define MX21_DMA_REQ_UART4_TX 21
|
||||
#define MX21_DMA_REQ_UART3_RX 22
|
||||
#define MX21_DMA_REQ_UART3_TX 23
|
||||
#define MX21_DMA_REQ_UART2_RX 24
|
||||
#define MX21_DMA_REQ_UART2_TX 25
|
||||
#define MX21_DMA_REQ_UART1_RX 26
|
||||
#define MX21_DMA_REQ_UART1_TX 27
|
||||
#define MX21_DMA_REQ_BMI_TX 28
|
||||
#define MX21_DMA_REQ_BMI_RX 29
|
||||
#define MX21_DMA_REQ_CSI_STAT 30
|
||||
#define MX21_DMA_REQ_CSI_RX 31
|
||||
|
||||
#endif /* ifndef __MACH_MX21_H__ */
|
|
@ -13,209 +13,13 @@
|
|||
|
||||
#define MX27_AIPI_BASE_ADDR 0x10000000
|
||||
#define MX27_AIPI_SIZE SZ_1M
|
||||
#define MX27_DMA_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x01000)
|
||||
#define MX27_WDOG_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x02000)
|
||||
#define MX27_GPT1_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x03000)
|
||||
#define MX27_GPT2_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x04000)
|
||||
#define MX27_GPT3_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x05000)
|
||||
#define MX27_PWM_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x06000)
|
||||
#define MX27_RTC_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x07000)
|
||||
#define MX27_KPP_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x08000)
|
||||
#define MX27_OWIRE_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x09000)
|
||||
#define MX27_UART1_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x0a000)
|
||||
#define MX27_UART2_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x0b000)
|
||||
#define MX27_UART3_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x0c000)
|
||||
#define MX27_UART4_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x0d000)
|
||||
#define MX27_CSPI1_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x0e000)
|
||||
#define MX27_CSPI2_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x0f000)
|
||||
#define MX27_SSI1_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x10000)
|
||||
#define MX27_SSI2_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x11000)
|
||||
#define MX27_I2C1_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x12000)
|
||||
#define MX27_SDHC1_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x13000)
|
||||
#define MX27_SDHC2_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x14000)
|
||||
#define MX27_GPIO_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x15000)
|
||||
#define MX27_GPIO1_BASE_ADDR (MX27_GPIO_BASE_ADDR + 0x000)
|
||||
#define MX27_GPIO2_BASE_ADDR (MX27_GPIO_BASE_ADDR + 0x100)
|
||||
#define MX27_GPIO3_BASE_ADDR (MX27_GPIO_BASE_ADDR + 0x200)
|
||||
#define MX27_GPIO4_BASE_ADDR (MX27_GPIO_BASE_ADDR + 0x300)
|
||||
#define MX27_GPIO5_BASE_ADDR (MX27_GPIO_BASE_ADDR + 0x400)
|
||||
#define MX27_GPIO6_BASE_ADDR (MX27_GPIO_BASE_ADDR + 0x500)
|
||||
#define MX27_AUDMUX_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x16000)
|
||||
#define MX27_CSPI3_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x17000)
|
||||
#define MX27_MSHC_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x18000)
|
||||
#define MX27_GPT4_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x19000)
|
||||
#define MX27_GPT5_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x1a000)
|
||||
#define MX27_UART5_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x1b000)
|
||||
#define MX27_UART6_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x1c000)
|
||||
#define MX27_I2C2_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x1d000)
|
||||
#define MX27_SDHC3_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x1e000)
|
||||
#define MX27_GPT6_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x1f000)
|
||||
#define MX27_LCDC_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x21000)
|
||||
#define MX27_SLCDC_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x22000)
|
||||
#define MX27_VPU_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x23000)
|
||||
#define MX27_USB_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x24000)
|
||||
#define MX27_USB_OTG_BASE_ADDR (MX27_USB_BASE_ADDR + 0x0000)
|
||||
#define MX27_USB_HS1_BASE_ADDR (MX27_USB_BASE_ADDR + 0x0200)
|
||||
#define MX27_USB_HS2_BASE_ADDR (MX27_USB_BASE_ADDR + 0x0400)
|
||||
#define MX27_SAHARA_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x25000)
|
||||
#define MX27_EMMAPP_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x26000)
|
||||
#define MX27_EMMAPRP_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x26400)
|
||||
#define MX27_CCM_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x27000)
|
||||
#define MX27_SYSCTRL_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x27800)
|
||||
#define MX27_IIM_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x28000)
|
||||
#define MX27_RTIC_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x2a000)
|
||||
#define MX27_FEC_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x2b000)
|
||||
#define MX27_SCC_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x2c000)
|
||||
#define MX27_ETB_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x3b000)
|
||||
#define MX27_ETB_RAM_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x3c000)
|
||||
#define MX27_JAM_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x3e000)
|
||||
#define MX27_MAX_BASE_ADDR (MX27_AIPI_BASE_ADDR + 0x3f000)
|
||||
|
||||
#define MX27_AVIC_BASE_ADDR 0x10040000
|
||||
|
||||
/* ROM patch */
|
||||
#define MX27_ROMP_BASE_ADDR 0x10041000
|
||||
|
||||
#define MX27_SAHB1_BASE_ADDR 0x80000000
|
||||
#define MX27_SAHB1_SIZE SZ_1M
|
||||
#define MX27_CSI_BASE_ADDR (MX27_SAHB1_BASE_ADDR + 0x0000)
|
||||
#define MX27_ATA_BASE_ADDR (MX27_SAHB1_BASE_ADDR + 0x1000)
|
||||
|
||||
/* Memory regions and CS */
|
||||
#define MX27_SDRAM_BASE_ADDR 0xa0000000
|
||||
#define MX27_CSD1_BASE_ADDR 0xb0000000
|
||||
|
||||
#define MX27_CS0_BASE_ADDR 0xc0000000
|
||||
#define MX27_CS1_BASE_ADDR 0xc8000000
|
||||
#define MX27_CS2_BASE_ADDR 0xd0000000
|
||||
#define MX27_CS3_BASE_ADDR 0xd2000000
|
||||
#define MX27_CS4_BASE_ADDR 0xd4000000
|
||||
#define MX27_CS5_BASE_ADDR 0xd6000000
|
||||
|
||||
/* NAND, SDRAM, WEIM, M3IF, EMI controllers */
|
||||
#define MX27_X_MEMC_BASE_ADDR 0xd8000000
|
||||
#define MX27_X_MEMC_SIZE SZ_1M
|
||||
#define MX27_NFC_BASE_ADDR (MX27_X_MEMC_BASE_ADDR)
|
||||
#define MX27_SDRAMC_BASE_ADDR (MX27_X_MEMC_BASE_ADDR + 0x1000)
|
||||
#define MX27_WEIM_BASE_ADDR (MX27_X_MEMC_BASE_ADDR + 0x2000)
|
||||
#define MX27_M3IF_BASE_ADDR (MX27_X_MEMC_BASE_ADDR + 0x3000)
|
||||
#define MX27_PCMCIA_CTL_BASE_ADDR (MX27_X_MEMC_BASE_ADDR + 0x4000)
|
||||
|
||||
#define MX27_WEIM_CSCRx_BASE_ADDR(cs) (MX27_WEIM_BASE_ADDR + (cs) * 0x10)
|
||||
#define MX27_WEIM_CSCRxU(cs) (MX27_WEIM_CSCRx_BASE_ADDR(cs))
|
||||
#define MX27_WEIM_CSCRxL(cs) (MX27_WEIM_CSCRx_BASE_ADDR(cs) + 0x4)
|
||||
#define MX27_WEIM_CSCRxA(cs) (MX27_WEIM_CSCRx_BASE_ADDR(cs) + 0x8)
|
||||
|
||||
#define MX27_PCMCIA_MEM_BASE_ADDR 0xdc000000
|
||||
|
||||
/* IRAM */
|
||||
#define MX27_IRAM_BASE_ADDR 0xffff4c00 /* internal ram */
|
||||
|
||||
#define MX27_IO_P2V(x) IMX_IO_P2V(x)
|
||||
#define MX27_IO_ADDRESS(x) IOMEM(MX27_IO_P2V(x))
|
||||
|
||||
/* fixed interrupt numbers */
|
||||
#include <asm/irq.h>
|
||||
#define MX27_INT_I2C2 (NR_IRQS_LEGACY + 1)
|
||||
#define MX27_INT_GPT6 (NR_IRQS_LEGACY + 2)
|
||||
#define MX27_INT_GPT5 (NR_IRQS_LEGACY + 3)
|
||||
#define MX27_INT_GPT4 (NR_IRQS_LEGACY + 4)
|
||||
#define MX27_INT_RTIC (NR_IRQS_LEGACY + 5)
|
||||
#define MX27_INT_CSPI3 (NR_IRQS_LEGACY + 6)
|
||||
#define MX27_INT_MSHC (NR_IRQS_LEGACY + 7)
|
||||
#define MX27_INT_GPIO (NR_IRQS_LEGACY + 8)
|
||||
#define MX27_INT_SDHC3 (NR_IRQS_LEGACY + 9)
|
||||
#define MX27_INT_SDHC2 (NR_IRQS_LEGACY + 10)
|
||||
#define MX27_INT_SDHC1 (NR_IRQS_LEGACY + 11)
|
||||
#define MX27_INT_I2C1 (NR_IRQS_LEGACY + 12)
|
||||
#define MX27_INT_SSI2 (NR_IRQS_LEGACY + 13)
|
||||
#define MX27_INT_SSI1 (NR_IRQS_LEGACY + 14)
|
||||
#define MX27_INT_CSPI2 (NR_IRQS_LEGACY + 15)
|
||||
#define MX27_INT_CSPI1 (NR_IRQS_LEGACY + 16)
|
||||
#define MX27_INT_UART4 (NR_IRQS_LEGACY + 17)
|
||||
#define MX27_INT_UART3 (NR_IRQS_LEGACY + 18)
|
||||
#define MX27_INT_UART2 (NR_IRQS_LEGACY + 19)
|
||||
#define MX27_INT_UART1 (NR_IRQS_LEGACY + 20)
|
||||
#define MX27_INT_KPP (NR_IRQS_LEGACY + 21)
|
||||
#define MX27_INT_RTC (NR_IRQS_LEGACY + 22)
|
||||
#define MX27_INT_PWM (NR_IRQS_LEGACY + 23)
|
||||
#define MX27_INT_GPT3 (NR_IRQS_LEGACY + 24)
|
||||
#define MX27_INT_GPT2 (NR_IRQS_LEGACY + 25)
|
||||
#define MX27_INT_GPT1 (NR_IRQS_LEGACY + 26)
|
||||
#define MX27_INT_WDOG (NR_IRQS_LEGACY + 27)
|
||||
#define MX27_INT_PCMCIA (NR_IRQS_LEGACY + 28)
|
||||
#define MX27_INT_NFC (NR_IRQS_LEGACY + 29)
|
||||
#define MX27_INT_ATA (NR_IRQS_LEGACY + 30)
|
||||
#define MX27_INT_CSI (NR_IRQS_LEGACY + 31)
|
||||
#define MX27_INT_DMACH0 (NR_IRQS_LEGACY + 32)
|
||||
#define MX27_INT_DMACH1 (NR_IRQS_LEGACY + 33)
|
||||
#define MX27_INT_DMACH2 (NR_IRQS_LEGACY + 34)
|
||||
#define MX27_INT_DMACH3 (NR_IRQS_LEGACY + 35)
|
||||
#define MX27_INT_DMACH4 (NR_IRQS_LEGACY + 36)
|
||||
#define MX27_INT_DMACH5 (NR_IRQS_LEGACY + 37)
|
||||
#define MX27_INT_DMACH6 (NR_IRQS_LEGACY + 38)
|
||||
#define MX27_INT_DMACH7 (NR_IRQS_LEGACY + 39)
|
||||
#define MX27_INT_DMACH8 (NR_IRQS_LEGACY + 40)
|
||||
#define MX27_INT_DMACH9 (NR_IRQS_LEGACY + 41)
|
||||
#define MX27_INT_DMACH10 (NR_IRQS_LEGACY + 42)
|
||||
#define MX27_INT_DMACH11 (NR_IRQS_LEGACY + 43)
|
||||
#define MX27_INT_DMACH12 (NR_IRQS_LEGACY + 44)
|
||||
#define MX27_INT_DMACH13 (NR_IRQS_LEGACY + 45)
|
||||
#define MX27_INT_DMACH14 (NR_IRQS_LEGACY + 46)
|
||||
#define MX27_INT_DMACH15 (NR_IRQS_LEGACY + 47)
|
||||
#define MX27_INT_UART6 (NR_IRQS_LEGACY + 48)
|
||||
#define MX27_INT_UART5 (NR_IRQS_LEGACY + 49)
|
||||
#define MX27_INT_FEC (NR_IRQS_LEGACY + 50)
|
||||
#define MX27_INT_EMMAPRP (NR_IRQS_LEGACY + 51)
|
||||
#define MX27_INT_EMMAPP (NR_IRQS_LEGACY + 52)
|
||||
#define MX27_INT_VPU (NR_IRQS_LEGACY + 53)
|
||||
#define MX27_INT_USB_HS1 (NR_IRQS_LEGACY + 54)
|
||||
#define MX27_INT_USB_HS2 (NR_IRQS_LEGACY + 55)
|
||||
#define MX27_INT_USB_OTG (NR_IRQS_LEGACY + 56)
|
||||
#define MX27_INT_SCC_SMN (NR_IRQS_LEGACY + 57)
|
||||
#define MX27_INT_SCC_SCM (NR_IRQS_LEGACY + 58)
|
||||
#define MX27_INT_SAHARA (NR_IRQS_LEGACY + 59)
|
||||
#define MX27_INT_SLCDC (NR_IRQS_LEGACY + 60)
|
||||
#define MX27_INT_LCDC (NR_IRQS_LEGACY + 61)
|
||||
#define MX27_INT_IIM (NR_IRQS_LEGACY + 62)
|
||||
#define MX27_INT_CCM (NR_IRQS_LEGACY + 63)
|
||||
|
||||
/* fixed DMA request numbers */
|
||||
#define MX27_DMA_REQ_CSPI3_RX 1
|
||||
#define MX27_DMA_REQ_CSPI3_TX 2
|
||||
#define MX27_DMA_REQ_EXT 3
|
||||
#define MX27_DMA_REQ_MSHC 4
|
||||
#define MX27_DMA_REQ_SDHC2 6
|
||||
#define MX27_DMA_REQ_SDHC1 7
|
||||
#define MX27_DMA_REQ_SSI2_RX0 8
|
||||
#define MX27_DMA_REQ_SSI2_TX0 9
|
||||
#define MX27_DMA_REQ_SSI2_RX1 10
|
||||
#define MX27_DMA_REQ_SSI2_TX1 11
|
||||
#define MX27_DMA_REQ_SSI1_RX0 12
|
||||
#define MX27_DMA_REQ_SSI1_TX0 13
|
||||
#define MX27_DMA_REQ_SSI1_RX1 14
|
||||
#define MX27_DMA_REQ_SSI1_TX1 15
|
||||
#define MX27_DMA_REQ_CSPI2_RX 16
|
||||
#define MX27_DMA_REQ_CSPI2_TX 17
|
||||
#define MX27_DMA_REQ_CSPI1_RX 18
|
||||
#define MX27_DMA_REQ_CSPI1_TX 19
|
||||
#define MX27_DMA_REQ_UART4_RX 20
|
||||
#define MX27_DMA_REQ_UART4_TX 21
|
||||
#define MX27_DMA_REQ_UART3_RX 22
|
||||
#define MX27_DMA_REQ_UART3_TX 23
|
||||
#define MX27_DMA_REQ_UART2_RX 24
|
||||
#define MX27_DMA_REQ_UART2_TX 25
|
||||
#define MX27_DMA_REQ_UART1_RX 26
|
||||
#define MX27_DMA_REQ_UART1_TX 27
|
||||
#define MX27_DMA_REQ_ATA_TX 28
|
||||
#define MX27_DMA_REQ_ATA_RCV 29
|
||||
#define MX27_DMA_REQ_CSI_STAT 30
|
||||
#define MX27_DMA_REQ_CSI_RX 31
|
||||
#define MX27_DMA_REQ_UART5_TX 32
|
||||
#define MX27_DMA_REQ_UART5_RX 33
|
||||
#define MX27_DMA_REQ_UART6_TX 34
|
||||
#define MX27_DMA_REQ_UART6_RX 35
|
||||
#define MX27_DMA_REQ_SDHC3 36
|
||||
#define MX27_DMA_REQ_NFC 37
|
||||
|
||||
#endif /* ifndef __MACH_MX27_H__ */
|
||||
|
|
|
@ -2,196 +2,17 @@
|
|||
#ifndef __MACH_MX31_H__
|
||||
#define __MACH_MX31_H__
|
||||
|
||||
/*
|
||||
* IRAM
|
||||
*/
|
||||
#define MX31_IRAM_BASE_ADDR 0x1ffc0000 /* internal ram */
|
||||
#define MX31_IRAM_SIZE SZ_16K
|
||||
|
||||
#define MX31_L2CC_BASE_ADDR 0x30000000
|
||||
#define MX31_L2CC_SIZE SZ_1M
|
||||
|
||||
#define MX31_AIPS1_BASE_ADDR 0x43f00000
|
||||
#define MX31_AIPS1_SIZE SZ_1M
|
||||
#define MX31_MAX_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x04000)
|
||||
#define MX31_EVTMON_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x08000)
|
||||
#define MX31_CLKCTL_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x0c000)
|
||||
#define MX31_ETB_SLOT4_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x10000)
|
||||
#define MX31_ETB_SLOT5_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x14000)
|
||||
#define MX31_ECT_CTIO_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x18000)
|
||||
#define MX31_I2C1_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x80000)
|
||||
#define MX31_I2C3_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x84000)
|
||||
#define MX31_USB_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x88000)
|
||||
#define MX31_USB_OTG_BASE_ADDR (MX31_USB_BASE_ADDR + 0x0000)
|
||||
#define MX31_USB_HS1_BASE_ADDR (MX31_USB_BASE_ADDR + 0x0200)
|
||||
#define MX31_USB_HS2_BASE_ADDR (MX31_USB_BASE_ADDR + 0x0400)
|
||||
#define MX31_ATA_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x8c000)
|
||||
#define MX31_UART1_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x90000)
|
||||
#define MX31_UART2_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x94000)
|
||||
#define MX31_I2C2_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x98000)
|
||||
#define MX31_OWIRE_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0x9c000)
|
||||
#define MX31_SSI1_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0xa0000)
|
||||
#define MX31_CSPI1_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0xa4000)
|
||||
#define MX31_KPP_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0xa8000)
|
||||
#define MX31_IOMUXC_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0xac000)
|
||||
#define MX31_UART4_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0xb0000)
|
||||
#define MX31_UART5_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0xb4000)
|
||||
#define MX31_ECT_IP1_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0xb8000)
|
||||
#define MX31_ECT_IP2_BASE_ADDR (MX31_AIPS1_BASE_ADDR + 0xbc000)
|
||||
|
||||
#define MX31_SPBA0_BASE_ADDR 0x50000000
|
||||
#define MX31_SPBA0_SIZE SZ_1M
|
||||
#define MX31_SDHC1_BASE_ADDR (MX31_SPBA0_BASE_ADDR + 0x04000)
|
||||
#define MX31_SDHC2_BASE_ADDR (MX31_SPBA0_BASE_ADDR + 0x08000)
|
||||
#define MX31_UART3_BASE_ADDR (MX31_SPBA0_BASE_ADDR + 0x0c000)
|
||||
#define MX31_CSPI2_BASE_ADDR (MX31_SPBA0_BASE_ADDR + 0x10000)
|
||||
#define MX31_SSI2_BASE_ADDR (MX31_SPBA0_BASE_ADDR + 0x14000)
|
||||
#define MX31_SIM1_BASE_ADDR (MX31_SPBA0_BASE_ADDR + 0x18000)
|
||||
#define MX31_IIM_BASE_ADDR (MX31_SPBA0_BASE_ADDR + 0x1c000)
|
||||
#define MX31_ATA_DMA_BASE_ADDR (MX31_SPBA0_BASE_ADDR + 0x20000)
|
||||
#define MX31_MSHC1_BASE_ADDR (MX31_SPBA0_BASE_ADDR + 0x24000)
|
||||
#define MX31_SPBA_CTRL_BASE_ADDR (MX31_SPBA0_BASE_ADDR + 0x3c000)
|
||||
|
||||
#define MX31_AIPS2_BASE_ADDR 0x53f00000
|
||||
#define MX31_AIPS2_SIZE SZ_1M
|
||||
#define MX31_CCM_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0x80000)
|
||||
#define MX31_CSPI3_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0x84000)
|
||||
#define MX31_FIRI_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0x8c000)
|
||||
#define MX31_GPT1_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0x90000)
|
||||
#define MX31_EPIT1_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0x94000)
|
||||
#define MX31_EPIT2_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0x98000)
|
||||
#define MX31_GPIO3_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xa4000)
|
||||
#define MX31_SCC_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xac000)
|
||||
#define MX31_SCM_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xae000)
|
||||
#define MX31_SMN_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xaf000)
|
||||
#define MX31_RNGA_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xb0000)
|
||||
#define MX31_IPU_CTRL_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xc0000)
|
||||
#define MX31_AUDMUX_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xc4000)
|
||||
#define MX31_MPEG4_ENC_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xc8000)
|
||||
#define MX31_GPIO1_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xcc000)
|
||||
#define MX31_GPIO2_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xd0000)
|
||||
#define MX31_SDMA_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xd4000)
|
||||
#define MX31_RTC_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xd8000)
|
||||
#define MX31_WDOG_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xdc000)
|
||||
#define MX31_PWM_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xe0000)
|
||||
#define MX31_RTIC_BASE_ADDR (MX31_AIPS2_BASE_ADDR + 0xec000)
|
||||
|
||||
#define MX31_ROMP_BASE_ADDR 0x60000000
|
||||
#define MX31_ROMP_BASE_ADDR_VIRT IOMEM(0xfc500000)
|
||||
#define MX31_ROMP_SIZE SZ_1M
|
||||
|
||||
#define MX31_AVIC_BASE_ADDR 0x68000000
|
||||
#define MX31_AVIC_SIZE SZ_1M
|
||||
|
||||
#define MX31_IPU_MEM_BASE_ADDR 0x70000000
|
||||
#define MX31_CSD0_BASE_ADDR 0x80000000
|
||||
#define MX31_CSD1_BASE_ADDR 0x90000000
|
||||
|
||||
#define MX31_CS0_BASE_ADDR 0xa0000000
|
||||
#define MX31_CS1_BASE_ADDR 0xa8000000
|
||||
#define MX31_CS2_BASE_ADDR 0xb0000000
|
||||
#define MX31_CS3_BASE_ADDR 0xb2000000
|
||||
|
||||
#define MX31_CS4_BASE_ADDR 0xb4000000
|
||||
#define MX31_CS4_BASE_ADDR_VIRT IOMEM(0xf6000000)
|
||||
#define MX31_CS4_SIZE SZ_32M
|
||||
|
||||
#define MX31_CS5_BASE_ADDR 0xb6000000
|
||||
#define MX31_CS5_BASE_ADDR_VIRT IOMEM(0xf8000000)
|
||||
#define MX31_CS5_SIZE SZ_32M
|
||||
|
||||
#define MX31_X_MEMC_BASE_ADDR 0xb8000000
|
||||
#define MX31_X_MEMC_SIZE SZ_64K
|
||||
#define MX31_NFC_BASE_ADDR (MX31_X_MEMC_BASE_ADDR + 0x0000)
|
||||
#define MX31_ESDCTL_BASE_ADDR (MX31_X_MEMC_BASE_ADDR + 0x1000)
|
||||
#define MX31_WEIM_BASE_ADDR (MX31_X_MEMC_BASE_ADDR + 0x2000)
|
||||
#define MX31_M3IF_BASE_ADDR (MX31_X_MEMC_BASE_ADDR + 0x3000)
|
||||
#define MX31_EMI_CTL_BASE_ADDR (MX31_X_MEMC_BASE_ADDR + 0x4000)
|
||||
#define MX31_PCMCIA_CTL_BASE_ADDR MX31_EMI_CTL_BASE_ADDR
|
||||
|
||||
#define MX31_WEIM_CSCRx_BASE_ADDR(cs) (MX31_WEIM_BASE_ADDR + (cs) * 0x10)
|
||||
#define MX31_WEIM_CSCRxU(cs) (MX31_WEIM_CSCRx_BASE_ADDR(cs))
|
||||
#define MX31_WEIM_CSCRxL(cs) (MX31_WEIM_CSCRx_BASE_ADDR(cs) + 0x4)
|
||||
#define MX31_WEIM_CSCRxA(cs) (MX31_WEIM_CSCRx_BASE_ADDR(cs) + 0x8)
|
||||
|
||||
#define MX31_PCMCIA_MEM_BASE_ADDR 0xbc000000
|
||||
|
||||
#define MX31_IO_P2V(x) IMX_IO_P2V(x)
|
||||
#define MX31_IO_ADDRESS(x) IOMEM(MX31_IO_P2V(x))
|
||||
|
||||
/*
|
||||
* Interrupt numbers
|
||||
*/
|
||||
#include <asm/irq.h>
|
||||
#define MX31_INT_I2C3 (NR_IRQS_LEGACY + 3)
|
||||
#define MX31_INT_I2C2 (NR_IRQS_LEGACY + 4)
|
||||
#define MX31_INT_MPEG4_ENCODER (NR_IRQS_LEGACY + 5)
|
||||
#define MX31_INT_RTIC (NR_IRQS_LEGACY + 6)
|
||||
#define MX31_INT_FIRI (NR_IRQS_LEGACY + 7)
|
||||
#define MX31_INT_SDHC2 (NR_IRQS_LEGACY + 8)
|
||||
#define MX31_INT_SDHC1 (NR_IRQS_LEGACY + 9)
|
||||
#define MX31_INT_I2C1 (NR_IRQS_LEGACY + 10)
|
||||
#define MX31_INT_SSI2 (NR_IRQS_LEGACY + 11)
|
||||
#define MX31_INT_SSI1 (NR_IRQS_LEGACY + 12)
|
||||
#define MX31_INT_CSPI2 (NR_IRQS_LEGACY + 13)
|
||||
#define MX31_INT_CSPI1 (NR_IRQS_LEGACY + 14)
|
||||
#define MX31_INT_ATA (NR_IRQS_LEGACY + 15)
|
||||
#define MX31_INT_MBX (NR_IRQS_LEGACY + 16)
|
||||
#define MX31_INT_CSPI3 (NR_IRQS_LEGACY + 17)
|
||||
#define MX31_INT_UART3 (NR_IRQS_LEGACY + 18)
|
||||
#define MX31_INT_IIM (NR_IRQS_LEGACY + 19)
|
||||
#define MX31_INT_SIM2 (NR_IRQS_LEGACY + 20)
|
||||
#define MX31_INT_SIM1 (NR_IRQS_LEGACY + 21)
|
||||
#define MX31_INT_RNGA (NR_IRQS_LEGACY + 22)
|
||||
#define MX31_INT_EVTMON (NR_IRQS_LEGACY + 23)
|
||||
#define MX31_INT_KPP (NR_IRQS_LEGACY + 24)
|
||||
#define MX31_INT_RTC (NR_IRQS_LEGACY + 25)
|
||||
#define MX31_INT_PWM (NR_IRQS_LEGACY + 26)
|
||||
#define MX31_INT_EPIT2 (NR_IRQS_LEGACY + 27)
|
||||
#define MX31_INT_EPIT1 (NR_IRQS_LEGACY + 28)
|
||||
#define MX31_INT_GPT (NR_IRQS_LEGACY + 29)
|
||||
#define MX31_INT_POWER_FAIL (NR_IRQS_LEGACY + 30)
|
||||
#define MX31_INT_CCM_DVFS (NR_IRQS_LEGACY + 31)
|
||||
#define MX31_INT_UART2 (NR_IRQS_LEGACY + 32)
|
||||
#define MX31_INT_NFC (NR_IRQS_LEGACY + 33)
|
||||
#define MX31_INT_SDMA (NR_IRQS_LEGACY + 34)
|
||||
#define MX31_INT_USB_HS1 (NR_IRQS_LEGACY + 35)
|
||||
#define MX31_INT_USB_HS2 (NR_IRQS_LEGACY + 36)
|
||||
#define MX31_INT_USB_OTG (NR_IRQS_LEGACY + 37)
|
||||
#define MX31_INT_MSHC1 (NR_IRQS_LEGACY + 39)
|
||||
#define MX31_INT_MSHC2 (NR_IRQS_LEGACY + 40)
|
||||
#define MX31_INT_IPU_ERR (NR_IRQS_LEGACY + 41)
|
||||
#define MX31_INT_IPU_SYN (NR_IRQS_LEGACY + 42)
|
||||
#define MX31_INT_UART1 (NR_IRQS_LEGACY + 45)
|
||||
#define MX31_INT_UART4 (NR_IRQS_LEGACY + 46)
|
||||
#define MX31_INT_UART5 (NR_IRQS_LEGACY + 47)
|
||||
#define MX31_INT_ECT (NR_IRQS_LEGACY + 48)
|
||||
#define MX31_INT_SCC_SCM (NR_IRQS_LEGACY + 49)
|
||||
#define MX31_INT_SCC_SMN (NR_IRQS_LEGACY + 50)
|
||||
#define MX31_INT_GPIO2 (NR_IRQS_LEGACY + 51)
|
||||
#define MX31_INT_GPIO1 (NR_IRQS_LEGACY + 52)
|
||||
#define MX31_INT_CCM (NR_IRQS_LEGACY + 53)
|
||||
#define MX31_INT_PCMCIA (NR_IRQS_LEGACY + 54)
|
||||
#define MX31_INT_WDOG (NR_IRQS_LEGACY + 55)
|
||||
#define MX31_INT_GPIO3 (NR_IRQS_LEGACY + 56)
|
||||
#define MX31_INT_EXT_POWER (NR_IRQS_LEGACY + 58)
|
||||
#define MX31_INT_EXT_TEMPER (NR_IRQS_LEGACY + 59)
|
||||
#define MX31_INT_EXT_SENSOR60 (NR_IRQS_LEGACY + 60)
|
||||
#define MX31_INT_EXT_SENSOR61 (NR_IRQS_LEGACY + 61)
|
||||
#define MX31_INT_EXT_WDOG (NR_IRQS_LEGACY + 62)
|
||||
#define MX31_INT_EXT_TV (NR_IRQS_LEGACY + 63)
|
||||
|
||||
#define MX31_DMA_REQ_SDHC1 20
|
||||
#define MX31_DMA_REQ_SDHC2 21
|
||||
#define MX31_DMA_REQ_SSI2_RX1 22
|
||||
#define MX31_DMA_REQ_SSI2_TX1 23
|
||||
#define MX31_DMA_REQ_SSI2_RX0 24
|
||||
#define MX31_DMA_REQ_SSI2_TX0 25
|
||||
#define MX31_DMA_REQ_SSI1_RX1 26
|
||||
#define MX31_DMA_REQ_SSI1_TX1 27
|
||||
#define MX31_DMA_REQ_SSI1_RX0 28
|
||||
#define MX31_DMA_REQ_SSI1_TX0 29
|
||||
|
||||
#define MX31_PROD_SIGNATURE 0x1 /* For MX31 */
|
||||
|
||||
#endif /* ifndef __MACH_MX31_H__ */
|
||||
|
|
|
@ -1,182 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* LILLY-1131 development board support
|
||||
*
|
||||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
*
|
||||
* based on code for other MX31 boards,
|
||||
*
|
||||
* Copyright 2005-2007 Freescale Semiconductor
|
||||
* Copyright (c) 2009 Alberto Panizzo <maramaopercheseimorto@gmail.com>
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "board-mx31lilly.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
|
||||
/*
|
||||
* This file contains board-specific initialization routines for the
|
||||
* LILLY-1131 development board. If you design an own baseboard for the
|
||||
* module, use this file as base for support code.
|
||||
*/
|
||||
|
||||
static unsigned int lilly_db_board_pins[] __initdata = {
|
||||
MX31_PIN_SD1_DATA3__SD1_DATA3,
|
||||
MX31_PIN_SD1_DATA2__SD1_DATA2,
|
||||
MX31_PIN_SD1_DATA1__SD1_DATA1,
|
||||
MX31_PIN_SD1_DATA0__SD1_DATA0,
|
||||
MX31_PIN_SD1_CLK__SD1_CLK,
|
||||
MX31_PIN_SD1_CMD__SD1_CMD,
|
||||
MX31_PIN_LD0__LD0,
|
||||
MX31_PIN_LD1__LD1,
|
||||
MX31_PIN_LD2__LD2,
|
||||
MX31_PIN_LD3__LD3,
|
||||
MX31_PIN_LD4__LD4,
|
||||
MX31_PIN_LD5__LD5,
|
||||
MX31_PIN_LD6__LD6,
|
||||
MX31_PIN_LD7__LD7,
|
||||
MX31_PIN_LD8__LD8,
|
||||
MX31_PIN_LD9__LD9,
|
||||
MX31_PIN_LD10__LD10,
|
||||
MX31_PIN_LD11__LD11,
|
||||
MX31_PIN_LD12__LD12,
|
||||
MX31_PIN_LD13__LD13,
|
||||
MX31_PIN_LD14__LD14,
|
||||
MX31_PIN_LD15__LD15,
|
||||
MX31_PIN_LD16__LD16,
|
||||
MX31_PIN_LD17__LD17,
|
||||
MX31_PIN_VSYNC3__VSYNC3,
|
||||
MX31_PIN_HSYNC__HSYNC,
|
||||
MX31_PIN_FPSHIFT__FPSHIFT,
|
||||
MX31_PIN_DRDY0__DRDY0,
|
||||
MX31_PIN_CONTRAST__CONTRAST,
|
||||
};
|
||||
|
||||
/* MMC support */
|
||||
|
||||
static int mxc_mmc1_get_ro(struct device *dev)
|
||||
{
|
||||
return gpio_get_value(IOMUX_TO_GPIO(MX31_PIN_LCS0));
|
||||
}
|
||||
|
||||
static int gpio_det, gpio_wp;
|
||||
|
||||
#define MMC_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||
|
||||
static int mxc_mmc1_init(struct device *dev,
|
||||
irq_handler_t detect_irq, void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
gpio_det = IOMUX_TO_GPIO(MX31_PIN_GPIO1_1);
|
||||
gpio_wp = IOMUX_TO_GPIO(MX31_PIN_LCS0);
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_DATA0, MMC_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_DATA1, MMC_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_DATA2, MMC_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_DATA3, MMC_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_CLK, MMC_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_CMD, MMC_PAD_CFG);
|
||||
|
||||
ret = gpio_request(gpio_det, "MMC detect");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = gpio_request(gpio_wp, "MMC w/p");
|
||||
if (ret)
|
||||
goto exit_free_det;
|
||||
|
||||
gpio_direction_input(gpio_det);
|
||||
gpio_direction_input(gpio_wp);
|
||||
|
||||
ret = request_irq(gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1)),
|
||||
detect_irq, IRQF_TRIGGER_FALLING,
|
||||
"MMC detect", data);
|
||||
if (ret)
|
||||
goto exit_free_wp;
|
||||
|
||||
return 0;
|
||||
|
||||
exit_free_wp:
|
||||
gpio_free(gpio_wp);
|
||||
|
||||
exit_free_det:
|
||||
gpio_free(gpio_det);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void mxc_mmc1_exit(struct device *dev, void *data)
|
||||
{
|
||||
gpio_free(gpio_det);
|
||||
gpio_free(gpio_wp);
|
||||
free_irq(gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_GPIO1_1)), data);
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data mmc_pdata __initconst = {
|
||||
.get_ro = mxc_mmc1_get_ro,
|
||||
.init = mxc_mmc1_init,
|
||||
.exit = mxc_mmc1_exit,
|
||||
};
|
||||
|
||||
/* Framebuffer support */
|
||||
static const struct fb_videomode fb_modedb = {
|
||||
/* 640x480 TFT panel (IPS-056T) */
|
||||
.name = "CRT-VGA",
|
||||
.refresh = 64,
|
||||
.xres = 640,
|
||||
.yres = 480,
|
||||
.pixclock = 30000,
|
||||
.left_margin = 200,
|
||||
.right_margin = 2,
|
||||
.upper_margin = 2,
|
||||
.lower_margin = 2,
|
||||
.hsync_len = 3,
|
||||
.vsync_len = 1,
|
||||
.sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
};
|
||||
|
||||
static struct mx3fb_platform_data fb_pdata __initdata = {
|
||||
.name = "CRT-VGA",
|
||||
.mode = &fb_modedb,
|
||||
.num_modes = 1,
|
||||
};
|
||||
|
||||
#define LCD_VCC_EN_GPIO (7)
|
||||
|
||||
static void __init mx31lilly_init_fb(void)
|
||||
{
|
||||
if (gpio_request(LCD_VCC_EN_GPIO, "LCD enable") != 0) {
|
||||
printk(KERN_WARNING "unable to request LCD_VCC_EN pin.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
imx31_add_ipu_core();
|
||||
imx31_add_mx3_sdc_fb(&fb_pdata);
|
||||
gpio_direction_output(LCD_VCC_EN_GPIO, 1);
|
||||
}
|
||||
|
||||
void __init mx31lilly_db_init(void)
|
||||
{
|
||||
mxc_iomux_setup_multiple_pins(lilly_db_board_pins,
|
||||
ARRAY_SIZE(lilly_db_board_pins),
|
||||
"development board pins");
|
||||
imx31_add_mxc_mmc(0, &mmc_pdata);
|
||||
mx31lilly_init_fb();
|
||||
}
|
|
@ -1,154 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* LogicPD i.MX31 SOM-LV development board support
|
||||
*
|
||||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
|
||||
*
|
||||
* based on code for other MX31 boards,
|
||||
*
|
||||
* Copyright 2005-2007 Freescale Semiconductor
|
||||
* Copyright (c) 2009 Alberto Panizzo <maramaopercheseimorto@gmail.com>
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "board-mx31lite.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
|
||||
/*
|
||||
* This file contains board-specific initialization routines for the
|
||||
* LogicPD i.MX31 SOM-LV development board, aka 'LiteKit'.
|
||||
* If you design an own baseboard for the module, use this file as base
|
||||
* for support code.
|
||||
*/
|
||||
|
||||
static unsigned int litekit_db_board_pins[] __initdata = {
|
||||
/* SDHC1 */
|
||||
MX31_PIN_SD1_DATA0__SD1_DATA0,
|
||||
MX31_PIN_SD1_DATA1__SD1_DATA1,
|
||||
MX31_PIN_SD1_DATA2__SD1_DATA2,
|
||||
MX31_PIN_SD1_DATA3__SD1_DATA3,
|
||||
MX31_PIN_SD1_CLK__SD1_CLK,
|
||||
MX31_PIN_SD1_CMD__SD1_CMD,
|
||||
};
|
||||
|
||||
/* MMC */
|
||||
|
||||
static int gpio_det, gpio_wp;
|
||||
|
||||
#define MMC_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS)
|
||||
|
||||
static int mxc_mmc1_get_ro(struct device *dev)
|
||||
{
|
||||
return gpio_get_value(IOMUX_TO_GPIO(MX31_PIN_GPIO1_6));
|
||||
}
|
||||
|
||||
static int mxc_mmc1_init(struct device *dev,
|
||||
irq_handler_t detect_irq, void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
gpio_det = IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1);
|
||||
gpio_wp = IOMUX_TO_GPIO(MX31_PIN_GPIO1_6);
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_DATA0,
|
||||
MMC_PAD_CFG | PAD_CTL_PUE_PUD | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_DATA1,
|
||||
MMC_PAD_CFG | PAD_CTL_PUE_PUD | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_DATA2,
|
||||
MMC_PAD_CFG | PAD_CTL_PUE_PUD | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_DATA3,
|
||||
MMC_PAD_CFG | PAD_CTL_PUE_PUD | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_CMD,
|
||||
MMC_PAD_CFG | PAD_CTL_PUE_PUD | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_SD1_CLK, MMC_PAD_CFG);
|
||||
|
||||
ret = gpio_request(gpio_det, "MMC detect");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = gpio_request(gpio_wp, "MMC w/p");
|
||||
if (ret)
|
||||
goto exit_free_det;
|
||||
|
||||
gpio_direction_input(gpio_det);
|
||||
gpio_direction_input(gpio_wp);
|
||||
|
||||
ret = request_irq(gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1)),
|
||||
detect_irq,
|
||||
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
|
||||
"MMC detect", data);
|
||||
if (ret)
|
||||
goto exit_free_wp;
|
||||
|
||||
return 0;
|
||||
|
||||
exit_free_wp:
|
||||
gpio_free(gpio_wp);
|
||||
|
||||
exit_free_det:
|
||||
gpio_free(gpio_det);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void mxc_mmc1_exit(struct device *dev, void *data)
|
||||
{
|
||||
gpio_free(gpio_det);
|
||||
gpio_free(gpio_wp);
|
||||
free_irq(gpio_to_irq(IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1)), data);
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data mmc_pdata __initconst = {
|
||||
.get_ro = mxc_mmc1_get_ro,
|
||||
.init = mxc_mmc1_init,
|
||||
.exit = mxc_mmc1_exit,
|
||||
};
|
||||
|
||||
/* GPIO LEDs */
|
||||
|
||||
static const struct gpio_led litekit_leds[] __initconst = {
|
||||
{
|
||||
.name = "GPIO0",
|
||||
.gpio = IOMUX_TO_GPIO(MX31_PIN_COMPARE),
|
||||
.active_low = 1,
|
||||
.default_state = LEDS_GPIO_DEFSTATE_OFF,
|
||||
},
|
||||
{
|
||||
.name = "GPIO1",
|
||||
.gpio = IOMUX_TO_GPIO(MX31_PIN_CAPTURE),
|
||||
.active_low = 1,
|
||||
.default_state = LEDS_GPIO_DEFSTATE_OFF,
|
||||
}
|
||||
};
|
||||
|
||||
static const struct gpio_led_platform_data
|
||||
litekit_led_platform_data __initconst = {
|
||||
.leds = litekit_leds,
|
||||
.num_leds = ARRAY_SIZE(litekit_leds),
|
||||
};
|
||||
|
||||
void __init mx31lite_db_init(void)
|
||||
{
|
||||
mxc_iomux_setup_multiple_pins(litekit_db_board_pins,
|
||||
ARRAY_SIZE(litekit_db_board_pins),
|
||||
"development board pins");
|
||||
imx31_add_mxc_mmc(0, &mmc_pdata);
|
||||
gpio_led_register_device(-1, &litekit_led_platform_data);
|
||||
imx31_add_imx2_wdt();
|
||||
imx31_add_mxc_rtc();
|
||||
}
|
|
@ -1,238 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*/
|
||||
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <linux/usb/otg.h>
|
||||
|
||||
#include "board-mx31moboard.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
static unsigned int devboard_pins[] = {
|
||||
/* UART1 */
|
||||
MX31_PIN_CTS2__CTS2, MX31_PIN_RTS2__RTS2,
|
||||
MX31_PIN_TXD2__TXD2, MX31_PIN_RXD2__RXD2,
|
||||
/* SDHC2 */
|
||||
MX31_PIN_PC_PWRON__SD2_DATA3, MX31_PIN_PC_VS1__SD2_DATA2,
|
||||
MX31_PIN_PC_READY__SD2_DATA1, MX31_PIN_PC_WAIT_B__SD2_DATA0,
|
||||
MX31_PIN_PC_CD2_B__SD2_CLK, MX31_PIN_PC_CD1_B__SD2_CMD,
|
||||
MX31_PIN_ATA_DIOR__GPIO3_28, MX31_PIN_ATA_DIOW__GPIO3_29,
|
||||
/* USB H1 */
|
||||
MX31_PIN_CSPI1_MISO__USBH1_RXDP, MX31_PIN_CSPI1_MOSI__USBH1_RXDM,
|
||||
MX31_PIN_CSPI1_SS0__USBH1_TXDM, MX31_PIN_CSPI1_SS1__USBH1_TXDP,
|
||||
MX31_PIN_CSPI1_SS2__USBH1_RCV, MX31_PIN_CSPI1_SCLK__USBH1_OEB,
|
||||
MX31_PIN_CSPI1_SPI_RDY__USBH1_FS, MX31_PIN_SFS6__USBH1_SUSPEND,
|
||||
MX31_PIN_NFRE_B__GPIO1_11, MX31_PIN_NFALE__GPIO1_12,
|
||||
/* SEL */
|
||||
MX31_PIN_DTR_DCE1__GPIO2_8, MX31_PIN_DSR_DCE1__GPIO2_9,
|
||||
MX31_PIN_RI_DCE1__GPIO2_10, MX31_PIN_DCD_DCE1__GPIO2_11,
|
||||
};
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
#define SDHC2_CD IOMUX_TO_GPIO(MX31_PIN_ATA_DIOR)
|
||||
#define SDHC2_WP IOMUX_TO_GPIO(MX31_PIN_ATA_DIOW)
|
||||
|
||||
static int devboard_sdhc2_get_ro(struct device *dev)
|
||||
{
|
||||
return !gpio_get_value(SDHC2_WP);
|
||||
}
|
||||
|
||||
static int devboard_sdhc2_init(struct device *dev, irq_handler_t detect_irq,
|
||||
void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(SDHC2_CD, "sdhc-detect");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
gpio_direction_input(SDHC2_CD);
|
||||
|
||||
ret = gpio_request(SDHC2_WP, "sdhc-wp");
|
||||
if (ret)
|
||||
goto err_gpio_free;
|
||||
gpio_direction_input(SDHC2_WP);
|
||||
|
||||
ret = request_irq(gpio_to_irq(SDHC2_CD), detect_irq,
|
||||
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
|
||||
"sdhc2-card-detect", data);
|
||||
if (ret)
|
||||
goto err_gpio_free_2;
|
||||
|
||||
return 0;
|
||||
|
||||
err_gpio_free_2:
|
||||
gpio_free(SDHC2_WP);
|
||||
err_gpio_free:
|
||||
gpio_free(SDHC2_CD);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void devboard_sdhc2_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(SDHC2_CD), data);
|
||||
gpio_free(SDHC2_WP);
|
||||
gpio_free(SDHC2_CD);
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data sdhc2_pdata __initconst = {
|
||||
.get_ro = devboard_sdhc2_get_ro,
|
||||
.init = devboard_sdhc2_init,
|
||||
.exit = devboard_sdhc2_exit,
|
||||
};
|
||||
|
||||
#define SEL0 IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1)
|
||||
#define SEL1 IOMUX_TO_GPIO(MX31_PIN_DSR_DCE1)
|
||||
#define SEL2 IOMUX_TO_GPIO(MX31_PIN_RI_DCE1)
|
||||
#define SEL3 IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1)
|
||||
|
||||
static void devboard_init_sel_gpios(void)
|
||||
{
|
||||
if (!gpio_request(SEL0, "sel0")) {
|
||||
gpio_direction_input(SEL0);
|
||||
gpio_export(SEL0, true);
|
||||
}
|
||||
|
||||
if (!gpio_request(SEL1, "sel1")) {
|
||||
gpio_direction_input(SEL1);
|
||||
gpio_export(SEL1, true);
|
||||
}
|
||||
|
||||
if (!gpio_request(SEL2, "sel2")) {
|
||||
gpio_direction_input(SEL2);
|
||||
gpio_export(SEL2, true);
|
||||
}
|
||||
|
||||
if (!gpio_request(SEL3, "sel3")) {
|
||||
gpio_direction_input(SEL3);
|
||||
gpio_export(SEL3, true);
|
||||
}
|
||||
}
|
||||
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||
|
||||
static int devboard_usbh1_hw_init(struct platform_device *pdev)
|
||||
{
|
||||
mxc_iomux_set_gpr(MUX_PGP_USB_SUSPEND, true);
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_MISO, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_MOSI, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS2, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SCLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SPI_RDY, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SFS6, USB_PAD_CFG);
|
||||
|
||||
mdelay(10);
|
||||
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED |
|
||||
MXC_EHCI_INTERFACE_SINGLE_UNI);
|
||||
}
|
||||
|
||||
#define USBH1_VBUSEN_B IOMUX_TO_GPIO(MX31_PIN_NFRE_B)
|
||||
#define USBH1_MODE IOMUX_TO_GPIO(MX31_PIN_NFALE)
|
||||
|
||||
static int devboard_isp1105_init(struct usb_phy *otg)
|
||||
{
|
||||
int ret = gpio_request(USBH1_MODE, "usbh1-mode");
|
||||
if (ret)
|
||||
return ret;
|
||||
/* single ended */
|
||||
gpio_direction_output(USBH1_MODE, 0);
|
||||
|
||||
ret = gpio_request(USBH1_VBUSEN_B, "usbh1-vbusen");
|
||||
if (ret) {
|
||||
gpio_free(USBH1_MODE);
|
||||
return ret;
|
||||
}
|
||||
gpio_direction_output(USBH1_VBUSEN_B, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int devboard_isp1105_set_vbus(struct usb_otg *otg, bool on)
|
||||
{
|
||||
if (on)
|
||||
gpio_set_value(USBH1_VBUSEN_B, 0);
|
||||
else
|
||||
gpio_set_value(USBH1_VBUSEN_B, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data usbh1_pdata __initdata = {
|
||||
.init = devboard_usbh1_hw_init,
|
||||
.portsc = MXC_EHCI_MODE_UTMI | MXC_EHCI_SERIAL,
|
||||
};
|
||||
|
||||
static int __init devboard_usbh1_init(void)
|
||||
{
|
||||
struct usb_phy *phy;
|
||||
struct platform_device *pdev;
|
||||
|
||||
phy = kzalloc(sizeof(*phy), GFP_KERNEL);
|
||||
if (!phy)
|
||||
return -ENOMEM;
|
||||
|
||||
phy->otg = kzalloc(sizeof(struct usb_otg), GFP_KERNEL);
|
||||
if (!phy->otg) {
|
||||
kfree(phy);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
phy->label = "ISP1105";
|
||||
phy->init = devboard_isp1105_init;
|
||||
phy->otg->set_vbus = devboard_isp1105_set_vbus;
|
||||
|
||||
usbh1_pdata.otg = phy;
|
||||
|
||||
pdev = imx31_add_mxc_ehci_hs(1, &usbh1_pdata);
|
||||
|
||||
return PTR_ERR_OR_ZERO(pdev);
|
||||
}
|
||||
|
||||
|
||||
static const struct fsl_usb2_platform_data usb_pdata __initconst = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_ULPI,
|
||||
};
|
||||
|
||||
/*
|
||||
* system init for baseboard usage. Will be called by mx31moboard init.
|
||||
*/
|
||||
void __init mx31moboard_devboard_init(void)
|
||||
{
|
||||
printk(KERN_INFO "Initializing mx31devboard peripherals\n");
|
||||
|
||||
mxc_iomux_setup_multiple_pins(devboard_pins, ARRAY_SIZE(devboard_pins),
|
||||
"devboard");
|
||||
|
||||
imx31_add_imx_uart1(&uart_pdata);
|
||||
|
||||
imx31_add_mxc_mmc(1, &sdhc2_pdata);
|
||||
|
||||
devboard_init_sel_gpios();
|
||||
|
||||
imx31_add_fsl_usb2_udc(&usb_pdata);
|
||||
|
||||
devboard_usbh1_init();
|
||||
}
|
|
@ -1,270 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <linux/usb/otg.h>
|
||||
|
||||
#include "board-mx31moboard.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
static unsigned int marxbot_pins[] = {
|
||||
/* SDHC2 */
|
||||
MX31_PIN_PC_PWRON__SD2_DATA3, MX31_PIN_PC_VS1__SD2_DATA2,
|
||||
MX31_PIN_PC_READY__SD2_DATA1, MX31_PIN_PC_WAIT_B__SD2_DATA0,
|
||||
MX31_PIN_PC_CD2_B__SD2_CLK, MX31_PIN_PC_CD1_B__SD2_CMD,
|
||||
MX31_PIN_ATA_DIOR__GPIO3_28, MX31_PIN_ATA_DIOW__GPIO3_29,
|
||||
/* dsPIC resets */
|
||||
MX31_PIN_STXD5__GPIO1_21, MX31_PIN_SRXD5__GPIO1_22,
|
||||
/*battery detection */
|
||||
MX31_PIN_LCS0__GPIO3_23,
|
||||
/* USB H1 */
|
||||
MX31_PIN_CSPI1_MISO__USBH1_RXDP, MX31_PIN_CSPI1_MOSI__USBH1_RXDM,
|
||||
MX31_PIN_CSPI1_SS0__USBH1_TXDM, MX31_PIN_CSPI1_SS1__USBH1_TXDP,
|
||||
MX31_PIN_CSPI1_SS2__USBH1_RCV, MX31_PIN_CSPI1_SCLK__USBH1_OEB,
|
||||
MX31_PIN_CSPI1_SPI_RDY__USBH1_FS, MX31_PIN_SFS6__USBH1_SUSPEND,
|
||||
MX31_PIN_NFRE_B__GPIO1_11, MX31_PIN_NFALE__GPIO1_12,
|
||||
/* SEL */
|
||||
MX31_PIN_DTR_DCE1__GPIO2_8, MX31_PIN_DSR_DCE1__GPIO2_9,
|
||||
MX31_PIN_RI_DCE1__GPIO2_10, MX31_PIN_DCD_DCE1__GPIO2_11,
|
||||
};
|
||||
|
||||
#define SDHC2_CD IOMUX_TO_GPIO(MX31_PIN_ATA_DIOR)
|
||||
#define SDHC2_WP IOMUX_TO_GPIO(MX31_PIN_ATA_DIOW)
|
||||
|
||||
static int marxbot_sdhc2_get_ro(struct device *dev)
|
||||
{
|
||||
return !gpio_get_value(SDHC2_WP);
|
||||
}
|
||||
|
||||
static int marxbot_sdhc2_init(struct device *dev, irq_handler_t detect_irq,
|
||||
void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(SDHC2_CD, "sdhc-detect");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
gpio_direction_input(SDHC2_CD);
|
||||
|
||||
ret = gpio_request(SDHC2_WP, "sdhc-wp");
|
||||
if (ret)
|
||||
goto err_gpio_free;
|
||||
gpio_direction_input(SDHC2_WP);
|
||||
|
||||
ret = request_irq(gpio_to_irq(SDHC2_CD), detect_irq,
|
||||
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
|
||||
"sdhc2-card-detect", data);
|
||||
if (ret)
|
||||
goto err_gpio_free_2;
|
||||
|
||||
return 0;
|
||||
|
||||
err_gpio_free_2:
|
||||
gpio_free(SDHC2_WP);
|
||||
err_gpio_free:
|
||||
gpio_free(SDHC2_CD);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void marxbot_sdhc2_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(gpio_to_irq(SDHC2_CD), data);
|
||||
gpio_free(SDHC2_WP);
|
||||
gpio_free(SDHC2_CD);
|
||||
}
|
||||
|
||||
static const struct imxmmc_platform_data sdhc2_pdata __initconst = {
|
||||
.get_ro = marxbot_sdhc2_get_ro,
|
||||
.init = marxbot_sdhc2_init,
|
||||
.exit = marxbot_sdhc2_exit,
|
||||
};
|
||||
|
||||
#define TRSLAT_RST_B IOMUX_TO_GPIO(MX31_PIN_STXD5)
|
||||
#define DSPICS_RST_B IOMUX_TO_GPIO(MX31_PIN_SRXD5)
|
||||
|
||||
static void dspics_resets_init(void)
|
||||
{
|
||||
if (!gpio_request(TRSLAT_RST_B, "translator-rst")) {
|
||||
gpio_direction_output(TRSLAT_RST_B, 0);
|
||||
gpio_export(TRSLAT_RST_B, false);
|
||||
}
|
||||
|
||||
if (!gpio_request(DSPICS_RST_B, "dspics-rst")) {
|
||||
gpio_direction_output(DSPICS_RST_B, 0);
|
||||
gpio_export(DSPICS_RST_B, false);
|
||||
}
|
||||
}
|
||||
|
||||
static struct spi_board_info marxbot_spi_board_info[] __initdata = {
|
||||
{
|
||||
.modalias = "spidev",
|
||||
.max_speed_hz = 300000,
|
||||
.bus_num = 1,
|
||||
.chip_select = 1, /* according spi1_cs[] ! */
|
||||
},
|
||||
};
|
||||
|
||||
#define SEL0 IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1)
|
||||
#define SEL1 IOMUX_TO_GPIO(MX31_PIN_DSR_DCE1)
|
||||
#define SEL2 IOMUX_TO_GPIO(MX31_PIN_RI_DCE1)
|
||||
#define SEL3 IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1)
|
||||
|
||||
static void marxbot_init_sel_gpios(void)
|
||||
{
|
||||
if (!gpio_request(SEL0, "sel0")) {
|
||||
gpio_direction_input(SEL0);
|
||||
gpio_export(SEL0, true);
|
||||
}
|
||||
|
||||
if (!gpio_request(SEL1, "sel1")) {
|
||||
gpio_direction_input(SEL1);
|
||||
gpio_export(SEL1, true);
|
||||
}
|
||||
|
||||
if (!gpio_request(SEL2, "sel2")) {
|
||||
gpio_direction_input(SEL2);
|
||||
gpio_export(SEL2, true);
|
||||
}
|
||||
|
||||
if (!gpio_request(SEL3, "sel3")) {
|
||||
gpio_direction_input(SEL3);
|
||||
gpio_export(SEL3, true);
|
||||
}
|
||||
}
|
||||
|
||||
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||
|
||||
static int marxbot_usbh1_hw_init(struct platform_device *pdev)
|
||||
{
|
||||
mxc_iomux_set_gpr(MUX_PGP_USB_SUSPEND, true);
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_MISO, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_MOSI, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS2, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SCLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SPI_RDY, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SFS6, USB_PAD_CFG);
|
||||
|
||||
mdelay(10);
|
||||
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED |
|
||||
MXC_EHCI_INTERFACE_SINGLE_UNI);
|
||||
}
|
||||
|
||||
#define USBH1_VBUSEN_B IOMUX_TO_GPIO(MX31_PIN_NFRE_B)
|
||||
#define USBH1_MODE IOMUX_TO_GPIO(MX31_PIN_NFALE)
|
||||
|
||||
static int marxbot_isp1105_init(struct usb_phy *otg)
|
||||
{
|
||||
int ret = gpio_request(USBH1_MODE, "usbh1-mode");
|
||||
if (ret)
|
||||
return ret;
|
||||
/* single ended */
|
||||
gpio_direction_output(USBH1_MODE, 0);
|
||||
|
||||
ret = gpio_request(USBH1_VBUSEN_B, "usbh1-vbusen");
|
||||
if (ret) {
|
||||
gpio_free(USBH1_MODE);
|
||||
return ret;
|
||||
}
|
||||
gpio_direction_output(USBH1_VBUSEN_B, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int marxbot_isp1105_set_vbus(struct usb_otg *otg, bool on)
|
||||
{
|
||||
if (on)
|
||||
gpio_set_value(USBH1_VBUSEN_B, 0);
|
||||
else
|
||||
gpio_set_value(USBH1_VBUSEN_B, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data usbh1_pdata __initdata = {
|
||||
.init = marxbot_usbh1_hw_init,
|
||||
.portsc = MXC_EHCI_MODE_UTMI | MXC_EHCI_SERIAL,
|
||||
};
|
||||
|
||||
static int __init marxbot_usbh1_init(void)
|
||||
{
|
||||
struct usb_phy *phy;
|
||||
struct platform_device *pdev;
|
||||
|
||||
phy = kzalloc(sizeof(*phy), GFP_KERNEL);
|
||||
if (!phy)
|
||||
return -ENOMEM;
|
||||
|
||||
phy->otg = kzalloc(sizeof(struct usb_otg), GFP_KERNEL);
|
||||
if (!phy->otg) {
|
||||
kfree(phy);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
phy->label = "ISP1105";
|
||||
phy->init = marxbot_isp1105_init;
|
||||
phy->otg->set_vbus = marxbot_isp1105_set_vbus;
|
||||
|
||||
usbh1_pdata.otg = phy;
|
||||
|
||||
pdev = imx31_add_mxc_ehci_hs(1, &usbh1_pdata);
|
||||
|
||||
return PTR_ERR_OR_ZERO(pdev);
|
||||
}
|
||||
|
||||
static const struct fsl_usb2_platform_data usb_pdata __initconst = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_ULPI,
|
||||
};
|
||||
|
||||
/*
|
||||
* system init for baseboard usage. Will be called by mx31moboard init.
|
||||
*/
|
||||
void __init mx31moboard_marxbot_init(void)
|
||||
{
|
||||
printk(KERN_INFO "Initializing mx31marxbot peripherals\n");
|
||||
|
||||
mxc_iomux_setup_multiple_pins(marxbot_pins, ARRAY_SIZE(marxbot_pins),
|
||||
"marxbot");
|
||||
|
||||
marxbot_init_sel_gpios();
|
||||
|
||||
dspics_resets_init();
|
||||
|
||||
imx31_add_mxc_mmc(1, &sdhc2_pdata);
|
||||
|
||||
spi_register_board_info(marxbot_spi_board_info,
|
||||
ARRAY_SIZE(marxbot_spi_board_info));
|
||||
|
||||
/* battery present pin */
|
||||
gpio_request(IOMUX_TO_GPIO(MX31_PIN_LCS0), "bat-present");
|
||||
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_LCS0));
|
||||
gpio_export(IOMUX_TO_GPIO(MX31_PIN_LCS0), false);
|
||||
|
||||
imx31_add_fsl_usb2_udc(&usb_pdata);
|
||||
|
||||
marxbot_usbh1_init();
|
||||
}
|
|
@ -1,124 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
|
||||
#include "board-mx31moboard.h"
|
||||
#include "common.h"
|
||||
#include "devices-imx31.h"
|
||||
#include "ehci.h"
|
||||
#include "hardware.h"
|
||||
#include "iomux-mx3.h"
|
||||
#include "ulpi.h"
|
||||
|
||||
static unsigned int smartbot_pins[] = {
|
||||
/* UART1 */
|
||||
MX31_PIN_CTS2__CTS2, MX31_PIN_RTS2__RTS2,
|
||||
MX31_PIN_TXD2__TXD2, MX31_PIN_RXD2__RXD2,
|
||||
/* ENABLES */
|
||||
MX31_PIN_DTR_DCE1__GPIO2_8, MX31_PIN_DSR_DCE1__GPIO2_9,
|
||||
MX31_PIN_RI_DCE1__GPIO2_10, MX31_PIN_DCD_DCE1__GPIO2_11,
|
||||
};
|
||||
|
||||
static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static const struct fsl_usb2_platform_data usb_pdata __initconst = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_ULPI,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_USB_ULPI)
|
||||
|
||||
static int smartbot_otg_init(struct platform_device *pdev)
|
||||
{
|
||||
return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data otg_host_pdata __initdata = {
|
||||
.init = smartbot_otg_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||
};
|
||||
|
||||
static int __init smartbot_otg_host_init(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
|
||||
otg_host_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
|
||||
ULPI_OTG_DRVVBUS_EXT);
|
||||
if (!otg_host_pdata.otg)
|
||||
return -ENODEV;
|
||||
|
||||
pdev = imx31_add_mxc_ehci_otg(&otg_host_pdata);
|
||||
|
||||
return PTR_ERR_OR_ZERO(pdev);
|
||||
}
|
||||
#else
|
||||
static inline int smartbot_otg_host_init(void) { return 0; }
|
||||
#endif
|
||||
|
||||
#define POWER_EN IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1)
|
||||
#define DSPIC_RST_B IOMUX_TO_GPIO(MX31_PIN_DSR_DCE1)
|
||||
#define TRSLAT_RST_B IOMUX_TO_GPIO(MX31_PIN_RI_DCE1)
|
||||
#define TRSLAT_SRC_CHOICE IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1)
|
||||
|
||||
static void smartbot_resets_init(void)
|
||||
{
|
||||
if (!gpio_request(POWER_EN, "power-enable")) {
|
||||
gpio_direction_output(POWER_EN, 0);
|
||||
gpio_export(POWER_EN, false);
|
||||
}
|
||||
|
||||
if (!gpio_request(DSPIC_RST_B, "dspic-rst")) {
|
||||
gpio_direction_output(DSPIC_RST_B, 0);
|
||||
gpio_export(DSPIC_RST_B, false);
|
||||
}
|
||||
|
||||
if (!gpio_request(TRSLAT_RST_B, "translator-rst")) {
|
||||
gpio_direction_output(TRSLAT_RST_B, 0);
|
||||
gpio_export(TRSLAT_RST_B, false);
|
||||
}
|
||||
|
||||
if (!gpio_request(TRSLAT_SRC_CHOICE, "translator-src-choice")) {
|
||||
gpio_direction_output(TRSLAT_SRC_CHOICE, 0);
|
||||
gpio_export(TRSLAT_SRC_CHOICE, false);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* system init for baseboard usage. Will be called by mx31moboard init.
|
||||
*/
|
||||
void __init mx31moboard_smartbot_init(int board)
|
||||
{
|
||||
printk(KERN_INFO "Initializing mx31smartbot peripherals\n");
|
||||
|
||||
mxc_iomux_setup_multiple_pins(smartbot_pins, ARRAY_SIZE(smartbot_pins),
|
||||
"smartbot");
|
||||
|
||||
imx31_add_imx_uart1(&uart_pdata);
|
||||
|
||||
switch (board) {
|
||||
case MX31SMARTBOT:
|
||||
imx31_add_fsl_usb2_udc(&usb_pdata);
|
||||
break;
|
||||
case MX31EYEBOT:
|
||||
smartbot_otg_host_init();
|
||||
break;
|
||||
default:
|
||||
printk(KERN_WARNING "Unknown board %d, USB OTG not initialized",
|
||||
board);
|
||||
}
|
||||
|
||||
smartbot_resets_init();
|
||||
}
|
|
@ -2,190 +2,17 @@
|
|||
#ifndef __MACH_MX35_H__
|
||||
#define __MACH_MX35_H__
|
||||
|
||||
/*
|
||||
* IRAM
|
||||
*/
|
||||
#define MX35_IRAM_BASE_ADDR 0x10000000 /* internal ram */
|
||||
#define MX35_IRAM_SIZE SZ_128K
|
||||
|
||||
#define MX35_L2CC_BASE_ADDR 0x30000000
|
||||
#define MX35_L2CC_SIZE SZ_1M
|
||||
|
||||
#define MX35_AIPS1_BASE_ADDR 0x43f00000
|
||||
#define MX35_AIPS1_SIZE SZ_1M
|
||||
#define MX35_MAX_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x04000)
|
||||
#define MX35_EVTMON_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x08000)
|
||||
#define MX35_CLKCTL_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x0c000)
|
||||
#define MX35_ETB_SLOT4_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x10000)
|
||||
#define MX35_ETB_SLOT5_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x14000)
|
||||
#define MX35_ECT_CTIO_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x18000)
|
||||
#define MX35_I2C1_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x80000)
|
||||
#define MX35_I2C3_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x84000)
|
||||
#define MX35_UART1_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x90000)
|
||||
#define MX35_UART2_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x94000)
|
||||
#define MX35_I2C2_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x98000)
|
||||
#define MX35_OWIRE_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0x9c000)
|
||||
#define MX35_SSI1_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0xa0000)
|
||||
#define MX35_CSPI1_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0xa4000)
|
||||
#define MX35_KPP_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0xa8000)
|
||||
#define MX35_IOMUXC_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0xac000)
|
||||
#define MX35_ECT_IP1_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0xb8000)
|
||||
#define MX35_ECT_IP2_BASE_ADDR (MX35_AIPS1_BASE_ADDR + 0xbc000)
|
||||
|
||||
#define MX35_SPBA0_BASE_ADDR 0x50000000
|
||||
#define MX35_SPBA0_SIZE SZ_1M
|
||||
#define MX35_UART3_BASE_ADDR (MX35_SPBA0_BASE_ADDR + 0x0c000)
|
||||
#define MX35_CSPI2_BASE_ADDR (MX35_SPBA0_BASE_ADDR + 0x10000)
|
||||
#define MX35_SSI2_BASE_ADDR (MX35_SPBA0_BASE_ADDR + 0x14000)
|
||||
#define MX35_ATA_BASE_ADDR (MX35_SPBA0_BASE_ADDR + 0x20000)
|
||||
#define MX35_MSHC1_BASE_ADDR (MX35_SPBA0_BASE_ADDR + 0x24000)
|
||||
#define MX35_FEC_BASE_ADDR 0x50038000
|
||||
#define MX35_SPBA_CTRL_BASE_ADDR (MX35_SPBA0_BASE_ADDR + 0x3c000)
|
||||
|
||||
#define MX35_AIPS2_BASE_ADDR 0x53f00000
|
||||
#define MX35_AIPS2_SIZE SZ_1M
|
||||
#define MX35_CCM_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0x80000)
|
||||
#define MX35_GPT1_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0x90000)
|
||||
#define MX35_EPIT1_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0x94000)
|
||||
#define MX35_EPIT2_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0x98000)
|
||||
#define MX35_GPIO3_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xa4000)
|
||||
#define MX35_SCC_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xac000)
|
||||
#define MX35_RNGA_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xb0000)
|
||||
#define MX35_ESDHC1_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xb4000)
|
||||
#define MX35_ESDHC2_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xb8000)
|
||||
#define MX35_ESDHC3_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xbc000)
|
||||
#define MX35_IPU_CTRL_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xc0000)
|
||||
#define MX35_AUDMUX_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xc4000)
|
||||
#define MX35_GPIO1_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xcc000)
|
||||
#define MX35_GPIO2_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xd0000)
|
||||
#define MX35_SDMA_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xd4000)
|
||||
#define MX35_RTC_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xd8000)
|
||||
#define MX35_WDOG_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xdc000)
|
||||
#define MX35_PWM_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xe0000)
|
||||
#define MX35_CAN1_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xe4000)
|
||||
#define MX35_CAN2_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xe8000)
|
||||
#define MX35_RTIC_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xec000)
|
||||
#define MX35_IIM_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xf0000)
|
||||
#define MX35_USB_BASE_ADDR (MX35_AIPS2_BASE_ADDR + 0xf4000)
|
||||
#define MX35_USB_OTG_BASE_ADDR (MX35_USB_BASE_ADDR + 0x0000)
|
||||
/*
|
||||
* The Reference Manual (IMX35RM, Rev. 2, 3/2009) claims an offset of 0x200 for
|
||||
* HS. When host support was implemented only a preliminary document was
|
||||
* available, which told 0x400. This works fine.
|
||||
*/
|
||||
#define MX35_USB_HS_BASE_ADDR (MX35_USB_BASE_ADDR + 0x0400)
|
||||
|
||||
#define MX35_ROMP_BASE_ADDR 0x60000000
|
||||
#define MX35_ROMP_SIZE SZ_1M
|
||||
|
||||
#define MX35_AVIC_BASE_ADDR 0x68000000
|
||||
#define MX35_AVIC_SIZE SZ_1M
|
||||
|
||||
/*
|
||||
* Memory regions and CS
|
||||
*/
|
||||
#define MX35_IPU_MEM_BASE_ADDR 0x70000000
|
||||
#define MX35_CSD0_BASE_ADDR 0x80000000
|
||||
#define MX35_CSD1_BASE_ADDR 0x90000000
|
||||
|
||||
#define MX35_CS0_BASE_ADDR 0xa0000000
|
||||
#define MX35_CS1_BASE_ADDR 0xa8000000
|
||||
#define MX35_CS2_BASE_ADDR 0xb0000000
|
||||
#define MX35_CS3_BASE_ADDR 0xb2000000
|
||||
|
||||
#define MX35_CS4_BASE_ADDR 0xb4000000
|
||||
#define MX35_CS4_BASE_ADDR_VIRT 0xf6000000
|
||||
#define MX35_CS4_SIZE SZ_32M
|
||||
|
||||
#define MX35_CS5_BASE_ADDR 0xb6000000
|
||||
#define MX35_CS5_BASE_ADDR_VIRT 0xf8000000
|
||||
#define MX35_CS5_SIZE SZ_32M
|
||||
|
||||
/*
|
||||
* NAND, SDRAM, WEIM, M3IF, EMI controllers
|
||||
*/
|
||||
#define MX35_X_MEMC_BASE_ADDR 0xb8000000
|
||||
#define MX35_X_MEMC_SIZE SZ_64K
|
||||
#define MX35_ESDCTL_BASE_ADDR (MX35_X_MEMC_BASE_ADDR + 0x1000)
|
||||
#define MX35_WEIM_BASE_ADDR (MX35_X_MEMC_BASE_ADDR + 0x2000)
|
||||
#define MX35_M3IF_BASE_ADDR (MX35_X_MEMC_BASE_ADDR + 0x3000)
|
||||
#define MX35_EMI_CTL_BASE_ADDR (MX35_X_MEMC_BASE_ADDR + 0x4000)
|
||||
#define MX35_PCMCIA_CTL_BASE_ADDR MX35_EMI_CTL_BASE_ADDR
|
||||
|
||||
#define MX35_NFC_BASE_ADDR 0xbb000000
|
||||
#define MX35_PCMCIA_MEM_BASE_ADDR 0xbc000000
|
||||
|
||||
#define MX35_IO_P2V(x) IMX_IO_P2V(x)
|
||||
#define MX35_IO_ADDRESS(x) IOMEM(MX35_IO_P2V(x))
|
||||
|
||||
/*
|
||||
* Interrupt numbers
|
||||
*/
|
||||
#include <asm/irq.h>
|
||||
#define MX35_INT_OWIRE (NR_IRQS_LEGACY + 2)
|
||||
#define MX35_INT_I2C3 (NR_IRQS_LEGACY + 3)
|
||||
#define MX35_INT_I2C2 (NR_IRQS_LEGACY + 4)
|
||||
#define MX35_INT_RTIC (NR_IRQS_LEGACY + 6)
|
||||
#define MX35_INT_ESDHC1 (NR_IRQS_LEGACY + 7)
|
||||
#define MX35_INT_ESDHC2 (NR_IRQS_LEGACY + 8)
|
||||
#define MX35_INT_ESDHC3 (NR_IRQS_LEGACY + 9)
|
||||
#define MX35_INT_I2C1 (NR_IRQS_LEGACY + 10)
|
||||
#define MX35_INT_SSI1 (NR_IRQS_LEGACY + 11)
|
||||
#define MX35_INT_SSI2 (NR_IRQS_LEGACY + 12)
|
||||
#define MX35_INT_CSPI2 (NR_IRQS_LEGACY + 13)
|
||||
#define MX35_INT_CSPI1 (NR_IRQS_LEGACY + 14)
|
||||
#define MX35_INT_ATA (NR_IRQS_LEGACY + 15)
|
||||
#define MX35_INT_GPU2D (NR_IRQS_LEGACY + 16)
|
||||
#define MX35_INT_ASRC (NR_IRQS_LEGACY + 17)
|
||||
#define MX35_INT_UART3 (NR_IRQS_LEGACY + 18)
|
||||
#define MX35_INT_IIM (NR_IRQS_LEGACY + 19)
|
||||
#define MX35_INT_RNGA (NR_IRQS_LEGACY + 22)
|
||||
#define MX35_INT_EVTMON (NR_IRQS_LEGACY + 23)
|
||||
#define MX35_INT_KPP (NR_IRQS_LEGACY + 24)
|
||||
#define MX35_INT_RTC (NR_IRQS_LEGACY + 25)
|
||||
#define MX35_INT_PWM (NR_IRQS_LEGACY + 26)
|
||||
#define MX35_INT_EPIT2 (NR_IRQS_LEGACY + 27)
|
||||
#define MX35_INT_EPIT1 (NR_IRQS_LEGACY + 28)
|
||||
#define MX35_INT_GPT (NR_IRQS_LEGACY + 29)
|
||||
#define MX35_INT_POWER_FAIL (NR_IRQS_LEGACY + 30)
|
||||
#define MX35_INT_UART2 (NR_IRQS_LEGACY + 32)
|
||||
#define MX35_INT_NFC (NR_IRQS_LEGACY + 33)
|
||||
#define MX35_INT_SDMA (NR_IRQS_LEGACY + 34)
|
||||
#define MX35_INT_USB_HS (NR_IRQS_LEGACY + 35)
|
||||
#define MX35_INT_USB_OTG (NR_IRQS_LEGACY + 37)
|
||||
#define MX35_INT_MSHC1 (NR_IRQS_LEGACY + 39)
|
||||
#define MX35_INT_ESAI (NR_IRQS_LEGACY + 40)
|
||||
#define MX35_INT_IPU_ERR (NR_IRQS_LEGACY + 41)
|
||||
#define MX35_INT_IPU_SYN (NR_IRQS_LEGACY + 42)
|
||||
#define MX35_INT_CAN1 (NR_IRQS_LEGACY + 43)
|
||||
#define MX35_INT_CAN2 (NR_IRQS_LEGACY + 44)
|
||||
#define MX35_INT_UART1 (NR_IRQS_LEGACY + 45)
|
||||
#define MX35_INT_MLB (NR_IRQS_LEGACY + 46)
|
||||
#define MX35_INT_SPDIF (NR_IRQS_LEGACY + 47)
|
||||
#define MX35_INT_ECT (NR_IRQS_LEGACY + 48)
|
||||
#define MX35_INT_SCC_SCM (NR_IRQS_LEGACY + 49)
|
||||
#define MX35_INT_SCC_SMN (NR_IRQS_LEGACY + 50)
|
||||
#define MX35_INT_GPIO2 (NR_IRQS_LEGACY + 51)
|
||||
#define MX35_INT_GPIO1 (NR_IRQS_LEGACY + 52)
|
||||
#define MX35_INT_WDOG (NR_IRQS_LEGACY + 55)
|
||||
#define MX35_INT_GPIO3 (NR_IRQS_LEGACY + 56)
|
||||
#define MX35_INT_FEC (NR_IRQS_LEGACY + 57)
|
||||
#define MX35_INT_EXT_POWER (NR_IRQS_LEGACY + 58)
|
||||
#define MX35_INT_EXT_TEMPER (NR_IRQS_LEGACY + 59)
|
||||
#define MX35_INT_EXT_SENSOR60 (NR_IRQS_LEGACY + 60)
|
||||
#define MX35_INT_EXT_SENSOR61 (NR_IRQS_LEGACY + 61)
|
||||
#define MX35_INT_EXT_WDOG (NR_IRQS_LEGACY + 62)
|
||||
#define MX35_INT_EXT_TV (NR_IRQS_LEGACY + 63)
|
||||
|
||||
#define MX35_DMA_REQ_SSI2_RX1 22
|
||||
#define MX35_DMA_REQ_SSI2_TX1 23
|
||||
#define MX35_DMA_REQ_SSI2_RX0 24
|
||||
#define MX35_DMA_REQ_SSI2_TX0 25
|
||||
#define MX35_DMA_REQ_SSI1_RX1 26
|
||||
#define MX35_DMA_REQ_SSI1_TX1 27
|
||||
#define MX35_DMA_REQ_SSI1_RX0 28
|
||||
#define MX35_DMA_REQ_SSI1_TX0 29
|
||||
|
||||
#define MX35_PROD_SIGNATURE 0x1 /* For MX31 */
|
||||
|
||||
#endif /* ifndef __MACH_MX35_H__ */
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef __PCM037_H__
|
||||
#define __PCM037_H__
|
||||
|
||||
enum pcm037_board_variant {
|
||||
PCM037_PCM970,
|
||||
PCM037_EET,
|
||||
};
|
||||
|
||||
extern enum pcm037_board_variant pcm037_variant(void);
|
||||
|
||||
#ifdef CONFIG_MACH_PCM037_EET
|
||||
int pcm037_eet_init_devices(void);
|
||||
#else
|
||||
static inline int pcm037_eet_init_devices(void) { return 0; }
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -7,6 +7,7 @@
|
|||
* modify it under the terms of the GNU General Public License.
|
||||
*/
|
||||
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/suspend.h>
|
||||
#include <linux/io.h>
|
||||
|
@ -15,13 +16,20 @@
|
|||
|
||||
static int mx27_suspend_enter(suspend_state_t state)
|
||||
{
|
||||
void __iomem *ccm_base;
|
||||
struct device_node *np;
|
||||
u32 cscr;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx27-ccm");
|
||||
ccm_base = of_iomap(np, 0);
|
||||
BUG_ON(!ccm_base);
|
||||
|
||||
switch (state) {
|
||||
case PM_SUSPEND_MEM:
|
||||
/* Clear MPEN and SPEN to disable MPLL/SPLL */
|
||||
cscr = imx_readl(MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR));
|
||||
cscr = imx_readl(ccm_base);
|
||||
cscr &= 0xFFFFFFFC;
|
||||
imx_writel(cscr, MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR));
|
||||
imx_writel(cscr, ccm_base);
|
||||
/* Executes WFI */
|
||||
cpu_do_idle();
|
||||
break;
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче