diff mbox

[v8,1/2] video: drm: exynos: Add display-timing node parsing using video helper function

Message ID 1361965796-16117-2-git-send-email-vikas.sajjan@linaro.org
State New
Headers show

Commit Message

Vikas C Sajjan Feb. 27, 2013, 11:49 a.m. UTC
Add support for parsing the display-timing node using video helper
function.

The DT node parsing and pinctrl selection is done only if 'dev.of_node'
exists and the NON-DT logic is still maintained under the 'else' part.

Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com>
Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
---
 drivers/gpu/drm/exynos/exynos_drm_fimd.c |   25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

Comments

Stéphane Marchesin Feb. 27, 2013, 7:21 p.m. UTC | #1
On Wed, Feb 27, 2013 at 3:49 AM, Vikas Sajjan <vikas.sajjan@linaro.org> wrote:
> Add support for parsing the display-timing node using video helper
> function.
>
> The DT node parsing and pinctrl selection is done only if 'dev.of_node'
> exists and the NON-DT logic is still maintained under the 'else' part.
>
> Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com>
> Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fimd.c |   25 +++++++++++++++++++++----
>  1 file changed, 21 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> index 9537761..7932dc2 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> @@ -20,6 +20,7 @@
>  #include <linux/of_device.h>
>  #include <linux/pm_runtime.h>
>
> +#include <video/of_display_timing.h>
>  #include <video/samsung_fimd.h>
>  #include <drm/exynos_drm.h>
>
> @@ -883,10 +884,26 @@ static int fimd_probe(struct platform_device *pdev)
>
>         DRM_DEBUG_KMS("%s\n", __FILE__);
>
> -       pdata = pdev->dev.platform_data;
> -       if (!pdata) {
> -               dev_err(dev, "no platform data specified\n");
> -               return -EINVAL;
> +       if (pdev->dev.of_node) {
> +               pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> +               if (!pdata) {
> +                       DRM_ERROR("memory allocation for pdata failed\n");
> +                       return -ENOMEM;
> +               }
> +
> +               ret = of_get_fb_videomode(dev->of_node, &pdata->panel.timing,
> +                                       OF_USE_NATIVE_MODE);
> +               if (ret) {
> +                       DRM_ERROR("failed: of_get_fb_videomode()\n"
> +                               "with return value: %d\n", ret);
> +                       return ret;

Here I think you leak pdata in the error path.

Stéphane

> +               }
> +       } else {
> +               pdata = pdev->dev.platform_data;
> +               if (!pdata) {
> +                       DRM_ERROR("no platform data specified\n");
> +                       return -EINVAL;
> +               }
>         }
>
>         panel = &pdata->panel;
> --
> 1.7.9.5
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
Stéphane Marchesin Feb. 27, 2013, 8:35 p.m. UTC | #2
On Wed, Feb 27, 2013 at 11:21 AM, Stéphane Marchesin
<stephane.marchesin@gmail.com> wrote:
> On Wed, Feb 27, 2013 at 3:49 AM, Vikas Sajjan <vikas.sajjan@linaro.org> wrote:
>> Add support for parsing the display-timing node using video helper
>> function.
>>
>> The DT node parsing and pinctrl selection is done only if 'dev.of_node'
>> exists and the NON-DT logic is still maintained under the 'else' part.
>>
>> Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com>
>> Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
>> ---
>>  drivers/gpu/drm/exynos/exynos_drm_fimd.c |   25 +++++++++++++++++++++----
>>  1 file changed, 21 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>> index 9537761..7932dc2 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>> @@ -20,6 +20,7 @@
>>  #include <linux/of_device.h>
>>  #include <linux/pm_runtime.h>
>>
>> +#include <video/of_display_timing.h>
>>  #include <video/samsung_fimd.h>
>>  #include <drm/exynos_drm.h>
>>
>> @@ -883,10 +884,26 @@ static int fimd_probe(struct platform_device *pdev)
>>
>>         DRM_DEBUG_KMS("%s\n", __FILE__);
>>
>> -       pdata = pdev->dev.platform_data;
>> -       if (!pdata) {
>> -               dev_err(dev, "no platform data specified\n");
>> -               return -EINVAL;
>> +       if (pdev->dev.of_node) {
>> +               pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
>> +               if (!pdata) {
>> +                       DRM_ERROR("memory allocation for pdata failed\n");
>> +                       return -ENOMEM;
>> +               }
>> +
>> +               ret = of_get_fb_videomode(dev->of_node, &pdata->panel.timing,
>> +                                       OF_USE_NATIVE_MODE);
>> +               if (ret) {
>> +                       DRM_ERROR("failed: of_get_fb_videomode()\n"
>> +                               "with return value: %d\n", ret);
>> +                       return ret;
>
> Here I think you leak pdata in the error path.
>

Hmm nevermind it goes away with the dev.

Stéphane

> Stéphane
>
>> +               }
>> +       } else {
>> +               pdata = pdev->dev.platform_data;
>> +               if (!pdata) {
>> +                       DRM_ERROR("no platform data specified\n");
>> +                       return -EINVAL;
>> +               }
>>         }
>>
>>         panel = &pdata->panel;
>> --
>> 1.7.9.5
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
Joonyoung Shim Feb. 28, 2013, 2:37 a.m. UTC | #3
On 02/27/2013 08:49 PM, Vikas Sajjan wrote:
> Add support for parsing the display-timing node using video helper
> function.
>
> The DT node parsing and pinctrl selection is done only if 'dev.of_node'
> exists and the NON-DT logic is still maintained under the 'else' part.
>
> Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com>
> Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
> ---
>   drivers/gpu/drm/exynos/exynos_drm_fimd.c |   25 +++++++++++++++++++++----
>   1 file changed, 21 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> index 9537761..7932dc2 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> @@ -20,6 +20,7 @@
>   #include <linux/of_device.h>
>   #include <linux/pm_runtime.h>
>   
> +#include <video/of_display_timing.h>
>   #include <video/samsung_fimd.h>
>   #include <drm/exynos_drm.h>
>   
> @@ -883,10 +884,26 @@ static int fimd_probe(struct platform_device *pdev)
>   
>   	DRM_DEBUG_KMS("%s\n", __FILE__);
>   
> -	pdata = pdev->dev.platform_data;
> -	if (!pdata) {
> -		dev_err(dev, "no platform data specified\n");
> -		return -EINVAL;
> +	if (pdev->dev.of_node) {
> +		pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> +		if (!pdata) {
> +			DRM_ERROR("memory allocation for pdata failed\n");
> +			return -ENOMEM;
> +		}
> +
> +		ret = of_get_fb_videomode(dev->of_node, &pdata->panel.timing,
> +					OF_USE_NATIVE_MODE);
> +		if (ret) {
> +			DRM_ERROR("failed: of_get_fb_videomode()\n"
> +				"with return value: %d\n", ret);

Could you make this error log to one line?

except this,
Acked-by: Joonyoung Shim <jy0922.shim@samsung.com>

> +			return ret;
> +		}
> +	} else {
> +		pdata = pdev->dev.platform_data;
> +		if (!pdata) {
> +			DRM_ERROR("no platform data specified\n");
> +			return -EINVAL;
> +		}
>   	}
>   
>   	panel = &pdata->panel;
Vikas C Sajjan Feb. 28, 2013, 2:45 a.m. UTC | #4
Hi,

On 28 February 2013 08:07, Joonyoung Shim <jy0922.shim@samsung.com> wrote:
> On 02/27/2013 08:49 PM, Vikas Sajjan wrote:
>>
>> Add support for parsing the display-timing node using video helper
>> function.
>>
>> The DT node parsing and pinctrl selection is done only if 'dev.of_node'
>> exists and the NON-DT logic is still maintained under the 'else' part.
>>
>> Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com>
>> Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
>> ---
>>   drivers/gpu/drm/exynos/exynos_drm_fimd.c |   25
>> +++++++++++++++++++++----
>>   1 file changed, 21 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>> b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>> index 9537761..7932dc2 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>> @@ -20,6 +20,7 @@
>>   #include <linux/of_device.h>
>>   #include <linux/pm_runtime.h>
>>   +#include <video/of_display_timing.h>
>>   #include <video/samsung_fimd.h>
>>   #include <drm/exynos_drm.h>
>>   @@ -883,10 +884,26 @@ static int fimd_probe(struct platform_device
>> *pdev)
>>         DRM_DEBUG_KMS("%s\n", __FILE__);
>>   -     pdata = pdev->dev.platform_data;
>> -       if (!pdata) {
>> -               dev_err(dev, "no platform data specified\n");
>> -               return -EINVAL;
>> +       if (pdev->dev.of_node) {
>> +               pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
>> +               if (!pdata) {
>> +                       DRM_ERROR("memory allocation for pdata failed\n");
>> +                       return -ENOMEM;
>> +               }
>> +
>> +               ret = of_get_fb_videomode(dev->of_node,
>> &pdata->panel.timing,
>> +                                       OF_USE_NATIVE_MODE);
>> +               if (ret) {
>> +                       DRM_ERROR("failed: of_get_fb_videomode()\n"
>> +                               "with return value: %d\n", ret);
>
>
> Could you make this error log to one line?
>
The Line was going beyond 80 line marks, hence I had to split it.

> except this,
> Acked-by: Joonyoung Shim <jy0922.shim@samsung.com>
>
>
>> +                       return ret;
>> +               }
>> +       } else {
>> +               pdata = pdev->dev.platform_data;
>> +               if (!pdata) {
>> +                       DRM_ERROR("no platform data specified\n");
>> +                       return -EINVAL;
>> +               }
>>         }
>>         panel = &pdata->panel;
>
>
Joonyoung Shim Feb. 28, 2013, 2:51 a.m. UTC | #5
On 02/28/2013 11:45 AM, Vikas Sajjan wrote:
> Hi,
>
> On 28 February 2013 08:07, Joonyoung Shim <jy0922.shim@samsung.com> wrote:
>> On 02/27/2013 08:49 PM, Vikas Sajjan wrote:
>>> Add support for parsing the display-timing node using video helper
>>> function.
>>>
>>> The DT node parsing and pinctrl selection is done only if 'dev.of_node'
>>> exists and the NON-DT logic is still maintained under the 'else' part.
>>>
>>> Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com>
>>> Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
>>> ---
>>>    drivers/gpu/drm/exynos/exynos_drm_fimd.c |   25
>>> +++++++++++++++++++++----
>>>    1 file changed, 21 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> index 9537761..7932dc2 100644
>>> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> @@ -20,6 +20,7 @@
>>>    #include <linux/of_device.h>
>>>    #include <linux/pm_runtime.h>
>>>    +#include <video/of_display_timing.h>
>>>    #include <video/samsung_fimd.h>
>>>    #include <drm/exynos_drm.h>
>>>    @@ -883,10 +884,26 @@ static int fimd_probe(struct platform_device
>>> *pdev)
>>>          DRM_DEBUG_KMS("%s\n", __FILE__);
>>>    -     pdata = pdev->dev.platform_data;
>>> -       if (!pdata) {
>>> -               dev_err(dev, "no platform data specified\n");
>>> -               return -EINVAL;
>>> +       if (pdev->dev.of_node) {
>>> +               pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
>>> +               if (!pdata) {
>>> +                       DRM_ERROR("memory allocation for pdata failed\n");
>>> +                       return -ENOMEM;
>>> +               }
>>> +
>>> +               ret = of_get_fb_videomode(dev->of_node,
>>> &pdata->panel.timing,
>>> +                                       OF_USE_NATIVE_MODE);
>>> +               if (ret) {
>>> +                       DRM_ERROR("failed: of_get_fb_videomode()\n"
>>> +                               "with return value: %d\n", ret);
>>
>> Could you make this error log to one line?
>>
> The Line was going beyond 80 line marks, hence I had to split it.

So remove or contract some log messages, e.g. "with return value"
I think that is unnecessary.

>> except this,
>> Acked-by: Joonyoung Shim <jy0922.shim@samsung.com>
>>
>>
>>> +                       return ret;
>>> +               }
>>> +       } else {
>>> +               pdata = pdev->dev.platform_data;
>>> +               if (!pdata) {
>>> +                       DRM_ERROR("no platform data specified\n");
>>> +                       return -EINVAL;
>>> +               }
>>>          }
>>>          panel = &pdata->panel;
>>
>
>
Vikas Sajjan Feb. 28, 2013, 2:56 a.m. UTC | #6
On Thu, Feb 28, 2013 at 8:21 AM, Joonyoung Shim <jy0922.shim@samsung.com> wrote:
> On 02/28/2013 11:45 AM, Vikas Sajjan wrote:
>>
>> Hi,
>>
>> On 28 February 2013 08:07, Joonyoung Shim <jy0922.shim@samsung.com> wrote:
>>>
>>> On 02/27/2013 08:49 PM, Vikas Sajjan wrote:
>>>>
>>>> Add support for parsing the display-timing node using video helper
>>>> function.
>>>>
>>>> The DT node parsing and pinctrl selection is done only if 'dev.of_node'
>>>> exists and the NON-DT logic is still maintained under the 'else' part.
>>>>
>>>> Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com>
>>>> Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
>>>> ---
>>>>    drivers/gpu/drm/exynos/exynos_drm_fimd.c |   25
>>>> +++++++++++++++++++++----
>>>>    1 file changed, 21 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>>> b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>>> index 9537761..7932dc2 100644
>>>> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>>> @@ -20,6 +20,7 @@
>>>>    #include <linux/of_device.h>
>>>>    #include <linux/pm_runtime.h>
>>>>    +#include <video/of_display_timing.h>
>>>>    #include <video/samsung_fimd.h>
>>>>    #include <drm/exynos_drm.h>
>>>>    @@ -883,10 +884,26 @@ static int fimd_probe(struct platform_device
>>>> *pdev)
>>>>          DRM_DEBUG_KMS("%s\n", __FILE__);
>>>>    -     pdata = pdev->dev.platform_data;
>>>> -       if (!pdata) {
>>>> -               dev_err(dev, "no platform data specified\n");
>>>> -               return -EINVAL;
>>>> +       if (pdev->dev.of_node) {
>>>> +               pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
>>>> +               if (!pdata) {
>>>> +                       DRM_ERROR("memory allocation for pdata
>>>> failed\n");
>>>> +                       return -ENOMEM;
>>>> +               }
>>>> +
>>>> +               ret = of_get_fb_videomode(dev->of_node,
>>>> &pdata->panel.timing,
>>>> +                                       OF_USE_NATIVE_MODE);
>>>> +               if (ret) {
>>>> +                       DRM_ERROR("failed: of_get_fb_videomode()\n"
>>>> +                               "with return value: %d\n", ret);
>>>
>>>
>>> Could you make this error log to one line?
>>>
>> The Line was going beyond 80 line marks, hence I had to split it.
>
>
> So remove or contract some log messages, e.g. "with return value"
> I think that is unnecessary.
>
Will do and resend.
>
>>> except this,
>>> Acked-by: Joonyoung Shim <jy0922.shim@samsung.com>
>>>
>>>
>>>> +                       return ret;
>>>> +               }
>>>> +       } else {
>>>> +               pdata = pdev->dev.platform_data;
>>>> +               if (!pdata) {
>>>> +                       DRM_ERROR("no platform data specified\n");
>>>> +                       return -EINVAL;
>>>> +               }
>>>>          }
>>>>          panel = &pdata->panel;
>>>
>>>
>>
>>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index 9537761..7932dc2 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -20,6 +20,7 @@ 
 #include <linux/of_device.h>
 #include <linux/pm_runtime.h>
 
+#include <video/of_display_timing.h>
 #include <video/samsung_fimd.h>
 #include <drm/exynos_drm.h>
 
@@ -883,10 +884,26 @@  static int fimd_probe(struct platform_device *pdev)
 
 	DRM_DEBUG_KMS("%s\n", __FILE__);
 
-	pdata = pdev->dev.platform_data;
-	if (!pdata) {
-		dev_err(dev, "no platform data specified\n");
-		return -EINVAL;
+	if (pdev->dev.of_node) {
+		pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
+		if (!pdata) {
+			DRM_ERROR("memory allocation for pdata failed\n");
+			return -ENOMEM;
+		}
+
+		ret = of_get_fb_videomode(dev->of_node, &pdata->panel.timing,
+					OF_USE_NATIVE_MODE);
+		if (ret) {
+			DRM_ERROR("failed: of_get_fb_videomode()\n"
+				"with return value: %d\n", ret);
+			return ret;
+		}
+	} else {
+		pdata = pdev->dev.platform_data;
+		if (!pdata) {
+			DRM_ERROR("no platform data specified\n");
+			return -EINVAL;
+		}
 	}
 
 	panel = &pdata->panel;