Linux Framebuffer Layer development
 help / color / mirror / Atom feed
* Re: [PATCH V2 2/3] OMAPDSS: DISPC: Handle synclost errors in OMAP3
From: Tomi Valkeinen @ 2012-03-27 10:57 UTC (permalink / raw)
  To: Chandrabhanu Mahapatra; +Cc: linux-omap, linux-fbdev
In-Reply-To: <1332323516-9050-1-git-send-email-cmahapatra@ti.com>

[-- Attachment #1: Type: text/plain, Size: 6816 bytes --]

On Wed, 2012-03-21 at 15:21 +0530, Chandrabhanu Mahapatra wrote:
> In OMAP3 DISPC video overlays suffer from some undocumented horizontal position
> and timing related limitations leading to SYNCLOST errors. Whenever the image
> window is moved towards the right of the screen SYNCLOST errors become
> frequent. Checks have been implemented to see that DISPC driver rejects
> configuration exceeding above limitations.
> 
> This code was successfully tested on OMAP3. This code is written based on code
> written by Ville Syrjälä <ville.syrjala@nokia.com> in Linux OMAP kernel. Ville
> Syrjälä <ville.syrjala@nokia.com> had added checks for video overlay horizontal
> timing and DISPC horizontal blanking length limitations.
> 
> Signed-off-by: Chandrabhanu Mahapatra <cmahapatra@ti.com>
> ---
>  drivers/video/omap2/dss/dispc.c |   97 +++++++++++++++++++++++++++++----------
>  1 files changed, 72 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
> index 5a1963e..d8a1672 100644
> --- a/drivers/video/omap2/dss/dispc.c
> +++ b/drivers/video/omap2/dss/dispc.c
> @@ -1622,6 +1622,57 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
>  	}
>  }
>  
> +static int check_horiz_timing(enum omap_channel channel, u16 pos_x,
> +		u16 width, u16 height, u16 out_width, u16 out_height)

I think the function could be named check_horiz_timing_omap3 or
something. It's kinda hard to realize that this is an omap3 work-around.
Perhaps a short comment above the function would be in order.

> +{
> +	int DS = DIV_ROUND_UP(height, out_height);
> +	struct omap_dss_device *dssdev = dispc_mgr_get_device(channel);
> +	struct omap_video_timings t = dssdev->panel.timings;
> +	unsigned long nonactive, lclk, pclk;
> +	static const u8 limits[3] = { 8, 10, 20 };
> +	u64 val, blank;
> +	int i;
> +
> +	nonactive = t.x_res + t.hfp + t.hsw + t.hbp - out_width;
> +	pclk = dispc_mgr_pclk_rate(channel);
> +	lclk = dispc_mgr_lclk_rate(channel);
> +
> +	i = 0;
> +	if (out_height < height)
> +		i++;
> +	if (out_width < width)
> +		i++;
> +	blank = div_u64((u64)(t.hbp + t.hsw + t.hfp) * lclk, pclk);
> +	DSSDBG("blanking period + ppl = %llu (limit = %u)\n", blank, limits[i]);
> +	if (blank <= limits[i])
> +		return -EINVAL;
> +
> +	/*
> +	 * Pixel data should be prepared before visible display point starts.
> +	 * So, atleast DS-2 lines must have already been fetched by DISPC
> +	 * during nonactive - pos_x period.
> +	 */
> +	val = div_u64((u64)(nonactive - pos_x) * lclk, pclk);
> +	DSSDBG("(nonactive - pos_x) * pcd = %llu,"
> +		" max(0, DS - 2) * width = %d\n",
> +		val, max(0, DS - 2) * width);
> +	if (val < max(0, DS - 2) * width)
> +		return -EINVAL;
> +
> +	/*
> +	 * All lines need to be refilled during the nonactive period of which
> +	 * only one line can be loaded during the active period. So, atleast
> +	 * DS - 1 lines should be loaded during nonactive period.
> +	 */
> +	val =  div_u64((u64)nonactive * lclk, pclk);
> +	DSSDBG("nonactive * pcd  = %llu, max(0, DS - 1) * width = %d\n",
> +		val, max(0, DS - 1) * width);
> +	if (val < max(0, DS - 1) * width)
> +		return -EINVAL;
> +
> +	return 0;
> +}
> +
>  static unsigned long calc_fclk_five_taps(enum omap_channel channel, u16 width,
>  		u16 height, u16 out_width, u16 out_height,
>  		enum omap_color_mode color_mode)
> @@ -1702,7 +1753,7 @@ static int dispc_ovl_calc_scaling(enum omap_plane plane,
>  		enum omap_channel channel, u16 width, u16 height,
>  		u16 out_width, u16 out_height,
>  		enum omap_color_mode color_mode, bool *five_taps,
> -		int *x_predecim, int *y_predecim)
> +		int *x_predecim, int *y_predecim, u16 pos_x)
>  {
>  	struct omap_overlay *ovl = omap_dss_get_overlay(plane);
>  	const int maxdownscale = dss_feat_get_param_max(FEAT_PARAM_DOWNSCALE);
> @@ -1778,6 +1829,9 @@ static int dispc_ovl_calc_scaling(enum omap_plane plane,
>  			fclk = calc_fclk_five_taps(channel, in_width, in_height,
>  				out_width, out_height, color_mode);
>  
> +			error = check_horiz_timing(channel, pos_x, in_width,
> +				in_height, out_width, out_height);
> +
>  			if (in_width > maxsinglelinewidth)
>  				if (in_height > out_height &&
>  					in_height < out_height * 2)
> @@ -1785,7 +1839,7 @@ static int dispc_ovl_calc_scaling(enum omap_plane plane,
>  			if (!*five_taps)
>  				fclk = calc_fclk(channel, in_width, in_height,
>  					out_width, out_height);
> -			error = (in_width > maxsinglelinewidth * 2 ||
> +			error = (error || in_width > maxsinglelinewidth * 2 ||
>  				(in_width > maxsinglelinewidth && *five_taps) ||
>  				!fclk || fclk > dispc_fclk_rate());
>  			if (error) {
> @@ -1801,6 +1855,12 @@ static int dispc_ovl_calc_scaling(enum omap_plane plane,
>  		} while (decim_x <= *x_predecim && decim_y <= *y_predecim
>  			&& error);
>  
> +		if (check_horiz_timing(channel, pos_x, width, height,
> +			out_width, out_height)){
> +				DSSERR("horizontal timing too tight\n");
> +				return -EINVAL;
> +		}
> +
>  		if (in_width > (maxsinglelinewidth * 2)) {
>  			DSSERR("Cannot setup scaling");
>  			DSSERR("width exceeds maximum width possible");
> @@ -1901,7 +1961,7 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
>  
>  	r = dispc_ovl_calc_scaling(plane, channel, in_width, in_height,
>  			out_width, out_height, oi->color_mode, &five_taps,
> -			&x_predecim, &y_predecim);
> +			&x_predecim, &y_predecim, oi->pos_x);
>  	if (r)
>  		return r;
>  
> @@ -2472,32 +2532,19 @@ unsigned long dispc_fclk_rate(void)
>  
>  unsigned long dispc_mgr_lclk_rate(enum omap_channel channel)
>  {
> -	struct platform_device *dsidev;
> -	int lcd;
> -	unsigned long r;
> -	u32 l;
> +	unsigned long r = dispc_fclk_rate();
>  
> -	l = dispc_read_reg(DISPC_DIVISORo(channel));
> +	if (dispc_mgr_is_lcd(channel)) {
> +		u32 l;
> +		int lcd;
>  
> -	lcd = FLD_GET(l, 23, 16);
> +		l = dispc_read_reg(DISPC_DIVISORo(channel));
> +		lcd = FLD_GET(l, 23, 16);
>  
> -	switch (dss_get_lcd_clk_source(channel)) {
> -	case OMAP_DSS_CLK_SRC_FCK:
> -		r = clk_get_rate(dispc.dss_clk);
> -		break;
> -	case OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC:
> -		dsidev = dsi_get_dsidev_from_id(0);
> -		r = dsi_get_pll_hsdiv_dispc_rate(dsidev);
> -		break;
> -	case OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC:
> -		dsidev = dsi_get_dsidev_from_id(1);
> -		r = dsi_get_pll_hsdiv_dispc_rate(dsidev);
> -		break;
> -	default:
> -		BUG();
> +		return r / lcd;
> +	} else {
> +		return r;
>  	}
> -
> -	return r / lcd;
>  }

I don't the change to dispc_mgr_lclk_rate has anything to do with this
patch (fixing omap3 sync lost error). Shouldn't it be a separate fix?

 Tomi


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply

* Re: [PATCH V2 0/3] OMAPDSS: DISPC: Enable predecimation for DMA and VRFB
From: Tomi Valkeinen @ 2012-03-27 10:49 UTC (permalink / raw)
  To: Chandrabhanu Mahapatra; +Cc: linux-omap, linux-fbdev
In-Reply-To: <1332323484-8975-1-git-send-email-cmahapatra@ti.com>

[-- Attachment #1: Type: text/plain, Size: 736 bytes --]

On Wed, 2012-03-21 at 15:21 +0530, Chandrabhanu Mahapatra wrote:
> Hi everyone,
> the following patch set directs to enable predecimation for DMA and VRFB
> which consists of two pacthes.
> 
> The first patch is based on code written by Lajos Molnar <lajos@ti.com> in
> Android Kernel, which updates the code with predecimation logic thereby
> increasing the downscaling ability of the DISPC module.
> In version 2 patch description has been modified include reason for maximum
> predecimation limit of 16.

You should have the version changes separately, so that they are easy to
see. For example, a bullet list after the intro text. And you miss to
mention that this patch set adds a new patch to the series.

 Tomi


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply

* Re: [PATCH V2 2/3] OMAPDSS: DISPC: Handle synclost errors in OMAP3
From: Tomi Valkeinen @ 2012-03-27 10:43 UTC (permalink / raw)
  To: Chandrabhanu Mahapatra; +Cc: linux-omap, linux-fbdev
In-Reply-To: <1332323516-9050-1-git-send-email-cmahapatra@ti.com>

[-- Attachment #1: Type: text/plain, Size: 9900 bytes --]

Hi,

On Wed, 2012-03-21 at 15:21 +0530, Chandrabhanu Mahapatra wrote:
> In OMAP3 DISPC video overlays suffer from some undocumented horizontal position
> and timing related limitations leading to SYNCLOST errors. Whenever the image
> window is moved towards the right of the screen SYNCLOST errors become
> frequent. Checks have been implemented to see that DISPC driver rejects
> configuration exceeding above limitations.
> 
> This code was successfully tested on OMAP3. This code is written based on code
> written by Ville Syrjälä <ville.syrjala@nokia.com> in Linux OMAP kernel. Ville
> Syrjälä <ville.syrjala@nokia.com> had added checks for video overlay horizontal
> timing and DISPC horizontal blanking length limitations.
> 
> Signed-off-by: Chandrabhanu Mahapatra <cmahapatra@ti.com>
> ---
>  drivers/video/omap2/dss/dispc.c |   97 +++++++++++++++++++++++++++++----------
>  1 files changed, 72 insertions(+), 25 deletions(-)

The patch seems to be using dos line endings... Where did they come
from? The two others are fine. I think git am removed the dos line
endings, so it's fine.

 Tomi


ERROR: DOS line endings
#72: FILE: drivers/video/omap2/dss/dispc.c:1625:
+static int check_horiz_timing(enum omap_channel channel, u16 pos_x,^M$

ERROR: DOS line endings
#73: FILE: drivers/video/omap2/dss/dispc.c:1626:
+^I^Iu16 width, u16 height, u16 out_width, u16 out_height)^M$

ERROR: DOS line endings
#74: FILE: drivers/video/omap2/dss/dispc.c:1627:
+{^M$

ERROR: DOS line endings
#75: FILE: drivers/video/omap2/dss/dispc.c:1628:
+^Iint DS = DIV_ROUND_UP(height, out_height);^M$

ERROR: DOS line endings
#76: FILE: drivers/video/omap2/dss/dispc.c:1629:
+^Istruct omap_dss_device *dssdev = dispc_mgr_get_device(channel);^M$

ERROR: DOS line endings
#77: FILE: drivers/video/omap2/dss/dispc.c:1630:
+^Istruct omap_video_timings t = dssdev->panel.timings;^M$

ERROR: DOS line endings
#78: FILE: drivers/video/omap2/dss/dispc.c:1631:
+^Iunsigned long nonactive, lclk, pclk;^M$

ERROR: DOS line endings
#79: FILE: drivers/video/omap2/dss/dispc.c:1632:
+^Istatic const u8 limits[3] = { 8, 10, 20 };^M$

ERROR: DOS line endings
#80: FILE: drivers/video/omap2/dss/dispc.c:1633:
+^Iu64 val, blank;^M$

ERROR: DOS line endings
#81: FILE: drivers/video/omap2/dss/dispc.c:1634:
+^Iint i;^M$

ERROR: DOS line endings
#82: FILE: drivers/video/omap2/dss/dispc.c:1635:
+^M$

ERROR: DOS line endings
#83: FILE: drivers/video/omap2/dss/dispc.c:1636:
+^Inonactive = t.x_res + t.hfp + t.hsw + t.hbp - out_width;^M$

ERROR: DOS line endings
#84: FILE: drivers/video/omap2/dss/dispc.c:1637:
+^Ipclk = dispc_mgr_pclk_rate(channel);^M$

ERROR: DOS line endings
#85: FILE: drivers/video/omap2/dss/dispc.c:1638:
+^Ilclk = dispc_mgr_lclk_rate(channel);^M$

ERROR: DOS line endings
#86: FILE: drivers/video/omap2/dss/dispc.c:1639:
+^M$

ERROR: DOS line endings
#87: FILE: drivers/video/omap2/dss/dispc.c:1640:
+^Ii = 0;^M$

ERROR: DOS line endings
#88: FILE: drivers/video/omap2/dss/dispc.c:1641:
+^Iif (out_height < height)^M$

ERROR: DOS line endings
#89: FILE: drivers/video/omap2/dss/dispc.c:1642:
+^I^Ii++;^M$

ERROR: DOS line endings
#90: FILE: drivers/video/omap2/dss/dispc.c:1643:
+^Iif (out_width < width)^M$

ERROR: DOS line endings
#91: FILE: drivers/video/omap2/dss/dispc.c:1644:
+^I^Ii++;^M$

ERROR: DOS line endings
#92: FILE: drivers/video/omap2/dss/dispc.c:1645:
+^Iblank = div_u64((u64)(t.hbp + t.hsw + t.hfp) * lclk, pclk);^M$

ERROR: DOS line endings
#93: FILE: drivers/video/omap2/dss/dispc.c:1646:
+^IDSSDBG("blanking period + ppl = %llu (limit = %u)\n", blank,
limits[i]);^M$

WARNING: line over 80 characters
#93: FILE: drivers/video/omap2/dss/dispc.c:1646:
+	DSSDBG("blanking period + ppl = %llu (limit = %u)\n", blank,
limits[i]);

ERROR: DOS line endings
#94: FILE: drivers/video/omap2/dss/dispc.c:1647:
+^Iif (blank <= limits[i])^M$

ERROR: DOS line endings
#95: FILE: drivers/video/omap2/dss/dispc.c:1648:
+^I^Ireturn -EINVAL;^M$

ERROR: DOS line endings
#96: FILE: drivers/video/omap2/dss/dispc.c:1649:
+^M$

ERROR: trailing whitespace
#97: FILE: drivers/video/omap2/dss/dispc.c:1650:
+^I/*^M$

ERROR: trailing whitespace
#98: FILE: drivers/video/omap2/dss/dispc.c:1651:
+^I * Pixel data should be prepared before visible display point
starts.^M$

ERROR: trailing whitespace
#99: FILE: drivers/video/omap2/dss/dispc.c:1652:
+^I * So, atleast DS-2 lines must have already been fetched by DISPC^M$

ERROR: trailing whitespace
#100: FILE: drivers/video/omap2/dss/dispc.c:1653:
+^I * during nonactive - pos_x period.^M$

ERROR: DOS line endings
#101: FILE: drivers/video/omap2/dss/dispc.c:1654:
+^I */^M$

ERROR: DOS line endings
#102: FILE: drivers/video/omap2/dss/dispc.c:1655:
+^Ival = div_u64((u64)(nonactive - pos_x) * lclk, pclk);^M$

ERROR: DOS line endings
#103: FILE: drivers/video/omap2/dss/dispc.c:1656:
+^IDSSDBG("(nonactive - pos_x) * pcd = %llu,"^M$

ERROR: DOS line endings
#104: FILE: drivers/video/omap2/dss/dispc.c:1657:
+^I^I" max(0, DS - 2) * width = %d\n",^M$

ERROR: DOS line endings
#105: FILE: drivers/video/omap2/dss/dispc.c:1658:
+^I^Ival, max(0, DS - 2) * width);^M$

ERROR: DOS line endings
#106: FILE: drivers/video/omap2/dss/dispc.c:1659:
+^Iif (val < max(0, DS - 2) * width)^M$

ERROR: DOS line endings
#107: FILE: drivers/video/omap2/dss/dispc.c:1660:
+^I^Ireturn -EINVAL;^M$

ERROR: DOS line endings
#108: FILE: drivers/video/omap2/dss/dispc.c:1661:
+^M$

ERROR: trailing whitespace
#109: FILE: drivers/video/omap2/dss/dispc.c:1662:
+^I/*^M$

ERROR: trailing whitespace
#110: FILE: drivers/video/omap2/dss/dispc.c:1663:
+^I * All lines need to be refilled during the nonactive period of
which^M$

ERROR: trailing whitespace
#111: FILE: drivers/video/omap2/dss/dispc.c:1664:
+^I * only one line can be loaded during the active period. So,
atleast^M$

ERROR: trailing whitespace
#112: FILE: drivers/video/omap2/dss/dispc.c:1665:
+^I * DS - 1 lines should be loaded during nonactive period.^M$

ERROR: DOS line endings
#113: FILE: drivers/video/omap2/dss/dispc.c:1666:
+^I */^M$

ERROR: DOS line endings
#114: FILE: drivers/video/omap2/dss/dispc.c:1667:
+^Ival =  div_u64((u64)nonactive * lclk, pclk);^M$

ERROR: DOS line endings
#115: FILE: drivers/video/omap2/dss/dispc.c:1668:
+^IDSSDBG("nonactive * pcd  = %llu, max(0, DS - 1) * width = %d\n",^M$

ERROR: DOS line endings
#116: FILE: drivers/video/omap2/dss/dispc.c:1669:
+^I^Ival, max(0, DS - 1) * width);^M$

ERROR: DOS line endings
#117: FILE: drivers/video/omap2/dss/dispc.c:1670:
+^Iif (val < max(0, DS - 1) * width)^M$

ERROR: DOS line endings
#118: FILE: drivers/video/omap2/dss/dispc.c:1671:
+^I^Ireturn -EINVAL;^M$

ERROR: DOS line endings
#119: FILE: drivers/video/omap2/dss/dispc.c:1672:
+^M$

ERROR: DOS line endings
#120: FILE: drivers/video/omap2/dss/dispc.c:1673:
+^Ireturn 0;^M$

ERROR: DOS line endings
#121: FILE: drivers/video/omap2/dss/dispc.c:1674:
+}^M$

ERROR: DOS line endings
#122: FILE: drivers/video/omap2/dss/dispc.c:1675:
+^M$

ERROR: DOS line endings
#131: FILE: drivers/video/omap2/dss/dispc.c:1756:
+^I^Iint *x_predecim, int *y_predecim, u16 pos_x)^M$

ERROR: DOS line endings
#139: FILE: drivers/video/omap2/dss/dispc.c:1832:
+^I^I^Ierror = check_horiz_timing(channel, pos_x, in_width,^M$

ERROR: DOS line endings
#140: FILE: drivers/video/omap2/dss/dispc.c:1833:
+^I^I^I^Iin_height, out_width, out_height);^M$

ERROR: DOS line endings
#141: FILE: drivers/video/omap2/dss/dispc.c:1834:
+^M$

ERROR: DOS line endings
#150: FILE: drivers/video/omap2/dss/dispc.c:1842:
+^I^I^Ierror = (error || in_width > maxsinglelinewidth * 2 ||^M$

ERROR: DOS line endings
#158: FILE: drivers/video/omap2/dss/dispc.c:1858:
+^I^Iif (check_horiz_timing(channel, pos_x, width, height,^M$

ERROR: DOS line endings
#159: FILE: drivers/video/omap2/dss/dispc.c:1859:
+^I^I^Iout_width, out_height)){^M$

ERROR: DOS line endings
#160: FILE: drivers/video/omap2/dss/dispc.c:1860:
+^I^I^I^IDSSERR("horizontal timing too tight\n");^M$

ERROR: DOS line endings
#161: FILE: drivers/video/omap2/dss/dispc.c:1861:
+^I^I^I^Ireturn -EINVAL;^M$

ERROR: DOS line endings
#162: FILE: drivers/video/omap2/dss/dispc.c:1862:
+^I^I}^M$

ERROR: DOS line endings
#163: FILE: drivers/video/omap2/dss/dispc.c:1863:
+^M$

ERROR: DOS line endings
#172: FILE: drivers/video/omap2/dss/dispc.c:1964:
+^I^I^I&x_predecim, &y_predecim, oi->pos_x);^M$

ERROR: DOS line endings
#184: FILE: drivers/video/omap2/dss/dispc.c:2535:
+^Iunsigned long r = dispc_fclk_rate();^M$

ERROR: DOS line endings
#187: FILE: drivers/video/omap2/dss/dispc.c:2537:
+^Iif (dispc_mgr_is_lcd(channel)) {^M$

ERROR: DOS line endings
#188: FILE: drivers/video/omap2/dss/dispc.c:2538:
+^I^Iu32 l;^M$

ERROR: DOS line endings
#189: FILE: drivers/video/omap2/dss/dispc.c:2539:
+^I^Iint lcd;^M$

ERROR: DOS line endings
#192: FILE: drivers/video/omap2/dss/dispc.c:2541:
+^I^Il = dispc_read_reg(DISPC_DIVISORo(channel));^M$

ERROR: DOS line endings
#193: FILE: drivers/video/omap2/dss/dispc.c:2542:
+^I^Ilcd = FLD_GET(l, 23, 16);^M$

ERROR: DOS line endings
#209: FILE: drivers/video/omap2/dss/dispc.c:2544:
+^I^Ireturn r / lcd;^M$

ERROR: DOS line endings
#210: FILE: drivers/video/omap2/dss/dispc.c:2545:
+^I} else {^M$

ERROR: DOS line endings
#211: FILE: drivers/video/omap2/dss/dispc.c:2546:
+^I^Ireturn r;^M$

total: 72 errors, 1 warnings, 143 lines checked

NOTE: whitespace errors detected, you may wish to use scripts/cleanpatch
or
      scripts/cleanfile

123.mbox has style problems, please review.

If any of these errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply

* [PATCH] video:uvesafb: Fix oops that uvesafb try to execute NX-protected page
From: Wang YanQing @ 2012-03-27 10:01 UTC (permalink / raw)
  To: FlorianSchandinat; +Cc: linux-fbdev, linux-kernel, spock
In-Reply-To: <20120302004850.GA4139@udknight>


Ok! I try to check pcibios_enabled first, but get some opposition by Alan Cox,
but I want to make thing work and fix the oops, so I choice the simple way to
check the (__supported_pte_mask & _PAGE_NX) instead of to check this variable plus
pci kernel boot parameter, pci mmconfig works or not, and more, and more. It is not
the best method, but it works and maybe all will feel happy.

Signed-off-by: Wang YanQing <udknight@gmail.com>
---
 drivers/video/uvesafb.c |   11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/video/uvesafb.c b/drivers/video/uvesafb.c
index 260cca7..26e83d7 100644
--- a/drivers/video/uvesafb.c
+++ b/drivers/video/uvesafb.c
@@ -815,8 +815,15 @@ static int __devinit uvesafb_vbe_init(struct fb_info *info)
 	par->pmi_setpal = pmi_setpal;
 	par->ypan = ypan;
 
-	if (par->pmi_setpal || par->ypan)
-		uvesafb_vbe_getpmi(task, par);
+	if (par->pmi_setpal || par->ypan) {
+		if (__supported_pte_mask & _PAGE_NX) {
+			par->pmi_setpal = par->ypan = 0;
+			printk(KERN_WARNING "uvesafb: NX protection is actively."
+				"We have better not to use the PMI.\n");
+		} else {
+			uvesafb_vbe_getpmi(task, par);
+		}
+	}
 #else
 	/* The protected mode interface is not available on non-x86. */
 	par->pmi_setpal = par->ypan = 0;
-- 
1.7.9.2.315.g25a78

^ permalink raw reply related

* [PATCH] video: pxa3xx-gcu: Simplify the logic to exit while loop in pxa3xx_gcu_wait_idle
From: Axel Lin @ 2012-03-27  3:15 UTC (permalink / raw)
  To: linux-kernel
  Cc: Daniel Mack, Sven Neumann, Janine Kropp, Denis Oliver Kropp,
	Florian Tobias Schandinat, linux-fbdev

If wait_event_interruptible_timeout returns a positive value, it means
the condition evaluated is true. Which means priv->shared->hw_running is false.
And then we will exit the loop.

This patch simplifies the logic to exit the while loop.

Signed-off-by: Axel Lin <axel.lin@gmail.com>
---
 drivers/video/pxa3xx-gcu.c |    5 +----
 1 files changed, 1 insertions(+), 4 deletions(-)

diff --git a/drivers/video/pxa3xx-gcu.c b/drivers/video/pxa3xx-gcu.c
index 1d71c08..0b4ae0c 100644
--- a/drivers/video/pxa3xx-gcu.c
+++ b/drivers/video/pxa3xx-gcu.c
@@ -316,12 +316,9 @@ pxa3xx_gcu_wait_idle(struct pxa3xx_gcu_priv *priv)
 		ret = wait_event_interruptible_timeout(priv->wait_idle,
 					!priv->shared->hw_running, HZ*4);
 
-		if (ret < 0)
+		if (ret != 0)
 			break;
 
-		if (ret > 0)
-			continue;
-
 		if (gc_readl(priv, REG_GCRBEXHR) = rbexhr &&
 		    priv->shared->num_interrupts = num) {
 			QERROR("TIMEOUT");
-- 
1.7.5.4




^ permalink raw reply related

* [PATCH] video/console: Clip the right margin clear to the visible region
From: Chris Wilson @ 2012-03-26 20:17 UTC (permalink / raw)
  To: linux-fbdev; +Cc: linux-kernel, Chris Wilson, Florian Tobias Schandinat

For some unknown reason, yres_virtual was 2x larger the the size specified
by i915 and so when blit_clear_margins() tried to clear the full virtual
right-hand margin it tried to write far beyond the end of the buffer.

This limits the clear to only the visible portion of the right-hand
margin, similar to how the bottom margin is treated.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id8138
Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/video/console/bitblit.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/video/console/bitblit.c b/drivers/video/console/bitblit.c
index 28b1a83..9f89e5a 100644
--- a/drivers/video/console/bitblit.c
+++ b/drivers/video/console/bitblit.c
@@ -219,9 +219,9 @@ static void bit_clear_margins(struct vc_data *vc, struct fb_info *info,
 
 	if (rw && !bottom_only) {
 		region.dx = info->var.xoffset + rs;
-		region.dy = 0;
+		region.dy = info->var.yoffset;
 		region.width = rw;
-		region.height = info->var.yres_virtual;
+		region.height = info->var.yres;
 		info->fbops->fb_fillrect(info, &region);
 	}
 
-- 
1.7.9.1


^ permalink raw reply related

* [PATCH v3 2/2] ARM: Exynos: Use lcd power control driver for lcd panel
From: Thomas Abraham @ 2012-03-26  8:58 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <1332751600-11371-1-git-send-email-thomas.abraham@linaro.org>

The Hydis hv070wsa lcd panel used with the Origen board uses a gpio
for reset and the Vcc supply to the panel can be controlled using
a voltage regulator. Switch to using the lcd power control driver
for controlling the power to the lcd panel.

Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
---
 arch/arm/mach-exynos/mach-origen.c |   29 ++++++-----------------------
 1 files changed, 6 insertions(+), 23 deletions(-)

diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c
index d3b2e9d..6c4997c 100644
--- a/arch/arm/mach-exynos/mach-origen.c
+++ b/arch/arm/mach-exynos/mach-origen.c
@@ -26,7 +26,7 @@
 #include <asm/hardware/gic.h>
 #include <asm/mach-types.h>
 
-#include <video/platform_lcd.h>
+#include <video/lcd_pwrctrl.h>
 
 #include <plat/regs-serial.h>
 #include <plat/regs-fb-v4.h>
@@ -129,7 +129,7 @@ static struct regulator_consumer_supply __initdata buck3_consumer[] = {
 	REGULATOR_SUPPLY("vdd_g3d", "mali_drm"), /* G3D */
 };
 static struct regulator_consumer_supply __initdata buck7_consumer[] = {
-	REGULATOR_SUPPLY("vcc", "platform-lcd"), /* LCD */
+	REGULATOR_SUPPLY("vcc-lcd", "lcd-pwrctrl.0"), /* LCD */
 };
 
 static struct regulator_init_data __initdata max8997_ldo1_data = {
@@ -384,7 +384,7 @@ static struct regulator_init_data __initdata max8997_buck7_data = {
 		.name		= "VDD_LCD_3.3V",
 		.min_uV		= 3300000,
 		.max_uV		= 3300000,
-		.boot_on	= 1,
+		.boot_on	= 0,
 		.apply_uV	= 1,
 		.valid_ops_mask	= REGULATOR_CHANGE_STATUS,
 		.state_mem	= {
@@ -553,29 +553,12 @@ static struct platform_device origen_device_gpiokeys = {
 	},
 };
 
-static void lcd_hv070wsa_set_power(struct plat_lcd_data *pd, unsigned int power)
-{
-	int ret;
-
-	if (power)
-		ret = gpio_request_one(EXYNOS4_GPE3(4),
-					GPIOF_OUT_INIT_HIGH, "GPE3_4");
-	else
-		ret = gpio_request_one(EXYNOS4_GPE3(4),
-					GPIOF_OUT_INIT_LOW, "GPE3_4");
-
-	gpio_free(EXYNOS4_GPE3(4));
-
-	if (ret)
-		pr_err("failed to request gpio for LCD power: %d\n", ret);
-}
-
-static struct plat_lcd_data origen_lcd_hv070wsa_data = {
-	.set_power = lcd_hv070wsa_set_power,
+static struct lcd_pwrctrl_data origen_lcd_hv070wsa_data = {
+	.gpio	= EXYNOS4_GPE3(4),
 };
 
 static struct platform_device origen_lcd_hv070wsa = {
-	.name			= "platform-lcd",
+	.name			= "lcd-pwrctrl",
 	.dev.parent		= &s5p_device_fimd0.dev,
 	.dev.platform_data	= &origen_lcd_hv070wsa_data,
 };
-- 
1.6.6.rc2


^ permalink raw reply related

* [PATCH v3 1/2] backlight: lcd: add driver for raster-type lcd's with gpio controlled panel reset
From: Thomas Abraham @ 2012-03-26  8:58 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <1332751600-11371-1-git-send-email-thomas.abraham@linaro.org>

Add a lcd panel driver for simple raster-type lcd's which uses a gpio
controlled panel reset. The driver controls the nRESET line of the panel
using a gpio connected from the host system. The Vcc supply to the panel
is (optionally) controlled using a voltage regulator. This driver excludes
support for lcd panels that use a serial command interface or direct
memory mapped IO interface.

Suggested-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
---
 .../devicetree/bindings/lcd/lcd-pwrctrl.txt        |   36 +++
 drivers/video/backlight/Kconfig                    |    7 +
 drivers/video/backlight/Makefile                   |    1 +
 drivers/video/backlight/lcd_pwrctrl.c              |  226 ++++++++++++++++++++
 include/video/lcd_pwrctrl.h                        |   24 ++
 5 files changed, 294 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/lcd/lcd-pwrctrl.txt
 create mode 100644 drivers/video/backlight/lcd_pwrctrl.c
 create mode 100644 include/video/lcd_pwrctrl.h

diff --git a/Documentation/devicetree/bindings/lcd/lcd-pwrctrl.txt b/Documentation/devicetree/bindings/lcd/lcd-pwrctrl.txt
new file mode 100644
index 0000000..22604a2
--- /dev/null
+++ b/Documentation/devicetree/bindings/lcd/lcd-pwrctrl.txt
@@ -0,0 +1,36 @@
+* Power controller for simple lcd panels
+
+Some LCD panels provide a simple control interface for the host system. The
+control mechanism would include a nRESET line connected to a gpio of the host
+system and a Vcc supply line which the host can optionally be controlled using
+a voltage regulator. Such simple panels do not support serial command
+interface (such as i2c or spi) or memory-mapped-io interface.
+
+Required properties:
+- compatible: should be 'lcd-powercontrol'
+
+- lcd-reset-gpio: The GPIO number of the host system used to control the
+  nRESET line. The format of the gpio specifier depends on the gpio controller
+  of the host system.
+
+Optional properties:
+- lcd-reset-active-high: When the nRESET line is asserted low, the lcd panel
+  is reset and stays in reset mode as long as the nRESET line is asserted low.
+  This is the default behaviour of most lcd panels. If a lcd panel requires the
+  nRESET line to be asserted high for panel reset, then this property is used.
+  Note: Some platforms might allow inverting the polarity of the gpio output
+  in the 'lcd-reset-gpio' gpio specifier. On such platforms, if the polarity
+  is used to control the output of the gpio, then this property should not be
+  used.
+
+- vcc-lcd-supply: phandle of the regulator that controls the vcc supply to
+  the lcd panel.
+
+Example:
+
+	lcd_pwrctrl {
+		compatible = "lcd-powercontrol";
+		lcd-reset-gpio = <&gpe0 4 1 0 0>;
+		lcd-reset-active-high;
+		lcd-vcc-supply = <&regulator7>;
+	};
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
index 681b369..9b52ea8 100644
--- a/drivers/video/backlight/Kconfig
+++ b/drivers/video/backlight/Kconfig
@@ -86,6 +86,13 @@ config LCD_PLATFORM
 	  This driver provides a platform-device registered LCD power
 	  control interface.
 
+config LCD_PWRCTRL
+	tristate "LCD panel power control"
+	help
+	  Say y here, if you have a lcd panel that allows reset and vcc to be
+	  controlled by the host system, and which does not use a serial command
+	  interface (such as i2c or spi) or memory-mapped-io interface.
+
 config LCD_TOSA
 	tristate "Sharp SL-6000 LCD Driver"
 	depends on SPI && MACH_TOSA
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
index af5cf65..d85c8d2 100644
--- a/drivers/video/backlight/Makefile
+++ b/drivers/video/backlight/Makefile
@@ -8,6 +8,7 @@ obj-$(CONFIG_LCD_LMS283GF05)	   += lms283gf05.o
 obj-$(CONFIG_LCD_LTV350QV)	   += ltv350qv.o
 obj-$(CONFIG_LCD_ILI9320)	   += ili9320.o
 obj-$(CONFIG_LCD_PLATFORM)	   += platform_lcd.o
+obj-$(CONFIG_LCD_PWRCTRL)	   += lcd_pwrctrl.o
 obj-$(CONFIG_LCD_VGG2432A4)	   += vgg2432a4.o
 obj-$(CONFIG_LCD_TDO24M)	   += tdo24m.o
 obj-$(CONFIG_LCD_TOSA)		   += tosa_lcd.o
diff --git a/drivers/video/backlight/lcd_pwrctrl.c b/drivers/video/backlight/lcd_pwrctrl.c
new file mode 100644
index 0000000..917d842
--- /dev/null
+++ b/drivers/video/backlight/lcd_pwrctrl.c
@@ -0,0 +1,226 @@
+/*
+ * Simple lcd panel power control driver.
+ *
+ * Copyright (c) 2011-2012 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2011-2012 Linaro Ltd.
+ *
+ * This driver is for controlling power for raster type lcd panels that requires
+ * its nRESET interface line to be connected and controlled by a GPIO of the
+ * host system and the Vcc line controlled by a voltage regulator.  This
+ * excludes support for lcd panels that use a serial command interface or direct
+ * memory mapped IO interface.
+ *
+ * The nRESET interface line of the panel should be connected to a gpio of the
+ * host system. The Vcc pin is controlled using a external volatage regulator.
+ * Panel backlight is not controlled by this driver.
+ *
+ * This driver is derived from platform-lcd.c which was written by
+ * Ben Dooks <ben@simtec.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+*/
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/fb.h>
+#include <linux/lcd.h>
+#include <linux/gpio.h>
+#include <linux/of.h>
+#include <linux/of_gpio.h>
+#include <linux/regulator/consumer.h>
+#include <video/lcd_pwrctrl.h>
+
+struct lcd_pwrctrl {
+	struct device		*dev;
+	struct lcd_device	*lcd;
+	struct lcd_pwrctrl_data	*pdata;
+	struct regulator	*regulator;
+	unsigned int		power;
+	bool			suspended;
+	bool			pwr_en;
+};
+
+static int lcd_pwrctrl_get_power(struct lcd_device *lcd)
+{
+	struct lcd_pwrctrl *lp = lcd_get_data(lcd);
+	return lp->power;
+}
+
+static int lcd_pwrctrl_set_power(struct lcd_device *lcd, int power)
+{
+	struct lcd_pwrctrl *lp = lcd_get_data(lcd);
+	struct lcd_pwrctrl_data *pd = lp->pdata;
+	bool lcd_enable;
+	int lcd_reset, ret = 0;
+
+	lcd_enable = (power = FB_BLANK_POWERDOWN || lp->suspended) ? 0 : 1;
+	lcd_reset = (pd->invert) ? !lcd_enable : lcd_enable;
+
+	if (lp->pwr_en = lcd_enable)
+		return 0;
+
+	if (!IS_ERR_OR_NULL(lp->regulator)) {
+		if (lcd_enable) {
+			if (regulator_enable(lp->regulator)) {
+				dev_info(lp->dev, "regulator enable failed\n");
+				ret = -EPERM;
+			}
+		} else {
+			if (regulator_disable(lp->regulator)) {
+				dev_info(lp->dev, "regulator disable failed\n");
+				ret = -EPERM;
+			}
+		}
+	}
+
+	gpio_direction_output(lp->pdata->gpio, lcd_reset);
+	lp->power = power;
+	lp->pwr_en = lcd_enable;
+	return ret;
+}
+
+static int lcd_pwrctrl_check_fb(struct lcd_device *lcd, struct fb_info *info)
+{
+	struct lcd_pwrctrl *lp = lcd_get_data(lcd);
+	return lp->dev->parent = info->device;
+}
+
+static struct lcd_ops lcd_pwrctrl_ops = {
+	.get_power	= lcd_pwrctrl_get_power,
+	.set_power	= lcd_pwrctrl_set_power,
+	.check_fb	= lcd_pwrctrl_check_fb,
+};
+
+#ifdef CONFIG_OF
+static void __devinit lcd_pwrctrl_parse_dt(struct device *dev,
+					struct lcd_pwrctrl_data *pdata)
+{
+	struct device_node *np = dev->of_node;
+
+	pdata->gpio = of_get_named_gpio(np, "lcd-reset-gpio", 0);
+	if (of_get_property(np, "lcd-reset-active-high", NULL))
+		pdata->invert = true;
+}
+#endif
+
+static int __devinit lcd_pwrctrl_probe(struct platform_device *pdev)
+{
+	struct lcd_pwrctrl *lp;
+	struct lcd_pwrctrl_data *pdata = pdev->dev.platform_data;
+	struct device *dev = &pdev->dev;
+	int err;
+
+#ifdef CONFIG_OF
+	if (dev->of_node) {
+		pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
+		if (!pdata) {
+			dev_err(dev, "memory allocation for pdata failed\n");
+			return -ENOMEM;
+		}
+		lcd_pwrctrl_parse_dt(dev, pdata);
+	}
+#endif
+
+	if (!pdata) {
+		dev_err(dev, "platform data not available\n");
+		return -EINVAL;
+	}
+
+	lp = devm_kzalloc(dev, sizeof(struct lcd_pwrctrl), GFP_KERNEL);
+	if (!lp) {
+		dev_err(dev, "memory allocation failed for private data\n");
+		return -ENOMEM;
+	}
+
+	err = gpio_request(pdata->gpio, "LCD-nRESET");
+	if (err) {
+		dev_err(dev, "gpio [%d] request failed\n", pdata->gpio);
+		return err;
+	}
+
+	/*
+	 * If power to lcd and/or lcd interface is controlled using a regulator,
+	 * get the handle to the regulator for later use during power switching.
+	 */
+	lp->regulator = devm_regulator_get(dev, "vcc-lcd");
+	if (IS_ERR(lp->regulator))
+		dev_info(dev, "could not find regulator\n");
+
+	lp->dev = dev;
+	lp->pdata = pdata;
+	lp->lcd = lcd_device_register(dev_name(dev), dev, lp, &lcd_pwrctrl_ops);
+	if (IS_ERR(lp->lcd)) {
+		dev_err(dev, "cannot register lcd device\n");
+		gpio_free(pdata->gpio);
+		return PTR_ERR(lp->lcd);
+	}
+
+	platform_set_drvdata(pdev, lp);
+	lcd_pwrctrl_set_power(lp->lcd, FB_BLANK_NORMAL);
+	return 0;
+}
+
+static int __devexit lcd_pwrctrl_remove(struct platform_device *pdev)
+{
+	struct lcd_pwrctrl *lp = platform_get_drvdata(pdev);
+	lcd_device_unregister(lp->lcd);
+	gpio_free(lp->pdata->gpio);
+	return 0;
+}
+
+#ifdef CONFIG_PM
+static int lcd_pwrctrl_suspend(struct device *dev)
+{
+	struct lcd_pwrctrl *lp = dev_get_drvdata(dev);
+
+	lp->suspended = true;
+	lcd_pwrctrl_set_power(lp->lcd, FB_BLANK_POWERDOWN);
+	return 0;
+}
+
+static int lcd_pwrctrl_resume(struct device *dev)
+{
+	struct lcd_pwrctrl *lp = dev_get_drvdata(dev);
+
+	lp->suspended = false;
+	lcd_pwrctrl_set_power(lp->lcd, FB_BLANK_UNBLANK);
+	return 0;
+}
+
+static const struct dev_pm_ops lcd_pwrctrl_dev_pm_ops = {
+	.suspend	= lcd_pwrctrl_suspend,
+	.resume		= lcd_pwrctrl_resume,
+};
+
+#define LCD_PWRCTRL_DEV_PM_OPS	(&lcd_pwrctrl_dev_pm_ops)
+#else
+#define LCD_PWRCTRL_DEV_PM_OPS	NULL
+#endif /* CONFIG_PM */
+
+#ifdef CONFIG_OF
+static const struct of_device_id lcd_pwrctrl_match[] = {
+	{ .compatible = "lcd-powercontrol", },
+	{},
+};
+MODULE_DEVICE_TABLE(of, lcd_pwrctrl_match);
+#endif
+
+static struct platform_driver lcd_pwrctrl_driver = {
+	.driver		= {
+		.name	= "lcd-pwrctrl",
+		.owner	= THIS_MODULE,
+		.pm	= LCD_PWRCTRL_DEV_PM_OPS,
+		.of_match_table	= of_match_ptr(lcd_pwrctrl_match),
+	},
+	.probe		= lcd_pwrctrl_probe,
+	.remove		= lcd_pwrctrl_remove,
+};
+
+module_platform_driver(lcd_pwrctrl_driver);
+
+MODULE_AUTHOR("Thomas Abraham <thomas.ab@samsung.com>");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("platform:lcd-pwrctrl");
diff --git a/include/video/lcd_pwrctrl.h b/include/video/lcd_pwrctrl.h
new file mode 100644
index 0000000..924bfd2
--- /dev/null
+++ b/include/video/lcd_pwrctrl.h
@@ -0,0 +1,24 @@
+/*
+ * Simple lcd panel power control driver.
+ *
+ * Copyright (c) 2011-2012 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2011-2012 Linaro Ltd.
+ *
+ * This driver is derived from platform-lcd.h which was written by
+ * Ben Dooks <ben@simtec.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+*/
+
+/**
+ * struct lcd_pwrctrl_data - platform data for lcd_pwrctrl driver.
+ * @gpio: GPIO number of the host system that connects to nRESET line.
+ * @invert: True, if output of gpio connected to nRESET should be inverted.
+ */
+struct lcd_pwrctrl_data {
+	int		gpio;
+	bool		invert;
+};
-- 
1.6.6.rc2


^ permalink raw reply related

* [PATCH v3 0/2] Add lcd driver for panels with gpio controlled panel reset
From: Thomas Abraham @ 2012-03-26  8:58 UTC (permalink / raw)
  To: linux-arm-kernel

Changes since v2:
- Reworked as per comments[1] from Mark Brown.
  - removed the setting of regulator voltage.

[1] http://www.mail-archive.com/linux-samsung-soc@vger.kernel.org/msg08743.html

Changes since v1:
- Fixed gpio leak, added MODULE_DEVICE_TABLE and dev_pm_ops.
- Changed device tree bindings.

This patchset adds support for passive panels that use a nRESET line which is
controlled by a GPIO of the host system and which do not use a serial comamnd
interface (i2c or spi) or memory-mapped-io interface. Platforms that do not
require any additional control apart from the nRESET line can use this driver
for lcd power control.

The first patch adds driver for passive raster-type lcd's with gpio controlled
panel reset. It includes support for both dt and non-dt platforms. The second
patch adds support for using this driver on Origen board.

Thomas Abraham (2):
  backlight: lcd: add driver for raster-type lcd's with gpio controlled panel reset
  ARM: Exynos: Use lcd power control driver for lcd panel

 .../devicetree/bindings/lcd/lcd-pwrctrl.txt        |   36 +++
 arch/arm/mach-exynos/mach-origen.c                 |   29 +--
 drivers/video/backlight/Kconfig                    |    7 +
 drivers/video/backlight/Makefile                   |    1 +
 drivers/video/backlight/lcd_pwrctrl.c              |  226 ++++++++++++++++++++
 include/video/lcd_pwrctrl.h                        |   24 ++
 6 files changed, 300 insertions(+), 23 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/lcd/lcd-pwrctrl.txt
 create mode 100644 drivers/video/backlight/lcd_pwrctrl.c
 create mode 100644 include/video/lcd_pwrctrl.h


^ permalink raw reply

* RE: usage of height and width in fb_var_screeninfo
From: Jingoo Han @ 2012-03-26  8:15 UTC (permalink / raw)
  To: linux-fbdev
In-Reply-To: <CAGA24ML642uOP1tEp+VOTe0OZQ9S3HnP8Zi+N1n8X-QsjP9P2w@mail.gmail.com>

On Thu, Mar 22, 2012 at 8:53, Jun Nie <niej0001@gmail.com> wrote:
> Does anyone happen to know the usage of below member in
> fb_var_screeninfo? I do not know whether mm stand for geometry size or
> memory, can not find its usage in any driver neither. We considering
> to use it as zoomed size.
> 
> struct fb_var_screeninfo {
>         __u32 height;                   /* height of picture in mm    */
>         __u32 width;                    /* width of picture in mm     */
> 

Yes, right. Both thins are geometry sizes of LCD panel in millimeters.
Some OS platform needs these parameters.
Good luck.

Best regards,
Jingoo Han



^ permalink raw reply

* Re: [PATCH] x86: export 'pcibios_enabled'
From: Wang YanQing @ 2012-03-26  0:27 UTC (permalink / raw)
  To: Alan Cox, Florian Tobias Schandinat, H. Peter Anvin, Randy Dunlap,
	Stephen Rothwell, linux-next, LKML, Michal Januszewski,
	linux-fbdev, x86, Andrew Morton
In-Reply-To: <20120322004135.GA4253@udknight>

On Thu, Mar 22, 2012 at 08:41:35AM +0800, Wang YanQing wrote:
> On Wed, Mar 14, 2012 at 11:21:37AM +0000, Alan Cox wrote:
> > You can use set_memory_x() to mark memory executable (and _nx to set it back).
> > 
> NO I can't, if I set_memory_x and don't set pcibios_enabled = 1, then
> static_protections will still failed because pcibios_enabled = 0, 
> and I don't want to use set_memory_x, because I don't want to give the user 
> of uvesafb that feeling "I will lost BIOS NX protection if I choice uvesafb."
> 
> > If you really need to know if NX is being used then the check
> > 
> > 	if (__supported_pte_mask & PTE_NX)
> > 
> > will do the trick and the variable is exported.
> I don't understand what do you mean, do you means CONFIG_X86_PAE for 32? Or CONFIG_X86_64?
> when NX is being used, the pci bios is NX or not also depend on
> ACPI.ACPI on or off all will influnce the code path in pci_arch_init,
> decide the set_bios_x have chance to execute or not.See
> https://lkml.org/lkml/2011/11/16/84
> 
> By the way _PAGE_NX instead of PTE_NX, right?
> 
> > I'd suggest however you wrap that in a cpu_has_nx() type macro somewhere
> > in the arch headers.
> > 
> The same above.
> 
> > If you go poking around pcibios values you are going to get burned if
> > someone is ever bored enough to make NX and PCIBIOS work together
> > differently.
> > 
> Indeed according to 5bd5a452662bc37c54fb6828db1a3faf87e6511c, who bring me 
> the trouble, check the pcibios_enabled is the only simple and good way to 
> resolve the Oops I meet.
> 
> If you really don't want it, and if I am not all wrong about your "helper method",
> you means you want export the below:
> int check_pcibios_enabled()?
> See https://lkml.org/lkml/2012/2/26/124
> 
> Thanks.
> 
Sorry for the delay reply and cross email threads,  Alan Cox.
But I still can't find a better way then to check the pcibios_enabled variable,
any better suggestion?

^ permalink raw reply

* [PATCH v3 4/4] ARM: Samsung: Rework platform data of s3c-fb driver
From: Thomas Abraham @ 2012-03-24 16:40 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <1332606528-32338-1-git-send-email-thomas.abraham@linaro.org>

For all the Samsung SoC based boards which have the platform data for
s3c-fb driver, the 'default_win' element in the platform data is removed
and the lcd panel video timing values are moved out of individual window
configuration data.

Cc: Jingoo Han <jg1.han@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: JeongHyeon Kim <jhkim@insignal.co.kr>
Cc: Kukjin Kim <kgene.kim@samsung.com>
Cc: Heiko Stuebner <heiko@sntech.de>
Cc: Ben Dooks <ben-linux@fluff.org>
Cc: Kwangwoo Lee <kwangwoo.lee@gmail.com>
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: Peter Korsgaard <jacmet@sunsite.dk>
Cc: Darius Augulis <augulis.darius@gmail.com>
Cc: Maurus Cuelenaere <mcuelenaere@gmail.com>
Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
---
 arch/arm/mach-exynos/mach-nuri.c           |   26 ++++++++------
 arch/arm/mach-exynos/mach-origen.c         |   24 +++++++-----
 arch/arm/mach-exynos/mach-smdkv310.c       |   28 ++++++++------
 arch/arm/mach-exynos/mach-universal_c210.c |   26 ++++++++------
 arch/arm/mach-s3c24xx/mach-smdk2416.c      |   27 ++++++++------
 arch/arm/mach-s3c64xx/mach-anw6410.c       |   25 +++++++------
 arch/arm/mach-s3c64xx/mach-crag6410.c      |   25 +++++++------
 arch/arm/mach-s3c64xx/mach-hmt.c           |   24 +++++++-----
 arch/arm/mach-s3c64xx/mach-mini6410.c      |   54 ++++++++++++++++-----------
 arch/arm/mach-s3c64xx/mach-real6410.c      |   52 +++++++++++++++-----------
 arch/arm/mach-s3c64xx/mach-smartq5.c       |   26 ++++++++------
 arch/arm/mach-s3c64xx/mach-smartq7.c       |   26 ++++++++------
 arch/arm/mach-s3c64xx/mach-smdk6410.c      |   25 +++++++------
 arch/arm/mach-s5p64x0/mach-smdk6440.c      |   24 +++++++-----
 arch/arm/mach-s5p64x0/mach-smdk6450.c      |   24 +++++++-----
 arch/arm/mach-s5pc100/mach-smdkc100.c      |   27 ++++++++------
 arch/arm/mach-s5pv210/mach-aquila.c        |   36 ++++++++----------
 arch/arm/mach-s5pv210/mach-goni.c          |   26 ++++++++------
 arch/arm/mach-s5pv210/mach-smdkv210.c      |   24 +++++++-----
 19 files changed, 311 insertions(+), 238 deletions(-)

diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c
index 7ac81ce..a7e6731 100644
--- a/arch/arm/mach-exynos/mach-nuri.c
+++ b/arch/arm/mach-exynos/mach-nuri.c
@@ -212,25 +212,29 @@ static struct platform_device nuri_gpio_keys = {
 
 /* Frame Buffer */
 static struct s3c_fb_pd_win nuri_fb_win0 = {
-	.win_mode = {
-		.left_margin	= 64,
-		.right_margin	= 16,
-		.upper_margin	= 64,
-		.lower_margin	= 1,
-		.hsync_len	= 48,
-		.vsync_len	= 3,
-		.xres		= 1024,
-		.yres		= 600,
-		.refresh	= 60,
-	},
 	.max_bpp	= 24,
 	.default_bpp	= 16,
+	.xres		= 1024,
+	.yres		= 600,
 	.virtual_x	= 1024,
 	.virtual_y	= 2 * 600,
 };
 
+static struct fb_videomode nuri_lcd_timing = {
+	.left_margin	= 64,
+	.right_margin	= 16,
+	.upper_margin	= 64,
+	.lower_margin	= 1,
+	.hsync_len	= 48,
+	.vsync_len	= 3,
+	.xres		= 1024,
+	.yres		= 600,
+	.refresh	= 60,
+};
+
 static struct s3c_fb_platdata nuri_fb_pdata __initdata = {
 	.win[0]		= &nuri_fb_win0,
+	.vtiming	= &nuri_lcd_timing,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB |
 			  VIDCON0_CLKSEL_LCD,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c
index 25c9b46..de71237 100644
--- a/arch/arm/mach-exynos/mach-origen.c
+++ b/arch/arm/mach-exynos/mach-origen.c
@@ -583,22 +583,26 @@ static struct platform_device origen_lcd_hv070wsa = {
 };
 
 static struct s3c_fb_pd_win origen_fb_win0 = {
-	.win_mode = {
-		.left_margin	= 64,
-		.right_margin	= 16,
-		.upper_margin	= 64,
-		.lower_margin	= 16,
-		.hsync_len	= 48,
-		.vsync_len	= 3,
-		.xres		= 1024,
-		.yres		= 600,
-	},
+	.xres			= 1024,
+	.yres			= 600,
 	.max_bpp		= 32,
 	.default_bpp		= 24,
 };
 
+static struct fb_videomode origen_lcd_timing = {
+	.left_margin	= 64,
+	.right_margin	= 16,
+	.upper_margin	= 64,
+	.lower_margin	= 16,
+	.hsync_len	= 48,
+	.vsync_len	= 3,
+	.xres		= 1024,
+	.yres		= 600,
+};
+
 static struct s3c_fb_platdata origen_lcd_pdata __initdata = {
 	.win[0]		= &origen_fb_win0,
+	.vtiming	= &origen_lcd_timing,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC |
 				VIDCON1_INV_VCLK,
diff --git a/arch/arm/mach-exynos/mach-smdkv310.c b/arch/arm/mach-exynos/mach-smdkv310.c
index f08529f..6c00fa6 100644
--- a/arch/arm/mach-exynos/mach-smdkv310.c
+++ b/arch/arm/mach-exynos/mach-smdkv310.c
@@ -157,22 +157,26 @@ static struct platform_device smdkv310_lcd_lte480wv = {
 };
 
 static struct s3c_fb_pd_win smdkv310_fb_win0 = {
-	.win_mode = {
-		.left_margin	= 13,
-		.right_margin	= 8,
-		.upper_margin	= 7,
-		.lower_margin	= 5,
-		.hsync_len	= 3,
-		.vsync_len	= 1,
-		.xres		= 800,
-		.yres		= 480,
-	},
-	.max_bpp		= 32,
-	.default_bpp		= 24,
+	.max_bpp	= 32,
+	.default_bpp	= 24,
+	.xres		= 800,
+	.yres		= 480,
+};
+
+static struct fb_videomode smdkv310_lcd_timing = {
+	.left_margin	= 13,
+	.right_margin	= 8,
+	.upper_margin	= 7,
+	.lower_margin	= 5,
+	.hsync_len	= 3,
+	.vsync_len	= 1,
+	.xres		= 800,
+	.yres		= 480,
 };
 
 static struct s3c_fb_platdata smdkv310_lcd0_pdata __initdata = {
 	.win[0]		= &smdkv310_fb_win0,
+	.vtiming	= &smdkv310_lcd_timing,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
 	.setup_gpio	= exynos4_fimd0_gpio_setup_24bpp,
diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c
index 57e4418..67a9547 100644
--- a/arch/arm/mach-exynos/mach-universal_c210.c
+++ b/arch/arm/mach-exynos/mach-universal_c210.c
@@ -813,25 +813,29 @@ static struct i2c_board_info i2c1_devs[] __initdata = {
 
 /* Frame Buffer */
 static struct s3c_fb_pd_win universal_fb_win0 = {
-	.win_mode = {
-		.left_margin	= 16,
-		.right_margin	= 16,
-		.upper_margin	= 2,
-		.lower_margin	= 28,
-		.hsync_len	= 2,
-		.vsync_len	= 1,
-		.xres		= 480,
-		.yres		= 800,
-		.refresh	= 55,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 480,
+	.yres		= 800,
 	.virtual_x	= 480,
 	.virtual_y	= 2 * 800,
 };
 
+static struct fb_videomode universal_lcd_timing = {
+	.left_margin	= 16,
+	.right_margin	= 16,
+	.upper_margin	= 2,
+	.lower_margin	= 28,
+	.hsync_len	= 2,
+	.vsync_len	= 1,
+	.xres		= 480,
+	.yres		= 800,
+	.refresh	= 55,
+};
+
 static struct s3c_fb_platdata universal_lcd_pdata __initdata = {
 	.win[0]		= &universal_fb_win0,
+	.vtiming	= &universal_lcd_timing,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB |
 			  VIDCON0_CLKSEL_LCD,
 	.vidcon1	= VIDCON1_INV_VCLK | VIDCON1_INV_VDEN
diff --git a/arch/arm/mach-s3c24xx/mach-smdk2416.c b/arch/arm/mach-s3c24xx/mach-smdk2416.c
index 30a44f8..c3100a0 100644
--- a/arch/arm/mach-s3c24xx/mach-smdk2416.c
+++ b/arch/arm/mach-s3c24xx/mach-smdk2416.c
@@ -148,23 +148,25 @@ static struct s3c24xx_hsudc_platdata smdk2416_hsudc_platdata = {
 
 static struct s3c_fb_pd_win smdk2416_fb_win[] = {
 	[0] = {
-		/* think this is the same as the smdk6410 */
-		.win_mode	= {
-			.pixclock	= 41094,
-			.left_margin	= 8,
-			.right_margin	= 13,
-			.upper_margin	= 7,
-			.lower_margin	= 5,
-			.hsync_len	= 3,
-			.vsync_len	= 1,
-			.xres           = 800,
-			.yres           = 480,
-		},
 		.default_bpp	= 16,
 		.max_bpp	= 32,
+		.xres           = 800,
+		.yres           = 480,
 	},
 };
 
+static struct fb_videomode smdk2416_lcd_timing = {
+	.pixclock	= 41094,
+	.left_margin	= 8,
+	.right_margin	= 13,
+	.upper_margin	= 7,
+	.lower_margin	= 5,
+	.hsync_len	= 3,
+	.vsync_len	= 1,
+	.xres           = 800,
+	.yres           = 480,
+};
+
 static void s3c2416_fb_gpio_setup_24bpp(void)
 {
 	unsigned int gpio;
@@ -187,6 +189,7 @@ static void s3c2416_fb_gpio_setup_24bpp(void)
 
 static struct s3c_fb_platdata smdk2416_fb_platdata = {
 	.win[0]		= &smdk2416_fb_win[0],
+	.vtiming	= &smdk2416_lcd_timing,
 	.setup_gpio	= s3c2416_fb_gpio_setup_24bpp,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
diff --git a/arch/arm/mach-s3c64xx/mach-anw6410.c b/arch/arm/mach-s3c64xx/mach-anw6410.c
index b86f277..58fd0e3 100644
--- a/arch/arm/mach-s3c64xx/mach-anw6410.c
+++ b/arch/arm/mach-s3c64xx/mach-anw6410.c
@@ -134,24 +134,27 @@ static struct platform_device anw6410_lcd_powerdev = {
 };
 
 static struct s3c_fb_pd_win anw6410_fb_win0 = {
-	/* this is to ensure we use win0 */
-	.win_mode	= {
-		.left_margin	= 8,
-		.right_margin	= 13,
-		.upper_margin	= 7,
-		.lower_margin	= 5,
-		.hsync_len	= 3,
-		.vsync_len	= 1,
-		.xres		= 800,
-		.yres		= 480,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 800,
+	.yres		= 480,
+};
+
+static struct fb_videomode anw6410_lcd_timing = {
+	.left_margin	= 8,
+	.right_margin	= 13,
+	.upper_margin	= 7,
+	.lower_margin	= 5,
+	.hsync_len	= 3,
+	.vsync_len	= 1,
+	.xres		= 800,
+	.yres		= 480,
 };
 
 /* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */
 static struct s3c_fb_platdata anw6410_lcd_pdata __initdata = {
 	.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+	.vtiming	= &anw6410_lcd_timing,
 	.win[0]		= &anw6410_fb_win0,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
diff --git a/arch/arm/mach-s3c64xx/mach-crag6410.c b/arch/arm/mach-s3c64xx/mach-crag6410.c
index e20bf58..c1ef57e 100644
--- a/arch/arm/mach-s3c64xx/mach-crag6410.c
+++ b/arch/arm/mach-s3c64xx/mach-crag6410.c
@@ -151,26 +151,29 @@ static struct platform_device crag6410_lcd_powerdev = {
 
 /* 640x480 URT */
 static struct s3c_fb_pd_win crag6410_fb_win0 = {
-	/* this is to ensure we use win0 */
-	.win_mode	= {
-		.left_margin	= 150,
-		.right_margin	= 80,
-		.upper_margin	= 40,
-		.lower_margin	= 5,
-		.hsync_len	= 40,
-		.vsync_len	= 5,
-		.xres		= 640,
-		.yres		= 480,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 640,
+	.yres		= 480,
 	.virtual_y	= 480 * 2,
 	.virtual_x	= 640,
 };
 
+static struct fb_videomode crag6410_lcd_timing = {
+	.left_margin	= 150,
+	.right_margin	= 80,
+	.upper_margin	= 40,
+	.lower_margin	= 5,
+	.hsync_len	= 40,
+	.vsync_len	= 5,
+	.xres		= 640,
+	.yres		= 480,
+};
+
 /* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */
 static struct s3c_fb_platdata crag6410_lcd_pdata __initdata = {
 	.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+	.vtiming	= &crag6410_lcd_timing,
 	.win[0]		= &crag6410_fb_win0,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
diff --git a/arch/arm/mach-s3c64xx/mach-hmt.c b/arch/arm/mach-s3c64xx/mach-hmt.c
index 521e07b..4e9b1ac 100644
--- a/arch/arm/mach-s3c64xx/mach-hmt.c
+++ b/arch/arm/mach-s3c64xx/mach-hmt.c
@@ -129,23 +129,27 @@ static struct platform_device hmt_backlight_device = {
 };
 
 static struct s3c_fb_pd_win hmt_fb_win0 = {
-	.win_mode	= {
-		.left_margin	= 8,
-		.right_margin	= 13,
-		.upper_margin	= 7,
-		.lower_margin	= 5,
-		.hsync_len	= 3,
-		.vsync_len	= 1,
-		.xres		= 800,
-		.yres		= 480,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 800,
+	.yres		= 480,
+};
+
+static struct fb_videomode hmt_lcd_timing = {
+	.left_margin	= 8,
+	.right_margin	= 13,
+	.upper_margin	= 7,
+	.lower_margin	= 5,
+	.hsync_len	= 3,
+	.vsync_len	= 1,
+	.xres		= 800,
+	.yres		= 480,
 };
 
 /* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */
 static struct s3c_fb_platdata hmt_lcd_pdata __initdata = {
 	.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+	.vtiming	= &hmt_lcd_timing,
 	.win[0]		= &hmt_fb_win0,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
diff --git a/arch/arm/mach-s3c64xx/mach-mini6410.c b/arch/arm/mach-s3c64xx/mach-mini6410.c
index 34f5195..2f425d5 100644
--- a/arch/arm/mach-s3c64xx/mach-mini6410.c
+++ b/arch/arm/mach-s3c64xx/mach-mini6410.c
@@ -152,43 +152,53 @@ static struct s3c2410_platform_nand mini6410_nand_info = {
 };
 
 static struct s3c_fb_pd_win mini6410_lcd_type0_fb_win = {
-	.win_mode	= {	/* 4.3" 480x272 */
-		.left_margin	= 3,
-		.right_margin	= 2,
-		.upper_margin	= 1,
-		.lower_margin	= 1,
-		.hsync_len	= 40,
-		.vsync_len	= 1,
-		.xres		= 480,
-		.yres		= 272,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 480,
+	.yres		= 272,
+};
+
+static struct fb_videomode mini6410_lcd_type0_timing = {
+	/* 4.3" 480x272 */
+	.left_margin	= 3,
+	.right_margin	= 2,
+	.upper_margin	= 1,
+	.lower_margin	= 1,
+	.hsync_len	= 40,
+	.vsync_len	= 1,
+	.xres		= 480,
+	.yres		= 272,
 };
 
 static struct s3c_fb_pd_win mini6410_lcd_type1_fb_win = {
-	.win_mode	= {	/* 7.0" 800x480 */
-		.left_margin	= 8,
-		.right_margin	= 13,
-		.upper_margin	= 7,
-		.lower_margin	= 5,
-		.hsync_len	= 3,
-		.vsync_len	= 1,
-		.xres		= 800,
-		.yres		= 480,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 800,
+	.yres		= 480,
+};
+
+static struct fb_videomode mini6410_lcd_type1_timing = {
+	/* 7.0" 800x480 */
+	.left_margin	= 8,
+	.right_margin	= 13,
+	.upper_margin	= 7,
+	.lower_margin	= 5,
+	.hsync_len	= 3,
+	.vsync_len	= 1,
+	.xres		= 800,
+	.yres		= 480,
 };
 
 static struct s3c_fb_platdata mini6410_lcd_pdata[] __initdata = {
 	{
 		.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+		.vtiming	= &mini6410_lcd_type0_timing,
 		.win[0]		= &mini6410_lcd_type0_fb_win,
 		.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 		.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
 	}, {
 		.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+		.vtiming	= &mini6410_lcd_type1_timing,
 		.win[0]		= &mini6410_lcd_type1_fb_win,
 		.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 		.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
@@ -316,8 +326,8 @@ static void __init mini6410_machine_init(void)
 	mini6410_parse_features(&features, mini6410_features_str);
 
 	printk(KERN_INFO "MINI6410: selected LCD display is %dx%d\n",
-		mini6410_lcd_pdata[features.lcd_index].win[0]->win_mode.xres,
-		mini6410_lcd_pdata[features.lcd_index].win[0]->win_mode.yres);
+		mini6410_lcd_pdata[features.lcd_index].win[0]->xres,
+		mini6410_lcd_pdata[features.lcd_index].win[0]->yres);
 
 	s3c_nand_set_platdata(&mini6410_nand_info);
 	s3c_fb_set_platdata(&mini6410_lcd_pdata[features.lcd_index]);
diff --git a/arch/arm/mach-s3c64xx/mach-real6410.c b/arch/arm/mach-s3c64xx/mach-real6410.c
index 21f91e5..0fbd32c 100644
--- a/arch/arm/mach-s3c64xx/mach-real6410.c
+++ b/arch/arm/mach-s3c64xx/mach-real6410.c
@@ -118,43 +118,51 @@ static struct platform_device real6410_device_eth = {
 };
 
 static struct s3c_fb_pd_win real6410_lcd_type0_fb_win = {
-	.win_mode	= {	/* 4.3" 480x272 */
-		.left_margin	= 3,
-		.right_margin	= 2,
-		.upper_margin	= 1,
-		.lower_margin	= 1,
-		.hsync_len	= 40,
-		.vsync_len	= 1,
-		.xres		= 480,
-		.yres		= 272,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 480,
+	.yres		= 272,
+};
+
+static struct fb_videomode real6410_lcd_type0_timing = {
+	/* 4.3" 480x272 */
+	.left_margin	= 3,
+	.right_margin	= 2,
+	.upper_margin	= 1,
+	.lower_margin	= 1,
+	.hsync_len	= 40,
+	.vsync_len	= 1,
 };
 
 static struct s3c_fb_pd_win real6410_lcd_type1_fb_win = {
-	.win_mode	= {	/* 7.0" 800x480 */
-		.left_margin	= 8,
-		.right_margin	= 13,
-		.upper_margin	= 7,
-		.lower_margin	= 5,
-		.hsync_len	= 3,
-		.vsync_len	= 1,
-		.xres		= 800,
-		.yres		= 480,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 800,
+	.yres		= 480,
+};
+
+static struct fb_videomode real6410_lcd_type1_timing = {
+	/* 7.0" 800x480 */
+	.left_margin	= 8,
+	.right_margin	= 13,
+	.upper_margin	= 7,
+	.lower_margin	= 5,
+	.hsync_len	= 3,
+	.vsync_len	= 1,
+	.xres		= 800,
+	.yres		= 480,
 };
 
 static struct s3c_fb_platdata real6410_lcd_pdata[] __initdata = {
 	{
 		.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+		.vtiming	= &real6410_lcd_type0_timing,
 		.win[0]		= &real6410_lcd_type0_fb_win,
 		.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 		.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
 	}, {
 		.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+		.vtiming	= &real6410_lcd_type1_timing,
 		.win[0]		= &real6410_lcd_type1_fb_win,
 		.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 		.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
@@ -297,8 +305,8 @@ static void __init real6410_machine_init(void)
 	real6410_parse_features(&features, real6410_features_str);
 
 	printk(KERN_INFO "REAL6410: selected LCD display is %dx%d\n",
-		real6410_lcd_pdata[features.lcd_index].win[0]->win_mode.xres,
-		real6410_lcd_pdata[features.lcd_index].win[0]->win_mode.yres);
+		real6410_lcd_pdata[features.lcd_index].win[0]->xres,
+		real6410_lcd_pdata[features.lcd_index].win[0]->yres);
 
 	s3c_fb_set_platdata(&real6410_lcd_pdata[features.lcd_index]);
 	s3c_nand_set_platdata(&real6410_nand_info);
diff --git a/arch/arm/mach-s3c64xx/mach-smartq5.c b/arch/arm/mach-s3c64xx/mach-smartq5.c
index 3f42431..03a2f88 100644
--- a/arch/arm/mach-s3c64xx/mach-smartq5.c
+++ b/arch/arm/mach-s3c64xx/mach-smartq5.c
@@ -108,23 +108,27 @@ static struct platform_device smartq5_buttons_device  = {
 };
 
 static struct s3c_fb_pd_win smartq5_fb_win0 = {
-	.win_mode	= {
-		.left_margin	= 216,
-		.right_margin	= 40,
-		.upper_margin	= 35,
-		.lower_margin	= 10,
-		.hsync_len	= 1,
-		.vsync_len	= 1,
-		.xres		= 800,
-		.yres		= 480,
-		.refresh	= 80,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 800,
+	.yres		= 480,
+};
+
+static struct fb_videomode smartq5_lcd_timing = {
+	.left_margin	= 216,
+	.right_margin	= 40,
+	.upper_margin	= 35,
+	.lower_margin	= 10,
+	.hsync_len	= 1,
+	.vsync_len	= 1,
+	.xres		= 800,
+	.yres		= 480,
+	.refresh	= 80,
 };
 
 static struct s3c_fb_platdata smartq5_lcd_pdata __initdata = {
 	.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+	.vtiming	= &smartq5_lcd_timing,
 	.win[0]		= &smartq5_fb_win0,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC |
diff --git a/arch/arm/mach-s3c64xx/mach-smartq7.c b/arch/arm/mach-s3c64xx/mach-smartq7.c
index e5c09b6..4e3b038 100644
--- a/arch/arm/mach-s3c64xx/mach-smartq7.c
+++ b/arch/arm/mach-s3c64xx/mach-smartq7.c
@@ -124,23 +124,27 @@ static struct platform_device smartq7_buttons_device  = {
 };
 
 static struct s3c_fb_pd_win smartq7_fb_win0 = {
-	.win_mode	= {
-		.left_margin	= 3,
-		.right_margin	= 5,
-		.upper_margin	= 1,
-		.lower_margin	= 20,
-		.hsync_len	= 10,
-		.vsync_len	= 3,
-		.xres		= 800,
-		.yres		= 480,
-		.refresh	= 80,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 800,
+	.yres		= 480,
+};
+
+static struct fb_videomode smartq7_lcd_timing = {
+	.left_margin	= 3,
+	.right_margin	= 5,
+	.upper_margin	= 1,
+	.lower_margin	= 20,
+	.hsync_len	= 10,
+	.vsync_len	= 3,
+	.xres		= 800,
+	.yres		= 480,
+	.refresh	= 80,
 };
 
 static struct s3c_fb_platdata smartq7_lcd_pdata __initdata = {
 	.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+	.vtiming	= &smartq7_lcd_timing,
 	.win[0]		= &smartq7_fb_win0,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC |
diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach-s3c64xx/mach-smdk6410.c
index d55bc96..3cfc90f 100644
--- a/arch/arm/mach-s3c64xx/mach-smdk6410.c
+++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c
@@ -146,26 +146,29 @@ static struct platform_device smdk6410_lcd_powerdev = {
 };
 
 static struct s3c_fb_pd_win smdk6410_fb_win0 = {
-	/* this is to ensure we use win0 */
-	.win_mode	= {
-		.left_margin	= 8,
-		.right_margin	= 13,
-		.upper_margin	= 7,
-		.lower_margin	= 5,
-		.hsync_len	= 3,
-		.vsync_len	= 1,
-		.xres		= 800,
-		.yres		= 480,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 800,
+	.yres		= 480,
 	.virtual_y	= 480 * 2,
 	.virtual_x	= 800,
 };
 
+static struct fb_videomode smdk6410_lcd_timing = {
+	.left_margin	= 8,
+	.right_margin	= 13,
+	.upper_margin	= 7,
+	.lower_margin	= 5,
+	.hsync_len	= 3,
+	.vsync_len	= 1,
+	.xres		= 800,
+	.yres		= 480,
+};
+
 /* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */
 static struct s3c_fb_platdata smdk6410_lcd_pdata __initdata = {
 	.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+	.vtiming	= &smdk6410_lcd_timing,
 	.win[0]		= &smdk6410_fb_win0,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
diff --git a/arch/arm/mach-s5p64x0/mach-smdk6440.c b/arch/arm/mach-s5p64x0/mach-smdk6440.c
index a40e325..92fefad 100644
--- a/arch/arm/mach-s5p64x0/mach-smdk6440.c
+++ b/arch/arm/mach-s5p64x0/mach-smdk6440.c
@@ -103,22 +103,26 @@ static struct s3c2410_uartcfg smdk6440_uartcfgs[] __initdata = {
 
 /* Frame Buffer */
 static struct s3c_fb_pd_win smdk6440_fb_win0 = {
-	.win_mode = {
-		.left_margin	= 8,
-		.right_margin	= 13,
-		.upper_margin	= 7,
-		.lower_margin	= 5,
-		.hsync_len	= 3,
-		.vsync_len	= 1,
-		.xres		= 800,
-		.yres		= 480,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 24,
+	.xres		= 800,
+	.yres		= 480,
+};
+
+static struct fb_videomode smdk6440_lcd_timing = {
+	.left_margin	= 8,
+	.right_margin	= 13,
+	.upper_margin	= 7,
+	.lower_margin	= 5,
+	.hsync_len	= 3,
+	.vsync_len	= 1,
+	.xres		= 800,
+	.yres		= 480,
 };
 
 static struct s3c_fb_platdata smdk6440_lcd_pdata __initdata = {
 	.win[0]		= &smdk6440_fb_win0,
+	.vtiming	= &smdk6440_lcd_timing,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
 	.setup_gpio	= s5p64x0_fb_gpio_setup_24bpp,
diff --git a/arch/arm/mach-s5p64x0/mach-smdk6450.c b/arch/arm/mach-s5p64x0/mach-smdk6450.c
index efb69e2..e2335ec 100644
--- a/arch/arm/mach-s5p64x0/mach-smdk6450.c
+++ b/arch/arm/mach-s5p64x0/mach-smdk6450.c
@@ -121,22 +121,26 @@ static struct s3c2410_uartcfg smdk6450_uartcfgs[] __initdata = {
 
 /* Frame Buffer */
 static struct s3c_fb_pd_win smdk6450_fb_win0 = {
-	.win_mode	= {
-		.left_margin	= 8,
-		.right_margin	= 13,
-		.upper_margin	= 7,
-		.lower_margin	= 5,
-		.hsync_len	= 3,
-		.vsync_len	= 1,
-		.xres		= 800,
-		.yres		= 480,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 24,
+	.xres		= 800,
+	.yres		= 480,
+};
+
+static struct fb_videomode smdk6450_lcd_timing = {
+	.left_margin	= 8,
+	.right_margin	= 13,
+	.upper_margin	= 7,
+	.lower_margin	= 5,
+	.hsync_len	= 3,
+	.vsync_len	= 1,
+	.xres		= 800,
+	.yres		= 480,
 };
 
 static struct s3c_fb_platdata smdk6450_lcd_pdata __initdata = {
 	.win[0]		= &smdk6450_fb_win0,
+	.vtiming	= &smdk6450_lcd_timing,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
 	.setup_gpio	= s5p64x0_fb_gpio_setup_24bpp,
diff --git a/arch/arm/mach-s5pc100/mach-smdkc100.c b/arch/arm/mach-s5pc100/mach-smdkc100.c
index 674d229..0c3ae38 100644
--- a/arch/arm/mach-s5pc100/mach-smdkc100.c
+++ b/arch/arm/mach-s5pc100/mach-smdkc100.c
@@ -136,24 +136,27 @@ static struct platform_device smdkc100_lcd_powerdev = {
 
 /* Frame Buffer */
 static struct s3c_fb_pd_win smdkc100_fb_win0 = {
-	/* this is to ensure we use win0 */
-	.win_mode	= {
-		.left_margin	= 8,
-		.right_margin	= 13,
-		.upper_margin	= 7,
-		.lower_margin	= 5,
-		.hsync_len	= 3,
-		.vsync_len	= 1,
-		.xres		= 800,
-		.yres		= 480,
-		.refresh	= 80,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 800,
+	.yres		= 480,
+};
+
+static struct fb_videomode smdkc100_lcd_timing = {
+	.left_margin	= 8,
+	.right_margin	= 13,
+	.upper_margin	= 7,
+	.lower_margin	= 5,
+	.hsync_len	= 3,
+	.vsync_len	= 1,
+	.xres		= 800,
+	.yres		= 480,
+	.refresh	= 80,
 };
 
 static struct s3c_fb_platdata smdkc100_lcd_pdata __initdata = {
 	.win[0]		= &smdkc100_fb_win0,
+	.vtiming	= &smdkc100_lcd_timing,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
 	.setup_gpio	= s5pc100_fb_gpio_setup_24bpp,
diff --git a/arch/arm/mach-s5pv210/mach-aquila.c b/arch/arm/mach-s5pv210/mach-aquila.c
index a9ea64e..7b91bbf 100644
--- a/arch/arm/mach-s5pv210/mach-aquila.c
+++ b/arch/arm/mach-s5pv210/mach-aquila.c
@@ -96,38 +96,34 @@ static struct s3c2410_uartcfg aquila_uartcfgs[] __initdata = {
 
 /* Frame Buffer */
 static struct s3c_fb_pd_win aquila_fb_win0 = {
-	.win_mode = {
-		.left_margin = 16,
-		.right_margin = 16,
-		.upper_margin = 3,
-		.lower_margin = 28,
-		.hsync_len = 2,
-		.vsync_len = 2,
-		.xres = 480,
-		.yres = 800,
-	},
 	.max_bpp = 32,
 	.default_bpp = 16,
+	.xres = 480,
+	.yres = 800,
 };
 
 static struct s3c_fb_pd_win aquila_fb_win1 = {
-	.win_mode = {
-		.left_margin = 16,
-		.right_margin = 16,
-		.upper_margin = 3,
-		.lower_margin = 28,
-		.hsync_len = 2,
-		.vsync_len = 2,
-		.xres = 480,
-		.yres = 800,
-	},
 	.max_bpp = 32,
 	.default_bpp = 16,
+	.xres = 480,
+	.yres = 800,
+};
+
+static struct fb_videomode aquila_lcd_timing = {
+	.left_margin = 16,
+	.right_margin = 16,
+	.upper_margin = 3,
+	.lower_margin = 28,
+	.hsync_len = 2,
+	.vsync_len = 2,
+	.xres = 480,
+	.yres = 800,
 };
 
 static struct s3c_fb_platdata aquila_lcd_pdata __initdata = {
 	.win[0]		= &aquila_fb_win0,
 	.win[1]		= &aquila_fb_win1,
+	.vtiming	= &aquila_lcd_timing,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC |
 			  VIDCON1_INV_VCLK | VIDCON1_INV_VDEN,
diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c
index 2cf5ed7..07a840d 100644
--- a/arch/arm/mach-s5pv210/mach-goni.c
+++ b/arch/arm/mach-s5pv210/mach-goni.c
@@ -105,25 +105,29 @@ static struct s3c2410_uartcfg goni_uartcfgs[] __initdata = {
 
 /* Frame Buffer */
 static struct s3c_fb_pd_win goni_fb_win0 = {
-	.win_mode = {
-		.left_margin	= 16,
-		.right_margin	= 16,
-		.upper_margin	= 2,
-		.lower_margin	= 28,
-		.hsync_len	= 2,
-		.vsync_len	= 1,
-		.xres		= 480,
-		.yres		= 800,
-		.refresh	= 55,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 16,
+	.xres		= 480,
+	.yres		= 800,
 	.virtual_x	= 480,
 	.virtual_y	= 2 * 800,
 };
 
+static struct fb_videomode goni_lcd_timing = {
+	.left_margin	= 16,
+	.right_margin	= 16,
+	.upper_margin	= 2,
+	.lower_margin	= 28,
+	.hsync_len	= 2,
+	.vsync_len	= 1,
+	.xres		= 480,
+	.yres		= 800,
+	.refresh	= 55,
+};
+
 static struct s3c_fb_platdata goni_lcd_pdata __initdata = {
 	.win[0]		= &goni_fb_win0,
+	.vtiming	= &goni_lcd_timing,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB |
 			  VIDCON0_CLKSEL_LCD,
 	.vidcon1	= VIDCON1_INV_VCLK | VIDCON1_INV_VDEN
diff --git a/arch/arm/mach-s5pv210/mach-smdkv210.c b/arch/arm/mach-s5pv210/mach-smdkv210.c
index 91d4ad8..5e0c955 100644
--- a/arch/arm/mach-s5pv210/mach-smdkv210.c
+++ b/arch/arm/mach-s5pv210/mach-smdkv210.c
@@ -189,22 +189,26 @@ static struct platform_device smdkv210_lcd_lte480wv = {
 };
 
 static struct s3c_fb_pd_win smdkv210_fb_win0 = {
-	.win_mode = {
-		.left_margin	= 13,
-		.right_margin	= 8,
-		.upper_margin	= 7,
-		.lower_margin	= 5,
-		.hsync_len	= 3,
-		.vsync_len	= 1,
-		.xres		= 800,
-		.yres		= 480,
-	},
 	.max_bpp	= 32,
 	.default_bpp	= 24,
+	.xres		= 800,
+	.yres		= 480,
+};
+
+static struct fb_videomode smdkv210_lcd_timing = {
+	.left_margin	= 13,
+	.right_margin	= 8,
+	.upper_margin	= 7,
+	.lower_margin	= 5,
+	.hsync_len	= 3,
+	.vsync_len	= 1,
+	.xres		= 800,
+	.yres		= 480,
 };
 
 static struct s3c_fb_platdata smdkv210_lcd0_pdata __initdata = {
 	.win[0]		= &smdkv210_fb_win0,
+	.vtiming	= &smdkv210_lcd_timing,
 	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
 	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
 	.setup_gpio	= s5pv210_fb_gpio_setup_24bpp,
-- 
1.6.6.rc2


^ permalink raw reply related

* [PATCH v3 3/4] ARM: s3c64xx: Decouple lcd type from display controller window data
From: Thomas Abraham @ 2012-03-24 16:40 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <1332606528-32338-1-git-send-email-thomas.abraham@linaro.org>

The display controller window data should contain window configuration data
for only one type of lcd panel. So, for real6410 and mini6410 boards, split
the existing display controller window data, which contains window
configuration data for two different types of lcd panels, into two seperate
instances and register one of them depending on the type of the lcd panel
detected at runtime.

This is a prerequisite change for a subsequent commit that reorders the
platform data of display controller by moving video interface timing out
of window setup data.

Cc: Darius Augulis <augulis.darius@gmail.com>
Cc: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
---
 arch/arm/mach-s3c64xx/mach-mini6410.c |   82 +++++++++++++++++---------------
 arch/arm/mach-s3c64xx/mach-real6410.c |   82 +++++++++++++++++---------------
 2 files changed, 88 insertions(+), 76 deletions(-)

diff --git a/arch/arm/mach-s3c64xx/mach-mini6410.c b/arch/arm/mach-s3c64xx/mach-mini6410.c
index c34c2ab..34f5195 100644
--- a/arch/arm/mach-s3c64xx/mach-mini6410.c
+++ b/arch/arm/mach-s3c64xx/mach-mini6410.c
@@ -151,41 +151,49 @@ static struct s3c2410_platform_nand mini6410_nand_info = {
 	.sets		= mini6410_nand_sets,
 };
 
-static struct s3c_fb_pd_win mini6410_fb_win[] = {
-	{
-		.win_mode	= {	/* 4.3" 480x272 */
-			.left_margin	= 3,
-			.right_margin	= 2,
-			.upper_margin	= 1,
-			.lower_margin	= 1,
-			.hsync_len	= 40,
-			.vsync_len	= 1,
-			.xres		= 480,
-			.yres		= 272,
-		},
-		.max_bpp	= 32,
-		.default_bpp	= 16,
-	}, {
-		.win_mode	= {	/* 7.0" 800x480 */
-			.left_margin	= 8,
-			.right_margin	= 13,
-			.upper_margin	= 7,
-			.lower_margin	= 5,
-			.hsync_len	= 3,
-			.vsync_len	= 1,
-			.xres		= 800,
-			.yres		= 480,
-		},
-		.max_bpp	= 32,
-		.default_bpp	= 16,
+static struct s3c_fb_pd_win mini6410_lcd_type0_fb_win = {
+	.win_mode	= {	/* 4.3" 480x272 */
+		.left_margin	= 3,
+		.right_margin	= 2,
+		.upper_margin	= 1,
+		.lower_margin	= 1,
+		.hsync_len	= 40,
+		.vsync_len	= 1,
+		.xres		= 480,
+		.yres		= 272,
 	},
+	.max_bpp	= 32,
+	.default_bpp	= 16,
 };
 
-static struct s3c_fb_platdata mini6410_lcd_pdata __initdata = {
-	.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
-	.win[0]		= &mini6410_fb_win[0],
-	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
-	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
+static struct s3c_fb_pd_win mini6410_lcd_type1_fb_win = {
+	.win_mode	= {	/* 7.0" 800x480 */
+		.left_margin	= 8,
+		.right_margin	= 13,
+		.upper_margin	= 7,
+		.lower_margin	= 5,
+		.hsync_len	= 3,
+		.vsync_len	= 1,
+		.xres		= 800,
+		.yres		= 480,
+	},
+	.max_bpp	= 32,
+	.default_bpp	= 16,
+};
+
+static struct s3c_fb_platdata mini6410_lcd_pdata[] __initdata = {
+	{
+		.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+		.win[0]		= &mini6410_lcd_type0_fb_win,
+		.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
+		.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
+	}, {
+		.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+		.win[0]		= &mini6410_lcd_type1_fb_win,
+		.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
+		.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
+	},
+	{ },
 };
 
 static void mini6410_lcd_power_set(struct plat_lcd_data *pd,
@@ -283,7 +291,7 @@ static void mini6410_parse_features(
 					"screen type already set\n", f);
 			} else {
 				int li = f - '0';
-				if (li >= ARRAY_SIZE(mini6410_fb_win))
+				if (li >= ARRAY_SIZE(mini6410_lcd_pdata))
 					printk(KERN_INFO "MINI6410: '%c' out "
 						"of range LCD mode\n", f);
 				else {
@@ -307,14 +315,12 @@ static void __init mini6410_machine_init(void)
 	/* Parse the feature string */
 	mini6410_parse_features(&features, mini6410_features_str);
 
-	mini6410_lcd_pdata.win[0] = &mini6410_fb_win[features.lcd_index];
-
 	printk(KERN_INFO "MINI6410: selected LCD display is %dx%d\n",
-		mini6410_lcd_pdata.win[0]->win_mode.xres,
-		mini6410_lcd_pdata.win[0]->win_mode.yres);
+		mini6410_lcd_pdata[features.lcd_index].win[0]->win_mode.xres,
+		mini6410_lcd_pdata[features.lcd_index].win[0]->win_mode.yres);
 
 	s3c_nand_set_platdata(&mini6410_nand_info);
-	s3c_fb_set_platdata(&mini6410_lcd_pdata);
+	s3c_fb_set_platdata(&mini6410_lcd_pdata[features.lcd_index]);
 	s3c24xx_ts_set_platdata(NULL);
 
 	/* configure nCS1 width to 16 bits */
diff --git a/arch/arm/mach-s3c64xx/mach-real6410.c b/arch/arm/mach-s3c64xx/mach-real6410.c
index be2a9a2..21f91e5 100644
--- a/arch/arm/mach-s3c64xx/mach-real6410.c
+++ b/arch/arm/mach-s3c64xx/mach-real6410.c
@@ -117,41 +117,49 @@ static struct platform_device real6410_device_eth = {
 	},
 };
 
-static struct s3c_fb_pd_win real6410_fb_win[] = {
-	{
-		.win_mode	= {	/* 4.3" 480x272 */
-			.left_margin	= 3,
-			.right_margin	= 2,
-			.upper_margin	= 1,
-			.lower_margin	= 1,
-			.hsync_len	= 40,
-			.vsync_len	= 1,
-			.xres		= 480,
-			.yres		= 272,
-		},
-		.max_bpp	= 32,
-		.default_bpp	= 16,
-	}, {
-		.win_mode	= {	/* 7.0" 800x480 */
-			.left_margin	= 8,
-			.right_margin	= 13,
-			.upper_margin	= 7,
-			.lower_margin	= 5,
-			.hsync_len	= 3,
-			.vsync_len	= 1,
-			.xres		= 800,
-			.yres		= 480,
-		},
-		.max_bpp	= 32,
-		.default_bpp	= 16,
+static struct s3c_fb_pd_win real6410_lcd_type0_fb_win = {
+	.win_mode	= {	/* 4.3" 480x272 */
+		.left_margin	= 3,
+		.right_margin	= 2,
+		.upper_margin	= 1,
+		.lower_margin	= 1,
+		.hsync_len	= 40,
+		.vsync_len	= 1,
+		.xres		= 480,
+		.yres		= 272,
 	},
+	.max_bpp	= 32,
+	.default_bpp	= 16,
 };
 
-static struct s3c_fb_platdata real6410_lcd_pdata __initdata = {
-	.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
-	.win[0]		= &real6410_fb_win[0],
-	.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
-	.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
+static struct s3c_fb_pd_win real6410_lcd_type1_fb_win = {
+	.win_mode	= {	/* 7.0" 800x480 */
+		.left_margin	= 8,
+		.right_margin	= 13,
+		.upper_margin	= 7,
+		.lower_margin	= 5,
+		.hsync_len	= 3,
+		.vsync_len	= 1,
+		.xres		= 800,
+		.yres		= 480,
+	},
+	.max_bpp	= 32,
+	.default_bpp	= 16,
+};
+
+static struct s3c_fb_platdata real6410_lcd_pdata[] __initdata = {
+	{
+		.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+		.win[0]		= &real6410_lcd_type0_fb_win,
+		.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
+		.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
+	}, {
+		.setup_gpio	= s3c64xx_fb_gpio_setup_24bpp,
+		.win[0]		= &real6410_lcd_type1_fb_win,
+		.vidcon0	= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
+		.vidcon1	= VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
+	},
+	{ },
 };
 
 static struct mtd_partition real6410_nand_part[] = {
@@ -264,7 +272,7 @@ static void real6410_parse_features(
 					"screen type already set\n", f);
 			} else {
 				int li = f - '0';
-				if (li >= ARRAY_SIZE(real6410_fb_win))
+				if (li >= ARRAY_SIZE(real6410_lcd_pdata))
 					printk(KERN_INFO "REAL6410: '%c' out "
 						"of range LCD mode\n", f);
 				else {
@@ -288,13 +296,11 @@ static void __init real6410_machine_init(void)
 	/* Parse the feature string */
 	real6410_parse_features(&features, real6410_features_str);
 
-	real6410_lcd_pdata.win[0] = &real6410_fb_win[features.lcd_index];
-
 	printk(KERN_INFO "REAL6410: selected LCD display is %dx%d\n",
-		real6410_lcd_pdata.win[0]->win_mode.xres,
-		real6410_lcd_pdata.win[0]->win_mode.yres);
+		real6410_lcd_pdata[features.lcd_index].win[0]->win_mode.xres,
+		real6410_lcd_pdata[features.lcd_index].win[0]->win_mode.yres);
 
-	s3c_fb_set_platdata(&real6410_lcd_pdata);
+	s3c_fb_set_platdata(&real6410_lcd_pdata[features.lcd_index]);
 	s3c_nand_set_platdata(&real6410_nand_info);
 	s3c24xx_ts_set_platdata(NULL);
 
-- 
1.6.6.rc2


^ permalink raw reply related

* [PATCH v3 2/4] video: s3c-fb: remove 'default_win' element from platform data
From: Thomas Abraham @ 2012-03-24 16:40 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <1332606528-32338-1-git-send-email-thomas.abraham@linaro.org>

The decision to enable or disable the data output to the lcd panel from
the controller need not be based on the value of 'default_win' element
in the platform data. Instead, the data output to the panel is enabled
if any of the windows are active, else data output is disabled.

Cc: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
---
 arch/arm/plat-samsung/include/plat/fb.h |    2 --
 drivers/video/s3c-fb.c                  |   25 +++++--------------------
 2 files changed, 5 insertions(+), 22 deletions(-)

diff --git a/arch/arm/plat-samsung/include/plat/fb.h b/arch/arm/plat-samsung/include/plat/fb.h
index 39d6bd7..536002f 100644
--- a/arch/arm/plat-samsung/include/plat/fb.h
+++ b/arch/arm/plat-samsung/include/plat/fb.h
@@ -62,8 +62,6 @@ struct s3c_fb_platdata {
 	struct s3c_fb_pd_win	*win[S3C_FB_MAX_WIN];
 	struct fb_videomode     *vtiming;
 
-	u32			 default_win;
-
 	u32			 vidcon0;
 	u32			 vidcon1;
 };
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index c94f40d..18c84b8 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -531,7 +531,7 @@ static int s3c_fb_set_par(struct fb_info *info)
 	/* disable the window whilst we update it */
 	writel(0, regs + WINCON(win_no));
 
-	if (win_no = sfb->pdata->default_win)
+	if (!sfb->output_on)
 		s3c_fb_enable(sfb, 1);
 
 	/* write the buffer address */
@@ -799,6 +799,7 @@ static int s3c_fb_blank(int blank_mode, struct fb_info *info)
 	struct s3c_fb *sfb = win->parent;
 	unsigned int index = win->index;
 	u32 wincon;
+	u32 output_on = sfb->output_on;
 
 	dev_dbg(sfb->dev, "blank mode %d\n", blank_mode);
 
@@ -837,34 +838,18 @@ static int s3c_fb_blank(int blank_mode, struct fb_info *info)
 
 	shadow_protect_win(win, 1);
 	writel(wincon, sfb->regs + sfb->variant.wincon + (index * 4));
-	shadow_protect_win(win, 0);
 
 	/* Check the enabled state to see if we need to be running the
 	 * main LCD interface, as if there are no active windows then
 	 * it is highly likely that we also do not need to output
 	 * anything.
 	 */
-
-	/* We could do something like the following code, but the current
-	 * system of using framebuffer events means that we cannot make
-	 * the distinction between just window 0 being inactive and all
-	 * the windows being down.
-	 *
-	 * s3c_fb_enable(sfb, sfb->enabled ? 1 : 0);
-	*/
-
-	/* we're stuck with this until we can do something about overriding
-	 * the power control using the blanking event for a single fb.
-	 */
-	if (index = sfb->pdata->default_win) {
-		shadow_protect_win(win, 1);
-		s3c_fb_enable(sfb, blank_mode != FB_BLANK_POWERDOWN ? 1 : 0);
-		shadow_protect_win(win, 0);
-	}
+	s3c_fb_enable(sfb, sfb->enabled ? 1 : 0);
+	shadow_protect_win(win, 0);
 
 	pm_runtime_put_sync(sfb->dev);
 
-	return 0;
+	return output_on = sfb->output_on;
 }
 
 /**
-- 
1.6.6.rc2


^ permalink raw reply related

* [PATCH v3 1/4] video: s3c-fb: move video interface timing out of window setup data
From: Thomas Abraham @ 2012-03-24 16:40 UTC (permalink / raw)
  To: linux-arm-kernel
In-Reply-To: <1332606528-32338-1-git-send-email-thomas.abraham@linaro.org>

The video interface timing is independent of the window setup data.
The resolution of the window can be smaller than that of the lcd
panel to which the video data is output.

So move the video timing data from the per-window setup data to the
platform specific section in the platform data. This also removes
the restriction that atleast one window should have the same
resolution as that of the panel attached.

Cc: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
Acked-by: Jingoo Han <jg1.han@samsung.com>
---
 arch/arm/plat-samsung/include/plat/fb.h |    9 ++-
 drivers/video/s3c-fb.c                  |  112 +++++++++++++++++--------------
 2 files changed, 67 insertions(+), 54 deletions(-)

diff --git a/arch/arm/plat-samsung/include/plat/fb.h b/arch/arm/plat-samsung/include/plat/fb.h
index 0fedf47..39d6bd7 100644
--- a/arch/arm/plat-samsung/include/plat/fb.h
+++ b/arch/arm/plat-samsung/include/plat/fb.h
@@ -24,15 +24,16 @@
 
 /**
  * struct s3c_fb_pd_win - per window setup data
- * @win_mode: The display parameters to initialise (not for window 0)
+ * @xres     : The window X size.
+ * @yres     : The window Y size.
  * @virtual_x: The virtual X size.
  * @virtual_y: The virtual Y size.
  */
 struct s3c_fb_pd_win {
-	struct fb_videomode	win_mode;
-
 	unsigned short		default_bpp;
 	unsigned short		max_bpp;
+	unsigned short		xres;
+	unsigned short		yres;
 	unsigned short		virtual_x;
 	unsigned short		virtual_y;
 };
@@ -45,6 +46,7 @@ struct s3c_fb_pd_win {
  * @default_win: default window layer number to be used for UI layer.
  * @vidcon0: The base vidcon0 values to control the panel data format.
  * @vidcon1: The base vidcon1 values to control the panel data output.
+ * @vtiming: Video timing when connected to a RGB type panel.
  * @win: The setup data for each hardware window, or NULL for unused.
  * @display_mode: The LCD output display mode.
  *
@@ -58,6 +60,7 @@ struct s3c_fb_platdata {
 	void	(*setup_gpio)(void);
 
 	struct s3c_fb_pd_win	*win[S3C_FB_MAX_WIN];
+	struct fb_videomode     *vtiming;
 
 	u32			 default_win;
 
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index f310516..c94f40d 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -495,7 +495,6 @@ static int s3c_fb_set_par(struct fb_info *info)
 	u32 alpha = 0;
 	u32 data;
 	u32 pagewidth;
-	int clkdiv;
 
 	dev_dbg(sfb->dev, "setting framebuffer parameters\n");
 
@@ -532,48 +531,9 @@ static int s3c_fb_set_par(struct fb_info *info)
 	/* disable the window whilst we update it */
 	writel(0, regs + WINCON(win_no));
 
-	/* use platform specified window as the basis for the lcd timings */
-
-	if (win_no = sfb->pdata->default_win) {
-		clkdiv = s3c_fb_calc_pixclk(sfb, var->pixclock);
-
-		data = sfb->pdata->vidcon0;
-		data &= ~(VIDCON0_CLKVAL_F_MASK | VIDCON0_CLKDIR);
-
-		if (clkdiv > 1)
-			data |= VIDCON0_CLKVAL_F(clkdiv-1) | VIDCON0_CLKDIR;
-		else
-			data &= ~VIDCON0_CLKDIR;	/* 1:1 clock */
-
-		/* write the timing data to the panel */
-
-		if (sfb->variant.is_2443)
-			data |= (1 << 5);
-
-		writel(data, regs + VIDCON0);
-
+	if (win_no = sfb->pdata->default_win)
 		s3c_fb_enable(sfb, 1);
 
-		data = VIDTCON0_VBPD(var->upper_margin - 1) |
-		       VIDTCON0_VFPD(var->lower_margin - 1) |
-		       VIDTCON0_VSPW(var->vsync_len - 1);
-
-		writel(data, regs + sfb->variant.vidtcon);
-
-		data = VIDTCON1_HBPD(var->left_margin - 1) |
-		       VIDTCON1_HFPD(var->right_margin - 1) |
-		       VIDTCON1_HSPW(var->hsync_len - 1);
-
-		/* VIDTCON1 */
-		writel(data, regs + sfb->variant.vidtcon + 4);
-
-		data = VIDTCON2_LINEVAL(var->yres - 1) |
-		       VIDTCON2_HOZVAL(var->xres - 1) |
-		       VIDTCON2_LINEVAL_E(var->yres - 1) |
-		       VIDTCON2_HOZVAL_E(var->xres - 1);
-		writel(data, regs + sfb->variant.vidtcon + 8);
-	}
-
 	/* write the buffer address */
 
 	/* start and end registers stride is 8 */
@@ -1144,11 +1104,11 @@ static int __devinit s3c_fb_alloc_memory(struct s3c_fb *sfb,
 
 	dev_dbg(sfb->dev, "allocating memory for display\n");
 
-	real_size = windata->win_mode.xres * windata->win_mode.yres;
+	real_size = windata->xres * windata->yres;
 	virt_size = windata->virtual_x * windata->virtual_y;
 
 	dev_dbg(sfb->dev, "real_size=%u (%u.%u), virt_size=%u (%u.%u)\n",
-		real_size, windata->win_mode.xres, windata->win_mode.yres,
+		real_size, windata->xres, windata->yres,
 		virt_size, windata->virtual_x, windata->virtual_y);
 
 	size = (real_size > virt_size) ? real_size : virt_size;
@@ -1230,7 +1190,7 @@ static int __devinit s3c_fb_probe_win(struct s3c_fb *sfb, unsigned int win_no,
 				      struct s3c_fb_win **res)
 {
 	struct fb_var_screeninfo *var;
-	struct fb_videomode *initmode;
+	struct fb_videomode initmode;
 	struct s3c_fb_pd_win *windata;
 	struct s3c_fb_win *win;
 	struct fb_info *fbinfo;
@@ -1251,11 +1211,11 @@ static int __devinit s3c_fb_probe_win(struct s3c_fb *sfb, unsigned int win_no,
 	}
 
 	windata = sfb->pdata->win[win_no];
-	initmode = &windata->win_mode;
+	initmode = *sfb->pdata->vtiming;
 
 	WARN_ON(windata->max_bpp = 0);
-	WARN_ON(windata->win_mode.xres = 0);
-	WARN_ON(windata->win_mode.yres = 0);
+	WARN_ON(windata->xres = 0);
+	WARN_ON(windata->yres = 0);
 
 	win = fbinfo->par;
 	*res = win;
@@ -1294,7 +1254,9 @@ static int __devinit s3c_fb_probe_win(struct s3c_fb *sfb, unsigned int win_no,
 	}
 
 	/* setup the initial video mode from the window */
-	fb_videomode_to_var(&fbinfo->var, initmode);
+	initmode.xres = windata->xres;
+	initmode.yres = windata->yres;
+	fb_videomode_to_var(&fbinfo->var, &initmode);
 
 	fbinfo->fix.type	= FB_TYPE_PACKED_PIXELS;
 	fbinfo->fix.accel	= FB_ACCEL_NONE;
@@ -1339,6 +1301,53 @@ static int __devinit s3c_fb_probe_win(struct s3c_fb *sfb, unsigned int win_no,
 }
 
 /**
+ * s3c_fb_set_rgb_timing() - set video timing for rgb interface.
+ * @sfb: The base resources for the hardware.
+ *
+ * Set horizontal and vertical lcd rgb interface timing.
+ */
+static void s3c_fb_set_rgb_timing(struct s3c_fb *sfb)
+{
+	struct fb_videomode *vmode = sfb->pdata->vtiming;
+	void __iomem *regs = sfb->regs;
+	int clkdiv;
+	u32 data;
+
+	if (!vmode->pixclock)
+		s3c_fb_missing_pixclock(vmode);
+
+	clkdiv = s3c_fb_calc_pixclk(sfb, vmode->pixclock);
+
+	data = sfb->pdata->vidcon0;
+	data &= ~(VIDCON0_CLKVAL_F_MASK | VIDCON0_CLKDIR);
+
+	if (clkdiv > 1)
+		data |= VIDCON0_CLKVAL_F(clkdiv-1) | VIDCON0_CLKDIR;
+	else
+		data &= ~VIDCON0_CLKDIR;	/* 1:1 clock */
+
+	if (sfb->variant.is_2443)
+		data |= (1 << 5);
+	writel(data, regs + VIDCON0);
+
+	data = VIDTCON0_VBPD(vmode->upper_margin - 1) |
+	       VIDTCON0_VFPD(vmode->lower_margin - 1) |
+	       VIDTCON0_VSPW(vmode->vsync_len - 1);
+	writel(data, regs + sfb->variant.vidtcon);
+
+	data = VIDTCON1_HBPD(vmode->left_margin - 1) |
+	       VIDTCON1_HFPD(vmode->right_margin - 1) |
+	       VIDTCON1_HSPW(vmode->hsync_len - 1);
+	writel(data, regs + sfb->variant.vidtcon + 4);
+
+	data = VIDTCON2_LINEVAL(vmode->yres - 1) |
+	       VIDTCON2_HOZVAL(vmode->xres - 1) |
+	       VIDTCON2_LINEVAL_E(vmode->yres - 1) |
+	       VIDTCON2_HOZVAL_E(vmode->xres - 1);
+	writel(data, regs + sfb->variant.vidtcon + 8);
+}
+
+/**
  * s3c_fb_clear_win() - clear hardware window registers.
  * @sfb: The base resources for the hardware.
  * @win: The window to process.
@@ -1481,15 +1490,14 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
 		writel(0xffffff, regs + WKEYCON1);
 	}
 
+	s3c_fb_set_rgb_timing(sfb);
+
 	/* we have the register setup, start allocating framebuffers */
 
 	for (win = 0; win < fbdrv->variant.nr_windows; win++) {
 		if (!pd->win[win])
 			continue;
 
-		if (!pd->win[win]->win_mode.pixclock)
-			s3c_fb_missing_pixclock(&pd->win[win]->win_mode);
-
 		ret = s3c_fb_probe_win(sfb, win, fbdrv->win[win],
 				       &sfb->windows[win]);
 		if (ret < 0) {
@@ -1623,6 +1631,8 @@ static int s3c_fb_resume(struct device *dev)
 		shadow_protect_win(win, 0);
 	}
 
+	s3c_fb_set_rgb_timing(sfb);
+
 	/* restore framebuffers */
 	for (win_no = 0; win_no < S3C_FB_MAX_WIN; win_no++) {
 		win = sfb->windows[win_no];
-- 
1.6.6.rc2


^ permalink raw reply related

* [PATCH v3 0/4] video: s3c-fb: Rearrange the elements in platform data
From: Thomas Abraham @ 2012-03-24 16:40 UTC (permalink / raw)
  To: linux-arm-kernel

Changes since v2:
- Patch 3/4 is a new patch in this series. The real6410 and mini6410 boards
  use the display controllers window configuration data to represent video
  timing of two different lcd panels. Since the window configuration data
  should be not be used to specify timing of two different panels, this has
  been reworked in such a way that two instance of display controller's
  platform data is setup for the two supported lcd panels. Depending on the
  lcd panel specified using boot parameters, the corresponding platform data
  is registered. This maintains backward compatibility with existing
  functionality of supporting multiple lcd panels at runtime.

Changes since v1:
- Includes all changes suggested by Jingoo Han.
- Reworked s3c-fb platform data in all Samsung SoC based board files.

This patchset rearranges the elements in the platform data of the s3c-fb
driver with the intent of adding device tree support to the driver in
subsequent patches.

The first patch moves the video timing information from the individual window
setup data into the platform specific configuration section in the platform
data. The video timing is independent of the window setup. The resolution of
the window could be smaller than that of the lcd panel attached. So the video
timing data is removed from window configuration data.

The second patch removes the need for the 'default_win' element in the
platform data. This element was used to decide whether the video data
output from the controller should be enabled or disabled when the window
specified by 'default_win' is enabled or disabled. With the first patch
removing the need for atleast one window to be of the same resolution as
that of the lcd panel, it is now possible to decide when to enable/disable
the video data output based on the state of each window. If any of the
window is active, the lcd data output is enabled. Otherwise, the lcd data
output is disabled. Hence, the 'default_win' parameter from the platform
data can be removed, which anyways cannot be specified when using
device tree.

The third patch reworks the display controller's platform data that was
used to supply video timing information for two different panels on the
mini6410 and real6410 boards. That was not the correct usage of the window
data and hence reworks the runtime handling of two different lcd panels.

For all the Samsung SoC based boards, the forth patch reworks the platform
data of the display controller based on the changes introduced in the first
two patches.

This patch series is based on
http://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung.git [for-next]

with all patches merged from
https://github.com/schandinat/linux-2.6.git [fbdev-next]

and tested one Exynos4210 based Origen board (only compile tested for
other boards)

Thomas Abraham (4):
  video: s3c-fb: move video interface timing out of window setup data
  video: s3c-fb: remove 'default_win' element from platform data
  ARM: s3c64xx: Decouple lcd type from display controller window data
  ARM: Samsung: Rework platform data of s3c-fb driver

 arch/arm/mach-exynos/mach-nuri.c           |   26 +++---
 arch/arm/mach-exynos/mach-origen.c         |   24 +++--
 arch/arm/mach-exynos/mach-smdkv310.c       |   28 ++++---
 arch/arm/mach-exynos/mach-universal_c210.c |   26 +++---
 arch/arm/mach-s3c24xx/mach-smdk2416.c      |   27 +++---
 arch/arm/mach-s3c64xx/mach-anw6410.c       |   25 +++---
 arch/arm/mach-s3c64xx/mach-crag6410.c      |   25 +++---
 arch/arm/mach-s3c64xx/mach-hmt.c           |   24 +++--
 arch/arm/mach-s3c64xx/mach-mini6410.c      |   92 +++++++++++--------
 arch/arm/mach-s3c64xx/mach-real6410.c      |   90 +++++++++++--------
 arch/arm/mach-s3c64xx/mach-smartq5.c       |   26 +++---
 arch/arm/mach-s3c64xx/mach-smartq7.c       |   26 +++---
 arch/arm/mach-s3c64xx/mach-smdk6410.c      |   25 +++---
 arch/arm/mach-s5p64x0/mach-smdk6440.c      |   24 +++--
 arch/arm/mach-s5p64x0/mach-smdk6450.c      |   24 +++--
 arch/arm/mach-s5pc100/mach-smdkc100.c      |   27 +++---
 arch/arm/mach-s5pv210/mach-aquila.c        |   36 ++++----
 arch/arm/mach-s5pv210/mach-goni.c          |   26 +++---
 arch/arm/mach-s5pv210/mach-smdkv210.c      |   24 +++--
 arch/arm/plat-samsung/include/plat/fb.h    |   11 ++-
 drivers/video/s3c-fb.c                     |  135 +++++++++++++--------------
 21 files changed, 426 insertions(+), 345 deletions(-)


^ permalink raw reply

* [PATCH] fbdev: fix au1*fb builds
From: Manuel Lauss @ 2012-03-24 10:38 UTC (permalink / raw)
  To: linux-fbdev

Commit 1c16697bf9d5b206cb0d2b905a54de5e077296be
("drivers/video/au*fb.c: use devm_ functions) introduced 2 build failures
in the au1100fb and au1200fb drivers, fix them.

Signed-off-by: Manuel Lauss <manuel.lauss@googlemail.com>
---
 drivers/video/au1100fb.c |    5 +++--
 drivers/video/au1200fb.c |    2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/video/au1100fb.c b/drivers/video/au1100fb.c
index befcbd8..ffbce45 100644
--- a/drivers/video/au1100fb.c
+++ b/drivers/video/au1100fb.c
@@ -499,7 +499,8 @@ static int __devinit au1100fb_drv_probe(struct platform_device *dev)
 	au1100fb_fix.mmio_start = regs_res->start;
 	au1100fb_fix.mmio_len = resource_size(regs_res);
 
-	if (!devm_request_mem_region(au1100fb_fix.mmio_start,
+	if (!devm_request_mem_region(&dev->dev,
+				     au1100fb_fix.mmio_start,
 				     au1100fb_fix.mmio_len,
 				     DRIVER_NAME)) {
 		print_err("fail to lock memory region at 0x%08lx",
@@ -516,7 +517,7 @@ static int __devinit au1100fb_drv_probe(struct platform_device *dev)
 	fbdev->fb_len = fbdev->panel->xres * fbdev->panel->yres *
 		  	(fbdev->panel->bpp >> 3) * AU1100FB_NBR_VIDEO_BUFFERS;
 
-	fbdev->fb_mem = dmam_alloc_coherent(&dev->dev, &dev->dev,
+	fbdev->fb_mem = dmam_alloc_coherent(&dev->dev,
 					    PAGE_ALIGN(fbdev->fb_len),
 					    &fbdev->fb_phys, GFP_KERNEL);
 	if (!fbdev->fb_mem) {
diff --git a/drivers/video/au1200fb.c b/drivers/video/au1200fb.c
index 3e9a773..7ca79f0 100644
--- a/drivers/video/au1200fb.c
+++ b/drivers/video/au1200fb.c
@@ -1724,7 +1724,7 @@ static int __devinit au1200fb_drv_probe(struct platform_device *dev)
 		/* Allocate the framebuffer to the maximum screen size */
 		fbdev->fb_len = (win->w[plane].xres * win->w[plane].yres * bpp) / 8;
 
-		fbdev->fb_mem = dmam_alloc_noncoherent(&dev->dev, &dev->dev,
+		fbdev->fb_mem = dmam_alloc_noncoherent(&dev->dev,
 				PAGE_ALIGN(fbdev->fb_len),
 				&fbdev->fb_phys, GFP_KERNEL);
 		if (!fbdev->fb_mem) {
-- 
1.7.8.5


^ permalink raw reply related

* Re: [PATCH] Added backlight driver for Acer Aspire 4736
From: joeyli @ 2012-03-23  4:25 UTC (permalink / raw)
  To: Pradeep Subrahmanion
  Cc: Matthew Garrett, rpurdie, FlorianSchandinat, akpm, linux-fbdev,
	linux-kernel
In-Reply-To: <1332473811.3051.5.camel@debian.Gayathri>

於 五,2012-03-23 於 09:06 +0530,Pradeep Subrahmanion 提到:
> On Wed, 2012-03-21 at 11:00 +0800, joeyli wrote:
> > think the hotkey of backlight control only works with acpi_osi=Linux ?
> 
> yes , hot key control only works with this option.Any ideas about where
> the hot key events gets handled ? I tried logging inside
> 'acpi_video_device_notify' method in video.c . But the control does not
> seem to reach here . 
> 
> Thanks, 
> 
> Pradeep Subrahmanion

Hotkey change status is through _Q11 and _Q12 event but not wmi:


    Method (_Q11, 0, NotSerialized)             /* Brightness down */
    {
        If (LGreaterEqual (OSYS, 0x07D6))       /* Vista or later */
        {
            If (LEqual (OBV, 0xFF))
            {
                Notify (^^^PEGP.VGA.LCD, 0x87)
            }
            Else
            {
                Notify (^^^OVGA.DD03, 0x87)
            }
        }
        Else                                    /* 0x07D1 (XP) or 0x03E8 (Linux) */
        {
            ^^^OVGA.AINT (One, BRTS)		/* access AINT, it touch BCLP register */
            If (LEqual (^^^WMID.BAEF, One))
            {
                Store (BRTS, Local1)
                Store (^^^WMID.LBL0, Local2)
                Add (Local2, Local1, Local2)
                Store (Local2, ^^^WMID.NTDC)
                Notify (WMID, 0x80)
            }
        }
    }

Method (AINT, 2, NotSerialized)
{
...
    Else
    {
        If (LEqual (Arg0, One))         /* Linux or XP */
        {
            Add (Arg1, One, Arg1)
            Store (Divide (Multiply (Arg1, 0xFF), 0x0A, ), BCLP)
            Or (BCLP, 0x80000000, BCLP)		/* touch BCLP register */
            Store (0x02, ASLC)
        }


That's why I said acpi_osi"!Windows 2006" should also works to you. Unfortunately,
there have something wrong in video driver for support this machine on XP mode.


thanks a lot!
Joey Lee


^ permalink raw reply

* Re: [PATCH] Added backlight driver for Acer Aspire 4736
From: Pradeep Subrahmanion @ 2012-03-23  3:48 UTC (permalink / raw)
  To: joeyli
  Cc: Matthew Garrett, rpurdie, FlorianSchandinat, akpm, linux-fbdev,
	linux-kernel
In-Reply-To: <1332298845.10557.343.camel@linux-s257.site>

On Wed, 2012-03-21 at 11:00 +0800, joeyli wrote:
> think the hotkey of backlight control only works with acpi_osi=Linux ?

yes , hot key control only works with this option.Any ideas about where
the hot key events gets handled ? I tried logging inside
'acpi_video_device_notify' method in video.c . But the control does not
seem to reach here . 

Thanks, 

Pradeep Subrahmanion


^ permalink raw reply

* [GIT PULL] fbdev updates for 3.4
From: Florian Tobias Schandinat @ 2012-03-22 18:38 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: LKML, linux-fbdev@vger.kernel.org

Hi Linus,

please pull the changes below.
Have a nice weekend.


Thanks,

Florian Tobias Schandinat


The following changes since commit c16fa4f2ad19908a47c63d8fa436a1178438c7e7:

  Linux 3.3 (2012-03-18 16:15:34 -0700)

are available in the git repository at:

  git://github.com/schandinat/linux-2.6.git fbdev-updates-for-3.4

for you to fetch changes up to 6bff98b455cf3e666fd0e3d0d908eba874de0eee:

  Revert "video:uvesafb: Fix oops that uvesafb try to execute NX-protected page" (2012-03-21 13:28:31 +0000)

----------------------------------------------------------------
fbdev updates for 3.4

It includes:
- drivers for Samsung Exynos MIPI DSI and display port
- i740fb to support those old Intel chips
- large updates to OMAP, viafb and sh_mobile_lcdcfb
- some updates to s3c-fb and udlfb, few patches to others

----------------------------------------------------------------
Anatolij Gustschin (2):
      fbdev: da8xx:: fix reporting of the display timing info
      fbdev: da8xx: add support for SP10Q010 display

Archit Taneja (2):
      OMAPDSS: Features: Maintain dss_feats as a list
      OMAPDSS: DISPC: Fix scaling constraints for OMAP4

Axel Lin (1):
      video: convert drivers/video/* to use module_spi_driver()

Ben Collins (2):
      udlfb: Make sure to get correct endian keys from vendor descriptor
      udlfb: Add module_param to allow forcing pixel_limit

Bernie Thompson (2):
      udlfb: add maintainer
      udlfb: fix hcd_buffer_free panic on unplug/replug

Dan Carpenter (1):
      viafb: NULL dereference on allocation failure in query_edid()

Danny Kukawka (2):
      OMAPDSS: VENC: fix NULL pointer dereference in DSS2 VENC sysfs debug attr on OMAP4
      riva/fbdev: fix several -Wuninitialized

Donghwa Lee (3):
      video: support MIPI-DSI controller driver
      video: backlight: support s6e8ax0 panel driver based on MIPI DSI
      MAINTAINERS: add entry for exynos mipi display drivers

Florian Tobias Schandinat (26):
      Merge commit 'v3.3-rc1' into fbdev-next
      viafb: add auxiliary device management infrastructure
      viafb: set correct polarity for second adapter
      viafb: fill xres and yres
      viafb: make single framebuffer multiple adapter mode work
      viafb: make SAMM to also work on LCD
      viafb: fix I2C emulation on GPIO ports
      viafb: add initial EDID support
      Merge branch 'viafb-samm' into viafb-next
      Merge branch 'viafb-aux' into viafb-next
      i740fb: fix compile error when CONFIG_MTRR is not selected
      viafb: another workaround for OLPCs weird wiring
      viafb: Fix bug in centering code
      Merge branch 'fbdev-for-linus' into fbdev-next
      Merge branch 'fbdev-for-linus' into fbdev-next
      viafb: LCD bpp cleanup
      Merge pull request #1 from bernieplug/fbdev-next
      Merge commit 'v3.3-rc6' into fbdev-next
      viafb: modetable conversion
      viafb: avoid refresh and mode lookup in set_par
      Merge branch 'for-next' of git://linuxtv.org/pinchartl/fbdev into fbdev-next
      Merge branch 'viafb-next' of git://github.com/schandinat/linux-2.6 into fbdev-next
      Merge branch 'for-3.4' of git://gitorious.org/linux-omap-dss2/linux into fbdev-next
      Merge commit 'v3.3' into fbdev-next
      Revert "MAINTAINERS: add entry for exynos mipi display drivers"
      Revert "video:uvesafb: Fix oops that uvesafb try to execute NX-protected page"

Grazvydas Ignotas (2):
      OMAPDSS: TPO-TD03MTEA1: fix suspend hang
      OMAPDSS: TPO-TD03MTEA1: update default gamma

Jean Delvare (1):
      fbdev: bfin_adv7393fb: Drop needless include

Jingoo Han (8):
      video: use gpio_request_one
      video: s3c-fb: fix checkpatch error
      video: s3c-fb: add alpha value width setting
      video: s3c-fb: add video clock running at data under-flow
      video: support DP controller driver
      video: s3c-fb: use devm_request_irq()
      video: s3c-fb: Add support EXYNOS5 FIMD
      MAINTAINERS: add maintainer entry for Exynos DP driver

Julia Lawall (4):
      OMAPDSS: use devm_ functions
      drivers/video/au*fb.c: use devm_ functions
      drivers/video/pxa168fb.c: use devm_ functions
      drivers/video/pvr2fb.c: ensure arguments to request_irq and free_irq are compatible

Kay Sievers (1):
      udlfb: remove sysfs framebuffer device with USB .disconnect()

Kuninori Morimoto (2):
      fbdev: remove dependency of FB_SH_MOBILE_MERAM from FB_SH_MOBILE_LCDC
      fbdev: sh_mipi_dsi: add extra phyctrl for sh_mipi_dsi_info

Lajos Molnar (3):
      OMAPDSS: DISPC: Fix OMAP4 supported color formats
      OMAPDSS: DISPC: Fix FIR coefficients
      OMAPDSS: MANAGER/APPLY: Add runtime_pm protection around wait_for_go/vsync functions

Laurent Pinchart (55):
      fbdev: sh_mobile_lcdc: Reorder code into sections
      fbdev: sh_mobile_lcdc: Mark init-only symbols with __devinit(const)
      fbdev: sh_mobile_lcdc: Move pm runtime enable to probe()
      fbdev: sh_mobile_lcdc: Don't pass struct device around
      fbdev: sh_mobile_lcdc: Create functions to turn the display on/off
      fbdev: sh_mobile_hdmi: Don't access LCDC channel in notifier callback
      sh_mobile_hdmi: Remove platform data lcd_dev field
      fbdev: sh_mobile_lcdc: Add sh_mobile_lcdc_entity definition
      fbdev: sh_mobile_hdmi: Implement sh_mobile_lcdc_entity interface
      fbdev: sh_mipi_dsi: Implement sh_mobile_lcdc_entity interface
      fbdev: sh_mobile_lcdc: Handle HDMI/MIPI transmitter device directly
      arm: mach-shmobile: Add LCDC tx_dev field to platform data
      fbdev: sh_mipi_dsi: Don't hook up into board_cfg display operations
      fbdev: sh_mobile_hdmi: Don't hook up into board_cfg display operations
      arm: mach-shmobile: Don't initialize the hdmi_info lcd_chan field
      fbdev: sh_mobile_hdmi: Remove sh_mobile_hdmi_info lcd_chan field
      fbdev: sh_mobile_lcdc: Remove board configuration owner field
      fbdev: sh_mobile_lcdc: Remove board configuration board_data field
      fbdev: sh_mobile_lcdc: Move brightness ops to sh_mobile_lcdc_bl_info
      fbdev: sh_mobile_lcdc: Merge board_cfg and lcd_size_cfg into panel_cfg
      sh_mobile_lcdc: Add an lcdc channel pointer to sh_mobile_lcdc_entity
      sh_mobile_hdmi: Use sh_mobile_lcdc_entity::channel to access fb_info
      fbdev: sh_mobile_lcdc: Remove fb_info parameter to display_on operation
      fbdev: sh_mobile_lcdc: Return display connection state in display_on
      sh_mobile_lcdc: Add display notify callback to sh_mobile_lcdc_chan
      sh_mobile_hdmi: Use LCDC notification callback
      fbdev: sh_mobile_lcdc: Pass a video mode to the notify callback
      fbdev: sh_mobile_hdmi: Don't set sh_hdmi::mode in the display on handler
      fbdev: sh_mobile_hdmi: Don't access LCDC fb_info
      fbdev: sh_mobile_lcdc: Store display mode in a struct fb_videomode
      fbdev: sh_mobile_lcdc: Rename (lcd|num)_cfg (lcd|num)_modes
      fbdev: sh_mobile_lcdc: Reorganize the sh_mobile_lcdc_chan structure
      fbdev: sh_mobile_lcdc: Add sh_mobile_format_info() function
      fbdev: sh_mobile_lcdc: Store the format in struct sh_mobile_lcdc_chan
      fbdev: sh_mobile_lcdc: Split fb init/cleanup from channel init/cleanup
      fbdev: sh_mobile_lcdc: Pass physical device pointer to DMA functions
      fbdev: sh_mobile_lcdc: Store configuration in channel structure
      fbdev: sh_mobile_lcdc: Pass channel pointer to sh_mobile_wait_for_vsync
      arm: mach-shmobile: Split MERAM resources into regs and meram
      fbdev: sh_mobile_meram: Request memory regions for memory resources
      fbdev: sh_mobile_meram: Add _cfg suffix to struct sh_mobile_meram_icb
      fbdev: sh_mobile_meram: Make variables unsigned where applicable
      fbdev: sh_mobile_meram: Make current_reg field store the current reg set
      fbdev: sh_mobile_meram: Add struct sh_mobile_meram_icb
      fbdev: sh_mobile_meram: Don't inline everything
      fbdev: sh_mobile_meram: Divide the code into sections
      fbdev: sh_mobile_meram: Use genalloc to manage MERAM allocation
      fbdev: sh_mobile_meram: Allocate ICBs automatically
      arm: mach-shmobile: Don't set MERAM ICB numbers in platform data
      fbdev: sh_mobile_meram: Remove unused sh_mobile_meram_icb_cfg fields
      fbdev: sh_mobile_lcdc: Don't store copy of platform data
      arm: mach-shmobile: Constify sh_mobile_meram_cfg structures
      fbdev: sh_mobile_meram: Don't perform update in register operation
      fbdev: sh_mobile_meram: Remove unneeded sanity checks
      fbdev: sh_mobile_meram: Implement system suspend/resume

Manjunathappa, Prakash (3):
      video: da8xx-fb: reset LCDC only if functional clock changes with DVFS
      video: da8xx-fb: Fix build warning on unused label
      video:da8xx-fb: calculate pixel clock period for the panel

Mark Brown (1):
      video: s3c-fb: Convert to devm style allocation

Martin Decky (1):
      udlfb: Improve debugging printouts with refresh rate

Mythri P K (6):
      OMAPDSS: HDMI: remove duplicate video interface code
      OMAPDSS: HDMI: update static timing table
      OMAPDSS: HDMI: change the timing match logic
      OMAPDSS: HDMI: remove duplicate code and mode parameter
      OMAPDSS: HDMI: Move Avi-infoframe struct to hdmi_ip_data
      OMAPDSS: HDMI: Add M2 divider while calculating clkout

Olivier Sobrie (1):
      udlfb: Fix invalid return codes in edid sysfs entry store function

Ondrej Zary (1):
      Resurrect Intel740 driver: i740fb

Peter Korsgaard (1):
      atmel_lcdfb: support 16bit BGR:565 mode, remove unsupported 15bit modes

Philipp Zabel (1):
      video: pxafb: add clk_prepare/clk_unprepare calls

Ricardo Neri (4):
      OMAPDSS: HDMI: Correct source of the pixel clock in ACR calculation
      OMAPDSS: Add DSS feature for HDMI MCLK for audio
      OMAPDSS: HDMI: Implement initialization of MCLK
      OMAPDSS: HDMI: Modify logic to configure MCLK

Tomi Valkeinen (30):
      OMAPDSS: FEAT: Add FIFO_MERGE feature
      OMAPDSS: APPLY: add fifo merge support funcs
      OMAPDSS: APPLY: add fifo-merge support
      OMAPDSS: DISPC: print fifo threshold values in bytes
      OMAPDSS: DISPC: move fifo threhold calc to dispc.c
      OMAPDSS: DISPC: Add naive threshold calc for fifomerge
      Merge branch 'work/fifomerge'
      Merge commit 'v3.3-rc4'
      OMAPDSS: cleanup probe functions
      OMAPFB: remove old blizzard driver
      OMAPFB: Remove OMAP2/3 support from old omapfb driver
      OMAPDSS: Remove video SRAM support
      OMAPFB: Remove video SRAM support (old omapfb)
      OMAP2+: remove unneeded #include omapfb.h
      OMAP: N770: remove HWA742 platform data
      OAMPFB: remove unused omapfb_set_ctrl_platform_data()
      OMAPFB: remove early mem alloc from old omapfb
      OMAPFB: remove mem info from platform_data
      OMAPFB: remove unused fb_format_to_dss_mode()
      OMAPFB: Move old omapfb private structs to a private include file
      OMAPFB: remove omapfb_set_platform_data()
      OMAP1: pass LCD config with omapfb_set_lcd_config()
      OMAP: Remove OMAP_TAG_LCD and OMAP_TAG_FBMEM
      OMAP1: Remove unused LCD devices from board files
      OMAPFB: remove remaining OMAP arch checks
      Merge branch 'work/old-omapfb-removal'
      Merge commit 'v3.3-rc6'
      OMAPDSS: APPLY: print warning if wait_pending_extra_info_updates fails
      OMAPDSS: APPLY: fix clearing shadow dirty flag with manual update
      OMAPDSS: register dss drivers in module init

Tony Lindgren (1):
      ARM: OMAP2+: Fix compile error when FB_OMAP2 is not set

Vasily Khoruzhick (1):
      pxafb: do console locking before calling fb_blank()

Wang YanQing (2):
      video:uvesafb: Fix oops that uvesafb try to execute NX-protected page
      video:uvesafb: notice user when we failed to save hardware state

Yegor Yefremov (1):
      OMAPDSS: add Innolux AT080TN52 display support

 MAINTAINERS                                        |   33 +-
 arch/arm/mach-omap1/board-ams-delta.c              |    9 +-
 arch/arm/mach-omap1/board-fsample.c                |   15 +-
 arch/arm/mach-omap1/board-h2.c                     |   15 +-
 arch/arm/mach-omap1/board-h3.c                     |    9 +-
 arch/arm/mach-omap1/board-htcherald.c              |    9 +-
 arch/arm/mach-omap1/board-innovator.c              |   11 +-
 arch/arm/mach-omap1/board-nokia770.c               |   19 +-
 arch/arm/mach-omap1/board-osk.c                    |   14 +-
 arch/arm/mach-omap1/board-palmte.c                 |   10 +-
 arch/arm/mach-omap1/board-palmtt.c                 |   10 +-
 arch/arm/mach-omap1/board-palmz71.c                |   10 +-
 arch/arm/mach-omap1/board-perseus2.c               |   15 +-
 arch/arm/mach-omap1/board-sx1.c                    |   16 +-
 arch/arm/mach-omap2/io.c                           |    1 -
 arch/arm/mach-shmobile/board-ag5evm.c              |   24 +-
 arch/arm/mach-shmobile/board-ap4evb.c              |  302 ++--
 arch/arm/mach-shmobile/board-bonito.c              |    6 +-
 arch/arm/mach-shmobile/board-mackerel.c            |  106 +-
 arch/arm/plat-omap/common.c                        |    2 -
 arch/arm/plat-omap/fb.c                            |  334 +----
 arch/arm/plat-omap/fb.h                            |   10 -
 arch/arm/plat-omap/include/plat/blizzard.h         |   12 -
 arch/arm/plat-omap/include/plat/board.h            |    2 -
 arch/arm/plat-omap/include/plat/hwa742.h           |    8 -
 arch/arm/plat-omap/include/plat/vram.h             |   21 +-
 arch/arm/plat-samsung/include/plat/regs-fb.h       |   33 +-
 arch/sh/boards/mach-ap325rxa/setup.c               |   22 +-
 arch/sh/boards/mach-ecovec24/setup.c               |   20 +-
 arch/sh/boards/mach-kfr2r09/lcd_wqvga.c            |   10 +-
 arch/sh/boards/mach-kfr2r09/setup.c                |    8 +-
 arch/sh/boards/mach-migor/lcd_qvga.c               |    3 +-
 arch/sh/boards/mach-migor/setup.c                  |   16 +-
 arch/sh/boards/mach-se/7724/setup.c                |   12 +-
 arch/sh/include/mach-kfr2r09/mach/kfr2r09.h        |   16 +-
 arch/sh/include/mach-migor/mach/migor.h            |    2 +-
 drivers/video/Kconfig                              |   39 +-
 drivers/video/Makefile                             |    3 +
 drivers/video/atmel_lcdfb.c                        |   12 +-
 drivers/video/au1100fb.c                           |   32 +-
 drivers/video/au1200fb.c                           |    9 +-
 drivers/video/bf537-lq035.c                        |   12 +-
 drivers/video/bf54x-lq043fb.c                      |    4 +-
 drivers/video/bfin-lq035q1-fb.c                    |    8 +-
 drivers/video/bfin_adv7393fb.c                     |    7 +-
 drivers/video/da8xx-fb.c                           |   79 +-
 drivers/video/exynos/Kconfig                       |   37 +
 drivers/video/exynos/Makefile                      |    8 +
 drivers/video/exynos/exynos_dp_core.c              | 1058 +++++++++++++
 drivers/video/exynos/exynos_dp_core.h              |  206 +++
 drivers/video/exynos/exynos_dp_reg.c               | 1173 ++++++++++++++
 drivers/video/exynos/exynos_dp_reg.h               |  335 ++++
 drivers/video/exynos/exynos_mipi_dsi.c             |  600 +++++++
 drivers/video/exynos/exynos_mipi_dsi_common.c      |  896 +++++++++++
 drivers/video/exynos/exynos_mipi_dsi_common.h      |   46 +
 drivers/video/exynos/exynos_mipi_dsi_lowlevel.c    |  618 ++++++++
 drivers/video/exynos/exynos_mipi_dsi_lowlevel.h    |  112 ++
 drivers/video/exynos/exynos_mipi_dsi_regs.h        |  149 ++
 drivers/video/exynos/s6e8ax0.c                     |  898 +++++++++++
 drivers/video/exynos/s6e8ax0.h                     |   21 +
 drivers/video/fbmem.c                              |   18 +-
 drivers/video/i740_reg.h                           |  309 ++++
 drivers/video/i740fb.c                             | 1337 ++++++++++++++++
 drivers/video/msm/mddi_client_nt35399.c            |    7 +-
 drivers/video/msm/mddi_client_toshiba.c            |    7 +-
 drivers/video/omap/Kconfig                         |   16 +-
 drivers/video/omap/Makefile                        |   12 +-
 drivers/video/omap/blizzard.c                      | 1648 --------------------
 drivers/video/omap/dispc.c                         | 1547 ------------------
 drivers/video/omap/dispc.h                         |   46 -
 drivers/video/omap/hwa742.c                        |   21 +-
 drivers/video/omap/lcd_inn1610.c                   |   10 +-
 drivers/video/omap/lcd_mipid.c                     |   14 +-
 drivers/video/omap/omapfb.h                        |   25 +-
 drivers/video/omap/omapfb_main.c                   |   30 +-
 drivers/video/omap/rfbi.c                          |  598 -------
 drivers/video/omap2/displays/panel-acx565akm.c     |   13 +-
 drivers/video/omap2/displays/panel-generic-dpi.c   |   23 +
 .../omap2/displays/panel-lgphilips-lb035q02.c      |   12 +-
 .../omap2/displays/panel-nec-nl8048hl11-01b.c      |   12 +-
 drivers/video/omap2/displays/panel-taal.c          |    4 +-
 .../video/omap2/displays/panel-tpo-td043mtea1.c    |  177 ++-
 drivers/video/omap2/dss/apply.c                    |  275 +++-
 drivers/video/omap2/dss/core.c                     |  135 +-
 drivers/video/omap2/dss/dispc.c                    |  121 +-
 drivers/video/omap2/dss/dispc_coefs.c              |    9 +-
 drivers/video/omap2/dss/display.c                  |   10 -
 drivers/video/omap2/dss/dsi.c                      |   65 +-
 drivers/video/omap2/dss/dss.c                      |   17 +-
 drivers/video/omap2/dss/dss.h                      |   10 +-
 drivers/video/omap2/dss/dss_features.c             |  181 ++-
 drivers/video/omap2/dss/dss_features.h             |   54 +-
 drivers/video/omap2/dss/hdmi.c                     |  278 ++--
 drivers/video/omap2/dss/manager.c                  |   12 +-
 drivers/video/omap2/dss/rfbi.c                     |   36 +-
 drivers/video/omap2/dss/ti_hdmi.h                  |   56 +-
 drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c          |   94 +-
 drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h          |   47 -
 drivers/video/omap2/dss/venc.c                     |   32 +-
 drivers/video/omap2/omapfb/omapfb-ioctl.c          |    2 +-
 drivers/video/omap2/omapfb/omapfb-main.c           |  101 +--
 drivers/video/omap2/vram.c                         |   99 +--
 drivers/video/pvr2fb.c                             |    4 +-
 drivers/video/pxa168fb.c                           |   15 +-
 drivers/video/pxafb.c                              |   10 +-
 drivers/video/riva/fbdev.c                         |    5 +-
 drivers/video/s3c-fb.c                             |  133 ++-
 drivers/video/sh_mipi_dsi.c                        |   99 +-
 drivers/video/sh_mobile_hdmi.c                     |  297 +---
 drivers/video/sh_mobile_lcdcfb.c                   | 1298 +++++++++-------
 drivers/video/sh_mobile_lcdcfb.h                   |   84 +-
 drivers/video/sh_mobile_meram.c                    |  690 +++++----
 drivers/video/udlfb.c                              |  180 ++-
 drivers/video/uvesafb.c                            |   14 +-
 drivers/video/via/Makefile                         |    5 +-
 drivers/video/via/chip.h                           |    3 -
 drivers/video/via/dvi.c                            |    7 +-
 drivers/video/via/dvi.h                            |    3 +-
 drivers/video/via/hw.c                             |  130 +-
 drivers/video/via/hw.h                             |    9 +-
 drivers/video/via/lcd.c                            |   82 +-
 drivers/video/via/lcd.h                            |    3 +-
 drivers/video/via/share.h                          |  331 ----
 drivers/video/via/via_aux.c                        |   88 ++
 drivers/video/via/via_aux.h                        |   93 ++
 drivers/video/via/via_aux_ch7301.c                 |   50 +
 drivers/video/via/via_aux_edid.c                   |  100 ++
 drivers/video/via/via_aux_sii164.c                 |   54 +
 drivers/video/via/via_aux_vt1621.c                 |   44 +
 drivers/video/via/via_aux_vt1622.c                 |   50 +
 drivers/video/via/via_aux_vt1625.c                 |   50 +
 drivers/video/via/via_aux_vt1631.c                 |   46 +
 drivers/video/via/via_aux_vt1632.c                 |   54 +
 drivers/video/via/via_aux_vt1636.c                 |   46 +
 drivers/video/via/via_i2c.c                        |   10 +-
 drivers/video/via/viafbdev.c                       |   87 +-
 drivers/video/via/viafbdev.h                       |    6 +
 drivers/video/via/viamode.c                        |  713 ++--------
 drivers/video/via/viamode.h                        |   11 +-
 include/linux/fb.h                                 |    1 +
 include/linux/omapfb.h                             |   32 +-
 include/video/exynos_dp.h                          |  131 ++
 include/video/exynos_mipi_dsim.h                   |  359 +++++
 include/video/sh_mipi_dsi.h                        |    1 +
 include/video/sh_mobile_hdmi.h                     |    2 -
 include/video/sh_mobile_lcdc.h                     |   35 +-
 include/video/sh_mobile_meram.h                    |   45 +-
 include/video/udlfb.h                              |    1 +
 148 files changed, 12349 insertions(+), 8209 deletions(-)
 delete mode 100644 arch/arm/plat-omap/fb.h
 delete mode 100644 arch/arm/plat-omap/include/plat/blizzard.h
 delete mode 100644 arch/arm/plat-omap/include/plat/hwa742.h
 create mode 100644 drivers/video/exynos/Kconfig
 create mode 100644 drivers/video/exynos/Makefile
 create mode 100644 drivers/video/exynos/exynos_dp_core.c
 create mode 100644 drivers/video/exynos/exynos_dp_core.h
 create mode 100644 drivers/video/exynos/exynos_dp_reg.c
 create mode 100644 drivers/video/exynos/exynos_dp_reg.h
 create mode 100644 drivers/video/exynos/exynos_mipi_dsi.c
 create mode 100644 drivers/video/exynos/exynos_mipi_dsi_common.c
 create mode 100644 drivers/video/exynos/exynos_mipi_dsi_common.h
 create mode 100644 drivers/video/exynos/exynos_mipi_dsi_lowlevel.c
 create mode 100644 drivers/video/exynos/exynos_mipi_dsi_lowlevel.h
 create mode 100644 drivers/video/exynos/exynos_mipi_dsi_regs.h
 create mode 100644 drivers/video/exynos/s6e8ax0.c
 create mode 100644 drivers/video/exynos/s6e8ax0.h
 create mode 100644 drivers/video/i740_reg.h
 create mode 100644 drivers/video/i740fb.c
 delete mode 100644 drivers/video/omap/blizzard.c
 delete mode 100644 drivers/video/omap/dispc.c
 delete mode 100644 drivers/video/omap/dispc.h
 delete mode 100644 drivers/video/omap/rfbi.c
 create mode 100644 drivers/video/via/via_aux.c
 create mode 100644 drivers/video/via/via_aux.h
 create mode 100644 drivers/video/via/via_aux_ch7301.c
 create mode 100644 drivers/video/via/via_aux_edid.c
 create mode 100644 drivers/video/via/via_aux_sii164.c
 create mode 100644 drivers/video/via/via_aux_vt1621.c
 create mode 100644 drivers/video/via/via_aux_vt1622.c
 create mode 100644 drivers/video/via/via_aux_vt1625.c
 create mode 100644 drivers/video/via/via_aux_vt1631.c
 create mode 100644 drivers/video/via/via_aux_vt1632.c
 create mode 100644 drivers/video/via/via_aux_vt1636.c
 create mode 100644 include/video/exynos_dp.h
 create mode 100644 include/video/exynos_mipi_dsim.h

^ permalink raw reply

* Re: [PATCH] Added backlight driver for Acer Aspire 4736
From: Pradeep Subrahmanion @ 2012-03-22 16:29 UTC (permalink / raw)
  To: joeyli
  Cc: Matthew Garrett, rpurdie, FlorianSchandinat, akpm, linux-fbdev,
	linux-kernel
In-Reply-To: <1332408881.10557.416.camel@linux-s257.site>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="windows-1254", Size: 3819 bytes --]

On Thu, 2012-03-22 at 17:34 +0800, joeyli wrote:
> 於 四,2012-03-22 於 11:26 +0530,Pradeep Subrahmanion 提到:
> > >From acer acpi ,I came to know that the 4730 series uses new wmi interface .
> > 
> > http://code.google.com/p/aceracpi/wiki/SupportedHardware
> > 
> 
> I am not sure what is the WMIDv2, but it's not the current WMI v2 in
> acer-wmi driver.
> 
> > Thanks ,
> > 
> > Pradeep Subrahmanion
> > 
> > On Thu, Mar 22, 2012 at 9:24 AM, joeyli <jlee@suse.com> wrote:
> > > 於 四,2012-03-22 於 09:02 +0530,Pradeep Subrahmanion 提到:
> > >> On Thu, 2012-03-22 at 11:25 +0800, joeyli wrote:
> > >> > 於 四,2012-03-22 於 08:03 +0530,Pradeep Subrahmanion 提到:
> > >> > > On Thu, 2012-03-22 at 09:33 +0800, joeyli wrote:
> > >> > > > 於 四,2012-03-22 於 00:39 +0530,Pradeep Subrahmanion 提到:
> > >> > > > > > This new patch should remove acpi_video0 interface on your machine.
> > >> > > > > > Please kindly provide your dmidecode:
> > >> > > > > >  dmidecode > dmidecode.log
> > >> > > > > >
> > >> > > > > > And,
> > >> > > > > > please make should the patch really applied, you can do a bit change on
> > >> > > > > > pr_info message by yourself.
> > >> > > > >
> > >> > > > >    Sorry . I think there was some mistake . I tried the patch again. Now
> > >> > > > > I see only intel_backlight inside /sys/class/backlight. There is no
> > >> > > > > acer-wmi interface . Is this the expected behavior ? . Or am I missing
> > >> > > > > anything ?
> > >> > > > >
> > >> > > >
> > >> > > > Yes, this is the expected behavior! But, now I doubt your issue was
> > >> > > > workaround by acpi_osi=Linux but not intel_backlight.
> > >> > > >
> > >> > >
> > >> > > > >
> > >> > > > >
> > >> > > > > >
> > >> > > > > > > echo 5 > /sys/class/backlight/acpi_video0/brightness
> > >> > > > > > > echo 5 > /sys/class/backlight/intel_backlight/brightness
> > >> > > > > > >
> > >> > > > > > > But it doesn't make any change .
> > >> > > > > > >
> > >> > > > > > > In my case  , 'acpi_backlight = vendor' does not make any difference since the hot key control
> > >> > > > > > >
> > >> > > > > > > already starts working with 'acpi_osi=Linux' option.
> > >> > > > > > >
> > >> > > > > > > cat /proc/cmdline gives ,
> > >> > > > > > >
> > >> > > > > > > BOOT_IMAGE=/boot/vmlinuz-3.3.0+
> > >> > > > > > > root=UUIDð197a59-c067-4fd8-ad90-c4d721816077 ro acpi_osi=Linux
> > >> > > > > > >
> > >> > > > > > >
> > >> > > > > > > Thanks ,
> > >> > > > > > >
> > >> > > > > > > Pradeep Subrahmanion
> > >> > > > > > >
> > >> > > > > >
> > >> > > > > > OK, that's more clearly, please remove acpi_osi=Linux then re-test, I
> > >> > > > > > think the hotkey of backlight control only works with acpi_osi=Linux ?
> > >> > > > > >
> > >> > > >
> > >> > > > Does your backlight control still work if you remove acpi_osi=Linux ?
> > >> > >
> > >> > >    If I remove acpi_osi=Linux , the hot key control stops working .
> > >> > >
> > >> >
> > >> > What is the preload OS in your machine when you bought it? Windows XP,
> > >> > Vista or Windows 7?
> > >>
> > >>    It was Windows XP.
> > >>
> > >
> > > The WDDM driver didn't support by Windows XP, the brightness control on
> > > XP should works with _BCM or OpRegion.
> > >
> > > Wonder how does brightness control work on XP with your machine.
> > >
> > > I will dig more in your dsdt...
> > >
> > >
> 
> Please kindly try acpi_osi="!Windows 2006", I think it also works to
> you.

   I tried giving this option . It gives me a blank screen while
booting. Hot keys are not working .


> 
> 
> Thanks
> Joey Lee
> 


Regards, 

Pradeep Subrahmanion.


--
To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: [GIT PULL] OMAP DSS for v3.4
From: Arnd Bergmann @ 2012-03-22 15:58 UTC (permalink / raw)
  To: Florian Tobias Schandinat; +Cc: Tomi Valkeinen, linux-omap, linux-fbdev
In-Reply-To: <4F6B4A80.309@gmx.de>

On Thursday 22 March 2012, Florian Tobias Schandinat wrote:
> On 03/19/2012 04:24 PM, Arnd Bergmann wrote:
> > I've looked at the specific conflicts again, and it seems that the only
> > conflicting commit in arm-soc is 2e3ee9f45b "ARM: OMAP1: Move most of
> > plat/io.h into local iomap.h". I'm planning to send that one very early,
> > as soon as Russell has his first set up patches merged, so I don't
> > actually have to resolve the conflict here unless Florian is also
> > there early.
> 
> just for your info, I am going to send my pull request today. As I
> didn't find any pull request from you until now, I didn't pull any of
> the branches below.

Ok, thanks for the notification. I'm still waiting for Russell to go
first, so I'll pull in your branch.

	Arnd

^ permalink raw reply

* Re: [GIT PULL] OMAP DSS for v3.4
From: Florian Tobias Schandinat @ 2012-03-22 15:51 UTC (permalink / raw)
  To: Arnd Bergmann; +Cc: Tomi Valkeinen, linux-omap, linux-fbdev
In-Reply-To: <201203191624.42020.arnd@arndb.de>

Arnd,

On 03/19/2012 04:24 PM, Arnd Bergmann wrote:
> I've looked at the specific conflicts again, and it seems that the only
> conflicting commit in arm-soc is 2e3ee9f45b "ARM: OMAP1: Move most of
> plat/io.h into local iomap.h". I'm planning to send that one very early,
> as soon as Russell has his first set up patches merged, so I don't
> actually have to resolve the conflict here unless Florian is also
> there early.

just for your info, I am going to send my pull request today. As I
didn't find any pull request from you until now, I didn't pull any of
the branches below.


Best regards,

Florian Tobias Schandinat

> 
> Florian, if I end up being faster than you, feel free to pull the
> omap/cleanup branch from git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc.git
> if you want to get a conflict resolution using the minimum set of patches
> from upstream. Alternatively, pulling "cleanup" from 
> git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap should give you
> the same.
> 
> 	Arnd
> --
> To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply

* Re: usage of height and width in fb_var_screeninfo
From: Geert Uytterhoeven @ 2012-03-22 12:15 UTC (permalink / raw)
  To: linux-fbdev
In-Reply-To: <CAGA24ML642uOP1tEp+VOTe0OZQ9S3HnP8Zi+N1n8X-QsjP9P2w@mail.gmail.com>

On Thu, Mar 22, 2012 at 12:52, Jun Nie <niej0001@gmail.com> wrote:
> Does anyone happen to know the usage of below member in
> fb_var_screeninfo? I do not know whether mm stand for geometry size or
> memory, can not find its usage in any driver neither. We considering
> to use it as zoomed size.
>
> struct fb_var_screeninfo {
>        __u32 height;                   /* height of picture in mm    */
>        __u32 width;                    /* width of picture in mm     */

They are both geometry sizes in millimeters.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply

* usage of height and width in fb_var_screeninfo
From: Jun Nie @ 2012-03-22 11:52 UTC (permalink / raw)
  To: linux-fbdev

Does anyone happen to know the usage of below member in
fb_var_screeninfo? I do not know whether mm stand for geometry size or
memory, can not find its usage in any driver neither. We considering
to use it as zoomed size.

struct fb_var_screeninfo {
        __u32 height;                   /* height of picture in mm    */
        __u32 width;                    /* width of picture in mm     */

Jun

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox