Skip to content

Commit f70181b

Browse files
meltqdianders
authored andcommitted
drm/panel: raydium-rm69380: transition to mipi_dsi wrapped functions
Changes the raydium-rm69380 panel to use multi style functions for improved error handling. Reviewed-by: Douglas Anderson <[email protected]> Signed-off-by: Tejas Vipin <[email protected]> Signed-off-by: Douglas Anderson <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent e6a1c40 commit f70181b

File tree

1 file changed

+29
-64
lines changed

1 file changed

+29
-64
lines changed

drivers/gpu/drm/panel/panel-raydium-rm69380.c

Lines changed: 29 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -46,108 +46,73 @@ static void rm69380_reset(struct rm69380_panel *ctx)
4646
static int rm69380_on(struct rm69380_panel *ctx)
4747
{
4848
struct mipi_dsi_device *dsi = ctx->dsi[0];
49-
struct device *dev = &dsi->dev;
50-
int ret;
49+
struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
5150

5251
dsi->mode_flags |= MIPI_DSI_MODE_LPM;
5352
if (ctx->dsi[1])
5453
ctx->dsi[1]->mode_flags |= MIPI_DSI_MODE_LPM;
5554

56-
mipi_dsi_dcs_write_seq(dsi, 0xfe, 0xd4);
57-
mipi_dsi_dcs_write_seq(dsi, 0x00, 0x80);
58-
mipi_dsi_dcs_write_seq(dsi, 0xfe, 0xd0);
59-
mipi_dsi_dcs_write_seq(dsi, 0x48, 0x00);
60-
mipi_dsi_dcs_write_seq(dsi, 0xfe, 0x26);
61-
mipi_dsi_dcs_write_seq(dsi, 0x75, 0x3f);
62-
mipi_dsi_dcs_write_seq(dsi, 0x1d, 0x1a);
63-
mipi_dsi_dcs_write_seq(dsi, 0xfe, 0x00);
64-
mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_WRITE_CONTROL_DISPLAY, 0x28);
65-
mipi_dsi_dcs_write_seq(dsi, 0xc2, 0x08);
66-
67-
ret = mipi_dsi_dcs_set_tear_on(dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
68-
if (ret < 0) {
69-
dev_err(dev, "Failed to set tear on: %d\n", ret);
70-
return ret;
71-
}
72-
73-
ret = mipi_dsi_dcs_exit_sleep_mode(dsi);
74-
if (ret < 0) {
75-
dev_err(dev, "Failed to exit sleep mode: %d\n", ret);
76-
return ret;
77-
}
78-
msleep(20);
79-
80-
ret = mipi_dsi_dcs_set_display_on(dsi);
81-
if (ret < 0) {
82-
dev_err(dev, "Failed to set display on: %d\n", ret);
83-
return ret;
84-
}
85-
msleep(36);
86-
87-
return 0;
55+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfe, 0xd4);
56+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x00, 0x80);
57+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfe, 0xd0);
58+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x48, 0x00);
59+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfe, 0x26);
60+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x75, 0x3f);
61+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0x1d, 0x1a);
62+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfe, 0x00);
63+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_WRITE_CONTROL_DISPLAY, 0x28);
64+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xc2, 0x08);
65+
66+
mipi_dsi_dcs_set_tear_on_multi(&dsi_ctx, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
67+
mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx);
68+
mipi_dsi_msleep(&dsi_ctx, 20);
69+
70+
mipi_dsi_dcs_set_display_on_multi(&dsi_ctx);
71+
mipi_dsi_msleep(&dsi_ctx, 36);
72+
73+
return dsi_ctx.accum_err;
8874
}
8975

90-
static int rm69380_off(struct rm69380_panel *ctx)
76+
static void rm69380_off(struct rm69380_panel *ctx)
9177
{
9278
struct mipi_dsi_device *dsi = ctx->dsi[0];
93-
struct device *dev = &dsi->dev;
94-
int ret;
79+
struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
9580

9681
dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
9782
if (ctx->dsi[1])
9883
ctx->dsi[1]->mode_flags &= ~MIPI_DSI_MODE_LPM;
9984

100-
ret = mipi_dsi_dcs_set_display_off(dsi);
101-
if (ret < 0) {
102-
dev_err(dev, "Failed to set display off: %d\n", ret);
103-
return ret;
104-
}
105-
msleep(35);
106-
107-
ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
108-
if (ret < 0) {
109-
dev_err(dev, "Failed to enter sleep mode: %d\n", ret);
110-
return ret;
111-
}
112-
msleep(20);
113-
114-
return 0;
85+
mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
86+
mipi_dsi_msleep(&dsi_ctx, 35);
87+
mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
88+
mipi_dsi_msleep(&dsi_ctx, 20);
11589
}
11690

11791
static int rm69380_prepare(struct drm_panel *panel)
11892
{
11993
struct rm69380_panel *ctx = to_rm69380_panel(panel);
120-
struct device *dev = &ctx->dsi[0]->dev;
12194
int ret;
12295

12396
ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies);
124-
if (ret < 0) {
125-
dev_err(dev, "Failed to enable regulators: %d\n", ret);
97+
if (ret < 0)
12698
return ret;
127-
}
12899

129100
rm69380_reset(ctx);
130101

131102
ret = rm69380_on(ctx);
132103
if (ret < 0) {
133-
dev_err(dev, "Failed to initialize panel: %d\n", ret);
134104
gpiod_set_value_cansleep(ctx->reset_gpio, 1);
135105
regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies);
136-
return ret;
137106
}
138107

139-
return 0;
108+
return ret;
140109
}
141110

142111
static int rm69380_unprepare(struct drm_panel *panel)
143112
{
144113
struct rm69380_panel *ctx = to_rm69380_panel(panel);
145-
struct device *dev = &ctx->dsi[0]->dev;
146-
int ret;
147114

148-
ret = rm69380_off(ctx);
149-
if (ret < 0)
150-
dev_err(dev, "Failed to un-initialize panel: %d\n", ret);
115+
rm69380_off(ctx);
151116

152117
gpiod_set_value_cansleep(ctx->reset_gpio, 1);
153118
regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies);

0 commit comments

Comments
 (0)