All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans Verkuil <hverkuil-cisco@xs4all.nl>
To: wen.yang99@zte.com.cn
Cc: linux-media@vger.kernel.org, narmstrong@baylibre.com,
	snawrocki@kernel.org, benjamin.gaignard@linaro.org,
	treding@nvidia.com, ek5.chimenti@gmail.com
Subject: Re: [PATCH 3/7] s5p_cec: use new cec_notifier_find_hdmi_dev helper
Date: Wed, 10 Apr 2019 11:10:24 +0200	[thread overview]
Message-ID: <00bdfe1a-bf48-ebdd-c86a-2b33b7752206@xs4all.nl> (raw)
In-Reply-To: <201904091005306593106@zte.com.cn>

On 4/9/19 4:05 AM, wen.yang99@zte.com.cn wrote:
> Hi Hans, 
> 
>> Subject: [PATCH 3/7] s5p_cec: use new cec_notifier_find_hdmi_dev helper
>> The S5P CEC driver increased the HDMI device refcount when
>> it shouldn't. Use the new helper function to ensure that that
>> doesn't happen and to simplify the driver code.
>>
>> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
>> ---
>> drivers/media/platform/s5p-cec/s5p_cec.c | 16 +++++-----------
>> 1 file changed, 5 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/media/platform/s5p-cec/s5p_cec.c b/drivers/media/platform/s5p-cec/s5p_cec.c
>> index 8837e2678bde..7e2c94816c55 100644
>> --- a/drivers/media/platform/s5p-cec/s5p_cec.c
>> +++ b/drivers/media/platform/s5p-cec/s5p_cec.c
>> @@ -178,22 +178,16 @@ static const struct cec_adap_ops s5p_cec_adap_ops = {
>> static int s5p_cec_probe(struct platform_device *pdev)
>> {
>> struct device *dev = &pdev->dev;
>> -    struct device_node *np;
>> -    struct platform_device *hdmi_dev;
>> +    struct device *hdmi_dev;
>> struct resource *res;
>> struct s5p_cec_dev *cec;
>> bool needs_hpd = of_property_read_bool(pdev->dev.of_node, "needs-hpd");
>> int ret;
>>
>> -    np = of_parse_phandle(pdev->dev.of_node, "hdmi-phandle", 0);
>> +    hdmi_dev = cec_notifier_find_hdmi_dev(dev);
>>
> 
> The hdmi_dev returned by the cec_notifier_find_hdmi_dev function is just a key value
> and cannot be used as a struct device *, so the name cec_notifier_find_hdmi_dev
> is a bit inappropriate.
> 
>> -    if (!np) {
>> -        dev_err(&pdev->dev, "Failed to find hdmi node in device tree\n");
>> -        return -ENODEV;
>> -    }
>> -    hdmi_dev = of_find_device_by_node(np);
>> -    if (hdmi_dev == NULL)
>> -        return -EPROBE_DEFER;
>> +    if (IS_ERR(hdmi_dev))
>> +        return PTR_ERR(hdmi_dev);
>>
>> cec = devm_kzalloc(&pdev->dev, sizeof(*cec), GFP_KERNEL);
>> if (!cec)
>> @@ -224,7 +218,7 @@ static int s5p_cec_probe(struct platform_device *pdev)
>> if (IS_ERR(cec->reg))
>> return PTR_ERR(cec->reg);
>>
>> -    cec->notifier = cec_notifier_get(&hdmi_dev->dev);
>> +    cec->notifier = cec_notifier_get(hdmi_dev);
> 
> The hdmi_dev variable is only used as  a key for the input of the cec_notifier_get function.
> So here is a little advice:
> The current code mode is like this:
> struct device *dev = &pdev->dev;
> ...
> +    struct device *hdmi_dev;
> ...
> +    hdmi_dev = cec_notifier_find_hdmi_dev(dev);
> ...
> +    cec->notifier = cec_notifier_get(hdmi_dev);
> 
> Can we replace it like this:
> struct device *dev = &pdev->dev;
> ...
> +    cec->notifier = cec_notifier_get(dev);
> 
> This way we can remove the hdmi_dev temporary variable, 
> and we can also remove the cec_notifier_find_hdmi_dev function.
> It is enough to provide an API similar to cec_notifier_get.

Some drivers get the HDMI device through other means (e.g. cros-ec-cec)
so combining this in one function is not a good idea.

I did decide to rename cec_notifier_find_hdmi_dev to
cec_notifier_parse_hdmi_phandle. I think that is a better description of
what the helper does.

Regards,

	Hans

> 
> --
> Regards,
> Wen
> 
>> if (cec->notifier == NULL)
>> return -ENOMEM;


       reply	other threads:[~2019-04-10  9:10 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <201904091005306593106@zte.com.cn>
2019-04-10  9:10 ` Hans Verkuil [this message]
2019-04-08 11:03 [PATCH 0/7] cec: introduce cec_notifier_find_hdmi_dev helper Hans Verkuil
2019-04-08 11:03 ` [PATCH 3/7] s5p_cec: use new " Hans Verkuil

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=00bdfe1a-bf48-ebdd-c86a-2b33b7752206@xs4all.nl \
    --to=hverkuil-cisco@xs4all.nl \
    --cc=benjamin.gaignard@linaro.org \
    --cc=ek5.chimenti@gmail.com \
    --cc=linux-media@vger.kernel.org \
    --cc=narmstrong@baylibre.com \
    --cc=snawrocki@kernel.org \
    --cc=treding@nvidia.com \
    --cc=wen.yang99@zte.com.cn \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.