]> Pileus Git - ~andy/linux/blobdiff - arch/arm/mach-mxs/mach-mxs.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/lliubbo...
[~andy/linux] / arch / arm / mach-mxs / mach-mxs.c
index 87a4829ec083496e9cf4f30d4b65478a18e7298b..648bdd05d38bb95006401378af9540580501970a 100644 (file)
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/irqdomain.h>
+#include <linux/micrel_phy.h>
 #include <linux/mxsfb.h>
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
+#include <linux/phy.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/time.h>
 #include <mach/common.h>
@@ -59,6 +61,42 @@ static struct fb_videomode mx28evk_video_modes[] = {
        },
 };
 
+static struct fb_videomode m28evk_video_modes[] = {
+       {
+               .name           = "Ampire AM-800480R2TMQW-T01H",
+               .refresh        = 60,
+               .xres           = 800,
+               .yres           = 480,
+               .pixclock       = 30066, /* picosecond (33.26 MHz) */
+               .left_margin    = 0,
+               .right_margin   = 256,
+               .upper_margin   = 0,
+               .lower_margin   = 45,
+               .hsync_len      = 1,
+               .vsync_len      = 1,
+               .sync           = FB_SYNC_DATA_ENABLE_HIGH_ACT,
+       },
+};
+
+static struct fb_videomode apx4devkit_video_modes[] = {
+       {
+               .name           = "HannStar PJ70112A",
+               .refresh        = 60,
+               .xres           = 800,
+               .yres           = 480,
+               .pixclock       = 33333, /* picosecond (30.00 MHz) */
+               .left_margin    = 88,
+               .right_margin   = 40,
+               .upper_margin   = 32,
+               .lower_margin   = 13,
+               .hsync_len      = 48,
+               .vsync_len      = 3,
+               .sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT |
+                                 FB_SYNC_DATA_ENABLE_HIGH_ACT |
+                                 FB_SYNC_DOTCLK_FAILING_ACT,
+       },
+};
+
 static struct mxsfb_platform_data mxsfb_pdata __initdata;
 
 static struct of_dev_auxdata mxs_auxdata_lookup[] __initdata = {
@@ -186,15 +224,17 @@ static void __init imx23_evk_init(void)
        mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT;
 }
 
-static void __init imx28_evk_init(void)
+static inline void enable_clk_enet_out(void)
 {
-       struct clk *clk;
+       struct clk *clk = clk_get_sys("enet_out", NULL);
 
-       /* Enable fec phy clock */
-       clk = clk_get_sys("enet_out", NULL);
        if (!IS_ERR(clk))
                clk_prepare_enable(clk);
+}
 
+static void __init imx28_evk_init(void)
+{
+       enable_clk_enet_out();
        update_fec_mac_prop(OUI_FSL);
 
        mxsfb_pdata.mode_list = mx28evk_video_modes;
@@ -203,12 +243,47 @@ static void __init imx28_evk_init(void)
        mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT;
 }
 
+static void __init m28evk_init(void)
+{
+       enable_clk_enet_out();
+       update_fec_mac_prop(OUI_DENX);
+
+       mxsfb_pdata.mode_list = m28evk_video_modes;
+       mxsfb_pdata.mode_count = ARRAY_SIZE(m28evk_video_modes);
+       mxsfb_pdata.default_bpp = 16;
+       mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT;
+}
+
+static int apx4devkit_phy_fixup(struct phy_device *phy)
+{
+       phy->dev_flags |= MICREL_PHY_50MHZ_CLK;
+       return 0;
+}
+
+static void __init apx4devkit_init(void)
+{
+       enable_clk_enet_out();
+
+       if (IS_BUILTIN(CONFIG_PHYLIB))
+               phy_register_fixup_for_uid(PHY_ID_KS8051, MICREL_PHY_ID_MASK,
+                                          apx4devkit_phy_fixup);
+
+       mxsfb_pdata.mode_list = apx4devkit_video_modes;
+       mxsfb_pdata.mode_count = ARRAY_SIZE(apx4devkit_video_modes);
+       mxsfb_pdata.default_bpp = 32;
+       mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT;
+}
+
 static void __init mxs_machine_init(void)
 {
        if (of_machine_is_compatible("fsl,imx28-evk"))
                imx28_evk_init();
        else if (of_machine_is_compatible("fsl,imx23-evk"))
                imx23_evk_init();
+       else if (of_machine_is_compatible("denx,m28evk"))
+               m28evk_init();
+       else if (of_machine_is_compatible("bluegiga,apx4devkit"))
+               apx4devkit_init();
 
        of_platform_populate(NULL, of_default_bus_match_table,
                             mxs_auxdata_lookup, NULL);
@@ -216,13 +291,18 @@ static void __init mxs_machine_init(void)
 
 static const char *imx23_dt_compat[] __initdata = {
        "fsl,imx23-evk",
+       "fsl,stmp378x_devb"
+       "olimex,imx23-olinuxino",
        "fsl,imx23",
        NULL,
 };
 
 static const char *imx28_dt_compat[] __initdata = {
+       "bluegiga,apx4devkit",
        "crystalfontz,cfa10036",
+       "denx,m28evk",
        "fsl,imx28-evk",
+       "karo,tx28",
        "fsl,imx28",
        NULL,
 };