|
@@ -20,6 +20,7 @@
|
|
|
#include <linux/of_device.h>
|
|
|
#include <linux/pm_runtime.h>
|
|
|
|
|
|
+#include <video/of_display_timing.h>
|
|
|
#include <video/samsung_fimd.h>
|
|
|
#include <drm/exynos_drm.h>
|
|
|
|
|
@@ -884,10 +885,25 @@ static int fimd_probe(struct platform_device *pdev)
|
|
|
|
|
|
DRM_DEBUG_KMS("%s\n", __FILE__);
|
|
|
|
|
|
- pdata = pdev->dev.platform_data;
|
|
|
- if (!pdata) {
|
|
|
- dev_err(dev, "no platform data specified\n");
|
|
|
- return -EINVAL;
|
|
|
+ if (pdev->dev.of_node) {
|
|
|
+ pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
|
|
|
+ if (!pdata) {
|
|
|
+ DRM_ERROR("memory allocation for pdata failed\n");
|
|
|
+ return -ENOMEM;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = of_get_fb_videomode(dev->of_node, &pdata->panel.timing,
|
|
|
+ OF_USE_NATIVE_MODE);
|
|
|
+ if (ret) {
|
|
|
+ DRM_ERROR("failed: of_get_fb_videomode() : %d\n", ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ pdata = pdev->dev.platform_data;
|
|
|
+ if (!pdata) {
|
|
|
+ DRM_ERROR("no platform data specified\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
panel = &pdata->panel;
|