On 10/13/2014 12:16 PM, Thierry Reding wrote: > From: Thierry Reding <treding at nvidia.com> > > Provide a small convenience wrapper that transmits a DCS get_power_mode > command. A set of bitmasks for the mode bits is also provided. > > Signed-off-by: Thierry Reding <treding at nvidia.com> Besides one nitpick below.
Acked-by: Andrzej Hajda <a.hajda at samsung.com> --- drivers/gpu/drm/drm_mipi_dsi.c | 21 +++++++++++++++++++++ include/drm/drm_mipi_dsi.h | 7 +++++++ 2 files changed, 28 insertions(+) diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index 60bd68b520ae..4e016a6a9fc3 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -553,6 +553,27 @@ int mipi_dsi_dcs_soft_reset(struct mipi_dsi_device *dsi) EXPORT_SYMBOL(mipi_dsi_dcs_soft_reset); /** + * mipi_dsi_dcs_get_power_mode() - query the display module's current power + * mode + * @dsi: DSI peripheral device + * @mode: return location for the current power mode + * + * Return: 0 on success or a negative error code on failure. + */ +int mipi_dsi_dcs_get_power_mode(struct mipi_dsi_device *dsi, u8 *mode) +{ + ssize_t err; + + err = mipi_dsi_dcs_read(dsi, MIPI_DCS_GET_POWER_MODE, mode, + sizeof(*mode)); + if (err < 0) + return err; + + return 0; Maybe better would be: if (err == 1) return 0; return err < 0 ? err : -ENODATA; Or sth similar. I wonder also if it would not be better to make the function inline ? > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_get_power_mode); > + > +/** > * mipi_dsi_dcs_enter_sleep_mode() - disable all unnecessary blocks inside > the > * display module except interface communication > * @dsi: DSI peripheral device > diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h > index 2afbd5853f78..b659b99ac890 100644 > --- a/include/drm/drm_mipi_dsi.h > +++ b/include/drm/drm_mipi_dsi.h > @@ -164,6 +164,12 @@ enum mipi_dsi_dcs_tear_mode { > MIPI_DSI_DCS_TEAR_MODE_VHBLANK, > }; > > +#define MIPI_DSI_DCS_POWER_MODE_DISPLAY (1 << 2) > +#define MIPI_DSI_DCS_POWER_MODE_NORMAL (1 << 3) > +#define MIPI_DSI_DCS_POWER_MODE_SLEEP (1 << 4) > +#define MIPI_DSI_DCS_POWER_MODE_PARTIAL (1 << 5) > +#define MIPI_DSI_DCS_POWER_MODE_IDLE (1 << 6) > + > ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_device *dsi, > const void *data, size_t len); > ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, u8 cmd, > @@ -172,6 +178,7 @@ ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 > cmd, void *data, > size_t len); > int mipi_dsi_dcs_nop(struct mipi_dsi_device *dsi); > int mipi_dsi_dcs_soft_reset(struct mipi_dsi_device *dsi); > +int mipi_dsi_dcs_get_power_mode(struct mipi_dsi_device *dsi, u8 *mode); > int mipi_dsi_dcs_enter_sleep_mode(struct mipi_dsi_device *dsi); > int mipi_dsi_dcs_exit_sleep_mode(struct mipi_dsi_device *dsi); > int mipi_dsi_dcs_set_display_off(struct mipi_dsi_device *dsi);