From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [PATCH 06/15] drm/dsi: Implement some standard DCS commands Date: Tue, 21 Oct 2014 10:36:11 +0200 Message-ID: <54461AFB.2060001@samsung.com> References: <1413195395-3355-1-git-send-email-thierry.reding@gmail.com> <1413195395-3355-6-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by gabe.freedesktop.org (Postfix) with ESMTP id 35EFB6E17A for ; Tue, 21 Oct 2014 01:36:16 -0700 (PDT) Received: from eucpsbgm2.samsung.com (unknown [203.254.199.245]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NDS008MJDD7D670@mailout1.w1.samsung.com> for dri-devel@lists.freedesktop.org; Tue, 21 Oct 2014 09:39:07 +0100 (BST) In-reply-to: <1413195395-3355-6-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org On 10/13/2014 12:16 PM, Thierry Reding wrote: > From: YoungJun Cho > > Add helpers for the {enter,exit}_sleep_mode, set_display_{on,off} and > set_tear_{on,off} DCS commands. > > Signed-off-by: YoungJun Cho > [treding: kerneldoc and other minor cleanup] > Signed-off-by: Thierry Reding The code below clearly shows that returning number of written bytes by mipi_dsi_dcs_write is useless and causes only code bloat. If mipi_dsi_dcs_write would return only error these function could be written as static inlines in header file, for example: static inline int mipi_dsi_dcs_enter_sleep_mode(struct mipi_dsi_device *dsi) { return mipi_dsi_dcs_write(dsi, MIPI_DCS_ENTER_SLEEP_MODE, NULL, 0); } Regards Andrzej > --- > drivers/gpu/drm/drm_mipi_dsi.c | 118 +++++++++++++++++++++++++++++++++++++++++ > include/drm/drm_mipi_dsi.h | 19 +++++++ > 2 files changed, 137 insertions(+) > > diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c > index 7cd69273dbad..8bb38db861ec 100644 > --- a/drivers/gpu/drm/drm_mipi_dsi.c > +++ b/drivers/gpu/drm/drm_mipi_dsi.c > @@ -506,6 +506,124 @@ ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 cmd, void *data, > } > EXPORT_SYMBOL(mipi_dsi_dcs_read); > > +/** > + * mipi_dsi_dcs_enter_sleep_mode() - disable all unnecessary blocks inside the > + * display module except interface communication > + * @dsi: DSI peripheral device > + * > + * Return: 0 on success or a negative error code on failure. > + */ > +int mipi_dsi_dcs_enter_sleep_mode(struct mipi_dsi_device *dsi) > +{ > + ssize_t err; > + > + err = mipi_dsi_dcs_write(dsi, MIPI_DCS_ENTER_SLEEP_MODE, NULL, 0); > + if (err < 0) > + return err; > + > + return 0; > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_enter_sleep_mode); > + > +/** > + * mipi_dsi_dcs_exit_sleep_mode() - enable all blocks inside the display > + * module > + * @dsi: DSI peripheral device > + * > + * Return: 0 on success or a negative error code on failure. > + */ > +int mipi_dsi_dcs_exit_sleep_mode(struct mipi_dsi_device *dsi) > +{ > + ssize_t err; > + > + err = mipi_dsi_dcs_write(dsi, MIPI_DCS_EXIT_SLEEP_MODE, NULL, 0); > + if (err < 0) > + return err; > + > + return 0; > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_exit_sleep_mode); > + > +/** > + * mipi_dsi_dcs_set_display_off() - stop displaying the image data on the > + * display device > + * @dsi: DSI peripheral device > + * > + * Return: 0 on success or a negative error code on failure. > + */ > +int mipi_dsi_dcs_set_display_off(struct mipi_dsi_device *dsi) > +{ > + ssize_t err; > + > + err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_DISPLAY_OFF, NULL, 0); > + if (err < 0) > + return err; > + > + return 0; > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_set_display_off); > + > +/** > + * mipi_dsi_dcs_set_display_on() - start displaying the image data on the > + * display device > + * @dsi: DSI peripheral device > + * > + * Return: 0 on success or a negative error code on failure > + */ > +int mipi_dsi_dcs_set_display_on(struct mipi_dsi_device *dsi) > +{ > + ssize_t err; > + > + err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_DISPLAY_ON, NULL, 0); > + if (err < 0) > + return err; > + > + return 0; > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_set_display_on); > + > +/** > + * mipi_dsi_dcs_set_tear_off() - turn off the display module's Tearing Effect > + * output signal on the TE signal line > + * @dsi: DSI peripheral device > + * > + * Return: 0 on success or a negative error code on failure > + */ > +int mipi_dsi_dcs_set_tear_off(struct mipi_dsi_device *dsi) > +{ > + ssize_t err; > + > + err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_TEAR_OFF, NULL, 0); > + if (err < 0) > + return err; > + > + return 0; > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_off); > + > +/** > + * mipi_dsi_dcs_set_tear_on() - turn on the display module's Tearing Effect > + * output signal on the TE signal line. > + * @dsi: DSI peripheral device > + * @mode: the Tearing Effect Output Line mode > + * > + * Return: 0 on success or a negative error code on failure > + */ > +int mipi_dsi_dcs_set_tear_on(struct mipi_dsi_device *dsi, > + enum mipi_dsi_dcs_tear_mode mode) > +{ > + u8 value = mode; > + ssize_t err; > + > + err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_TEAR_ON, &value, > + sizeof(value)); > + if (err < 0) > + return err; > + > + return 0; > +} > +EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_on); > + > 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 92ca66306702..bde663725a58 100644 > --- a/include/drm/drm_mipi_dsi.h > +++ b/include/drm/drm_mipi_dsi.h > @@ -140,12 +140,31 @@ ssize_t mipi_dsi_generic_write(struct mipi_dsi_device *dsi, const void *payload, > ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params, > size_t num_params, void *data, size_t size); > > +/** > + * enum mipi_dsi_dcs_tear_mode - Tearing Effect Output Line mode > + * @MIPI_DSI_DCS_TEAR_MODE_VBLANK: the TE output line consists of V-Blanking > + * information only > + * @MIPI_DSI_DCS_TEAR_MODE_VHBLANK : the TE output line consists of both > + * V-Blanking and H-Blanking information > + */ > +enum mipi_dsi_dcs_tear_mode { > + MIPI_DSI_DCS_TEAR_MODE_VBLANK, > + MIPI_DSI_DCS_TEAR_MODE_VHBLANK, > +}; > + > 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, > const void *data, size_t len); > ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 cmd, void *data, > size_t len); > +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); > +int mipi_dsi_dcs_set_display_on(struct mipi_dsi_device *dsi); > +int mipi_dsi_dcs_set_tear_off(struct mipi_dsi_device *dsi); > +int mipi_dsi_dcs_set_tear_on(struct mipi_dsi_device *dsi, > + enum mipi_dsi_dcs_tear_mode mode); > > /** > * struct mipi_dsi_driver - DSI driver