Skip to content

Commit 7c9b998

Browse files
Kaustabh Chakrabortydaeinki
authored andcommitted
drm/bridge: samsung-dsim: add SFRCTRL register
On Exynos7870 devices, enabling the display requires disabling standby by writing to the SFRCTRL register. Add the register and related bit values. Since this behavior isn't available on other SoCs, implement a flag in the driver data struct indicating the availability of this feature. Signed-off-by: Kaustabh Chakraborty <kauschluss@disroot.org> Signed-off-by: Inki Dae <inki.dae@samsung.com>
1 parent 4e44572 commit 7c9b998

2 files changed

Lines changed: 17 additions & 0 deletions

File tree

drivers/gpu/drm/bridge/samsung-dsim.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@
157157
#define DSIM_INT_RX_ECC_ERR BIT(15)
158158
#define DSIM_INT_RX_CRC_ERR BIT(14)
159159

160+
/* DSIM_SFRCTRL */
161+
#define DSIM_SFR_CTRL_STAND_BY BIT(4)
162+
#define DSIM_SFR_CTRL_SHADOW_UPDATE BIT(1)
163+
#define DSIM_SFR_CTRL_SHADOW_EN BIT(0)
164+
160165
/* DSIM_FIFOCTRL */
161166
#define DSIM_RX_DATA_FULL BIT(25)
162167
#define DSIM_RX_DATA_EMPTY BIT(24)
@@ -257,6 +262,7 @@ enum reg_idx {
257262
DSIM_PKTHDR_REG, /* Packet Header FIFO register */
258263
DSIM_PAYLOAD_REG, /* Payload FIFO register */
259264
DSIM_RXFIFO_REG, /* Read FIFO register */
265+
DSIM_SFRCTRL_REG, /* SFR standby and shadow control register */
260266
DSIM_FIFOCTRL_REG, /* FIFO status and control register */
261267
DSIM_PLLCTRL_REG, /* PLL control register */
262268
DSIM_PHYCTRL_REG,
@@ -1037,6 +1043,7 @@ static void samsung_dsim_set_display_mode(struct samsung_dsim *dsi)
10371043

10381044
static void samsung_dsim_set_display_enable(struct samsung_dsim *dsi, bool enable)
10391045
{
1046+
const struct samsung_dsim_driver_data *driver_data = dsi->driver_data;
10401047
u32 reg;
10411048

10421049
reg = samsung_dsim_read(dsi, DSIM_MDRESOL_REG);
@@ -1045,6 +1052,15 @@ static void samsung_dsim_set_display_enable(struct samsung_dsim *dsi, bool enabl
10451052
else
10461053
reg &= ~DSIM_MAIN_STAND_BY;
10471054
samsung_dsim_write(dsi, DSIM_MDRESOL_REG, reg);
1055+
1056+
if (driver_data->has_sfrctrl) {
1057+
reg = samsung_dsim_read(dsi, DSIM_SFRCTRL_REG);
1058+
if (enable)
1059+
reg |= DSIM_SFR_CTRL_STAND_BY;
1060+
else
1061+
reg &= ~DSIM_SFR_CTRL_STAND_BY;
1062+
samsung_dsim_write(dsi, DSIM_SFRCTRL_REG, reg);
1063+
}
10481064
}
10491065

10501066
static int samsung_dsim_wait_for_hdr_fifo(struct samsung_dsim *dsi)

include/drm/bridge/samsung-dsim.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ struct samsung_dsim_driver_data {
5757
unsigned int has_freqband:1;
5858
unsigned int has_clklane_stop:1;
5959
unsigned int has_broken_fifoctrl_emptyhdr:1;
60+
unsigned int has_sfrctrl:1;
6061
unsigned int num_clks;
6162
unsigned int min_freq;
6263
unsigned int max_freq;

0 commit comments

Comments
 (0)