Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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 <tejasvipin76@gmail.com>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Link: https://lore.kernel.org/r/20250220045721.145905-1-tejasvipin76@gmail.com
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20250220045721.145905-1-tejasvipin76@gmail.com

authored by

Tejas Vipin and committed by
Neil Armstrong
fb13d349 4d098000

+47 -104
+23 -19
drivers/gpu/drm/drm_mipi_dsi.c
··· 1266 1266 EXPORT_SYMBOL(mipi_dsi_dcs_set_page_address); 1267 1267 1268 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 - 1287 - /** 1288 1269 * mipi_dsi_dcs_set_tear_on() - turn on the display module's Tearing Effect 1289 1270 * output signal on the TE signal line. 1290 1271 * @dsi: DSI peripheral device ··· 1693 1712 } 1694 1713 } 1695 1714 EXPORT_SYMBOL(mipi_dsi_turn_on_peripheral_multi); 1715 + 1716 + /** 1717 + * mipi_dsi_dcs_set_tear_off_multi() - turn off the display module's Tearing Effect 1718 + * output signal on the TE signal line 1719 + * @ctx: Context for multiple DSI transactions 1720 + */ 1721 + void mipi_dsi_dcs_set_tear_off_multi(struct mipi_dsi_multi_context *ctx) 1722 + { 1723 + struct mipi_dsi_device *dsi = ctx->dsi; 1724 + struct device *dev = &dsi->dev; 1725 + ssize_t err; 1726 + 1727 + if (ctx->accum_err) 1728 + return; 1729 + 1730 + err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_TEAR_OFF, NULL, 0); 1731 + if (err < 0) { 1732 + ctx->accum_err = err; 1733 + dev_err(dev, "Failed to set tear off: %d\n", 1734 + ctx->accum_err); 1735 + } 1736 + } 1737 + EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_off_multi); 1696 1738 1697 1739 /** 1698 1740 * mipi_dsi_dcs_soft_reset_multi() - perform a software reset of the display module
+23 -84
drivers/gpu/drm/panel/panel-sony-td4353-jdi.c
··· 47 47 static int sony_td4353_jdi_on(struct sony_td4353_jdi *ctx) 48 48 { 49 49 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 }; 52 51 53 52 dsi->mode_flags |= MIPI_DSI_MODE_LPM; 54 53 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 - } 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); 60 59 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 - } 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); 66 63 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 - } 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); 72 68 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 - } 78 - 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); 96 - 97 - mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_WRITE_MEMORY_START); 98 - 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; 106 70 } 107 71 108 - static int sony_td4353_jdi_off(struct sony_td4353_jdi *ctx) 72 + static void sony_td4353_jdi_off(struct sony_td4353_jdi *ctx) 109 73 { 110 74 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 }; 113 76 114 77 dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; 115 78 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); 137 84 } 138 85 139 86 static void sony_td4353_assert_reset_gpios(struct sony_td4353_jdi *ctx, int mode) ··· 93 146 static int sony_td4353_jdi_prepare(struct drm_panel *panel) 94 147 { 95 148 struct sony_td4353_jdi *ctx = to_sony_td4353_jdi(panel); 96 - struct device *dev = &ctx->dsi->dev; 97 149 int ret; 98 150 99 151 ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); 100 - if (ret < 0) { 101 - dev_err(dev, "Failed to enable regulators: %d\n", ret); 152 + if (ret < 0) 102 153 return ret; 103 - } 104 154 105 155 msleep(100); 106 156 ··· 105 161 106 162 ret = sony_td4353_jdi_on(ctx); 107 163 if (ret < 0) { 108 - dev_err(dev, "Failed to power on panel: %d\n", ret); 109 164 sony_td4353_assert_reset_gpios(ctx, 0); 110 165 regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); 111 166 return ret; ··· 116 173 static int sony_td4353_jdi_unprepare(struct drm_panel *panel) 117 174 { 118 175 struct sony_td4353_jdi *ctx = to_sony_td4353_jdi(panel); 119 - struct device *dev = &ctx->dsi->dev; 120 - int ret; 121 176 122 - ret = sony_td4353_jdi_off(ctx); 123 - if (ret < 0) 124 - dev_err(dev, "Failed to power off panel: %d\n", ret); 177 + sony_td4353_jdi_off(ctx); 125 178 126 179 sony_td4353_assert_reset_gpios(ctx, 0); 127 180 regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies);
+1 -1
include/drm/drm_mipi_dsi.h
··· 346 346 u16 end); 347 347 int mipi_dsi_dcs_set_page_address(struct mipi_dsi_device *dsi, u16 start, 348 348 u16 end); 349 - int mipi_dsi_dcs_set_tear_off(struct mipi_dsi_device *dsi); 350 349 int mipi_dsi_dcs_set_tear_on(struct mipi_dsi_device *dsi, 351 350 enum mipi_dsi_dcs_tear_mode mode); 352 351 int mipi_dsi_dcs_set_pixel_format(struct mipi_dsi_device *dsi, u8 format); ··· 378 379 u16 start, u16 end); 379 380 void mipi_dsi_dcs_set_tear_scanline_multi(struct mipi_dsi_multi_context *ctx, 380 381 u16 scanline); 382 + void mipi_dsi_dcs_set_tear_off_multi(struct mipi_dsi_multi_context *ctx); 381 383 382 384 /** 383 385 * mipi_dsi_generic_write_seq - transmit data using a generic write packet