diff options
Diffstat (limited to 'drivers/video/omap2/displays/panel-n8x0.c')
| -rw-r--r-- | drivers/video/omap2/displays/panel-n8x0.c | 31 | 
1 files changed, 26 insertions, 5 deletions
diff --git a/drivers/video/omap2/displays/panel-n8x0.c b/drivers/video/omap2/displays/panel-n8x0.c index e6c115373c0..3fc5ad081a2 100644 --- a/drivers/video/omap2/displays/panel-n8x0.c +++ b/drivers/video/omap2/displays/panel-n8x0.c @@ -150,11 +150,17 @@ static void blizzard_ctrl_setup_update(struct omap_dss_device *dssdev,  			BLIZZARD_SRC_WRITE_LCD :  			BLIZZARD_SRC_WRITE_LCD_DESTRUCTIVE; -	omap_rfbi_configure(dssdev, 16, 8); +	omapdss_rfbi_set_pixel_size(dssdev, 16); +	omapdss_rfbi_set_data_lines(dssdev, 8); + +	omap_rfbi_configure(dssdev);  	blizzard_write(BLIZZARD_INPUT_WIN_X_START_0, tmp, 18); -	omap_rfbi_configure(dssdev, 16, 16); +	omapdss_rfbi_set_pixel_size(dssdev, 16); +	omapdss_rfbi_set_data_lines(dssdev, 16); + +	omap_rfbi_configure(dssdev);  }  static void mipid_transfer(struct spi_device *spi, int cmd, const u8 *wbuf, @@ -297,6 +303,12 @@ static int n8x0_panel_power_on(struct omap_dss_device *dssdev)  			goto err_plat_en;  	} +	omapdss_rfbi_set_size(dssdev, dssdev->panel.timings.x_res, +		dssdev->panel.timings.y_res); +	omapdss_rfbi_set_pixel_size(dssdev, dssdev->ctrl.pixel_size); +	omapdss_rfbi_set_data_lines(dssdev, dssdev->phy.rfbi.data_lines); +	omapdss_rfbi_set_interface_timings(dssdev, &dssdev->ctrl.rfbi_timings); +  	r = omapdss_rfbi_display_enable(dssdev);  	if (r)  		goto err_rfbi_en; @@ -477,6 +489,7 @@ static int n8x0_panel_probe(struct omap_dss_device *dssdev)  	dssdev->panel.timings.y_res = 480;  	dssdev->ctrl.pixel_size = 16;  	dssdev->ctrl.rfbi_timings = n8x0_panel_timings; +	dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE;  	memset(&props, 0, sizeof(props));  	props.max_brightness = 127; @@ -625,17 +638,25 @@ static int n8x0_panel_update(struct omap_dss_device *dssdev,  		u16 x, u16 y, u16 w, u16 h)  {  	struct panel_drv_data *ddata = get_drv_data(dssdev); +	u16 dw, dh;  	dev_dbg(&dssdev->dev, "update\n"); +	dw = dssdev->panel.timings.x_res; +	dh = dssdev->panel.timings.y_res; + +	if (x != 0 || y != 0 || w != dw || h != dh) { +		dev_err(&dssdev->dev, "invaid update region %d, %d, %d, %d\n", +			x, y, w, h); +		return -EINVAL; +	} +  	mutex_lock(&ddata->lock);  	rfbi_bus_lock(); -	omap_rfbi_prepare_update(dssdev, &x, &y, &w, &h); -  	blizzard_ctrl_setup_update(dssdev, x, y, w, h); -	omap_rfbi_update(dssdev, x, y, w, h, update_done, NULL); +	omap_rfbi_update(dssdev, update_done, NULL);  	mutex_unlock(&ddata->lock);  |