diff options
Diffstat (limited to 'drivers/video/imxfb.c')
| -rw-r--r-- | drivers/video/imxfb.c | 17 | 
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index e501dbc966b..0abf2bf2083 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c @@ -139,6 +139,7 @@ struct imxfb_info {  	struct clk		*clk_ahb;  	struct clk		*clk_per;  	enum imxfb_type		devtype; +	bool			enabled;  	/*  	 * These are the addresses we mapped @@ -536,6 +537,10 @@ static void imxfb_exit_backlight(struct imxfb_info *fbi)  static void imxfb_enable_controller(struct imxfb_info *fbi)  { + +	if (fbi->enabled) +		return; +  	pr_debug("Enabling LCD controller\n");  	writel(fbi->screen_dma, fbi->regs + LCDC_SSA); @@ -556,6 +561,7 @@ static void imxfb_enable_controller(struct imxfb_info *fbi)  	clk_prepare_enable(fbi->clk_ipg);  	clk_prepare_enable(fbi->clk_ahb);  	clk_prepare_enable(fbi->clk_per); +	fbi->enabled = true;  	if (fbi->backlight_power)  		fbi->backlight_power(1); @@ -565,6 +571,9 @@ static void imxfb_enable_controller(struct imxfb_info *fbi)  static void imxfb_disable_controller(struct imxfb_info *fbi)  { +	if (!fbi->enabled) +		return; +  	pr_debug("Disabling LCD controller\n");  	if (fbi->backlight_power) @@ -575,6 +584,7 @@ static void imxfb_disable_controller(struct imxfb_info *fbi)  	clk_disable_unprepare(fbi->clk_per);  	clk_disable_unprepare(fbi->clk_ipg);  	clk_disable_unprepare(fbi->clk_ahb); +	fbi->enabled = false;  	writel(0, fbi->regs + LCDC_RMCR);  } @@ -729,6 +739,8 @@ static int __init imxfb_init_fbinfo(struct platform_device *pdev)  	memset(fbi, 0, sizeof(struct imxfb_info)); +	fbi->devtype = pdev->id_entry->driver_data; +  	strlcpy(info->fix.id, IMX_NAME, sizeof(info->fix.id));  	info->fix.type			= FB_TYPE_PACKED_PIXELS; @@ -789,7 +801,6 @@ static int __init imxfb_probe(struct platform_device *pdev)  		return -ENOMEM;  	fbi = info->par; -	fbi->devtype = pdev->id_entry->driver_data;  	if (!fb_mode)  		fb_mode = pdata->mode[0].mode.name; @@ -917,7 +928,7 @@ failed_init:  	return ret;  } -static int __devexit imxfb_remove(struct platform_device *pdev) +static int imxfb_remove(struct platform_device *pdev)  {  	struct imx_fb_platform_data *pdata;  	struct fb_info *info = platform_get_drvdata(pdev); @@ -959,7 +970,7 @@ void  imxfb_shutdown(struct platform_device * dev)  static struct platform_driver imxfb_driver = {  	.suspend	= imxfb_suspend,  	.resume		= imxfb_resume, -	.remove		= __devexit_p(imxfb_remove), +	.remove		= imxfb_remove,  	.shutdown	= imxfb_shutdown,  	.driver		= {  		.name	= DRIVER_NAME,  |