[PATCH] video: fb: vt8500: Convert framebuffer drivers to standardized binding
Jean-Christophe PLAGNIOL-VILLARD
plagnioj at jcrosoft.com
Fri Mar 29 14:43:10 EDT 2013
On 17:49 Sun 24 Mar , Tony Prisk wrote:
> Now that a display timing binding is available, convert our almost identical
> binding to use the standard binding.
>
> This patch converts the vt8500 and wm8505 framebuffer drivers and
> associated dts/dtsi files to use the standard binding as defined in
> bindings/video/display-timing.txt.
>
> There are two side-effects of making this conversion:
>
> 1) The fb node should now be in the board file, rather than the soc file as
> the display-timing node is a child of the fb node.
>
> 2) We still require a bits per pixel property to initialize the framebuffer
> for the different lcd panels. Rather than including this as part of the
> display timing, it is moved into the framebuffer node.
>
> I have also taken the opportunity to alphabetise the includes of each
> driver to avoid double-ups.
>
> Signed-off-by: Tony Prisk <linux at prisktech.co.nz>
> ---
> Hi Florian,
>
> This patch is based on top of the previous patchset (0/5 video: vt8500 patches
> for 3.10). It could be considered patch 6 of the same set.
>
> Regards
> Tony P
>
> .../devicetree/bindings/video/via,vt8500-fb.txt | 48 ++++----------
> .../devicetree/bindings/video/wm,wm8505-fb.txt | 32 +++++----
> arch/arm/boot/dts/vt8500-bv07.dts | 24 +++----
> arch/arm/boot/dts/vt8500.dtsi | 8 ---
> arch/arm/boot/dts/wm8505-ref.dts | 21 +++---
> arch/arm/boot/dts/wm8505.dtsi | 7 --
> arch/arm/boot/dts/wm8650-mid.dts | 21 +++---
> arch/arm/boot/dts/wm8650.dtsi | 7 --
> arch/arm/boot/dts/wm8850-w70v2.dts | 21 +++---
> arch/arm/boot/dts/wm8850.dtsi | 7 --
> drivers/video/Kconfig | 6 ++
> drivers/video/vt8500lcdfb.c | 53 ++++++---------
> drivers/video/wm8505fb.c | 68 ++++++++------------
> 13 files changed, 130 insertions(+), 193 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/video/via,vt8500-fb.txt b/Documentation/devicetree/bindings/video/via,vt8500-fb.txt
> index c870b64..2871e21 100644
> --- a/Documentation/devicetree/bindings/video/via,vt8500-fb.txt
> +++ b/Documentation/devicetree/bindings/video/via,vt8500-fb.txt
> @@ -5,58 +5,32 @@ Required properties:
> - compatible : "via,vt8500-fb"
> - reg : Should contain 1 register ranges(address and length)
> - interrupts : framebuffer controller interrupt
> -- display: a phandle pointing to the display node
> +- bits-per-pixel : bit depth of framebuffer (16 or 32)
>
> -Required nodes:
> -- display: a display node is required to initialize the lcd panel
> - This should be in the board dts.
> -- default-mode: a videomode within the display with timing parameters
> - as specified below.
> +Required subnodes:
> +- display-timings: see display-timing.txt for information
>
> Example:
>
> - fb at d800e400 {
> + fb at d8050800 {
> compatible = "via,vt8500-fb";
> reg = <0xd800e400 0x400>;
> interrupts = <12>;
> - display = <&display>;
> - default-mode = <&mode0>;
> - };
> -
> -VIA VT8500 Display
> ------------------------------------------------------
> -Required properties (as per of_videomode_helper):
> -
> - - hactive, vactive: Display resolution
> - - hfront-porch, hback-porch, hsync-len: Horizontal Display timing parameters
> - in pixels
> - vfront-porch, vback-porch, vsync-len: Vertical display timing parameters in
> - lines
> - - clock: displayclock in Hz
> - - bpp: lcd panel bit-depth.
> - <16> for RGB565, <32> for RGB888
> -
> -Optional properties (as per of_videomode_helper):
> - - width-mm, height-mm: Display dimensions in mm
> - - hsync-active-high (bool): Hsync pulse is active high
> - - vsync-active-high (bool): Vsync pulse is active high
> - - interlaced (bool): This is an interlaced mode
> - - doublescan (bool): This is a doublescan mode
> + bits-per-pixel = <16>;
>
> -Example:
> - display: display at 0 {
> - modes {
> - mode0: mode at 0 {
> + display-timings {
> + native-mode = <&timing0>;
> + timing0: 800x480 {
> + clock-frequency = <0>; /* unused but required */
> hactive = <800>;
> vactive = <480>;
> - hback-porch = <88>;
> hfront-porch = <40>;
> + hback-porch = <88>;
> hsync-len = <0>;
> vback-porch = <32>;
> vfront-porch = <11>;
> vsync-len = <1>;
> - clock = <0>; /* unused but required */
> - bpp = <16>; /* non-standard but required */
> };
> };
> };
> +
> diff --git a/Documentation/devicetree/bindings/video/wm,wm8505-fb.txt b/Documentation/devicetree/bindings/video/wm,wm8505-fb.txt
> index 3d325e1..0bcadb2 100644
> --- a/Documentation/devicetree/bindings/video/wm,wm8505-fb.txt
> +++ b/Documentation/devicetree/bindings/video/wm,wm8505-fb.txt
> @@ -4,20 +4,30 @@ Wondermedia WM8505 Framebuffer
> Required properties:
> - compatible : "wm,wm8505-fb"
> - reg : Should contain 1 register ranges(address and length)
> -- via,display: a phandle pointing to the display node
> +- bits-per-pixel : bit depth of framebuffer (16 or 32)
>
> -Required nodes:
> -- display: a display node is required to initialize the lcd panel
> - This should be in the board dts. See definition in
> - Documentation/devicetree/bindings/video/via,vt8500-fb.txt
> -- default-mode: a videomode node as specified in
> - Documentation/devicetree/bindings/video/via,vt8500-fb.txt
> +Required subnodes:
> +- display-timings: see display-timing.txt for information
>
> Example:
>
> - fb at d8050800 {
> + fb at d8051700 {
> compatible = "wm,wm8505-fb";
> - reg = <0xd8050800 0x200>;
> - display = <&display>;
> - default-mode = <&mode0>;
> + reg = <0xd8051700 0x200>;
> + bits-per-pixel = <16>;
> +
> + display-timings {
> + native-mode = <&timing0>;
> + timing0: 800x480 {
> + clock-frequency = <0>; /* unused but required */
> + hactive = <800>;
> + vactive = <480>;
> + hfront-porch = <40>;
> + hback-porch = <88>;
> + hsync-len = <0>;
> + vback-porch = <32>;
> + vfront-porch = <11>;
> + vsync-len = <1>;
> + };
> + };
> };
> diff --git a/arch/arm/boot/dts/vt8500-bv07.dts b/arch/arm/boot/dts/vt8500-bv07.dts
> index 567cf4e..7ec9a41 100644
> --- a/arch/arm/boot/dts/vt8500-bv07.dts
> +++ b/arch/arm/boot/dts/vt8500-bv07.dts
> @@ -12,24 +12,26 @@
> / {
> model = "Benign BV07 Netbook";
>
> - /*
> - * Display node is based on Sascha Hauer's patch on dri-devel.
> - * Added a bpp property to calculate the size of the framebuffer
> - * until the binding is formalized.
> - */
> - display: display at 0 {
> - modes {
> - mode0: mode at 0 {
> + interrupt-parent = <&intc>;
> +
> + fb at d8050800 {
> + compatible = "via,vt8500-fb";
> + reg = <0xd800e400 0x400>;
> + interrupts = <12>;
> + bits-per-pixel = <16>;
> +
> + display-timings {
> + native-mode = <&timing0>;
> + timing0: 800x480 {
> + clock-frequency = <0>; /* unused but required */
> hactive = <800>;
> vactive = <480>;
> - hback-porch = <88>;
> hfront-porch = <40>;
> + hback-porch = <88>;
> hsync-len = <0>;
> vback-porch = <32>;
> vfront-porch = <11>;
> vsync-len = <1>;
> - clock = <0>; /* unused but required */
> - bpp = <16>; /* non-standard but required */
> };
> };
> };
> diff --git a/arch/arm/boot/dts/vt8500.dtsi b/arch/arm/boot/dts/vt8500.dtsi
> index cf31ced..fc25d9f 100644
> --- a/arch/arm/boot/dts/vt8500.dtsi
> +++ b/arch/arm/boot/dts/vt8500.dtsi
> @@ -98,14 +98,6 @@
> interrupts = <43>;
> };
>
> - fb at d800e400 {
> - compatible = "via,vt8500-fb";
> - reg = <0xd800e400 0x400>;
> - interrupts = <12>;
> - display = <&display>;
> - default-mode = <&mode0>;
> - };
no this belong here at Soc level not board
fb at d800e400 {
compatible = "via,vt8500-fb";
reg = <0xd800e400 0x400>;
interrupts = <12>;
};
> -
> ge_rops at d8050400 {
> compatible = "wm,prizm-ge-rops";
> reg = <0xd8050400 0x100>;
> diff --git a/arch/arm/boot/dts/wm8505-ref.dts b/arch/arm/boot/dts/wm8505-ref.dts
> index fd4e248..a600572 100644
> --- a/arch/arm/boot/dts/wm8505-ref.dts
> +++ b/arch/arm/boot/dts/wm8505-ref.dts
> @@ -12,24 +12,23 @@
> / {
> model = "Wondermedia WM8505 Netbook";
>
> - /*
> - * Display node is based on Sascha Hauer's patch on dri-devel.
> - * Added a bpp property to calculate the size of the framebuffer
> - * until the binding is formalized.
> - */
> - display: display at 0 {
> - modes {
> - mode0: mode at 0 {
> + fb at d8050800 {
> + compatible = "wm,wm8505-fb";
> + reg = <0xd8050800 0x200>;
> + bits-per-pixel = <32>;
> +
> + display-timings {
> + native-mode = <&timing0>;
> + timing0: 800x480 {
> + clock-frequency = <0>; /* unused but required */
> hactive = <800>;
> vactive = <480>;
> - hback-porch = <88>;
> hfront-porch = <40>;
> + hback-porch = <88>;
> hsync-len = <0>;
> vback-porch = <32>;
> vfront-porch = <11>;
> vsync-len = <1>;
> - clock = <0>; /* unused but required */
> - bpp = <32>; /* non-standard but required */
> };
> };
> };
> diff --git a/arch/arm/boot/dts/wm8505.dtsi b/arch/arm/boot/dts/wm8505.dtsi
> index e74a1c0..826bd8d 100644
> --- a/arch/arm/boot/dts/wm8505.dtsi
> +++ b/arch/arm/boot/dts/wm8505.dtsi
> @@ -128,13 +128,6 @@
> interrupts = <0>;
> };
>
> - fb at d8050800 {
> - compatible = "wm,wm8505-fb";
> - reg = <0xd8050800 0x200>;
> - display = <&display>;
> - default-mode = <&mode0>;
> - };
> -
> ge_rops at d8050400 {
> compatible = "wm,prizm-ge-rops";
> reg = <0xd8050400 0x100>;
> diff --git a/arch/arm/boot/dts/wm8650-mid.dts b/arch/arm/boot/dts/wm8650-mid.dts
> index cefd938..d77bf22 100644
> --- a/arch/arm/boot/dts/wm8650-mid.dts
> +++ b/arch/arm/boot/dts/wm8650-mid.dts
> @@ -12,24 +12,23 @@
> / {
> model = "Wondermedia WM8650-MID Tablet";
>
> - /*
> - * Display node is based on Sascha Hauer's patch on dri-devel.
> - * Added a bpp property to calculate the size of the framebuffer
> - * until the binding is formalized.
> - */
> - display: display at 0 {
> - modes {
> - mode0: mode at 0 {
> + fb at d8050800 {
> + compatible = "wm,wm8505-fb";
> + reg = <0xd8050800 0x200>;
> + bits-per-pixel = <16>;
> +
> + display-timings {
> + native-mode = <&timing0>;
> + timing0: 800x480 {
> + clock-frequency = <0>; /* unused but required */
> hactive = <800>;
> vactive = <480>;
> - hback-porch = <88>;
> hfront-porch = <40>;
> + hback-porch = <88>;
> hsync-len = <0>;
> vback-porch = <32>;
> vfront-porch = <11>;
> vsync-len = <1>;
> - clock = <0>; /* unused but required */
> - bpp = <16>; /* non-standard but required */
> };
> };
> };
> diff --git a/arch/arm/boot/dts/wm8650.dtsi b/arch/arm/boot/dts/wm8650.dtsi
> index db3c0a1..2073963 100644
> --- a/arch/arm/boot/dts/wm8650.dtsi
> +++ b/arch/arm/boot/dts/wm8650.dtsi
> @@ -128,13 +128,6 @@
> interrupts = <43>;
> };
>
> - fb at d8050800 {
> - compatible = "wm,wm8505-fb";
> - reg = <0xd8050800 0x200>;
> - display = <&display>;
> - default-mode = <&mode0>;
> - };
> -
> ge_rops at d8050400 {
> compatible = "wm,prizm-ge-rops";
> reg = <0xd8050400 0x100>;
> diff --git a/arch/arm/boot/dts/wm8850-w70v2.dts b/arch/arm/boot/dts/wm8850-w70v2.dts
> index fcc660c..9b56701 100644
> --- a/arch/arm/boot/dts/wm8850-w70v2.dts
> +++ b/arch/arm/boot/dts/wm8850-w70v2.dts
> @@ -15,24 +15,23 @@
> / {
> model = "Wondermedia WM8850-W70v2 Tablet";
>
> - /*
> - * Display node is based on Sascha Hauer's patch on dri-devel.
> - * Added a bpp property to calculate the size of the framebuffer
> - * until the binding is formalized.
> - */
> - display: display at 0 {
> - modes {
> - mode0: mode at 0 {
> + fb at d8051700 {
> + compatible = "wm,wm8505-fb";
> + reg = <0xd8051700 0x200>;
> + bits-per-pixel = <16>;
> +
> + display-timings {
> + native-mode = <&timing0>;
> + timing0: 800x480 {
> + clock-frequency = <0>; /* unused but required */
> hactive = <800>;
> vactive = <480>;
> - hback-porch = <88>;
> hfront-porch = <40>;
> + hback-porch = <88>;
> hsync-len = <0>;
> vback-porch = <32>;
> vfront-porch = <11>;
> vsync-len = <1>;
> - clock = <0>; /* unused but required */
> - bpp = <16>; /* non-standard but required */
> };
> };
> };
> diff --git a/arch/arm/boot/dts/wm8850.dtsi b/arch/arm/boot/dts/wm8850.dtsi
> index e8cbfdc..dfc50a4 100644
> --- a/arch/arm/boot/dts/wm8850.dtsi
> +++ b/arch/arm/boot/dts/wm8850.dtsi
> @@ -135,13 +135,6 @@
> };
> };
>
> - fb at d8051700 {
> - compatible = "wm,wm8505-fb";
> - reg = <0xd8051700 0x200>;
> - display = <&display>;
> - default-mode = <&mode0>;
> - };
> -
> ge_rops at d8050400 {
> compatible = "wm,prizm-ge-rops";
> reg = <0xd8050400 0x100>;
> diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
> index ad762ed..d0c932a 100644
> --- a/drivers/video/Kconfig
> +++ b/drivers/video/Kconfig
> @@ -1794,6 +1794,9 @@ config FB_VT8500
> select FB_SYS_FILLRECT if (!FB_WMT_GE_ROPS)
> select FB_SYS_COPYAREA if (!FB_WMT_GE_ROPS)
> select FB_SYS_IMAGEBLIT
> + select FB_MODE_HELPERS
> + select OF_DISPLAY_TIMING
> + select OF_VIDEOMODE
> help
> This is the framebuffer driver for VIA VT8500 integrated LCD
> controller.
> @@ -1804,6 +1807,9 @@ config FB_WM8505
> select FB_SYS_FILLRECT if (!FB_WMT_GE_ROPS)
> select FB_SYS_COPYAREA if (!FB_WMT_GE_ROPS)
> select FB_SYS_IMAGEBLIT
> + select FB_MODE_HELPERS
> + select OF_DISPLAY_TIMING
> + select OF_VIDEOMODE
> help
> This is the framebuffer driver for WonderMedia WM8xxx-series
> integrated LCD controller. This driver covers the WM8505, WM8650
> diff --git a/drivers/video/vt8500lcdfb.c b/drivers/video/vt8500lcdfb.c
> index 1c34821..816e8ce 100644
> --- a/drivers/video/vt8500lcdfb.c
> +++ b/drivers/video/vt8500lcdfb.c
> @@ -15,20 +15,21 @@
> * GNU General Public License for more details.
> */
>
> -#include <linux/module.h>
> -#include <linux/kernel.h>
> -#include <linux/errno.h>
> -#include <linux/string.h>
> -#include <linux/mm.h>
> -#include <linux/slab.h>
> #include <linux/delay.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/errno.h>
> #include <linux/fb.h>
> #include <linux/init.h>
> #include <linux/interrupt.h>
> #include <linux/io.h>
> -#include <linux/dma-mapping.h>
> +#include <linux/kernel.h>
> +#include <linux/mm.h>
> +#include <linux/module.h>
> #include <linux/platform_device.h>
> +#include <linux/slab.h>
> +#include <linux/string.h>
> #include <linux/wait.h>
> +#include <video/of_display_timing.h>
>
> #include "vt8500lcdfb.h"
>
> @@ -290,11 +291,11 @@ static int vt8500lcd_probe(struct platform_device *pdev)
> {
> struct vt8500lcd_info *fbi;
> struct resource *res;
> + struct display_timings *disp_timing;
> void *addr;
> int irq, ret;
>
> struct fb_videomode of_mode;
> - struct device_node *np;
> u32 bpp;
> dma_addr_t fb_mem_phys;
> unsigned long fb_mem_len;
> @@ -359,31 +360,19 @@ static int vt8500lcd_probe(struct platform_device *pdev)
> goto failed_free_res;
> }
>
> - np = of_parse_phandle(pdev->dev.of_node, "default-mode", 0);
> - if (!np) {
> - pr_err("%s: No display description in Device Tree\n", __func__);
> - ret = -EINVAL;
> - goto failed_free_res;
> - }
> + disp_timing = of_get_display_timings(pdev->dev.of_node);
> + if (!disp_timing)
> + return -EINVAL;
> +
> + ret = of_get_fb_videomode(pdev->dev.of_node, &of_mode,
> + OF_USE_NATIVE_MODE);
> + if (ret)
> + return ret;
> +
> + ret = of_property_read_u32(pdev->dev.of_node, "bits-per-pixel", &bpp);
> + if (ret)
> + return ret;
>
> - /*
> - * This code is copied from Sascha Hauer's of_videomode helper
> - * and can be replaced with a call to the helper once mainlined
> - */
> - ret = 0;
> - ret |= of_property_read_u32(np, "hactive", &of_mode.xres);
> - ret |= of_property_read_u32(np, "vactive", &of_mode.yres);
> - ret |= of_property_read_u32(np, "hback-porch", &of_mode.left_margin);
> - ret |= of_property_read_u32(np, "hfront-porch", &of_mode.right_margin);
> - ret |= of_property_read_u32(np, "hsync-len", &of_mode.hsync_len);
> - ret |= of_property_read_u32(np, "vback-porch", &of_mode.upper_margin);
> - ret |= of_property_read_u32(np, "vfront-porch", &of_mode.lower_margin);
> - ret |= of_property_read_u32(np, "vsync-len", &of_mode.vsync_len);
> - ret |= of_property_read_u32(np, "bpp", &bpp);
> - if (ret) {
> - pr_err("%s: Unable to read display properties\n", __func__);
> - goto failed_free_res;
> - }
> of_mode.vmode = FB_VMODE_NONINTERLACED;
>
> /* try allocating the framebuffer */
> diff --git a/drivers/video/wm8505fb.c b/drivers/video/wm8505fb.c
> index 5057457..ab112ad 100644
> --- a/drivers/video/wm8505fb.c
> +++ b/drivers/video/wm8505fb.c
> @@ -14,23 +14,24 @@
> * GNU General Public License for more details.
> */
>
> -#include <linux/module.h>
> -#include <linux/kernel.h>
> -#include <linux/errno.h>
> -#include <linux/string.h>
> -#include <linux/mm.h>
> -#include <linux/slab.h>
> #include <linux/delay.h>
> +#include <linux/dma-mapping.h>
> #include <linux/fb.h>
> +#include <linux/errno.h>
> #include <linux/init.h>
> #include <linux/interrupt.h>
> #include <linux/io.h>
> -#include <linux/dma-mapping.h>
> -#include <linux/platform_device.h>
> -#include <linux/wait.h>
> +#include <linux/kernel.h>
> +#include <linux/memblock.h>
> +#include <linux/mm.h>
> +#include <linux/module.h>
> #include <linux/of.h>
> #include <linux/of_fdt.h>
> -#include <linux/memblock.h>
> +#include <linux/platform_device.h>
> +#include <linux/slab.h>
> +#include <linux/string.h>
> +#include <linux/wait.h>
> +#include <video/of_display_timing.h>
>
> #include "wm8505fb_regs.h"
>
> @@ -276,12 +277,12 @@ static struct fb_ops wm8505fb_ops = {
> static int wm8505fb_probe(struct platform_device *pdev)
> {
> struct wm8505fb_info *fbi;
> - struct resource *res;
> + struct resource *res;
> + struct display_timings *disp_timing;
> void *addr;
> int ret;
>
> - struct fb_videomode of_mode;
> - struct device_node *np;
> + struct fb_videomode mode;
> u32 bpp;
> dma_addr_t fb_mem_phys;
> unsigned long fb_mem_len;
> @@ -321,33 +322,20 @@ static int wm8505fb_probe(struct platform_device *pdev)
> if (fbi->regbase == NULL)
> return -EBUSY;
>
> - np = of_parse_phandle(pdev->dev.of_node, "default-mode", 0);
> - if (!np) {
> - pr_err("%s: No display description in Device Tree\n", __func__);
> + disp_timing = of_get_display_timings(pdev->dev.of_node);
> + if (!disp_timing)
> return -EINVAL;
> - }
>
> - /*
> - * This code is copied from Sascha Hauer's of_videomode helper
> - * and can be replaced with a call to the helper once mainlined
> - */
> - ret = 0;
> - ret |= of_property_read_u32(np, "hactive", &of_mode.xres);
> - ret |= of_property_read_u32(np, "vactive", &of_mode.yres);
> - ret |= of_property_read_u32(np, "hback-porch", &of_mode.left_margin);
> - ret |= of_property_read_u32(np, "hfront-porch", &of_mode.right_margin);
> - ret |= of_property_read_u32(np, "hsync-len", &of_mode.hsync_len);
> - ret |= of_property_read_u32(np, "vback-porch", &of_mode.upper_margin);
> - ret |= of_property_read_u32(np, "vfront-porch", &of_mode.lower_margin);
> - ret |= of_property_read_u32(np, "vsync-len", &of_mode.vsync_len);
> - ret |= of_property_read_u32(np, "bpp", &bpp);
> - if (ret) {
> - pr_err("%s: Unable to read display properties\n", __func__);
> - return -EINVAL;
> - }
> + ret = of_get_fb_videomode(pdev->dev.of_node, &mode, OF_USE_NATIVE_MODE);
> + if (ret)
> + return ret;
> +
> + ret = of_property_read_u32(pdev->dev.of_node, "bits-per-pixel", &bpp);
> + if (ret)
> + return ret;
>
> - of_mode.vmode = FB_VMODE_NONINTERLACED;
> - fb_videomode_to_var(&fbi->fb.var, &of_mode);
> + mode.vmode = FB_VMODE_NONINTERLACED;
why this hanble by of_get_fb_videomode
Best Regards,
J.
> + fb_videomode_to_var(&fbi->fb.var, &mode);
>
> fbi->fb.var.nonstd = 0;
> fbi->fb.var.activate = FB_ACTIVATE_NOW;
> @@ -356,7 +344,7 @@ static int wm8505fb_probe(struct platform_device *pdev)
> fbi->fb.var.width = -1;
>
> /* try allocating the framebuffer */
> - fb_mem_len = of_mode.xres * of_mode.yres * 2 * (bpp / 8);
> + fb_mem_len = mode.xres * mode.yres * 2 * (bpp / 8);
> fb_mem_virt = dmam_alloc_coherent(&pdev->dev, fb_mem_len, &fb_mem_phys,
> GFP_KERNEL);
> if (!fb_mem_virt) {
> @@ -364,8 +352,8 @@ static int wm8505fb_probe(struct platform_device *pdev)
> return -ENOMEM;
> }
>
> - fbi->fb.var.xres_virtual = of_mode.xres;
> - fbi->fb.var.yres_virtual = of_mode.yres * 2;
> + fbi->fb.var.xres_virtual = mode.xres;
> + fbi->fb.var.yres_virtual = mode.yres * 2;
> fbi->fb.var.bits_per_pixel = bpp;
>
> fbi->fb.fix.smem_start = fb_mem_phys;
> --
> 1.7.9.5
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
More information about the linux-arm-kernel
mailing list