From: Joonyoung Shim <jy0922.shim@samsung.com>
To: InKi Dae <inki.dae@samsung.com>
Cc: kyungmin.park@samsung.com, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 02/13] drm/exynos: separated subdrv->probe call and encoder/connector creation.
Date: Mon, 20 Aug 2012 13:42:28 +0900 [thread overview]
Message-ID: <5031C034.8070907@samsung.com> (raw)
In-Reply-To: <CAAQKjZNGgqGp_D_V_AvDX=eYJsB1mhQh5H7yjRdF80JTRQMAmQ@mail.gmail.com>
On 08/20/2012 01:31 PM, InKi Dae wrote:
> 2012/8/20 Joonyoung Shim <jy0922.shim@samsung.com>:
>> On 08/20/2012 10:52 AM, InKi Dae wrote:
>>> 2012/8/20 Joonyoung Shim <jy0922.shim@samsung.com>:
>>>> On 08/17/2012 06:50 PM, Inki Dae wrote:
>>>>> this patch separates sub driver's probe call and encoder/connector
>>>>> creation
>>>>> so that exynos drm core module can take exception when some operation
>>>>> was
>>>>> failed properly.
>>>>
>>>> Which exceptions? I don't know this patch gives any benefit to us.
>>>>
>>> previous code didn't take exception when exynos_drm_encoder_create()
>>> is falied.
>>
>> No, it is considered.
>>
> where is subdrv->remove() called when exynos_drm_encoder_create() is
> failed? I think if failed then subdrv->remove() should be called and
> if exynos_drm_connector_create() is failed then not only
> encoder->funcs->destory() but also subdrv->remove()
OK, but just add subdrv->remove(). Then if it needs, please split function.
>>> and for now, exynos_drm_encoder/connector_create functions
>>> was called at exynos_drm_subdrv_probe() so know that this patch is for
>>> code clean by separating them into two parts also.
>>
>> It's ok, but it just splitting.
>>
>>
>>>>> Signed-off-by: Inki Dae <inki.dae@samsung.com>
>>>>> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
>>>>> ---
>>>>> drivers/gpu/drm/exynos/exynos_drm_core.c | 93
>>>>> +++++++++++++++++++++---------
>>>>> 1 files changed, 65 insertions(+), 28 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_core.c
>>>>> b/drivers/gpu/drm/exynos/exynos_drm_core.c
>>>>> index 84dd099..1c8d5fe 100644
>>>>> --- a/drivers/gpu/drm/exynos/exynos_drm_core.c
>>>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_core.c
>>>>> @@ -34,30 +34,15 @@
>>>>> static LIST_HEAD(exynos_drm_subdrv_list);
>>>>> -static int exynos_drm_subdrv_probe(struct drm_device *dev,
>>>>> +static int exynos_drm_create_enc_conn(struct drm_device *dev,
>>>>> struct exynos_drm_subdrv
>>>>> *subdrv)
>>>>> {
>>>>> struct drm_encoder *encoder;
>>>>> struct drm_connector *connector;
>>>>> + int ret;
>>>>> DRM_DEBUG_DRIVER("%s\n", __FILE__);
>>>>> - if (subdrv->probe) {
>>>>> - int ret;
>>>>> -
>>>>> - /*
>>>>> - * this probe callback would be called by sub driver
>>>>> - * after setting of all resources to this sub driver,
>>>>> - * such as clock, irq and register map are done or by
>>>>> load()
>>>>> - * of exynos drm driver.
>>>>> - *
>>>>> - * P.S. note that this driver is considered for
>>>>> modularization.
>>>>> - */
>>>>> - ret = subdrv->probe(dev, subdrv->dev);
>>>>> - if (ret)
>>>>> - return ret;
>>>>> - }
>>>>> -
>>>>> if (!subdrv->manager)
>>>>> return 0;
>>>>> @@ -78,24 +63,22 @@ static int exynos_drm_subdrv_probe(struct
>>>>> drm_device
>>>>> *dev,
>>>>> connector = exynos_drm_connector_create(dev, encoder);
>>>>> if (!connector) {
>>>>> DRM_ERROR("failed to create connector\n");
>>>>> - encoder->funcs->destroy(encoder);
>>>>> - return -EFAULT;
>>>>> + ret = -EFAULT;
>>>>> + goto err_destroy_encoder;
>>>>> }
>>>>> subdrv->encoder = encoder;
>>>>> subdrv->connector = connector;
>>>>> return 0;
>>>>> +
>>>>> +err_destroy_encoder:
>>>>> + encoder->funcs->destroy(encoder);
>>>>> + return ret;
>>>>> }
>>>>> -static void exynos_drm_subdrv_remove(struct drm_device *dev,
>>>>> - struct exynos_drm_subdrv *subdrv)
>>>>> +static void exynos_drm_destroy_enc_conn(struct exynos_drm_subdrv
>>>>> *subdrv)
>>>>> {
>>>>> - DRM_DEBUG_DRIVER("%s\n", __FILE__);
>>>>> -
>>>>> - if (subdrv->remove)
>>>>> - subdrv->remove(dev);
>>>>> -
>>>>> if (subdrv->encoder) {
>>>>> struct drm_encoder *encoder = subdrv->encoder;
>>>>> encoder->funcs->destroy(encoder);
>>>>> @@ -109,9 +92,48 @@ static void exynos_drm_subdrv_remove(struct
>>>>> drm_device
>>>>> *dev,
>>>>> }
>>>>> }
>>>>> +static int exynos_drm_subdrv_probe(struct drm_device *dev,
>>>>> + struct exynos_drm_subdrv
>>>>> *subdrv)
>>>>> +{
>>>>> + if (subdrv->probe) {
>>>>> + int ret;
>>>>> +
>>>>> + subdrv->drm_dev = dev;
>>>>> +
>>>>> + /*
>>>>> + * this probe callback would be called by sub driver
>>>>> + * after setting of all resources to this sub driver,
>>>>> + * such as clock, irq and register map are done or by
>>>>> load()
>>>>> + * of exynos drm driver.
>>>>> + *
>>>>> + * P.S. note that this driver is considered for
>>>>> modularization.
>>>>> + */
>>>>> + ret = subdrv->probe(dev, subdrv->dev);
>>>>> + if (ret)
>>>>> + return ret;
>>>>> + }
>>>>> +
>>>>> + if (!subdrv->manager)
>>>>> + return -EINVAL;
>>>>> +
>>>>> + subdrv->manager->dev = subdrv->dev;
>>>>> +
>>>>> + return 0;
>>>>> +}
>>>>> +
>>>>> +static void exynos_drm_subdrv_remove(struct drm_device *dev,
>>>>> + struct exynos_drm_subdrv *subdrv)
>>>>> +{
>>>>> + DRM_DEBUG_DRIVER("%s\n", __FILE__);
>>>>> +
>>>>> + if (subdrv->remove)
>>>>> + subdrv->remove(dev, subdrv->dev);
>>>>> +}
>>>>> +
>>>>> int exynos_drm_device_register(struct drm_device *dev)
>>>>> {
>>>>> struct exynos_drm_subdrv *subdrv, *n;
>>>>> + unsigned int fine_cnt = 0;
>>>>> int err;
>>>>> DRM_DEBUG_DRIVER("%s\n", __FILE__);
>>>>> @@ -120,14 +142,27 @@ int exynos_drm_device_register(struct drm_device
>>>>> *dev)
>>>>> return -EINVAL;
>>>>> list_for_each_entry_safe(subdrv, n, &exynos_drm_subdrv_list,
>>>>> list)
>>>>> {
>>>>> - subdrv->drm_dev = dev;
>>>>> err = exynos_drm_subdrv_probe(dev, subdrv);
>>>>> if (err) {
>>>>> DRM_DEBUG("exynos drm subdrv probe failed.\n");
>>>>> list_del(&subdrv->list);
>>>>> + continue;
>>>>> }
>>>>> +
>>>>> + err = exynos_drm_create_enc_conn(dev, subdrv);
>>>>> + if (err) {
>>>>> + DRM_DEBUG("failed to create encoder and
>>>>> connector.\n");
>>>>> + exynos_drm_subdrv_remove(dev, subdrv);
>>>>> + list_del(&subdrv->list);
>>>>> + continue;
>>>>> + }
>>>>> +
>>>>> + fine_cnt++;
>>>>> }
>>>>> + if (!fine_cnt)
>>>>> + return -EINVAL;
>>>>> +
>>>>> return 0;
>>>>> }
>>>>> EXPORT_SYMBOL_GPL(exynos_drm_device_register);
>>>>> @@ -143,8 +178,10 @@ int exynos_drm_device_unregister(struct drm_device
>>>>> *dev)
>>>>> return -EINVAL;
>>>>> }
>>>>> - list_for_each_entry(subdrv, &exynos_drm_subdrv_list, list)
>>>>> + list_for_each_entry(subdrv, &exynos_drm_subdrv_list, list) {
>>>>> exynos_drm_subdrv_remove(dev, subdrv);
>>>>> + exynos_drm_destroy_enc_conn(subdrv);
>>>>> + }
>>>>> return 0;
>>>>> }
>>>>
>>>> _______________________________________________
>>>> dri-devel mailing list
>>>> dri-devel@lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2012-08-20 4:42 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-17 9:50 [PATCH 00/13] updated exynos-drm-fixes Inki Dae
2012-08-17 9:50 ` [PATCH 01/13] drm/exynos: added device object to subdrv's remove callback as argument Inki Dae
2012-08-17 9:50 ` [PATCH 02/13] drm/exynos: separated subdrv->probe call and encoder/connector creation Inki Dae
2012-08-20 1:11 ` Joonyoung Shim
2012-08-20 1:52 ` InKi Dae
2012-08-20 1:59 ` Joonyoung Shim
2012-08-20 4:31 ` InKi Dae
2012-08-20 4:42 ` Joonyoung Shim [this message]
2012-08-20 5:43 ` InKi Dae
2012-08-17 9:50 ` [PATCH 03/13] drm/exynos: fixed page align bug Inki Dae
2012-08-17 9:50 ` [PATCH 04/13] drm/exynos: use empty function instead of drm_helper_connector_dpms Inki Dae
2012-08-20 1:12 ` Joonyoung Shim
2012-08-20 2:50 ` InKi Dae
2012-08-17 9:50 ` [PATCH 05/13] drm/exynos: removed exynos_drm_encoder_dpms call Inki Dae
2012-08-20 1:14 ` Joonyoung Shim
2012-08-20 2:00 ` InKi Dae
2012-08-17 9:50 ` [PATCH 06/13] drm/exynos: separeated fimd_power_on into some parts Inki Dae
2012-08-17 9:50 ` [PATCH 07/13] drm/exynos: control display power at connector module Inki Dae
2012-08-17 9:50 ` [PATCH 08/13] drm/exynos: make sure that hardware overlay for fimd is disabled Inki Dae
2012-08-20 2:09 ` Joonyoung Shim
2012-08-17 9:50 ` [PATCH 09/13] drm/exynos: check NV12M format specific to Exynos properly Inki Dae
2012-08-20 1:17 ` Joonyoung Shim
2012-08-20 2:23 ` InKi Dae
2012-08-20 4:52 ` Joonyoung Shim
2012-08-20 5:11 ` InKi Dae
2012-08-20 5:15 ` InKi Dae
2012-08-20 5:22 ` Joonyoung Shim
2012-08-20 5:45 ` InKi Dae
2012-08-17 9:50 ` [PATCH 10/13] drm/exynos: update crtc to plane safely Inki Dae
2012-08-20 1:25 ` Joonyoung Shim
2012-08-17 9:50 ` [PATCH 11/13] drm/exynos: changed context name of hdmi and mixer Inki Dae
2012-08-20 1:27 ` Joonyoung Shim
2012-08-20 2:29 ` InKi Dae
2012-08-20 4:55 ` Joonyoung Shim
2012-08-20 6:17 ` InKi Dae
2012-08-20 6:36 ` Joonyoung Shim
2012-08-20 6:51 ` InKi Dae
2012-08-20 7:30 ` InKi Dae
2012-08-17 9:50 ` [PATCH 12/13] drm/exynos: fixed build warning Inki Dae
2012-08-17 9:50 ` [PATCH 13/13] drm/exynos: make sure that hardware overlay for hdmi is disabled Inki Dae
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5031C034.8070907@samsung.com \
--to=jy0922.shim@samsung.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=inki.dae@samsung.com \
--cc=kyungmin.park@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox