Re: [PATCH 3/7] s5p_cec: use new cec_notifier_find_hdmi_dev helper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 4/9/19 4:05 AM, wen.yang99@xxxxxxxxxx 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@xxxxxxxxx>
>> ---
>> 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;




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux