![Marek Vasut](/assets/img/avatar_default.png)
The issue fixed by this patch manifests only then using X11 with mxsfb driver. The X11 will display either shifted image or otherwise distorted image on the LCD. The problem is that the X11 tries to reconfigure the framebuffer and along the way calls fb_ops.fb_set_par() with X11's desired configuration values. The field of particular interest is fb_info->var.sync which contains non-standard values if configured by kernel. These are either FB_SYNC_DATA_ENABLE_HIGH_ACT, FB_SYNC_DOTCLK_FAILING_ACT or both, depending on the platform configuration. Both of these values are defined in the include/linux/mxsfb.h file. The driver interprets these values and configures the LCD controller accordingly. Yet X11 only has access to the standard values for this field defined in include/uapi/linux/fb.h and thus, unlike kernel, omits these special values. This results in distorted image on the LCD. This patch moves these non-standard values into new field of the mxsfb_platform_data structure so the driver can in turn check this field instead of the video mode field for these specific portions. Moreover, this patch prefixes these values with MXSFB_SYNC_ prefix instead of FB_SYNC_ prefix to prevent confusion of subsequent users. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Fabio Estevam <fabio.estevam@freescale.com> Cc: Linux ARM <linux-arm-kernel@lists.infradead.org> Cc: Linux FBDEV <linux-fbdev@vger.kernel.org> Cc: Lothar Waßmann <LW@karo-electronics.de> Cc: Sascha Hauer <kernel@pengutronix.de> Tested-by: Fabio Estevam <fabio.estevam@freescale.com> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
53 lines
1.9 KiB
C
53 lines
1.9 KiB
C
/*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
* MA 02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef __LINUX_MXSFB_H
|
|
#define __LINUX_MXSFB_H
|
|
|
|
#include <linux/fb.h>
|
|
|
|
#define STMLCDIF_8BIT 1 /** pixel data bus to the display is of 8 bit width */
|
|
#define STMLCDIF_16BIT 0 /** pixel data bus to the display is of 16 bit width */
|
|
#define STMLCDIF_18BIT 2 /** pixel data bus to the display is of 18 bit width */
|
|
#define STMLCDIF_24BIT 3 /** pixel data bus to the display is of 24 bit width */
|
|
|
|
#define MXSFB_SYNC_DATA_ENABLE_HIGH_ACT (1 << 6)
|
|
#define MXSFB_SYNC_DOTCLK_FAILING_ACT (1 << 7) /* failing/negtive edge sampling */
|
|
|
|
struct mxsfb_platform_data {
|
|
struct fb_videomode *mode_list;
|
|
unsigned mode_count;
|
|
|
|
unsigned default_bpp;
|
|
|
|
unsigned dotclk_delay; /* refer manual HW_LCDIF_VDCTRL4 register */
|
|
unsigned ld_intf_width; /* refer STMLCDIF_* macros */
|
|
|
|
unsigned fb_size; /* Size of the video memory. If zero a
|
|
* default will be used
|
|
*/
|
|
unsigned long fb_phys; /* physical address for the video memory. If
|
|
* zero the framebuffer memory will be dynamically
|
|
* allocated. If specified,fb_size must also be specified.
|
|
* fb_phys must be unused by Linux.
|
|
*/
|
|
u32 sync; /* sync mask, contains MXSFB specifics not
|
|
* carried in fb_info->var.sync
|
|
*/
|
|
};
|
|
|
|
#endif /* __LINUX_MXSFB_H */
|