3131/* returns true iff both arguments logically differs */
3232#define NEQV (a , b ) (!(a) ^ !(b))
3333
34- /* DSIM_STATUS */
34+ /* DSIM_STATUS or DSIM_DPHY_STATUS */
3535#define DSIM_STOP_STATE_DAT (x ) (((x) & 0xf) << 0)
3636#define DSIM_STOP_STATE_CLK BIT(8)
3737#define DSIM_TX_READY_HS_CLK BIT(10)
@@ -240,7 +240,9 @@ enum samsung_dsim_transfer_type {
240240};
241241
242242enum reg_idx {
243- DSIM_STATUS_REG , /* Status register */
243+ DSIM_STATUS_REG , /* Status register (legacy) */
244+ DSIM_LINK_STATUS_REG , /* Link status register */
245+ DSIM_DPHY_STATUS_REG , /* D-PHY status register */
244246 DSIM_SWRST_REG , /* Software reset register */
245247 DSIM_CLKCTRL_REG , /* Clock control register */
246248 DSIM_TIMEOUT_REG , /* Time out register */
@@ -405,6 +407,7 @@ static const unsigned int imx8mm_dsim_reg_values[] = {
405407static const struct samsung_dsim_driver_data exynos3_dsi_driver_data = {
406408 .reg_ofs = exynos_reg_ofs ,
407409 .plltmr_reg = 0x50 ,
410+ .has_legacy_status_reg = 1 ,
408411 .has_freqband = 1 ,
409412 .has_clklane_stop = 1 ,
410413 .num_clks = 2 ,
@@ -424,6 +427,7 @@ static const struct samsung_dsim_driver_data exynos3_dsi_driver_data = {
424427static const struct samsung_dsim_driver_data exynos4_dsi_driver_data = {
425428 .reg_ofs = exynos_reg_ofs ,
426429 .plltmr_reg = 0x50 ,
430+ .has_legacy_status_reg = 1 ,
427431 .has_freqband = 1 ,
428432 .has_clklane_stop = 1 ,
429433 .num_clks = 2 ,
@@ -443,6 +447,7 @@ static const struct samsung_dsim_driver_data exynos4_dsi_driver_data = {
443447static const struct samsung_dsim_driver_data exynos5_dsi_driver_data = {
444448 .reg_ofs = exynos_reg_ofs ,
445449 .plltmr_reg = 0x58 ,
450+ .has_legacy_status_reg = 1 ,
446451 .num_clks = 2 ,
447452 .max_freq = 1000 ,
448453 .wait_for_reset = 1 ,
@@ -459,6 +464,7 @@ static const struct samsung_dsim_driver_data exynos5_dsi_driver_data = {
459464static const struct samsung_dsim_driver_data exynos5433_dsi_driver_data = {
460465 .reg_ofs = exynos5433_reg_ofs ,
461466 .plltmr_reg = 0xa0 ,
467+ .has_legacy_status_reg = 1 ,
462468 .has_clklane_stop = 1 ,
463469 .num_clks = 5 ,
464470 .max_freq = 1500 ,
@@ -476,6 +482,7 @@ static const struct samsung_dsim_driver_data exynos5433_dsi_driver_data = {
476482static const struct samsung_dsim_driver_data exynos5422_dsi_driver_data = {
477483 .reg_ofs = exynos5433_reg_ofs ,
478484 .plltmr_reg = 0xa0 ,
485+ .has_legacy_status_reg = 1 ,
479486 .has_clklane_stop = 1 ,
480487 .num_clks = 2 ,
481488 .max_freq = 1500 ,
@@ -493,6 +500,7 @@ static const struct samsung_dsim_driver_data exynos5422_dsi_driver_data = {
493500static const struct samsung_dsim_driver_data imx8mm_dsi_driver_data = {
494501 .reg_ofs = exynos5433_reg_ofs ,
495502 .plltmr_reg = 0xa0 ,
503+ .has_legacy_status_reg = 1 ,
496504 .has_clklane_stop = 1 ,
497505 .num_clks = 2 ,
498506 .max_freq = 2100 ,
@@ -688,7 +696,10 @@ static unsigned long samsung_dsim_set_pll(struct samsung_dsim *dsi,
688696 dev_err (dsi -> dev , "PLL failed to stabilize\n" );
689697 return 0 ;
690698 }
691- reg = samsung_dsim_read (dsi , DSIM_STATUS_REG );
699+ if (driver_data -> has_legacy_status_reg )
700+ reg = samsung_dsim_read (dsi , DSIM_STATUS_REG );
701+ else
702+ reg = samsung_dsim_read (dsi , DSIM_LINK_STATUS_REG );
692703 } while ((reg & DSIM_PLL_STABLE ) == 0 );
693704
694705 dsi -> hs_clock = fout ;
@@ -962,7 +973,10 @@ static int samsung_dsim_init_link(struct samsung_dsim *dsi)
962973 return - EFAULT ;
963974 }
964975
965- reg = samsung_dsim_read (dsi , DSIM_STATUS_REG );
976+ if (driver_data -> has_legacy_status_reg )
977+ reg = samsung_dsim_read (dsi , DSIM_STATUS_REG );
978+ else
979+ reg = samsung_dsim_read (dsi , DSIM_DPHY_STATUS_REG );
966980 if ((reg & DSIM_STOP_STATE_DAT (lanes_mask ))
967981 != DSIM_STOP_STATE_DAT (lanes_mask ))
968982 continue ;
0 commit comments