Message ID | 1348226536-22899-3-git-send-email-l.krishna@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 09/21/2012 05:22 AM, Leela Krishna Amudala wrote: > This patch adds device tree based discovery support for exynos DRM-FIMD > driver which includes driver modification to handle platform data in > both the cases with DT and non-DT, Also adds the documentation for bindings. > diff --git a/Documentation/devicetree/bindings/drm/exynos/fimd.txt b/Documentation/devicetree/bindings/drm/exynos/fimd.txt ... > + - samsung,fimd-display: This property should specify the phandle of the > + display device node which holds the video interface timing with the > + below mentioned properties. > + > + - lcd-htiming: Specifies the horizontal timing for the overlay. The > + horizontal timing includes four parameters in the following order. > + > + - horizontal back porch (in number of lcd clocks) > + - horizontal front porch (in number of lcd clocks) > + - hsync pulse width (in number of lcd clocks) > + - Display panels X resolution. > + > + - lcd-vtiming: Specifies the vertical timing for the overlay. The > + vertical timing includes four parameters in the following order. > + > + - vertical back porch (in number of lcd lines) > + - vertical front porch (in number of lcd lines) > + - vsync pulse width (in number of lcd clocks) > + - Display panels Y resolution. Should this not use the new videomode timings that are under discussion at: http://lists.freedesktop.org/archives/dri-devel/2012-July/024875.html
On 09/21/2012 01:22 AM, Inki Dae wrote: > 2012/9/21 Stephen Warren <swarren@wwwdotorg.org>: >> On 09/21/2012 05:22 AM, Leela Krishna Amudala wrote: >>> This patch adds device tree based discovery support for exynos DRM-FIMD >>> driver which includes driver modification to handle platform data in >>> both the cases with DT and non-DT, Also adds the documentation for bindings. >> >>> diff --git a/Documentation/devicetree/bindings/drm/exynos/fimd.txt b/Documentation/devicetree/bindings/drm/exynos/fimd.txt >> ... >>> + - samsung,fimd-display: This property should specify the phandle of the >>> + display device node which holds the video interface timing with the >>> + below mentioned properties. >>> + >>> + - lcd-htiming: Specifies the horizontal timing for the overlay. The >>> + horizontal timing includes four parameters in the following order. >>> + >>> + - horizontal back porch (in number of lcd clocks) >>> + - horizontal front porch (in number of lcd clocks) >>> + - hsync pulse width (in number of lcd clocks) >>> + - Display panels X resolution. >>> + >>> + - lcd-vtiming: Specifies the vertical timing for the overlay. The >>> + vertical timing includes four parameters in the following order. >>> + >>> + - vertical back porch (in number of lcd lines) >>> + - vertical front porch (in number of lcd lines) >>> + - vsync pulse width (in number of lcd clocks) >>> + - Display panels Y resolution. >> >> Should this not use the new videomode timings that are under discussion at: >> >> http://lists.freedesktop.org/archives/dri-devel/2012-July/024875.html >> > > ok, I agree with you. then the videomode helper is going to be merged > to mainline(3.6)? if so, this patch should be reworked based on the > videomode helper. I think the videomode helpers would be merged for 3.7 at the very earliest; 3.6 is cooked already. Given there are still some comments on the binding, perhaps it won't happen until 3.8, but it'd be best to ask on that thread so that people more directly involved with the status can answer.
2012/9/22 Stephen Warren <swarren@wwwdotorg.org>: > On 09/21/2012 01:22 AM, Inki Dae wrote: >> 2012/9/21 Stephen Warren <swarren@wwwdotorg.org>: >>> On 09/21/2012 05:22 AM, Leela Krishna Amudala wrote: >>>> This patch adds device tree based discovery support for exynos DRM-FIMD >>>> driver which includes driver modification to handle platform data in >>>> both the cases with DT and non-DT, Also adds the documentation for bindings. >>> >>>> diff --git a/Documentation/devicetree/bindings/drm/exynos/fimd.txt b/Documentation/devicetree/bindings/drm/exynos/fimd.txt >>> ... >>>> + - samsung,fimd-display: This property should specify the phandle of the >>>> + display device node which holds the video interface timing with the >>>> + below mentioned properties. >>>> + >>>> + - lcd-htiming: Specifies the horizontal timing for the overlay. The >>>> + horizontal timing includes four parameters in the following order. >>>> + >>>> + - horizontal back porch (in number of lcd clocks) >>>> + - horizontal front porch (in number of lcd clocks) >>>> + - hsync pulse width (in number of lcd clocks) >>>> + - Display panels X resolution. >>>> + >>>> + - lcd-vtiming: Specifies the vertical timing for the overlay. The >>>> + vertical timing includes four parameters in the following order. >>>> + >>>> + - vertical back porch (in number of lcd lines) >>>> + - vertical front porch (in number of lcd lines) >>>> + - vsync pulse width (in number of lcd clocks) >>>> + - Display panels Y resolution. >>> >>> Should this not use the new videomode timings that are under discussion at: >>> >>> http://lists.freedesktop.org/archives/dri-devel/2012-July/024875.html >>> >> >> ok, I agree with you. then the videomode helper is going to be merged >> to mainline(3.6)? if so, this patch should be reworked based on the >> videomode helper. > > I think the videomode helpers would be merged for 3.7 at the very > earliest; 3.6 is cooked already. Given there are still some comments on > the binding, perhaps it won't happen until 3.8, but it'd be best to ask > on that thread so that people more directly involved with the status can > answer. > as I mentioned before, it's better to use videomode helper instead but for this, we should wait for that the videomode helper are merged to mainline so I think it's better to merge it as is and then modify it for videomode helper to be used later. Thanks, Inki Dae > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
On Monday 24 September 2012 21:35:46 Inki Dae wrote: > 2012/9/22 Stephen Warren <swarren@wwwdotorg.org>: > > On 09/21/2012 01:22 AM, Inki Dae wrote: > >> 2012/9/21 Stephen Warren <swarren@wwwdotorg.org>: > >>> On 09/21/2012 05:22 AM, Leela Krishna Amudala wrote: > >>>> This patch adds device tree based discovery support for exynos DRM-FIMD > >>>> driver which includes driver modification to handle platform data in > >>>> both the cases with DT and non-DT, Also adds the documentation for > >>>> bindings. > >>>> > >>>> diff --git a/Documentation/devicetree/bindings/drm/exynos/fimd.txt > >>>> b/Documentation/devicetree/bindings/drm/exynos/fimd.txt>>> > >>> ... > >>> > >>>> + - samsung,fimd-display: This property should specify the phandle of > >>>> the > >>>> + display device node which holds the video interface timing with the > >>>> + below mentioned properties. > >>>> + > >>>> + - lcd-htiming: Specifies the horizontal timing for the overlay. The > >>>> + horizontal timing includes four parameters in the following > >>>> order. > >>>> + > >>>> + - horizontal back porch (in number of lcd clocks) > >>>> + - horizontal front porch (in number of lcd clocks) > >>>> + - hsync pulse width (in number of lcd clocks) > >>>> + - Display panels X resolution. > >>>> + > >>>> + - lcd-vtiming: Specifies the vertical timing for the overlay. The > >>>> + vertical timing includes four parameters in the following order. > >>>> + > >>>> + - vertical back porch (in number of lcd lines) > >>>> + - vertical front porch (in number of lcd lines) > >>>> + - vsync pulse width (in number of lcd clocks) > >>>> + - Display panels Y resolution. > >>> > >>> Should this not use the new videomode timings that are under discussion > >>> at: > >>> > >>> http://lists.freedesktop.org/archives/dri-devel/2012-July/024875.html > >> > >> ok, I agree with you. then the videomode helper is going to be merged > >> to mainline(3.6)? if so, this patch should be reworked based on the > >> videomode helper. > > > > I think the videomode helpers would be merged for 3.7 at the very > > earliest; 3.6 is cooked already. Given there are still some comments on > > the binding, perhaps it won't happen until 3.8, but it'd be best to ask > > on that thread so that people more directly involved with the status can > > answer. > > as I mentioned before, it's better to use videomode helper instead but > for this, we should wait for that the videomode helper are merged to > mainline so I think it's better to merge it as is and then modify it > for videomode helper to be used later. Aren't DT bindings considered as an ABI, and required to be supported more or less forever ? If you merge this DT binding you'll have to keep supporting it. That's why DT bindings should not be rushed in.
2012/9/25 Laurent Pinchart <laurent.pinchart@ideasonboard.com>: > On Monday 24 September 2012 21:35:46 Inki Dae wrote: >> 2012/9/22 Stephen Warren <swarren@wwwdotorg.org>: >> > On 09/21/2012 01:22 AM, Inki Dae wrote: >> >> 2012/9/21 Stephen Warren <swarren@wwwdotorg.org>: >> >>> On 09/21/2012 05:22 AM, Leela Krishna Amudala wrote: >> >>>> This patch adds device tree based discovery support for exynos DRM-FIMD >> >>>> driver which includes driver modification to handle platform data in >> >>>> both the cases with DT and non-DT, Also adds the documentation for >> >>>> bindings. >> >>>> >> >>>> diff --git a/Documentation/devicetree/bindings/drm/exynos/fimd.txt >> >>>> b/Documentation/devicetree/bindings/drm/exynos/fimd.txt>>> >> >>> ... >> >>> >> >>>> + - samsung,fimd-display: This property should specify the phandle of >> >>>> the >> >>>> + display device node which holds the video interface timing with the >> >>>> + below mentioned properties. >> >>>> + >> >>>> + - lcd-htiming: Specifies the horizontal timing for the overlay. The >> >>>> + horizontal timing includes four parameters in the following >> >>>> order. >> >>>> + >> >>>> + - horizontal back porch (in number of lcd clocks) >> >>>> + - horizontal front porch (in number of lcd clocks) >> >>>> + - hsync pulse width (in number of lcd clocks) >> >>>> + - Display panels X resolution. >> >>>> + >> >>>> + - lcd-vtiming: Specifies the vertical timing for the overlay. The >> >>>> + vertical timing includes four parameters in the following order. >> >>>> + >> >>>> + - vertical back porch (in number of lcd lines) >> >>>> + - vertical front porch (in number of lcd lines) >> >>>> + - vsync pulse width (in number of lcd clocks) >> >>>> + - Display panels Y resolution. >> >>> >> >>> Should this not use the new videomode timings that are under discussion >> >>> at: >> >>> >> >>> http://lists.freedesktop.org/archives/dri-devel/2012-July/024875.html >> >> >> >> ok, I agree with you. then the videomode helper is going to be merged >> >> to mainline(3.6)? if so, this patch should be reworked based on the >> >> videomode helper. >> > >> > I think the videomode helpers would be merged for 3.7 at the very >> > earliest; 3.6 is cooked already. Given there are still some comments on >> > the binding, perhaps it won't happen until 3.8, but it'd be best to ask >> > on that thread so that people more directly involved with the status can >> > answer. >> >> as I mentioned before, it's better to use videomode helper instead but >> for this, we should wait for that the videomode helper are merged to >> mainline so I think it's better to merge it as is and then modify it >> for videomode helper to be used later. > > Aren't DT bindings considered as an ABI, and required to be supported more or > less forever ? If you merge this DT binding you'll have to keep supporting it. > That's why DT bindings should not be rushed in. > is ABI required for DT binding? I know DT binding parses just lcd timing data from device tree file so ABI isn't needed. but when it comes to DT, I'm novice yet so there may be my missing point. could you tell me why DT bindings are considered as an ABI? if there is my missing point, will consider it again. Thanks, Inki Dae > -- > Regards, > > Laurent Pinchart > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel
On Wed, Sep 26, 2012 at 12:03:44AM +0900, Inki Dae wrote: > 2012/9/25 Laurent Pinchart <laurent.pinchart@ideasonboard.com>: > > Aren't DT bindings considered as an ABI, and required to be supported more or > > less forever ? If you merge this DT binding you'll have to keep supporting it. > > That's why DT bindings should not be rushed in. > is ABI required for DT binding? I know DT binding parses just lcd > timing data from device tree file so ABI isn't needed. but when it > comes to DT, I'm novice yet so there may be my missing point. could > you tell me why DT bindings are considered as an ABI? if there is my > missing point, will consider it again. It's supposed to be possible to ship a DT with a board and then boot any OS or OS version on the board. If the meaning of the DT keeps changing then this becomes impossible, you need to keep changing the DT when you change the thing that parses it (rendering the whole exercise pointless).
2012/9/26 Mark Brown <broonie@opensource.wolfsonmicro.com>: > On Wed, Sep 26, 2012 at 12:03:44AM +0900, Inki Dae wrote: >> 2012/9/25 Laurent Pinchart <laurent.pinchart@ideasonboard.com>: > >> > Aren't DT bindings considered as an ABI, and required to be supported more or >> > less forever ? If you merge this DT binding you'll have to keep supporting it. >> > That's why DT bindings should not be rushed in. > >> is ABI required for DT binding? I know DT binding parses just lcd >> timing data from device tree file so ABI isn't needed. but when it >> comes to DT, I'm novice yet so there may be my missing point. could >> you tell me why DT bindings are considered as an ABI? if there is my >> missing point, will consider it again. > > It's supposed to be possible to ship a DT with a board and then boot any > OS or OS version on the board. If the meaning of the DT keeps changing > then this becomes impossible, you need to keep changing the DT when you > change the thing that parses it (rendering the whole exercise pointless). > thank you for your comments. got it. DT is built as an binary(dtb) and the dtb file should be re-used without any modifications. will keep this patch until the videomode helper will be merged to mainline so that this could be modified based on videomode helper later. > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hello Stephen Warren, The binding names that I use in my dts file should match with the names given in http://lists.freedesktop.org/archives/dri-devel/2012-July/024875.html right? I think that is the only thing I have to take care, and as I'm not using "struct drm_display_mode" in my driver its my wish whether to use the helper function or not. Please clarify me if I miss something. Best Regards, Leela Krishna Amudala. On Fri, Sep 21, 2012 at 10:44 AM, Stephen Warren <swarren@wwwdotorg.org> wrote: > On 09/21/2012 05:22 AM, Leela Krishna Amudala wrote: >> This patch adds device tree based discovery support for exynos DRM-FIMD >> driver which includes driver modification to handle platform data in >> both the cases with DT and non-DT, Also adds the documentation for bindings. > >> diff --git a/Documentation/devicetree/bindings/drm/exynos/fimd.txt b/Documentation/devicetree/bindings/drm/exynos/fimd.txt > ... >> + - samsung,fimd-display: This property should specify the phandle of the >> + display device node which holds the video interface timing with the >> + below mentioned properties. >> + >> + - lcd-htiming: Specifies the horizontal timing for the overlay. The >> + horizontal timing includes four parameters in the following order. >> + >> + - horizontal back porch (in number of lcd clocks) >> + - horizontal front porch (in number of lcd clocks) >> + - hsync pulse width (in number of lcd clocks) >> + - Display panels X resolution. >> + >> + - lcd-vtiming: Specifies the vertical timing for the overlay. The >> + vertical timing includes four parameters in the following order. >> + >> + - vertical back porch (in number of lcd lines) >> + - vertical front porch (in number of lcd lines) >> + - vsync pulse width (in number of lcd clocks) >> + - Display panels Y resolution. > > Should this not use the new videomode timings that are under discussion at: > > http://lists.freedesktop.org/archives/dri-devel/2012-July/024875.html > -- > To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
On 09/30/2012 11:29 PM, Leela Krishna Amudala wrote: > Hello Stephen Warren, > > The binding names that I use in my dts file should match with the > names given in http://lists.freedesktop.org/archives/dri-devel/2012-July/024875.html > right? I don't think so; the binding in that link is for example: > + - xres, yres: Display resolution > + - left-margin, right-margin, hsync-len: Horizontal Display timing parameters > + in pixels > + upper-margin, lower-margin, vsync-len: Vertical display timing parameters in > + lines > + - clock: displayclock in Hz i.e. a bunch of separate properties, one for each value needed to describe the display timing. However, your patch contains: >>> + - samsung,fimd-display: This property should specify the phandle of the >>> + display device node which holds the video interface timing with the >>> + below mentioned properties. >>> + >>> + - lcd-htiming: Specifies the horizontal timing for the overlay. The >>> + horizontal timing includes four parameters in the following order. >>> + >>> + - horizontal back porch (in number of lcd clocks) >>> + - horizontal front porch (in number of lcd clocks) >>> + - hsync pulse width (in number of lcd clocks) >>> + - Display panels X resolution. A single lcd-htiming property, which contains 4 values. (and a similar construct for the vertical timing). That seems entirely different to me...
On Mon, Oct 1, 2012 at 9:50 PM, Stephen Warren <swarren@wwwdotorg.org> wrote: > On 09/30/2012 11:29 PM, Leela Krishna Amudala wrote: >> Hello Stephen Warren, >> >> The binding names that I use in my dts file should match with the >> names given in http://lists.freedesktop.org/archives/dri-devel/2012-July/024875.html >> right? > > I don't think so; the binding in that link is for example: > >> + - xres, yres: Display resolution >> + - left-margin, right-margin, hsync-len: Horizontal Display timing parameters >> + in pixels >> + upper-margin, lower-margin, vsync-len: Vertical display timing parameters in >> + lines >> + - clock: displayclock in Hz > > i.e. a bunch of separate properties, one for each value needed to > describe the display timing. However, your patch contains: > I mean to say that even I have to use separate properties for each one instead of grouping them. Also the names should match with the ones given in the example..? >>>> + - samsung,fimd-display: This property should specify the phandle of the >>>> + display device node which holds the video interface timing with the >>>> + below mentioned properties. >>>> + >>>> + - lcd-htiming: Specifies the horizontal timing for the overlay. The >>>> + horizontal timing includes four parameters in the following order. >>>> + >>>> + - horizontal back porch (in number of lcd clocks) >>>> + - horizontal front porch (in number of lcd clocks) >>>> + - hsync pulse width (in number of lcd clocks) >>>> + - Display panels X resolution. > > A single lcd-htiming property, which contains 4 values. (and a similar > construct for the vertical timing). > > That seems entirely different to me... > _______________________________________________ > devicetree-discuss mailing list > devicetree-discuss@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/devicetree-discuss
On 10/02/2012 10:06 PM, Leela Krishna Amudala wrote: > On Mon, Oct 1, 2012 at 9:50 PM, Stephen Warren <swarren@wwwdotorg.org> wrote: >> On 09/30/2012 11:29 PM, Leela Krishna Amudala wrote: >>> Hello Stephen Warren, >>> >>> The binding names that I use in my dts file should match with the >>> names given in http://lists.freedesktop.org/archives/dri-devel/2012-July/024875.html >>> right? >> >> I don't think so; the binding in that link is for example: >> >>> + - xres, yres: Display resolution >>> + - left-margin, right-margin, hsync-len: Horizontal Display timing parameters >>> + in pixels >>> + upper-margin, lower-margin, vsync-len: Vertical display timing parameters in >>> + lines >>> + - clock: displayclock in Hz >> >> i.e. a bunch of separate properties, one for each value needed to >> describe the display timing. However, your patch contains: > > I mean to say that even I have to use separate properties for each one > instead of grouping them. > Also the names should match with the ones given in the example..? Yes. The patch I pointed to isn't supposed to be just an example, but /the/ standard way of representing display timings.
diff --git a/Documentation/devicetree/bindings/drm/exynos/fimd.txt b/Documentation/devicetree/bindings/drm/exynos/fimd.txt new file mode 100644 index 0000000..e94120c --- /dev/null +++ b/Documentation/devicetree/bindings/drm/exynos/fimd.txt @@ -0,0 +1,80 @@ +* Samsung Display Controller using DRM frame work + +The display controller is used to transfer image data from memory to an +external LCD driver interface. It supports various color formats such as +rgb and yuv. + +Required properties: + - compatible: Should be "samsung,exynos5-fimd" or "samsung,exynos4-fimd" for + fimd using DRM frame work. + - reg: physical base address of the controller and length of memory + mapped region. + - interrupts: Three interrupts should be specified. The interrupts should be + specified in the following order. + - VSYNC interrupt + - FIFO level interrupt + - FIMD System Interrupt + + - samsung,fimd-display: This property should specify the phandle of the + display device node which holds the video interface timing with the + below mentioned properties. + + - lcd-htiming: Specifies the horizontal timing for the overlay. The + horizontal timing includes four parameters in the following order. + + - horizontal back porch (in number of lcd clocks) + - horizontal front porch (in number of lcd clocks) + - hsync pulse width (in number of lcd clocks) + - Display panels X resolution. + + - lcd-vtiming: Specifies the vertical timing for the overlay. The + vertical timing includes four parameters in the following order. + + - vertical back porch (in number of lcd lines) + - vertical front porch (in number of lcd lines) + - vsync pulse width (in number of lcd clocks) + - Display panels Y resolution. + + + - samsung,default-window: Specifies the default window number of the fimd controller. + + - samsung,fimd-win-bpp: Specifies the bits per pixel. + +Optional properties: + - samsung,fimd-vidout-rgb: Video output format is RGB. + - samsung,fimd-inv-vclk: invert video clock polarity. + - samsung,fimd-frame-rate: Number of video frames per second. + +Example: + + The following is an example for the fimd controller is split into + two portions. The SoC specific portion can be specified in the SoC + specific dts file. The board specific portion can be specified in the + board specific dts file. + + - SoC Specific portion + + fimd { + compatible = "samsung,exynos5-fimd"; + interrupt-parent = <&combiner>; + reg = <0x14400000 0x40000>; + interrupts = <18 5>, <18 4>, <18 6>; + }; + + - Board Specific portion + + lcd_fimd0: lcd_panel0 { + lcd-htiming = <4 4 4 480>; + lcd-vtiming = <4 4 4 320>; + supports-mipi-panel; + }; + + fimd { + samsung,fimd-display = <&lcd_fimd0>; + samsung,fimd-vidout-rgb; + samsung,fimd-inv-vclk; + samsung,fimd-frame-rate = <60>; + samsung,default-window = <0>; + samsung,fimd-win-bpp = <32>; + }; + diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 1ad10b6..b2d22ac 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -18,6 +18,7 @@ #include <linux/platform_device.h> #include <linux/clk.h> #include <linux/pm_runtime.h> +#include <linux/of.h> #include <video/samsung_fimd.h> #include <drm/exynos_drm.h> @@ -103,9 +104,18 @@ struct fimd_context { struct exynos_drm_panel_info *panel; }; +static const struct of_device_id fimd_dt_match[]; + static inline struct fimd_driver_data *drm_fimd_get_driver_data( struct platform_device *pdev) { +#ifdef CONFIG_OF + if (pdev->dev.of_node) { + const struct of_device_id *match; + match = of_match_ptr(fimd_dt_match); + return (struct fimd_driver_data *)match->data; + } +#endif return (struct fimd_driver_data *) platform_get_device_id(pdev)->driver_data; } @@ -809,12 +819,77 @@ static int fimd_power_on(struct fimd_context *ctx, bool enable) return 0; } +#ifdef CONFIG_OF +static struct exynos_drm_fimd_pdata *drm_fimd_dt_parse_pdata(struct device *dev) +{ + struct device_node *np = dev->of_node; + struct device_node *disp_np; + struct exynos_drm_fimd_pdata *pd; + u32 data[4]; + + pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL); + if (!pd) { + dev_err(dev, "memory allocation for pdata failed\n"); + return ERR_PTR(-ENOMEM); + } + + if (of_get_property(np, "samsung,fimd-vidout-rgb", NULL)) + pd->vidcon0 |= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB; + if (of_get_property(np, "samsung,fimd-inv-hsync", NULL)) + pd->vidcon1 |= VIDCON1_INV_HSYNC; + if (of_get_property(np, "samsung,fimd-inv-vsync", NULL)) + pd->vidcon1 |= VIDCON1_INV_VSYNC; + if (of_get_property(np, "samsung,fimd-inv-vclk", NULL)) + pd->vidcon1 |= VIDCON1_INV_VCLK; + if (of_get_property(np, "samsung,fimd-inv-vden", NULL)) + pd->vidcon1 |= VIDCON1_INV_VDEN; + + disp_np = of_parse_phandle(np, "samsung,fimd-display", 0); + if (!disp_np) { + dev_err(dev, "unable to find display panel info\n"); + return ERR_PTR(-EINVAL); + } + + if (of_property_read_u32_array(disp_np, "lcd-htiming", data, 4)) { + dev_err(dev, "invalid horizontal timing\n"); + return ERR_PTR(-EINVAL); + } + pd->panel.timing.left_margin = data[0]; + pd->panel.timing.right_margin = data[1]; + pd->panel.timing.hsync_len = data[2]; + pd->panel.timing.xres = data[3]; + + if (of_property_read_u32_array(disp_np, "lcd-vtiming", data, 4)) { + dev_err(dev, "invalid vertical timing\n"); + return ERR_PTR(-EINVAL); + } + pd->panel.timing.upper_margin = data[0]; + pd->panel.timing.lower_margin = data[1]; + pd->panel.timing.vsync_len = data[2]; + pd->panel.timing.yres = data[3]; + + of_property_read_u32(np, "samsung,fimd-frame-rate", + &pd->panel.timing.refresh); + + of_property_read_u32(np, "samsung,default-window", &pd->default_win); + + of_property_read_u32(np, "samsung,fimd-win-bpp", &pd->bpp); + + return pd; +} +#else +static struct exynos_drm_fimd_pdata *drm_fimd_dt_parse_pdata(struct device *dev) +{ + return NULL; +} +#endif /* CONFIG_OF */ + static int __devinit fimd_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct fimd_context *ctx; struct exynos_drm_subdrv *subdrv; - struct exynos_drm_fimd_pdata *pdata; + struct exynos_drm_fimd_pdata *pdata = pdev->dev.platform_data; struct exynos_drm_panel_info *panel; struct resource *res; int win; @@ -822,7 +897,11 @@ static int __devinit fimd_probe(struct platform_device *pdev) DRM_DEBUG_KMS("%s\n", __FILE__); - pdata = pdev->dev.platform_data; + if (pdev->dev.of_node) { + pdata = drm_fimd_dt_parse_pdata(&pdev->dev); + if (IS_ERR(pdata)) + return PTR_ERR(pdata); + } if (!pdata) { dev_err(dev, "no platform data specified\n"); return -EINVAL; @@ -1011,6 +1090,17 @@ static struct platform_device_id fimd_driver_ids[] = { }; MODULE_DEVICE_TABLE(platform, fimd_driver_ids); +#ifdef CONFIG_OF +static const struct of_device_id fimd_dt_match[] = { + { .compatible = "samsung,exynos5-fimd", + .data = &exynos5_fimd_driver_data }, + { .compatible = "samsung,exynos4-fimd", + .data = &exynos4_fimd_driver_data }, + {}, +}; +MODULE_DEVICE_TABLE(of, fimd_dt_match); +#endif + static const struct dev_pm_ops fimd_pm_ops = { SET_SYSTEM_SLEEP_PM_OPS(fimd_suspend, fimd_resume) SET_RUNTIME_PM_OPS(fimd_runtime_suspend, fimd_runtime_resume, NULL) @@ -1024,5 +1114,6 @@ struct platform_driver fimd_driver = { .name = "exynos4-fb", .owner = THIS_MODULE, .pm = &fimd_pm_ops, + .of_match_table = of_match_ptr(fimd_dt_match), }, };
This patch adds device tree based discovery support for exynos DRM-FIMD driver which includes driver modification to handle platform data in both the cases with DT and non-DT, Also adds the documentation for bindings. Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com> --- .../devicetree/bindings/drm/exynos/fimd.txt | 80 ++++++++++++++++ drivers/gpu/drm/exynos/exynos_drm_fimd.c | 95 +++++++++++++++++++- 2 files changed, 173 insertions(+), 2 deletions(-) create mode 100644 Documentation/devicetree/bindings/drm/exynos/fimd.txt