]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00262502-1 [MX6Q/MX6DLS]Add commandline option to route enet irq to gpio
authorRanjani Vaidyanathan <ra5478@freescale.com>
Tue, 9 Jul 2013 21:11:31 +0000 (16:11 -0500)
committerOliver Wendt <ow@karo-electronics.de>
Mon, 30 Sep 2013 12:14:13 +0000 (14:14 +0200)
Add a command line option to route the ENET interrupts to the GPIO_1_6.
To route the ENET interrupts to GPIO_6 add "enet_gpio_6" to the
kernel command line.

Also remove the CONFIG option (MX6_ENET_IRQ_TO_GPIO).

This commit should be applied on top of following commits:
72c86f0b9a953e91bb1ed31021b71f337050bc28
808863866d2c17aeb3e70a7fcd094bd96db4b601
bae4d40849f3acdd9663f5a0857c9415ed7e6d5d

Signed-off-by: Ranjani Vaidyanathan <ra5478@freescale.com>
16 files changed:
arch/arm/configs/imx6_defconfig
arch/arm/mach-mx6/Kconfig
arch/arm/mach-mx6/board-mx6dl_arm2.h
arch/arm/mach-mx6/board-mx6dl_sabresd.h
arch/arm/mach-mx6/board-mx6q_arm2.c
arch/arm/mach-mx6/board-mx6q_arm2.h
arch/arm/mach-mx6/board-mx6q_sabreauto.c
arch/arm/mach-mx6/board-mx6q_sabreauto.h
arch/arm/mach-mx6/board-mx6q_sabrelite.c
arch/arm/mach-mx6/board-mx6q_sabresd.c
arch/arm/mach-mx6/board-mx6q_sabresd.h
arch/arm/mach-mx6/board-mx6solo_sabreauto.h
arch/arm/mach-mx6/clock.c
arch/arm/mach-mx6/cpu.c
arch/arm/plat-mxc/include/mach/iomux-mx6dl.h
arch/arm/plat-mxc/include/mach/iomux-mx6q.h

index 5ad4a002676df94472903a909fcb5c9219ae5742..fc897eddcfa3b5b942836ce14f26c859a50f6c4d 100644 (file)
@@ -331,7 +331,6 @@ CONFIG_ARCH_MXC_AUDMUX_V2=y
 CONFIG_IRAM_ALLOC=y
 CONFIG_CLK_DEBUG=y
 CONFIG_DMA_ZONE_SIZE=184
-#CONFIG_MX6_ENET_IRQ_TO_GPIO is not set
 
 #
 # System MMU
index e567f67fa901424737a76fdc259b1bf8f1c953c5..64ce4d4ac71dd1c5951bb58e6200dd2643199d92 100644 (file)
@@ -332,13 +332,6 @@ config MACH_IMX_BLUETOOTH_RFKILL
        ---help---
        Say Y to get the standard rfkill interface of Bluetooth
 
-config MX6_ENET_IRQ_TO_GPIO
-       bool "Route ENET interrupts to GPIO"
-       default n
-       help
-          Enabling this will direct all the ENET interrupts to a board specific GPIO.
-          This will allow the system to enter WAIT mode when ENET is active.
-
 config SDMA_IRAM
        bool "Use Internal RAM for SDMA data structures"
        depends on IMX_SDMA && SOC_IMX6SL
index dd7e66588785e55585c6f4c75d5a5088620d0e98..f4560e4a0d7458304a24895db01a95c2575e76ed 100644 (file)
@@ -182,16 +182,7 @@ static iomux_v3_cfg_t mx6dl_arm2_pads[] = {
 
        /* USBOTG ID pin */
        MX6DL_PAD_GPIO_1__USBOTG_ID,
-
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       MX6DL_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1,
-#else
-       /* MLB150 */
-       MX6DL_PAD_GPIO_3__MLB_MLBCLK,
-       MX6DL_PAD_GPIO_6__MLB_MLBSIG,
-       MX6DL_PAD_GPIO_2__MLB_MLBDAT,
-#endif
-};
+ };
 
 static iomux_v3_cfg_t mx6dl_arm2_epdc_pads[] = {
        MX6DL_PAD_EIM_A17__GPIO_2_21,
index 4e2d322fe2a939491999b75e519481b9d660daa1..7cb69246a8240d98e9bc712d2ee24a579c56a652 100644 (file)
@@ -64,13 +64,8 @@ static iomux_v3_cfg_t mx6dl_sabresd_pads[] = {
        MX6DL_PAD_KEY_COL3__I2C2_SCL,
        MX6DL_PAD_KEY_ROW3__I2C2_SDA,
 
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       MX6DL_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1,
-#else
        /* I2C3 */
        MX6DL_PAD_GPIO_3__I2C3_SCL,
-       MX6DL_PAD_GPIO_6__I2C3_SDA,
-#endif
 
        /* DISPLAY */
        MX6DL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK,
index 0fcf9959620437ec8697ecfe2d9273619f22bff1..828080565cd365ce2087eed73e4a2233c05aa778 100644 (file)
 
 #define MX6_ARM2_CAN2_STBY             MX6_ARM2_IO_EXP_GPIO2(1)
 
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
 #define MX6_ENET_IRQ           IMX_GPIO_NR(1, 6)
 #define IOMUX_OBSRV_MUX1_OFFSET        0x3c
 #define OBSRV_MUX1_MASK                        0x3f
 #define OBSRV_MUX1_ENET_IRQ            0x9
-#endif
 
 #define BMCR_PDOWN                     0x0800 /* PHY Powerdown */
 
@@ -179,6 +177,7 @@ extern char *gp_reg_id;
 extern char *soc_reg_id;
 extern char *pu_reg_id;
 extern int epdc_enabled;
+extern bool enet_to_gpio_6;
 static int max17135_regulator_init(struct max17135 *max17135);
 
 enum sd_pad_mode {
@@ -393,9 +392,7 @@ static struct fec_platform_data fec_data __initdata = {
        .init                   = mx6_arm2_fec_phy_init,
        .power_hibernate        = mx6_arm2_fec_power_hibernate,
        .phy                    = PHY_INTERFACE_MODE_RGMII,
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
        .gpio_irq = MX6_ENET_IRQ,
-#endif
 };
 
 static int mx6_arm2_spi_cs[] = {
@@ -2056,6 +2053,18 @@ static void __init mx6_arm2_init(void)
                spdif_pads_cnt =  ARRAY_SIZE(mx6q_arm2_spdif_pads);
                flexcan_pads_cnt = ARRAY_SIZE(mx6q_arm2_can_pads);
                i2c3_pads_cnt = ARRAY_SIZE(mx6q_arm2_i2c3_pads);
+               if (enet_to_gpio_6) {
+                       iomux_v3_cfg_t enet_gpio_pad =
+                               MX6Q_PAD_GPIO_6__ENET_IRQ_TO_GPIO_6;
+                       mxc_iomux_v3_setup_pad(enet_gpio_pad);
+               } else {
+                       iomux_v3_cfg_t mlb_pads[] = {
+                               MX6Q_PAD_GPIO_3__MLB_MLBCLK,
+                               MX6Q_PAD_GPIO_6__MLB_MLBSIG,
+                               MX6Q_PAD_GPIO_2__MLB_MLBDAT};
+                       mxc_iomux_v3_setup_multiple_pads(mlb_pads,
+                               ARRAY_SIZE(mlb_pads));
+               }
        } else if (cpu_is_mx6dl()) {
                common_pads = mx6dl_arm2_pads;
                esai_rec_pads = mx6dl_arm2_esai_record_pads;
@@ -2070,6 +2079,18 @@ static void __init mx6_arm2_init(void)
                flexcan_pads_cnt = ARRAY_SIZE(mx6dl_arm2_can_pads);
                i2c3_pads_cnt = ARRAY_SIZE(mx6dl_arm2_i2c3_pads);
                epdc_pads_cnt = ARRAY_SIZE(mx6dl_arm2_epdc_pads);
+               if (enet_to_gpio_6) {
+                       iomux_v3_cfg_t enet_gpio_pad =
+                               MX6DL_PAD_GPIO_6__ENET_IRQ_TO_GPIO_6;
+                       mxc_iomux_v3_setup_pad(enet_gpio_pad);
+               } else {
+                       iomux_v3_cfg_t mlb_pads[] = {
+                               MX6DL_PAD_GPIO_3__MLB_MLBCLK,
+                               MX6DL_PAD_GPIO_6__MLB_MLBSIG,
+                               MX6DL_PAD_GPIO_2__MLB_MLBDAT};
+                       mxc_iomux_v3_setup_multiple_pads(mlb_pads,
+                               ARRAY_SIZE(mlb_pads));
+               }
        }
 
        BUG_ON(!common_pads);
@@ -2181,12 +2202,15 @@ static void __init mx6_arm2_init(void)
        imx6q_add_anatop_thermal_imx(1, &mx6_arm2_anatop_thermal_data);
 
        if (!esai_record) {
+               if (enet_to_gpio_6)
+                       /* Make sure the IOMUX_OBSRV_MUX1 is set to ENET_IRQ. */
+                       mxc_iomux_set_specialbits_register(
+                               IOMUX_OBSRV_MUX1_OFFSET,
+                               OBSRV_MUX1_ENET_IRQ,
+                               OBSRV_MUX1_MASK);
+               else
+                       fec_data.gpio_irq = -1;
                imx6_init_fec(fec_data);
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       /* Make sure the IOMUX_OBSRV_MUX1 is set to ENET_IRQ. */
-       mxc_iomux_set_specialbits_register(IOMUX_OBSRV_MUX1_OFFSET,
-               OBSRV_MUX1_ENET_IRQ, OBSRV_MUX1_MASK);
-#endif
        }
 
        imx6q_add_pm_imx(0, &mx6_arm2_pm_data);
index 2a6a2052b3f907a2a21b7a82e55685697f4f7f90..24a894fab905af2498c3647040968e3c9604cc1b 100644 (file)
@@ -182,16 +182,7 @@ static iomux_v3_cfg_t mx6q_arm2_pads[] = {
 
        /* USBOTG ID pin */
        MX6Q_PAD_GPIO_1__USBOTG_ID,
-
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       MX6Q_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1,
-#else
-       /* MLB150 */
-       MX6Q_PAD_GPIO_3__MLB_MLBCLK,
-       MX6Q_PAD_GPIO_6__MLB_MLBSIG,
-       MX6Q_PAD_GPIO_2__MLB_MLBDAT,
-#endif
-};
+ };
 
 static iomux_v3_cfg_t mx6q_arm2_i2c3_pads[] = {
        MX6Q_PAD_GPIO_5__I2C3_SCL,
index 5e0ed0d1f99bc8538483f2a91032d710a6328837..e1df8723146cad8396611bb0be13a3e88aeacbe2 100644 (file)
 #define SABREAUTO_MAX7310_2_BASE_ADDR  IMX_GPIO_NR(8, 8)
 #define SABREAUTO_MAX7310_3_BASE_ADDR  IMX_GPIO_NR(8, 16)
 
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
 #define MX6_ENET_IRQ           IMX_GPIO_NR(1, 6)
 #define IOMUX_OBSRV_MUX1_OFFSET        0x3c
 #define OBSRV_MUX1_MASK                        0x3f
 #define OBSRV_MUX1_ENET_IRQ            0x9
-#endif
 
 #define SABREAUTO_IO_EXP_GPIO1(x)      (SABREAUTO_MAX7310_1_BASE_ADDR + (x))
 #define SABREAUTO_IO_EXP_GPIO2(x)      (SABREAUTO_MAX7310_2_BASE_ADDR + (x))
 extern char *gp_reg_id;
 extern char *soc_reg_id;
 extern char *pu_reg_id;
+extern bool enet_to_gpio_6;
 
 static int mma8451_position = 3;
 static int mag3110_position = 2;
@@ -411,9 +410,7 @@ static struct fec_platform_data fec_data __initdata = {
        .init                   = mx6q_sabreauto_fec_phy_init,
        .power_hibernate        = mx6q_sabreauto_fec_power_hibernate,
        .phy                    = PHY_INTERFACE_MODE_RGMII,
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       .gpio_irq = MX6_ENET_IRQ,
-#endif
+       .gpio_irq               = MX6_ENET_IRQ,
 };
 
 static int mx6q_sabreauto_spi_cs[] = {
@@ -1506,6 +1503,18 @@ static void __init mx6_board_init(void)
                        mxc_iomux_v3_setup_multiple_pads(extra_pads,
                                        extra_pads_cnt);
                }
+               if (enet_to_gpio_6) {
+                       iomux_v3_cfg_t enet_gpio_pad =
+                               MX6Q_PAD_GPIO_6__ENET_IRQ_TO_GPIO_6;
+                       mxc_iomux_v3_setup_pad(enet_gpio_pad);
+               } else {
+                       iomux_v3_cfg_t mlb_pads[] = {
+                               MX6Q_PAD_ENET_TXD1__MLB_MLBCLK,
+                               MX6Q_PAD_GPIO_6__MLB_MLBSIG,
+                               MX6Q_PAD_GPIO_2__MLB_MLBDAT};
+                       mxc_iomux_v3_setup_multiple_pads(mlb_pads,
+                               ARRAY_SIZE(mlb_pads));
+               }
        } else if (cpu_is_mx6dl()) {
                common_pads = mx6dl_sabreauto_pads;
                can0_pads = mx6dl_sabreauto_can0_pads;
@@ -1538,6 +1547,18 @@ static void __init mx6_board_init(void)
                        mxc_iomux_v3_setup_multiple_pads(extra_pads,
                                        extra_pads_cnt);
                }
+               if (enet_to_gpio_6) {
+                       iomux_v3_cfg_t enet_gpio_pad =
+                               MX6DL_PAD_GPIO_6__ENET_IRQ_TO_GPIO_6;
+                       mxc_iomux_v3_setup_pad(enet_gpio_pad);
+               } else {
+                       iomux_v3_cfg_t mlb_pads[] = {
+                               MX6DL_PAD_ENET_TXD1__MLB_MLBCLK,
+                               MX6DL_PAD_GPIO_6__MLB_MLBSIG,
+                               MX6DL_PAD_GPIO_2__MLB_MLBDAT};
+                       mxc_iomux_v3_setup_multiple_pads(mlb_pads,
+                               ARRAY_SIZE(mlb_pads));
+               }
        }
 
        BUG_ON(!common_pads);
@@ -1681,13 +1702,15 @@ static void __init mx6_board_init(void)
        imx6q_add_anatop_thermal_imx(1, &mx6q_sabreauto_anatop_thermal_data);
 
        if (!can0_enable) {
+               if (enet_to_gpio_6)
+                       /* Make sure the IOMUX_OBSRV_MUX1 is set to ENET_IRQ. */
+                       mxc_iomux_set_specialbits_register(
+                               IOMUX_OBSRV_MUX1_OFFSET,
+                               OBSRV_MUX1_ENET_IRQ,
+                               OBSRV_MUX1_MASK);
+               else
+                       fec_data.gpio_irq = -1;
                imx6_init_fec(fec_data);
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-               /* Make sure the IOMUX_OBSRV_MUX1 is set to ENET_IRQ. */
-               mxc_iomux_set_specialbits_register(IOMUX_OBSRV_MUX1_OFFSET,
-                       OBSRV_MUX1_ENET_IRQ, OBSRV_MUX1_MASK);
-#endif
-
        }
        imx6q_add_pm_imx(0, &mx6q_sabreauto_pm_data);
 
index e4d62f1baaa5e3cfd8f5435df7e8f0e3b14ea31b..436a11d03a31668de25ad9fa23479d60616dc20e 100644 (file)
@@ -207,16 +207,7 @@ static iomux_v3_cfg_t mx6q_sabreauto_pads[] = {
 
        /* HDMI */
        MX6Q_PAD_EIM_A25__HDMI_TX_CEC_LINE,
-
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       MX6Q_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1,
-#else
-       /* MLB150 */
-       MX6Q_PAD_ENET_TXD1__MLB_MLBCLK,
-       MX6Q_PAD_GPIO_6__MLB_MLBSIG,
-       MX6Q_PAD_GPIO_2__MLB_MLBDAT,
-#endif
-};
+ };
 
 static iomux_v3_cfg_t mx6q_sabreauto_can0_pads[] = {
        /* CAN1 */
index 14f87ee96cf585608dc588434212c8bd7698a7f7..1fe0f7b1c084bf8e152de56d4fb097527837a886 100644 (file)
 #define MX6Q_SABRELITE_CSI0_RST                IMX_GPIO_NR(1, 8)
 #define MX6Q_SABRELITE_CSI0_PWN                IMX_GPIO_NR(1, 6)
 
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
 #define MX6_ENET_IRQ           IMX_GPIO_NR(1, 6)
 #define IOMUX_OBSRV_MUX1_OFFSET        0x3c
 #define OBSRV_MUX1_MASK                        0x3f
 #define OBSRV_MUX1_ENET_IRQ            0x9
-#endif
 
 #define MX6Q_SABRELITE_SD3_WP_PADCFG   (PAD_CTL_PKE | PAD_CTL_PUE |    \
                PAD_CTL_PUS_22K_UP | PAD_CTL_SPEED_MED |        \
@@ -110,6 +108,7 @@ static struct clk *sata_clk;
 extern char *gp_reg_id;
 extern char *soc_reg_id;
 extern char *pu_reg_id;
+extern bool enet_to_gpio_6;
 static int caam_enabled;
 
 extern struct regulator *(*get_cpu_regulator)(void);
@@ -216,8 +215,8 @@ static iomux_v3_cfg_t mx6q_sabrelite_pads[] = {
        MX6Q_PAD_EIM_D28__I2C1_SDA,     /* GPIO3[28] */
 
        /* I2C2 Camera, MIPI */
-       MX6Q_PAD_KEY_COL3__I2C2_SCL,    /* GPIO4[12] */
-       MX6Q_PAD_KEY_ROW3__I2C2_SDA,    /* GPIO4[13] */
+       MX6Q_PAD_KEY_COL3__I2C2_SCL,    /* GPIO4[12] */
+       MX6Q_PAD_KEY_ROW3__I2C2_SDA,    /* GPIO4[13] */
 
        /* I2C3 */
        MX6Q_PAD_GPIO_5__I2C3_SCL,      /* GPIO1[5] - J7 - Display card */
@@ -328,9 +327,6 @@ static iomux_v3_cfg_t mx6q_sabrelite_csi0_sensor_pads[] = {
        MX6Q_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC,
        MX6Q_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK,
        MX6Q_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC,
-#ifndef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       MX6Q_PAD_GPIO_6__GPIO_1_6,              /* J5 - Camera GP */
-#endif
        MX6Q_PAD_GPIO_8__GPIO_1_8,              /* J5 - Camera Reset */
        MX6Q_PAD_SD1_DAT0__GPIO_1_16,           /* J5 - Camera GP */
        MX6Q_PAD_NANDF_D5__GPIO_2_5,            /* J16 - MIPI GP */
@@ -476,9 +472,7 @@ static int mx6q_sabrelite_fec_phy_init(struct phy_device *phydev)
 static struct fec_platform_data fec_data __initdata = {
        .init = mx6q_sabrelite_fec_phy_init,
        .phy = PHY_INTERFACE_MODE_RGMII,
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
        .gpio_irq = MX6_ENET_IRQ,
-#endif
 };
 
 static int mx6q_sabrelite_spi_cs[] = {
@@ -1171,6 +1165,17 @@ static void __init mx6_sabrelite_board_init(void)
        mxc_iomux_v3_setup_multiple_pads(mx6q_sabrelite_pads,
                                        ARRAY_SIZE(mx6q_sabrelite_pads));
 
+       if (enet_to_gpio_6) {
+               iomux_v3_cfg_t enet_gpio_pad =
+                       MX6Q_PAD_GPIO_6__ENET_IRQ_TO_GPIO_6;
+               mxc_iomux_v3_setup_pad(enet_gpio_pad);
+       } else {
+               /* J5 - Camera GP */
+               iomux_v3_cfg_t camera_gpio_pad =
+                       MX6Q_PAD_GPIO_6__GPIO_1_6;
+               mxc_iomux_v3_setup_pad(camera_gpio_pad);
+       }
+
 #ifdef CONFIG_FEC_1588
        /* Set GPIO_16 input for IEEE-1588 ts_clk and RMII reference clock
         * For MX6 GPR1 bit21 meaning:
@@ -1231,12 +1236,16 @@ static void __init mx6_sabrelite_board_init(void)
        imx6q_add_mxc_hdmi(&hdmi_data);
 
        imx6q_add_anatop_thermal_imx(1, &mx6q_sabrelite_anatop_thermal_data);
+       if (enet_to_gpio_6)
+               /* Make sure the IOMUX_OBSRV_MUX1 is set to ENET_IRQ. */
+               mxc_iomux_set_specialbits_register(
+                       IOMUX_OBSRV_MUX1_OFFSET,
+                       OBSRV_MUX1_ENET_IRQ,
+                       OBSRV_MUX1_MASK);
+       else
+               fec_data.gpio_irq = -1;
+
        imx6_init_fec(fec_data);
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       /* Make sure the IOMUX_OBSRV_MUX1 is set to ENET_IRQ. */
-       mxc_iomux_set_specialbits_register(IOMUX_OBSRV_MUX1_OFFSET,
-               OBSRV_MUX1_ENET_IRQ, OBSRV_MUX1_MASK);
-#endif
        imx6q_add_pm_imx(0, &mx6q_sabrelite_pm_data);
        imx6q_add_sdhci_usdhc_imx(3, &mx6q_sabrelite_sd4_data);
        imx6q_add_sdhci_usdhc_imx(2, &mx6q_sabrelite_sd3_data);
index 608c3553ec37125591877590d995661ad5db5235..3f9a845f3b687d8e0f9147ce27fe9898b01b54e9 100644 (file)
 #define SABRESD_ELAN_RST       IMX_GPIO_NR(3, 8)
 #define SABRESD_ELAN_INT       IMX_GPIO_NR(3, 28)
 
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
 #define MX6_ENET_IRQ           IMX_GPIO_NR(1, 6)
 #define IOMUX_OBSRV_MUX1_OFFSET        0x3c
 #define OBSRV_MUX1_MASK                        0x3f
 #define OBSRV_MUX1_ENET_IRQ            0x9
-#endif
 
 static struct clk *sata_clk;
 static struct clk *clko;
@@ -216,6 +214,7 @@ extern char *gp_reg_id;
 extern char *soc_reg_id;
 extern char *pu_reg_id;
 extern int epdc_enabled;
+extern bool enet_to_gpio_6;
 
 static int max17135_regulator_init(struct max17135 *max17135);
 
@@ -298,9 +297,7 @@ static int mx6q_sabresd_fec_phy_init(struct phy_device *phydev)
 static struct fec_platform_data fec_data __initdata = {
        .init = mx6q_sabresd_fec_phy_init,
        .phy = PHY_INTERFACE_MODE_RGMII,
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
        .gpio_irq = MX6_ENET_IRQ,
-#endif
 };
 
 static int mx6q_sabresd_spi_cs[] = {
@@ -1717,14 +1714,34 @@ static void __init mx6_sabresd_board_init(void)
        int rate;
        struct platform_device *voutdev;
 
-       if (cpu_is_mx6q())
+       if (cpu_is_mx6q()) {
                mxc_iomux_v3_setup_multiple_pads(mx6q_sabresd_pads,
                        ARRAY_SIZE(mx6q_sabresd_pads));
-       else if (cpu_is_mx6dl()) {
+               if (enet_to_gpio_6) {
+                       iomux_v3_cfg_t enet_gpio_pad =
+                               MX6Q_PAD_GPIO_6__ENET_IRQ_TO_GPIO_6;
+                       mxc_iomux_v3_setup_pad(enet_gpio_pad);
+               } else {
+                       iomux_v3_cfg_t i2c3_pad =
+                               MX6Q_PAD_GPIO_6__I2C3_SDA;
+                       mxc_iomux_v3_setup_pad(i2c3_pad);
+               }
+       } else if (cpu_is_mx6dl()) {
                mxc_iomux_v3_setup_multiple_pads(mx6dl_sabresd_pads,
                        ARRAY_SIZE(mx6dl_sabresd_pads));
+
+               if (enet_to_gpio_6) {
+                       iomux_v3_cfg_t enet_gpio_pad =
+                               MX6DL_PAD_GPIO_6__ENET_IRQ_TO_GPIO_6;
+                       mxc_iomux_v3_setup_pad(enet_gpio_pad);
+               } else {
+                       iomux_v3_cfg_t i2c3_pad =
+                               MX6DL_PAD_GPIO_6__I2C3_SDA;
+                       mxc_iomux_v3_setup_pad(i2c3_pad);
+               }
        }
 
+
 #ifdef CONFIG_FEC_1588
        /* Set GPIO_16 input for IEEE-1588 ts_clk and RMII reference clock
         * For MX6 GPR1 bit21 meaning:
@@ -1817,12 +1834,16 @@ static void __init mx6_sabresd_board_init(void)
        imx6q_add_mxc_hdmi(&hdmi_data);
 
        imx6q_add_anatop_thermal_imx(1, &mx6q_sabresd_anatop_thermal_data);
+
+       if (enet_to_gpio_6)
+               /* Make sure the IOMUX_OBSRV_MUX1 is set to ENET_IRQ. */
+               mxc_iomux_set_specialbits_register(
+                       IOMUX_OBSRV_MUX1_OFFSET,
+                       OBSRV_MUX1_ENET_IRQ,
+                       OBSRV_MUX1_MASK);
+       else
+               fec_data.gpio_irq = -1;
        imx6_init_fec(fec_data);
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       /* Make sure the IOMUX_OBSRV_MUX1 is set to ENET_IRQ. */
-       mxc_iomux_set_specialbits_register(IOMUX_OBSRV_MUX1_OFFSET,
-               OBSRV_MUX1_ENET_IRQ, OBSRV_MUX1_MASK);
-#endif
 
        imx6q_add_pm_imx(0, &mx6q_sabresd_pm_data);
 
index b2bb8c923f0f534d23adaa0044a64cd90ae2e86b..adb2e3e557db3f15c07b14dfc1b36d92dd378f98 100644 (file)
@@ -132,13 +132,8 @@ static iomux_v3_cfg_t mx6q_sabresd_pads[] = {
        MX6Q_PAD_KEY_COL3__I2C2_SCL,
        MX6Q_PAD_KEY_ROW3__I2C2_SDA,
 
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       MX6Q_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1,
-#else
-       /* I2C3 */
-       MX6Q_PAD_GPIO_3__I2C3_SCL,      /* GPIO1[3] */
-       MX6Q_PAD_GPIO_6__I2C3_SDA,
-#endif
+       /*I2C3 */
+       MX6Q_PAD_GPIO_3__I2C3_SCL,
 
        /* DISPLAY */
        MX6Q_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK,
index b0edb5e52b5258882e83ccb60d3fa8ad5cd224f7..e4047d585eaf3656d03fe08b64d312ab8f8a3c90 100644 (file)
@@ -204,16 +204,7 @@ static iomux_v3_cfg_t mx6dl_sabreauto_pads[] = {
 
        /* HDMI */
        MX6DL_PAD_EIM_A25__HDMI_TX_CEC_LINE,
-
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       MX6DL_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1,
-#else
-       /* MLB150 */
-       MX6DL_PAD_ENET_TXD1__MLB_MLBCLK,
-       MX6DL_PAD_GPIO_6__MLB_MLBSIG,
-       MX6DL_PAD_GPIO_2__MLB_MLBDAT,
-#endif
-};
+ };
 
 static iomux_v3_cfg_t mx6dl_sabreauto_can0_pads[] = {
        /* CAN1 */
index 61bedb57a54c6cc23df8053d27c3f363ac118f79..52af5daa09f86cadcc1a99bd13d6046add48abe1 100644 (file)
@@ -51,6 +51,7 @@ extern int wait_mode_arm_podf;
 extern int lp_audio_freq;
 extern int cur_arm_podf;
 extern bool enet_is_active;
+extern bool enet_to_gpio_6;
 
 void __iomem *apll_base;
 
@@ -3751,9 +3752,9 @@ static unsigned long _clk_enet_get_rate(struct clk *clk)
 
 static int _clk_enet_enable(struct clk *clk)
 {
-#ifndef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       enet_is_active = true;
-#endif
+       if (!enet_to_gpio_6)
+               enet_is_active = true;
+
        _clk_enable(clk);
        return 0;
 }
@@ -3761,9 +3762,9 @@ static int _clk_enet_enable(struct clk *clk)
 static void _clk_enet_disable(struct clk *clk)
 {
        _clk_disable(clk);
-#ifndef CONFIG_MX6_ENET_IRQ_TO_GPIO
-       enet_is_active = false;
-#endif
+
+       if (!enet_to_gpio_6)
+               enet_is_active = false;
 }
 
 static struct clk enet_clk[] = {
index eaeae1d3c57ca14522637d6b74a438ee30402e47..a65ad81e666de6d0e15a873b50b723599026f4b2 100644 (file)
@@ -37,6 +37,7 @@ bool enable_wait_mode = true;
 u32 enable_ldo_mode = LDO_MODE_DEFAULT;
 u32 arm_max_freq = CPU_AT_1_2GHz;
 bool mem_clk_on_in_wait;
+bool enet_to_gpio_6;
 int chip_rev;
 
 void __iomem *gpc_base;
@@ -276,5 +277,10 @@ static int __init enable_mem_clk_in_wait(char *p)
 
 early_param("mem_clk_on", enable_mem_clk_in_wait);
 
+static int __init set_enet_irq_to_gpio(char *p)
+{
+       enet_to_gpio_6 = true;
+       return 0;
+}
 
-
+early_param("enet_gpio_6", set_enet_irq_to_gpio);
index a94e15b4a4aa797df3d556a8c72d21846d60b2ca..59f8399be39cfc153b304dfd0a616b3f2e138238 100644 (file)
 #define MX6DL_PAD_GPIO_5__SIMBA_EVENTI                                         \
                IOMUX_PAD(0x0600, 0x0230, 7, 0x0000, 0, NO_PAD_CTRL)
 
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-#define MX6DL_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1                           \
+#define MX6DL_PAD_GPIO_6__ENET_IRQ_TO_GPIO_6                           \
                IOMUX_PAD(0x0604, 0x0234, 1 | IOMUX_CONFIG_SION, 0x0000, 0, ENET_IRQ_PAD_CTRL)
-#else
 #define MX6DL_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1                           \
                IOMUX_PAD(0x0604, 0x0234, 1, 0x0000, 0, NO_PAD_CTRL)
 #define MX6DL_PAD_GPIO_6__ESAI1_SCKT                                           \
                IOMUX_PAD(0x0604, 0x0234, 6, 0x0000, 0, MX6DL_USDHC_PAD_CTRL)
 #define MX6DL_PAD_GPIO_6__MLB_MLBSIG                                           \
                IOMUX_PAD(0x0604, 0x0234, 7, 0x08E4, 1, MX6DL_MLB150_PAD_CTRL)
-#endif
 
 #define MX6DL_PAD_GPIO_7__ESAI1_TX4_RX1                                        \
                IOMUX_PAD(0x0608, 0x0238, 0, 0x0854, 1, NO_PAD_CTRL)
index 291b6af14be7cc828fb2dd793d4c073c54315c28..16cd87f464597d0c074dd2c439ba2bad627603bc 100644 (file)
 
 #define _MX6Q_PAD_GPIO_6__ESAI1_SCKT                   \
                IOMUX_PAD(0x0600, 0x0230, 0, 0x0870, 1, 0)
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-#define _MX6Q_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1           \
+#define _MX6Q_PAD_GPIO_6__ENET_IRQ_TO_GPIO_6           \
                IOMUX_PAD(0x0600, 0x0230, 1 | IOMUX_CONFIG_SION, 0x0000, 0, 0)
-#else
 #define _MX6Q_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1           \
                IOMUX_PAD(0x0600, 0x0230, 1, 0x0000, 0, 0)
-#endif
 #define _MX6Q_PAD_GPIO_6__I2C3_SDA                     \
                IOMUX_PAD(0x0600, 0x0230, 2 | IOMUX_CONFIG_SION, 0x08AC, 1, 0)
 #define _MX6Q_PAD_GPIO_6__CCM_CCM_OUT_0                        \
 #define  MX6Q_PAD_GPIO_3__MLB_MLBCLK           \
                (_MX6Q_PAD_GPIO_3__MLB_MLBCLK | MUX_PAD_CTRL(MX6Q_MLB150_PAD_CTRL))
 
-#ifdef CONFIG_MX6_ENET_IRQ_TO_GPIO
-#define  MX6Q_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1           \
-               (_MX6Q_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1 | MUX_PAD_CTRL(ENET_IRQ_PAD_CTRL))
-#else
+#define  MX6Q_PAD_GPIO_6__ENET_IRQ_TO_GPIO_6           \
+               (_MX6Q_PAD_GPIO_6__ENET_IRQ_TO_GPIO_6 | MUX_PAD_CTRL(ENET_IRQ_PAD_CTRL))
 #define  MX6Q_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1           \
                (_MX6Q_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1 | MUX_PAD_CTRL(NO_PAD_CTRL))
 #define  MX6Q_PAD_GPIO_6__ESAI1_SCKT           \
                (_MX6Q_PAD_GPIO_6__USDHC2_LCTL | MUX_PAD_CTRL(MX6Q_USDHC_PAD_CTRL))
 #define  MX6Q_PAD_GPIO_6__MLB_MLBSIG           \
                (_MX6Q_PAD_GPIO_6__MLB_MLBSIG | MUX_PAD_CTRL(MX6Q_MLB150_PAD_CTRL))
-#endif
 
 #define  MX6Q_PAD_GPIO_2__ESAI1_FST            \
                (_MX6Q_PAD_GPIO_2__ESAI1_FST | MUX_PAD_CTRL(NO_PAD_CTRL))