aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
authorArchit Taneja <archit@ti.com>2011-09-05 07:18:27 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2011-09-30 09:16:30 -0400
commit8af6ff0107f0720b8fbf4feca7031d3e36c2fa11 (patch)
tree7051173d9638281697aaa695fb9e51e0b898f7c5 /drivers/video
parent18b7d09908fdef8755d934a0c37d709e94e8461a (diff)
OMAP: DSS2: DSI Video mode support
Add initial support for DSI video mode panels: - Add a new structure omap_dss_dsi_videomode_data in the member "panel" in omap_dss_device struct. This allows panel driver to configure dsi video_mode specific parameters. - Configure basic DSI video mode timing parameters: HBP, HFP, HSA, VBP, VFP, VSA, TL and VACT. - Configure DSI protocol engine registers for video_mode support. - Introduce functions dsi_video_mode_enable() and dsi_video_mode_disable() which enable/disable video mode for a given virtual channel and a given pixel format type. Things left for later - Add functions to check for errors in video mode timings provided by panel. - Configure timing registers required for command mode interleaving. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/omap2/dss/dsi.c260
1 files changed, 231 insertions, 29 deletions
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 77aca3e9a058..43c04a9889c4 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -132,7 +132,7 @@ struct dsi_reg { u16 idx; };
132#define DSI_IRQ_TA_TIMEOUT (1 << 20) 132#define DSI_IRQ_TA_TIMEOUT (1 << 20)
133#define DSI_IRQ_ERROR_MASK \ 133#define DSI_IRQ_ERROR_MASK \
134 (DSI_IRQ_HS_TX_TIMEOUT | DSI_IRQ_LP_RX_TIMEOUT | DSI_IRQ_SYNC_LOST | \ 134 (DSI_IRQ_HS_TX_TIMEOUT | DSI_IRQ_LP_RX_TIMEOUT | DSI_IRQ_SYNC_LOST | \
135 DSI_IRQ_TA_TIMEOUT) 135 DSI_IRQ_TA_TIMEOUT | DSI_IRQ_SYNC_LOST)
136#define DSI_IRQ_CHANNEL_MASK 0xf 136#define DSI_IRQ_CHANNEL_MASK 0xf
137 137
138/* Virtual channel interrupts */ 138/* Virtual channel interrupts */
@@ -2472,6 +2472,12 @@ static int dsi_cio_init(struct omap_dss_device *dssdev)
2472 2472
2473 dsi_cio_timings(dsidev); 2473 dsi_cio_timings(dsidev);
2474 2474
2475 if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_VIDEO_MODE) {
2476 /* DDR_CLK_ALWAYS_ON */
2477 REG_FLD_MOD(dsidev, DSI_CLK_CTRL,
2478 dssdev->panel.dsi_vm_data.ddr_clk_always_on, 13, 13);
2479 }
2480
2475 dsi->ulps_enabled = false; 2481 dsi->ulps_enabled = false;
2476 2482
2477 DSSDBG("CIO init done\n"); 2483 DSSDBG("CIO init done\n");
@@ -2496,6 +2502,9 @@ static void dsi_cio_uninit(struct omap_dss_device *dssdev)
2496 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); 2502 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
2497 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); 2503 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
2498 2504
2505 /* DDR_CLK_ALWAYS_ON */
2506 REG_FLD_MOD(dsidev, DSI_CLK_CTRL, 0, 13, 13);
2507
2499 dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_OFF); 2508 dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_OFF);
2500 dsi_disable_scp_clk(dsidev); 2509 dsi_disable_scp_clk(dsidev);
2501 dsi->disable_pads(dsidev->id, dsi_get_lane_mask(dssdev)); 2510 dsi->disable_pads(dsidev->id, dsi_get_lane_mask(dssdev));
@@ -2799,6 +2808,10 @@ void omapdss_dsi_vc_enable_hs(struct omap_dss_device *dssdev, int channel,
2799 dsi_if_enable(dsidev, 1); 2808 dsi_if_enable(dsidev, 1);
2800 2809
2801 dsi_force_tx_stop_mode_io(dsidev); 2810 dsi_force_tx_stop_mode_io(dsidev);
2811
2812 /* start the DDR clock by sending a NULL packet */
2813 if (dssdev->panel.dsi_vm_data.ddr_clk_always_on && enable)
2814 dsi_vc_send_null(dssdev, channel);
2802} 2815}
2803EXPORT_SYMBOL(omapdss_dsi_vc_enable_hs); 2816EXPORT_SYMBOL(omapdss_dsi_vc_enable_hs);
2804 2817
@@ -3682,6 +3695,75 @@ static void dsi_set_hs_tx_timeout(struct platform_device *dsidev,
3682 ticks, x4 ? " x4" : "", x16 ? " x16" : "", 3695 ticks, x4 ? " x4" : "", x16 ? " x16" : "",
3683 (total_ticks * 1000) / (fck / 1000 / 1000)); 3696 (total_ticks * 1000) / (fck / 1000 / 1000));
3684} 3697}
3698
3699static void dsi_config_vp_num_line_buffers(struct omap_dss_device *dssdev)
3700{
3701 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
3702 int num_line_buffers;
3703
3704 if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_VIDEO_MODE) {
3705 int bpp = dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt);
3706 unsigned line_buf_size = dsi_get_line_buf_size(dsidev);
3707 struct omap_video_timings *timings = &dssdev->panel.timings;
3708 /*
3709 * Don't use line buffers if width is greater than the video
3710 * port's line buffer size
3711 */
3712 if (line_buf_size <= timings->x_res * bpp / 8)
3713 num_line_buffers = 0;
3714 else
3715 num_line_buffers = 2;
3716 } else {
3717 /* Use maximum number of line buffers in command mode */
3718 num_line_buffers = 2;
3719 }
3720
3721 /* LINE_BUFFER */
3722 REG_FLD_MOD(dsidev, DSI_CTRL, num_line_buffers, 13, 12);
3723}
3724
3725static void dsi_config_vp_sync_events(struct omap_dss_device *dssdev)
3726{
3727 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
3728 int de_pol = dssdev->panel.dsi_vm_data.vp_de_pol;
3729 int hsync_pol = dssdev->panel.dsi_vm_data.vp_hsync_pol;
3730 int vsync_pol = dssdev->panel.dsi_vm_data.vp_vsync_pol;
3731 bool vsync_end = dssdev->panel.dsi_vm_data.vp_vsync_end;
3732 bool hsync_end = dssdev->panel.dsi_vm_data.vp_hsync_end;
3733 u32 r;
3734
3735 r = dsi_read_reg(dsidev, DSI_CTRL);
3736 r = FLD_MOD(r, de_pol, 9, 9); /* VP_DE_POL */
3737 r = FLD_MOD(r, hsync_pol, 10, 10); /* VP_HSYNC_POL */
3738 r = FLD_MOD(r, vsync_pol, 11, 11); /* VP_VSYNC_POL */
3739 r = FLD_MOD(r, 1, 15, 15); /* VP_VSYNC_START */
3740 r = FLD_MOD(r, vsync_end, 16, 16); /* VP_VSYNC_END */
3741 r = FLD_MOD(r, 1, 17, 17); /* VP_HSYNC_START */
3742 r = FLD_MOD(r, hsync_end, 18, 18); /* VP_HSYNC_END */
3743 dsi_write_reg(dsidev, DSI_CTRL, r);
3744}
3745
3746static void dsi_config_blanking_modes(struct omap_dss_device *dssdev)
3747{
3748 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
3749 int blanking_mode = dssdev->panel.dsi_vm_data.blanking_mode;
3750 int hfp_blanking_mode = dssdev->panel.dsi_vm_data.hfp_blanking_mode;
3751 int hbp_blanking_mode = dssdev->panel.dsi_vm_data.hbp_blanking_mode;
3752 int hsa_blanking_mode = dssdev->panel.dsi_vm_data.hsa_blanking_mode;
3753 u32 r;
3754
3755 /*
3756 * 0 = TX FIFO packets sent or LPS in corresponding blanking periods
3757 * 1 = Long blanking packets are sent in corresponding blanking periods
3758 */
3759 r = dsi_read_reg(dsidev, DSI_CTRL);
3760 r = FLD_MOD(r, blanking_mode, 20, 20); /* BLANKING_MODE */
3761 r = FLD_MOD(r, hfp_blanking_mode, 21, 21); /* HFP_BLANKING */
3762 r = FLD_MOD(r, hbp_blanking_mode, 22, 22); /* HBP_BLANKING */
3763 r = FLD_MOD(r, hsa_blanking_mode, 23, 23); /* HSA_BLANKING */
3764 dsi_write_reg(dsidev, DSI_CTRL, r);
3765}
3766
3685static int dsi_proto_config(struct omap_dss_device *dssdev) 3767static int dsi_proto_config(struct omap_dss_device *dssdev)
3686{ 3768{
3687 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); 3769 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
@@ -3725,7 +3807,6 @@ static int dsi_proto_config(struct omap_dss_device *dssdev)
3725 r = FLD_MOD(r, 1, 4, 4); /* VP_CLK_RATIO, always 1, see errata*/ 3807 r = FLD_MOD(r, 1, 4, 4); /* VP_CLK_RATIO, always 1, see errata*/
3726 r = FLD_MOD(r, buswidth, 7, 6); /* VP_DATA_BUS_WIDTH */ 3808 r = FLD_MOD(r, buswidth, 7, 6); /* VP_DATA_BUS_WIDTH */
3727 r = FLD_MOD(r, 0, 8, 8); /* VP_CLK_POL */ 3809 r = FLD_MOD(r, 0, 8, 8); /* VP_CLK_POL */
3728 r = FLD_MOD(r, 2, 13, 12); /* LINE_BUFFER, 2 lines */
3729 r = FLD_MOD(r, 1, 14, 14); /* TRIGGER_RESET_MODE */ 3810 r = FLD_MOD(r, 1, 14, 14); /* TRIGGER_RESET_MODE */
3730 r = FLD_MOD(r, 1, 19, 19); /* EOT_ENABLE */ 3811 r = FLD_MOD(r, 1, 19, 19); /* EOT_ENABLE */
3731 if (!dss_has_feature(FEAT_DSI_DCS_CMD_CONFIG_VC)) { 3812 if (!dss_has_feature(FEAT_DSI_DCS_CMD_CONFIG_VC)) {
@@ -3736,6 +3817,13 @@ static int dsi_proto_config(struct omap_dss_device *dssdev)
3736 3817
3737 dsi_write_reg(dsidev, DSI_CTRL, r); 3818 dsi_write_reg(dsidev, DSI_CTRL, r);
3738 3819
3820 dsi_config_vp_num_line_buffers(dssdev);
3821
3822 if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_VIDEO_MODE) {
3823 dsi_config_vp_sync_events(dssdev);
3824 dsi_config_blanking_modes(dssdev);
3825 }
3826
3739 dsi_vc_initial_config(dsidev, 0); 3827 dsi_vc_initial_config(dsidev, 0);
3740 dsi_vc_initial_config(dsidev, 1); 3828 dsi_vc_initial_config(dsidev, 1);
3741 dsi_vc_initial_config(dsidev, 2); 3829 dsi_vc_initial_config(dsidev, 2);
@@ -3754,6 +3842,7 @@ static void dsi_proto_timings(struct omap_dss_device *dssdev)
3754 unsigned ddr_clk_pre, ddr_clk_post; 3842 unsigned ddr_clk_pre, ddr_clk_post;
3755 unsigned enter_hs_mode_lat, exit_hs_mode_lat; 3843 unsigned enter_hs_mode_lat, exit_hs_mode_lat;
3756 unsigned ths_eot; 3844 unsigned ths_eot;
3845 int ndl = dsi_get_num_data_lanes_dssdev(dssdev);
3757 u32 r; 3846 u32 r;
3758 3847
3759 r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG0); 3848 r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG0);
@@ -3776,7 +3865,7 @@ static void dsi_proto_timings(struct omap_dss_device *dssdev)
3776 /* min 60ns + 52*UI */ 3865 /* min 60ns + 52*UI */
3777 tclk_post = ns2ddr(dsidev, 60) + 26; 3866 tclk_post = ns2ddr(dsidev, 60) + 26;
3778 3867
3779 ths_eot = DIV_ROUND_UP(4, dsi_get_num_data_lanes_dssdev(dssdev)); 3868 ths_eot = DIV_ROUND_UP(4, ndl);
3780 3869
3781 ddr_clk_pre = DIV_ROUND_UP(tclk_pre + tlpx + tclk_zero + tclk_prepare, 3870 ddr_clk_pre = DIV_ROUND_UP(tclk_pre + tlpx + tclk_zero + tclk_prepare,
3782 4); 3871 4);
@@ -3806,7 +3895,114 @@ static void dsi_proto_timings(struct omap_dss_device *dssdev)
3806 3895
3807 DSSDBG("enter_hs_mode_lat %u, exit_hs_mode_lat %u\n", 3896 DSSDBG("enter_hs_mode_lat %u, exit_hs_mode_lat %u\n",
3808 enter_hs_mode_lat, exit_hs_mode_lat); 3897 enter_hs_mode_lat, exit_hs_mode_lat);
3898
3899 if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_VIDEO_MODE) {
3900 /* TODO: Implement a video mode check_timings function */
3901 int hsa = dssdev->panel.dsi_vm_data.hsa;
3902 int hfp = dssdev->panel.dsi_vm_data.hfp;
3903 int hbp = dssdev->panel.dsi_vm_data.hbp;
3904 int vsa = dssdev->panel.dsi_vm_data.vsa;
3905 int vfp = dssdev->panel.dsi_vm_data.vfp;
3906 int vbp = dssdev->panel.dsi_vm_data.vbp;
3907 int window_sync = dssdev->panel.dsi_vm_data.window_sync;
3908 bool hsync_end = dssdev->panel.dsi_vm_data.vp_hsync_end;
3909 struct omap_video_timings *timings = &dssdev->panel.timings;
3910 int bpp = dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt);
3911 int tl, t_he, width_bytes;
3912
3913 t_he = hsync_end ?
3914 ((hsa == 0 && ndl == 3) ? 1 : DIV_ROUND_UP(4, ndl)) : 0;
3915
3916 width_bytes = DIV_ROUND_UP(timings->x_res * bpp, 8);
3917
3918 /* TL = t_HS + HSA + t_HE + HFP + ceil((WC + 6) / NDL) + HBP */
3919 tl = DIV_ROUND_UP(4, ndl) + (hsync_end ? hsa : 0) + t_he + hfp +
3920 DIV_ROUND_UP(width_bytes + 6, ndl) + hbp;
3921
3922 DSSDBG("HBP: %d, HFP: %d, HSA: %d, TL: %d TXBYTECLKHS\n", hbp,
3923 hfp, hsync_end ? hsa : 0, tl);
3924 DSSDBG("VBP: %d, VFP: %d, VSA: %d, VACT: %d lines\n", vbp, vfp,
3925 vsa, timings->y_res);
3926
3927 r = dsi_read_reg(dsidev, DSI_VM_TIMING1);
3928 r = FLD_MOD(r, hbp, 11, 0); /* HBP */
3929 r = FLD_MOD(r, hfp, 23, 12); /* HFP */
3930 r = FLD_MOD(r, hsync_end ? hsa : 0, 31, 24); /* HSA */
3931 dsi_write_reg(dsidev, DSI_VM_TIMING1, r);
3932
3933 r = dsi_read_reg(dsidev, DSI_VM_TIMING2);
3934 r = FLD_MOD(r, vbp, 7, 0); /* VBP */
3935 r = FLD_MOD(r, vfp, 15, 8); /* VFP */
3936 r = FLD_MOD(r, vsa, 23, 16); /* VSA */
3937 r = FLD_MOD(r, window_sync, 27, 24); /* WINDOW_SYNC */
3938 dsi_write_reg(dsidev, DSI_VM_TIMING2, r);
3939
3940 r = dsi_read_reg(dsidev, DSI_VM_TIMING3);
3941 r = FLD_MOD(r, timings->y_res, 14, 0); /* VACT */
3942 r = FLD_MOD(r, tl, 31, 16); /* TL */
3943 dsi_write_reg(dsidev, DSI_VM_TIMING3, r);
3944 }
3945}
3946
3947int dsi_video_mode_enable(struct omap_dss_device *dssdev, int channel)
3948{
3949 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
3950 int bpp = dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt);
3951 u8 data_type;
3952 u16 word_count;
3953
3954 switch (dssdev->panel.dsi_pix_fmt) {
3955 case OMAP_DSS_DSI_FMT_RGB888:
3956 data_type = MIPI_DSI_PACKED_PIXEL_STREAM_24;
3957 break;
3958 case OMAP_DSS_DSI_FMT_RGB666:
3959 data_type = MIPI_DSI_PIXEL_STREAM_3BYTE_18;
3960 break;
3961 case OMAP_DSS_DSI_FMT_RGB666_PACKED:
3962 data_type = MIPI_DSI_PACKED_PIXEL_STREAM_18;
3963 break;
3964 case OMAP_DSS_DSI_FMT_RGB565:
3965 data_type = MIPI_DSI_PACKED_PIXEL_STREAM_16;
3966 break;
3967 default:
3968 BUG();
3969 };
3970
3971 dsi_if_enable(dsidev, false);
3972 dsi_vc_enable(dsidev, channel, false);
3973
3974 /* MODE, 1 = video mode */
3975 REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 1, 4, 4);
3976
3977 word_count = DIV_ROUND_UP(dssdev->panel.timings.x_res * bpp, 8);
3978
3979 dsi_vc_write_long_header(dsidev, channel, data_type, word_count, 0);
3980
3981 dsi_vc_enable(dsidev, channel, true);
3982 dsi_if_enable(dsidev, true);
3983
3984 dssdev->manager->enable(dssdev->manager);
3985
3986 return 0;
3809} 3987}
3988EXPORT_SYMBOL(dsi_video_mode_enable);
3989
3990void dsi_video_mode_disable(struct omap_dss_device *dssdev, int channel)
3991{
3992 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
3993
3994 dsi_if_enable(dsidev, false);
3995 dsi_vc_enable(dsidev, channel, false);
3996
3997 /* MODE, 0 = command mode */
3998 REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 0, 4, 4);
3999
4000 dsi_vc_enable(dsidev, channel, true);
4001 dsi_if_enable(dsidev, true);
4002
4003 dssdev->manager->disable(dssdev->manager);
4004}
4005EXPORT_SYMBOL(dsi_video_mode_disable);
3810 4006
3811static void dsi_update_screen_dispc(struct omap_dss_device *dssdev, 4007static void dsi_update_screen_dispc(struct omap_dss_device *dssdev,
3812 u16 x, u16 y, u16 w, u16 h) 4008 u16 x, u16 y, u16 w, u16 h)
@@ -4019,28 +4215,9 @@ EXPORT_SYMBOL(omap_dsi_update);
4019static int dsi_display_init_dispc(struct omap_dss_device *dssdev) 4215static int dsi_display_init_dispc(struct omap_dss_device *dssdev)
4020{ 4216{
4021 int r; 4217 int r;
4022 u32 irq;
4023
4024 irq = dssdev->manager->id == OMAP_DSS_CHANNEL_LCD ?
4025 DISPC_IRQ_FRAMEDONE : DISPC_IRQ_FRAMEDONE2;
4026
4027 r = omap_dispc_register_isr(dsi_framedone_irq_callback, (void *) dssdev,
4028 irq);
4029 if (r) {
4030 DSSERR("can't get FRAMEDONE irq\n");
4031 return r;
4032 }
4033
4034 dispc_mgr_set_lcd_display_type(dssdev->manager->id,
4035 OMAP_DSS_LCD_DISPLAY_TFT);
4036
4037 dispc_mgr_enable_stallmode(dssdev->manager->id, true);
4038 dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 1);
4039
4040 dispc_mgr_set_tft_data_lines(dssdev->manager->id,
4041 dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt));
4042 4218
4043 { 4219 if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_CMD_MODE) {
4220 u32 irq;
4044 struct omap_video_timings timings = { 4221 struct omap_video_timings timings = {
4045 .hsw = 1, 4222 .hsw = 1,
4046 .hfp = 1, 4223 .hfp = 1,
@@ -4050,21 +4227,46 @@ static int dsi_display_init_dispc(struct omap_dss_device *dssdev)
4050 .vbp = 0, 4227 .vbp = 0,
4051 }; 4228 };
4052 4229
4230 irq = dssdev->manager->id == OMAP_DSS_CHANNEL_LCD ?
4231 DISPC_IRQ_FRAMEDONE : DISPC_IRQ_FRAMEDONE2;
4232
4233 r = omap_dispc_register_isr(dsi_framedone_irq_callback,
4234 (void *) dssdev, irq);
4235 if (r) {
4236 DSSERR("can't get FRAMEDONE irq\n");
4237 return r;
4238 }
4239
4240 dispc_mgr_enable_stallmode(dssdev->manager->id, true);
4241 dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 1);
4242
4053 dispc_mgr_set_lcd_timings(dssdev->manager->id, &timings); 4243 dispc_mgr_set_lcd_timings(dssdev->manager->id, &timings);
4244 } else {
4245 dispc_mgr_enable_stallmode(dssdev->manager->id, false);
4246 dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 0);
4247
4248 dispc_mgr_set_lcd_timings(dssdev->manager->id,
4249 &dssdev->panel.timings);
4054 } 4250 }
4055 4251
4252 dispc_mgr_set_lcd_display_type(dssdev->manager->id,
4253 OMAP_DSS_LCD_DISPLAY_TFT);
4254 dispc_mgr_set_tft_data_lines(dssdev->manager->id,
4255 dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt));
4056 return 0; 4256 return 0;
4057} 4257}
4058 4258
4059static void dsi_display_uninit_dispc(struct omap_dss_device *dssdev) 4259static void dsi_display_uninit_dispc(struct omap_dss_device *dssdev)
4060{ 4260{
4061 u32 irq; 4261 if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_CMD_MODE) {
4262 u32 irq;
4062 4263
4063 irq = dssdev->manager->id == OMAP_DSS_CHANNEL_LCD ? 4264 irq = dssdev->manager->id == OMAP_DSS_CHANNEL_LCD ?
4064 DISPC_IRQ_FRAMEDONE : DISPC_IRQ_FRAMEDONE2; 4265 DISPC_IRQ_FRAMEDONE : DISPC_IRQ_FRAMEDONE2;
4065 4266
4066 omap_dispc_unregister_isr(dsi_framedone_irq_callback, (void *) dssdev, 4267 omap_dispc_unregister_isr(dsi_framedone_irq_callback,
4067 irq); 4268 (void *) dssdev, irq);
4269 }
4068} 4270}
4069 4271
4070static int dsi_configure_dsi_clocks(struct omap_dss_device *dssdev) 4272static int dsi_configure_dsi_clocks(struct omap_dss_device *dssdev)