Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9053b48 authored by Florian Tobias Schandinat's avatar Florian Tobias Schandinat
Browse files

Merge branch 'for-florian' of git://gitorious.org/linux-omap-dss2/linux into fbdev-next

Conflicts:
	drivers/video/omap2/dss/core.c
	drivers/video/omap2/dss/dispc.c
parents 4c5b1fb8 974a6582
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@

#define DISPC_CONTROL		0x0040
#define DISPC_CONTROL2		0x0238
#define DISPC_CONTROL3		0x0848
#define DISPC_IRQSTATUS		0x0018

#define DSS_SYSCONFIG		0x10
@@ -52,6 +53,7 @@
#define EVSYNC_EVEN_IRQ_SHIFT	2
#define EVSYNC_ODD_IRQ_SHIFT	3
#define FRAMEDONE2_IRQ_SHIFT	22
#define FRAMEDONE3_IRQ_SHIFT	30
#define FRAMEDONETV_IRQ_SHIFT	24

/*
@@ -376,7 +378,7 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
static void dispc_disable_outputs(void)
{
	u32 v, irq_mask = 0;
	bool lcd_en, digit_en, lcd2_en = false;
	bool lcd_en, digit_en, lcd2_en = false, lcd3_en = false;
	int i;
	struct omap_dss_dispc_dev_attr *da;
	struct omap_hwmod *oh;
@@ -405,7 +407,13 @@ static void dispc_disable_outputs(void)
		lcd2_en = v & LCD_EN_MASK;
	}

	if (!(lcd_en | digit_en | lcd2_en))
	/* store value of LCDENABLE for LCD3 */
	if (da->manager_count > 3) {
		v = omap_hwmod_read(oh, DISPC_CONTROL3);
		lcd3_en = v & LCD_EN_MASK;
	}

	if (!(lcd_en | digit_en | lcd2_en | lcd3_en))
		return; /* no managers currently enabled */

	/*
@@ -426,10 +434,12 @@ static void dispc_disable_outputs(void)

	if (lcd2_en)
		irq_mask |= 1 << FRAMEDONE2_IRQ_SHIFT;
	if (lcd3_en)
		irq_mask |= 1 << FRAMEDONE3_IRQ_SHIFT;

	/*
	 * clear any previous FRAMEDONE, FRAMEDONETV,
	 * EVSYNC_EVEN/ODD or FRAMEDONE2 interrupts
	 * EVSYNC_EVEN/ODD, FRAMEDONE2 or FRAMEDONE3 interrupts
	 */
	omap_hwmod_write(irq_mask, oh, DISPC_IRQSTATUS);

@@ -445,12 +455,19 @@ static void dispc_disable_outputs(void)
		omap_hwmod_write(v, oh, DISPC_CONTROL2);
	}

	/* disable LCD3 manager */
	if (da->manager_count > 3) {
		v = omap_hwmod_read(oh, DISPC_CONTROL3);
		v &= ~LCD_EN_MASK;
		omap_hwmod_write(v, oh, DISPC_CONTROL3);
	}

	i = 0;
	while ((omap_hwmod_read(oh, DISPC_IRQSTATUS) & irq_mask) !=
	       irq_mask) {
		i++;
		if (i > FRAMEDONE_IRQ_TIMEOUT) {
			pr_err("didn't get FRAMEDONE1/2 or TV interrupt\n");
			pr_err("didn't get FRAMEDONE1/2/3 or TV interrupt\n");
			break;
		}
		mdelay(1);
+8 −2
Original line number Diff line number Diff line
@@ -487,6 +487,13 @@ static struct omap_video_timings acx_panel_timings = {
	.vfp		= 3,
	.vsw		= 3,
	.vbp		= 4,

	.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
	.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,

	.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
	.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
	.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
};

static int acx_panel_probe(struct omap_dss_device *dssdev)
@@ -498,8 +505,7 @@ static int acx_panel_probe(struct omap_dss_device *dssdev)
	struct backlight_properties props;

	dev_dbg(&dssdev->dev, "%s\n", __func__);
	dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
					OMAP_DSS_LCD_IHS;

	/* FIXME AC bias ? */
	dssdev->panel.timings = acx_panel_timings;

+114 −65
Original line number Diff line number Diff line
@@ -40,12 +40,6 @@
struct panel_config {
	struct omap_video_timings timings;

	int acbi;	/* ac-bias pin transitions per interrupt */
	/* Unit: line clocks */
	int acb;	/* ac-bias pin frequency */

	enum omap_panel_config config;

	int power_on_delay;
	int power_off_delay;

@@ -73,11 +67,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 11,
			.vfp		= 3,
			.vbp		= 2,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.acbi			= 0x0,
		.acb			= 0x0,
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
					OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IEO,
		.power_on_delay		= 50,
		.power_off_delay	= 100,
		.name			= "sharp_lq",
@@ -98,11 +94,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 1,
			.vfp		= 1,
			.vbp		= 1,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.acbi			= 0x0,
		.acb			= 0x28,
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
						OMAP_DSS_LCD_IHS,
		.power_on_delay		= 50,
		.power_off_delay	= 100,
		.name			= "sharp_ls",
@@ -123,12 +121,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vfp		= 4,
			.vsw		= 2,
			.vbp		= 2,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_FALLING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_FALLING_EDGE,
		},
		.acbi			= 0x0,
		.acb			= 0x0,
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
					OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IPC |
					OMAP_DSS_LCD_ONOFF,
		.power_on_delay		= 0,
		.power_off_delay	= 0,
		.name			= "toppoly_tdo35s",
@@ -149,11 +148,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vfp		= 4,
			.vsw		= 10,
			.vbp		= 12 - 10,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.acbi			= 0x0,
		.acb			= 0x0,
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
						OMAP_DSS_LCD_IHS,
		.power_on_delay		= 0,
		.power_off_delay	= 0,
		.name			= "samsung_lte430wq_f0c",
@@ -174,11 +175,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 2,
			.vfp		= 4,
			.vbp		= 11,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.acbi			= 0x0,
		.acb			= 0x0,
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
						OMAP_DSS_LCD_IHS,
		.power_on_delay		= 0,
		.power_off_delay	= 0,
		.name			= "seiko_70wvw1tz3",
@@ -199,11 +202,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 10,
			.vfp		= 2,
			.vbp		= 2,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.acbi			= 0x0,
		.acb			= 0x0,
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
					  OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IEO,
		.power_on_delay		= 0,
		.power_off_delay	= 0,
		.name			= "powertip_ph480272t",
@@ -224,11 +229,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 3,
			.vfp		= 12,
			.vbp		= 25,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.acbi			= 0x0,
		.acb			= 0x28,
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
					  OMAP_DSS_LCD_IHS,
		.power_on_delay		= 0,
		.power_off_delay	= 0,
		.name			= "innolux_at070tn83",
@@ -249,9 +256,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 1,
			.vfp		= 2,
			.vbp		= 7,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
						OMAP_DSS_LCD_IHS,
		.name			= "nec_nl2432dr22-11b",
	},

@@ -270,9 +281,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 1,
			.vfp		= 1,
			.vbp		= 1,
		},
		.config			= OMAP_DSS_LCD_TFT,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.name			= "h4",
	},

@@ -291,10 +306,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 10,
			.vfp		= 2,
			.vbp		= 2,
		},
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
						OMAP_DSS_LCD_IHS,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.name			= "apollon",
	},
	/* FocalTech ETM070003DH6 */
@@ -312,9 +330,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 3,
			.vfp		= 13,
			.vbp		= 29,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
					  OMAP_DSS_LCD_IHS,
		.name			= "focaltech_etm070003dh6",
	},

@@ -333,11 +355,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 23,
			.vfp		= 1,
			.vbp		= 1,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_FALLING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.acbi			= 0x0,
		.acb			= 0x0,
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
					  OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IPC,
		.power_on_delay		= 0,
		.power_off_delay	= 0,
		.name			= "microtips_umsh_8173md",
@@ -358,9 +382,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 10,
			.vfp		= 4,
			.vbp		= 2,
		},
		.config			= OMAP_DSS_LCD_TFT,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.name			= "ortustech_com43h4m10xtc",
	},

@@ -379,11 +407,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 10,
			.vfp		= 12,
			.vbp		= 23,
		},
		.acb			= 0x0,
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
					  OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IEO,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.name			= "innolux_at080tn52",
	},

@@ -401,8 +431,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 1,
			.vfp		= 26,
			.vbp		= 1,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.config			= OMAP_DSS_LCD_TFT,
		.name			= "mitsubishi_aa084sb01",
	},
	/* EDT ET0500G0DH6 */
@@ -419,8 +454,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 2,
			.vfp		= 35,
			.vbp		= 10,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.config			= OMAP_DSS_LCD_TFT,
		.name			= "edt_et0500g0dh6",
	},

@@ -439,9 +479,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 2,
			.vfp		= 10,
			.vbp		= 33,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_FALLING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
					  OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IPC,
		.name			= "primeview_pd050vl1",
	},

@@ -460,9 +504,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 2,
			.vfp		= 10,
			.vbp		= 33,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_FALLING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
					  OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IPC,
		.name			= "primeview_pm070wl4",
	},

@@ -481,9 +529,13 @@ static struct panel_config generic_dpi_panels[] = {
			.vsw		= 4,
			.vfp		= 1,
			.vbp		= 23,

			.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
			.data_pclk_edge	= OMAPDSS_DRIVE_SIG_FALLING_EDGE,
			.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
			.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
		},
		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
					  OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IPC,
		.name			= "primeview_pd104slf",
	},
};
@@ -573,10 +625,7 @@ static int generic_dpi_panel_probe(struct omap_dss_device *dssdev)
	if (!panel_config)
		return -EINVAL;

	dssdev->panel.config = panel_config->config;
	dssdev->panel.timings = panel_config->timings;
	dssdev->panel.acb = panel_config->acb;
	dssdev->panel.acbi = panel_config->acbi;

	drv_data = kzalloc(sizeof(*drv_data), GFP_KERNEL);
	if (!drv_data)
+6 −2
Original line number Diff line number Diff line
@@ -40,6 +40,12 @@ static struct omap_video_timings lb035q02_timings = {
	.vsw		= 2,
	.vfp		= 4,
	.vbp		= 18,

	.vsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
	.hsync_level	= OMAPDSS_SIG_ACTIVE_LOW,
	.data_pclk_edge	= OMAPDSS_DRIVE_SIG_RISING_EDGE,
	.de_level	= OMAPDSS_SIG_ACTIVE_HIGH,
	.sync_pclk_edge	= OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
};

static int lb035q02_panel_power_on(struct omap_dss_device *dssdev)
@@ -82,8 +88,6 @@ static int lb035q02_panel_probe(struct omap_dss_device *dssdev)
	struct lb035q02_data *ld;
	int r;

	dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
		OMAP_DSS_LCD_IHS;
	dssdev->panel.timings = lb035q02_timings;

	ld = kzalloc(sizeof(*ld), GFP_KERNEL);
+0 −1
Original line number Diff line number Diff line
@@ -473,7 +473,6 @@ static int n8x0_panel_probe(struct omap_dss_device *dssdev)

	mutex_init(&ddata->lock);

	dssdev->panel.config = OMAP_DSS_LCD_TFT;
	dssdev->panel.timings.x_res = 800;
	dssdev->panel.timings.y_res = 480;
	dssdev->ctrl.pixel_size = 16;
Loading