diff options
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_crtc.c | 22 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_drv.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_drv.h | 1 | ||||
-rw-r--r-- | drivers/video/omap2/dss/apply.c | 3 | ||||
-rw-r--r-- | drivers/video/omap2/dss/dispc.c | 4 |
5 files changed, 22 insertions, 10 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c index 79b200aee18a..02075bfcd8fd 100644 --- a/drivers/gpu/drm/omapdrm/omap_crtc.c +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c | |||
@@ -40,7 +40,7 @@ struct omap_crtc { | |||
40 | * mgr->id.) Eventually this will be replaced w/ something | 40 | * mgr->id.) Eventually this will be replaced w/ something |
41 | * more common-panel-framework-y | 41 | * more common-panel-framework-y |
42 | */ | 42 | */ |
43 | struct omap_overlay_manager mgr; | 43 | struct omap_overlay_manager *mgr; |
44 | 44 | ||
45 | struct omap_video_timings timings; | 45 | struct omap_video_timings timings; |
46 | bool enabled; | 46 | bool enabled; |
@@ -90,6 +90,9 @@ uint32_t pipe2vbl(struct drm_crtc *crtc) | |||
90 | * job of sequencing the setup of the video pipe in the proper order | 90 | * job of sequencing the setup of the video pipe in the proper order |
91 | */ | 91 | */ |
92 | 92 | ||
93 | /* ovl-mgr-id -> crtc */ | ||
94 | static struct omap_crtc *omap_crtcs[8]; | ||
95 | |||
93 | /* we can probably ignore these until we support command-mode panels: */ | 96 | /* we can probably ignore these until we support command-mode panels: */ |
94 | static void omap_crtc_start_update(struct omap_overlay_manager *mgr) | 97 | static void omap_crtc_start_update(struct omap_overlay_manager *mgr) |
95 | { | 98 | { |
@@ -107,7 +110,7 @@ static void omap_crtc_disable(struct omap_overlay_manager *mgr) | |||
107 | static void omap_crtc_set_timings(struct omap_overlay_manager *mgr, | 110 | static void omap_crtc_set_timings(struct omap_overlay_manager *mgr, |
108 | const struct omap_video_timings *timings) | 111 | const struct omap_video_timings *timings) |
109 | { | 112 | { |
110 | struct omap_crtc *omap_crtc = container_of(mgr, struct omap_crtc, mgr); | 113 | struct omap_crtc *omap_crtc = omap_crtcs[mgr->id]; |
111 | DBG("%s", omap_crtc->name); | 114 | DBG("%s", omap_crtc->name); |
112 | omap_crtc->timings = *timings; | 115 | omap_crtc->timings = *timings; |
113 | omap_crtc->full_update = true; | 116 | omap_crtc->full_update = true; |
@@ -116,7 +119,7 @@ static void omap_crtc_set_timings(struct omap_overlay_manager *mgr, | |||
116 | static void omap_crtc_set_lcd_config(struct omap_overlay_manager *mgr, | 119 | static void omap_crtc_set_lcd_config(struct omap_overlay_manager *mgr, |
117 | const struct dss_lcd_mgr_config *config) | 120 | const struct dss_lcd_mgr_config *config) |
118 | { | 121 | { |
119 | struct omap_crtc *omap_crtc = container_of(mgr, struct omap_crtc, mgr); | 122 | struct omap_crtc *omap_crtc = omap_crtcs[mgr->id]; |
120 | DBG("%s", omap_crtc->name); | 123 | DBG("%s", omap_crtc->name); |
121 | dispc_mgr_set_lcd_config(omap_crtc->channel, config); | 124 | dispc_mgr_set_lcd_config(omap_crtc->channel, config); |
122 | } | 125 | } |
@@ -569,7 +572,7 @@ static void omap_crtc_pre_apply(struct omap_drm_apply *apply) | |||
569 | } else { | 572 | } else { |
570 | if (encoder) { | 573 | if (encoder) { |
571 | omap_encoder_set_enabled(encoder, false); | 574 | omap_encoder_set_enabled(encoder, false); |
572 | omap_encoder_update(encoder, &omap_crtc->mgr, | 575 | omap_encoder_update(encoder, omap_crtc->mgr, |
573 | &omap_crtc->timings); | 576 | &omap_crtc->timings); |
574 | omap_encoder_set_enabled(encoder, true); | 577 | omap_encoder_set_enabled(encoder, true); |
575 | omap_crtc->full_update = false; | 578 | omap_crtc->full_update = false; |
@@ -595,6 +598,11 @@ static const char *channel_names[] = { | |||
595 | [OMAP_DSS_CHANNEL_LCD2] = "lcd2", | 598 | [OMAP_DSS_CHANNEL_LCD2] = "lcd2", |
596 | }; | 599 | }; |
597 | 600 | ||
601 | void omap_crtc_pre_init(void) | ||
602 | { | ||
603 | dss_install_mgr_ops(&mgr_ops); | ||
604 | } | ||
605 | |||
598 | /* initialize crtc */ | 606 | /* initialize crtc */ |
599 | struct drm_crtc *omap_crtc_init(struct drm_device *dev, | 607 | struct drm_crtc *omap_crtc_init(struct drm_device *dev, |
600 | struct drm_plane *plane, enum omap_channel channel, int id) | 608 | struct drm_plane *plane, enum omap_channel channel, int id) |
@@ -635,9 +643,7 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev, | |||
635 | omap_irq_register(dev, &omap_crtc->error_irq); | 643 | omap_irq_register(dev, &omap_crtc->error_irq); |
636 | 644 | ||
637 | /* temporary: */ | 645 | /* temporary: */ |
638 | omap_crtc->mgr.id = channel; | 646 | omap_crtc->mgr = omap_dss_get_overlay_manager(channel); |
639 | |||
640 | dss_install_mgr_ops(&mgr_ops); | ||
641 | 647 | ||
642 | /* TODO: fix hard-coded setup.. add properties! */ | 648 | /* TODO: fix hard-coded setup.. add properties! */ |
643 | info = &omap_crtc->info; | 649 | info = &omap_crtc->info; |
@@ -651,6 +657,8 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev, | |||
651 | 657 | ||
652 | omap_plane_install_properties(omap_crtc->plane, &crtc->base); | 658 | omap_plane_install_properties(omap_crtc->plane, &crtc->base); |
653 | 659 | ||
660 | omap_crtcs[channel] = omap_crtc; | ||
661 | |||
654 | return crtc; | 662 | return crtc; |
655 | 663 | ||
656 | fail: | 664 | fail: |
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c index b3577cb367af..ff9b49276b81 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.c +++ b/drivers/gpu/drm/omapdrm/omap_drv.c | |||
@@ -98,6 +98,8 @@ static int omap_modeset_init(struct drm_device *dev) | |||
98 | int num_crtcs; | 98 | int num_crtcs; |
99 | int i, id = 0; | 99 | int i, id = 0; |
100 | 100 | ||
101 | omap_crtc_pre_init(); | ||
102 | |||
101 | drm_mode_config_init(dev); | 103 | drm_mode_config_init(dev); |
102 | 104 | ||
103 | omap_drm_irq_install(dev); | 105 | omap_drm_irq_install(dev); |
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h index 215a20dd340c..14f17da2ce25 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.h +++ b/drivers/gpu/drm/omapdrm/omap_drv.h | |||
@@ -157,6 +157,7 @@ const struct omap_video_timings *omap_crtc_timings(struct drm_crtc *crtc); | |||
157 | enum omap_channel omap_crtc_channel(struct drm_crtc *crtc); | 157 | enum omap_channel omap_crtc_channel(struct drm_crtc *crtc); |
158 | int omap_crtc_apply(struct drm_crtc *crtc, | 158 | int omap_crtc_apply(struct drm_crtc *crtc, |
159 | struct omap_drm_apply *apply); | 159 | struct omap_drm_apply *apply); |
160 | void omap_crtc_pre_init(void); | ||
160 | struct drm_crtc *omap_crtc_init(struct drm_device *dev, | 161 | struct drm_crtc *omap_crtc_init(struct drm_device *dev, |
161 | struct drm_plane *plane, enum omap_channel channel, int id); | 162 | struct drm_plane *plane, enum omap_channel channel, int id); |
162 | 163 | ||
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/omap2/dss/apply.c index 74d1d000e92d..c844071e8e28 100644 --- a/drivers/video/omap2/dss/apply.c +++ b/drivers/video/omap2/dss/apply.c | |||
@@ -1577,7 +1577,6 @@ int omapdss_compat_init(void) | |||
1577 | 1577 | ||
1578 | apply_init_priv(); | 1578 | apply_init_priv(); |
1579 | 1579 | ||
1580 | dss_init_overlay_managers(); | ||
1581 | dss_init_overlay_managers_sysfs(pdev); | 1580 | dss_init_overlay_managers_sysfs(pdev); |
1582 | dss_init_overlays(pdev); | 1581 | dss_init_overlays(pdev); |
1583 | 1582 | ||
@@ -1642,7 +1641,6 @@ err_disp_sysfs: | |||
1642 | 1641 | ||
1643 | err_mgr_ops: | 1642 | err_mgr_ops: |
1644 | dss_uninit_overlay_managers_sysfs(pdev); | 1643 | dss_uninit_overlay_managers_sysfs(pdev); |
1645 | dss_uninit_overlay_managers(); | ||
1646 | dss_uninit_overlays(pdev); | 1644 | dss_uninit_overlays(pdev); |
1647 | 1645 | ||
1648 | compat_refcnt--; | 1646 | compat_refcnt--; |
@@ -1671,7 +1669,6 @@ void omapdss_compat_uninit(void) | |||
1671 | dss_uninstall_mgr_ops(); | 1669 | dss_uninstall_mgr_ops(); |
1672 | 1670 | ||
1673 | dss_uninit_overlay_managers_sysfs(pdev); | 1671 | dss_uninit_overlay_managers_sysfs(pdev); |
1674 | dss_uninit_overlay_managers(); | ||
1675 | dss_uninit_overlays(pdev); | 1672 | dss_uninit_overlays(pdev); |
1676 | out: | 1673 | out: |
1677 | mutex_unlock(&compat_init_lock); | 1674 | mutex_unlock(&compat_init_lock); |
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c index b33b0169bb3b..83d7bb9da609 100644 --- a/drivers/video/omap2/dss/dispc.c +++ b/drivers/video/omap2/dss/dispc.c | |||
@@ -3710,6 +3710,8 @@ static int __init omap_dispchw_probe(struct platform_device *pdev) | |||
3710 | 3710 | ||
3711 | dispc_runtime_put(); | 3711 | dispc_runtime_put(); |
3712 | 3712 | ||
3713 | dss_init_overlay_managers(); | ||
3714 | |||
3713 | dss_debugfs_create_file("dispc", dispc_dump_regs); | 3715 | dss_debugfs_create_file("dispc", dispc_dump_regs); |
3714 | 3716 | ||
3715 | return 0; | 3717 | return 0; |
@@ -3723,6 +3725,8 @@ static int __exit omap_dispchw_remove(struct platform_device *pdev) | |||
3723 | { | 3725 | { |
3724 | pm_runtime_disable(&pdev->dev); | 3726 | pm_runtime_disable(&pdev->dev); |
3725 | 3727 | ||
3728 | dss_uninit_overlay_managers(); | ||
3729 | |||
3726 | return 0; | 3730 | return 0; |
3727 | } | 3731 | } |
3728 | 3732 | ||