aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/omap2/dss/dsi.c68
1 files changed, 29 insertions, 39 deletions
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 9eb78455b7df..815c93047151 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -1199,9 +1199,8 @@ static unsigned long dsi_fclk_rate(struct platform_device *dsidev)
1199 return r; 1199 return r;
1200} 1200}
1201 1201
1202static int dsi_set_lp_clk_divisor(struct omap_dss_device *dssdev) 1202static int dsi_set_lp_clk_divisor(struct platform_device *dsidev)
1203{ 1203{
1204 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
1205 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 1204 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
1206 unsigned long dsi_fclk; 1205 unsigned long dsi_fclk;
1207 unsigned lp_clk_div; 1206 unsigned lp_clk_div;
@@ -3904,9 +3903,8 @@ static int dsi_compute_interleave_lp(int blank, int enter_hs, int exit_hs,
3904 return max(lp_inter, 0); 3903 return max(lp_inter, 0);
3905} 3904}
3906 3905
3907static void dsi_config_cmd_mode_interleaving(struct omap_dss_device *dssdev) 3906static void dsi_config_cmd_mode_interleaving(struct platform_device *dsidev)
3908{ 3907{
3909 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
3910 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 3908 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
3911 int blanking_mode; 3909 int blanking_mode;
3912 int hfp_blanking_mode, hbp_blanking_mode, hsa_blanking_mode; 3910 int hfp_blanking_mode, hbp_blanking_mode, hsa_blanking_mode;
@@ -4022,9 +4020,8 @@ static void dsi_config_cmd_mode_interleaving(struct omap_dss_device *dssdev)
4022 dsi_write_reg(dsidev, DSI_VM_TIMING6, r); 4020 dsi_write_reg(dsidev, DSI_VM_TIMING6, r);
4023} 4021}
4024 4022
4025static int dsi_proto_config(struct omap_dss_device *dssdev) 4023static int dsi_proto_config(struct platform_device *dsidev)
4026{ 4024{
4027 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
4028 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 4025 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
4029 u32 r; 4026 u32 r;
4030 int buswidth = 0; 4027 int buswidth = 0;
@@ -4082,7 +4079,7 @@ static int dsi_proto_config(struct omap_dss_device *dssdev)
4082 if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) { 4079 if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
4083 dsi_config_vp_sync_events(dsidev); 4080 dsi_config_vp_sync_events(dsidev);
4084 dsi_config_blanking_modes(dsidev); 4081 dsi_config_blanking_modes(dsidev);
4085 dsi_config_cmd_mode_interleaving(dssdev); 4082 dsi_config_cmd_mode_interleaving(dsidev);
4086 } 4083 }
4087 4084
4088 dsi_vc_initial_config(dsidev, 0); 4085 dsi_vc_initial_config(dsidev, 0);
@@ -4343,7 +4340,7 @@ int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
4343{ 4340{
4344 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); 4341 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
4345 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 4342 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
4346 struct omap_overlay_manager *mgr = dssdev->output->manager; 4343 struct omap_overlay_manager *mgr = dsi->output.manager;
4347 int bpp = dsi_get_pixel_size(dsi->pix_fmt); 4344 int bpp = dsi_get_pixel_size(dsi->pix_fmt);
4348 u8 data_type; 4345 u8 data_type;
4349 u16 word_count; 4346 u16 word_count;
@@ -4401,7 +4398,7 @@ void dsi_disable_video_output(struct omap_dss_device *dssdev, int channel)
4401{ 4398{
4402 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); 4399 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
4403 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 4400 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
4404 struct omap_overlay_manager *mgr = dssdev->output->manager; 4401 struct omap_overlay_manager *mgr = dsi->output.manager;
4405 4402
4406 if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) { 4403 if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
4407 dsi_if_enable(dsidev, false); 4404 dsi_if_enable(dsidev, false);
@@ -4418,11 +4415,10 @@ void dsi_disable_video_output(struct omap_dss_device *dssdev, int channel)
4418} 4415}
4419EXPORT_SYMBOL(dsi_disable_video_output); 4416EXPORT_SYMBOL(dsi_disable_video_output);
4420 4417
4421static void dsi_update_screen_dispc(struct omap_dss_device *dssdev) 4418static void dsi_update_screen_dispc(struct platform_device *dsidev)
4422{ 4419{
4423 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
4424 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 4420 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
4425 struct omap_overlay_manager *mgr = dssdev->output->manager; 4421 struct omap_overlay_manager *mgr = dsi->output.manager;
4426 unsigned bytespp; 4422 unsigned bytespp;
4427 unsigned bytespl; 4423 unsigned bytespl;
4428 unsigned bytespf; 4424 unsigned bytespf;
@@ -4578,7 +4574,7 @@ int omap_dsi_update(struct omap_dss_device *dssdev, int channel,
4578 dsi->update_bytes = dw * dh * 4574 dsi->update_bytes = dw * dh *
4579 dsi_get_pixel_size(dsi->pix_fmt) / 8; 4575 dsi_get_pixel_size(dsi->pix_fmt) / 8;
4580#endif 4576#endif
4581 dsi_update_screen_dispc(dssdev); 4577 dsi_update_screen_dispc(dsidev);
4582 4578
4583 return 0; 4579 return 0;
4584} 4580}
@@ -4586,9 +4582,8 @@ EXPORT_SYMBOL(omap_dsi_update);
4586 4582
4587/* Display funcs */ 4583/* Display funcs */
4588 4584
4589static int dsi_configure_dispc_clocks(struct omap_dss_device *dssdev) 4585static int dsi_configure_dispc_clocks(struct platform_device *dsidev)
4590{ 4586{
4591 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
4592 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 4587 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
4593 struct dispc_clock_info dispc_cinfo; 4588 struct dispc_clock_info dispc_cinfo;
4594 int r; 4589 int r;
@@ -4610,11 +4605,10 @@ static int dsi_configure_dispc_clocks(struct omap_dss_device *dssdev)
4610 return 0; 4605 return 0;
4611} 4606}
4612 4607
4613static int dsi_display_init_dispc(struct omap_dss_device *dssdev) 4608static int dsi_display_init_dispc(struct platform_device *dsidev)
4614{ 4609{
4615 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
4616 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 4610 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
4617 struct omap_overlay_manager *mgr = dssdev->output->manager; 4611 struct omap_overlay_manager *mgr = dsi->output.manager;
4618 int r; 4612 int r;
4619 4613
4620 if (dsi->mode == OMAP_DSS_DSI_CMD_MODE) { 4614 if (dsi->mode == OMAP_DSS_DSI_CMD_MODE) {
@@ -4652,7 +4646,7 @@ static int dsi_display_init_dispc(struct omap_dss_device *dssdev)
4652 4646
4653 dss_mgr_set_timings(mgr, &dsi->timings); 4647 dss_mgr_set_timings(mgr, &dsi->timings);
4654 4648
4655 r = dsi_configure_dispc_clocks(dssdev); 4649 r = dsi_configure_dispc_clocks(dsidev);
4656 if (r) 4650 if (r)
4657 goto err1; 4651 goto err1;
4658 4652
@@ -4672,20 +4666,18 @@ err:
4672 return r; 4666 return r;
4673} 4667}
4674 4668
4675static void dsi_display_uninit_dispc(struct omap_dss_device *dssdev) 4669static void dsi_display_uninit_dispc(struct platform_device *dsidev)
4676{ 4670{
4677 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
4678 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 4671 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
4679 struct omap_overlay_manager *mgr = dssdev->output->manager; 4672 struct omap_overlay_manager *mgr = dsi->output.manager;
4680 4673
4681 if (dsi->mode == OMAP_DSS_DSI_CMD_MODE) 4674 if (dsi->mode == OMAP_DSS_DSI_CMD_MODE)
4682 dss_mgr_unregister_framedone_handler(mgr, 4675 dss_mgr_unregister_framedone_handler(mgr,
4683 dsi_framedone_irq_callback, dsidev); 4676 dsi_framedone_irq_callback, dsidev);
4684} 4677}
4685 4678
4686static int dsi_configure_dsi_clocks(struct omap_dss_device *dssdev) 4679static int dsi_configure_dsi_clocks(struct platform_device *dsidev)
4687{ 4680{
4688 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
4689 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 4681 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
4690 struct dsi_clock_info cinfo; 4682 struct dsi_clock_info cinfo;
4691 int r; 4683 int r;
@@ -4707,18 +4699,17 @@ static int dsi_configure_dsi_clocks(struct omap_dss_device *dssdev)
4707 return 0; 4699 return 0;
4708} 4700}
4709 4701
4710static int dsi_display_init_dsi(struct omap_dss_device *dssdev) 4702static int dsi_display_init_dsi(struct platform_device *dsidev)
4711{ 4703{
4712 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
4713 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 4704 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
4714 struct omap_overlay_manager *mgr = dssdev->output->manager; 4705 struct omap_overlay_manager *mgr = dsi->output.manager;
4715 int r; 4706 int r;
4716 4707
4717 r = dsi_pll_init(dsidev, true, true); 4708 r = dsi_pll_init(dsidev, true, true);
4718 if (r) 4709 if (r)
4719 goto err0; 4710 goto err0;
4720 4711
4721 r = dsi_configure_dsi_clocks(dssdev); 4712 r = dsi_configure_dsi_clocks(dsidev);
4722 if (r) 4713 if (r)
4723 goto err1; 4714 goto err1;
4724 4715
@@ -4734,12 +4725,12 @@ static int dsi_display_init_dsi(struct omap_dss_device *dssdev)
4734 _dsi_print_reset_status(dsidev); 4725 _dsi_print_reset_status(dsidev);
4735 4726
4736 dsi_proto_timings(dsidev); 4727 dsi_proto_timings(dsidev);
4737 dsi_set_lp_clk_divisor(dssdev); 4728 dsi_set_lp_clk_divisor(dsidev);
4738 4729
4739 if (1) 4730 if (1)
4740 _dsi_print_reset_status(dsidev); 4731 _dsi_print_reset_status(dsidev);
4741 4732
4742 r = dsi_proto_config(dssdev); 4733 r = dsi_proto_config(dsidev);
4743 if (r) 4734 if (r)
4744 goto err3; 4735 goto err3;
4745 4736
@@ -4764,12 +4755,11 @@ err0:
4764 return r; 4755 return r;
4765} 4756}
4766 4757
4767static void dsi_display_uninit_dsi(struct omap_dss_device *dssdev, 4758static void dsi_display_uninit_dsi(struct platform_device *dsidev,
4768 bool disconnect_lanes, bool enter_ulps) 4759 bool disconnect_lanes, bool enter_ulps)
4769{ 4760{
4770 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
4771 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 4761 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
4772 struct omap_overlay_manager *mgr = dssdev->output->manager; 4762 struct omap_overlay_manager *mgr = dsi->output.manager;
4773 4763
4774 if (enter_ulps && !dsi->ulps_enabled) 4764 if (enter_ulps && !dsi->ulps_enabled)
4775 dsi_enter_ulps(dsidev); 4765 dsi_enter_ulps(dsidev);
@@ -4791,7 +4781,7 @@ int omapdss_dsi_display_enable(struct omap_dss_device *dssdev)
4791{ 4781{
4792 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); 4782 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
4793 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 4783 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
4794 struct omap_dss_output *out = dssdev->output; 4784 struct omap_dss_output *out = &dsi->output;
4795 int r = 0; 4785 int r = 0;
4796 4786
4797 DSSDBG("dsi_display_enable\n"); 4787 DSSDBG("dsi_display_enable\n");
@@ -4820,11 +4810,11 @@ int omapdss_dsi_display_enable(struct omap_dss_device *dssdev)
4820 4810
4821 _dsi_initialize_irq(dsidev); 4811 _dsi_initialize_irq(dsidev);
4822 4812
4823 r = dsi_display_init_dispc(dssdev); 4813 r = dsi_display_init_dispc(dsidev);
4824 if (r) 4814 if (r)
4825 goto err_init_dispc; 4815 goto err_init_dispc;
4826 4816
4827 r = dsi_display_init_dsi(dssdev); 4817 r = dsi_display_init_dsi(dsidev);
4828 if (r) 4818 if (r)
4829 goto err_init_dsi; 4819 goto err_init_dsi;
4830 4820
@@ -4833,7 +4823,7 @@ int omapdss_dsi_display_enable(struct omap_dss_device *dssdev)
4833 return 0; 4823 return 0;
4834 4824
4835err_init_dsi: 4825err_init_dsi:
4836 dsi_display_uninit_dispc(dssdev); 4826 dsi_display_uninit_dispc(dsidev);
4837err_init_dispc: 4827err_init_dispc:
4838 dsi_enable_pll_clock(dsidev, 0); 4828 dsi_enable_pll_clock(dsidev, 0);
4839 dsi_runtime_put(dsidev); 4829 dsi_runtime_put(dsidev);
@@ -4863,9 +4853,9 @@ void omapdss_dsi_display_disable(struct omap_dss_device *dssdev,
4863 dsi_sync_vc(dsidev, 2); 4853 dsi_sync_vc(dsidev, 2);
4864 dsi_sync_vc(dsidev, 3); 4854 dsi_sync_vc(dsidev, 3);
4865 4855
4866 dsi_display_uninit_dispc(dssdev); 4856 dsi_display_uninit_dispc(dsidev);
4867 4857
4868 dsi_display_uninit_dsi(dssdev, disconnect_lanes, enter_ulps); 4858 dsi_display_uninit_dsi(dsidev, disconnect_lanes, enter_ulps);
4869 4859
4870 dsi_runtime_put(dsidev); 4860 dsi_runtime_put(dsidev);
4871 dsi_enable_pll_clock(dsidev, 0); 4861 dsi_enable_pll_clock(dsidev, 0);