summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-mx6/board-apalis_imx6.c237
-rw-r--r--arch/arm/mach-mx6/pads-apalis_imx6.h303
2 files changed, 391 insertions, 149 deletions
diff --git a/arch/arm/mach-mx6/board-apalis_imx6.c b/arch/arm/mach-mx6/board-apalis_imx6.c
index a4e76c4392d6..6fd73fe22025 100644
--- a/arch/arm/mach-mx6/board-apalis_imx6.c
+++ b/arch/arm/mach-mx6/board-apalis_imx6.c
@@ -32,6 +32,10 @@
#include <linux/spi/flash.h>
#include <linux/i2c.h>
#include <linux/ata.h>
+#ifdef TODO
+#include <linux/input/fusion_F0710A.h>
+#endif
+#include <linux/mfd/stmpe.h>
#include <linux/mtd/map.h>
#include <linux/mtd/partitions.h>
#include <linux/regulator/consumer.h>
@@ -79,12 +83,13 @@
#define GP_SD1_WP (-1)
#define GP_SD2_CD IMX_GPIO_NR(6, 14) /* Apalis SD1 */
#define GP_SD2_WP (-1)
-#define GP_ECSPI1_CS1 IMX_GPIO_NR(3, 19)
+#define GP_ECSPI1_CS1 IMX_GPIO_NR(5, 25) /* TODO muxing uses not GPIO!*/
#define GP_USB_OTG_PWR IMX_GPIO_NR(3, 22)
-#define GP_CAP_TCH_INT1 IMX_GPIO_NR(1, 9)
+#define GP_CAP_TCH_INT1 IMX_GPIO_NR(1, 9) /* TODO PCIe RESET */
#define GP_USB_PEN IMX_GPIO_NR(1, 0) /* USBH_EN */
#define GP_USB_HUB_VBUS IMX_GPIO_NR(3, 28) /* USB_VBUS_DET */
-#define GP_ENET_PHY_INT IMX_GPIO_NR(1, 28)
+#define GP_ENET_PHY_INT IMX_GPIO_NR(1, 30)
+#define STMPE811_IRQ IMX_GPIO_NR(4, 10)
#define CAN1_ERR_TEST_PADCFG (PAD_CTL_PKE | PAD_CTL_PUE | \
PAD_CTL_PUS_100K_DOWN | PAD_CTL_SPEED_MED | \
@@ -151,13 +156,14 @@ static int plt_sd_pad_change(unsigned int index, int clock)
{
/* LOW speed is the default state of SD pads */
static enum sd_pad_mode pad_mode = SD_PAD_MODE_LOW_SPEED;
- int i = (index - 1) * SD_SPEED_CNT;
+ int i = index * SD_SPEED_CNT;
+
+ printk("plt_sd_pad_change index %d, clock %d\n", index, clock);
- if ((index < 1) || (index > 3)) {
+ if (index > 3) {
printk(KERN_ERR "no such SD host controller index %d\n", index);
return -EINVAL;
}
-
if (clock > 100000000) {
if (pad_mode == SD_PAD_MODE_HIGH_SPEED)
return 0;
@@ -403,14 +409,146 @@ static struct platform_device audio_device = {
.name = "imx-sgtl5000",
};
-static struct imxi2c_platform_data i2c_data = {
- .bitrate = 100000,
+//**************************************************************************************************
+/*
+ * Fusion touch screen GPIOs (using Toradex display/touch adapater)
+ * Apalis GPIO 5, MXM-11, Ixora X27-17, pen down interrupt
+ * Apalis GPIO 6, MXM-13, Ixora X27-18, reset
+ * gpio_request muxes the GPIO function automatically, we only have to make
+ * sure input/output muxing is done and the GPIO is freed here.
+ */
+#ifdef TODO
+static int pinmux_fusion_pins(void);
+
+static struct fusion_f0710a_init_data apalis_fusion_pdata = {
+ .pinmux_fusion_pins = &pinmux_fusion_pins,
+ .gpio_int = APALIS_GPIO5, /* MXM-11, Pen down interrupt */
+ .gpio_reset = APALIS_GPIO6, /* MXM-13, Reset interrupt */
};
+static int pinmux_fusion_pins(void)
+{
+ gpio_free(apalis_fusion_pdata.gpio_int);
+ gpio_free(apalis_fusion_pdata.gpio_reset);
+ apalis_fusion_pdata.pinmux_fusion_pins = NULL;
+ return 0;
+}
+#endif
+/* I2C */
+
+/* Make sure that the pinmuxing enable the 'open drain' feature for pins used
+ for I2C */
+
+/* I2C1_SDA/SCL on MXM3 pin 209/211 (e.g. RTC on carrier board) */
static struct i2c_board_info mxc_i2c0_board_info[] __initdata = {
{
+ /* M41T0M6 real time clock on Iris carrier board */
+ I2C_BOARD_INFO("rtc-ds1307", 0x68),
+ .type = "m41t00",
+ },
+#ifdef TODO
+ {
+ /* TouchRevolution Fusion 7 and 10 multi-touch controller */
+ I2C_BOARD_INFO("fusion_F0710A", 0x10),
+ .platform_data = &apalis_fusion_pdata,
+ },
+#endif
+};
+
+/* DDC: I2C_SDA/SCL on MXM3 pin 205/207 (e.g. display EDID) */
+
+/* CAM_I2C: I2C3_SDA/SCL on MXM3 pin 201/203 (e.g. camera sensor on carrier
+ board) */
+static struct i2c_board_info mxc_i2c2_board_info[] __initdata = {
+};
+
+/* PWR_I2C: power I2C to audio codec, PMIC and touch screen controller */
+
+/* STMPE811 touch screen controller */
+static struct stmpe_ts_platform_data stmpe811_ts_data = {
+ .adc_freq = 1, /* 3.25 MHz ADC clock speed */
+ .ave_ctrl = 3, /* 8 sample average control */
+ .fraction_z = 7, /* 7 length fractional part in z */
+ .i_drive = 1, /* 50 mA typical 80 mA max touchscreen
+ drivers current limit value */
+ .mod_12b = 1, /* 12-bit ADC */
+ .ref_sel = 0, /* internal ADC reference */
+ .sample_time = 4, /* ADC converstion time: 80 clocks */
+ .settling = 3, /* 1 ms panel driver settling time */
+ .touch_det_delay = 5, /* 5 ms touch detect interrupt delay */
+};
+#ifdef TODO
+/* STMPE811 ADC controller */
+static struct stmpe_adc_platform_data stmpe811_adc_data = {
+ .sample_time = 4, /* ADC converstion time: 80 clocks */
+ .mod_12b = 1, /* 12-bit ADC */
+ .ref_sel = 0, /* internal ADC reference */
+ .adc_freq = 1, /* 3.25 MHz ADC clock speed */
+};
+#endif
+static struct stmpe_platform_data stmpe811_data = {
+ .blocks = STMPE_BLOCK_TOUCHSCREEN | STMPE_BLOCK_ADC,
+ .id = 1,
+ .irq_base = STMPE811_IRQ,
+ .irq_trigger = IRQF_TRIGGER_FALLING,
+ .ts = &stmpe811_ts_data,
+#ifdef TODO
+ .adc = &stmpe811_adc_data,
+#endif
+};
+
+static struct i2c_board_info mxc_i2c1_board_info[] __initdata = {
+ {
+ /* SGTL5000 audio codec */
I2C_BOARD_INFO("sgtl5000", 0x0a),
},
+ {
+ /* STMPE811 touch screen controller */
+ I2C_BOARD_INFO("stmpe", 0x41),
+ .flags = I2C_CLIENT_WAKE,
+ .platform_data = &stmpe811_data,
+ .type = "stmpe811",
+ },
+#if 0
+ {
+ /* PMIC */
+ I2C_BOARD_INFO("pf0100", 0x08),
+ },
+#endif
+ {
+ I2C_BOARD_INFO("mxc_hdmi_i2c", 0x50),
+ },
+};
+
+#if 0
+static void __init apalis_t30_i2c_init(void)
+{
+ tegra_i2c_device1.dev.platform_data = &apalis_t30_i2c1_platform_data;
+ tegra_i2c_device3.dev.platform_data = &apalis_t30_i2c3_platform_data;
+ tegra_i2c_device4.dev.platform_data = &apalis_t30_i2c4_platform_data;
+ tegra_i2c_device5.dev.platform_data = &apalis_t30_i2c5_platform_data;
+
+ platform_device_register(&tegra_i2c_device1);
+ platform_device_register(&tegra_i2c_device3);
+ platform_device_register(&tegra_i2c_device4);
+ platform_device_register(&tegra_i2c_device5);
+
+ i2c_register_board_info(0, apalis_t30_i2c_bus1_board_info,
+ ARRAY_SIZE(apalis_t30_i2c_bus1_board_info));
+
+ /* enable touch interrupt GPIO */
+ gpio_request(TOUCH_PEN_INT, "TOUCH_PEN_INT");
+ gpio_direction_input(TOUCH_PEN_INT);
+
+ apalis_t30_i2c_bus5_board_info[1].irq = gpio_to_irq(TOUCH_PEN_INT);
+ i2c_register_board_info(4, apalis_t30_i2c_bus5_board_info,
+ ARRAY_SIZE(apalis_t30_i2c_bus5_board_info));
+}
+#endif
+//***********************************************************************************************************************
+
+static struct imxi2c_platform_data i2c_data = {
+ .bitrate = 100000,
};
static void camera_reset(int power_gp, int poweroff_level, int reset_gp, int reset_gp2)
@@ -566,17 +704,20 @@ static struct fsl_mxc_tvin_platform_data adv7180_data = {
.csi = 1,
};
+#if 0
static struct i2c_board_info mxc_i2c1_board_info[] __initdata = {
{
I2C_BOARD_INFO("mxc_hdmi_i2c", 0x50),
},
};
-
+#endif
+#if 0
static struct fsl_mxc_lcd_platform_data adv7391_data = {
.ipu_id = 0,
.disp_id = 0,
.default_ifmt = IPU_PIX_FMT_BT656,
};
+#endif
static void usbotg_vbus(bool on)
{
@@ -586,7 +727,7 @@ static void usbotg_vbus(bool on)
gpio_set_value(GP_USB_OTG_PWR, 0);
}
-static void __init init_usb(void)
+static void __init init_usb_otg(void)
{
int ret = 0;
@@ -606,6 +747,16 @@ static void __init init_usb(void)
mx6_set_otghost_vbus_func(usbotg_vbus);
}
+static void __init init_usb_host(void)
+{
+ /* VBUS to hub on module */
+ gpio_request(GP_USB_HUB_VBUS, "USB_HUB_EN");
+ gpio_direction_output(GP_USB_HUB_VBUS, 1);
+ /* USBH Power Enable */
+ gpio_request(GP_USB_PEN, "USBH_PEN");
+ gpio_direction_output(GP_USB_PEN, 1);
+}
+
/* HW Initialization, if return 0, initialization is successful. */
static int init_sata(struct device *dev, void __iomem *addr)
{
@@ -716,29 +867,29 @@ static struct imx_asrc_platform_data imx_asrc_data = {
.clk_map_ver = 2,
};
-static struct ipuv3_fb_platform_data fb_data[] = {
- { /*fb0*/
- .disp_dev = "ldb",
- .interface_pix_fmt = IPU_PIX_FMT_RGB666,
- .mode_str = "LDB-XGA",
+static struct ipuv3_fb_platform_data fb_data[] = { {
+ /*fb0*/
+ .disp_dev = "hdmi",
+ .interface_pix_fmt = IPU_PIX_FMT_RGB24,
+ .mode_str = "EDT-WVGA",
.default_bpp = 16,
.int_clk = false,
- }, {
+ },{
.disp_dev = "lcd",
- .interface_pix_fmt = IPU_PIX_FMT_RGB565,
- .mode_str = "CLAA-WVGA",
+ .interface_pix_fmt = IPU_PIX_FMT_RGB666,
+ .mode_str = "EDT-WVGA",
.default_bpp = 16,
.int_clk = false,
}, {
.disp_dev = "ldb",
.interface_pix_fmt = IPU_PIX_FMT_RGB666,
- .mode_str = "LDB-SVGA",
+ .mode_str = "LDB-XGA",
.default_bpp = 16,
.int_clk = false,
}, {
.disp_dev = "ldb",
.interface_pix_fmt = IPU_PIX_FMT_RGB666,
- .mode_str = "LDB-VGA",
+ .mode_str = "800x480M@60",
.default_bpp = 16,
.int_clk = false,
},
@@ -775,11 +926,13 @@ static void hdmi_init(int ipu_id, int disp_id)
static void hdmi_enable_ddc_pin(void)
{
+ printk("hdmi: pinmux for EDID");
IOMUX_SETUP(hdmi_ddc_pads);
}
static void hdmi_disable_ddc_pin(void)
{
+ printk("hdmi: pinmux for PWR_I2C\n");
IOMUX_SETUP(i2c2_pads);
}
@@ -791,7 +944,7 @@ static struct fsl_mxc_hdmi_platform_data hdmi_data = {
static struct fsl_mxc_hdmi_core_platform_data hdmi_core_data = {
.ipu_id = 0,
- .disp_id = 1,
+ .disp_id = 0,
};
static void lcd_enable_pins(void)
@@ -803,7 +956,7 @@ static void lcd_enable_pins(void)
static void lcd_disable_pins(void)
{
pr_info("%s\n", __func__);
-// IOMUX_SETUP(lcd_pads_disable);
+ IOMUX_SETUP(lcd_pads_disable);
}
static void vga_dac_enable_pins(void)
@@ -819,7 +972,7 @@ static void vga_dac_disable_pins(void)
}
static struct fsl_mxc_lcd_platform_data lcdif_data = {
- .ipu_id = 1,
+ .ipu_id = 0,
.disp_id = 1,
.default_ifmt = IPU_PIX_FMT_RGB24,
.enable_pins = lcd_enable_pins,
@@ -828,7 +981,7 @@ static struct fsl_mxc_lcd_platform_data lcdif_data = {
static struct fsl_mxc_lcd_platform_data vgadacif_data = {
.ipu_id = 1,
- .disp_id = 0,
+ .disp_id = 1,
.default_ifmt = IPU_PIX_FMT_RGB565,
.enable_pins = vga_dac_enable_pins,
.disable_pins = vga_dac_disable_pins,
@@ -842,13 +995,13 @@ static struct fsl_mxc_ldb_platform_data ldb_data = {
.sec_ipu_id = 1,
.sec_disp_id = 1,
};
-
+#if 0
static struct fsl_mxc_lcd_platform_data bt656_data = {
.ipu_id = 0,
.disp_id = 0,
.default_ifmt = IPU_PIX_FMT_BT656,
};
-
+#endif
static struct imx_ipuv3_platform_data ipu_data[] = {
{
.rev = 4,
@@ -1199,6 +1352,10 @@ static const struct imx_pcie_platform_data pcie_data __initconst = {
/*!
* Board specific initialization.
*/
+#define imx6q_add_lcdif1(pdata) \
+ platform_device_register_resndata(NULL, "mxc_lcdif",\
+ 1, NULL, 0, pdata, sizeof(*pdata));
+
static void __init board_init(void)
{
int i, j;
@@ -1206,15 +1363,18 @@ static void __init board_init(void)
struct clk *clko2;
struct clk *new_parent;
int rate;
- int isn6 ;
#ifdef ONE_WIRE
int one_wire_gp;
#endif
IOMUX_SETUP(common_pads);
- lcd_disable_pins();
- //vga_dac_enable_pins();
+ IOMUX_SETUP(hdmi_ddc_pads);
+ /* setup MMC/SD pads with settings for slow clock */
+ plt_sd_pad_change(0, 400000);
+ plt_sd_pad_change(1, 400000);
+ plt_sd_pad_change(2, 400000);
- isn6 = is_nitrogen6w();
+ lcd_disable_pins();
+ vga_dac_enable_pins();
#ifdef CONFIG_FEC_1588
/* Set GPIO_16 input for IEEE-1588 ts_clk and RMII reference clock
@@ -1260,9 +1420,10 @@ static void __init board_init(void)
imx6q_add_vdoa();
imx6q_add_lcdif(&lcdif_data);
+// imx6q_add_lcdif1(&vgadacif_data);
imx6q_add_ldb(&ldb_data);
imx6q_add_v4l2_output(0);
- imx6q_add_bt656(&bt656_data);
+// imx6q_add_bt656(&bt656_data);
for (i = 0; i < ARRAY_SIZE(capture_data); i++) {
if (!cpu_is_mx6q())
@@ -1279,12 +1440,8 @@ static void __init board_init(void)
imx6q_add_imx_i2c(0, &i2c_data);
imx6q_add_imx_i2c(1, &i2c_data);
imx6q_add_imx_i2c(2, &i2c_data);
- /*
- * SABRE Lite does not have an ISL1208 RTC
- */
i2c_register_board_info(0, mxc_i2c0_board_info,
- isn6 ? ARRAY_SIZE(mxc_i2c0_board_info)
- : ARRAY_SIZE(mxc_i2c0_board_info)-1);
+ ARRAY_SIZE(mxc_i2c0_board_info));
i2c_register_board_info(1, mxc_i2c1_board_info,
ARRAY_SIZE(mxc_i2c1_board_info));
i2c_register_board_info(2, mxc_i2c2_board_info,
@@ -1302,11 +1459,12 @@ static void __init board_init(void)
imx6q_add_anatop_thermal_imx(1, &anatop_thermal_data);
imx6_init_fec(fec_data);
imx6q_add_pm_imx(0, &pm_data);
+ /* register onboard eMMC first */
+ imx6q_add_sdhci_usdhc_imx(2, &sd3_data);
imx6q_add_sdhci_usdhc_imx(0, &sd1_data);
imx6q_add_sdhci_usdhc_imx(1, &sd2_data);
- imx6q_add_sdhci_usdhc_imx(2, &sd3_data);
imx_add_viv_gpu(&imx6_gpu_data, &imx6_gpu_pdata);
- init_usb();
+ init_usb_otg();
if (cpu_is_mx6q())
imx6q_add_ahci(0, &sata_data);
imx6q_add_vpu();
@@ -1317,8 +1475,7 @@ static void __init board_init(void)
imx6q_add_asrc(&imx_asrc_data);
/* USB host */
- gpio_set_value(GP_USB_HUB_VBUS, 1);
- gpio_set_value(GP_USB_PEN, 1);
+ init_usb_host();
imx6q_add_mxc_pwm(0);
imx6q_add_mxc_pwm(1);
diff --git a/arch/arm/mach-mx6/pads-apalis_imx6.h b/arch/arm/mach-mx6/pads-apalis_imx6.h
index 9eea5fa93ec2..3e28478c13d1 100644
--- a/arch/arm/mach-mx6/pads-apalis_imx6.h
+++ b/arch/arm/mach-mx6/pads-apalis_imx6.h
@@ -14,69 +14,34 @@
#define MX6NAME(a) mx6q_##a
#endif
-#define MX6Q_USDHC_PAD_CTRL_22KPU_40OHM_50MHZ (PAD_CTL_PKE | PAD_CTL_PUE | \
- PAD_CTL_PUS_22K_UP | PAD_CTL_SPEED_LOW | \
- PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
-
-#define MX6Q_USDHC_PAD_CTRL_50MHZ MX6Q_USDHC_PAD_CTRL
-#define MX6Q_PAD_SD3_CLK__USDHC3_CLK MX6Q_PAD_SD3_CLK__USDHC3_CLK_50MHZ
-#define MX6Q_PAD_SD3_CMD__USDHC3_CMD MX6Q_PAD_SD3_CMD__USDHC3_CMD_50MHZ
-#define MX6Q_PAD_SD3_DAT0__USDHC3_DAT0 MX6Q_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ
-#define MX6Q_PAD_SD3_DAT1__USDHC3_DAT1 MX6Q_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ
-#define MX6Q_PAD_SD3_DAT2__USDHC3_DAT2 MX6Q_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ
-#define MX6Q_PAD_SD3_DAT3__USDHC3_DAT3 MX6Q_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ
-#define MX6Q_PAD_SD3_DAT4__USDHC3_DAT4 MX6Q_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ
-#define MX6Q_PAD_SD3_DAT5__USDHC3_DAT5 MX6Q_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ
-#define MX6Q_PAD_SD3_DAT6__USDHC3_DAT6 MX6Q_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ
-#define MX6Q_PAD_SD3_DAT7__USDHC3_DAT7 MX6Q_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ
-#define MX6Q_PAD_SD4_CLK__USDHC4_CLK MX6Q_PAD_SD4_CLK__USDHC4_CLK_50MHZ
-#define MX6Q_PAD_SD4_CMD__USDHC4_CMD MX6Q_PAD_SD4_CMD__USDHC4_CMD_50MHZ
-#define MX6Q_PAD_SD4_DAT0__USDHC4_DAT0 MX6Q_PAD_SD4_DAT0__USDHC4_DAT0_50MHZ
-#define MX6Q_PAD_SD4_DAT1__USDHC4_DAT1 MX6Q_PAD_SD4_DAT1__USDHC4_DAT1_50MHZ
-#define MX6Q_PAD_SD4_DAT2__USDHC4_DAT2 MX6Q_PAD_SD4_DAT2__USDHC4_DAT2_50MHZ
-#define MX6Q_PAD_SD4_DAT3__USDHC4_DAT3 MX6Q_PAD_SD4_DAT3__USDHC4_DAT3_50MHZ
-
-#define MX6DL_USDHC_PAD_CTRL_22KPU_40OHM_50MHZ MX6Q_USDHC_PAD_CTRL_22KPU_40OHM_50MHZ
-#define MX6DL_USDHC_PAD_CTRL_50MHZ MX6DL_USDHC_PAD_CTRL
-#define MX6DL_PAD_SD3_CLK__USDHC3_CLK MX6DL_PAD_SD3_CLK__USDHC3_CLK_50MHZ
-#define MX6DL_PAD_SD3_CMD__USDHC3_CMD MX6DL_PAD_SD3_CMD__USDHC3_CMD_50MHZ
-#define MX6DL_PAD_SD3_DAT0__USDHC3_DAT0 MX6DL_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ
-#define MX6DL_PAD_SD3_DAT1__USDHC3_DAT1 MX6DL_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ
-#define MX6DL_PAD_SD3_DAT2__USDHC3_DAT2 MX6DL_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ
-#define MX6DL_PAD_SD3_DAT3__USDHC3_DAT3 MX6DL_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ
-#define MX6DL_PAD_SD3_DAT4__USDHC3_DAT4 MX6DL_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ
-#define MX6DL_PAD_SD3_DAT5__USDHC3_DAT5 MX6DL_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ
-#define MX6DL_PAD_SD3_DAT6__USDHC3_DAT6 MX6DL_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ
-#define MX6DL_PAD_SD3_DAT7__USDHC3_DAT7 MX6DL_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ
-#define MX6DL_PAD_SD4_CLK__USDHC4_CLK MX6DL_PAD_SD4_CLK__USDHC4_CLK_50MHZ
-#define MX6DL_PAD_SD4_CMD__USDHC4_CMD MX6DL_PAD_SD4_CMD__USDHC4_CMD_50MHZ
-#define MX6DL_PAD_SD4_DAT0__USDHC4_DAT0 MX6DL_PAD_SD4_DAT0__USDHC4_DAT0_50MHZ
-#define MX6DL_PAD_SD4_DAT1__USDHC4_DAT1 MX6DL_PAD_SD4_DAT1__USDHC4_DAT1_50MHZ
-#define MX6DL_PAD_SD4_DAT2__USDHC4_DAT2 MX6DL_PAD_SD4_DAT2__USDHC4_DAT2_50MHZ
-#define MX6DL_PAD_SD4_DAT3__USDHC4_DAT3 MX6DL_PAD_SD4_DAT3__USDHC4_DAT3_50MHZ
-
-#define NP(id, pin, pad_ctl) \
- NEW_PAD_CTRL(MX6PAD(SD##id##_##pin##__USDHC##id##_##pin), MX6(pad_ctl))
-
-#define SD_PINS(id, pad_ctl) \
- NP(id, CLK, pad_ctl), \
- NP(id, CMD, pad_ctl), \
- NP(id, DAT0, pad_ctl), \
- NP(id, DAT1, pad_ctl), \
- NP(id, DAT2, pad_ctl), \
- NP(id, DAT3, pad_ctl)
-
-static iomux_v3_cfg_t MX6NAME(nitrogen6x_pads)[] = {
-#ifdef TODO
- NEW_PAD_CTRL(MX6PAD(NANDF_CS1__GPIO_6_14), N6_IRQ_PADCFG), /* wl1271 wl_irq */
-#endif
-
static iomux_v3_cfg_t MX6NAME(common_pads)[] = {
/* CCM */
- MX6PAD(GPIO_5__CCM_CLKO), /* local AC97 sys_mclk */
+ MX6PAD(GPIO_5__CCM_CLKO), /* I2S sys_mclk */
MX6PAD(NANDF_CS2__CCM_CLKO2), /* MXM193 CAM1_MCLK */
+ /* Apalis GPIO */
+ MX6PAD(NANDF_D4__GPIO_2_4), /* 1 */
+ MX6PAD(NANDF_D5__GPIO_2_5), /* 2 */
+ MX6PAD(NANDF_D6__GPIO_2_6), /* 3 */
+ MX6PAD(NANDF_D7__GPIO_2_7), /* 4 */
+ MX6PAD(NANDF_RB0__GPIO_6_10), /* 5 */
+ MX6PAD(NANDF_WP_B__GPIO_6_9), /* 6 */
+ MX6PAD(GPIO_2__GPIO_1_2), /* 7 */
+ MX6PAD(GPIO_6__GPIO_1_6), /* 8 */
+
+ /* Apalis SPI1, ECSPI1 */
+ MX6PAD(CSI0_DAT6__ECSPI1_MISO),
+ MX6PAD(CSI0_DAT5__ECSPI1_MOSI),
+ MX6PAD(CSI0_DAT4__ECSPI1_SCLK),
+ MX6PAD(CSI0_DAT7__ECSPI1_SS0),
+
+ /* Apalis SPI2, ECSPI2 */
+ MX6PAD(EIM_CS1__ECSPI2_MOSI),
+ MX6PAD(EIM_CS0__ECSPI2_SCLK),
+ MX6PAD(EIM_OE__ECSPI2_MISO),
+ MX6PAD(EIM_RW__ECSPI2_SS0),
+
/* ENET */
MX6PAD(ENET_MDIO__ENET_MDIO),
MX6PAD(ENET_MDC__ENET_MDC),
@@ -136,8 +101,8 @@ static iomux_v3_cfg_t MX6NAME(common_pads)[] = {
MX6PAD(EIM_DA12__IPU1_CSI1_VSYNC), /* GPIO3[12] */
MX6PAD(EIM_A16__IPU1_CSI1_PIXCLK), /* GPIO2[22] */
#else
- MX6PAD(EIM_EB2__IPU2_CSI1_D_19), /* GPIO2[30] */
#ifdef TODO
+ MX6PAD(EIM_EB2__IPU2_CSI1_D_19), /* GPIO2[30] */
MX6PAD(EIM_A23__IPU2_CSI1_D_18), /* GPIO6[6] */
MX6PAD(EIM_A22__IPU2_CSI1_D_17), /* GPIO2[16] */
MX6PAD(EIM_A21__IPU2_CSI1_D_16), /* GPIO2[17] */
@@ -163,33 +128,50 @@ static iomux_v3_cfg_t MX6NAME(common_pads)[] = {
MX6PAD(EIM_A16__IPU2_CSI1_PIXCLK), /* GPIO2[22] */
#endif
#endif
- MX6PAD(EIM_DA13__GPIO_3_13), /* Power */
- MX6PAD(EIM_DA14__GPIO_3_14), /* Reset */
- MX6PAD(EIM_WAIT__GPIO_5_0), /* Irq */
+ MX6PAD(EIM_DA13__GPIO_3_13), /* BKL1_ON */
+ MX6PAD(EIM_DA14__GPIO_3_14), /* BKL1_PWM */
+ MX6PAD(EIM_A25__GPIO_5_2), /* BKL1_PWM_EN */
+ MX6PAD(EIM_BCLK__GPIO_6_31), /* VGA_PSAVE# */
+
+ MX6PAD(KEY_ROW2__HDMI_TX_CEC_LINE), /* HDMI CEC */
+
+ MX6PAD(EIM_WAIT__GPIO_5_0), /* TS_6 */
#ifdef TODO
MX6PAD(EIM_A24__GPIO_5_4), /* Field */
#endif
- MX6PAD(EIM_RW__GPIO_2_26), /* GPIO2[26] - unused */
- MX6PAD(EIM_LBA__GPIO_2_27), /* GPIO2[27] - unused */
+ MX6PAD(EIM_LBA__GPIO_2_27), /* DAP1_RESET */
#ifdef TODO
MX6PAD(EIM_EB3__GPIO_2_31), /* GPIO2[31] - unused */
#endif
- MX6PAD(EIM_DA15__GPIO_3_15), /* GPIO3[15] - unused */
+ MX6PAD(EIM_DA15__GPIO_3_15), /* SATA1_ACT# */
/* NANDF_CS1/2/3 are unused for sabrelite */
- NEW_PAD_CTRL(MX6PAD(NANDF_CS1__GPIO_6_14), N6_IRQ_TEST_PADCFG), /* wl1271 wl_irq */
- NEW_PAD_CTRL(MX6PAD(NANDF_CS3__GPIO_6_16), N6_EN_PADCFG), /* wl1271 bt_en */
+ MX6PAD(NANDF_CS1__GPIO_6_14), /* SD1_CD# */
+ MX6PAD(NANDF_CS3__GPIO_6_16), /* TS_DIFF6- */
- /* GPIO7 */
- MX6PAD(GPIO_17__GPIO_7_12), /* USB Hub Reset */
- MX6PAD(GPIO_18__GPIO_7_13), /* J14 - Volume Up */
+ MX6PAD(GPIO_16__SPDIF_IN1), /* SPDIF1_IN */
+ MX6PAD(GPIO_17__SPDIF_OUT1), /* SPDIF1_OUT */
+ MX6PAD(GPIO_18__GPIO_7_13), /* PWR_INT */
+ MX6PAD(DI0_PIN4__GPIO_4_20), /* MMC1_CD# */
- /* DISPLAY */
- NEW_PAD_CTRL(MX6PAD(DI0_PIN4__GPIO_4_20),
- WEAK_PULLUP), /* I2C Touch IRQ */
- MX6PAD(GPIO_7__GPIO_1_7), /* J7 - Display Connector GP */
- MX6PAD(GPIO_9__GPIO_1_9), /* J7 - Display Connector GP */
+ /* Apalis CAN1 */
+ MX6PAD(GPIO_7__CAN1_TXCAN),
+ MX6PAD(GPIO_8__CAN1_RXCAN),
+ /* Apalis CAN2 */
+ MX6PAD(KEY_ROW4__CAN2_RXCAN),
+ MX6PAD(KEY_COL4__CAN2_TXCAN),
+#ifdef TODO
+ MX6PAD(GPIO_2__GPIO_1_2), /* STNDBY */
+ MX6PAD(GPIO_7__GPIO_1_7), /* NERR */
+ NEW_PAD_CTRL(MX6PAD(GPIO_7__GPIO_1_7), CAN1_ERR_TEST_PADCFG),
+ MX6PAD(GPIO_4__GPIO_1_4), /* Enable */
+#endif
+
+ MX6PAD(GPIO_9__PWM1_PWMO), /* PWM1 */
+ MX6PAD(GPIO_1__PWM2_PWMO), /* PWM2 */
+ MX6PAD(SD4_DAT1__PWM3_PWMO), /* PWM3 */
+ MX6PAD(SD4_DAT2__PWM4_PWMO), /* PWM4 */
#ifdef TODO
MX6PAD(NANDF_D0__GPIO_2_0), /* J6 - LVDS Display contrast */
#endif
@@ -208,7 +190,7 @@ static iomux_v3_cfg_t MX6NAME(common_pads)[] = {
MX6PAD(SD1_CMD__PWM4_PWMO), /* GPIO1[18] */
#endif
/* RTC ISL1208 irq*/
- MX6PAD(NANDF_CLE__GPIO_6_7),
+ MX6PAD(NANDF_CLE__GPIO_6_7), /* TS_DIFF5- */
/* Apalis UART1 */
MX6PAD(CSI0_DAT10__UART1_TXD),
@@ -234,33 +216,62 @@ static iomux_v3_cfg_t MX6NAME(common_pads)[] = {
MX6PAD(KEY_COL1__UART5_TXD),
MX6PAD(KEY_ROW1__UART5_RXD),
- /* Apalis, AUDMUX, local AC97 */
- MX6PAD(DISP0_DAT23__AUDMUX_AUD4_RXD),
+ /* Apalis, AUDMUX, local I2S */
MX6PAD(DISP0_DAT20__AUDMUX_AUD4_TXC),
MX6PAD(DISP0_DAT21__AUDMUX_AUD4_TXD),
MX6PAD(DISP0_DAT22__AUDMUX_AUD4_TXFS),
- /* Apalis MMC1 */
- SD_PINS(1, USDHC_PAD_CTRL_22KPU_40OHM_50MHZ),
- NEW_PAD_CTRL(MX6PAD(NANDF_D0__USDHC1_DAT4), MX6(USDHC_PAD_CTRL_22KPU_40OHM_50MHZ)),
- NEW_PAD_CTRL(MX6PAD(NANDF_D1__USDHC1_DAT5), MX6(USDHC_PAD_CTRL_22KPU_40OHM_50MHZ)),
- NEW_PAD_CTRL(MX6PAD(NANDF_D2__USDHC1_DAT6), MX6(USDHC_PAD_CTRL_22KPU_40OHM_50MHZ)),
- NEW_PAD_CTRL(MX6PAD(NANDF_D3__USDHC1_DAT7), MX6(USDHC_PAD_CTRL_22KPU_40OHM_50MHZ)),
- /* Apalis SD1 */
- SD_PINS(2, USDHC_PAD_CTRL_22KPU_40OHM_50MHZ),
- /* Apalis eMMC */
- SD_PINS(3, USDHC_PAD_CTRL_22KPU_40OHM_50MHZ),
- NEW_PAD_CTRL(MX6PAD(SD3_DAT4__USDHC3_DAT4), MX6(USDHC_PAD_CTRL_22KPU_40OHM_50MHZ)),
- NEW_PAD_CTRL(MX6PAD(SD3_DAT5__USDHC3_DAT5), MX6(USDHC_PAD_CTRL_22KPU_40OHM_50MHZ)),
- NEW_PAD_CTRL(MX6PAD(SD3_DAT6__USDHC3_DAT6), MX6(USDHC_PAD_CTRL_22KPU_40OHM_50MHZ)),
- NEW_PAD_CTRL(MX6PAD(SD3_DAT7__USDHC3_DAT7), MX6(USDHC_PAD_CTRL_22KPU_40OHM_50MHZ)),
- MX6PAD(SD3_RST__USDHC3_RST),
+ MX6PAD(DISP0_DAT23__AUDMUX_AUD4_RXD),
/* USBOTG ID pin */
MX6PAD(ENET_RX_ER__ANATOP_USBOTG_ID),
+ /* USBOTG USB_VBUS_DET to internal HUB pin */
+ MX6PAD(EIM_D28__GPIO_3_28),
+ /* USB OTG OC pin */
+ MX6PAD(EIM_D21__USBOH3_USBOTG_OC),
+ /* USBOTG Power Enable */
+ MX6PAD(EIM_D22__GPIO_3_22),
+ /* USBH Power Enable */
+ MX6PAD(GPIO_0__GPIO_1_0), /*GPIO_0__USBOH3_USBH1_PWR*/
/* USB OC pin */
- MX6PAD(EIM_D21__USBOH3_USBOTG_OC),
MX6PAD(GPIO_3__USBOH3_USBH1_OC),
+
+ /* Apalis I2C1, i.MX I2C1*/
+ MX6PAD(CSI0_DAT9__I2C1_SCL),
+ MX6PAD(CSI0_DAT8__I2C1_SDA),
+
+ /* Apalis I2C3 (CAM), i.MX I2C3 */
+ MX6PAD(EIM_D17__I2C3_SCL),
+ MX6PAD(EIM_D18__I2C3_SDA),
+
+ /* Touch Int */
+ MX6PAD(KEY_COL2__GPIO_4_10),
+ 0
+};
+
+/* Apalis I2C2 (DDC) */
+#define DDC_USE_I2C2
+static iomux_v3_cfg_t MX6NAME(hdmi_ddc_pads)[] = {
+#ifdef DDC_USE_I2C2
+ MX6PAD(KEY_COL3__GPIO_4_12), /* I2C2 SCL */
+ MX6PAD(KEY_ROW3__GPIO_4_13), /* I2C2 SDA */
+ MX6PAD(EIM_EB2__I2C2_SCL), /* HDMI DDC SCL */
+ MX6PAD(EIM_D16__I2C2_SDA), /* HDMI DDC SDA */
+#else
+ MX6PAD(EIM_EB2__HDMI_TX_DDC_SCL), /* HDMI DDC SCL */
+ MX6PAD(EIM_D16__HDMI_TX_DDC_SDA), /* HDMI DDC SDA */
+#endif
+ 0
+};
+
+/* Apalis power I2C, i.MX I2C2*/
+static iomux_v3_cfg_t MX6NAME(i2c2_pads)[] = {
+#ifdef DDC_USE_I2C2
+ MX6PAD(EIM_EB2__HDMI_TX_DDC_SCL), /* HDMI DDC SCL */
+ MX6PAD(EIM_D16__HDMI_TX_DDC_SDA), /* HDMI DDC SDA */
+#endif
+ MX6PAD(KEY_COL3__I2C2_SCL), /* I2C2 SCL */
+ MX6PAD(KEY_ROW3__I2C2_SDA), /* I2C2 SDA */
0
};
@@ -335,6 +346,7 @@ static iomux_v3_cfg_t MX6NAME(vga_dac_enable)[] = {
MX6PAD(DI0_DISP_CLK__IPU1_DI0_DISP_CLK),
MX6PAD(DI0_PIN2__IPU1_DI0_PIN2), /* HSync */
MX6PAD(DI0_PIN3__IPU1_DI0_PIN3), /* VSync */
+ MX6PAD(DI0_PIN15__IPU1_DI0_PIN15), /* DE */
MX6PAD(DISP0_DAT0__IPU1_DISP0_DAT_0),
MX6PAD(DISP0_DAT1__IPU1_DISP0_DAT_1),
MX6PAD(DISP0_DAT2__IPU1_DISP0_DAT_2),
@@ -356,6 +368,7 @@ static iomux_v3_cfg_t MX6NAME(vga_dac_enable)[] = {
MX6PAD(DI0_DISP_CLK__IPU2_DI0_DISP_CLK),
MX6PAD(DI0_PIN2__IPU2_DI0_PIN2), /* HSync */
MX6PAD(DI0_PIN3__IPU2_DI0_PIN3), /* VSync */
+ MX6PAD(DI0_PIN15__IPU2_DI0_PIN15), /* DE */
MX6PAD(DISP0_DAT0__IPU2_DISP0_DAT_0),
MX6PAD(DISP0_DAT1__IPU2_DISP0_DAT_1),
MX6PAD(DISP0_DAT2__IPU2_DISP0_DAT_2),
@@ -380,6 +393,7 @@ static iomux_v3_cfg_t MX6NAME(vga_dac_disable)[] = {
MX6PAD(DI0_DISP_CLK__GPIO_4_16),
MX6PAD(DI0_PIN2__GPIO_4_18), /* HSync */
MX6PAD(DI0_PIN3__GPIO_4_19), /* VSync */
+ MX6PAD(DI0_PIN15__GPIO_4_17), /* DE */
MX6PAD(DISP0_DAT0__GPIO_4_21),
MX6PAD(DISP0_DAT1__GPIO_4_22),
MX6PAD(DISP0_DAT2__GPIO_4_23),
@@ -436,29 +450,97 @@ static iomux_v3_cfg_t MX6NAME(csi0_sensor_pads)[] = {
};
#endif
-static iomux_v3_cfg_t MX6NAME(hdmi_ddc_pads)[] = {
- MX6PAD(KEY_COL3__HDMI_TX_DDC_SCL), /* HDMI DDC SCL */
- MX6PAD(KEY_ROW3__HDMI_TX_DDC_SDA), /* HDMI DDC SDA */
- 0
-};
-/* TODO fix that i2c mess */
-static iomux_v3_cfg_t MX6NAME(i2c2_pads)[] = {
-#ifdef TODO
- MX6PAD(KEY_COL3__I2C2_SCL), /* I2C2 SCL */
- MX6PAD(KEY_ROW3__I2C2_SDA), /* I2C2 SDA */
-#endif
- 0
-};
-
#ifdef TODO
static iomux_v3_cfg_t MX6NAME(mc33902_flexcan_pads)[] = {
NEW_PAD_CTRL(MX6PAD(GPIO_7__GPIO_1_7), CAN1_ERR_PADCFG),
0
};
#endif
+
+/* MMC / SD Cards */
+#define MX6Q_USDHC_PAD_CTRL_22KPU_40OHM_50MHZ (PAD_CTL_PKE | PAD_CTL_PUE | \
+ PAD_CTL_PUS_22K_UP | PAD_CTL_SPEED_LOW | \
+ PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
+
+#define MX6Q_USDHC_PAD_CTRL_50MHZ MX6Q_USDHC_PAD_CTRL
+#define MX6Q_PAD_SD3_CLK__USDHC3_CLK MX6Q_PAD_SD3_CLK__USDHC3_CLK_50MHZ
+#define MX6Q_PAD_SD3_CMD__USDHC3_CMD MX6Q_PAD_SD3_CMD__USDHC3_CMD_50MHZ
+#define MX6Q_PAD_SD3_DAT0__USDHC3_DAT0 MX6Q_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ
+#define MX6Q_PAD_SD3_DAT1__USDHC3_DAT1 MX6Q_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ
+#define MX6Q_PAD_SD3_DAT2__USDHC3_DAT2 MX6Q_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ
+#define MX6Q_PAD_SD3_DAT3__USDHC3_DAT3 MX6Q_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ
+#define MX6Q_PAD_SD3_DAT4__USDHC3_DAT4 MX6Q_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ
+#define MX6Q_PAD_SD3_DAT5__USDHC3_DAT5 MX6Q_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ
+#define MX6Q_PAD_SD3_DAT6__USDHC3_DAT6 MX6Q_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ
+#define MX6Q_PAD_SD3_DAT7__USDHC3_DAT7 MX6Q_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ
+#define MX6Q_PAD_SD4_CLK__USDHC4_CLK MX6Q_PAD_SD4_CLK__USDHC4_CLK_50MHZ
+#define MX6Q_PAD_SD4_CMD__USDHC4_CMD MX6Q_PAD_SD4_CMD__USDHC4_CMD_50MHZ
+#define MX6Q_PAD_SD4_DAT0__USDHC4_DAT0 MX6Q_PAD_SD4_DAT0__USDHC4_DAT0_50MHZ
+#define MX6Q_PAD_SD4_DAT1__USDHC4_DAT1 MX6Q_PAD_SD4_DAT1__USDHC4_DAT1_50MHZ
+#define MX6Q_PAD_SD4_DAT2__USDHC4_DAT2 MX6Q_PAD_SD4_DAT2__USDHC4_DAT2_50MHZ
+#define MX6Q_PAD_SD4_DAT3__USDHC4_DAT3 MX6Q_PAD_SD4_DAT3__USDHC4_DAT3_50MHZ
+
+#define MX6DL_USDHC_PAD_CTRL_22KPU_40OHM_50MHZ MX6Q_USDHC_PAD_CTRL_22KPU_40OHM_50MHZ
+#define MX6DL_USDHC_PAD_CTRL_50MHZ MX6DL_USDHC_PAD_CTRL
+#define MX6DL_PAD_SD3_CLK__USDHC3_CLK MX6DL_PAD_SD3_CLK__USDHC3_CLK_50MHZ
+#define MX6DL_PAD_SD3_CMD__USDHC3_CMD MX6DL_PAD_SD3_CMD__USDHC3_CMD_50MHZ
+#define MX6DL_PAD_SD3_DAT0__USDHC3_DAT0 MX6DL_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ
+#define MX6DL_PAD_SD3_DAT1__USDHC3_DAT1 MX6DL_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ
+#define MX6DL_PAD_SD3_DAT2__USDHC3_DAT2 MX6DL_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ
+#define MX6DL_PAD_SD3_DAT3__USDHC3_DAT3 MX6DL_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ
+#define MX6DL_PAD_SD3_DAT4__USDHC3_DAT4 MX6DL_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ
+#define MX6DL_PAD_SD3_DAT5__USDHC3_DAT5 MX6DL_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ
+#define MX6DL_PAD_SD3_DAT6__USDHC3_DAT6 MX6DL_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ
+#define MX6DL_PAD_SD3_DAT7__USDHC3_DAT7 MX6DL_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ
+#define MX6DL_PAD_SD4_CLK__USDHC4_CLK MX6DL_PAD_SD4_CLK__USDHC4_CLK_50MHZ
+#define MX6DL_PAD_SD4_CMD__USDHC4_CMD MX6DL_PAD_SD4_CMD__USDHC4_CMD_50MHZ
+#define MX6DL_PAD_SD4_DAT0__USDHC4_DAT0 MX6DL_PAD_SD4_DAT0__USDHC4_DAT0_50MHZ
+#define MX6DL_PAD_SD4_DAT1__USDHC4_DAT1 MX6DL_PAD_SD4_DAT1__USDHC4_DAT1_50MHZ
+#define MX6DL_PAD_SD4_DAT2__USDHC4_DAT2 MX6DL_PAD_SD4_DAT2__USDHC4_DAT2_50MHZ
+#define MX6DL_PAD_SD4_DAT3__USDHC4_DAT3 MX6DL_PAD_SD4_DAT3__USDHC4_DAT3_50MHZ
+
+#define NP(id, pin, pad_ctl) \
+ NEW_PAD_CTRL(MX6PAD(SD##id##_##pin##__USDHC##id##_##pin), MX6(pad_ctl))
+
+#define SD_PINS(id, pad_ctl) \
+ NP(id, CLK, pad_ctl), \
+ NP(id, CMD, pad_ctl), \
+ NP(id, DAT0, pad_ctl), \
+ NP(id, DAT1, pad_ctl), \
+ NP(id, DAT2, pad_ctl), \
+ NP(id, DAT3, pad_ctl)
+
+/* Apalis MMC1 */
+#define SD_PINS1(pad_ctl) \
+ SD_PINS(1, pad_ctl), \
+ NEW_PAD_CTRL(MX6PAD(NANDF_D0__USDHC1_DAT4), MX6(pad_ctl)), \
+ NEW_PAD_CTRL(MX6PAD(NANDF_D1__USDHC1_DAT5), MX6(pad_ctl)), \
+ NEW_PAD_CTRL(MX6PAD(NANDF_D2__USDHC1_DAT6), MX6(pad_ctl)), \
+ NEW_PAD_CTRL(MX6PAD(NANDF_D3__USDHC1_DAT7), MX6(pad_ctl))
+
+/* Apalis SD1 */
+#define SD_PINS2(pad_ctl) \
+ SD_PINS(2, pad_ctl)
+
+/* Apalis eMMC */
+#define SD_PINS3(pad_ctl) \
+ SD_PINS(3, pad_ctl), \
+ NEW_PAD_CTRL(MX6PAD(SD3_DAT4__USDHC3_DAT4), MX6(pad_ctl)), \
+ NEW_PAD_CTRL(MX6PAD(SD3_DAT5__USDHC3_DAT5), MX6(pad_ctl)), \
+ NEW_PAD_CTRL(MX6PAD(SD3_DAT6__USDHC3_DAT6), MX6(pad_ctl)), \
+ NEW_PAD_CTRL(MX6PAD(SD3_DAT7__USDHC3_DAT7), MX6(pad_ctl)), \
+ MX6PAD(SD3_RST__USDHC3_RST)
+
+/* not in default pinmuxing, pins partly used for UART2 & PWM */
+#define SD_PINS4(pad_ctl) \
+ SD_PINS(4, pad_ctl)
+
#define MX6_USDHC_PAD_SETTING(id, speed, pad_ctl) \
- MX6NAME(sd##id##_##speed##mhz)[] = { SD_PINS(id, pad_ctl), 0 }
+ MX6NAME(sd##id##_##speed##mhz)[] = { SD_PINS##id(pad_ctl), 0 }
+static iomux_v3_cfg_t MX6_USDHC_PAD_SETTING(1, 50, USDHC_PAD_CTRL_22KPU_40OHM_50MHZ);
+static iomux_v3_cfg_t MX6_USDHC_PAD_SETTING(1, 100, USDHC_PAD_CTRL_100MHZ);
+static iomux_v3_cfg_t MX6_USDHC_PAD_SETTING(1, 200, USDHC_PAD_CTRL_200MHZ);
static iomux_v3_cfg_t MX6_USDHC_PAD_SETTING(2, 50, USDHC_PAD_CTRL_22KPU_40OHM_50MHZ);
static iomux_v3_cfg_t MX6_USDHC_PAD_SETTING(2, 100, USDHC_PAD_CTRL_100MHZ);
static iomux_v3_cfg_t MX6_USDHC_PAD_SETTING(2, 200, USDHC_PAD_CTRL_200MHZ);
@@ -475,6 +557,9 @@ static iomux_v3_cfg_t MX6_USDHC_PAD_SETTING(4, 200, USDHC_PAD_CTRL_200MHZ);
#define SD_SPEED_CNT 3
static iomux_v3_cfg_t * MX6NAME(sd_pads)[] =
{
+ MX6NAME(sd1_50mhz),
+ MX6NAME(sd1_100mhz),
+ MX6NAME(sd1_200mhz),
MX6NAME(sd2_50mhz),
MX6NAME(sd2_100mhz),
MX6NAME(sd2_200mhz),