]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/gpu/drm/tegra/dc.c
Merge remote-tracking branch 'drm-tegra/drm/tegra/for-next'
[karo-tx-linux.git] / drivers / gpu / drm / tegra / dc.c
index b4af4ab9ce6b139a059aa2a47876d8e66b4877fd..e9f24a85a1038701cc819f38e9b0318260e6679d 100644 (file)
@@ -1694,6 +1694,7 @@ static int tegra_dc_debugfs_exit(struct tegra_dc *dc)
 static int tegra_dc_init(struct host1x_client *client)
 {
        struct drm_device *drm = dev_get_drvdata(client->parent);
+       unsigned long flags = HOST1X_SYNCPT_CLIENT_MANAGED;
        struct tegra_dc *dc = host1x_client_to_dc(client);
        struct tegra_drm *tegra = drm->dev_private;
        struct drm_plane *primary = NULL;
@@ -1701,6 +1702,10 @@ static int tegra_dc_init(struct host1x_client *client)
        u32 value;
        int err;
 
+       dc->syncpt = host1x_syncpt_request(dc->dev, flags);
+       if (!dc->syncpt)
+               dev_warn(dc->dev, "failed to allocate syncpoint\n");
+
        if (tegra->domain) {
                err = iommu_attach_device(tegra->domain, dc->dev);
                if (err < 0) {
@@ -1847,6 +1852,8 @@ static int tegra_dc_exit(struct host1x_client *client)
                dc->domain = NULL;
        }
 
+       host1x_syncpt_free(dc->syncpt);
+
        return 0;
 }
 
@@ -1959,7 +1966,6 @@ static int tegra_dc_parse_dt(struct tegra_dc *dc)
 
 static int tegra_dc_probe(struct platform_device *pdev)
 {
-       unsigned long flags = HOST1X_SYNCPT_CLIENT_MANAGED;
        const struct of_device_id *id;
        struct resource *regs;
        struct tegra_dc *dc;
@@ -2034,10 +2040,6 @@ static int tegra_dc_probe(struct platform_device *pdev)
                return -ENXIO;
        }
 
-       dc->syncpt = host1x_syncpt_request(&pdev->dev, flags);
-       if (!dc->syncpt)
-               dev_warn(&pdev->dev, "failed to allocate syncpoint\n");
-
        INIT_LIST_HEAD(&dc->client.list);
        dc->client.ops = &dc_client_ops;
        dc->client.dev = &pdev->dev;
@@ -2065,8 +2067,6 @@ static int tegra_dc_remove(struct platform_device *pdev)
        struct tegra_dc *dc = platform_get_drvdata(pdev);
        int err;
 
-       host1x_syncpt_free(dc->syncpt);
-
        err = host1x_client_unregister(&dc->client);
        if (err < 0) {
                dev_err(&pdev->dev, "failed to unregister host1x client: %d\n",