4646#define DSIM_BTA_TIMEOUT (x ) ((x) << 16)
4747
4848/* DSIM_CLKCTRL */
49- #define DSIM_ESC_PRESCALER (x ) (((x) & 0xffff) << 0)
50- #define DSIM_ESC_PRESCALER_MASK (0xffff << 0)
51- #define DSIM_LANE_ESC_CLK_EN_CLK BIT(19)
52- #define DSIM_LANE_ESC_CLK_EN_DATA (x ) (((x) & 0xf) << 20)
53- #define DSIM_LANE_ESC_CLK_EN_DATA_MASK (0xf << 20)
54- #define DSIM_BYTE_CLKEN BIT(24)
55- #define DSIM_BYTE_CLK_SRC (x ) (((x) & 0x3) << 25)
56- #define DSIM_BYTE_CLK_SRC_MASK (0x3 << 25)
57- #define DSIM_PLL_BYPASS BIT(27)
58- #define DSIM_ESC_CLKEN BIT(28)
59- #define DSIM_TX_REQUEST_HSCLK BIT(31)
49+ #define DSIM_ESC_PRESCALER (x ) (((x) & 0xffff) << 0)
50+ #define DSIM_ESC_PRESCALER_MASK (0xffff << 0)
51+ #define DSIM_LANE_ESC_CLK_EN_DATA (x , offset ) (((x) & 0xf) << offset)
52+ #define DSIM_LANE_ESC_CLK_EN_DATA_MASK (offset ) (0xf << offset)
53+ #define DSIM_BYTE_CLK_SRC (x ) (((x) & 0x3) << 25)
54+ #define DSIM_BYTE_CLK_SRC_MASK (0x3 << 25)
55+ #define DSIM_PLL_BYPASS BIT(27)
6056
6157/* DSIM_CONFIG */
6258#define DSIM_LANE_EN_CLK BIT(0)
@@ -421,6 +417,11 @@ static const struct samsung_dsim_driver_data exynos3_dsi_driver_data = {
421417 .wait_for_hdr_fifo = 1 ,
422418 .wait_for_reset = 1 ,
423419 .num_bits_resol = 11 ,
420+ .esc_clken_bit = 28 ,
421+ .byte_clken_bit = 24 ,
422+ .tx_req_hsclk_bit = 31 ,
423+ .lane_esc_clk_bit = 19 ,
424+ .lane_esc_data_offset = 20 ,
424425 .pll_p_offset = 13 ,
425426 .reg_values = reg_values ,
426427 .pll_fin_min = 6 ,
@@ -442,6 +443,11 @@ static const struct samsung_dsim_driver_data exynos4_dsi_driver_data = {
442443 .wait_for_hdr_fifo = 1 ,
443444 .wait_for_reset = 1 ,
444445 .num_bits_resol = 11 ,
446+ .esc_clken_bit = 28 ,
447+ .byte_clken_bit = 24 ,
448+ .tx_req_hsclk_bit = 31 ,
449+ .lane_esc_clk_bit = 19 ,
450+ .lane_esc_data_offset = 20 ,
445451 .pll_p_offset = 13 ,
446452 .reg_values = reg_values ,
447453 .pll_fin_min = 6 ,
@@ -461,6 +467,11 @@ static const struct samsung_dsim_driver_data exynos5_dsi_driver_data = {
461467 .wait_for_hdr_fifo = 1 ,
462468 .wait_for_reset = 1 ,
463469 .num_bits_resol = 11 ,
470+ .esc_clken_bit = 28 ,
471+ .byte_clken_bit = 24 ,
472+ .tx_req_hsclk_bit = 31 ,
473+ .lane_esc_clk_bit = 19 ,
474+ .lane_esc_data_offset = 20 ,
464475 .pll_p_offset = 13 ,
465476 .reg_values = reg_values ,
466477 .pll_fin_min = 6 ,
@@ -480,6 +491,11 @@ static const struct samsung_dsim_driver_data exynos5433_dsi_driver_data = {
480491 .wait_for_hdr_fifo = 1 ,
481492 .wait_for_reset = 0 ,
482493 .num_bits_resol = 12 ,
494+ .esc_clken_bit = 28 ,
495+ .byte_clken_bit = 24 ,
496+ .tx_req_hsclk_bit = 31 ,
497+ .lane_esc_clk_bit = 19 ,
498+ .lane_esc_data_offset = 20 ,
483499 .pll_p_offset = 13 ,
484500 .reg_values = exynos5433_reg_values ,
485501 .pll_fin_min = 6 ,
@@ -499,6 +515,11 @@ static const struct samsung_dsim_driver_data exynos5422_dsi_driver_data = {
499515 .wait_for_hdr_fifo = 1 ,
500516 .wait_for_reset = 1 ,
501517 .num_bits_resol = 12 ,
518+ .esc_clken_bit = 28 ,
519+ .byte_clken_bit = 24 ,
520+ .tx_req_hsclk_bit = 31 ,
521+ .lane_esc_clk_bit = 19 ,
522+ .lane_esc_data_offset = 20 ,
502523 .pll_p_offset = 13 ,
503524 .reg_values = exynos5422_reg_values ,
504525 .pll_fin_min = 6 ,
@@ -518,6 +539,11 @@ static const struct samsung_dsim_driver_data imx8mm_dsi_driver_data = {
518539 .wait_for_hdr_fifo = 1 ,
519540 .wait_for_reset = 0 ,
520541 .num_bits_resol = 12 ,
542+ .esc_clken_bit = 28 ,
543+ .byte_clken_bit = 24 ,
544+ .tx_req_hsclk_bit = 31 ,
545+ .lane_esc_clk_bit = 19 ,
546+ .lane_esc_data_offset = 20 ,
521547 /*
522548 * Unlike Exynos, PLL_P(PMS_P) offset 14 is used in i.MX8M Mini/Nano/Plus
523549 * downstream driver - drivers/gpu/drm/bridge/sec-dsim.c
@@ -721,6 +747,7 @@ static unsigned long samsung_dsim_set_pll(struct samsung_dsim *dsi,
721747
722748static int samsung_dsim_enable_clock (struct samsung_dsim * dsi )
723749{
750+ const struct samsung_dsim_driver_data * driver_data = dsi -> driver_data ;
724751 unsigned long hs_clk , byte_clk , esc_clk , pix_clk ;
725752 unsigned long esc_div ;
726753 u32 reg ;
@@ -754,15 +781,17 @@ static int samsung_dsim_enable_clock(struct samsung_dsim *dsi)
754781 hs_clk , byte_clk , esc_clk );
755782
756783 reg = samsung_dsim_read (dsi , DSIM_CLKCTRL_REG );
757- reg &= ~(DSIM_ESC_PRESCALER_MASK | DSIM_LANE_ESC_CLK_EN_CLK
758- | DSIM_LANE_ESC_CLK_EN_DATA_MASK | DSIM_PLL_BYPASS
759- | DSIM_BYTE_CLK_SRC_MASK );
760- reg |= DSIM_ESC_CLKEN | DSIM_BYTE_CLKEN
761- | DSIM_ESC_PRESCALER (esc_div )
762- | DSIM_LANE_ESC_CLK_EN_CLK
763- | DSIM_LANE_ESC_CLK_EN_DATA (BIT (dsi -> lanes ) - 1 )
764- | DSIM_BYTE_CLK_SRC (0 )
765- | DSIM_TX_REQUEST_HSCLK ;
784+ reg &= ~(DSIM_ESC_PRESCALER_MASK | BIT (driver_data -> lane_esc_clk_bit )
785+ | DSIM_LANE_ESC_CLK_EN_DATA_MASK (driver_data -> lane_esc_data_offset )
786+ | DSIM_PLL_BYPASS
787+ | DSIM_BYTE_CLK_SRC_MASK );
788+ reg |= BIT (driver_data -> esc_clken_bit ) | BIT (driver_data -> byte_clken_bit )
789+ | DSIM_ESC_PRESCALER (esc_div )
790+ | BIT (driver_data -> lane_esc_clk_bit )
791+ | DSIM_LANE_ESC_CLK_EN_DATA (BIT (dsi -> lanes ) - 1 ,
792+ driver_data -> lane_esc_data_offset )
793+ | DSIM_BYTE_CLK_SRC (0 )
794+ | BIT (driver_data -> tx_req_hsclk_bit );
766795 samsung_dsim_write (dsi , DSIM_CLKCTRL_REG , reg );
767796
768797 return 0 ;
@@ -866,11 +895,14 @@ static void samsung_dsim_set_phy_ctrl(struct samsung_dsim *dsi)
866895
867896static void samsung_dsim_disable_clock (struct samsung_dsim * dsi )
868897{
898+ const struct samsung_dsim_driver_data * driver_data = dsi -> driver_data ;
869899 u32 reg ;
870900
871901 reg = samsung_dsim_read (dsi , DSIM_CLKCTRL_REG );
872- reg &= ~(DSIM_LANE_ESC_CLK_EN_CLK | DSIM_LANE_ESC_CLK_EN_DATA_MASK
873- | DSIM_ESC_CLKEN | DSIM_BYTE_CLKEN );
902+ reg &= ~(BIT (driver_data -> lane_esc_clk_bit )
903+ | DSIM_LANE_ESC_CLK_EN_DATA_MASK (driver_data -> lane_esc_data_offset )
904+ | BIT (driver_data -> esc_clken_bit )
905+ | BIT (driver_data -> byte_clken_bit ));
874906 samsung_dsim_write (dsi , DSIM_CLKCTRL_REG , reg );
875907
876908 reg = samsung_dsim_read (dsi , DSIM_PLLCTRL_REG );
0 commit comments