* [PATCH v3 0/2] add more multi functions to streamline error handling
@ 2024-08-06 13:59 Tejas Vipin
2024-08-06 13:59 ` [PATCH v3 1/2] drm/mipi-dsi: add more multi functions for better " Tejas Vipin
2024-08-06 13:59 ` [PATCH v3 2/2] drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped functions Tejas Vipin
0 siblings, 2 replies; 9+ messages in thread
From: Tejas Vipin @ 2024-08-06 13:59 UTC (permalink / raw)
To: maarten.lankhorst, mripard, tzimmermann, neil.armstrong,
quic_jesszhan
Cc: dianders, airlied, daniel, dri-devel, linux-kernel, Tejas Vipin
This series adds more multi style functions and uses them in the
startek-kd070fhfid015 panel. Additionally it marks the older functions
as deprecated.
---
Changes in v3:
- Removed mipi_dsi_dcs_get_display_brightness_multi
- Unmarked mipi_dsi_dcs_get_display_brightness as deprecated
Changes in v2:
- Improved formatting
- Rewrote hex as lowercase
- Marked old functions as deprecated
- Added more functions to transition
v1: https://lore.kernel.org/all/20240628182428.171031-1-tejasvipin76@gmail.com/
v2: https://lore.kernel.org/all/20240730060659.455953-1-tejasvipin76@gmail.com/
---
Tejas Vipin (2):
drm/mipi-dsi: add more multi functions for better error handling
drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped
functions
drivers/gpu/drm/drm_mipi_dsi.c | 194 ++++++++++++++++++
.../drm/panel/panel-startek-kd070fhfid015.c | 115 ++++-------
include/drm/drm_mipi_dsi.h | 10 +
3 files changed, 239 insertions(+), 80 deletions(-)
--
2.46.0
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH v3 1/2] drm/mipi-dsi: add more multi functions for better error handling 2024-08-06 13:59 [PATCH v3 0/2] add more multi functions to streamline error handling Tejas Vipin @ 2024-08-06 13:59 ` Tejas Vipin 2024-08-07 22:53 ` Doug Anderson ` (2 more replies) 2024-08-06 13:59 ` [PATCH v3 2/2] drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped functions Tejas Vipin 1 sibling, 3 replies; 9+ messages in thread From: Tejas Vipin @ 2024-08-06 13:59 UTC (permalink / raw) To: maarten.lankhorst, mripard, tzimmermann, neil.armstrong, quic_jesszhan Cc: dianders, airlied, daniel, dri-devel, linux-kernel, Tejas Vipin Add more functions that can benefit from being multi style and mark older variants as deprecated to eventually convert all mipi_dsi functions to multi style. Acked-by: Maxime Ripard <mripard@kernel.org> Signed-off-by: Tejas Vipin <tejasvipin76@gmail.com> --- drivers/gpu/drm/drm_mipi_dsi.c | 194 +++++++++++++++++++++++++++++++++ include/drm/drm_mipi_dsi.h | 10 ++ 2 files changed, 204 insertions(+) diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index a471c46f5ca6..8d0a866cf1e0 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -603,6 +603,8 @@ EXPORT_SYMBOL(mipi_dsi_shutdown_peripheral); * mipi_dsi_turn_on_peripheral() - sends a Turn On Peripheral command * @dsi: DSI peripheral device * + * This function is deprecated. Use mipi_dsi_turn_on_peripheral_multi() instead. + * * Return: 0 on success or a negative error code on failure. */ int mipi_dsi_turn_on_peripheral(struct mipi_dsi_device *dsi) @@ -652,6 +654,7 @@ EXPORT_SYMBOL(mipi_dsi_set_maximum_return_packet_size); * @pps_selector: Select PPS from the table of pre-stored or uploaded PPS entries * * Enable or disable Display Stream Compression on the peripheral. + * This function is deprecated. Use mipi_dsi_compression_mode_ext_multi() instead. * * Return: 0 on success or a negative error code on failure. */ @@ -703,6 +706,7 @@ EXPORT_SYMBOL(mipi_dsi_compression_mode); * @pps: VESA DSC 1.1 Picture Parameter Set * * Transmit the VESA DSC 1.1 Picture Parameter Set to the peripheral. + * This function is deprecated. Use mipi_dsi_picture_parameter_set_multi() instead. * * Return: 0 on success or a negative error code on failure. */ @@ -1037,6 +1041,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_read); * mipi_dsi_dcs_nop() - send DCS nop packet * @dsi: DSI peripheral device * + * This function is deprecated. Use mipi_dsi_dcs_nop_multi() instead. + * * Return: 0 on success or a negative error code on failure. */ int mipi_dsi_dcs_nop(struct mipi_dsi_device *dsi) @@ -1055,6 +1061,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_nop); * mipi_dsi_dcs_soft_reset() - perform a software reset of the display module * @dsi: DSI peripheral device * + * This function is deprecated. Use mipi_dsi_dcs_soft_reset_multi() instead. + * * Return: 0 on success or a negative error code on failure. */ int mipi_dsi_dcs_soft_reset(struct mipi_dsi_device *dsi) @@ -1124,6 +1132,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_get_pixel_format); * display module except interface communication * @dsi: DSI peripheral device * + * This function is deprecated. Use mipi_dsi_dcs_enter_sleep_mode_multi() instead. + * * Return: 0 on success or a negative error code on failure. */ int mipi_dsi_dcs_enter_sleep_mode(struct mipi_dsi_device *dsi) @@ -1143,6 +1153,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_enter_sleep_mode); * module * @dsi: DSI peripheral device * + * This function is deprecated. Use mipi_dsi_dcs_exit_sleep_mode_multi() instead. + * * Return: 0 on success or a negative error code on failure. */ int mipi_dsi_dcs_exit_sleep_mode(struct mipi_dsi_device *dsi) @@ -1162,6 +1174,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_exit_sleep_mode); * display device * @dsi: DSI peripheral device * + * This function is deprecated. Use mipi_dsi_dcs_set_display_off_multi() instead. + * * Return: 0 on success or a negative error code on failure. */ int mipi_dsi_dcs_set_display_off(struct mipi_dsi_device *dsi) @@ -1181,6 +1195,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_display_off); * display device * @dsi: DSI peripheral device * + * This function is deprecated. Use mipi_dsi_dcs_set_display_on_multi() instead. + * * Return: 0 on success or a negative error code on failure */ int mipi_dsi_dcs_set_display_on(struct mipi_dsi_device *dsi) @@ -1202,6 +1218,9 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_display_on); * @start: first column of frame memory * @end: last column of frame memory * + * This function is deprecated. Use mipi_dsi_dcs_set_column_address_multi() + * instead. + * * Return: 0 on success or a negative error code on failure. */ int mipi_dsi_dcs_set_column_address(struct mipi_dsi_device *dsi, u16 start, @@ -1226,6 +1245,9 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_column_address); * @start: first page of frame memory * @end: last page of frame memory * + * This function is deprecated. Use mipi_dsi_dcs_set_page_address_multi() + * instead. + * * Return: 0 on success or a negative error code on failure. */ int mipi_dsi_dcs_set_page_address(struct mipi_dsi_device *dsi, u16 start, @@ -1268,6 +1290,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_off); * @dsi: DSI peripheral device * @mode: the Tearing Effect Output Line mode * + * This function is deprecated. Use mipi_dsi_dcs_set_tear_on_multi() instead. + * * Return: 0 on success or a negative error code on failure */ int mipi_dsi_dcs_set_tear_on(struct mipi_dsi_device *dsi, @@ -1291,6 +1315,9 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_on); * @dsi: DSI peripheral device * @format: pixel format * + * This function is deprecated. Use mipi_dsi_dcs_set_pixel_format_multi() + * instead. + * * Return: 0 on success or a negative error code on failure. */ int mipi_dsi_dcs_set_pixel_format(struct mipi_dsi_device *dsi, u8 format) @@ -1334,6 +1361,9 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_scanline); * @dsi: DSI peripheral device * @brightness: brightness value * + * This function is deprecated. Use mipi_dsi_dcs_set_display_brightness_multi() + * instead. + * * Return: 0 on success or a negative error code on failure. */ int mipi_dsi_dcs_set_display_brightness(struct mipi_dsi_device *dsi, @@ -1639,6 +1669,170 @@ void mipi_dsi_dcs_set_tear_on_multi(struct mipi_dsi_multi_context *ctx, } EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_on_multi); +/** + * mipi_dsi_turn_on_peripheral_multi() - sends a Turn On Peripheral command + * @ctx: Context for multiple DSI transactions + * + * Like mipi_dsi_turn_on_peripheral() but deals with errors in a way that + * makes it convenient to make several calls in a row. + */ +void mipi_dsi_turn_on_peripheral_multi(struct mipi_dsi_multi_context *ctx) +{ + struct mipi_dsi_device *dsi = ctx->dsi; + struct device *dev = &dsi->dev; + int ret; + + if (ctx->accum_err) + return; + + ret = mipi_dsi_turn_on_peripheral(dsi); + if (ret < 0) { + ctx->accum_err = ret; + dev_err(dev, "Failed to turn on peripheral: %d\n", + ctx->accum_err); + } +} +EXPORT_SYMBOL(mipi_dsi_turn_on_peripheral_multi); + +/** + * mipi_dsi_dcs_soft_reset_multi() - perform a software reset of the display module + * @ctx: Context for multiple DSI transactions + * + * Like mipi_dsi_dcs_soft_reset() but deals with errors in a way that + * makes it convenient to make several calls in a row. + */ +void mipi_dsi_dcs_soft_reset_multi(struct mipi_dsi_multi_context *ctx) +{ + struct mipi_dsi_device *dsi = ctx->dsi; + struct device *dev = &dsi->dev; + int ret; + + if (ctx->accum_err) + return; + + ret = mipi_dsi_dcs_soft_reset(dsi); + if (ret < 0) { + ctx->accum_err = ret; + dev_err(dev, "Failed to mipi_dsi_dcs_soft_reset: %d\n", + ctx->accum_err); + } +} +EXPORT_SYMBOL(mipi_dsi_dcs_soft_reset_multi); + +/** + * mipi_dsi_dcs_set_display_brightness_multi() - sets the brightness value of + * the display + * @ctx: Context for multiple DSI transactions + * @brightness: brightness value + * + * Like mipi_dsi_dcs_set_display_brightness() but deals with errors in a way that + * makes it convenient to make several calls in a row. + */ +void mipi_dsi_dcs_set_display_brightness_multi(struct mipi_dsi_multi_context *ctx, + u16 brightness) +{ + struct mipi_dsi_device *dsi = ctx->dsi; + struct device *dev = &dsi->dev; + int ret; + + if (ctx->accum_err) + return; + + ret = mipi_dsi_dcs_set_display_brightness(dsi, brightness); + if (ret < 0) { + ctx->accum_err = ret; + dev_err(dev, "Failed to write display brightness: %d\n", + ctx->accum_err); + } +} +EXPORT_SYMBOL(mipi_dsi_dcs_set_display_brightness_multi); + +/** + * mipi_dsi_dcs_set_pixel_format_multi() - sets the pixel format for the RGB image + * data used by the interface + * @ctx: Context for multiple DSI transactions + * @format: pixel format + * + * Like mipi_dsi_dcs_set_pixel_format() but deals with errors in a way that + * makes it convenient to make several calls in a row. + */ +void mipi_dsi_dcs_set_pixel_format_multi(struct mipi_dsi_multi_context *ctx, + u8 format) +{ + struct mipi_dsi_device *dsi = ctx->dsi; + struct device *dev = &dsi->dev; + int ret; + + if (ctx->accum_err) + return; + + ret = mipi_dsi_dcs_set_pixel_format(dsi, format); + if (ret < 0) { + ctx->accum_err = ret; + dev_err(dev, "Failed to set pixel format: %d\n", + ctx->accum_err); + } +} +EXPORT_SYMBOL(mipi_dsi_dcs_set_pixel_format_multi); + +/** + * mipi_dsi_dcs_set_column_address_multi() - define the column extent of the + * frame memory accessed by the host processor + * @ctx: Context for multiple DSI transactions + * @start: first column of frame memory + * @end: last column of frame memory + * + * Like mipi_dsi_dcs_set_column_address() but deals with errors in a way that + * makes it convenient to make several calls in a row. + */ +void mipi_dsi_dcs_set_column_address_multi(struct mipi_dsi_multi_context *ctx, + u16 start, u16 end) +{ + struct mipi_dsi_device *dsi = ctx->dsi; + struct device *dev = &dsi->dev; + int ret; + + if (ctx->accum_err) + return; + + ret = mipi_dsi_dcs_set_column_address(dsi, start, end); + if (ret < 0) { + ctx->accum_err = ret; + dev_err(dev, "Failed to set column address: %d\n", + ctx->accum_err); + } +} +EXPORT_SYMBOL(mipi_dsi_dcs_set_column_address_multi); + +/** + * mipi_dsi_dcs_set_page_address_multi() - define the page extent of the + * frame memory accessed by the host processor + * @ctx: Context for multiple DSI transactions + * @start: first page of frame memory + * @end: last page of frame memory + * + * Like mipi_dsi_dcs_set_page_address() but deals with errors in a way that + * makes it convenient to make several calls in a row. + */ +void mipi_dsi_dcs_set_page_address_multi(struct mipi_dsi_multi_context *ctx, + u16 start, u16 end) +{ + struct mipi_dsi_device *dsi = ctx->dsi; + struct device *dev = &dsi->dev; + int ret; + + if (ctx->accum_err) + return; + + ret = mipi_dsi_dcs_set_page_address(dsi, start, end); + if (ret < 0) { + ctx->accum_err = ret; + dev_err(dev, "Failed to set page address: %d\n", + ctx->accum_err); + } +} +EXPORT_SYMBOL(mipi_dsi_dcs_set_page_address_multi); + static int mipi_dsi_drv_probe(struct device *dev) { struct mipi_dsi_driver *drv = to_mipi_dsi_driver(dev->driver); diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h index 0f520eeeaa8e..602be6ce081a 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -365,6 +365,16 @@ void mipi_dsi_dcs_set_display_off_multi(struct mipi_dsi_multi_context *ctx); void mipi_dsi_dcs_set_display_on_multi(struct mipi_dsi_multi_context *ctx); void mipi_dsi_dcs_set_tear_on_multi(struct mipi_dsi_multi_context *ctx, enum mipi_dsi_dcs_tear_mode mode); +void mipi_dsi_turn_on_peripheral_multi(struct mipi_dsi_multi_context *ctx); +void mipi_dsi_dcs_soft_reset_multi(struct mipi_dsi_multi_context *ctx); +void mipi_dsi_dcs_set_display_brightness_multi(struct mipi_dsi_multi_context *ctx, + u16 brightness); +void mipi_dsi_dcs_set_pixel_format_multi(struct mipi_dsi_multi_context *ctx, + u8 format); +void mipi_dsi_dcs_set_column_address_multi(struct mipi_dsi_multi_context *ctx, + u16 start, u16 end); +void mipi_dsi_dcs_set_page_address_multi(struct mipi_dsi_multi_context *ctx, + u16 start, u16 end); /** * mipi_dsi_generic_write_seq - transmit data using a generic write packet -- 2.46.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/2] drm/mipi-dsi: add more multi functions for better error handling 2024-08-06 13:59 ` [PATCH v3 1/2] drm/mipi-dsi: add more multi functions for better " Tejas Vipin @ 2024-08-07 22:53 ` Doug Anderson 2024-08-08 21:19 ` Jessica Zhang 2024-08-13 18:16 ` Doug Anderson 2 siblings, 0 replies; 9+ messages in thread From: Doug Anderson @ 2024-08-07 22:53 UTC (permalink / raw) To: Tejas Vipin Cc: maarten.lankhorst, mripard, tzimmermann, neil.armstrong, quic_jesszhan, airlied, daniel, dri-devel, linux-kernel Hi, On Tue, Aug 6, 2024 at 7:00 AM Tejas Vipin <tejasvipin76@gmail.com> wrote: > > Add more functions that can benefit from being multi style and mark > older variants as deprecated to eventually convert all mipi_dsi functions > to multi style. > > Acked-by: Maxime Ripard <mripard@kernel.org> > Signed-off-by: Tejas Vipin <tejasvipin76@gmail.com> > --- > drivers/gpu/drm/drm_mipi_dsi.c | 194 +++++++++++++++++++++++++++++++++ > include/drm/drm_mipi_dsi.h | 10 ++ > 2 files changed, 204 insertions(+) Reviewed-by: Douglas Anderson <dianders@chromium.org> If nobody else has any comments, I'll plan to apply this midway through next week. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/2] drm/mipi-dsi: add more multi functions for better error handling 2024-08-06 13:59 ` [PATCH v3 1/2] drm/mipi-dsi: add more multi functions for better " Tejas Vipin 2024-08-07 22:53 ` Doug Anderson @ 2024-08-08 21:19 ` Jessica Zhang 2024-08-13 18:16 ` Doug Anderson 2 siblings, 0 replies; 9+ messages in thread From: Jessica Zhang @ 2024-08-08 21:19 UTC (permalink / raw) To: dri-devel On 8/6/2024 6:59 AM, Tejas Vipin wrote: > Add more functions that can benefit from being multi style and mark > older variants as deprecated to eventually convert all mipi_dsi functions > to multi style. > > Acked-by: Maxime Ripard <mripard@kernel.org> > Signed-off-by: Tejas Vipin <tejasvipin76@gmail.com> Acked-by: Jessica Zhang <quic_jesszhan@quicinc.com> > --- > drivers/gpu/drm/drm_mipi_dsi.c | 194 +++++++++++++++++++++++++++++++++ > include/drm/drm_mipi_dsi.h | 10 ++ > 2 files changed, 204 insertions(+) > > diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c > index a471c46f5ca6..8d0a866cf1e0 100644 > --- a/drivers/gpu/drm/drm_mipi_dsi.c > +++ b/drivers/gpu/drm/drm_mipi_dsi.c > @@ -603,6 +603,8 @@ EXPORT_SYMBOL(mipi_dsi_shutdown_peripheral); > * mipi_dsi_turn_on_peripheral() - sends a Turn On Peripheral command > * @dsi: DSI peripheral device > * > + * This function is deprecated. Use mipi_dsi_turn_on_peripheral_multi() instead. > + * > * Return: 0 on success or a negative error code on failure. > */ > int mipi_dsi_turn_on_peripheral(struct mipi_dsi_device *dsi) > @@ -652,6 +654,7 @@ EXPORT_SYMBOL(mipi_dsi_set_maximum_return_packet_size); > * @pps_selector: Select PPS from the table of pre-stored or uploaded PPS entries > * > * Enable or disable Display Stream Compression on the peripheral. > + * This function is deprecated. Use mipi_dsi_compression_mode_ext_multi() instead. > * > * Return: 0 on success or a negative error code on failure. > */ > @@ -703,6 +706,7 @@ EXPORT_SYMBOL(mipi_dsi_compression_mode); > * @pps: VESA DSC 1.1 Picture Parameter Set > * > * Transmit the VESA DSC 1.1 Picture Parameter Set to the peripheral. > + * This function is deprecated. Use mipi_dsi_picture_parameter_set_multi() instead. > * > * Return: 0 on success or a negative error code on failure. > */ > @@ -1037,6 +1041,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_read); > * mipi_dsi_dcs_nop() - send DCS nop packet > * @dsi: DSI peripheral device > * > + * This function is deprecated. Use mipi_dsi_dcs_nop_multi() instead. > + * > * Return: 0 on success or a negative error code on failure. > */ > int mipi_dsi_dcs_nop(struct mipi_dsi_device *dsi) > @@ -1055,6 +1061,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_nop); > * mipi_dsi_dcs_soft_reset() - perform a software reset of the display module > * @dsi: DSI peripheral device > * > + * This function is deprecated. Use mipi_dsi_dcs_soft_reset_multi() instead. > + * > * Return: 0 on success or a negative error code on failure. > */ > int mipi_dsi_dcs_soft_reset(struct mipi_dsi_device *dsi) > @@ -1124,6 +1132,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_get_pixel_format); > * display module except interface communication > * @dsi: DSI peripheral device > * > + * This function is deprecated. Use mipi_dsi_dcs_enter_sleep_mode_multi() instead. > + * > * Return: 0 on success or a negative error code on failure. > */ > int mipi_dsi_dcs_enter_sleep_mode(struct mipi_dsi_device *dsi) > @@ -1143,6 +1153,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_enter_sleep_mode); > * module > * @dsi: DSI peripheral device > * > + * This function is deprecated. Use mipi_dsi_dcs_exit_sleep_mode_multi() instead. > + * > * Return: 0 on success or a negative error code on failure. > */ > int mipi_dsi_dcs_exit_sleep_mode(struct mipi_dsi_device *dsi) > @@ -1162,6 +1174,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_exit_sleep_mode); > * display device > * @dsi: DSI peripheral device > * > + * This function is deprecated. Use mipi_dsi_dcs_set_display_off_multi() instead. > + * > * Return: 0 on success or a negative error code on failure. > */ > int mipi_dsi_dcs_set_display_off(struct mipi_dsi_device *dsi) > @@ -1181,6 +1195,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_display_off); > * display device > * @dsi: DSI peripheral device > * > + * This function is deprecated. Use mipi_dsi_dcs_set_display_on_multi() instead. > + * > * Return: 0 on success or a negative error code on failure > */ > int mipi_dsi_dcs_set_display_on(struct mipi_dsi_device *dsi) > @@ -1202,6 +1218,9 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_display_on); > * @start: first column of frame memory > * @end: last column of frame memory > * > + * This function is deprecated. Use mipi_dsi_dcs_set_column_address_multi() > + * instead. > + * > * Return: 0 on success or a negative error code on failure. > */ > int mipi_dsi_dcs_set_column_address(struct mipi_dsi_device *dsi, u16 start, > @@ -1226,6 +1245,9 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_column_address); > * @start: first page of frame memory > * @end: last page of frame memory > * > + * This function is deprecated. Use mipi_dsi_dcs_set_page_address_multi() > + * instead. > + * > * Return: 0 on success or a negative error code on failure. > */ > int mipi_dsi_dcs_set_page_address(struct mipi_dsi_device *dsi, u16 start, > @@ -1268,6 +1290,8 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_off); > * @dsi: DSI peripheral device > * @mode: the Tearing Effect Output Line mode > * > + * This function is deprecated. Use mipi_dsi_dcs_set_tear_on_multi() instead. > + * > * Return: 0 on success or a negative error code on failure > */ > int mipi_dsi_dcs_set_tear_on(struct mipi_dsi_device *dsi, > @@ -1291,6 +1315,9 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_on); > * @dsi: DSI peripheral device > * @format: pixel format > * > + * This function is deprecated. Use mipi_dsi_dcs_set_pixel_format_multi() > + * instead. > + * > * Return: 0 on success or a negative error code on failure. > */ > int mipi_dsi_dcs_set_pixel_format(struct mipi_dsi_device *dsi, u8 format) > @@ -1334,6 +1361,9 @@ EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_scanline); > * @dsi: DSI peripheral device > * @brightness: brightness value > * > + * This function is deprecated. Use mipi_dsi_dcs_set_display_brightness_multi() > + * instead. > + * > * Return: 0 on success or a negative error code on failure. > */ > int mipi_dsi_dcs_set_display_brightness(struct mipi_dsi_device *dsi, > @@ -1639,6 +1669,170 @@ void mipi_dsi_dcs_set_tear_on_multi(struct mipi_dsi_multi_context *ctx, > } > EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_on_multi); > > +/** > + * mipi_dsi_turn_on_peripheral_multi() - sends a Turn On Peripheral command > + * @ctx: Context for multiple DSI transactions > + * > + * Like mipi_dsi_turn_on_peripheral() but deals with errors in a way that > + * makes it convenient to make several calls in a row. > + */ > +void mipi_dsi_turn_on_peripheral_multi(struct mipi_dsi_multi_context *ctx) > +{ > + struct mipi_dsi_device *dsi = ctx->dsi; > + struct device *dev = &dsi->dev; > + int ret; > + > + if (ctx->accum_err) > + return; > + > + ret = mipi_dsi_turn_on_peripheral(dsi); > + if (ret < 0) { > + ctx->accum_err = ret; > + dev_err(dev, "Failed to turn on peripheral: %d\n", > + ctx->accum_err); > + } > +} > +EXPORT_SYMBOL(mipi_dsi_turn_on_peripheral_multi); > + > +/** > + * mipi_dsi_dcs_soft_reset_multi() - perform a software reset of the display module > + * @ctx: Context for multiple DSI transactions > + * > + * Like mipi_dsi_dcs_soft_reset() but deals with errors in a way that > + * makes it convenient to make several calls in a row. > + */ > +void mipi_dsi_dcs_soft_reset_multi(struct mipi_dsi_multi_context *ctx) > +{ > + struct mipi_dsi_device *dsi = ctx->dsi; > + struct device *dev = &dsi->dev; > + int ret; > + > + if (ctx->accum_err) > + return; > + > + ret = mipi_dsi_dcs_soft_reset(dsi); > + if (ret < 0) { > + ctx->accum_err = ret; > + dev_err(dev, "Failed to mipi_dsi_dcs_soft_reset: %d\n", > + ctx->accum_err); > + } > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_soft_reset_multi); > + > +/** > + * mipi_dsi_dcs_set_display_brightness_multi() - sets the brightness value of > + * the display > + * @ctx: Context for multiple DSI transactions > + * @brightness: brightness value > + * > + * Like mipi_dsi_dcs_set_display_brightness() but deals with errors in a way that > + * makes it convenient to make several calls in a row. > + */ > +void mipi_dsi_dcs_set_display_brightness_multi(struct mipi_dsi_multi_context *ctx, > + u16 brightness) > +{ > + struct mipi_dsi_device *dsi = ctx->dsi; > + struct device *dev = &dsi->dev; > + int ret; > + > + if (ctx->accum_err) > + return; > + > + ret = mipi_dsi_dcs_set_display_brightness(dsi, brightness); > + if (ret < 0) { > + ctx->accum_err = ret; > + dev_err(dev, "Failed to write display brightness: %d\n", > + ctx->accum_err); > + } > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_set_display_brightness_multi); > + > +/** > + * mipi_dsi_dcs_set_pixel_format_multi() - sets the pixel format for the RGB image > + * data used by the interface > + * @ctx: Context for multiple DSI transactions > + * @format: pixel format > + * > + * Like mipi_dsi_dcs_set_pixel_format() but deals with errors in a way that > + * makes it convenient to make several calls in a row. > + */ > +void mipi_dsi_dcs_set_pixel_format_multi(struct mipi_dsi_multi_context *ctx, > + u8 format) > +{ > + struct mipi_dsi_device *dsi = ctx->dsi; > + struct device *dev = &dsi->dev; > + int ret; > + > + if (ctx->accum_err) > + return; > + > + ret = mipi_dsi_dcs_set_pixel_format(dsi, format); > + if (ret < 0) { > + ctx->accum_err = ret; > + dev_err(dev, "Failed to set pixel format: %d\n", > + ctx->accum_err); > + } > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_set_pixel_format_multi); > + > +/** > + * mipi_dsi_dcs_set_column_address_multi() - define the column extent of the > + * frame memory accessed by the host processor > + * @ctx: Context for multiple DSI transactions > + * @start: first column of frame memory > + * @end: last column of frame memory > + * > + * Like mipi_dsi_dcs_set_column_address() but deals with errors in a way that > + * makes it convenient to make several calls in a row. > + */ > +void mipi_dsi_dcs_set_column_address_multi(struct mipi_dsi_multi_context *ctx, > + u16 start, u16 end) > +{ > + struct mipi_dsi_device *dsi = ctx->dsi; > + struct device *dev = &dsi->dev; > + int ret; > + > + if (ctx->accum_err) > + return; > + > + ret = mipi_dsi_dcs_set_column_address(dsi, start, end); > + if (ret < 0) { > + ctx->accum_err = ret; > + dev_err(dev, "Failed to set column address: %d\n", > + ctx->accum_err); > + } > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_set_column_address_multi); > + > +/** > + * mipi_dsi_dcs_set_page_address_multi() - define the page extent of the > + * frame memory accessed by the host processor > + * @ctx: Context for multiple DSI transactions > + * @start: first page of frame memory > + * @end: last page of frame memory > + * > + * Like mipi_dsi_dcs_set_page_address() but deals with errors in a way that > + * makes it convenient to make several calls in a row. > + */ > +void mipi_dsi_dcs_set_page_address_multi(struct mipi_dsi_multi_context *ctx, > + u16 start, u16 end) > +{ > + struct mipi_dsi_device *dsi = ctx->dsi; > + struct device *dev = &dsi->dev; > + int ret; > + > + if (ctx->accum_err) > + return; > + > + ret = mipi_dsi_dcs_set_page_address(dsi, start, end); > + if (ret < 0) { > + ctx->accum_err = ret; > + dev_err(dev, "Failed to set page address: %d\n", > + ctx->accum_err); > + } > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_set_page_address_multi); > + > static int mipi_dsi_drv_probe(struct device *dev) > { > struct mipi_dsi_driver *drv = to_mipi_dsi_driver(dev->driver); > diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h > index 0f520eeeaa8e..602be6ce081a 100644 > --- a/include/drm/drm_mipi_dsi.h > +++ b/include/drm/drm_mipi_dsi.h > @@ -365,6 +365,16 @@ void mipi_dsi_dcs_set_display_off_multi(struct mipi_dsi_multi_context *ctx); > void mipi_dsi_dcs_set_display_on_multi(struct mipi_dsi_multi_context *ctx); > void mipi_dsi_dcs_set_tear_on_multi(struct mipi_dsi_multi_context *ctx, > enum mipi_dsi_dcs_tear_mode mode); > +void mipi_dsi_turn_on_peripheral_multi(struct mipi_dsi_multi_context *ctx); > +void mipi_dsi_dcs_soft_reset_multi(struct mipi_dsi_multi_context *ctx); > +void mipi_dsi_dcs_set_display_brightness_multi(struct mipi_dsi_multi_context *ctx, > + u16 brightness); > +void mipi_dsi_dcs_set_pixel_format_multi(struct mipi_dsi_multi_context *ctx, > + u8 format); > +void mipi_dsi_dcs_set_column_address_multi(struct mipi_dsi_multi_context *ctx, > + u16 start, u16 end); > +void mipi_dsi_dcs_set_page_address_multi(struct mipi_dsi_multi_context *ctx, > + u16 start, u16 end); > > /** > * mipi_dsi_generic_write_seq - transmit data using a generic write packet > -- > 2.46.0 > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/2] drm/mipi-dsi: add more multi functions for better error handling 2024-08-06 13:59 ` [PATCH v3 1/2] drm/mipi-dsi: add more multi functions for better " Tejas Vipin 2024-08-07 22:53 ` Doug Anderson 2024-08-08 21:19 ` Jessica Zhang @ 2024-08-13 18:16 ` Doug Anderson 2 siblings, 0 replies; 9+ messages in thread From: Doug Anderson @ 2024-08-13 18:16 UTC (permalink / raw) To: Tejas Vipin Cc: maarten.lankhorst, mripard, tzimmermann, neil.armstrong, quic_jesszhan, airlied, daniel, dri-devel, linux-kernel Hi, On Tue, Aug 6, 2024 at 7:00 AM Tejas Vipin <tejasvipin76@gmail.com> wrote: > > Add more functions that can benefit from being multi style and mark > older variants as deprecated to eventually convert all mipi_dsi functions > to multi style. > > Acked-by: Maxime Ripard <mripard@kernel.org> > Signed-off-by: Tejas Vipin <tejasvipin76@gmail.com> > --- > drivers/gpu/drm/drm_mipi_dsi.c | 194 +++++++++++++++++++++++++++++++++ > include/drm/drm_mipi_dsi.h | 10 ++ > 2 files changed, 204 insertions(+) Pushed to drm-misc-next: [1/2] drm/mipi-dsi: add more multi functions for better error handling commit: 5ddb0a8aa8e4754a8fb77e284e0d6f46c2350f88 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 2/2] drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped functions 2024-08-06 13:59 [PATCH v3 0/2] add more multi functions to streamline error handling Tejas Vipin 2024-08-06 13:59 ` [PATCH v3 1/2] drm/mipi-dsi: add more multi functions for better " Tejas Vipin @ 2024-08-06 13:59 ` Tejas Vipin 2024-08-07 22:54 ` Doug Anderson ` (2 more replies) 1 sibling, 3 replies; 9+ messages in thread From: Tejas Vipin @ 2024-08-06 13:59 UTC (permalink / raw) To: maarten.lankhorst, mripard, tzimmermann, neil.armstrong, quic_jesszhan Cc: dianders, airlied, daniel, dri-devel, linux-kernel, Tejas Vipin Use multi style wrapped functions for mipi_dsi in the startek-kd070fhfid015 panel. Signed-off-by: Tejas Vipin <tejasvipin76@gmail.com> --- .../drm/panel/panel-startek-kd070fhfid015.c | 115 ++++++------------ 1 file changed, 35 insertions(+), 80 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-startek-kd070fhfid015.c b/drivers/gpu/drm/panel/panel-startek-kd070fhfid015.c index 0156689f41cd..c0c95355b743 100644 --- a/drivers/gpu/drm/panel/panel-startek-kd070fhfid015.c +++ b/drivers/gpu/drm/panel/panel-startek-kd070fhfid015.c @@ -24,10 +24,10 @@ #include <drm/drm_modes.h> #include <drm/drm_panel.h> -#define DSI_REG_MCAP 0xB0 -#define DSI_REG_IS 0xB3 /* Interface Setting */ -#define DSI_REG_IIS 0xB4 /* Interface ID Setting */ -#define DSI_REG_CTRL 0xB6 +#define DSI_REG_MCAP 0xb0 +#define DSI_REG_IS 0xb3 /* Interface Setting */ +#define DSI_REG_IIS 0xb4 /* Interface ID Setting */ +#define DSI_REG_CTRL 0xb6 enum { IOVCC = 0, @@ -52,92 +52,55 @@ static inline struct stk_panel *to_stk_panel(struct drm_panel *panel) static int stk_panel_init(struct stk_panel *stk) { struct mipi_dsi_device *dsi = stk->dsi; - struct device *dev = &stk->dsi->dev; - int ret; - - ret = mipi_dsi_dcs_soft_reset(dsi); - if (ret < 0) { - dev_err(dev, "failed to mipi_dsi_dcs_soft_reset: %d\n", ret); - return ret; - } - mdelay(5); + struct mipi_dsi_multi_context dsi_ctx = {.dsi = dsi}; - ret = mipi_dsi_dcs_exit_sleep_mode(dsi); - if (ret < 0) { - dev_err(dev, "failed to set exit sleep mode: %d\n", ret); - return ret; - } - msleep(120); + mipi_dsi_dcs_soft_reset_multi(&dsi_ctx); + mipi_dsi_msleep(&dsi_ctx, 5); + mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx); + mipi_dsi_msleep(&dsi_ctx, 120); - mipi_dsi_generic_write_seq(dsi, DSI_REG_MCAP, 0x04); + mipi_dsi_generic_write_seq_multi(&dsi_ctx, DSI_REG_MCAP, 0x04); /* Interface setting, video mode */ - mipi_dsi_generic_write_seq(dsi, DSI_REG_IS, 0x14, 0x08, 0x00, 0x22, 0x00); - mipi_dsi_generic_write_seq(dsi, DSI_REG_IIS, 0x0C, 0x00); - mipi_dsi_generic_write_seq(dsi, DSI_REG_CTRL, 0x3A, 0xD3); + mipi_dsi_generic_write_seq_multi(&dsi_ctx, DSI_REG_IS, 0x14, 0x08, 0x00, 0x22, 0x00); + mipi_dsi_generic_write_seq_multi(&dsi_ctx, DSI_REG_IIS, 0x0c, 0x00); + mipi_dsi_generic_write_seq_multi(&dsi_ctx, DSI_REG_CTRL, 0x3a, 0xd3); - ret = mipi_dsi_dcs_set_display_brightness(dsi, 0x77); - if (ret < 0) { - dev_err(dev, "failed to write display brightness: %d\n", ret); - return ret; - } + mipi_dsi_dcs_set_display_brightness_multi(&dsi_ctx, 0x77); - mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_WRITE_CONTROL_DISPLAY, - MIPI_DCS_WRITE_MEMORY_START); + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_WRITE_CONTROL_DISPLAY, + MIPI_DCS_WRITE_MEMORY_START); - ret = mipi_dsi_dcs_set_pixel_format(dsi, 0x77); - if (ret < 0) { - dev_err(dev, "failed to set pixel format: %d\n", ret); - return ret; - } + mipi_dsi_dcs_set_pixel_format_multi(&dsi_ctx, 0x77); + mipi_dsi_dcs_set_column_address_multi(&dsi_ctx, 0, stk->mode->hdisplay - 1); + mipi_dsi_dcs_set_page_address_multi(&dsi_ctx, 0, stk->mode->vdisplay - 1); - ret = mipi_dsi_dcs_set_column_address(dsi, 0, stk->mode->hdisplay - 1); - if (ret < 0) { - dev_err(dev, "failed to set column address: %d\n", ret); - return ret; - } - - ret = mipi_dsi_dcs_set_page_address(dsi, 0, stk->mode->vdisplay - 1); - if (ret < 0) { - dev_err(dev, "failed to set page address: %d\n", ret); - return ret; - } - - return 0; + return dsi_ctx.accum_err; } static int stk_panel_on(struct stk_panel *stk) { struct mipi_dsi_device *dsi = stk->dsi; - struct device *dev = &stk->dsi->dev; - int ret; + struct mipi_dsi_multi_context dsi_ctx = {.dsi = dsi}; - ret = mipi_dsi_dcs_set_display_on(dsi); - if (ret < 0) - dev_err(dev, "failed to set display on: %d\n", ret); + mipi_dsi_dcs_set_display_on_multi(&dsi_ctx); - mdelay(20); + mipi_dsi_msleep(&dsi_ctx, 20); - return ret; + return dsi_ctx.accum_err; } static void stk_panel_off(struct stk_panel *stk) { struct mipi_dsi_device *dsi = stk->dsi; - struct device *dev = &stk->dsi->dev; - int ret; + struct mipi_dsi_multi_context dsi_ctx = {.dsi = dsi}; dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; - ret = mipi_dsi_dcs_set_display_off(dsi); - if (ret < 0) - dev_err(dev, "failed to set display off: %d\n", ret); + mipi_dsi_dcs_set_display_off_multi(&dsi_ctx); + mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx); - ret = mipi_dsi_dcs_enter_sleep_mode(dsi); - if (ret < 0) - dev_err(dev, "failed to enter sleep mode: %d\n", ret); - - msleep(100); + mipi_dsi_msleep(&dsi_ctx, 100); } static int stk_panel_unprepare(struct drm_panel *panel) @@ -155,7 +118,6 @@ static int stk_panel_unprepare(struct drm_panel *panel) static int stk_panel_prepare(struct drm_panel *panel) { struct stk_panel *stk = to_stk_panel(panel); - struct device *dev = &stk->dsi->dev; int ret; gpiod_set_value(stk->reset_gpio, 0); @@ -175,16 +137,12 @@ static int stk_panel_prepare(struct drm_panel *panel) gpiod_set_value(stk->reset_gpio, 1); mdelay(10); ret = stk_panel_init(stk); - if (ret < 0) { - dev_err(dev, "failed to init panel: %d\n", ret); + if (ret < 0) goto poweroff; - } ret = stk_panel_on(stk); - if (ret < 0) { - dev_err(dev, "failed to set panel on: %d\n", ret); + if (ret < 0) goto poweroff; - } return 0; @@ -250,18 +208,15 @@ static int dsi_dcs_bl_get_brightness(struct backlight_device *bl) static int dsi_dcs_bl_update_status(struct backlight_device *bl) { struct mipi_dsi_device *dsi = bl_get_data(bl); - struct device *dev = &dsi->dev; - int ret; + struct mipi_dsi_multi_context dsi_ctx = {.dsi = dsi}; dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; - ret = mipi_dsi_dcs_set_display_brightness(dsi, bl->props.brightness); - if (ret < 0) { - dev_err(dev, "failed to set DSI control: %d\n", ret); - return ret; - } + mipi_dsi_dcs_set_display_brightness_multi(&dsi_ctx, bl->props.brightness); + if (dsi_ctx.accum_err) + return dsi_ctx.accum_err; dsi->mode_flags |= MIPI_DSI_MODE_LPM; - return 0; + return dsi_ctx.accum_err; } static const struct backlight_ops dsi_bl_ops = { -- 2.46.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/2] drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped functions 2024-08-06 13:59 ` [PATCH v3 2/2] drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped functions Tejas Vipin @ 2024-08-07 22:54 ` Doug Anderson 2024-08-08 21:02 ` Jessica Zhang 2024-08-13 18:16 ` Doug Anderson 2 siblings, 0 replies; 9+ messages in thread From: Doug Anderson @ 2024-08-07 22:54 UTC (permalink / raw) To: Tejas Vipin Cc: maarten.lankhorst, mripard, tzimmermann, neil.armstrong, quic_jesszhan, airlied, daniel, dri-devel, linux-kernel Hi, On Tue, Aug 6, 2024 at 7:00 AM Tejas Vipin <tejasvipin76@gmail.com> wrote: > > Use multi style wrapped functions for mipi_dsi in the > startek-kd070fhfid015 panel. > > Signed-off-by: Tejas Vipin <tejasvipin76@gmail.com> > --- > .../drm/panel/panel-startek-kd070fhfid015.c | 115 ++++++------------ > 1 file changed, 35 insertions(+), 80 deletions(-) Reviewed-by: Douglas Anderson <dianders@chromium.org> If nobody else has any comments, I'll plan to apply this midway through next week. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/2] drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped functions 2024-08-06 13:59 ` [PATCH v3 2/2] drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped functions Tejas Vipin 2024-08-07 22:54 ` Doug Anderson @ 2024-08-08 21:02 ` Jessica Zhang 2024-08-13 18:16 ` Doug Anderson 2 siblings, 0 replies; 9+ messages in thread From: Jessica Zhang @ 2024-08-08 21:02 UTC (permalink / raw) To: Tejas Vipin, maarten.lankhorst, mripard, tzimmermann, neil.armstrong Cc: dianders, airlied, daniel, dri-devel, linux-kernel On 8/6/2024 6:59 AM, Tejas Vipin wrote: > Use multi style wrapped functions for mipi_dsi in the > startek-kd070fhfid015 panel. > > Signed-off-by: Tejas Vipin <tejasvipin76@gmail.com> Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com> > --- > .../drm/panel/panel-startek-kd070fhfid015.c | 115 ++++++------------ > 1 file changed, 35 insertions(+), 80 deletions(-) > > diff --git a/drivers/gpu/drm/panel/panel-startek-kd070fhfid015.c b/drivers/gpu/drm/panel/panel-startek-kd070fhfid015.c > index 0156689f41cd..c0c95355b743 100644 > --- a/drivers/gpu/drm/panel/panel-startek-kd070fhfid015.c > +++ b/drivers/gpu/drm/panel/panel-startek-kd070fhfid015.c > @@ -24,10 +24,10 @@ > #include <drm/drm_modes.h> > #include <drm/drm_panel.h> > > -#define DSI_REG_MCAP 0xB0 > -#define DSI_REG_IS 0xB3 /* Interface Setting */ > -#define DSI_REG_IIS 0xB4 /* Interface ID Setting */ > -#define DSI_REG_CTRL 0xB6 > +#define DSI_REG_MCAP 0xb0 > +#define DSI_REG_IS 0xb3 /* Interface Setting */ > +#define DSI_REG_IIS 0xb4 /* Interface ID Setting */ > +#define DSI_REG_CTRL 0xb6 > > enum { > IOVCC = 0, > @@ -52,92 +52,55 @@ static inline struct stk_panel *to_stk_panel(struct drm_panel *panel) > static int stk_panel_init(struct stk_panel *stk) > { > struct mipi_dsi_device *dsi = stk->dsi; > - struct device *dev = &stk->dsi->dev; > - int ret; > - > - ret = mipi_dsi_dcs_soft_reset(dsi); > - if (ret < 0) { > - dev_err(dev, "failed to mipi_dsi_dcs_soft_reset: %d\n", ret); > - return ret; > - } > - mdelay(5); > + struct mipi_dsi_multi_context dsi_ctx = {.dsi = dsi}; > > - ret = mipi_dsi_dcs_exit_sleep_mode(dsi); > - if (ret < 0) { > - dev_err(dev, "failed to set exit sleep mode: %d\n", ret); > - return ret; > - } > - msleep(120); > + mipi_dsi_dcs_soft_reset_multi(&dsi_ctx); > + mipi_dsi_msleep(&dsi_ctx, 5); > + mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx); > + mipi_dsi_msleep(&dsi_ctx, 120); > > - mipi_dsi_generic_write_seq(dsi, DSI_REG_MCAP, 0x04); > + mipi_dsi_generic_write_seq_multi(&dsi_ctx, DSI_REG_MCAP, 0x04); > > /* Interface setting, video mode */ > - mipi_dsi_generic_write_seq(dsi, DSI_REG_IS, 0x14, 0x08, 0x00, 0x22, 0x00); > - mipi_dsi_generic_write_seq(dsi, DSI_REG_IIS, 0x0C, 0x00); > - mipi_dsi_generic_write_seq(dsi, DSI_REG_CTRL, 0x3A, 0xD3); > + mipi_dsi_generic_write_seq_multi(&dsi_ctx, DSI_REG_IS, 0x14, 0x08, 0x00, 0x22, 0x00); > + mipi_dsi_generic_write_seq_multi(&dsi_ctx, DSI_REG_IIS, 0x0c, 0x00); > + mipi_dsi_generic_write_seq_multi(&dsi_ctx, DSI_REG_CTRL, 0x3a, 0xd3); > > - ret = mipi_dsi_dcs_set_display_brightness(dsi, 0x77); > - if (ret < 0) { > - dev_err(dev, "failed to write display brightness: %d\n", ret); > - return ret; > - } > + mipi_dsi_dcs_set_display_brightness_multi(&dsi_ctx, 0x77); > > - mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_WRITE_CONTROL_DISPLAY, > - MIPI_DCS_WRITE_MEMORY_START); > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_WRITE_CONTROL_DISPLAY, > + MIPI_DCS_WRITE_MEMORY_START); > > - ret = mipi_dsi_dcs_set_pixel_format(dsi, 0x77); > - if (ret < 0) { > - dev_err(dev, "failed to set pixel format: %d\n", ret); > - return ret; > - } > + mipi_dsi_dcs_set_pixel_format_multi(&dsi_ctx, 0x77); > + mipi_dsi_dcs_set_column_address_multi(&dsi_ctx, 0, stk->mode->hdisplay - 1); > + mipi_dsi_dcs_set_page_address_multi(&dsi_ctx, 0, stk->mode->vdisplay - 1); > > - ret = mipi_dsi_dcs_set_column_address(dsi, 0, stk->mode->hdisplay - 1); > - if (ret < 0) { > - dev_err(dev, "failed to set column address: %d\n", ret); > - return ret; > - } > - > - ret = mipi_dsi_dcs_set_page_address(dsi, 0, stk->mode->vdisplay - 1); > - if (ret < 0) { > - dev_err(dev, "failed to set page address: %d\n", ret); > - return ret; > - } > - > - return 0; > + return dsi_ctx.accum_err; > } > > static int stk_panel_on(struct stk_panel *stk) > { > struct mipi_dsi_device *dsi = stk->dsi; > - struct device *dev = &stk->dsi->dev; > - int ret; > + struct mipi_dsi_multi_context dsi_ctx = {.dsi = dsi}; > > - ret = mipi_dsi_dcs_set_display_on(dsi); > - if (ret < 0) > - dev_err(dev, "failed to set display on: %d\n", ret); > + mipi_dsi_dcs_set_display_on_multi(&dsi_ctx); > > - mdelay(20); > + mipi_dsi_msleep(&dsi_ctx, 20); > > - return ret; > + return dsi_ctx.accum_err; > } > > static void stk_panel_off(struct stk_panel *stk) > { > struct mipi_dsi_device *dsi = stk->dsi; > - struct device *dev = &stk->dsi->dev; > - int ret; > + struct mipi_dsi_multi_context dsi_ctx = {.dsi = dsi}; > > dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; > > - ret = mipi_dsi_dcs_set_display_off(dsi); > - if (ret < 0) > - dev_err(dev, "failed to set display off: %d\n", ret); > + mipi_dsi_dcs_set_display_off_multi(&dsi_ctx); > + mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx); > > - ret = mipi_dsi_dcs_enter_sleep_mode(dsi); > - if (ret < 0) > - dev_err(dev, "failed to enter sleep mode: %d\n", ret); > - > - msleep(100); > + mipi_dsi_msleep(&dsi_ctx, 100); > } > > static int stk_panel_unprepare(struct drm_panel *panel) > @@ -155,7 +118,6 @@ static int stk_panel_unprepare(struct drm_panel *panel) > static int stk_panel_prepare(struct drm_panel *panel) > { > struct stk_panel *stk = to_stk_panel(panel); > - struct device *dev = &stk->dsi->dev; > int ret; > > gpiod_set_value(stk->reset_gpio, 0); > @@ -175,16 +137,12 @@ static int stk_panel_prepare(struct drm_panel *panel) > gpiod_set_value(stk->reset_gpio, 1); > mdelay(10); > ret = stk_panel_init(stk); > - if (ret < 0) { > - dev_err(dev, "failed to init panel: %d\n", ret); > + if (ret < 0) > goto poweroff; > - } > > ret = stk_panel_on(stk); > - if (ret < 0) { > - dev_err(dev, "failed to set panel on: %d\n", ret); > + if (ret < 0) > goto poweroff; > - } > > return 0; > > @@ -250,18 +208,15 @@ static int dsi_dcs_bl_get_brightness(struct backlight_device *bl) > static int dsi_dcs_bl_update_status(struct backlight_device *bl) > { > struct mipi_dsi_device *dsi = bl_get_data(bl); > - struct device *dev = &dsi->dev; > - int ret; > + struct mipi_dsi_multi_context dsi_ctx = {.dsi = dsi}; > > dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; > - ret = mipi_dsi_dcs_set_display_brightness(dsi, bl->props.brightness); > - if (ret < 0) { > - dev_err(dev, "failed to set DSI control: %d\n", ret); > - return ret; > - } > + mipi_dsi_dcs_set_display_brightness_multi(&dsi_ctx, bl->props.brightness); > + if (dsi_ctx.accum_err) > + return dsi_ctx.accum_err; > > dsi->mode_flags |= MIPI_DSI_MODE_LPM; > - return 0; > + return dsi_ctx.accum_err; > } > > static const struct backlight_ops dsi_bl_ops = { > -- > 2.46.0 > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/2] drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped functions 2024-08-06 13:59 ` [PATCH v3 2/2] drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped functions Tejas Vipin 2024-08-07 22:54 ` Doug Anderson 2024-08-08 21:02 ` Jessica Zhang @ 2024-08-13 18:16 ` Doug Anderson 2 siblings, 0 replies; 9+ messages in thread From: Doug Anderson @ 2024-08-13 18:16 UTC (permalink / raw) To: Tejas Vipin Cc: maarten.lankhorst, mripard, tzimmermann, neil.armstrong, quic_jesszhan, airlied, daniel, dri-devel, linux-kernel Hi, On Tue, Aug 6, 2024 at 7:00 AM Tejas Vipin <tejasvipin76@gmail.com> wrote: > > Use multi style wrapped functions for mipi_dsi in the > startek-kd070fhfid015 panel. > > Signed-off-by: Tejas Vipin <tejasvipin76@gmail.com> > --- > .../drm/panel/panel-startek-kd070fhfid015.c | 115 ++++++------------ > 1 file changed, 35 insertions(+), 80 deletions(-) Pushed to drm-misc-next: [2/2] drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped functions commit: b080a60731ad909eae4463684acc23d322e93579 ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-08-13 18:16 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-08-06 13:59 [PATCH v3 0/2] add more multi functions to streamline error handling Tejas Vipin 2024-08-06 13:59 ` [PATCH v3 1/2] drm/mipi-dsi: add more multi functions for better " Tejas Vipin 2024-08-07 22:53 ` Doug Anderson 2024-08-08 21:19 ` Jessica Zhang 2024-08-13 18:16 ` Doug Anderson 2024-08-06 13:59 ` [PATCH v3 2/2] drm/panel: startek-kd070fhfid015: transition to mipi_dsi wrapped functions Tejas Vipin 2024-08-07 22:54 ` Doug Anderson 2024-08-08 21:02 ` Jessica Zhang 2024-08-13 18:16 ` Doug Anderson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox