[PATCH v3] drm/dbi: Print errors for mipi_dbi_command()
Noralf Trønnes
noralf at tronnes.org
Fri Jul 2 15:27:25 UTC 2021
Den 02.07.2021 15.56, skrev Linus Walleij:
> The macro mipi_dbi_command() does not report errors unless you wrap it
> in another macro to do the error reporting.
>
> Report a rate-limited error so we know what is going on.
>
> Drop the only user in DRM using mipi_dbi_command() and actually checking
> the error explicitly, let it use mipi_dbi_command_buf() directly
> instead.
You forgot to remove this section.
With that fixed:
Reviewed-by: Noralf Trønnes <noralf at tronnes.org>
>
> After this any code wishing to send command arrays can rely on
> mipi_dbi_command() providing an appropriate error message if something
> goes wrong.
>
> Suggested-by: Noralf Trønnes <noralf at tronnes.org>
> Suggested-by: Douglas Anderson <dianders at chromium.org>
> Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
> ---
> ChangeLog v2->v3:
> - Make the macro actually return the error value if need be, by
> putting a single ret; at the end of the macro. (Neat trick from
> StackOverflow!)
> - Switch the site where I switched mipi_dbi_command() to
> mipi_dbi_command_buf() back to what it was.
> - Print the failed command in the error message.
> - Put the dbi in (parens) since drivers/gpu/drm/tiny/st7586.c was
> passing &dbidev->dbi as parameter to mipi_dbi_command()
> and this would expand to
> struct device *dev = &&dbidev->dbi->spi->dev
> which can't be parsed but
> struct device *dev = &(&dbidev->dbi)->spi-dev;
> should work. I hope.
> ChangeLog v1->v2:
> - Fish out the struct device * from the DBI SPI client and use
> that to print the errors associated with the SPI device.
> ---
> include/drm/drm_mipi_dbi.h | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/include/drm/drm_mipi_dbi.h b/include/drm/drm_mipi_dbi.h
> index f543d6e3e822..05e194958265 100644
> --- a/include/drm/drm_mipi_dbi.h
> +++ b/include/drm/drm_mipi_dbi.h
> @@ -183,7 +183,12 @@ int mipi_dbi_buf_copy(void *dst, struct drm_framebuffer *fb,
> #define mipi_dbi_command(dbi, cmd, seq...) \
> ({ \
> const u8 d[] = { seq }; \
> - mipi_dbi_command_stackbuf(dbi, cmd, d, ARRAY_SIZE(d)); \
> + struct device *dev = &(dbi)->spi->dev; \
> + int ret; \
> + ret = mipi_dbi_command_stackbuf(dbi, cmd, d, ARRAY_SIZE(d)); \
> + if (ret) \
> + dev_err_ratelimited(dev, "error %d when sending command %#02x\n", ret, cmd); \
> + ret; \
> })
>
> #ifdef CONFIG_DEBUG_FS
>
More information about the dri-devel
mailing list