#include <linux/pinctrl/consumer.h>
#include <linux/mxsfb.h>
+static char *mode;
+module_param(mode, charp, S_IRUGO);
+
#define REG_SET 4
#define REG_CLR 8
#define VDCTRL0_ENABLE_PRESENT (1 << 28)
#define VDCTRL0_VSYNC_ACT_HIGH (1 << 27)
#define VDCTRL0_HSYNC_ACT_HIGH (1 << 26)
-#define VDCTRL0_DOTCLK_ACT_FAILING (1 << 25)
+#define VDCTRL0_DOTCLK_ACT_FALLING (1 << 25)
#define VDCTRL0_ENABLE_ACT_HIGH (1 << 24)
#define VDCTRL0_VSYNC_PERIOD_UNIT (1 << 21)
#define VDCTRL0_VSYNC_PULSE_WIDTH_UNIT (1 << 20)
loop--;
}
- writel(VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4 + REG_CLR);
+ reg = readl(host->base + LCDC_VDCTRL4);
+ writel(reg & ~VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4);
clk_disable_unprepare(host->clk);
vdctrl0 |= VDCTRL0_VSYNC_ACT_HIGH;
if (fb_info->var.sync & FB_SYNC_DATA_ENABLE_HIGH_ACT)
vdctrl0 |= VDCTRL0_ENABLE_ACT_HIGH;
- if (fb_info->var.sync & FB_SYNC_DOTCLK_FAILING_ACT)
- vdctrl0 |= VDCTRL0_DOTCLK_ACT_FAILING;
+ if (fb_info->var.sync & FB_SYNC_DOTCLK_FALLING_ACT)
+ vdctrl0 |= VDCTRL0_DOTCLK_ACT_FALLING;
writel(vdctrl0, host->base + LCDC_VDCTRL0);
struct resource *res;
struct mxsfb_info *host;
struct fb_info *fb_info;
- struct fb_modelist *modelist;
+ struct fb_modelist *modelist = NULL;
struct pinctrl *pinctrl;
int panel_enable;
enum of_gpio_flags flags;
if (ret != 0)
goto error_init_fb;
- for (i = 0; i < pdata->mode_count; i++)
+ for (i = 0; i < pdata->mode_count; i++) {
fb_add_videomode(&pdata->mode_list[i], &fb_info->modelist);
+ if (mode && strlen(mode) > 0 &&
+ strcmp(mode, pdata->mode_list[i].name) == 0) {
+ modelist = list_first_entry(&fb_info->modelist,
+ struct fb_modelist, list);
+ }
+ }
+ if (modelist == NULL)
+ modelist = list_first_entry(&fb_info->modelist,
+ struct fb_modelist, list);
+
+ if (modelist)
+ printk("Using video mode: '%s'\n", modelist->mode.name);
- modelist = list_first_entry(&fb_info->modelist,
- struct fb_modelist, list);
fb_videomode_to_var(&fb_info->var, &modelist->mode);
/* init the color fields */