From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 78C6941834A for ; Wed, 26 Aug 2026 09:53:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787738028; cv=none; b=n7j6atZzmX50QP913mZMA1YETctlTj8iz9BdalRao3EBNi0Iiqou6IIgEjZq055mpnblU1X3or7NTbwE6iymXY1Z6FtaROwQH2qHrZeJT3TsYA5YNziFVN0ET2sFJHOZuvPWrBfoF41yGk0Km4iQUiMFUV0vmMhgD+rm0DiXMaY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787738028; c=relaxed/simple; bh=Gye6YWIAKvRB9mCP9EIEHU0+JzycJOTIxJlgT0u7bRI=; h=Message-ID:Date:MIME-Version:From:Subject:To:Cc:References: In-Reply-To:Content-Type; b=Gr40H+8HwRPbhRQHMY6KTMCc2mhieOrE4MyaqsaAMsa26kxa3Eeto2MRZXCEY7GgGdudfo25W97trmMpmjJcl3yO7gNQif/CjnCQ4W+Xcs804ea4HFN12M3Nxowlu963KpsER/NsxovdhkH6oXl0fbOymSDc8IeZoL5wnjqU0i8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=Zb7TlpPR; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="Zb7TlpPR" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-482ddbc11aaso574339f8f.3 for ; Wed, 26 Aug 2026 02:53:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787738024; x=1788342824; darn=vger.kernel.org; h=content-transfer-encoding:content-type:in-reply-to:organization :autocrypt:content-language:references:cc:to:subject:reply-to:from :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to:content-type; bh=5JrH7nWWgGuvLy0NhN9o6PtziTy8uleFbA9BsnogKWU=; b=Zb7TlpPRIRVqW8cL99M7NkePzI1VcWZhkYn7Ej7Oh1uain9TIj8lCuRloAlr/X1Cu2 gqDqRKg7NBaiVk3UpJuBPCjtT5nQVImw4lzHY/PRAoOYiKfnUfHDaIrE32vK9Ye875Xd LbJdI5xaKoRaZnEyrLkPD6JG6sn2kAiJkG6ihSBdUoKJitZWXHNQmiWD2IgSGY6GHmSY NA9gNouRdU6EYWRD9XE+YIig3W3WkDH5kNAIU4XA59F5OtXkxDyOMXjDo7Ji7K+mWUAD R+JKpOxhAb6qlC6g8+8EUd/7z0Lh+xVbTFNQozI5dVyLm+G0F7w+vbvWcDNwVT8kkmD0 h0Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787738024; x=1788342824; h=content-transfer-encoding:content-type:in-reply-to:organization :autocrypt:content-language:references:cc:to:subject:reply-to:from :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to:content-type; bh=5JrH7nWWgGuvLy0NhN9o6PtziTy8uleFbA9BsnogKWU=; b=YhQbbThsN+nwH1GfA9F+7iX2nIDJU5cuDlUYVblpRdTtKsvlZu+z0ZBj2mhHZgKX72 yjS4Qx52K3uymZXFeAKOLIpKuX+skihDtOhF5uj4wazK9eKoOk1A48g+mr7r+Aa9z4xZ YR/8qdXzlXCvBGNBKFa/ybdbFa76LWNirmIJdD7r72WNo5fFTz180JPNK8TrCdGMgijR gFv1piERorpvmEE2qBnZVlG/ELEZa2zeS6EDXMPleZTFLHCbOfNmNhBL8gUaNWWH/DnI ksfv+YvIMdK4oVFNXeXvZHzKCl/pjh0V7q93fUK6yE4P09Zo1VHHo6kLPQJon0WWBfW7 e4Fw== X-Forwarded-Encrypted: i=1; AHgh+RqU/XQmbz3Fvuvj4jE15WlrE4cO3KIi+UCh4ZHV4EOVzzM67XI6hTz2rpdWXSR10mycVB4/Ia76C5GLRRE=@vger.kernel.org X-Gm-Message-State: AFuF++myuCT1/UGzhlOJg8dlFkjG4PulnhKI+4pLIS92jYLpXVJEe/dN jkCMaNMFbwz8wQ3x2w3du9Qk+dDRJo2jx3j8BFe6VTC+hjiyvL88dG3Y4PC7elt8SWM= X-Gm-Gg: AR+sD12AvydFOj5Mq+hGFCxCTcs6zxlskh1pg0y+IbKN0ZjtmeCYUO0yRgDv1Fu0sku bOL+TfmJG+kkXuiGBiNKBTcgj1OStdhJixXeDhvQgHmFPbwUv/TrZ6nxR33hi/xB4qLypa2idP2 4yPMJM7o5Aio6bNOcUkXh1lsr5Iu6WfqdANKqqILUlgyYaSVMPF2J60vKK/PPQSDuf3nKBSmT2/ kRh0kWc6+riABD1Ro8sUv4tO5Umuy8SScJGvudZX1tRgcga1Gbv+E0gS7eRmAYcJX2Pfw1QDiv1 PdPYE3BHjpA5kq2/KKrlP1pFLmZMJymZuyTEmURlwmI7lVdj0GQlrXZVRKCLfBXQ79qdXmkDFDe qqCGFn8BdRMAoXAzdzqVYYmikqz/An+ia+0oYslYXdx019IXtVzamSPZxhbaHEfwyCqy8jPZjgt l26Bxa8v09uCmdO81xc2idXumOfZf+ZHRag3G2exnuCqTTvSG/6l//M6VLOlJJ3+zBWgup2ny2e AdWpjytXjxlAdczgyirJ3WS/a5pWfq9+4whCq63MMfURQ== X-Received: by 2002:a05:600c:a01:b0:496:c1f3:e8f8 with SMTP id 5b1f17b1804b1-499dc7015bfmr42175085e9.7.1787738023576; Wed, 26 Aug 2026 02:53:43 -0700 (PDT) Received: from ?IPV6:2a0d:e487:135f:84f0:37f7:9223:8e7a:9b5f? ([2a0d:e487:135f:84f0:37f7:9223:8e7a:9b5f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499dc977b7csm21589845e9.7.2026.08.26.02.53.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 26 Aug 2026 02:53:43 -0700 (PDT) Message-ID: <007e73a9-8220-46bb-89c6-2354740392c8@linaro.org> Date: Wed, 26 Aug 2026 11:53:32 +0200 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Neil Armstrong Reply-To: Neil Armstrong Subject: Re: [PATCH 3/4] drm/panel: visionox-vtdr6130: Modularize panel config To: webgeek1234@gmail.com, Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org References: <20260814-rp6-panel-v1-0-111c1aeccf0f@gmail.com> <20260814-rp6-panel-v1-3-111c1aeccf0f@gmail.com> Content-Language: en-US, fr Autocrypt: addr=neil.armstrong@linaro.org; keydata= xsBNBE1ZBs8BCAD78xVLsXPwV/2qQx2FaO/7mhWL0Qodw8UcQJnkrWmgTFRobtTWxuRx8WWP GTjuhvbleoQ5Cxjr+v+1ARGCH46MxFP5DwauzPekwJUD5QKZlaw/bURTLmS2id5wWi3lqVH4 BVF2WzvGyyeV1o4RTCYDnZ9VLLylJ9bneEaIs/7cjCEbipGGFlfIML3sfqnIvMAxIMZrvcl9 qPV2k+KQ7q+aXavU5W+yLNn7QtXUB530Zlk/d2ETgzQ5FLYYnUDAaRl+8JUTjc0CNOTpCeik 80TZcE6f8M76Xa6yU8VcNko94Ck7iB4vj70q76P/J7kt98hklrr85/3NU3oti3nrIHmHABEB AAHNKk5laWwgQXJtc3Ryb25nIDxuZWlsLmFybXN0cm9uZ0BsaW5hcm8ub3JnPsLAkQQTAQoA OwIbIwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgBYhBInsPQWERiF0UPIoSBaat7Gkz/iuBQJk Q5wSAhkBAAoJEBaat7Gkz/iuyhMIANiD94qDtUTJRfEW6GwXmtKWwl/mvqQtaTtZID2dos04 YqBbshiJbejgVJjy+HODcNUIKBB3PSLaln4ltdsV73SBcwUNdzebfKspAQunCM22Mn6FBIxQ GizsMLcP/0FX4en9NaKGfK6ZdKK6kN1GR9YffMJd2P08EO8mHowmSRe/ExAODhAs9W7XXExw UNCY4pVJyRPpEhv373vvff60bHxc1k/FF9WaPscMt7hlkbFLUs85kHtQAmr8pV5Hy9ezsSRa GzJmiVclkPc2BY592IGBXRDQ38urXeM4nfhhvqA50b/nAEXc6FzqgXqDkEIwR66/Gbp0t3+r yQzpKRyQif3OwE0ETVkGzwEIALyKDN/OGURaHBVzwjgYq+ZtifvekdrSNl8TIDH8g1xicBYp QTbPn6bbSZbdvfeQPNCcD4/EhXZuhQXMcoJsQQQnO4vwVULmPGgtGf8PVc7dxKOeta+qUh6+ SRh3vIcAUFHDT3f/Zdspz+e2E0hPV2hiSvICLk11qO6cyJE13zeNFoeY3ggrKY+IzbFomIZY 4yG6xI99NIPEVE9lNBXBKIlewIyVlkOaYvJWSV+p5gdJXOvScNN1epm5YHmf9aE2ZjnqZGoM Mtsyw18YoX9BqMFInxqYQQ3j/HpVgTSvmo5ea5qQDDUaCsaTf8UeDcwYOtgI8iL4oHcsGtUX oUk33HEAEQEAAcLAXwQYAQIACQUCTVkGzwIbDAAKCRAWmrexpM/4rrXiB/sGbkQ6itMrAIfn M7IbRuiSZS1unlySUVYu3SD6YBYnNi3G5EpbwfBNuT3H8//rVvtOFK4OD8cRYkxXRQmTvqa3 3eDIHu/zr1HMKErm+2SD6PO9umRef8V82o2oaCLvf4WeIssFjwB0b6a12opuRP7yo3E3gTCS KmbUuLv1CtxKQF+fUV1cVaTPMyT25Od+RC1K+iOR0F54oUJvJeq7fUzbn/KdlhA8XPGzwGRy 4zcsPWvwnXgfe5tk680fEKZVwOZKIEuJC3v+/yZpQzDvGYJvbyix0lHnrCzq43WefRHI5XTT QbM0WUIBIcGmq38+OgUsMYu4NzLu7uZFAcmp6h8g Organization: Linaro In-Reply-To: <20260814-rp6-panel-v1-3-111c1aeccf0f@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 8/14/26 20:17, Aaron Kling via B4 Relay wrote: > From: Aaron Kling > > The vtdr6130 is a DDIC, a common chip that is used by multiple panels. > Prepare the driver for more panels. > > Signed-off-by: Aaron Kling > --- > drivers/gpu/drm/panel/panel-visionox-vtdr6130.c | 95 +++++++++++++++++-------- > 1 file changed, 65 insertions(+), 30 deletions(-) > > diff --git a/drivers/gpu/drm/panel/panel-visionox-vtdr6130.c b/drivers/gpu/drm/panel/panel-visionox-vtdr6130.c > index b66d6c7128c75..805c9846c2a0b 100644 > --- a/drivers/gpu/drm/panel/panel-visionox-vtdr6130.c > +++ b/drivers/gpu/drm/panel/panel-visionox-vtdr6130.c > @@ -19,11 +19,28 @@ > > struct visionox_vtdr6130 { > struct drm_panel panel; > - struct drm_dsc_config dsc; > + struct drm_connector *connector; Why ? connector is unused in this patch. > struct mipi_dsi_device *dsi; > struct gpio_desc *reset_gpio; > struct regulator_bulk_data *supplies; > enum drm_panel_orientation orientation; > + struct visionox_vtdr6130_desc *desc; > +}; > + > +struct visionox_vtdr6130_desc { > + unsigned int width_mm; > + unsigned int height_mm; > + > + unsigned int bpc; > + unsigned int lanes; > + unsigned long mode_flags; > + enum mipi_dsi_pixel_format format; > + > + const struct drm_display_mode *modes; > + unsigned int num_modes; > + int (*init_sequence)(struct visionox_vtdr6130 *ctx); > + > + struct drm_dsc_config dsc; > }; > > static const struct regulator_bulk_data visionox_vtdr6130_supplies[] = { > @@ -162,7 +179,7 @@ static int visionox_vtdr6130_prepare(struct drm_panel *panel) > > visionox_vtdr6130_reset(ctx); > > - ret = visionox_vtdr6130_on(ctx); > + ret = ctx->desc->init_sequence(ctx); > if (ret < 0) { > gpiod_set_value_cansleep(ctx->reset_gpio, 1); > regulator_bulk_disable(ARRAY_SIZE(visionox_vtdr6130_supplies), > @@ -187,34 +204,58 @@ static int visionox_vtdr6130_unprepare(struct drm_panel *panel) > return 0; > } > > -static const struct drm_display_mode visionox_vtdr6130_mode = { > - .clock = (1080 + 20 + 2 + 20) * (2400 + 20 + 2 + 18) * 144 / 1000, > - .hdisplay = 1080, > - .hsync_start = 1080 + 20, > - .hsync_end = 1080 + 20 + 2, > - .htotal = 1080 + 20 + 2 + 20, > - .vdisplay = 2400, > - .vsync_start = 2400 + 20, > - .vsync_end = 2400 + 20 + 2, > - .vtotal = 2400 + 20 + 2 + 18, > +static const struct drm_display_mode visionox_vtdr6130_modes[] = { > + { > + .clock = (1080 + 20 + 2 + 20) * (2400 + 20 + 2 + 18) * 144 / 1000, > + .hdisplay = 1080, > + .hsync_start = 1080 + 20, > + .hsync_end = 1080 + 20 + 2, > + .htotal = 1080 + 20 + 2 + 20, > + .vdisplay = 2400, > + .vsync_start = 2400 + 20, > + .vsync_end = 2400 + 20 + 2, > + .vtotal = 2400 + 20 + 2 + 18, > + }, > +}; > + > +static struct visionox_vtdr6130_desc visionox_vtdr6130_panel_desc = { > + .modes = visionox_vtdr6130_modes, > + .num_modes = ARRAY_SIZE(visionox_vtdr6130_modes), > .width_mm = 71, > .height_mm = 157, Why did you move the width/height out of the mode ? Leave it in the mode, since you don't even use the same mode for the Retroid 6 panel > + .bpc = 8, > + .lanes = 4, > + .format = MIPI_DSI_FMT_RGB888, > + .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_NO_EOT_PACKET | > + MIPI_DSI_CLOCK_NON_CONTINUOUS, > + .init_sequence = visionox_vtdr6130_on, > + .dsc = { > + .dsc_version_major = 0x1, > + .dsc_version_minor = 0x2, > + .slice_height = 40, > + .slice_width = 540, > + .slice_count = 2, > + .bits_per_component = 8, > + .bits_per_pixel = 8 << 4, > + .block_pred_enable = true, > + }, > }; > > static int visionox_vtdr6130_get_modes(struct drm_panel *panel, > struct drm_connector *connector) > { > + struct visionox_vtdr6130 *ctx = to_visionox_vtdr6130(panel); > struct drm_display_mode *mode; > > - mode = drm_mode_duplicate(connector->dev, &visionox_vtdr6130_mode); > + mode = drm_mode_duplicate(connector->dev, ctx->desc->modes); > if (!mode) > return -ENOMEM; > > drm_mode_set_name(mode); > > mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; > - connector->display_info.width_mm = mode->width_mm; > - connector->display_info.height_mm = mode->height_mm; > + connector->display_info.width_mm = ctx->desc->width_mm; > + connector->display_info.height_mm = ctx->desc->height_mm; Drop this change, take them from the mode. > drm_mode_probed_add(connector, mode); > > return 1; > @@ -284,23 +325,17 @@ static int visionox_vtdr6130_probe(struct mipi_dsi_device *dsi) > return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio), > "Failed to get reset-gpios\n"); > > + ctx->desc = (struct visionox_vtdr6130_desc *)of_device_get_match_data(dev); > + if (!ctx->desc) > + return -ENODEV; > + > ctx->dsi = dsi; > mipi_dsi_set_drvdata(dsi, ctx); > > - ctx->dsc.dsc_version_major = 0x1; > - ctx->dsc.dsc_version_minor = 0x2; > - ctx->dsc.slice_height = 40; > - ctx->dsc.slice_width = 540; > - ctx->dsc.slice_count = 2; > - ctx->dsc.bits_per_component = 8; > - ctx->dsc.bits_per_pixel = 8 << 4; > - ctx->dsc.block_pred_enable = true; > - > - dsi->dsc = &ctx->dsc; > - dsi->lanes = 4; > - dsi->format = MIPI_DSI_FMT_RGB888; > - dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_NO_EOT_PACKET | > - MIPI_DSI_CLOCK_NON_CONTINUOUS; > + dsi->dsc = &ctx->desc->dsc; > + dsi->lanes = ctx->desc->lanes; > + dsi->format = ctx->desc->format; > + dsi->mode_flags = ctx->desc->mode_flags; > ctx->panel.prepare_prev_first = true; > > ret = drm_of_get_panel_orientation(dev->of_node, &ctx->orientation); > @@ -322,7 +357,7 @@ static int visionox_vtdr6130_probe(struct mipi_dsi_device *dsi) > } > > static const struct of_device_id visionox_vtdr6130_of_match[] = { > - { .compatible = "visionox,vtdr6130" }, > + { .compatible = "visionox,vtdr6130", .data = &visionox_vtdr6130_panel_desc }, > { /* sentinel */ } > }; > MODULE_DEVICE_TABLE(of, visionox_vtdr6130_of_match); > Thanks, Neil