diff mbox

[V6,2/2] video: drm: exynos: Add device tree support

Message ID 1348226536-22899-3-git-send-email-l.krishna@samsung.com (mailing list archive)
State New, archived
Headers show

Commit Message

Leela Krishna Amudala Sept. 21, 2012, 11:22 a.m. UTC
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

Comments

Stephen Warren Sept. 21, 2012, 5:14 a.m. UTC | #1
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
Inki Dae Sept. 21, 2012, 7:22 a.m. UTC | #2
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.


> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Stephen Warren Sept. 21, 2012, 4:06 p.m. UTC | #3
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.
Inki Dae Sept. 24, 2012, 12:35 p.m. UTC | #4
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
Laurent Pinchart Sept. 25, 2012, 1:03 p.m. UTC | #5
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.
Inki Dae Sept. 25, 2012, 3:03 p.m. UTC | #6
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
Mark Brown Sept. 25, 2012, 3:31 p.m. UTC | #7
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).
Inki Dae Sept. 26, 2012, 4:32 a.m. UTC | #8
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
Leela Krishna Amudala Oct. 1, 2012, 5:29 a.m. UTC | #9
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
Stephen Warren Oct. 1, 2012, 4:20 p.m. UTC | #10
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...
Leela Krishna Amudala Oct. 3, 2012, 4:06 a.m. UTC | #11
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
Stephen Warren Oct. 3, 2012, 3:27 p.m. UTC | #12
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 mbox

Patch

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),
 	},
 };