]> Pileus Git - ~andy/linux/blobdiff - arch/arm/mach-mxs/mach-mx28evk.c
Merge tag 'for-linus-3.4' of git://git.infradead.org/mtd-2.6
[~andy/linux] / arch / arm / mach-mxs / mach-mx28evk.c
index fdb0a5664dd68f7af7b6158c9db5ca94ffc1e174..e386c142f93c3f48286b5266e48fd56af788b63b 100644 (file)
@@ -223,7 +223,6 @@ static const struct gpio_led_platform_data mx28evk_led_data __initconst = {
 /* fec */
 static void __init mx28evk_fec_reset(void)
 {
-       int ret;
        struct clk *clk;
 
        /* Enable fec phy clock */
@@ -231,32 +230,7 @@ static void __init mx28evk_fec_reset(void)
        if (!IS_ERR(clk))
                clk_prepare_enable(clk);
 
-       /* Power up fec phy */
-       ret = gpio_request(MX28EVK_FEC_PHY_POWER, "fec-phy-power");
-       if (ret) {
-               pr_err("Failed to request gpio fec-phy-%s: %d\n", "power", ret);
-               return;
-       }
-
-       ret = gpio_direction_output(MX28EVK_FEC_PHY_POWER, 0);
-       if (ret) {
-               pr_err("Failed to drive gpio fec-phy-%s: %d\n", "power", ret);
-               return;
-       }
-
-       /* Reset fec phy */
-       ret = gpio_request(MX28EVK_FEC_PHY_RESET, "fec-phy-reset");
-       if (ret) {
-               pr_err("Failed to request gpio fec-phy-%s: %d\n", "reset", ret);
-               return;
-       }
-
-       gpio_direction_output(MX28EVK_FEC_PHY_RESET, 0);
-       if (ret) {
-               pr_err("Failed to drive gpio fec-phy-%s: %d\n", "reset", ret);
-               return;
-       }
-
+       gpio_set_value(MX28EVK_FEC_PHY_RESET, 0);
        mdelay(1);
        gpio_set_value(MX28EVK_FEC_PHY_RESET, 1);
 }
@@ -278,14 +252,14 @@ static int __init mx28evk_fec_get_mac(void)
        const u32 *ocotp = mxs_get_ocotp();
 
        if (!ocotp)
-               goto error;
+               return -ETIMEDOUT;
 
        /*
         * OCOTP only stores the last 4 octets for each mac address,
         * so hard-code Freescale OUI (00:04:9f) here.
         */
        for (i = 0; i < 2; i++) {
-               val = ocotp[i * 4];
+               val = ocotp[i];
                mx28_fec_pdata[i].mac[0] = 0x00;
                mx28_fec_pdata[i].mac[1] = 0x04;
                mx28_fec_pdata[i].mac[2] = 0x9f;
@@ -295,10 +269,6 @@ static int __init mx28evk_fec_get_mac(void)
        }
 
        return 0;
-
-error:
-       pr_err("%s: timeout when reading fec mac from OCOTP\n", __func__);
-       return -ETIMEDOUT;
 }
 
 /*
@@ -417,9 +387,14 @@ static void __init mx28evk_add_regulators(void)
 static void __init mx28evk_add_regulators(void) {}
 #endif
 
-static struct gpio mx28evk_lcd_gpios[] = {
+static const struct gpio mx28evk_gpios[] __initconst = {
        { MX28EVK_LCD_ENABLE, GPIOF_OUT_INIT_HIGH, "lcd-enable" },
        { MX28EVK_BL_ENABLE, GPIOF_OUT_INIT_HIGH, "bl-enable" },
+       { MX28EVK_FLEXCAN_SWITCH, GPIOF_DIR_OUT, "flexcan-switch" },
+       { MX28EVK_MMC0_SLOT_POWER, GPIOF_OUT_INIT_LOW, "mmc0-slot-power" },
+       { MX28EVK_MMC1_SLOT_POWER, GPIOF_OUT_INIT_LOW, "mmc1-slot-power" },
+       { MX28EVK_FEC_PHY_POWER, GPIOF_OUT_INIT_LOW, "fec-phy-power" },
+       { MX28EVK_FEC_PHY_RESET, GPIOF_DIR_OUT, "fec-phy-reset" },
 };
 
 static const struct mxs_saif_platform_data
@@ -447,25 +422,18 @@ static void __init mx28evk_init(void)
        if (mx28evk_fec_get_mac())
                pr_warn("%s: failed on fec mac setup\n", __func__);
 
+       ret = gpio_request_array(mx28evk_gpios, ARRAY_SIZE(mx28evk_gpios));
+       if (ret)
+               pr_err("One or more GPIOs failed to be requested: %d\n", ret);
+
        mx28evk_fec_reset();
        mx28_add_fec(0, &mx28_fec_pdata[0]);
        mx28_add_fec(1, &mx28_fec_pdata[1]);
 
-       ret = gpio_request_one(MX28EVK_FLEXCAN_SWITCH, GPIOF_DIR_OUT,
-                               "flexcan-switch");
-       if (ret) {
-               pr_err("failed to request gpio flexcan-switch: %d\n", ret);
-       } else {
-               mx28_add_flexcan(0, &mx28evk_flexcan_pdata[0]);
-               mx28_add_flexcan(1, &mx28evk_flexcan_pdata[1]);
-       }
+       mx28_add_flexcan(0, &mx28evk_flexcan_pdata[0]);
+       mx28_add_flexcan(1, &mx28evk_flexcan_pdata[1]);
 
-       ret = gpio_request_array(mx28evk_lcd_gpios,
-                                ARRAY_SIZE(mx28evk_lcd_gpios));
-       if (ret)
-               pr_warn("failed to request gpio pins for lcd: %d\n", ret);
-       else
-               mx28_add_mxsfb(&mx28evk_mxsfb_pdata);
+       mx28_add_mxsfb(&mx28evk_mxsfb_pdata);
 
        mxs_saif_clkmux_select(MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0);
        mx28_add_saif(0, &mx28evk_mxs_saif_pdata[0]);
@@ -480,20 +448,8 @@ static void __init mx28evk_init(void)
        mxs_add_platform_device("mxs-sgtl5000", 0, NULL, 0,
                        NULL, 0);
 
-       /* power on mmc slot by writing 0 to the gpio */
-       ret = gpio_request_one(MX28EVK_MMC0_SLOT_POWER, GPIOF_OUT_INIT_LOW,
-                              "mmc0-slot-power");
-       if (ret)
-               pr_warn("failed to request gpio mmc0-slot-power: %d\n", ret);
-       else
-               mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]);
-
-       ret = gpio_request_one(MX28EVK_MMC1_SLOT_POWER, GPIOF_OUT_INIT_LOW,
-                              "mmc1-slot-power");
-       if (ret)
-               pr_warn("failed to request gpio mmc1-slot-power: %d\n", ret);
-       else
-               mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]);
+       mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]);
+       mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]);
 
        mx28_add_rtc_stmp3xxx();