File tree Expand file tree Collapse file tree 5 files changed +37
-4
lines changed Expand file tree Collapse file tree 5 files changed +37
-4
lines changed Original file line number Diff line number Diff line change @@ -957,6 +957,7 @@ static struct drm_plane *tegra_dc_cursor_plane_create(struct drm_device *drm,
957
957
}
958
958
959
959
drm_plane_helper_add (& plane -> base , & tegra_cursor_plane_helper_funcs );
960
+ drm_plane_create_zpos_immutable_property (& plane -> base , 255 );
960
961
961
962
return & plane -> base ;
962
963
}
Original file line number Diff line number Diff line change @@ -149,7 +149,9 @@ int tegra_display_hub_prepare(struct tegra_display_hub *hub)
149
149
for (i = 0 ; i < hub -> soc -> num_wgrps ; i ++ ) {
150
150
struct tegra_windowgroup * wgrp = & hub -> wgrps [i ];
151
151
152
- tegra_windowgroup_enable (wgrp );
152
+ /* Skip orphaned window group whose parent DC is disabled */
153
+ if (wgrp -> parent )
154
+ tegra_windowgroup_enable (wgrp );
153
155
}
154
156
155
157
return 0 ;
@@ -166,7 +168,9 @@ void tegra_display_hub_cleanup(struct tegra_display_hub *hub)
166
168
for (i = 0 ; i < hub -> soc -> num_wgrps ; i ++ ) {
167
169
struct tegra_windowgroup * wgrp = & hub -> wgrps [i ];
168
170
169
- tegra_windowgroup_disable (wgrp );
171
+ /* Skip orphaned window group whose parent DC is disabled */
172
+ if (wgrp -> parent )
173
+ tegra_windowgroup_disable (wgrp );
170
174
}
171
175
}
172
176
@@ -944,6 +948,15 @@ static int tegra_display_hub_probe(struct platform_device *pdev)
944
948
dev_err (& pdev -> dev , "failed to register host1x client: %d\n" ,
945
949
err );
946
950
951
+ err = devm_of_platform_populate (& pdev -> dev );
952
+ if (err < 0 )
953
+ goto unregister ;
954
+
955
+ return err ;
956
+
957
+ unregister :
958
+ host1x_client_unregister (& hub -> client );
959
+ pm_runtime_disable (& pdev -> dev );
947
960
return err ;
948
961
}
949
962
Original file line number Diff line number Diff line change @@ -686,8 +686,17 @@ EXPORT_SYMBOL(host1x_driver_register_full);
686
686
*/
687
687
void host1x_driver_unregister (struct host1x_driver * driver )
688
688
{
689
+ struct host1x * host1x ;
690
+
689
691
driver_unregister (& driver -> driver );
690
692
693
+ mutex_lock (& devices_lock );
694
+
695
+ list_for_each_entry (host1x , & devices , list )
696
+ host1x_detach_driver (host1x , driver );
697
+
698
+ mutex_unlock (& devices_lock );
699
+
691
700
mutex_lock (& drivers_lock );
692
701
list_del_init (& driver -> list );
693
702
mutex_unlock (& drivers_lock );
Original file line number Diff line number Diff line change @@ -468,11 +468,18 @@ static int host1x_probe(struct platform_device *pdev)
468
468
469
469
err = host1x_register (host );
470
470
if (err < 0 )
471
- goto deinit_intr ;
471
+ goto deinit_debugfs ;
472
+
473
+ err = devm_of_platform_populate (& pdev -> dev );
474
+ if (err < 0 )
475
+ goto unregister ;
472
476
473
477
return 0 ;
474
478
475
- deinit_intr :
479
+ unregister :
480
+ host1x_unregister (host );
481
+ deinit_debugfs :
482
+ host1x_debug_deinit (host );
476
483
host1x_intr_deinit (host );
477
484
deinit_syncpt :
478
485
host1x_syncpt_deinit (host );
Original file line number Diff line number Diff line change @@ -48,6 +48,9 @@ struct host1x_client_ops {
48
48
* @channel: host1x channel associated with this client
49
49
* @syncpts: array of syncpoints requested for this client
50
50
* @num_syncpts: number of syncpoints requested for this client
51
+ * @parent: pointer to parent structure
52
+ * @usecount: reference count for this structure
53
+ * @lock: mutex for mutually exclusive concurrency
51
54
*/
52
55
struct host1x_client {
53
56
struct list_head list ;
You can’t perform that action at this time.
0 commit comments