struct drm_bridge *bridge;
int ret;
- ep = of_graph_get_endpoint_by_regs(dev->dev->of_node, 0, endpoint);
- if (!ep)
- return -ENODEV;
-
ret = drm_of_find_panel_or_bridge(dev->dev->of_node, 0, endpoint,
&panel, &bridge);
- if (ret) {
- of_node_put(ep);
+ if (ret)
return ret;
- }
- output = devm_kzalloc(dev->dev, sizeof(*output), GFP_KERNEL);
- if (!output) {
- of_node_put(ep);
- return -ENOMEM;
- }
+ output = drmm_simple_encoder_alloc(dev, struct atmel_hlcdc_rgb_output,
+ encoder, DRM_MODE_ENCODER_NONE);
+ if (IS_ERR(output))
+ return PTR_ERR(output);
+
+ ep = of_graph_get_endpoint_by_regs(dev->dev->of_node, 0, endpoint);
+ if (!ep)
+ return -ENODEV;
output->bus_fmt = atmel_hlcdc_of_bus_fmt(ep);
of_node_put(ep);
return -EINVAL;
}
- ret = drm_simple_encoder_init(dev, &output->encoder,
- DRM_MODE_ENCODER_NONE);
- if (ret)
- return ret;
output->encoder.possible_crtcs = 0x1;
drm_panel_bridge_remove(bridge);
}
- drm_encoder_cleanup(&output->encoder);
-
return ret;
}