Skip to content

Commit fb13d34

Browse files
meltqsuperna9999
authored andcommitted
drm/mipi-dsi: extend "multi" functions and use them in sony-td4353-jdi
Removes mipi_dsi_dcs_set_tear_off and replaces it with a multi version as after replacing it in sony-td4353-jdi, it doesn't appear anywhere else. sony-td4353-jdi is converted to use multi style functions, including mipi_dsi_dcs_set_tear_off_multi. Signed-off-by: Tejas Vipin <[email protected]> Reviewed-by: Douglas Anderson <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Neil Armstrong <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 4d09800 commit fb13d34

File tree

3 files changed

+47
-104
lines changed

3 files changed

+47
-104
lines changed

drivers/gpu/drm/drm_mipi_dsi.c

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,25 +1265,6 @@ int mipi_dsi_dcs_set_page_address(struct mipi_dsi_device *dsi, u16 start,
12651265
}
12661266
EXPORT_SYMBOL(mipi_dsi_dcs_set_page_address);
12671267

1268-
/**
1269-
* mipi_dsi_dcs_set_tear_off() - turn off the display module's Tearing Effect
1270-
* output signal on the TE signal line
1271-
* @dsi: DSI peripheral device
1272-
*
1273-
* Return: 0 on success or a negative error code on failure
1274-
*/
1275-
int mipi_dsi_dcs_set_tear_off(struct mipi_dsi_device *dsi)
1276-
{
1277-
ssize_t err;
1278-
1279-
err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_TEAR_OFF, NULL, 0);
1280-
if (err < 0)
1281-
return err;
1282-
1283-
return 0;
1284-
}
1285-
EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_off);
1286-
12871268
/**
12881269
* mipi_dsi_dcs_set_tear_on() - turn on the display module's Tearing Effect
12891270
* output signal on the TE signal line.
@@ -1713,6 +1694,29 @@ void mipi_dsi_turn_on_peripheral_multi(struct mipi_dsi_multi_context *ctx)
17131694
}
17141695
EXPORT_SYMBOL(mipi_dsi_turn_on_peripheral_multi);
17151696

1697+
/**
1698+
* mipi_dsi_dcs_set_tear_off_multi() - turn off the display module's Tearing Effect
1699+
* output signal on the TE signal line
1700+
* @ctx: Context for multiple DSI transactions
1701+
*/
1702+
void mipi_dsi_dcs_set_tear_off_multi(struct mipi_dsi_multi_context *ctx)
1703+
{
1704+
struct mipi_dsi_device *dsi = ctx->dsi;
1705+
struct device *dev = &dsi->dev;
1706+
ssize_t err;
1707+
1708+
if (ctx->accum_err)
1709+
return;
1710+
1711+
err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_TEAR_OFF, NULL, 0);
1712+
if (err < 0) {
1713+
ctx->accum_err = err;
1714+
dev_err(dev, "Failed to set tear off: %d\n",
1715+
ctx->accum_err);
1716+
}
1717+
}
1718+
EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_off_multi);
1719+
17161720
/**
17171721
* mipi_dsi_dcs_soft_reset_multi() - perform a software reset of the display module
17181722
* @ctx: Context for multiple DSI transactions

drivers/gpu/drm/panel/panel-sony-td4353-jdi.c

Lines changed: 23 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -47,93 +47,40 @@ static inline struct sony_td4353_jdi *to_sony_td4353_jdi(struct drm_panel *panel
4747
static int sony_td4353_jdi_on(struct sony_td4353_jdi *ctx)
4848
{
4949
struct mipi_dsi_device *dsi = ctx->dsi;
50-
struct device *dev = &dsi->dev;
51-
int ret;
50+
struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
5251

5352
dsi->mode_flags |= MIPI_DSI_MODE_LPM;
5453

55-
ret = mipi_dsi_dcs_set_column_address(dsi, 0x0000, 1080 - 1);
56-
if (ret < 0) {
57-
dev_err(dev, "Failed to set column address: %d\n", ret);
58-
return ret;
59-
}
60-
61-
ret = mipi_dsi_dcs_set_page_address(dsi, 0x0000, 2160 - 1);
62-
if (ret < 0) {
63-
dev_err(dev, "Failed to set page address: %d\n", ret);
64-
return ret;
65-
}
66-
67-
ret = mipi_dsi_dcs_set_tear_scanline(dsi, 0);
68-
if (ret < 0) {
69-
dev_err(dev, "Failed to set tear scanline: %d\n", ret);
70-
return ret;
71-
}
72-
73-
ret = mipi_dsi_dcs_set_tear_on(dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
74-
if (ret < 0) {
75-
dev_err(dev, "Failed to set tear on: %d\n", ret);
76-
return ret;
77-
}
54+
mipi_dsi_dcs_set_column_address_multi(&dsi_ctx, 0x0000, 1080 - 1);
55+
mipi_dsi_dcs_set_page_address_multi(&dsi_ctx, 0x0000, 2160 - 1);
56+
mipi_dsi_dcs_set_tear_scanline_multi(&dsi_ctx, 0);
57+
mipi_dsi_dcs_set_tear_on_multi(&dsi_ctx, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
58+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_SET_ADDRESS_MODE, 0x00);
7859

79-
mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_SET_ADDRESS_MODE, 0x00);
80-
81-
ret = mipi_dsi_dcs_set_pixel_format(dsi, 0x77);
82-
if (ret < 0) {
83-
dev_err(dev, "Failed to set pixel format: %d\n", ret);
84-
return ret;
85-
}
86-
87-
mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_SET_PARTIAL_ROWS,
88-
0x00, 0x00, 0x08, 0x6f);
89-
90-
ret = mipi_dsi_dcs_exit_sleep_mode(dsi);
91-
if (ret < 0) {
92-
dev_err(dev, "Failed to exit sleep mode: %d\n", ret);
93-
return ret;
94-
}
95-
msleep(70);
60+
mipi_dsi_dcs_set_pixel_format_multi(&dsi_ctx, 0x77);
61+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_SET_PARTIAL_ROWS,
62+
0x00, 0x00, 0x08, 0x6f);
9663

97-
mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_WRITE_MEMORY_START);
64+
mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx);
65+
mipi_dsi_msleep(&dsi_ctx, 70);
66+
mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_WRITE_MEMORY_START);
67+
mipi_dsi_dcs_set_display_on_multi(&dsi_ctx);
9868

99-
ret = mipi_dsi_dcs_set_display_on(dsi);
100-
if (ret < 0) {
101-
dev_err(dev, "Failed to turn display on: %d\n", ret);
102-
return ret;
103-
}
104-
105-
return 0;
69+
return dsi_ctx.accum_err;
10670
}
10771

108-
static int sony_td4353_jdi_off(struct sony_td4353_jdi *ctx)
72+
static void sony_td4353_jdi_off(struct sony_td4353_jdi *ctx)
10973
{
11074
struct mipi_dsi_device *dsi = ctx->dsi;
111-
struct device *dev = &dsi->dev;
112-
int ret;
75+
struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
11376

11477
dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
11578

116-
ret = mipi_dsi_dcs_set_display_off(dsi);
117-
if (ret < 0) {
118-
dev_err(dev, "Failed to set display off: %d\n", ret);
119-
return ret;
120-
}
121-
msleep(22);
122-
123-
ret = mipi_dsi_dcs_set_tear_off(dsi);
124-
if (ret < 0) {
125-
dev_err(dev, "Failed to set tear off: %d\n", ret);
126-
return ret;
127-
}
128-
129-
ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
130-
if (ret < 0) {
131-
dev_err(dev, "Failed to enter sleep mode: %d\n", ret);
132-
return ret;
133-
}
134-
msleep(80);
135-
136-
return 0;
79+
mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
80+
mipi_dsi_msleep(&dsi_ctx, 22);
81+
mipi_dsi_dcs_set_tear_off_multi(&dsi_ctx);
82+
mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
83+
mipi_dsi_msleep(&dsi_ctx, 80);
13784
}
13885

13986
static void sony_td4353_assert_reset_gpios(struct sony_td4353_jdi *ctx, int mode)
@@ -146,22 +93,18 @@ static void sony_td4353_assert_reset_gpios(struct sony_td4353_jdi *ctx, int mode
14693
static int sony_td4353_jdi_prepare(struct drm_panel *panel)
14794
{
14895
struct sony_td4353_jdi *ctx = to_sony_td4353_jdi(panel);
149-
struct device *dev = &ctx->dsi->dev;
15096
int ret;
15197

15298
ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies);
153-
if (ret < 0) {
154-
dev_err(dev, "Failed to enable regulators: %d\n", ret);
99+
if (ret < 0)
155100
return ret;
156-
}
157101

158102
msleep(100);
159103

160104
sony_td4353_assert_reset_gpios(ctx, 1);
161105

162106
ret = sony_td4353_jdi_on(ctx);
163107
if (ret < 0) {
164-
dev_err(dev, "Failed to power on panel: %d\n", ret);
165108
sony_td4353_assert_reset_gpios(ctx, 0);
166109
regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies);
167110
return ret;
@@ -173,12 +116,8 @@ static int sony_td4353_jdi_prepare(struct drm_panel *panel)
173116
static int sony_td4353_jdi_unprepare(struct drm_panel *panel)
174117
{
175118
struct sony_td4353_jdi *ctx = to_sony_td4353_jdi(panel);
176-
struct device *dev = &ctx->dsi->dev;
177-
int ret;
178119

179-
ret = sony_td4353_jdi_off(ctx);
180-
if (ret < 0)
181-
dev_err(dev, "Failed to power off panel: %d\n", ret);
120+
sony_td4353_jdi_off(ctx);
182121

183122
sony_td4353_assert_reset_gpios(ctx, 0);
184123
regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies);

include/drm/drm_mipi_dsi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,6 @@ int mipi_dsi_dcs_set_column_address(struct mipi_dsi_device *dsi, u16 start,
346346
u16 end);
347347
int mipi_dsi_dcs_set_page_address(struct mipi_dsi_device *dsi, u16 start,
348348
u16 end);
349-
int mipi_dsi_dcs_set_tear_off(struct mipi_dsi_device *dsi);
350349
int mipi_dsi_dcs_set_tear_on(struct mipi_dsi_device *dsi,
351350
enum mipi_dsi_dcs_tear_mode mode);
352351
int mipi_dsi_dcs_set_pixel_format(struct mipi_dsi_device *dsi, u8 format);
@@ -379,6 +378,7 @@ void mipi_dsi_dcs_set_page_address_multi(struct mipi_dsi_multi_context *ctx,
379378
u16 start, u16 end);
380379
void mipi_dsi_dcs_set_tear_scanline_multi(struct mipi_dsi_multi_context *ctx,
381380
u16 scanline);
381+
void mipi_dsi_dcs_set_tear_off_multi(struct mipi_dsi_multi_context *ctx);
382382

383383
/**
384384
* mipi_dsi_generic_write_seq - transmit data using a generic write packet

0 commit comments

Comments
 (0)