From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932142AbdBPOWj (ORCPT ); Thu, 16 Feb 2017 09:22:39 -0500 Received: from dougal.metanate.com ([90.155.101.14]:4669 "EHLO metanate.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754410AbdBPOWh (ORCPT ); Thu, 16 Feb 2017 09:22:37 -0500 Date: Thu, 16 Feb 2017 14:22:22 +0000 From: John Keeping To: Chris Zhong Cc: Sean Paul , Mark Yao , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v3 22/24] drm/rockchip: dw-mipi-dsi: support non-burst modes Message-ID: <20170216142222.2831e474.john@metanate.com> In-Reply-To: <58A5161A.3070205@rock-chips.com> References: <20170129132444.25251-1-john@metanate.com> <20170129132444.25251-23-john@metanate.com> <20170131192255.GF20076@art_vandelay> <58A5161A.3070205@rock-chips.com> Organization: Metanate Ltd X-Mailer: Claws Mail 3.14.1 (GTK+ 2.24.31; x86_64-unknown-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 16 Feb 2017 11:01:46 +0800, Chris Zhong wrote: > On 02/01/2017 03:22 AM, Sean Paul wrote: > > On Sun, Jan 29, 2017 at 01:24:42PM +0000, John Keeping wrote: > > > > Reviewed-by: Sean Paul > > > >> Signed-off-by: John Keeping > >> Reviewed-by: Chris Zhong > >> --- > >> v3: > >> - Add Chris' Reviewed-by > >> Unchanged in v2 > >> > >> drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 16 +++++++++------- > >> 1 file changed, 9 insertions(+), 7 deletions(-) > >> > >> diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c > >> index 5bad92e2370e..58cb8ace2fe8 100644 > >> --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c > >> +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c > >> @@ -82,6 +82,7 @@ > >> #define FRAME_BTA_ACK BIT(14) > >> #define ENABLE_LOW_POWER (0x3f << 8) > >> #define ENABLE_LOW_POWER_MASK (0x3f << 8) > >> +#define VID_MODE_TYPE_NON_BURST_SYNC_EVENTS 0x1 > >> #define VID_MODE_TYPE_BURST_SYNC_PULSES 0x2 > This field indicates the video mode transmission type as follows: > 00: Non-burst with sync pulses > 01: Non-burst with sync events > 10 and 11: Burst mode > > So, I think define the macro like this is better: > > #define VID_MODE_TYPE_NON_BURST_SYNC_PULSES 0x0 > #define VID_MODE_TYPE_NON_BURST_SYNC_EVENTS 0x1 > #define VID_MODE_TYPE_BURST 0x2 > > > >> #define VID_MODE_TYPE_MASK 0x3 > >> > >> @@ -286,6 +287,7 @@ struct dw_mipi_dsi { > >> u32 format; > >> u16 input_div; > >> u16 feedback_div; > >> + unsigned long mode_flags; > >> > >> const struct dw_mipi_dsi_plat_data *pdata; > >> }; > >> @@ -551,15 +553,10 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host, > >> return -EINVAL; > >> } > >> > >> - if (!(device->mode_flags & MIPI_DSI_MODE_VIDEO_BURST) || > >> - !(device->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE)) { > >> - dev_err(dsi->dev, "device mode is unsupported\n"); > >> - return -EINVAL; > >> - } > >> - > >> dsi->lanes = device->lanes; > >> dsi->channel = device->channel; > >> dsi->format = device->format; > >> + dsi->mode_flags = device->mode_flags; > >> dsi->panel = of_drm_find_panel(device->dev.of_node); > >> if (dsi->panel) > >> return drm_panel_attach(dsi->panel, &dsi->connector); > >> @@ -716,7 +713,12 @@ static void dw_mipi_dsi_video_mode_config(struct dw_mipi_dsi *dsi) > >> { > >> u32 val; > >> > >> - val = VID_MODE_TYPE_BURST_SYNC_PULSES | ENABLE_LOW_POWER; > >> + val = ENABLE_LOW_POWER; > >> + > >> + if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_BURST) > >> + val |= VID_MODE_TYPE_BURST_SYNC_PULSES; > >> + else if (!(dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE)) > >> + val |= VID_MODE_TYPE_NON_BURST_SYNC_EVENTS; > > if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_BURST) > val |= VID_MODE_TYPE_BURST; > else if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) > val |= VID_MODE_TYPE_NON_BURST_SYNC_PULSES; > else > val |= VID_MODE_TYPE_NON_BURST_SYNC_EVENTS; OK, this is definitely clearer now that I've forgotten most of the datasheet; without your definitions at the top it's not clear that VID_MODE_TYPE_BURST_SYNC_PULSES is zero.