From patchwork Thu Oct 12 06:58:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 151789 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2908:b0:403:3b70:6f57 with SMTP id ib8csp1033078vqb; Wed, 11 Oct 2023 23:59:38 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFALC3IEt2IyXctB6RtFZdFJLJER9aSQaLeVuUPMXa+b5t+OuugNJb4Z66MkfP37FJt8NmT X-Received: by 2002:a05:6808:3021:b0:3ae:df5:6d0d with SMTP id ay33-20020a056808302100b003ae0df56d0dmr26986901oib.2.1697093978290; Wed, 11 Oct 2023 23:59:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697093978; cv=none; d=google.com; s=arc-20160816; b=O6+8PB0MAxCUHNQQvqCSS5GleghbliFDTR4iHCkNZHSQKljxdR+LKbeqoMy14bBmOF aSvBrXHA1o1ZnH/VhTfagDwiKk/vgLhKqb7JqbhOfRcoOHKH8s1u5HA1nlBtRUor5J9m P6haRK04zz2InotX1SfLtMPWCqlYXn6ZwEk8MgZcAh+I7xv9Toh8dpNLvmCfFHIlybyj XW2B3YUOTQ4aEeY1UuSOVHAGbx5WX135/3nftFnT1VZckbxiUflf1/9Lxi9tDXL3aInc tLxP+6BOMKs+SkxMATQPabGi+1dL8vZqfwuyrRbApbkE0iSXiSTVMqKP0S8rSBXcAAJe HOvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Mbymuqok05VINAfw8cxu/tPwEjlcj5Oue+IDRMaC16g=; fh=YoUIEdwc/0YiZGWaQY+wRngCyHWYZ17iaXOSqWrf/Dg=; b=GLt/pl2v/dIqs+OJHoBgeAQpr8CcOFYbxYpFzj9RjyvLyqPSG4FNMFgs9JZ3jYB1XT JnT+yRpB4S1UqD56IYP0z92EZLKYX4ciguQx+A6hvOKSGEhaLp1MLNszaGYd51XTvTD+ V23lhcIBSbOO7Jz/dZjTYMxHkwJfXfDVNb7W+SySbz2h4kTv6FoFCVWFjhVgJT7E9odM eOcxYdcVs8nrkgMKNSeuCu+Y0vHK93+TC4kWtXHPmOsNK9K9eaFyumt+j82Ur8zO/6QR llznO0lalcWssveHNLUuinAOH6O/Wtr17/ca11ShhLHXbxYyK7rie6yLa0gEwon5QDhR gjCg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=AG5lfWdx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id h17-20020a63df51000000b005859bd29c5bsi1577415pgj.723.2023.10.11.23.59.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Oct 2023 23:59:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=AG5lfWdx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 5D7DF8213F3A; Wed, 11 Oct 2023 23:59:37 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377663AbjJLG70 (ORCPT + 19 others); Thu, 12 Oct 2023 02:59:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48320 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377629AbjJLG7Q (ORCPT ); Thu, 12 Oct 2023 02:59:16 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EEC8690 for ; Wed, 11 Oct 2023 23:58:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1697093912; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Mbymuqok05VINAfw8cxu/tPwEjlcj5Oue+IDRMaC16g=; b=AG5lfWdxUaKJQkgLagvjIE+Iwi1Fot+jWShTPliF9k6F0mrOrQ5R6ae6wDldlMsX++wsp3 NBLKbLI7+ehlbyU+w+0ccK+9F8tMN0UDZkJqo5TA2xL1mWenHwUxDEvof45VJBi9cFj/9Z DtL9gpAB2rUNyN7iEmubGeRQe/Dz2pE= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-62-pUYlyj4UMbCTG_uzpm2UVg-1; Thu, 12 Oct 2023 02:58:29 -0400 X-MC-Unique: pUYlyj4UMbCTG_uzpm2UVg-1 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-32172e3679bso399526f8f.2 for ; Wed, 11 Oct 2023 23:58:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697093908; x=1697698708; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Mbymuqok05VINAfw8cxu/tPwEjlcj5Oue+IDRMaC16g=; b=HQc7CXquRSlyhHsYQ5SZZ9+o7MfHnpfhyagbu+jjIMfq5J5lEHZyv+ycQmhMHXN2y5 RssgACyphBYD+XGaBYI2uHvAhQqw0qDLx6dUeqWcjt6mimil5fINvMvuE3zpiEmdhMhP 8holOA9KJ9rxulYbAEiFk+WXrmvyLdXNK3252b5ltnmjrpe0otExFyU+MkwGeJZUlVd0 QAWEz8+HthbPmOTCFQz4h3zKyVlVm8HVRdacUu2c64iIfbZNlEEr3BPVxbtAeKyp7yEc 8geB9ztTEpXXeO8fNBAG+c9V9E6GGpp/7x0uUfioWFUP6smY7ZYo8P4cxA97wuhFTN29 C8FQ== X-Gm-Message-State: AOJu0YzXMe1TQVhyQSvcz6lpPjjnr14+iNEF17pSt1rwnnF1rPGDwmop IC9q0NWL5vrQyiwmBp9hgizhmgZLF7/8o8pbvGj0wMT9Xc7vQ210oIGCR73M4vBqz2bd822EpDh CZ/+mtfES+vO6qnhYajf/djCWw9AC1vxCh/GbyXZoF2/t8T6GnrtBoyDQpZuBbcMCm0P5yxrY25 CRt68vrLM= X-Received: by 2002:a05:6000:a14:b0:32c:a930:fe0e with SMTP id co20-20020a0560000a1400b0032ca930fe0emr7866711wrb.14.1697093907742; Wed, 11 Oct 2023 23:58:27 -0700 (PDT) X-Received: by 2002:a05:6000:a14:b0:32c:a930:fe0e with SMTP id co20-20020a0560000a1400b0032ca930fe0emr7866681wrb.14.1697093907430; Wed, 11 Oct 2023 23:58:27 -0700 (PDT) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id r18-20020adfe692000000b0031912c0ffebsm17460772wrm.23.2023.10.11.23.58.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Oct 2023 23:58:26 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Thomas Zimmermann , Conor Dooley , Peter Robinson , Rob Herring , Maxime Ripard , Geert Uytterhoeven , Javier Martinez Canillas , Geert Uytterhoeven , Daniel Vetter , David Airlie , Maarten Lankhorst , dri-devel@lists.freedesktop.org Subject: [PATCH v2 1/6] drm/ssd130x: Replace .page_height field in device info with a constant Date: Thu, 12 Oct 2023 08:58:10 +0200 Message-ID: <20231012065822.1007930-2-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231012065822.1007930-1-javierm@redhat.com> References: <20231012065822.1007930-1-javierm@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 11 Oct 2023 23:59:37 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1779532015547014192 X-GMAIL-MSGID: 1779532015547014192 This deemed useful to avoid hardcoding a page height and allow to support other Solomon controller families, but dividing the screen in pages seems to be something that is specific to the SSD130x chip family. For example, SSD132x chip family divides the screen in segments (columns) and common outputs (rows), so the concept of screen pages does not exist for the SSD132x family. Let's drop this field from the device info struct and just use a constant SSD130X_PAGE_HEIGHT macro to define the page height. While being there, replace hardcoded 8 values in places where it is used as the page height. Signed-off-by: Javier Martinez Canillas Reviewed-by: Geert Uytterhoeven --- Changes in v2: - Add Geert Uytterhoeven's Reviewed-by tag to patch #1. drivers/gpu/drm/solomon/ssd130x.c | 37 +++++++++++++++---------------- drivers/gpu/drm/solomon/ssd130x.h | 1 - 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index 6dcf3e041113..2852cddb098b 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -42,6 +42,8 @@ #define DRIVER_MAJOR 1 #define DRIVER_MINOR 0 +#define SSD130X_PAGE_HEIGHT 8 + #define SSD130X_PAGE_COL_START_LOW 0x00 #define SSD130X_PAGE_COL_START_HIGH 0x10 #define SSD130X_SET_ADDRESS_MODE 0x20 @@ -102,7 +104,6 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = { .default_width = 132, .default_height = 64, .page_mode_only = 1, - .page_height = 8, }, [SSD1305_ID] = { .default_vcomh = 0x34, @@ -110,7 +111,6 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = { .default_dclk_frq = 7, .default_width = 132, .default_height = 64, - .page_height = 8, }, [SSD1306_ID] = { .default_vcomh = 0x20, @@ -119,7 +119,6 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = { .need_chargepump = 1, .default_width = 128, .default_height = 64, - .page_height = 8, }, [SSD1307_ID] = { .default_vcomh = 0x20, @@ -128,7 +127,6 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = { .need_pwm = 1, .default_width = 128, .default_height = 39, - .page_height = 8, }, [SSD1309_ID] = { .default_vcomh = 0x34, @@ -136,7 +134,6 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = { .default_dclk_frq = 10, .default_width = 128, .default_height = 64, - .page_height = 8, } }; EXPORT_SYMBOL_NS_GPL(ssd130x_variants, DRM_SSD130X); @@ -465,13 +462,13 @@ static int ssd130x_update_rect(struct ssd130x_device *ssd130x, unsigned int width = drm_rect_width(rect); unsigned int height = drm_rect_height(rect); unsigned int line_length = DIV_ROUND_UP(width, 8); - unsigned int page_height = ssd130x->device_info->page_height; + unsigned int page_height = SSD130X_PAGE_HEIGHT; unsigned int pages = DIV_ROUND_UP(height, page_height); struct drm_device *drm = &ssd130x->drm; u32 array_idx = 0; int ret, i, j, k; - drm_WARN_ONCE(drm, y % 8 != 0, "y must be aligned to screen page\n"); + drm_WARN_ONCE(drm, y % page_height != 0, "y must be aligned to screen page\n"); /* * The screen is divided in pages, each having a height of 8 @@ -503,27 +500,32 @@ static int ssd130x_update_rect(struct ssd130x_device *ssd130x, */ if (!ssd130x->page_address_mode) { + u8 page_start; + /* Set address range for horizontal addressing mode */ ret = ssd130x_set_col_range(ssd130x, ssd130x->col_offset + x, width); if (ret < 0) return ret; - ret = ssd130x_set_page_range(ssd130x, ssd130x->page_offset + y / 8, pages); + page_start = ssd130x->page_offset + y / page_height; + ret = ssd130x_set_page_range(ssd130x, page_start, pages); if (ret < 0) return ret; } for (i = 0; i < pages; i++) { - int m = 8; + int m = page_height; /* Last page may be partial */ - if (8 * (y / 8 + i + 1) > ssd130x->height) - m = ssd130x->height % 8; + if (page_height * (y / page_height + i + 1) > ssd130x->height) + m = ssd130x->height % page_height; + for (j = 0; j < width; j++) { u8 data = 0; for (k = 0; k < m; k++) { - u8 byte = buf[(8 * i + k) * line_length + j / 8]; + u32 idx = (page_height * i + k) * line_length + j / 8; + u8 byte = buf[idx]; u8 bit = (byte >> (j % 8)) & 1; data |= bit << k; @@ -559,8 +561,7 @@ static int ssd130x_update_rect(struct ssd130x_device *ssd130x, static void ssd130x_clear_screen(struct ssd130x_device *ssd130x, u8 *data_array) { - unsigned int page_height = ssd130x->device_info->page_height; - unsigned int pages = DIV_ROUND_UP(ssd130x->height, page_height); + unsigned int pages = DIV_ROUND_UP(ssd130x->height, SSD130X_PAGE_HEIGHT); unsigned int width = ssd130x->width; int ret, i; @@ -605,14 +606,13 @@ static int ssd130x_fb_blit_rect(struct drm_framebuffer *fb, u8 *buf, u8 *data_array) { struct ssd130x_device *ssd130x = drm_to_ssd130x(fb->dev); - unsigned int page_height = ssd130x->device_info->page_height; struct iosys_map dst; unsigned int dst_pitch; int ret = 0; /* Align y to display page boundaries */ - rect->y1 = round_down(rect->y1, page_height); - rect->y2 = min_t(unsigned int, round_up(rect->y2, page_height), ssd130x->height); + rect->y1 = round_down(rect->y1, SSD130X_PAGE_HEIGHT); + rect->y2 = min_t(unsigned int, round_up(rect->y2, SSD130X_PAGE_HEIGHT), ssd130x->height); dst_pitch = DIV_ROUND_UP(drm_rect_width(rect), 8); @@ -814,8 +814,7 @@ static int ssd130x_crtc_atomic_check(struct drm_crtc *crtc, struct ssd130x_device *ssd130x = drm_to_ssd130x(drm); struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, crtc); struct ssd130x_crtc_state *ssd130x_state = to_ssd130x_crtc_state(crtc_state); - unsigned int page_height = ssd130x->device_info->page_height; - unsigned int pages = DIV_ROUND_UP(ssd130x->height, page_height); + unsigned int pages = DIV_ROUND_UP(ssd130x->height, SSD130X_PAGE_HEIGHT); int ret; ret = drm_crtc_helper_atomic_check(crtc, state); diff --git a/drivers/gpu/drm/solomon/ssd130x.h b/drivers/gpu/drm/solomon/ssd130x.h index aa39b13615eb..bbe374453605 100644 --- a/drivers/gpu/drm/solomon/ssd130x.h +++ b/drivers/gpu/drm/solomon/ssd130x.h @@ -39,7 +39,6 @@ struct ssd130x_deviceinfo { u32 default_dclk_frq; u32 default_width; u32 default_height; - u32 page_height; bool need_pwm; bool need_chargepump; bool page_mode_only; From patchwork Thu Oct 12 06:58:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 151791 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2908:b0:403:3b70:6f57 with SMTP id ib8csp1033848vqb; Thu, 12 Oct 2023 00:01:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGAliATcs7QksPW5Vg3q3zcBbQMA8h8IWQpzWy4yvAlazBb1N6lZi9+8ma8hNxXw3+SErSl X-Received: by 2002:a17:90a:e7c8:b0:27d:193f:2130 with SMTP id kb8-20020a17090ae7c800b0027d193f2130mr2019917pjb.3.1697094069205; Thu, 12 Oct 2023 00:01:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697094069; cv=none; d=google.com; s=arc-20160816; b=Ky2B1SeE0u4LmeCjh46wqe0XZz5UEZTrvSzf5SdnehGDRU/nSQTcNUzvXCiZO0yLPK 5oSCAie/d/IZwdufDLnIfPlTEAsXnIG/TgZjW8NpdNEpL9FHLf9w2g4aN+C+1SALRq1z /iCWXZSnsgYMc6JbBr7Udw9xh0ibq6R+V9fbT7pHaRKXJQfsklk47RvfcE02C3F1rkd/ ejwal4oR8cd1UnkZCRKZ7xm3xAYS8PiVAsc5/bQJ2Ti+WvaBQ99skSlFRZPYgXxnIGHX B3yANoTDLkAWVlsONdG/kQe2Snyu1tO2LXToRvNw6UVIbaOijxiYxE+AVXJ0ew/GfW19 GyyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=VPTiBn27phzNUMwFu1grsxXoxNWjXfYdrR6MN2Opoxg=; fh=+Cc5YLSKttfXhtmctiwfMK3MUVgJXlVjKY13c+ulTek=; b=xDBuhekvvP8JEhplHYCge+lNGiEYcG26qgnmyTUKAGFZ4udhDjS/gutp11QIMZJQlf xuP42WEZN/m4zSuDbli08tAU4CVLpRhjTF2LPXfoE6lt6VTjmlE75fHRode1CT7lQ/cG 6O/onRDsa5c9fucZAyuOZ/LXM2S58SswRQwS/yiPbs7BMGyA+uDQnPTiyLLEAsW3ude6 NJSkgsWVi4czYfMA3CcAZ9jMyMhr1clcMvx34LVwP3x72s2DVGlACQaiTW+EMIk1cJIW sZnwDaSkwXzN7Jg2bP+CwjOF/qkvTtd0zYG5fvUSEhhEbZupWTdE7PfszPNg8BgE24pN 5JxA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=C8X+Usc5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id mw5-20020a17090b4d0500b00277630078f9si1679853pjb.12.2023.10.12.00.01.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Oct 2023 00:01:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=C8X+Usc5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 3AD188079DD1; Thu, 12 Oct 2023 00:00:13 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377875AbjJLG7j (ORCPT + 19 others); Thu, 12 Oct 2023 02:59:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48334 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377697AbjJLG7X (ORCPT ); Thu, 12 Oct 2023 02:59:23 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2B3EDB8 for ; Wed, 11 Oct 2023 23:58:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1697093912; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VPTiBn27phzNUMwFu1grsxXoxNWjXfYdrR6MN2Opoxg=; b=C8X+Usc5qMRL4P04zbrCa7uUpjEQtP1izFRhz/uT6xw6u2WVxHlaEVFrKfrt95VgiDsaUp c0zTgH9NQm05+g0hfy25HWPc9rcv4jIrHkQ1/2256yejCtmNSlB9yoJicx/jmgbCUbSc03 E40rBWWcRX22IW5u4uGaPI7siWhKyP4= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-355-lTG6Grs2P7SaQEaitBFwqg-1; Thu, 12 Oct 2023 02:58:30 -0400 X-MC-Unique: lTG6Grs2P7SaQEaitBFwqg-1 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4059475c174so5493175e9.0 for ; Wed, 11 Oct 2023 23:58:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697093909; x=1697698709; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VPTiBn27phzNUMwFu1grsxXoxNWjXfYdrR6MN2Opoxg=; b=RM/Kp3rxiivjuT2PLizcaD+qauOfzYFk4lY9ZrYND0QCmFa4JInA5qQqS/9YditMjn RT8YwBUWo3hIvF91fobibaCR6hK+hQfjl+whsf/nzhDN4Fd3q9NGKUNx0dSD8yxKf7ss 2FII6lVXgpGX+CnZxK9RKir4oJ9OUZqD8t4/L4VuQEeACOUzMxeKPr7yp5ochqDgZOw3 3etoJZSVMn3Y/kg2O0YX3nLLNLTCS0r7sJBSUWC7ModW2PwhRowbA7s0E37cSSGJRXKT qWlkRpLB3gLKVRA6El71Nu0THyyIPSIb2H0qspPNvbtGb2haH4/IV2IfDkbVDPYVzWgy RsKw== X-Gm-Message-State: AOJu0YyBL6k7cCZ1Ivjg5AcsTEHkkzIScLiAkzsRWMTBtXG6PvYJ8o2m jymc8jgmSEOfIsBTjO5a494WBnausp/fUdeSx/l2CY4Xa4Bv6dWHn3FOL/W31F6KkF2Wjr8V0be LJjjV017tZiSjaM04o3m7+Dipi1tuH0GLP2V6ju8mnE7XkFv0M6Z8rah9+yIti3sjhv5dchUppL 9uz0edS70= X-Received: by 2002:a05:600c:3652:b0:3fb:a0fc:1ba1 with SMTP id y18-20020a05600c365200b003fba0fc1ba1mr21622393wmq.35.1697093909227; Wed, 11 Oct 2023 23:58:29 -0700 (PDT) X-Received: by 2002:a05:600c:3652:b0:3fb:a0fc:1ba1 with SMTP id y18-20020a05600c365200b003fba0fc1ba1mr21622366wmq.35.1697093908792; Wed, 11 Oct 2023 23:58:28 -0700 (PDT) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id az17-20020a05600c601100b003fef5e76f2csm2016567wmb.0.2023.10.11.23.58.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Oct 2023 23:58:28 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Thomas Zimmermann , Conor Dooley , Peter Robinson , Rob Herring , Maxime Ripard , Geert Uytterhoeven , Javier Martinez Canillas , Daniel Vetter , David Airlie , Maarten Lankhorst , dri-devel@lists.freedesktop.org Subject: [PATCH v2 2/6] drm/ssd130x: Add a per controller family functions table Date: Thu, 12 Oct 2023 08:58:11 +0200 Message-ID: <20231012065822.1007930-3-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231012065822.1007930-1-javierm@redhat.com> References: <20231012065822.1007930-1-javierm@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Thu, 12 Oct 2023 00:00:13 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1779532110225732714 X-GMAIL-MSGID: 1779532110225732714 To allow the driver to decouple the common logic in the function callbacks from the behaviour that is specific of a given Solomon controller family. For this, include a chip family to the device info and add fields to the driver-private device struct, to store the hardware buffer maximum size, the intermediate buffer maximum size and pixel format, and a set of per chip family function handlers. While doing this change, also use drm_format_info_min_pitch() to calculate the dest_pitch. This avoids to assume a 1 bpp and instead the pixel format info for the intermediate buffer is used. Signed-off-by: Javier Martinez Canillas --- Changes in v2: - Squash patch that uses drm_format_info_min_pitch() to calculate dest_pitch with the following patch (Geert Uytterhoeven). - Store ssd13xx_family_funcs[SSD130X_FAMILY] in struct ssd130x_deviceinfo (Geert Uytterhoeven). - Don't mix switch (family_id) and ssd13xx_funcs[family_id] (Geert Uytterhoeven). - Replace switch (family_id) by an .set_buffer_sizes (Geert Uytterhoeven). - Move the rect alignment to a per chip family function (Geert Uytterhoeven). drivers/gpu/drm/solomon/ssd130x-i2c.c | 1 + drivers/gpu/drm/solomon/ssd130x-spi.c | 2 + drivers/gpu/drm/solomon/ssd130x.c | 95 ++++++++++++++++++++------- drivers/gpu/drm/solomon/ssd130x.h | 24 +++++++ 4 files changed, 99 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x-i2c.c b/drivers/gpu/drm/solomon/ssd130x-i2c.c index b4eb2d64bf6e..8f89b89d553f 100644 --- a/drivers/gpu/drm/solomon/ssd130x-i2c.c +++ b/drivers/gpu/drm/solomon/ssd130x-i2c.c @@ -54,6 +54,7 @@ static void ssd130x_i2c_shutdown(struct i2c_client *client) } static const struct of_device_id ssd130x_of_match[] = { + /* ssd130x family */ { .compatible = "sinowealth,sh1106", .data = &ssd130x_variants[SH1106_ID], diff --git a/drivers/gpu/drm/solomon/ssd130x-spi.c b/drivers/gpu/drm/solomon/ssd130x-spi.c index 19ab4942cb33..257819bccbc8 100644 --- a/drivers/gpu/drm/solomon/ssd130x-spi.c +++ b/drivers/gpu/drm/solomon/ssd130x-spi.c @@ -108,6 +108,7 @@ static void ssd130x_spi_shutdown(struct spi_device *spi) } static const struct of_device_id ssd130x_of_match[] = { + /* ssd130x family */ { .compatible = "sinowealth,sh1106", .data = &ssd130x_variants[SH1106_ID], @@ -142,6 +143,7 @@ MODULE_DEVICE_TABLE(of, ssd130x_of_match); * not be needed for this driver to match the registered SPI devices. */ static const struct spi_device_id ssd130x_spi_table[] = { + /* ssd130x family */ { "sh1106", SH1106_ID }, { "ssd1305", SSD1305_ID }, { "ssd1306", SSD1306_ID }, diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index 2852cddb098b..08885c33e1a6 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -96,6 +96,12 @@ #define MAX_CONTRAST 255 +enum ssd130x_family_ids { + SSD130X_FAMILY +}; + +static const struct ssd130x_funcs ssd130x_family_funcs[]; + const struct ssd130x_deviceinfo ssd130x_variants[] = { [SH1106_ID] = { .default_vcomh = 0x40, @@ -104,6 +110,7 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = { .default_width = 132, .default_height = 64, .page_mode_only = 1, + .funcs = &ssd130x_family_funcs[SSD130X_FAMILY], }, [SSD1305_ID] = { .default_vcomh = 0x34, @@ -111,6 +118,7 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = { .default_dclk_frq = 7, .default_width = 132, .default_height = 64, + .funcs = &ssd130x_family_funcs[SSD130X_FAMILY], }, [SSD1306_ID] = { .default_vcomh = 0x20, @@ -119,6 +127,7 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = { .need_chargepump = 1, .default_width = 128, .default_height = 64, + .funcs = &ssd130x_family_funcs[SSD130X_FAMILY], }, [SSD1307_ID] = { .default_vcomh = 0x20, @@ -127,6 +136,7 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = { .need_pwm = 1, .default_width = 128, .default_height = 39, + .funcs = &ssd130x_family_funcs[SSD130X_FAMILY], }, [SSD1309_ID] = { .default_vcomh = 0x34, @@ -134,6 +144,7 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = { .default_dclk_frq = 10, .default_width = 128, .default_height = 64, + .funcs = &ssd130x_family_funcs[SSD130X_FAMILY], } }; EXPORT_SYMBOL_NS_GPL(ssd130x_variants, DRM_SSD130X); @@ -453,6 +464,33 @@ static int ssd130x_init(struct ssd130x_device *ssd130x) SSD130X_SET_ADDRESS_MODE_HORIZONTAL); } +static int ssd130x_set_buffer_sizes(struct ssd130x_device *ssd130x) +{ + unsigned int buffer_pitch; + unsigned int pages = DIV_ROUND_UP(ssd130x->height, SSD130X_PAGE_HEIGHT); + + ssd130x->data_array_size = ssd130x->width * pages; + + ssd130x->buffer_fi = drm_format_info(DRM_FORMAT_R1); + + if (!ssd130x->buffer_fi) + return -EINVAL; + + buffer_pitch = drm_format_info_min_pitch(ssd130x->buffer_fi, 0, ssd130x->width); + ssd130x->buffer_size = buffer_pitch * ssd130x->height; + + return 0; +} + +static void ssd130x_align_rect(struct ssd130x_device *ssd130x, + struct drm_rect *rect) +{ + /* Align y to display page boundaries */ + rect->y1 = round_down(rect->y1, SSD130X_PAGE_HEIGHT); + rect->y2 = min_t(unsigned int, round_up(rect->y2, SSD130X_PAGE_HEIGHT), + ssd130x->height); +} + static int ssd130x_update_rect(struct ssd130x_device *ssd130x, struct drm_rect *rect, u8 *buf, u8 *data_array) @@ -600,34 +638,43 @@ static void ssd130x_clear_screen(struct ssd130x_device *ssd130x, u8 *data_array) } } +static const struct ssd130x_funcs ssd130x_family_funcs[] = { + [SSD130X_FAMILY] = { + .init = ssd130x_init, + .set_buffer_sizes = ssd130x_set_buffer_sizes, + .align_rect = ssd130x_align_rect, + .update_rect = ssd130x_update_rect, + .clear_screen = ssd130x_clear_screen, + .fmt_convert = drm_fb_xrgb8888_to_mono, + }, +}; + static int ssd130x_fb_blit_rect(struct drm_framebuffer *fb, const struct iosys_map *vmap, - struct drm_rect *rect, - u8 *buf, u8 *data_array) + struct drm_rect *rect, u8 *buf, + const struct drm_format_info *fi, + u8 *data_array) { struct ssd130x_device *ssd130x = drm_to_ssd130x(fb->dev); + const struct ssd130x_funcs *ssd130x_funcs = ssd130x->device_info->funcs; struct iosys_map dst; unsigned int dst_pitch; int ret = 0; - /* Align y to display page boundaries */ - rect->y1 = round_down(rect->y1, SSD130X_PAGE_HEIGHT); - rect->y2 = min_t(unsigned int, round_up(rect->y2, SSD130X_PAGE_HEIGHT), ssd130x->height); + ssd130x_funcs->align_rect(ssd130x, rect); - dst_pitch = DIV_ROUND_UP(drm_rect_width(rect), 8); + dst_pitch = drm_format_info_min_pitch(fi, 0, drm_rect_width(rect)); ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE); if (ret) return ret; iosys_map_set_vaddr(&dst, buf); - drm_fb_xrgb8888_to_mono(&dst, &dst_pitch, vmap, fb, rect); + ssd130x_funcs->fmt_convert(&dst, &dst_pitch, vmap, fb, rect); drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); - ssd130x_update_rect(ssd130x, rect, buf, data_array); - - return ret; + return ssd130x_funcs->update_rect(ssd130x, rect, buf, data_array); } static int ssd130x_primary_plane_atomic_check(struct drm_plane *plane, @@ -639,8 +686,6 @@ static int ssd130x_primary_plane_atomic_check(struct drm_plane *plane, struct ssd130x_plane_state *ssd130x_state = to_ssd130x_plane_state(plane_state); struct drm_crtc *crtc = plane_state->crtc; struct drm_crtc_state *crtc_state; - const struct drm_format_info *fi; - unsigned int pitch; int ret; if (!crtc) @@ -654,13 +699,7 @@ static int ssd130x_primary_plane_atomic_check(struct drm_plane *plane, if (ret) return ret; - fi = drm_format_info(DRM_FORMAT_R1); - if (!fi) - return -EINVAL; - - pitch = drm_format_info_min_pitch(fi, 0, ssd130x->width); - - ssd130x_state->buffer = kcalloc(pitch, ssd130x->height, GFP_KERNEL); + ssd130x_state->buffer = kzalloc(ssd130x->buffer_size, GFP_KERNEL); if (!ssd130x_state->buffer) return -ENOMEM; @@ -679,6 +718,7 @@ static void ssd130x_primary_plane_atomic_update(struct drm_plane *plane, struct drm_framebuffer *fb = plane_state->fb; struct drm_atomic_helper_damage_iter iter; struct drm_device *drm = plane->dev; + struct ssd130x_device *ssd130x = drm_to_ssd130x(drm); struct drm_rect dst_clip; struct drm_rect damage; int idx; @@ -695,6 +735,7 @@ static void ssd130x_primary_plane_atomic_update(struct drm_plane *plane, ssd130x_fb_blit_rect(fb, &shadow_plane_state->data[0], &dst_clip, ssd130x_plane_state->buffer, + ssd130x->buffer_fi, ssd130x_crtc_state->data_array); } @@ -706,6 +747,7 @@ static void ssd130x_primary_plane_atomic_disable(struct drm_plane *plane, { struct drm_device *drm = plane->dev; struct ssd130x_device *ssd130x = drm_to_ssd130x(drm); + const struct ssd130x_funcs *ssd130x_funcs = ssd130x->device_info->funcs; struct drm_plane_state *plane_state = drm_atomic_get_new_plane_state(state, plane); struct drm_crtc_state *crtc_state; struct ssd130x_crtc_state *ssd130x_crtc_state; @@ -720,7 +762,7 @@ static void ssd130x_primary_plane_atomic_disable(struct drm_plane *plane, if (!drm_dev_enter(drm, &idx)) return; - ssd130x_clear_screen(ssd130x, ssd130x_crtc_state->data_array); + ssd130x_funcs->clear_screen(ssd130x, ssd130x_crtc_state->data_array); drm_dev_exit(idx); } @@ -814,14 +856,13 @@ static int ssd130x_crtc_atomic_check(struct drm_crtc *crtc, struct ssd130x_device *ssd130x = drm_to_ssd130x(drm); struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, crtc); struct ssd130x_crtc_state *ssd130x_state = to_ssd130x_crtc_state(crtc_state); - unsigned int pages = DIV_ROUND_UP(ssd130x->height, SSD130X_PAGE_HEIGHT); int ret; ret = drm_crtc_helper_atomic_check(crtc, state); if (ret) return ret; - ssd130x_state->data_array = kmalloc(ssd130x->width * pages, GFP_KERNEL); + ssd130x_state->data_array = kmalloc(ssd130x->data_array_size, GFP_KERNEL); if (!ssd130x_state->data_array) return -ENOMEM; @@ -899,13 +940,14 @@ static void ssd130x_encoder_atomic_enable(struct drm_encoder *encoder, { struct drm_device *drm = encoder->dev; struct ssd130x_device *ssd130x = drm_to_ssd130x(drm); + const struct ssd130x_funcs *ssd130x_funcs = ssd130x->device_info->funcs; int ret; ret = ssd130x_power_on(ssd130x); if (ret) return; - ret = ssd130x_init(ssd130x); + ret = ssd130x_funcs->init(ssd130x); if (ret) goto power_off; @@ -1191,6 +1233,7 @@ static int ssd130x_get_resources(struct ssd130x_device *ssd130x) struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap) { + const struct ssd130x_funcs *ssd130x_funcs; struct ssd130x_device *ssd130x; struct backlight_device *bl; struct drm_device *drm; @@ -1213,6 +1256,12 @@ struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap) ssd130x_parse_properties(ssd130x); + ssd130x_funcs = ssd130x->device_info->funcs; + + ret = ssd130x_funcs->set_buffer_sizes(ssd130x); + if (ret) + return ERR_PTR(ret); + ret = ssd130x_get_resources(ssd130x); if (ret) return ERR_PTR(ret); diff --git a/drivers/gpu/drm/solomon/ssd130x.h b/drivers/gpu/drm/solomon/ssd130x.h index bbe374453605..5af251676587 100644 --- a/drivers/gpu/drm/solomon/ssd130x.h +++ b/drivers/gpu/drm/solomon/ssd130x.h @@ -20,11 +20,13 @@ #include #include +#include #define SSD130X_DATA 0x40 #define SSD130X_COMMAND 0x80 enum ssd130x_variants { + /* ssd130x family */ SH1106_ID, SSD1305_ID, SSD1306_ID, @@ -42,6 +44,9 @@ struct ssd130x_deviceinfo { bool need_pwm; bool need_chargepump; bool page_mode_only; + + /* Chip family specific operations */ + const struct ssd130x_funcs *funcs; }; struct ssd130x_device { @@ -76,6 +81,12 @@ struct ssd130x_device { u32 col_offset; u32 prechargep1; u32 prechargep2; + /* HW format buffer size */ + u32 data_array_size; + /* Intermediate buffer size */ + u32 buffer_size; + /* Pixel format info for the intermediate buffer */ + const struct drm_format_info *buffer_fi; struct backlight_device *bl_dev; struct pwm_device *pwm; @@ -90,6 +101,19 @@ struct ssd130x_device { u8 page_end; }; +struct ssd130x_funcs { + int (*init)(struct ssd130x_device *ssd130x); + int (*set_buffer_sizes)(struct ssd130x_device *ssd130x); + void (*align_rect)(struct ssd130x_device *ssd130x, struct drm_rect *rect); + int (*update_rect)(struct ssd130x_device *ssd130x, struct drm_rect *rect, + u8 *buf, u8 *data_array); + void (*clear_screen)(struct ssd130x_device *ssd130x, + u8 *data_array); + void (*fmt_convert)(struct iosys_map *dst, const unsigned int *dst_pitch, + const struct iosys_map *src, const struct drm_framebuffer *fb, + const struct drm_rect *clip); +}; + extern const struct ssd130x_deviceinfo ssd130x_variants[]; struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap); From patchwork Thu Oct 12 06:58:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 151790 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2908:b0:403:3b70:6f57 with SMTP id ib8csp1033147vqb; Wed, 11 Oct 2023 23:59:50 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHyWIb4DoLcyzBrFei4V7n6XseysSJxLPIBHDctLDLbttGtNYfta9DFC8hF4qRY2PpUSofR X-Received: by 2002:a92:dcce:0:b0:351:54db:c1bb with SMTP id b14-20020a92dcce000000b0035154dbc1bbmr22645569ilr.0.1697093990681; Wed, 11 Oct 2023 23:59:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697093990; cv=none; d=google.com; s=arc-20160816; b=TyAuHrPTqGkSNLR1FPpPeM+wTc9UMbGwKodp5Tu/S6RTu6GFUL4lGxM0BoFFpPSJ6G xvsLJ/BglI3OAf5gMYsSXFp4V5NkLpuvnAO5pjSP57I4kcuOmoatocRek+tS9NcU/X3i 0MCVOvZIFc8JNlP2NlHJ0pWtSgOdssem9EgjXpuUtG6S2ITNw97fscPpjAQWlDK47A6Q LxLsjle7jPLjR9cm1aI+QaDdQ2Uq2OfF0Ftk+f+L464V5WYZ2cgkh1kBzemqTuIr+mLF blUI14xJ2SpgByJoVj+TEqIkSKXJtvk/9gqjG/SxDHaGeE1FggBJib0I56Kr3o0vmuoU x9EA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=pbsERzeT3jnb5o5YFZrdLE3LWYsb5XXvHLDGk8NAZlo=; fh=+Cc5YLSKttfXhtmctiwfMK3MUVgJXlVjKY13c+ulTek=; b=lGObzaYFBCo8z8kYGTD2fp3k8DiLwUdDlVNfssauDcDbJPACXF8z6RY9CGDQyTo7uj 6UHkGBPOWcPq7FID+9vznN5ywKdft7PbR9iHgqoN9F+IHfotu+oH43bVoJ/cLPngnVPi MYGGhw6wYbi0weX+08v1+v9OHGc10jlhpZRvVLNHxX1fX0KH3zx1resndbRBytHCiSet TmZV7LtgMWODPfMs9cH2/6qn9FyWJB1RYX7ABnJ286/uVvA+9R23yjvQAsnSJPPjyN0G rTMDdlDSDQRt94EbxADcFh/VFGyT6asGEm1l1DZsv/S3id8WINP4OXOUs44ZvSB85yYn iPig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=VK2+7NRs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from morse.vger.email (morse.vger.email. [2620:137:e000::3:1]) by mx.google.com with ESMTPS id c186-20020a6335c3000000b0056569ee3ae6si1456775pga.798.2023.10.11.23.59.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Oct 2023 23:59:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) client-ip=2620:137:e000::3:1; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=VK2+7NRs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by morse.vger.email (Postfix) with ESMTP id 3B73B803C5C2; Wed, 11 Oct 2023 23:59:48 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377661AbjJLG73 (ORCPT + 19 others); Thu, 12 Oct 2023 02:59:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55728 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377633AbjJLG7Q (ORCPT ); Thu, 12 Oct 2023 02:59:16 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 070CED7 for ; Wed, 11 Oct 2023 23:58:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1697093916; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pbsERzeT3jnb5o5YFZrdLE3LWYsb5XXvHLDGk8NAZlo=; b=VK2+7NRsGBx/+gqdrTMm7tTepxI6abJS4MGnQ1FhYTZUu4EYAmuj0yRaHcHuARd/fqRmHS BCInq7bvTySWcXDt4E2PCsXHmyBxXn49gh01McVhL0Zj1WTQNrdi02ZZzSJRfgrGzfSJ5D DwmFRYj7O+1hEdFhTF4oO+A/Fh9ojAA= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-246-iuHLaqC0PJiqjxvFbSfDKg-1; Thu, 12 Oct 2023 02:58:32 -0400 X-MC-Unique: iuHLaqC0PJiqjxvFbSfDKg-1 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-4066e59840eso4360145e9.1 for ; Wed, 11 Oct 2023 23:58:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697093910; x=1697698710; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pbsERzeT3jnb5o5YFZrdLE3LWYsb5XXvHLDGk8NAZlo=; b=QMGsXjgtCVqF+mBsx52cxM3/X/b0K9GpVZQox88bO+T4jgYj4LPyhW/WUfA0yqpwXA 0gXGQ4hbWCwI7hm2lXtq7JpaPKShfY5D1kMo2/GloZTbKMX/DXRT4shL35q51T+foaSf Ql21jhGIYBV2RNe4G4C4YIrSr6nSpK9ZiAsvzx9mzRO9/4+0K1q1hlUSDccpLjL6FQl4 8tj1Xz72UfDVP8G4+LklMgm4+JsCx1ec7MV5ptBTMZsN1nt8aJPMPXHptq21Tgr1o4Qh qifXNksJmqZMie2H3X4KHueogV4QKmczsv7UDWnfFlMeLk1g/muxmse23EhEEGINrO// ghhw== X-Gm-Message-State: AOJu0Yw/d9o3eWxseRrfstcHoKEcFCn73aNu7hRPSDtoqK8CXzX/Jfgs 8/WkHd/1VojYEp1VzhgbAA0hGTaBTlU7MIgZlId4LKlJ4Iz6Z9Oi24SpcUO2j6jDSkfO/DbdwB1 X+4R2kguynMvMHLNGFFhKtbtWa9ZtlzpTVpkSmY7GSLYV+DLcIJPpSSkP+9CkV1CnGMP2HUkiOq ofM8hRg+A= X-Received: by 2002:a05:600c:2a4e:b0:405:7b92:4558 with SMTP id x14-20020a05600c2a4e00b004057b924558mr20487267wme.38.1697093910733; Wed, 11 Oct 2023 23:58:30 -0700 (PDT) X-Received: by 2002:a05:600c:2a4e:b0:405:7b92:4558 with SMTP id x14-20020a05600c2a4e00b004057b924558mr20487243wme.38.1697093910332; Wed, 11 Oct 2023 23:58:30 -0700 (PDT) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id a4-20020a05600c224400b003fe2b081661sm21102290wmm.30.2023.10.11.23.58.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Oct 2023 23:58:29 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Thomas Zimmermann , Conor Dooley , Peter Robinson , Rob Herring , Maxime Ripard , Geert Uytterhoeven , Javier Martinez Canillas , Daniel Vetter , David Airlie , Maarten Lankhorst , dri-devel@lists.freedesktop.org Subject: [PATCH v2 3/6] drm/ssd130x: Rename commands that are shared across chip families Date: Thu, 12 Oct 2023 08:58:12 +0200 Message-ID: <20231012065822.1007930-4-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231012065822.1007930-1-javierm@redhat.com> References: <20231012065822.1007930-1-javierm@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on morse.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (morse.vger.email [0.0.0.0]); Wed, 11 Oct 2023 23:59:48 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1779532028591150950 X-GMAIL-MSGID: 1779532028591150950 There are some commands that are shared between the SSD130x and SSD132x controller families, define these as a common SSD13XX set of commands. Signed-off-by: Javier Martinez Canillas --- (no changes since v1) drivers/gpu/drm/solomon/ssd130x-spi.c | 4 +-- drivers/gpu/drm/solomon/ssd130x.c | 47 +++++++++++++++------------ drivers/gpu/drm/solomon/ssd130x.h | 4 +-- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x-spi.c b/drivers/gpu/drm/solomon/ssd130x-spi.c index 257819bccbc8..89989da705d7 100644 --- a/drivers/gpu/drm/solomon/ssd130x-spi.c +++ b/drivers/gpu/drm/solomon/ssd130x-spi.c @@ -34,10 +34,10 @@ static int ssd130x_spi_write(void *context, const void *data, size_t count) struct spi_device *spi = t->spi; const u8 *reg = data; - if (*reg == SSD130X_COMMAND) + if (*reg == SSD13XX_COMMAND) gpiod_set_value_cansleep(t->dc, 0); - if (*reg == SSD130X_DATA) + if (*reg == SSD13XX_DATA) gpiod_set_value_cansleep(t->dc, 1); /* Remove control byte since is not used in a 4-wire SPI interface */ diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index 08885c33e1a6..4bdc06d6aed4 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -44,18 +44,24 @@ #define SSD130X_PAGE_HEIGHT 8 +/* ssd13xx commands */ +#define SSD13XX_CONTRAST 0x81 +#define SSD13XX_SET_SEG_REMAP 0xa0 +#define SSD13XX_SET_MULTIPLEX_RATIO 0xa8 +#define SSD13XX_DISPLAY_OFF 0xae +#define SSD13XX_DISPLAY_ON 0xaf + +#define SSD13XX_SET_SEG_REMAP_MASK GENMASK(0, 0) +#define SSD13XX_SET_SEG_REMAP_SET(val) FIELD_PREP(SSD13XX_SET_SEG_REMAP_MASK, (val)) + +/* ssd130x commands */ #define SSD130X_PAGE_COL_START_LOW 0x00 #define SSD130X_PAGE_COL_START_HIGH 0x10 #define SSD130X_SET_ADDRESS_MODE 0x20 #define SSD130X_SET_COL_RANGE 0x21 #define SSD130X_SET_PAGE_RANGE 0x22 -#define SSD130X_CONTRAST 0x81 #define SSD130X_SET_LOOKUP_TABLE 0x91 #define SSD130X_CHARGE_PUMP 0x8d -#define SSD130X_SET_SEG_REMAP 0xa0 -#define SSD130X_DISPLAY_OFF 0xae -#define SSD130X_SET_MULTIPLEX_RATIO 0xa8 -#define SSD130X_DISPLAY_ON 0xaf #define SSD130X_START_PAGE_ADDRESS 0xb0 #define SSD130X_SET_COM_SCAN_DIR 0xc0 #define SSD130X_SET_DISPLAY_OFFSET 0xd3 @@ -65,13 +71,12 @@ #define SSD130X_SET_COM_PINS_CONFIG 0xda #define SSD130X_SET_VCOMH 0xdb +/* ssd130x commands accessors */ #define SSD130X_PAGE_COL_START_MASK GENMASK(3, 0) #define SSD130X_PAGE_COL_START_HIGH_SET(val) FIELD_PREP(SSD130X_PAGE_COL_START_MASK, (val) >> 4) #define SSD130X_PAGE_COL_START_LOW_SET(val) FIELD_PREP(SSD130X_PAGE_COL_START_MASK, (val)) #define SSD130X_START_PAGE_ADDRESS_MASK GENMASK(2, 0) #define SSD130X_START_PAGE_ADDRESS_SET(val) FIELD_PREP(SSD130X_START_PAGE_ADDRESS_MASK, (val)) -#define SSD130X_SET_SEG_REMAP_MASK GENMASK(0, 0) -#define SSD130X_SET_SEG_REMAP_SET(val) FIELD_PREP(SSD130X_SET_SEG_REMAP_MASK, (val)) #define SSD130X_SET_COM_SCAN_DIR_MASK GENMASK(3, 3) #define SSD130X_SET_COM_SCAN_DIR_SET(val) FIELD_PREP(SSD130X_SET_COM_SCAN_DIR_MASK, (val)) #define SSD130X_SET_CLOCK_DIV_MASK GENMASK(3, 0) @@ -177,20 +182,20 @@ static inline struct ssd130x_device *drm_to_ssd130x(struct drm_device *drm) } /* - * Helper to write data (SSD130X_DATA) to the device. + * Helper to write data (SSD13XX_DATA) to the device. */ static int ssd130x_write_data(struct ssd130x_device *ssd130x, u8 *values, int count) { - return regmap_bulk_write(ssd130x->regmap, SSD130X_DATA, values, count); + return regmap_bulk_write(ssd130x->regmap, SSD13XX_DATA, values, count); } /* - * Helper to write command (SSD130X_COMMAND). The fist variadic argument + * Helper to write command (SSD13XX_COMMAND). The fist variadic argument * is the command to write and the following are the command options. * - * Note that the ssd130x protocol requires each command and option to be - * written as a SSD130X_COMMAND device register value. That is why a call - * to regmap_write(..., SSD130X_COMMAND, ...) is done for each argument. + * Note that the ssd13xx protocol requires each command and option to be + * written as a SSD13XX_COMMAND device register value. That is why a call + * to regmap_write(..., SSD13XX_COMMAND, ...) is done for each argument. */ static int ssd130x_write_cmd(struct ssd130x_device *ssd130x, int count, /* u8 cmd, u8 option, ... */...) @@ -203,7 +208,7 @@ static int ssd130x_write_cmd(struct ssd130x_device *ssd130x, int count, do { value = va_arg(ap, int); - ret = regmap_write(ssd130x->regmap, SSD130X_COMMAND, value); + ret = regmap_write(ssd130x->regmap, SSD13XX_COMMAND, value); if (ret) goto out_end; } while (--count); @@ -347,13 +352,13 @@ static int ssd130x_init(struct ssd130x_device *ssd130x) int ret; /* Set initial contrast */ - ret = ssd130x_write_cmd(ssd130x, 2, SSD130X_CONTRAST, ssd130x->contrast); + ret = ssd130x_write_cmd(ssd130x, 2, SSD13XX_CONTRAST, ssd130x->contrast); if (ret < 0) return ret; /* Set segment re-map */ - seg_remap = (SSD130X_SET_SEG_REMAP | - SSD130X_SET_SEG_REMAP_SET(ssd130x->seg_remap)); + seg_remap = (SSD13XX_SET_SEG_REMAP | + SSD13XX_SET_SEG_REMAP_SET(ssd130x->seg_remap)); ret = ssd130x_write_cmd(ssd130x, 1, seg_remap); if (ret < 0) return ret; @@ -366,7 +371,7 @@ static int ssd130x_init(struct ssd130x_device *ssd130x) return ret; /* Set multiplex ratio value */ - ret = ssd130x_write_cmd(ssd130x, 2, SSD130X_SET_MULTIPLEX_RATIO, ssd130x->height - 1); + ret = ssd130x_write_cmd(ssd130x, 2, SSD13XX_SET_MULTIPLEX_RATIO, ssd130x->height - 1); if (ret < 0) return ret; @@ -951,7 +956,7 @@ static void ssd130x_encoder_atomic_enable(struct drm_encoder *encoder, if (ret) goto power_off; - ssd130x_write_cmd(ssd130x, 1, SSD130X_DISPLAY_ON); + ssd130x_write_cmd(ssd130x, 1, SSD13XX_DISPLAY_ON); backlight_enable(ssd130x->bl_dev); @@ -970,7 +975,7 @@ static void ssd130x_encoder_atomic_disable(struct drm_encoder *encoder, backlight_disable(ssd130x->bl_dev); - ssd130x_write_cmd(ssd130x, 1, SSD130X_DISPLAY_OFF); + ssd130x_write_cmd(ssd130x, 1, SSD13XX_DISPLAY_OFF); ssd130x_power_off(ssd130x); } @@ -1046,7 +1051,7 @@ static int ssd130x_update_bl(struct backlight_device *bdev) ssd130x->contrast = brightness; - ret = ssd130x_write_cmd(ssd130x, 1, SSD130X_CONTRAST); + ret = ssd130x_write_cmd(ssd130x, 1, SSD13XX_CONTRAST); if (ret < 0) return ret; diff --git a/drivers/gpu/drm/solomon/ssd130x.h b/drivers/gpu/drm/solomon/ssd130x.h index 5af251676587..b508ab98be2f 100644 --- a/drivers/gpu/drm/solomon/ssd130x.h +++ b/drivers/gpu/drm/solomon/ssd130x.h @@ -22,8 +22,8 @@ #include #include -#define SSD130X_DATA 0x40 -#define SSD130X_COMMAND 0x80 +#define SSD13XX_DATA 0x40 +#define SSD13XX_COMMAND 0x80 enum ssd130x_variants { /* ssd130x family */ From patchwork Thu Oct 12 06:58:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 151795 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2908:b0:403:3b70:6f57 with SMTP id ib8csp1034429vqb; Thu, 12 Oct 2023 00:02:18 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE+SZGL1cL7hVjyjuZWQvHCVdPhgAwz53MQQluE7HMNx7TYGOrIMzPYo6R936GkbXVhw/ny X-Received: by 2002:a92:db4f:0:b0:350:f353:4017 with SMTP id w15-20020a92db4f000000b00350f3534017mr21689888ilq.0.1697094138001; Thu, 12 Oct 2023 00:02:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697094137; cv=none; d=google.com; s=arc-20160816; b=qu6OLmnaQ83rO3dtaW1i3e0FHO/GfRUFZskGhTrfR4Z6NoGexs3kxRFhv7UOc7oIiz fsvI7sYSEJh5T1yPV5vESx5xYvm5XDQkKvzSEXYsuPTrplBY6v3EGrMqKfmbJn2UapYB KgS0PCvXlW/1YiV/c1o8h0MkG1GBd3k2vPuqVVcIZeF0XZf9kXYcr99G9G9XBn4z6FjM DbFEJwpa36znzP7sn41qHMhgMD1qfKrVhJA+pCMO9nsfiN/bxQq2sE/lvz6LWvC1PJzD ecchxlQBwOP7uaiBNkJYT9exWIedytigLr3KCbDNSIepH0JUON/9FhfXTtkMJd77exy7 J4Ig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Ua/s/6zVxVPQdvrXk/5nO3FL9GEurLmhO2C94hV695w=; fh=+Cc5YLSKttfXhtmctiwfMK3MUVgJXlVjKY13c+ulTek=; b=LamyyLydc8yFQ4KX6JM8NARh3udEYucjVXghrMkSf4BQ75Lz0gafU8jW0WfJ83kPbP 0xdZYsbsyV05BsMiUJJNQTD6kH8ofBHHkeRT+cMe6eTwshLraCw+Jg5Pi8Kj8J7y0LaJ LNKR9MKKWpHqNduFMoAoOvQ6tTj0Fn6Cr4B4FBKKYAI+RljC3zc7nTvzbjLrbWaY9XFC 7hn643JH8EWhsC7tHMHGR0FX1Q+dm+D0lCrjgRaJV/JkYPEKAmFUgZMErk1bBBtgX0zy UcN7GJ22E0E3ad1WckSCc5u8QFbPA/SxPjTWYjl9po3H2n4r3Dr3u2vfDj+QimWlRuqj Pi2g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=MdTP5CV7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id b5-20020a655785000000b00577680ccf1bsi1536349pgr.709.2023.10.12.00.02.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Oct 2023 00:02:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=MdTP5CV7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 848938091C61; Thu, 12 Oct 2023 00:00:59 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377742AbjJLG7c (ORCPT + 19 others); Thu, 12 Oct 2023 02:59:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48346 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377691AbjJLG7V (ORCPT ); Thu, 12 Oct 2023 02:59:21 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1D676C9 for ; Wed, 11 Oct 2023 23:58:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1697093915; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Ua/s/6zVxVPQdvrXk/5nO3FL9GEurLmhO2C94hV695w=; b=MdTP5CV7U5rwsnxCVDMd9otBtbVowluNz0AkPBy7Qggw9DAGRHut2JiBWNf6FYvqjFud5/ DXGZbu3Rnjqb6u1df8vfeY4az3jkJ4mRldFjeWhJAncskeQeGGxZap9wO32S4AguT3CacE u7yanfq1X/HzcnsvTGvlZjluAkJ/014= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-629-m0-FtfAgNliZnc88vj3Bcg-1; Thu, 12 Oct 2023 02:58:33 -0400 X-MC-Unique: m0-FtfAgNliZnc88vj3Bcg-1 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-40554735995so5725665e9.1 for ; Wed, 11 Oct 2023 23:58:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697093912; x=1697698712; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ua/s/6zVxVPQdvrXk/5nO3FL9GEurLmhO2C94hV695w=; b=YISqj58GJq4dC0wpFVJ+FyoE7F5hqmm7ZH4xRXNSB0PrvaYQryMmk9vc85VJjplqa3 4oFi53UEtDQY3bvZC9047xzKSslXmSVw3OZ/ibPcPl0sakGJS6SgK7HOIjNoyUrK8q5x Vd/bZUR8Lw7pudTTI+/iQ2g4QIbxWr9yF8fhdJqxyQV7Mow6ryf7yn3dtHXxbHMRFRPx l9GwYfLLlWAVrSo7O0IKfZjzPClVsQChZbbL4nYCcY1zjyHf0DjOTWGIitO0fEtOHKbn 3hJzMHXkfefICPouQwyYMXK5SAeIHlOuXzAaP3oOvyK/99AWUekG+zT69nx08ixJkPGh B6EQ== X-Gm-Message-State: AOJu0YxhyNQbTehTnb7cdBMrNX3WTtKrT3jVekRp2vTzUpagFy/snItM IY7T/FvCeTqYkMg8Sk367c7rIQ7f3qmh0NDiSug2pEik5QavSZBDNyiqDC46P5mS8PsWFojobL7 /EDaBwnXxwFj8OwvJOAx/mcHTwhjd7mBU58YK3kCM9glyg6dezhvEBQnEBLgyYKKgEb5sSIR1wC PZDt5Zblg= X-Received: by 2002:a1c:7c0a:0:b0:405:39c1:a98b with SMTP id x10-20020a1c7c0a000000b0040539c1a98bmr20087092wmc.20.1697093912072; Wed, 11 Oct 2023 23:58:32 -0700 (PDT) X-Received: by 2002:a1c:7c0a:0:b0:405:39c1:a98b with SMTP id x10-20020a1c7c0a000000b0040539c1a98bmr20087063wmc.20.1697093911577; Wed, 11 Oct 2023 23:58:31 -0700 (PDT) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id f17-20020a1c6a11000000b004063ea92492sm18631540wmc.22.2023.10.11.23.58.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Oct 2023 23:58:31 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Thomas Zimmermann , Conor Dooley , Peter Robinson , Rob Herring , Maxime Ripard , Geert Uytterhoeven , Javier Martinez Canillas , Daniel Vetter , David Airlie , Maarten Lankhorst , dri-devel@lists.freedesktop.org Subject: [PATCH v2 4/6] drm/ssd130x: Add support for the SSD132x OLED controller family Date: Thu, 12 Oct 2023 08:58:13 +0200 Message-ID: <20231012065822.1007930-5-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231012065822.1007930-1-javierm@redhat.com> References: <20231012065822.1007930-1-javierm@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Thu, 12 Oct 2023 00:00:59 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1779532182989817305 X-GMAIL-MSGID: 1779532182989817305 The Solomon SSD132x controllers (such as the SSD1322, SSD1325 and SSD1327) are used by 16 grayscale dot matrix OLED panels, extend the driver to also support this chip family. Signed-off-by: Javier Martinez Canillas --- Changes in v2: - Align the rectangle to the segment width (Geert Uytterhoeven). drivers/gpu/drm/solomon/Kconfig | 12 +- drivers/gpu/drm/solomon/ssd130x-i2c.c | 17 +- drivers/gpu/drm/solomon/ssd130x-spi.c | 21 ++- drivers/gpu/drm/solomon/ssd130x.c | 234 +++++++++++++++++++++++++- drivers/gpu/drm/solomon/ssd130x.h | 4 + 5 files changed, 275 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/solomon/Kconfig b/drivers/gpu/drm/solomon/Kconfig index e170716d976b..c3ee956c2bb9 100644 --- a/drivers/gpu/drm/solomon/Kconfig +++ b/drivers/gpu/drm/solomon/Kconfig @@ -1,31 +1,31 @@ config DRM_SSD130X - tristate "DRM support for Solomon SSD130x OLED displays" + tristate "DRM support for Solomon SSD13xx OLED displays" depends on DRM && MMU select BACKLIGHT_CLASS_DEVICE select DRM_GEM_SHMEM_HELPER select DRM_KMS_HELPER help - DRM driver for the SSD130x Solomon and SINO WEALTH SH110x OLED + DRM driver for the SSD13xx Solomon and SINO WEALTH SH110x OLED controllers. This is only for the core driver, a driver for the appropriate bus transport in your chip also must be selected. If M is selected the module will be called ssd130x. config DRM_SSD130X_I2C - tristate "DRM support for Solomon SSD130x OLED displays (I2C bus)" + tristate "DRM support for Solomon SSD13xx OLED displays (I2C bus)" depends on DRM_SSD130X && I2C select REGMAP_I2C help - Say Y here if the SSD130x or SH110x OLED display is connected via + Say Y here if the SSD13xx or SH110x OLED display is connected via I2C bus. If M is selected the module will be called ssd130x-i2c. config DRM_SSD130X_SPI - tristate "DRM support for Solomon SSD130X OLED displays (SPI bus)" + tristate "DRM support for Solomon SSD13xx OLED displays (SPI bus)" depends on DRM_SSD130X && SPI select REGMAP help - Say Y here if the SSD130x OLED display is connected via SPI bus. + Say Y here if the SSD13xx OLED display is connected via SPI bus. If M is selected the module will be called ssd130x-spi. diff --git a/drivers/gpu/drm/solomon/ssd130x-i2c.c b/drivers/gpu/drm/solomon/ssd130x-i2c.c index 8f89b89d553f..f2ccab9c06d9 100644 --- a/drivers/gpu/drm/solomon/ssd130x-i2c.c +++ b/drivers/gpu/drm/solomon/ssd130x-i2c.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * DRM driver for Solomon SSD130x OLED displays (I2C bus) + * DRM driver for Solomon SSD13xx OLED displays (I2C bus) * * Copyright 2022 Red Hat Inc. * Author: Javier Martinez Canillas @@ -14,7 +14,7 @@ #include "ssd130x.h" #define DRIVER_NAME "ssd130x-i2c" -#define DRIVER_DESC "DRM driver for Solomon SSD130x OLED displays (I2C)" +#define DRIVER_DESC "DRM driver for Solomon SSD13xx OLED displays (I2C)" static const struct regmap_config ssd130x_i2c_regmap_config = { .reg_bits = 8, @@ -92,6 +92,19 @@ static const struct of_device_id ssd130x_of_match[] = { .compatible = "solomon,ssd1309fb-i2c", .data = &ssd130x_variants[SSD1309_ID], }, + /* ssd132x family */ + { + .compatible = "solomon,ssd1322", + .data = &ssd130x_variants[SSD1322_ID], + }, + { + .compatible = "solomon,ssd1325", + .data = &ssd130x_variants[SSD1325_ID], + }, + { + .compatible = "solomon,ssd1327", + .data = &ssd130x_variants[SSD1327_ID], + }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, ssd130x_of_match); diff --git a/drivers/gpu/drm/solomon/ssd130x-spi.c b/drivers/gpu/drm/solomon/ssd130x-spi.c index 89989da705d7..84e035a7ab3f 100644 --- a/drivers/gpu/drm/solomon/ssd130x-spi.c +++ b/drivers/gpu/drm/solomon/ssd130x-spi.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * DRM driver for Solomon SSD130X OLED displays (SPI bus) + * DRM driver for Solomon SSD13xx OLED displays (SPI bus) * * Copyright 2022 Red Hat Inc. * Authors: Javier Martinez Canillas @@ -11,7 +11,7 @@ #include "ssd130x.h" #define DRIVER_NAME "ssd130x-spi" -#define DRIVER_DESC "DRM driver for Solomon SSD130X OLED displays (SPI)" +#define DRIVER_DESC "DRM driver for Solomon SSD13xx OLED displays (SPI)" struct ssd130x_spi_transport { struct spi_device *spi; @@ -129,6 +129,19 @@ static const struct of_device_id ssd130x_of_match[] = { .compatible = "solomon,ssd1309", .data = &ssd130x_variants[SSD1309_ID], }, + /* ssd132x family */ + { + .compatible = "solomon,ssd1322", + .data = &ssd130x_variants[SSD1322_ID], + }, + { + .compatible = "solomon,ssd1325", + .data = &ssd130x_variants[SSD1325_ID], + }, + { + .compatible = "solomon,ssd1327", + .data = &ssd130x_variants[SSD1327_ID], + }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, ssd130x_of_match); @@ -149,6 +162,10 @@ static const struct spi_device_id ssd130x_spi_table[] = { { "ssd1306", SSD1306_ID }, { "ssd1307", SSD1307_ID }, { "ssd1309", SSD1309_ID }, + /* ssd132x family */ + { "ssd1322", SSD1322_ID }, + { "ssd1325", SSD1325_ID }, + { "ssd1327", SSD1327_ID }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(spi, ssd130x_spi_table); diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index 4bdc06d6aed4..94a6a6ebd6e8 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * DRM driver for Solomon SSD130x OLED displays + * DRM driver for Solomon SSD13xx OLED displays * * Copyright 2022 Red Hat Inc. * Author: Javier Martinez Canillas @@ -37,13 +37,15 @@ #include "ssd130x.h" #define DRIVER_NAME "ssd130x" -#define DRIVER_DESC "DRM driver for Solomon SSD130x OLED displays" +#define DRIVER_DESC "DRM driver for Solomon SSD13xx OLED displays" #define DRIVER_DATE "20220131" #define DRIVER_MAJOR 1 #define DRIVER_MINOR 0 #define SSD130X_PAGE_HEIGHT 8 +#define SSD132X_SEGMENT_WIDTH 2 + /* ssd13xx commands */ #define SSD13XX_CONTRAST 0x81 #define SSD13XX_SET_SEG_REMAP 0xa0 @@ -99,10 +101,29 @@ #define SSD130X_SET_AREA_COLOR_MODE_ENABLE 0x1e #define SSD130X_SET_AREA_COLOR_MODE_LOW_POWER 0x05 +/* ssd132x commands */ +#define SSD132X_SET_COL_RANGE 0x15 +#define SSD132X_SET_DEACTIVATE_SCROLL 0x2e +#define SSD132X_SET_ROW_RANGE 0x75 +#define SSD132X_SET_DISPLAY_START 0xa1 +#define SSD132X_SET_DISPLAY_OFFSET 0xa2 +#define SSD132X_SET_DISPLAY_NORMAL 0xa4 +#define SSD132X_SET_FUNCTION_SELECT_A 0xab +#define SSD132X_SET_PHASE_LENGTH 0xb1 +#define SSD132X_SET_CLOCK_FREQ 0xb3 +#define SSD132X_SET_GPIO 0xb5 +#define SSD132X_SET_PRECHARGE_PERIOD 0xb6 +#define SSD132X_SET_GRAY_SCALE_TABLE 0xb8 +#define SSD132X_SELECT_DEFAULT_TABLE 0xb9 +#define SSD132X_SET_PRECHARGE_VOLTAGE 0xbc +#define SSD130X_SET_VCOMH_VOLTAGE 0xbe +#define SSD132X_SET_FUNCTION_SELECT_B 0xd5 + #define MAX_CONTRAST 255 enum ssd130x_family_ids { - SSD130X_FAMILY + SSD130X_FAMILY, + SSD132X_FAMILY }; static const struct ssd130x_funcs ssd130x_family_funcs[]; @@ -150,6 +171,22 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = { .default_width = 128, .default_height = 64, .funcs = &ssd130x_family_funcs[SSD130X_FAMILY], + }, + /* ssd132x family */ + [SSD1322_ID] = { + .default_width = 480, + .default_height = 128, + .funcs = &ssd130x_family_funcs[SSD132X_FAMILY], + }, + [SSD1325_ID] = { + .default_width = 128, + .default_height = 80, + .funcs = &ssd130x_family_funcs[SSD132X_FAMILY], + }, + [SSD1327_ID] = { + .default_width = 128, + .default_height = 128, + .funcs = &ssd130x_family_funcs[SSD132X_FAMILY], } }; EXPORT_SYMBOL_NS_GPL(ssd130x_variants, DRM_SSD130X); @@ -643,6 +680,189 @@ static void ssd130x_clear_screen(struct ssd130x_device *ssd130x, u8 *data_array) } } +static int ssd132x_init(struct ssd130x_device *ssd130x) +{ + int ret; + + /* Set initial contrast */ + ret = ssd130x_write_cmd(ssd130x, 2, SSD13XX_CONTRAST, 0x80); + if (ret < 0) + return ret; + + /* Set column start and end */ + ret = ssd130x_write_cmd(ssd130x, 3, SSD132X_SET_COL_RANGE, 0x00, + ssd130x->width / SSD132X_SEGMENT_WIDTH - 1); + if (ret < 0) + return ret; + + /* Set row start and end */ + ret = ssd130x_write_cmd(ssd130x, 3, SSD132X_SET_ROW_RANGE, 0x00, ssd130x->height - 1); + if (ret < 0) + return ret; + /* + * Horizontal Address Increment + * Re-map for Column Address, Nibble and COM + * COM Split Odd Even + */ + ret = ssd130x_write_cmd(ssd130x, 2, SSD13XX_SET_SEG_REMAP, 0x53); + if (ret < 0) + return ret; + + /* Set display start and offset */ + ret = ssd130x_write_cmd(ssd130x, 2, SSD132X_SET_DISPLAY_START, 0x00); + if (ret < 0) + return ret; + + ret = ssd130x_write_cmd(ssd130x, 2, SSD132X_SET_DISPLAY_OFFSET, 0x00); + if (ret < 0) + return ret; + + /* Set display mode normal */ + ret = ssd130x_write_cmd(ssd130x, 1, SSD132X_SET_DISPLAY_NORMAL); + if (ret < 0) + return ret; + + /* Set multiplex ratio value */ + ret = ssd130x_write_cmd(ssd130x, 2, SSD13XX_SET_MULTIPLEX_RATIO, ssd130x->height - 1); + if (ret < 0) + return ret; + + /* Set phase length */ + ret = ssd130x_write_cmd(ssd130x, 2, SSD132X_SET_PHASE_LENGTH, 0x55); + if (ret < 0) + return ret; + + /* Select default linear gray scale table */ + ret = ssd130x_write_cmd(ssd130x, 1, SSD132X_SELECT_DEFAULT_TABLE); + if (ret < 0) + return ret; + + /* Set clock frequency */ + ret = ssd130x_write_cmd(ssd130x, 2, SSD132X_SET_CLOCK_FREQ, 0x01); + if (ret < 0) + return ret; + + /* Enable internal VDD regulator */ + ret = ssd130x_write_cmd(ssd130x, 2, SSD132X_SET_FUNCTION_SELECT_A, 0x1); + if (ret < 0) + return ret; + + /* Set pre-charge period */ + ret = ssd130x_write_cmd(ssd130x, 2, SSD132X_SET_PRECHARGE_PERIOD, 0x01); + if (ret < 0) + return ret; + + /* Set pre-charge voltage */ + ret = ssd130x_write_cmd(ssd130x, 2, SSD132X_SET_PRECHARGE_VOLTAGE, 0x08); + if (ret < 0) + return ret; + + /* Set VCOMH voltage */ + ret = ssd130x_write_cmd(ssd130x, 2, SSD130X_SET_VCOMH_VOLTAGE, 0x07); + if (ret < 0) + return ret; + + /* Enable second pre-charge and internal VSL */ + ret = ssd130x_write_cmd(ssd130x, 2, SSD132X_SET_FUNCTION_SELECT_B, 0x62); + if (ret < 0) + return ret; + + return 0; +} + +static int ssd132x_set_buffer_sizes(struct ssd130x_device *ssd130x) +{ + unsigned int buffer_pitch; + unsigned int columns = DIV_ROUND_UP(ssd130x->width, SSD132X_SEGMENT_WIDTH); + unsigned int rows = ssd130x->height; + + ssd130x->data_array_size = columns * rows; + + ssd130x->buffer_fi = drm_format_info(DRM_FORMAT_R8); + + if (!ssd130x->buffer_fi) + return -EINVAL; + + buffer_pitch = drm_format_info_min_pitch(ssd130x->buffer_fi, 0, ssd130x->width); + ssd130x->buffer_size = buffer_pitch * ssd130x->height; + + return 0; +} + +static void ssd132x_align_rect(struct ssd130x_device *ssd130x, + struct drm_rect *rect) +{ + /* Align x to display segment boundaries */ + rect->x1 = round_down(rect->x1, SSD132X_SEGMENT_WIDTH); + rect->x2 = min_t(unsigned int, round_up(rect->x2, SSD132X_SEGMENT_WIDTH), + ssd130x->width); +} + +static int ssd132x_update_rect(struct ssd130x_device *ssd130x, + struct drm_rect *rect, u8 *buf, + u8 *data_array) +{ + unsigned int x = rect->x1; + unsigned int y = rect->y1; + unsigned int segment_width = SSD132X_SEGMENT_WIDTH; + unsigned int width = drm_rect_width(rect); + unsigned int height = drm_rect_height(rect); + unsigned int columns = DIV_ROUND_UP(width, segment_width); + unsigned int rows = height; + struct drm_device *drm = &ssd130x->drm; + u32 array_idx = 0; + int ret, i, j; + + drm_WARN_ONCE(drm, x % segment_width != 0, "x must be aligned to screen segment\n"); + + /* + * The screen is divided in Segment and Common outputs, where + * COM0 to COM[N - 1] are the rows and SEG0 to SEG[M - 1] are + * the columns. + * + * Each Segment has a 4-bit pixel and each Common output has a + * row of pixels. When using the (default) horizontal address + * increment mode, each byte of data sent to the controller has + * two Segments (e.g: SEG0 and SEG1) that are stored in the lower + * and higher nibbles of a single byte representing one column. + * That is, the first byte are SEG0 (D0[3:0]) and SEG1 (D0[7:4]), + * the second byte are SEG2 (D1[3:0]) and SEG3 (D1[7:4]) and so on. + */ + + /* Set column start and end */ + ret = ssd130x_write_cmd(ssd130x, 3, SSD132X_SET_COL_RANGE, x / segment_width, columns - 1); + if (ret < 0) + return ret; + + /* Set row start and end */ + ret = ssd130x_write_cmd(ssd130x, 3, SSD132X_SET_ROW_RANGE, y, rows - 1); + if (ret < 0) + return ret; + + for (i = 0; i < height; i++) { + /* Process pair of pixels and combine them into a single byte */ + for (j = 0; j < width; j += segment_width) { + u8 n1 = buf[i * width + j]; + u8 n2 = buf[i * width + j + 1]; + + data_array[array_idx++] = (n2 << 4) | n1; + } + } + + /* Write out update in one go since horizontal addressing mode is used */ + ret = ssd130x_write_data(ssd130x, data_array, columns * rows); + + return ret; +} + +static void ssd132x_clear_screen(struct ssd130x_device *ssd130x, u8 *data_array) +{ + memset(data_array, 0, ssd130x->data_array_size); + + /* Write out update in one go since horizontal addressing mode is used */ + ssd130x_write_data(ssd130x, data_array, ssd130x->data_array_size); +} + static const struct ssd130x_funcs ssd130x_family_funcs[] = { [SSD130X_FAMILY] = { .init = ssd130x_init, @@ -652,6 +872,14 @@ static const struct ssd130x_funcs ssd130x_family_funcs[] = { .clear_screen = ssd130x_clear_screen, .fmt_convert = drm_fb_xrgb8888_to_mono, }, + [SSD132X_FAMILY] = { + .init = ssd132x_init, + .set_buffer_sizes = ssd132x_set_buffer_sizes, + .align_rect = ssd132x_align_rect, + .update_rect = ssd132x_update_rect, + .clear_screen = ssd132x_clear_screen, + .fmt_convert = drm_fb_xrgb8888_to_gray8, + } }; static int ssd130x_fb_blit_rect(struct drm_framebuffer *fb, diff --git a/drivers/gpu/drm/solomon/ssd130x.h b/drivers/gpu/drm/solomon/ssd130x.h index b508ab98be2f..e93288b5a9c2 100644 --- a/drivers/gpu/drm/solomon/ssd130x.h +++ b/drivers/gpu/drm/solomon/ssd130x.h @@ -32,6 +32,10 @@ enum ssd130x_variants { SSD1306_ID, SSD1307_ID, SSD1309_ID, + /* ssd132x family */ + SSD1322_ID, + SSD1325_ID, + SSD1327_ID, NR_SSD130X_VARIANTS }; From patchwork Thu Oct 12 06:58:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 151793 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2908:b0:403:3b70:6f57 with SMTP id ib8csp1034284vqb; Thu, 12 Oct 2023 00:02:00 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEwxF5oJ5vlyFLSwwgFMJ2qyY00SQqBSDNNjdyE8e4XNOay3dMI7iBqPkFkeUUOUmBSKGlx X-Received: by 2002:a17:902:e74b:b0:1c7:1eed:10f2 with SMTP id p11-20020a170902e74b00b001c71eed10f2mr26280083plf.2.1697094119896; Thu, 12 Oct 2023 00:01:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697094119; cv=none; d=google.com; s=arc-20160816; b=ynXnLeAwqhizMiIlkoJDdXi6g/w0S/TEOqM9C2B2mx7IF+2FXtCHHTdd2JujpHNc46 qzYzdkPp4e9Q0HaiGurB6myekVDIaksDoL/s1RWnxr65ejGZk+jORnlAUU7pdZ09Blot 6K5OPEwFXiI/pobGunLDOBvOJEsrqhfyITMBhzC/RofrdWI024aR6bwegKLJs4RpAM2T bho2QkV05pJ0pbmYB1WKgvWByoykZqVri+nUF2s/aSnKaP/w5gxz8+wJNOCwX7ILdltw TQoBos/QA+UrDyWK6bofBys8Di4GEaae++iirgDHELeaAwI2jXuSPRNBMrzIPIwtQrCn fM0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=jYJU3nXdqvdbwcO4hjpDrp2WLD9hkGzJJegB/jryqJY=; fh=VXwNf6PNTJYPTy/42XFFoocdKSBTXUd49MKzcr70jb0=; b=IzwRX8b1dKmRsjDKcwGfrgFcBfuoWTQKgBqP3jydAllxMcdw2TI2FGwU4stKuLGXkN 7mZU1mbRO4r7AbmJBlV4yMS/b4HM0WAjWuRmz4dZxJQmih7fLtVj5tCreNWP/cuqXPAH e2m2iZdhREm6HvsBGiwMPxNYqxY/NzO7rpCeg2ZsSOWFJLCeccYJb+puMSt3lJViKUqY omvuZiuShrjhPPigt0hiGyHvnJPSFVbOerAycisjRd1o7cqbuSNZ+XbqbVtUbuYa91oo IqEoYnEeJRC65QrFClpQ0WHlkiMAZZ267izUNVdPZmlCgWbhJAMvQS0vKzTG/wTpoCnG Hwcw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=FH0u6JkX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id jn13-20020a170903050d00b001c5fa46f0e6si1505921plb.190.2023.10.12.00.01.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Oct 2023 00:01:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=FH0u6JkX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id D306E808D686; Thu, 12 Oct 2023 00:00:31 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347100AbjJLG74 (ORCPT + 19 others); Thu, 12 Oct 2023 02:59:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41310 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377672AbjJLG7a (ORCPT ); Thu, 12 Oct 2023 02:59:30 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E42D5C0 for ; Wed, 11 Oct 2023 23:58:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1697093926; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jYJU3nXdqvdbwcO4hjpDrp2WLD9hkGzJJegB/jryqJY=; b=FH0u6JkXowLLQuqWh7v8YLqvbcQrajCwJIa2Ldg/zLYVKl4MoKRk1UGkdv/DO4y79b0rLg kJ3ZhnwTJJvtXuuSbIc42O5/6KSE8DKWodW53OlkUWqhOPDv7ieNKVMcQOETXO8np5eT8o +OL5MgJJkDDD8LDSdjjVI9nGvWWMpR8= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-518-hsWQRJVxPZuojSn8iqB8aQ-1; Thu, 12 Oct 2023 02:58:35 -0400 X-MC-Unique: hsWQRJVxPZuojSn8iqB8aQ-1 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-405917470e8so5183085e9.1 for ; Wed, 11 Oct 2023 23:58:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697093913; x=1697698713; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jYJU3nXdqvdbwcO4hjpDrp2WLD9hkGzJJegB/jryqJY=; b=QlR9rqrrE2TW4XtnlgLLRPSvECEWxmTSNfqWb0h9bBXenZzKjN6Q3mpQ3PXU1qTbmP gxhqtXM34rUef1R4UDXLX0mQlJgoEeBdm3xrX5mm3cFgKIdS0o/0DKnk7SZQi3+0ogun lu5wSHT8JD5WfO/KcPZjAY3Yk/F3I7ucEFsK3q9l/ti93rBIGy9vVKdHI1X9v4hkZ/pS hZGSPHVwf4QwVqVhZvhhrsBE66K/5m4lmN8K+K+//f+hlmI6o9PqYBhKYxOTGopoDkL7 YBaHDTPoNI3rcgPqvQyOXuZhchfjjv60yiPUpGp2BRn4Anhg2C/rq/T+P+W125lv7YjM +GGg== X-Gm-Message-State: AOJu0YxkZf2cLYCRqX2WC2vij9s4+q2MR0O3yAtrm9AjofKT1Lmr+qxc 7i+Yj5mGibvUd7zLliNuNP4w/LTxPSui53gCCd2AJOgmnEvKNN/fGyXtdDG6fT3pXmSAQNGPEs9 gZl59klmFeu92wd0naGbNwh9j6TJn8ge2bN9YoRAbc1qUQKbz0UFido/YjQibZNqRI7DLxe2DYe Nyh5YS8Qc= X-Received: by 2002:a1c:7c17:0:b0:401:bcb4:f133 with SMTP id x23-20020a1c7c17000000b00401bcb4f133mr20319567wmc.22.1697093913629; Wed, 11 Oct 2023 23:58:33 -0700 (PDT) X-Received: by 2002:a1c:7c17:0:b0:401:bcb4:f133 with SMTP id x23-20020a1c7c17000000b00401bcb4f133mr20319536wmc.22.1697093913204; Wed, 11 Oct 2023 23:58:33 -0700 (PDT) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id q5-20020a7bce85000000b0040596352951sm21102422wmj.5.2023.10.11.23.58.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Oct 2023 23:58:32 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Thomas Zimmermann , Conor Dooley , Peter Robinson , Rob Herring , Maxime Ripard , Geert Uytterhoeven , Javier Martinez Canillas , Conor Dooley , Daniel Vetter , David Airlie , Krzysztof Kozlowski , Maarten Lankhorst , Rob Herring , devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v2 5/6] dt-bindings: display: Split common Solomon properties in their own schema Date: Thu, 12 Oct 2023 08:58:14 +0200 Message-ID: <20231012065822.1007930-6-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231012065822.1007930-1-javierm@redhat.com> References: <20231012065822.1007930-1-javierm@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Thu, 12 Oct 2023 00:00:31 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1779532163723928518 X-GMAIL-MSGID: 1779532163723928518 There are DT properties that can be shared across different Solomon OLED Display Controller families. Split them into a separate common schema to avoid these properties to be duplicated in different DT bindings schemas. Suggested-by: Rob Herring Signed-off-by: Javier Martinez Canillas Reviewed-by: Rob Herring --- (no changes since v1) .../bindings/display/solomon,ssd-common.yaml | 42 +++++++++++++++++++ .../bindings/display/solomon,ssd1307fb.yaml | 28 +------------ MAINTAINERS | 1 + 3 files changed, 44 insertions(+), 27 deletions(-) create mode 100644 Documentation/devicetree/bindings/display/solomon,ssd-common.yaml diff --git a/Documentation/devicetree/bindings/display/solomon,ssd-common.yaml b/Documentation/devicetree/bindings/display/solomon,ssd-common.yaml new file mode 100644 index 000000000000..677fd2b90960 --- /dev/null +++ b/Documentation/devicetree/bindings/display/solomon,ssd-common.yaml @@ -0,0 +1,42 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/solomon,ssd-common.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Common properties for Solomon OLED Display Controllers + +maintainers: + - Javier Martinez Canillas + +properties: + reg: + maxItems: 1 + + reset-gpios: + maxItems: 1 + + # Only required for SPI + dc-gpios: + description: + GPIO connected to the controller's D/C# (Data/Command) pin, + that is needed for 4-wire SPI to tell the controller if the + data sent is for a command register or the display data RAM + maxItems: 1 + + solomon,height: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + Height in pixel of the screen driven by the controller. + The default value is controller-dependent. + + solomon,width: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + Width in pixel of the screen driven by the controller. + The default value is controller-dependent. + +allOf: + - $ref: /schemas/spi/spi-peripheral-props.yaml# + +additionalProperties: true \ No newline at end of file diff --git a/Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml b/Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml index 20e2bd15d4d2..3afbb52d1b7f 100644 --- a/Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml +++ b/Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml @@ -27,38 +27,12 @@ properties: - solomon,ssd1307 - solomon,ssd1309 - reg: - maxItems: 1 - pwms: maxItems: 1 - reset-gpios: - maxItems: 1 - - # Only required for SPI - dc-gpios: - description: - GPIO connected to the controller's D/C# (Data/Command) pin, - that is needed for 4-wire SPI to tell the controller if the - data sent is for a command register or the display data RAM - maxItems: 1 - vbat-supply: description: The supply for VBAT - solomon,height: - $ref: /schemas/types.yaml#/definitions/uint32 - description: - Height in pixel of the screen driven by the controller. - The default value is controller-dependent. - - solomon,width: - $ref: /schemas/types.yaml#/definitions/uint32 - description: - Width in pixel of the screen driven by the controller. - The default value is controller-dependent. - solomon,page-offset: $ref: /schemas/types.yaml#/definitions/uint32 default: 1 @@ -148,7 +122,7 @@ required: - reg allOf: - - $ref: /schemas/spi/spi-peripheral-props.yaml# + - $ref: solomon,ssd-common.yaml# - if: properties: diff --git a/MAINTAINERS b/MAINTAINERS index 46ca5c4affdb..4a3baf970839 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -6732,6 +6732,7 @@ DRM DRIVER FOR SOLOMON SSD130X OLED DISPLAYS M: Javier Martinez Canillas S: Maintained T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/solomon,ssd-common.yaml F: Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml F: drivers/gpu/drm/solomon/ssd130x* From patchwork Thu Oct 12 06:58:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 151794 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2908:b0:403:3b70:6f57 with SMTP id ib8csp1034428vqb; Thu, 12 Oct 2023 00:02:18 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFohTVo5GIRRDEZ3mEKi6/wI+FdXJdlQkAva7ppegXNQNy0SzwKVL5ZqTkxTSekHIa8GK2O X-Received: by 2002:a05:6359:219:b0:14a:cca4:5601 with SMTP id ej25-20020a056359021900b0014acca45601mr18016465rwb.3.1697094137840; Thu, 12 Oct 2023 00:02:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697094137; cv=none; d=google.com; s=arc-20160816; b=HCchrjhnO4aSKi2iH4vDdAPBvEznxPW5XskHo54xl/fKiVEkS4hGs04uROT7ICuNrs fReyngM9ptcNajB86eutSNVKnHSPe1sEY6PYxjBd0ek/pkDVm4xD6XRolujiHbvHZG5y AqTW/n1/f+//vdE/EGaJzMUO/6jmZcttn/Q8ZRkKdv4VhkGPXROMUN07z87hF1Lngwsu SHtI3gqEH6tIW2+ODNnb2yEz9BbLvhwv3zHAFMuHKlRbCgHZfv4o+cufpx6Fu4dY8+H5 YQ9yqw9KJ1I+rAxjvpqfaWfCcKOg5qjrfKNtazsrvPLMK56JXOSR2q0QaZ7c951Zp/s3 tOBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=HDry+FhkIeT/NRPHa1BVdFItba2J4DOxCsv4jEZYJSQ=; fh=VXwNf6PNTJYPTy/42XFFoocdKSBTXUd49MKzcr70jb0=; b=a8E6H2Opj2gV3Oo6fxtxiviryinE0eH91OhelO1MC1i2imWIEgXrN5NvDeb4gG+Tnh 1aZH2+fXDTt7FOPMKwJfs0ZRBql57j7thzt+2wKrFJPBI3ODs/TTkIM2cs+xTAfNkTD7 62AoTC0C9W63sDGw74sZkBL6NZnj5NkvnzTOAuY98M2YnrTnffHVAZ32z3OsYb+pQNzJ BtBLl2/DGBEVFexIRkN6EOKd4u4B/TTLRcDswPDuSesUoKK0wy8tR1/ElBPPnDV9XXvj ml3dcrSE3VWF2vP/IgOpyl/hhbI2T1W6s0Hup5YHbI56RhJL+68q7XsC14bqNe7qlNFZ UMcw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=WqtLo3q7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id p13-20020a056a000a0d00b0068fb6fc3ff1si14595813pfh.209.2023.10.12.00.02.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Oct 2023 00:02:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=WqtLo3q7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 0DDEB8075948; Thu, 12 Oct 2023 00:00:56 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377868AbjJLG7g (ORCPT + 19 others); Thu, 12 Oct 2023 02:59:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55708 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377695AbjJLG7X (ORCPT ); Thu, 12 Oct 2023 02:59:23 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C7642DB for ; Wed, 11 Oct 2023 23:58:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1697093918; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HDry+FhkIeT/NRPHa1BVdFItba2J4DOxCsv4jEZYJSQ=; b=WqtLo3q7RDWC9yzz9ohRQTVKpV1zSkmyqhya8qOoFPSoBOoM1oE95C/zSA4tKz+UsGd6p+ 0oaOebi7x0YvsLVfPuju86D0wNG339dhoZM5J3T9/dITWp9KO6GGMzTBa0uCqcdGN/gs94 Hl4N/RSB5R7AR1kiwlIy/FpmXZUdH1o= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-662-kGnHv1GMNOWiC_mhWFR4IA-1; Thu, 12 Oct 2023 02:58:36 -0400 X-MC-Unique: kGnHv1GMNOWiC_mhWFR4IA-1 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-40540179bcdso6143225e9.2 for ; Wed, 11 Oct 2023 23:58:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697093914; x=1697698714; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HDry+FhkIeT/NRPHa1BVdFItba2J4DOxCsv4jEZYJSQ=; b=SyB1jxMazZIshFo7GnVcpVo9tFwGMOiq71uzUXPZwvNzjA7w2RcGuIB2px8R+2rDcc AZg3yPaq4I68SPeFRqyms7ZgPH1b4WCQHk2cVm5j7O206I/rbRVf1Luy3W9PTvZkToly dnx2rRKLybWoyLFDplVrLuUIPWyfgBv9rumBL7mLpGEsiPxbWrQM2Nl4baZegsaX9whp /c6BN9poenWOC6X8teQqxatvEi7WdYQtxJ/XLn66a/R/wYrtVRmD5VeC9sl5uFAOkjKG v0crgH4Wqj1HH+8rKh1fFIyS3XRmF8mGoRVaqxJlHzgvRGukkxKc3phrEyo3bGhELq/G FCkg== X-Gm-Message-State: AOJu0Yw0X/n9v7OtqhKrZL57Qodx/9zFE+bd18FltalwS+qCjeH90L5p ZXrlDu2DU/5cpi1458f+BS8ahfdO/vFPnYyGrrudow1uiVGFEoDqdiuTXSWZ6pRC9qdlFDv9opf jVyv3rsDvyJQEiIR3GCGywCgDAiVJxzmZtslHnUYe4f4uZrVvCaNNZaveOdT9o/DJlHUCQgWCua EwhsML3LI= X-Received: by 2002:a05:600c:c8b:b0:401:b2c7:34aa with SMTP id fj11-20020a05600c0c8b00b00401b2c734aamr20358197wmb.33.1697093914626; Wed, 11 Oct 2023 23:58:34 -0700 (PDT) X-Received: by 2002:a05:600c:c8b:b0:401:b2c7:34aa with SMTP id fj11-20020a05600c0c8b00b00401b2c734aamr20358177wmb.33.1697093914403; Wed, 11 Oct 2023 23:58:34 -0700 (PDT) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id 6-20020a05600c22c600b0040303a9965asm21113713wmg.40.2023.10.11.23.58.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Oct 2023 23:58:34 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Thomas Zimmermann , Conor Dooley , Peter Robinson , Rob Herring , Maxime Ripard , Geert Uytterhoeven , Javier Martinez Canillas , Conor Dooley , Daniel Vetter , David Airlie , Krzysztof Kozlowski , Maarten Lankhorst , Rob Herring , devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v2 6/6] dt-bindings: display: Add SSD132x OLED controllers Date: Thu, 12 Oct 2023 08:58:15 +0200 Message-ID: <20231012065822.1007930-7-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231012065822.1007930-1-javierm@redhat.com> References: <20231012065822.1007930-1-javierm@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Thu, 12 Oct 2023 00:00:56 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1779532182427975155 X-GMAIL-MSGID: 1779532182427975155 Add a Device Tree binding schema for the OLED panels based on the Solomon SSD132x family of controllers. Signed-off-by: Javier Martinez Canillas Reviewed-by: Rob Herring --- Changes in v2: - Remove unnecessary 'oneOf' in the SSD132x DT binding schema (Conor Dooley). - Remove unused DT nodes labels in the binding schema examples (Conor Dooley). - Split out common Solomon properties into a separate schema (Rob Herring). .../bindings/display/solomon,ssd132x.yaml | 89 +++++++++++++++++++ MAINTAINERS | 2 +- 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/display/solomon,ssd132x.yaml diff --git a/Documentation/devicetree/bindings/display/solomon,ssd132x.yaml b/Documentation/devicetree/bindings/display/solomon,ssd132x.yaml new file mode 100644 index 000000000000..0aa41bd9ddca --- /dev/null +++ b/Documentation/devicetree/bindings/display/solomon,ssd132x.yaml @@ -0,0 +1,89 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/solomon,ssd132x.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Solomon SSD132x OLED Display Controllers + +maintainers: + - Javier Martinez Canillas + +properties: + compatible: + - enum: + - solomon,ssd1322 + - solomon,ssd1325 + - solomon,ssd1327 + +required: + - compatible + - reg + +allOf: + - $ref: solomon,ssd-common.yaml# + + - if: + properties: + compatible: + contains: + const: solomon,ssd1322 + then: + properties: + width: + default: 480 + height: + default: 128 + + - if: + properties: + compatible: + contains: + const: solomon,ssd1325 + then: + properties: + width: + default: 128 + height: + default: 80 + + - if: + properties: + compatible: + contains: + const: solomon,ssd1327 + then: + properties: + width: + default: 128 + height: + default: 128 + +unevaluatedProperties: false + +examples: + - | + i2c { + #address-cells = <1>; + #size-cells = <0>; + + oled@3c { + compatible = "solomon,ssd1327"; + reg = <0x3c>; + reset-gpios = <&gpio2 7>; + }; + + }; + - | + spi { + #address-cells = <1>; + #size-cells = <0>; + + oled@0 { + compatible = "solomon,ssd1327"; + reg = <0x0>; + reset-gpios = <&gpio2 7>; + dc-gpios = <&gpio2 8>; + spi-max-frequency = <10000000>; + }; + }; diff --git a/MAINTAINERS b/MAINTAINERS index 4a3baf970839..5257e0074f2b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -6733,7 +6733,7 @@ M: Javier Martinez Canillas S: Maintained T: git git://anongit.freedesktop.org/drm/drm-misc F: Documentation/devicetree/bindings/display/solomon,ssd-common.yaml -F: Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml +F: Documentation/devicetree/bindings/display/solomon,ssd13*.yaml F: drivers/gpu/drm/solomon/ssd130x* DRM DRIVER FOR ST-ERICSSON MCDE