fbdev: Add the lacking FB_SYNC_* for matching the DISPLAY_FLAGS_*
Subsystems (5)
PATCH v5 1/5 fbdev: Add the lacking FB_SYNC_* for matching the DISPLAY_FLAGS_*
Without that fix, drivers using the fb_videomode_from_videomode
function will not be able to get certain information because some DISPLAY_FLAGS_* have no corresponding FB_SYNC_*.
---
ChangeLog v4->v5:
- Added Geert Uytterhoeven, Grant Likely and Shawn Guo in the Cc list.
- Moved the definitions to a non-userspace header.
- Corrected the comment of the second define.
ChangeLog v3->v4:
- Fixed the issue with FB_SYNC_PIXDAT_HIGH_ACT value.
ChangeLog v2->v3:
- Added Jean-Christophe PLAGNIOL-VILLARD's ACK.
--- drivers/video/fbmon.c | 4 ++++ include/linux/fb.h | 3 +++ 2 files changed, 7 insertions(+)
drivers/video/fbmon.c +4 -0
@@ -1402,6 +1402,10 @@ int fb_videomode_from_videomode(const struct videomode *vm, fbmode->sync |=FB_SYNC_HOR_HIGH_ACT ;if (vm->flags &DISPLAY_FLAGS_VSYNC_HIGH ) fbmode->sync |=FB_SYNC_VERT_HIGH_ACT ; +if (vm->flags &DISPLAY_FLAGS_DE_HIGH ) + fbmode->sync |=FB_SYNC_DE_HIGH_ACT ; +if (vm->flags &DISPLAY_FLAGS_PIXDATA_POSEDGE ) + fbmode->sync |=FB_SYNC_PIXDAT_HIGH_ACT ;if (vm->flags &DISPLAY_FLAGS_INTERLACED ) fbmode->vmode |=FB_VMODE_INTERLACED ;if (vm->flags &DISPLAY_FLAGS_DOUBLESCAN )
include/linux/fb.h +3 -0
@@ -45,6 +45,9 @@ struct device_node;#define FB_SIGNAL_SYNC_ON_GREEN 8#define FB_SIGNAL_SERRATION_ON 16 +#define FB_SYNC_DE_HIGH_ACT 64/* data enable active high flag */ +#define FB_SYNC_PIXDAT_HIGH_ACT 128/* drive data on positive edge */ +#define FB_MISC_PRIM_COLOR 1#define FB_MISC_1ST_DETAIL 2/* First Detailed Timing is preferred */ struct fb_chroma {
Signature · 1 line
1.7.9.5
PATCH v5 2/5 video: mx3fb: Add device tree suport.
---
ChangeLog v4->v5:
- Added some people in the Cc list.
- The full ipu register range is now passed to the driver,
the code and the documentation were adapted to it.
- Updated the documentation not to mention the lcd controller, the ipu was mentioned instead.
- The ipu patch was removed from this patchset, as a consequence the mx3fb code has been adapted not to expect the dma ipu driver to be probed trough the device tree.
ChangeLog v3->v4:
- Updated bindings.
- Updated documentation accordinly.
- Updated code accordinly.
- Fixed the lack of "ret =" in of_property_read_string(display_np, "model", &name);
- Supressed some compilation warnings.
ChangeLog v2->v3:
- The device tree bindings were reworked in order to make it look more like the IPUv3 bindings.
- The interface_pix_fmt property now looks like the IPUv3 one.
--- .../devicetree/bindings/video/fsl,mx3-fb.txt | 44 +++++++ drivers/video/Kconfig | 2 + drivers/video/mx3fb.c | 123 +++++++++++++++++--- 3 files changed, 151 insertions(+), 18 deletions(-) create mode 100644 Documentation/devicetree/bindings/video/fsl,mx3-fb.txt
Documentation/devicetree/bindings/video/fsl,mx3-fb.txt new file +44 -0
@@ -0,0 +1,44 @@ +Freescale MX3 IPU. +================== + +Required properties: +- compatible: Should be "fsl,<chip>-ipu". compatible chips include the imx31 and the + imx35. +- reg: should be register base and length as documented in the datasheet. +- clocks: Handle to the ipu_gate clock. +- display: Phandle to a "fsl,mx3-parallel-display" compatible display node + which is described below. + +Example: + +ipu: ipu at 53fc0000 { + compatible = "fsl,imx35-ipu"; + reg = <0x53fc0000 0x4000>; + clocks = <&clks 55>; +}; + +Parallel display support +======================== + +Required properties: +- compatible: Should be "fsl,mx3-parallel-display". +- model : The user-visible name of the display. + +Optional properties: +- interface_pix_fmt: How this display is connected to the + crtc. Currently supported types: "rgb24", "rgb565", "rgb666". + +It can also have an optional timing subnode as described in + Documentation/devicetree/bindings/video/display-timing.txt. + +Example: + +display0: display at di0 { + compatible = "fsl,mx3-parallel-display"; + interface-pix-fmt = "rgb666"; + model = "CMO-QVGA"; +}; + +&ipu { + display = <&display0>; +}
drivers/video/Kconfig +2 -0
@@ -2357,6 +2357,8 @@ config FB_MX3 select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT + select VIDEOMODE_HELPERS + select FB_MODE_HELPERS default y help This is a framebuffer device for the i.MX31 LCD Controller. So
drivers/video/mx3fb.c +105 -18
201 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH v5 3/5 video: mx3fb: Introduce regulator support.
In reply to Denis CarikliThis commit is based on the following commit by Fabio Estevam:
4344429 video: mxsfb: Introduce regulator support
---
ChangeLog v4->v5:
- Added Shawn Guo in the Cc list.
- Rebased to make it apply.
ChangeLog v3->v4:
- Some code style fixes.
- Improved error handling in eremap.
ChangeLog v2->v3:
- The prints are now replaced with non line wrapped prints.
- The regulator retrival has been adapted to the new DT bindings which looks more like the IPUv3 ones.
- The regulator_is_enabled checks were kept, because regulator_disable do not do such check.
--- drivers/video/mx3fb.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-)
drivers/video/mx3fb.c +70 -1
@@ -27,6 +27,7 @@#include <linux/clk.h> #include <linux/mutex.h> #include <linux/dma/ipu-dma.h> +#include <linux/regulator/consumer.h> #include <linux/platform_data/dma-imx.h> #include <linux/platform_data/video-mx3fb.h>
@@ -269,6 +270,7 @@ struct mx3fb_info {struct dma_async_tx_descriptor *txd;dma_cookie_t cookie;struct scatterlist sg[2 ]; +struct regulator *reg_lcd;struct fb_var_screeninfo cur_var;/* current var info */ };
@@ -1005,6 +1007,7 @@ static void __blank(int blank, struct fb_info *fbi)struct mx3fb_info *mx3_fbi = fbi->par;struct mx3fb_data *mx3fb = mx3_fbi->mx3fb;int was_blank = mx3_fbi->blank; +int ret; mx3_fbi->blank = blank;
@@ -1023,6 +1026,15 @@ static void __blank(int blank, struct fb_info *fbi)case FB_BLANK_HSYNC_SUSPEND :case FB_BLANK_NORMAL :sdc_set_brightness (mx3fb,0 ); +if (mx3_fbi->reg_lcd) { +if (regulator_is_enabled (mx3_fbi->reg_lcd)) { + ret =regulator_disable (mx3_fbi->reg_lcd); +if (ret) +dev_warn (fbi->device, +"lcd regulator disable failed with error: %d\n" , + ret); + } + }memset ((char *)fbi->screen_base,0 , fbi->fix.smem_len);/* Give LCD time to update - enough for 50 and 60 Hz */ msleep (25 );
@@ -1030,6 +1042,15 @@ static void __blank(int blank, struct fb_info *fbi)break ;case FB_BLANK_UNBLANK :sdc_enable_channel (mx3_fbi); +if (mx3_fbi->reg_lcd) { +if (!regulator_is_enabled (mx3_fbi->reg_lcd)) { + ret =regulator_enable (mx3_fbi->reg_lcd); +if (ret) +dev_warn (fbi->device, +"lcd regulator enable failed with error: %d\n" , + ret); + } + }sdc_set_brightness (mx3fb, mx3fb->backlight_level);break ; }
@@ -1206,6 +1227,7 @@ static int mx3fb_suspend(struct platform_device *pdev, pm_message_t state) {struct mx3fb_data *mx3fb =platform_get_drvdata (pdev);struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; +int ret;console_lock ();fb_set_suspend (mx3fb->fbi,1 );
@@ -1214,7 +1236,15 @@ static int mx3fb_suspend(struct platform_device *pdev, pm_message_t state)if (mx3_fbi->blank ==FB_BLANK_UNBLANK ) {sdc_disable_channel (mx3_fbi);sdc_set_brightness (mx3fb,0 ); - +if (mx3_fbi->reg_lcd) { +if (regulator_is_enabled (mx3_fbi->reg_lcd)) { + ret =regulator_disable (mx3_fbi->reg_lcd); +if (ret) +dev_warn (&pdev->dev, +"lcd regulator disable failed with error: %d\n" , + ret); + } + } }return 0 ; }
@@ -1226,10 +1256,20 @@ static int mx3fb_resume(struct platform_device *pdev) {struct mx3fb_data *mx3fb =platform_get_drvdata (pdev);struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; +int ret;if (mx3_fbi->blank ==FB_BLANK_UNBLANK ) {sdc_enable_channel (mx3_fbi);sdc_set_brightness (mx3fb, mx3fb->backlight_level); +if (mx3_fbi->reg_lcd) { +if (!regulator_is_enabled (mx3_fbi->reg_lcd)) { + ret =regulator_enable (mx3_fbi->reg_lcd); +if (ret) +dev_warn (&pdev->dev, +"lcd regulator enable failed with error: %d\n" , + ret); + } + } }console_lock ();
@@ -1373,6 +1413,7 @@ static int init_fb_chan(struct mx3fb_data *mx3fb, struct idmac_channel *ichan)struct mx3fb_platform_data *mx3fb_pdata = dev->platform_data;struct device_node *np = dev->of_node;const char *name; +const char *regulator_name;const char *ipu_disp_format;unsigned int irq;struct fb_info *fbi;
@@ -1389,6 +1430,9 @@ static int init_fb_chan(struct mx3fb_data *mx3fb, struct idmac_channel *ichan)return -EINVAL ; } +of_property_read_string (display_np,"regulator-name" , + ®ulator_name); +of_property_read_string (display_np,"interface-pix-fmt" , &ipu_disp_format);if (!ipu_disp_format) {
@@ -1503,6 +1547,25 @@ static int init_fb_chan(struct mx3fb_data *mx3fb, struct idmac_channel *ichan)if (ret <0 ) goto erfb; +/* In dt mode, +* using devm_regulator_get would require that the proprety referencing +* the regulator phandle has to be inside the mx3fb node. +*/ +if (np) { +if (regulator_name) + mx3fbi->reg_lcd =regulator_get (NULL , regulator_name); + }else { + mx3fbi->reg_lcd =devm_regulator_get (dev,"lcd" ); + } + +if (IS_ERR (mx3fbi->reg_lcd)) { +dev_warn (mx3fb->dev,"Operating without regulator \"lcd\"\n" ); + mx3fbi->reg_lcd =NULL ; + }else { +dev_info (mx3fb->dev,"Using \"%s\" Regulator\n" , + regulator_name); + } +return 0 ; erfb:
@@ -1557,6 +1620,7 @@ static int mx3fb_probe(struct platform_device *pdev)struct dma_chan *chan;struct dma_chan_request rq;struct device_node *np = dev->of_node; +struct mx3fb_info *mx3_fbi;/* * Display Interface (DI) and Synchronous Display Controller (SDC)
@@ -1621,6 +1685,11 @@ ersdc0:dmaengine_put ();iounmap (mx3fb->reg_base); eremap: +if (mx3fb->fbi) { + mx3_fbi = mx3fb->fbi->par; +if (mx3_fbi->reg_lcd) +regulator_put (mx3_fbi->reg_lcd); + }kfree (mx3fb);dev_err (dev,"mx3fb: failed to register fb\n" );return ret;
Signature · 1 line
1.7.9.5
A message that is not in the archive (sent off-list or not yet received): 1383915693-9422-1-git-send-email-denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org
PATCH v5 4/5 ARM: dts: i.MX35: Add display support.
A pinctrl node for the IPU was also added.
---
ChangeLog v4->v5:
- Added Grant Likely and Shawn Guo in the Cc list.
- Adapted to the new non-dma ipu bindings.
- Adapted to the use of imx35-pingrp.h
- The pinctrl ipu node addition was moved in this commit.
ChangeLog v3->v4:
- Splitted the imx35.dtsi display support (new patch).
--- arch/arm/boot/dts/imx35.dtsi | 13 +++++++++++++ arch/arm/mach-imx/imx35-dt.c | 7 +++++++ 2 files changed, 20 insertions(+)
arch/arm/boot/dts/imx35.dtsi +13 -0
@@ -175,6 +175,12 @@ }; }; + ipu { + pinctrl_ipu_disp0: ipudisp0grp { + fsl,pins = <MX35_IPU_PINGRP1>; + }; + }; + uart1 { pinctrl_uart1_1: uart1grp-1 { fsl,pins = <MX35_UART1_PINGRP1>;
@@ -266,6 +272,13 @@ status = "disabled"; }; + ipu: ipu@53fc0000 { + compatible = "fsl,imx35-ipu"; + reg = <0x53fc0000 0x4000>; + clocks = <&clks 55>; + status = "disabled"; + }; + audmux: audmux@53fc4000 { compatible = "fsl,imx35-audmux", "fsl,imx31-audmux"; reg = <0x53fc4000 0x4000>;
arch/arm/mach-imx/imx35-dt.c +7 -0
@@ -16,14 +16,21 @@#include <asm/mach/time.h> #include <asm/hardware/cache-l2x0.h> #include "common.h" +#include "devices-imx35.h" #include "mx35.h" static void __init imx35_dt_init (void ) { +struct device_node *np;mxc_arch_reset_init_dt ();of_platform_populate (NULL , of_default_bus_match_table,NULL ,NULL ); + +/* We don't want to export the IPU as DT bindings. */ + np =of_find_compatible_node (NULL ,NULL ,"fsl,imx35-ipu" ); +if (of_device_is_available (np)) +imx35_add_ipu_core (); }static void __init imx35_timer_init (void )
Signature · 6 lines
1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v5 5/5 ARM: dts: mbimxsd35 Add video and displays support.
In reply to a message not in the archive---
ChangeLog v4->v5:
- Added Grant Likely and Shawn Guo in the Cc list.
- Adapted to the new non-dma ipu bindings.
ChangeLog v3->v4:
- Shortened the licenses.
- adapted the dts(i) to the new bindings.
ChangeLog v2->v3:
- The dts were adapted to the new DT bindings which looks more like the IPUv3 ones.
--- .../imx35-eukrea-mbimxsd35-baseboard-cmo-qvga.dts | 58 ++++++++++++++++++++ .../imx35-eukrea-mbimxsd35-baseboard-dvi-svga.dts | 47 ++++++++++++++++ .../imx35-eukrea-mbimxsd35-baseboard-dvi-vga.dts | 47 ++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 arch/arm/boot/dts/imx35-eukrea-mbimxsd35-baseboard-cmo-qvga.dts create mode 100644 arch/arm/boot/dts/imx35-eukrea-mbimxsd35-baseboard-dvi-svga.dts create mode 100644 arch/arm/boot/dts/imx35-eukrea-mbimxsd35-baseboard-dvi-vga.dts
arch/arm/boot/dts/imx35-eukrea-mbimxsd35-baseboard-cmo-qvga.dts new file +58 -0
@@ -0,0 +1,58 @@ +/* + * Copyright 2013 Eukréa Electromatique <[email protected]> + * + * 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. + */ + +#include "imx35-eukrea-mbimxsd35-baseboard.dts" + +/ { + model = "Eukrea MBIMXSD35 with the CMO-QVGA Display"; + compatible = "eukrea,mbimxsd35-baseboard-cmo-qvga", "eukrea,mbimxsd35-baseboard", "eukrea,cpuimx35", "fsl,imx35"; + + cmo_qvga: display@di0 { + compatible = "fsl,mx3-parallel-display"; + regulator-name = "lcd"; + interface-pix-fmt = "rgb666"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ipu_disp0>; + lcd-supply = <®_lcd_3v3>; + model = "CMO-QVGA"; + display-timings { + qvga_timings: 320x240 { + clock-frequency = <6500000>; + hactive = <320>; + vactive = <240>; + hback-porch = <68>; + hfront-porch = <20>; + vback-porch = <15>; + vfront-porch = <4>; + hsync-len = <30>; + vsync-len = <3>; + }; + }; + }; + + reg_lcd_3v3: lcd-en { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_reg_lcd_3v3>; + regulator-name = "lcd"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + gpio = <&gpio1 4 0>; + enable-active-high; + }; +}; + +&ipu { + display = <&cmo_qvga>; + status = "okay"; +};
arch/arm/boot/dts/imx35-eukrea-mbimxsd35-baseboard-dvi-svga.dts new file +47 -0
47 lines not on this page · raw message
arch/arm/boot/dts/imx35-eukrea-mbimxsd35-baseboard-dvi-vga.dts new file +47 -0
47 lines not on this page · raw message
Signature · 6 lines
1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v5 1/5 fbdev: Add the lacking FB_SYNC_* for matching the DISPLAY_FLAGS_*
In reply to Denis CarikliQuoted 9 lines · Denis Carikli
Without that fix, drivers using the
fb_videomode_from_videomode
function will not be able to get certain information because some DISPLAY_FLAGS_* have no corresponding FB_SYNC_*.include/linux/fb.h +0
-0
include/linux/fb.h struct device_node; · line 53
Quoted 9 lines
include/linux/fb.h +3
-0@@ -45,6 +45,9 @@ struct device_node;#define FB_SIGNAL_SYNC_ON_GREEN 8#define FB_SIGNAL_SERRATION_ON 16 +#define FB_SYNC_DE_HIGH_ACT 64/* data enable active high flag */ +#define FB_SYNC_PIXDAT_HIGH_ACT 128/* drive data on positive edge */ +#define FB_MISC_PRIM_COLOR 1#define FB_MISC_1ST_DETAIL 2/* First Detailed Timing is preferred */ struct fb_chroma {
I don't think this is better than the previous version where FB_SYNC_DE_HIGH_ACT and FB_SYNC_PIXDAT_HIGH_ACT were in include/uapi/linux/fb.h. Now those flag defines are not visible to the userspace, but the actual flags are still visible from the var->sync field.
It's true what Russell replied to the previous version, that the userspace has no idea how to handle those new flags. But then again, for LCDs, the userspace has no idea how to handle, say, hsync polarity either.
In any case, splitting the FB_SYNC_ defines into uapi and kernel-internal header files, but still giving the kernel-internal values to userspace is surely wrong.
Tomi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 901 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140110/f2ef0407/attachment.sig>
PATCH v5 1/5 fbdev: Add the lacking FB_SYNC_* for matching the DISPLAY_FLAGS_*
Quoted 5 lines · Tomi Valkeinen
I don't think this is better than the previous version where
FB_SYNC_DE_HIGH_ACTandFB_SYNC_PIXDAT_HIGH_ACTwere ininclude/uapi/linux/fb.h. Now those flag defines are not visible to the userspace, but the actual flags are still visible from thevar->syncfield.
Quoted 7 lines
It's true what Russell replied to the previous version, that the userspace has no idea how to handle those new flags. But then again, for LCDs, the userspace has no idea how to handle, say, hsync polarity either.
In any case, splitting the
FB_SYNC_defines into uapi and kernel-internal header files, but still giving the kernel-internal values to userspace is surely wrong.
The difference between the sync states and these other flags is that the sync states are part of the mode definition - as per the CEA-861 documentation.
However, that does not extend to LCD panels, which generally need to have one set of timings, with the various control signals at certain polarities - and those control signal polarities are a property of the panel itself, not of the displayed mode. So, if you know that you have LCD panel X, and it needs control signals with a certain polarity, that is how you configure the hardware _irrespective_ of what userspace says that the sync states should be.
The sync states specified by userspace should of course be used for the sync pulses being sent to a VGA display or HDMI sink.
Signature · 3 lines
FTTC broadband for 0.8mile line: 5.8Mbps down 500kbps up. Estimation in database were 13.1 to 19Mbit for a good line, about 7.5+ for a bad. Estimate before purchase was "up to 13.2Mbit".