@ -261,6 +261,13 @@ struct dsi_data {
struct clk * dss_clk ;
struct clk * sys_clk ;
struct dispc_clock_info user_dispc_cinfo ;
struct dsi_clock_info user_dsi_cinfo ;
enum omap_dss_clk_source user_dispc_fclk_src ;
enum omap_dss_clk_source user_lcd_clk_src ;
enum omap_dss_clk_source user_dsi_fclk_src ;
struct dsi_clock_info current_cinfo ;
bool vdds_dsi_enabled ;
@ -1200,7 +1207,7 @@ static int dsi_set_lp_clk_divisor(struct omap_dss_device *dssdev)
unsigned lp_clk_div ;
unsigned long lp_clk ;
lp_clk_div = dssdev - > clocks . dsi . lp_clk_div ;
lp_clk_div = dsi - > user_dsi_cinfo . lp_clk_div ;
if ( lp_clk_div = = 0 | | lp_clk_div > dsi - > lpdiv_max )
return - EINVAL ;
@ -3910,7 +3917,7 @@ static void dsi_config_cmd_mode_interleaving(struct omap_dss_device *dssdev)
struct omap_video_timings * timings = & dsi - > timings ;
int bpp = dsi_get_pixel_size ( dsi - > pix_fmt ) ;
int ndl = dsi - > num_lanes_used - 1 ;
int dsi_fclk_hsdiv = dssdev - > clocks . dsi . regm_dsi + 1 ;
int dsi_fclk_hsdiv = dsi - > user_dsi_cinfo . regm_dsi + 1 ;
int hsa_interleave_hs = 0 , hsa_interleave_lp = 0 ;
int hfp_interleave_hs = 0 , hfp_interleave_lp = 0 ;
int hbp_interleave_hs = 0 , hbp_interleave_lp = 0 ;
@ -4302,24 +4309,24 @@ int omapdss_dsi_set_clocks(struct omap_dss_device *dssdev,
dsi_fclk = cinfo . dsi_pll_hsdiv_dsi_clk ;
lp_clk_div = DIV_ROUND_UP ( dsi_fclk , lp_clk * 2 ) ;
dssdev - > clocks . dsi . regn = cinfo . regn ;
dssdev - > clocks . dsi . regm = cinfo . regm ;
dssdev - > clocks . dsi . regm_dispc = cinfo . regm_dispc ;
dssdev - > clocks . dsi . regm_dsi = cinfo . regm_dsi ;
dsi - > user_dsi_cinfo . regn = cinfo . regn ;
dsi - > user_dsi_cinfo . regm = cinfo . regm ;
dsi - > user_dsi_cinfo . regm_dispc = cinfo . regm_dispc ;
dsi - > user_dsi_cinfo . regm_dsi = cinfo . regm_dsi ;
dssdev - > clocks . dsi . lp_clk_div = lp_clk_div ;
dsi - > user_dsi_cinfo . lp_clk_div = lp_clk_div ;
dssdev - > clocks . dispc . channel . lck_div = dispc_cinfo . lck_div ;
dssdev - > clocks . dispc . channel . pck_div = dispc_cinfo . pck_div ;
dsi - > user_dispc_cinfo . lck_div = dispc_cinfo . lck_div ;
dsi - > user_dispc_cinfo . pck_div = dispc_cinfo . pck_div ;
dssdev - > clocks . dispc . dispc_fclk_src = OMAP_DSS_CLK_SRC_FCK ;
dsi - > user_ dispc_fclk_src = OMAP_DSS_CLK_SRC_FCK ;
dssdev - > clocks . dispc . channel . lcd_clk_src =
dsi - > user_ lcd_clk_src =
dsi - > module_id = = 0 ?
OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC :
OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC ;
dssdev - > clocks . dsi . dsi_fclk_src =
dsi - > user_ dsi_fclk_src =
dsi - > module_id = = 0 ?
OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI :
OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DSI ;
@ -4589,8 +4596,8 @@ static int dsi_configure_dispc_clocks(struct omap_dss_device *dssdev)
fck = dsi_get_pll_hsdiv_dispc_rate ( dsidev ) ;
dispc_cinfo . lck_div = dssdev - > clocks . dispc . channel . lck_div ;
dispc_cinfo . pck_div = dssdev - > clocks . dispc . channel . pck_div ;
dispc_cinfo . lck_div = dsi - > user_dispc_cinfo . lck_div ;
dispc_cinfo . pck_div = dsi - > user_dispc_cinfo . pck_div ;
r = dispc_calc_clock_rates ( fck , & dispc_cinfo ) ;
if ( r ) {
@ -4679,13 +4686,12 @@ static void dsi_display_uninit_dispc(struct omap_dss_device *dssdev)
static int dsi_configure_dsi_clocks ( struct omap_dss_device * dssdev )
{
struct platform_device * dsidev = dsi_get_dsidev_from_dssdev ( dssdev ) ;
struct dsi_data * dsi = dsi_get_dsidrv_data ( dsidev ) ;
struct dsi_clock_info cinfo ;
int r ;
cinfo . regn = dssdev - > clocks . dsi . regn ;
cinfo . regm = dssdev - > clocks . dsi . regm ;
cinfo . regm_dispc = dssdev - > clocks . dsi . regm_dispc ;
cinfo . regm_dsi = dssdev - > clocks . dsi . regm_dsi ;
cinfo = dsi - > user_dsi_cinfo ;
r = dsi_calc_clock_rates ( dsidev , & cinfo ) ;
if ( r ) {
DSSERR ( " Failed to calc dsi clocks \n " ) ;
@ -4716,9 +4722,8 @@ static int dsi_display_init_dsi(struct omap_dss_device *dssdev)
if ( r )
goto err1 ;
dss_select_dsi_clk_source ( dsi - > module_id , dssdev - > clocks . dsi . dsi_fclk_src ) ;
dss_select_lcd_clk_source ( mgr - > id ,
dssdev - > clocks . dispc . channel . lcd_clk_src ) ;
dss_select_dsi_clk_source ( dsi - > module_id , dsi - > user_dsi_fclk_src ) ;
dss_select_lcd_clk_source ( mgr - > id , dsi - > user_lcd_clk_src ) ;
DSSDBG ( " PLL OK \n " ) ;