[PATCH v8 02/10] drm/hisilicon: Add hisilicon kirin drm master driver

Xinliang Liu xinliang.liu at linaro.org
Thu Jun 30 02:31:00 PDT 2016


On 13 April 2016 at 20:15, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> Hi Xinliang,
>
> On 11 April 2016 at 09:55, Xinliang Liu <xinliang.liu at linaro.org> wrote:
>
>> +static int kirin_drm_connectors_register(struct drm_device *dev)
>> +{
>> +       struct drm_connector *connector;
>> +       struct drm_connector *failed_connector;
>> +       int ret;
>> +
>> +       mutex_lock(&dev->mode_config.mutex);
>> +       drm_for_each_connector(connector, dev) {
>> +               ret = drm_connector_register(connector);
>> +               if (ret) {
>> +                       failed_connector = connector;
>> +                       goto err;
>> +               }
>> +       }
>> +       mutex_unlock(&dev->mode_config.mutex);
>> +
>> +       return 0;
>> +
>> +err:
>> +       drm_for_each_connector(connector, dev) {
>> +               if (failed_connector == connector)
>> +                       break;
>> +               drm_connector_unregister(connector);
>> +       }
>> +       mutex_unlock(&dev->mode_config.mutex);
>> +
>> +       return ret;
>> +}
>> +
> Iirc we have new drm_connector_{un,}register_all() helpers.You might
> want to use it once they are in (i.e. not sure what your base is and
> if they have landed yet).
>
>
>> +static struct device_node *kirin_get_remote_node(struct device_node *np)
>> +{
>> +       struct device_node *endpoint, *remote;
>> +
>> +       /* get the first endpoint, in our case only one remote node
>> +        * is connected to display controller.
>> +        */
>> +       endpoint = of_graph_get_next_endpoint(np, NULL);
>> +       if (!endpoint) {
>> +               DRM_ERROR("no valid endpoint node\n");
>> +               return ERR_PTR(-ENODEV);
>> +       }
>> +       of_node_put(endpoint);
>> +
>> +       remote = of_graph_get_remote_port_parent(endpoint);
>> +       if (!remote) {
>> +               DRM_ERROR("no valid remote node\n");
>> +               return ERR_PTR(-ENODEV);
>> +       }
>> +       of_node_put(remote);
>> +
>> +       if (!of_device_is_available(remote)) {
>> +               DRM_ERROR("not available for remote node\n");
>> +               return ERR_PTR(-ENODEV);
>> +       }
>> +
> This seems like a common pattern in many platform DRM drivers. Yet
> some tend to differ in subtle ways - I'm leaning that they might be
> bugs, but one cannot be too sure.
>
> A friendly request:
> Can you please follow up by adding a helper and removing the
> duplication thoughout ?

Hi emil, recently I found that there is already a helper to do such work.
It is drm_of_component_probe.

-xinliang


>
> Thanks
> Emil



More information about the linux-arm-kernel mailing list