From nobody Thu May 14 07:43:32 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DB758C433FE for ; Thu, 7 Apr 2022 20:28:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229623AbiDGUan (ORCPT ); Thu, 7 Apr 2022 16:30:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54254 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229626AbiDGUa0 (ORCPT ); Thu, 7 Apr 2022 16:30:26 -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 ESMTP id 3D09F488BF4 for ; Thu, 7 Apr 2022 13:14:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649362449; 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=6ujVDZk4U6RzShQ/rIDRVpIv+f7MFQZhzBrH2NX9HlA=; b=cPKtw1A1OeiDPilpaBVOTQ17rwePe2jR9Ai8on/DXhip3ZDTbTGtWd1ytU6sJ9gJzhoV3n QnkCXUaJRuyMaerIC4jrqvVMbT60NoR32Iu34ZsAw+ZRObrBxfYidNB+OFNoM1qZE29UY8 ACqXld4fRwDUe4gaL8zj2i8qOQzsLyc= 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.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-465-BQFb96o1NBuLGBZ4_ZvBkA-1; Thu, 07 Apr 2022 16:03:01 -0400 X-MC-Unique: BQFb96o1NBuLGBZ4_ZvBkA-1 Received: by mail-wm1-f72.google.com with SMTP id h65-20020a1c2144000000b0038e9ce3b29cso296650wmh.2 for ; Thu, 07 Apr 2022 13:03:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6ujVDZk4U6RzShQ/rIDRVpIv+f7MFQZhzBrH2NX9HlA=; b=tQXLirChw9xBBPOXb38ghFGJmzIxFtObTRquIcYLjyZdCXlMgTqO84r767NAb414KL WlGYzGMoK3wnTddY6K5q+gOwiV8tb7D4KE7pyddJP0nn2yRd9YJEB/NR2rz5LAe66u/n whhrj6VLkbDheLEQwN3ayNF/dGivqs21RQHJFJN9n9jUe15XMOnE7WoeenhCFdxSd4vh HfLrGRrIgVq36k2Jc6kiHayndtzucyefj3e+m+wtQ8WJxXmP0ylVubRiu70Xff0w2iSR LzkFvbxakttn2I/99nN+ckAWqsyK9aoq1jZz1qkh4G6rmwvgO32nfJyGIA861xXSVViZ MN2w== X-Gm-Message-State: AOAM532eeCnhkIuWAcrZTT/FChy32AuUbCEdtbFbPQSROLXLBL1fWsxd W94x3QkoIyQtHMPSkOrF4hmL1iZE/LoHcSZlHXvsBErqdgp7DT0pf9aWx8+i95C88DgpV0jPMqz lDnB94lbk+Xffp/X7n8Mme1WpkjLcXubvSlKzCFrQ/TJjtL+kYXYv2xFeyTgnLGHkLB+d3Jaa04 k= X-Received: by 2002:a7b:cd1a:0:b0:38c:720a:a123 with SMTP id f26-20020a7bcd1a000000b0038c720aa123mr13899252wmj.5.1649361779801; Thu, 07 Apr 2022 13:02:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyVyONRQEvtL645zP8TFrYruvkYYBDs16vpp3BQmLOliyy4X90HgJIz+51Rgv9qnGmJHkP1ig== X-Received: by 2002:a7b:cd1a:0:b0:38c:720a:a123 with SMTP id f26-20020a7bcd1a000000b0038c720aa123mr13899228wmj.5.1649361779545; Thu, 07 Apr 2022 13:02:59 -0700 (PDT) Received: from minerva.home ([92.176.231.205]) by smtp.gmail.com with ESMTPSA id f15-20020a0560001a8f00b002078f74ccd2sm1048712wry.36.2022.04.07.13.02.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Apr 2022 13:02:59 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Andy Shevchenko , Chen-Yu Tsai , Geert Uytterhoeven , Mark Brown , Javier Martinez Canillas , Daniel Vetter , David Airlie , Krzysztof Kozlowski , Maxime Ripard , Rob Herring , devicetree@vger.kernel.org Subject: [PATCH 1/5] dt-bindings: display: ssd1307fb: Deprecate fbdev compatible strings Date: Thu, 7 Apr 2022 22:02:00 +0200 Message-Id: <20220407200205.28838-2-javierm@redhat.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220407200205.28838-1-javierm@redhat.com> References: <20220407200205.28838-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The current compatible strings for SSD130x I2C controllers contain an -fb suffix, this seems to indicate that are for a fbdev driver. But the DT is supposed to describe the hardware and not Linux implementation details. Let's deprecate those compatible strings and add a new enum that contains compatible strings that don't have a -fb suffix. These will be matched by the ssd130x-i2c DRM driver. Signed-off-by: Javier Martinez Canillas --- .../bindings/display/solomon,ssd1307fb.yaml | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/Documentation/devicetree/bindings/display/solomon,ssd1307fb.ya= ml b/Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml index ade61d502edd..46207f2c12b8 100644 --- a/Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml +++ b/Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml @@ -12,12 +12,24 @@ maintainers: =20 properties: compatible: - enum: - - sinowealth,sh1106-i2c - - solomon,ssd1305fb-i2c - - solomon,ssd1306fb-i2c - - solomon,ssd1307fb-i2c - - solomon,ssd1309fb-i2c + oneOf: + # Deprecated compatible strings + - items: + - enum: + - solomon,ssd1305fb-i2c + - solomon,ssd1306fb-i2c + - solomon,ssd1307fb-i2c + - solomon,ssd1309fb-i2c + deprecated: true + + # SSD130x I2C controllers + - items: + - enum: + - sinowealth,sh1106-i2c + - solomon,ssd1305-i2c + - solomon,ssd1306-i2c + - solomon,ssd1307-i2c + - solomon,ssd1309-i2c =20 reg: maxItems: 1 @@ -148,7 +160,7 @@ allOf: properties: compatible: contains: - const: solomon,ssd1305fb-i2c + const: solomon,ssd1305-i2c then: properties: solomon,dclk-div: @@ -160,7 +172,7 @@ allOf: properties: compatible: contains: - const: solomon,ssd1306fb-i2c + const: solomon,ssd1306-i2c then: properties: solomon,dclk-div: @@ -172,7 +184,7 @@ allOf: properties: compatible: contains: - const: solomon,ssd1307fb-i2c + const: solomon,ssd1307-i2c then: properties: solomon,dclk-div: @@ -186,7 +198,7 @@ allOf: properties: compatible: contains: - const: solomon,ssd1309fb-i2c + const: solomon,ssd1309-i2c then: properties: solomon,dclk-div: @@ -203,14 +215,14 @@ examples: #size-cells =3D <0>; =20 ssd1307: oled@3c { - compatible =3D "solomon,ssd1307fb-i2c"; + compatible =3D "solomon,ssd1307-i2c"; reg =3D <0x3c>; pwms =3D <&pwm 4 3000>; reset-gpios =3D <&gpio2 7>; }; =20 ssd1306: oled@3d { - compatible =3D "solomon,ssd1306fb-i2c"; + compatible =3D "solomon,ssd1306-i2c"; reg =3D <0x3c>; pwms =3D <&pwm 4 3000>; reset-gpios =3D <&gpio2 7>; --=20 2.35.1 From nobody Thu May 14 07:43:32 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DBC63C433F5 for ; Thu, 7 Apr 2022 20:15:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229537AbiDGURx (ORCPT ); Thu, 7 Apr 2022 16:17:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45778 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229475AbiDGURp (ORCPT ); Thu, 7 Apr 2022 16:17:45 -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 ESMTP id B7254488CDE for ; Thu, 7 Apr 2022 13:14:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649362401; 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=eXSOuQeCYTD72y4Xo1UTiURod41sQfVrbEsc1IcuHsY=; b=dMRpyR3lnKFCL7Ew3FaTZAbPzivt31j9vFFS6IIIoryDdeIX6cgIC+h3P12FiAdtgrvVkT urQqV+uqY7adwGcXWvJ6GLMl0k9v4WKNTkxDpJXuPhcR4d3pZ0xjhzxlkQltUWG+cmd7iQ 4emlA8pJlFGz3JILdYfiWtPmxTeXb9g= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-295-NHLBsDf4MN64P7ISEGuxHg-1; Thu, 07 Apr 2022 16:03:02 -0400 X-MC-Unique: NHLBsDf4MN64P7ISEGuxHg-1 Received: by mail-wm1-f70.google.com with SMTP id bg8-20020a05600c3c8800b0038e6a989925so1767286wmb.3 for ; Thu, 07 Apr 2022 13:03:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=eXSOuQeCYTD72y4Xo1UTiURod41sQfVrbEsc1IcuHsY=; b=eVy/AB6Xaf0hg4SdzFyq2sW7Ez3JNlCXoK246eYqQkRjkcCBJMy+b78o89PJMBpdcH eiP5fB02X9jf9Jf0avHCovwXVK/xx+ckjDsbdJtYx3MZ650MOi8pp7twWAT5vGdiwCj5 AKDzSvvd8i/c7ghdzzELpU/tz6OtRRkGGt/ek9xnIWaa1z/1dqD2qKBPGWUbQp8FS9ub xB9p5fKJcNjwxTHmmFvOw1TWPoQrPI02Eam9ICsy2O94NBhlBlH06IQu109Nt5dVcUmK m2fHawZSxyueWxsTLReFJMCcrNhNwHp+AV4jyewc2B1lkLnuwXamwQTnSpiSbHs6E8uY d7Tg== X-Gm-Message-State: AOAM533s7kyqYY/Unang/D24e31m0xC45GAKT54fprIQHH8+5MVlolbF euZ/l76+MOM3tWfs6R6oBq5dElZuOJbl1WltVW8NIKr7/QK5A0e3zOIEw2voHn8GZU1HCievL1n MOIw8iqJ8iGxu64nCDrpOojAVYHrxrO39CXUCnjd/hqyasAXmlgu/CxAuruMnWsY9+WQIUqzIw0 Y= X-Received: by 2002:a05:600c:3009:b0:381:194a:8cb5 with SMTP id j9-20020a05600c300900b00381194a8cb5mr14371875wmh.43.1649361781036; Thu, 07 Apr 2022 13:03:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzdVrchp6+fH6bFHOo2gCCwpez8T6oth+OyDwzFP+IdgOSajN+NtmKi8IXgiPU7SpRh+LyMoA== X-Received: by 2002:a05:600c:3009:b0:381:194a:8cb5 with SMTP id j9-20020a05600c300900b00381194a8cb5mr14371846wmh.43.1649361780754; Thu, 07 Apr 2022 13:03:00 -0700 (PDT) Received: from minerva.home ([92.176.231.205]) by smtp.gmail.com with ESMTPSA id f15-20020a0560001a8f00b002078f74ccd2sm1048712wry.36.2022.04.07.13.02.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Apr 2022 13:03:00 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Andy Shevchenko , Chen-Yu Tsai , Geert Uytterhoeven , Mark Brown , Javier Martinez Canillas , Daniel Vetter , David Airlie , Krzysztof Kozlowski , Maxime Ripard , Rob Herring , devicetree@vger.kernel.org Subject: [PATCH 2/5] dt-bindings: display: ssd1307fb: Extend schema for SPI controllers Date: Thu, 7 Apr 2022 22:02:01 +0200 Message-Id: <20220407200205.28838-3-javierm@redhat.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220407200205.28838-1-javierm@redhat.com> References: <20220407200205.28838-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The Solomon SSD130x OLED displays can either have an I2C or SPI interface, add to the schema the compatible strings, properties and examples for SPI. Signed-off-by: Javier Martinez Canillas --- .../bindings/display/solomon,ssd1307fb.yaml | 89 +++++++++++++++---- 1 file changed, 71 insertions(+), 18 deletions(-) diff --git a/Documentation/devicetree/bindings/display/solomon,ssd1307fb.ya= ml b/Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml index 46207f2c12b8..05e7975296a7 100644 --- a/Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml +++ b/Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml @@ -31,6 +31,15 @@ properties: - solomon,ssd1307-i2c - solomon,ssd1309-i2c =20 + # SSD130x SPI controllers + - items: + - enum: + - sinowealth,sh1106-spi + - solomon,ssd1305-spi + - solomon,ssd1306-spi + - solomon,ssd1307-spi + - solomon,ssd1309-spi + reg: maxItems: 1 =20 @@ -40,9 +49,14 @@ properties: reset-gpios: maxItems: 1 =20 + dc-gpios: + maxItems: 1 + vbat-supply: description: The supply for VBAT =20 + spi-max-frequency: true + solomon,height: $ref: /schemas/types.yaml#/definitions/uint32 default: 16 @@ -148,19 +162,10 @@ allOf: properties: compatible: contains: - const: sinowealth,sh1106-i2c - then: - properties: - solomon,dclk-div: - default: 1 - solomon,dclk-frq: - default: 5 - - - if: - properties: - compatible: - contains: - const: solomon,ssd1305-i2c + enum: + - sinowealth,sh1106-i2c + - solomon,ssd1305-i2c + - solomon,ssd1305-spi then: properties: solomon,dclk-div: @@ -172,7 +177,9 @@ allOf: properties: compatible: contains: - const: solomon,ssd1306-i2c + enum: + - solomon,ssd1306-i2c + - solomon,ssd1306-spi then: properties: solomon,dclk-div: @@ -184,7 +191,9 @@ allOf: properties: compatible: contains: - const: solomon,ssd1307-i2c + enum: + - solomon,ssd1307-i2c + - solomon,ssd1307-spi then: properties: solomon,dclk-div: @@ -198,7 +207,9 @@ allOf: properties: compatible: contains: - const: solomon,ssd1309-i2c + enum: + - solomon,ssd1309-i2c + - solomon,ssd1309-spi then: properties: solomon,dclk-div: @@ -206,6 +217,21 @@ allOf: solomon,dclk-frq: default: 10 =20 + - if: + properties: + compatible: + contains: + enum: + - sinowealth,sh1106-spi + - solomon,ssd1305-spi + - solomon,ssd1306-spi + - solomon,ssd1307-spi + - solomon,ssd1309-spi + then: + required: + - spi-max-frequency + - dc-gpios + additionalProperties: false =20 examples: @@ -214,14 +240,14 @@ examples: #address-cells =3D <1>; #size-cells =3D <0>; =20 - ssd1307: oled@3c { + ssd1307_i2c: oled@3c { compatible =3D "solomon,ssd1307-i2c"; reg =3D <0x3c>; pwms =3D <&pwm 4 3000>; reset-gpios =3D <&gpio2 7>; }; =20 - ssd1306: oled@3d { + ssd1306_i2c: oled@3d { compatible =3D "solomon,ssd1306-i2c"; reg =3D <0x3c>; pwms =3D <&pwm 4 3000>; @@ -232,3 +258,30 @@ examples: solomon,lookup-table =3D /bits/ 8 <0x3f 0x3f 0x3f 0x3f= >; }; }; + - | + spi { + #address-cells =3D <1>; + #size-cells =3D <0>; + + ssd1307_spi: oled@0 { + compatible =3D "solomon,ssd1307-spi"; + reg =3D <0x0>; + pwms =3D <&pwm 4 3000>; + reset-gpios =3D <&gpio2 7>; + dc-gpios =3D <&gpio2 8>; + spi-max-frequency =3D <10000000>; + }; + + ssd1306_spi: oled@1 { + compatible =3D "solomon,ssd1306-spi"; + reg =3D <0x1>; + pwms =3D <&pwm 4 3000>; + reset-gpios =3D <&gpio2 7>; + dc-gpios =3D <&gpio2 8>; + spi-max-frequency =3D <10000000>; + solomon,com-lrremap; + solomon,com-invdir; + solomon,com-offset =3D <32>; + solomon,lookup-table =3D /bits/ 8 <0x3f 0x3f 0x3f 0x3f= >; + }; + }; --=20 2.35.1 From nobody Thu May 14 07:43:32 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 436AAC433EF for ; Thu, 7 Apr 2022 20:15:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229525AbiDGURp (ORCPT ); Thu, 7 Apr 2022 16:17:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45046 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229480AbiDGURf (ORCPT ); Thu, 7 Apr 2022 16:17:35 -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 ESMTP id 1EAC32E2A09 for ; Thu, 7 Apr 2022 13:14:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649362404; 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=x93PCRKwviqgnFctHZ564pBYePcJr5i4ENQzOlQlhIE=; b=bre6y9kmkFesh5K5hR2IzZ3OOzoGncQDyOzOdPQ4VqMtyrh7AX192jN5wckMeiwLfhAmzr NqG6cT3CEOuDZFWEMcTxWgvEgnAyXiH9oyk4oYalfHLDImeuSUiHIpwwnQ0YdNcMosOQvx adtliUxkhUMVTZJHnzDtxIB1NcQRhJc= 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.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-323-eplbEYb3P6GFdWgK-Cdisw-1; Thu, 07 Apr 2022 16:03:03 -0400 X-MC-Unique: eplbEYb3P6GFdWgK-Cdisw-1 Received: by mail-wm1-f69.google.com with SMTP id j6-20020a05600c1c0600b0038e7d07ebcaso1769728wms.0 for ; Thu, 07 Apr 2022 13:03:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=x93PCRKwviqgnFctHZ564pBYePcJr5i4ENQzOlQlhIE=; b=KGUcx7Cbp0sXrzqhHi17dzdfcVe43UAVDGcx2hDdkMWk8nODmUuUmaTPqb2VDVrIqY c+bbz+TLXpe2LeSbpXKAOpc/b2Jgjt6OyhH5W5Sy2PfDonsaRHvDnVdIs9RO96OGw0Kt FKHay5hRI1AtmfSFDM0eCymZqTxHSfRhNLkqCRVBZOq4WYAV9WE/w+t7MBFO2rJI8RFh bhdhfcZoRLUfbFT92DfCY8E0zKiOUEyACKXOTWSycNh0N9U9ro/s65iZJyDXf0rAtubN riKRvc43prULU3sPXETqnAT1LVlQ75eIbR1rWr0txFIZwzVPYevY/fjf2e7t87oI8s0+ 7oWg== X-Gm-Message-State: AOAM531gE11rA6BX45GvGkmCJYFYk3lJd3L3pv1hlUDvkXoNThB9jHR1 7xN+S6oxlSnkBnEbZALaBbDJCAijfXWIHYJ/DjWZqkqXVi+JuEWpS1sXvDBYzTwgXacPn++xoN9 bHr4aISWDszXGikHNKuS2sGybKuQsxa7MWaihS4oC55elhiW+J/cMIEjkxDurDBonN83+NWhgD3 Q= X-Received: by 2002:a7b:cb46:0:b0:37b:dd79:e1c4 with SMTP id v6-20020a7bcb46000000b0037bdd79e1c4mr13618124wmj.39.1649361782271; Thu, 07 Apr 2022 13:03:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzddimnsAmF0jPIGaa3uK+oB4t/RezvERAcP6vteLSMkHFZ1dvuNZDvJ3lkXyuq9wVKp07AKg== X-Received: by 2002:a7b:cb46:0:b0:37b:dd79:e1c4 with SMTP id v6-20020a7bcb46000000b0037bdd79e1c4mr13618110wmj.39.1649361782029; Thu, 07 Apr 2022 13:03:02 -0700 (PDT) Received: from minerva.home ([92.176.231.205]) by smtp.gmail.com with ESMTPSA id f15-20020a0560001a8f00b002078f74ccd2sm1048712wry.36.2022.04.07.13.03.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Apr 2022 13:03:01 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Andy Shevchenko , Chen-Yu Tsai , Geert Uytterhoeven , Mark Brown , Javier Martinez Canillas , Daniel Vetter , David Airlie Subject: [PATCH 3/5] drm/solomon: Add ssd130x-i2c compatible strings without an -fb suffix Date: Thu, 7 Apr 2022 22:02:02 +0200 Message-Id: <20220407200205.28838-4-javierm@redhat.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220407200205.28838-1-javierm@redhat.com> References: <20220407200205.28838-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The current compatible strings for SSD130x I2C controllers contain an -fb suffix, this seems to indicate that are for a fbdev driver. But the DT is supposed to describe the hardware and not Linux implementation details. Let's deprecate those compatible strings and add new ones that don't have the -fb suffix. The old entries are still kept for backward compatibility. Signed-off-by: Javier Martinez Canillas --- drivers/gpu/drm/solomon/ssd130x-i2c.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/gpu/drm/solomon/ssd130x-i2c.c b/drivers/gpu/drm/solomo= n/ssd130x-i2c.c index d099b241dd3f..a469679548f8 100644 --- a/drivers/gpu/drm/solomon/ssd130x-i2c.c +++ b/drivers/gpu/drm/solomon/ssd130x-i2c.c @@ -91,6 +91,23 @@ static const struct of_device_id ssd130x_of_match[] =3D { .compatible =3D "sinowealth,sh1106-i2c", .data =3D &ssd130x_sh1106_deviceinfo, }, + { + .compatible =3D "solomon,ssd1305-i2c", + .data =3D &ssd130x_ssd1305_deviceinfo, + }, + { + .compatible =3D "solomon,ssd1306-i2c", + .data =3D &ssd130x_ssd1306_deviceinfo, + }, + { + .compatible =3D "solomon,ssd1307-i2c", + .data =3D &ssd130x_ssd1307_deviceinfo, + }, + { + .compatible =3D "solomon,ssd1309-i2c", + .data =3D &ssd130x_ssd1309_deviceinfo, + }, + /* Deprecated but remain for backward compatibility */ { .compatible =3D "solomon,ssd1305fb-i2c", .data =3D &ssd130x_ssd1305_deviceinfo, --=20 2.35.1 From nobody Thu May 14 07:43:32 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94D4FC433EF for ; Thu, 7 Apr 2022 20:28:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229599AbiDGUa2 (ORCPT ); Thu, 7 Apr 2022 16:30:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54210 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229559AbiDGUaI (ORCPT ); Thu, 7 Apr 2022 16:30:08 -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 ESMTP id BB0A42DBFF9 for ; Thu, 7 Apr 2022 13:14:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649362442; 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=TE4gPpLf7WhkN5ezB0vCrjVorkv1sMpiSBwQ7irjd6Q=; b=iA9x1zYfJ0IKsX2BDpF0ws1BZJw/5CXcp54ozh+Bu5gnJKvAJUbBL2gpPDbcB2KVFYIVcf MH1OyMVQunuapHS5FDqhRvUXJvUG1r25Rchq2/rWwsthzaygcLZ9pOD6ljWhHrBVtftjsc fEEZQdqypTer8eDld3Rw140EHsVIwKc= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-634-pLKSWdTbOsW-nzt0TzEk4g-1; Thu, 07 Apr 2022 16:03:04 -0400 X-MC-Unique: pLKSWdTbOsW-nzt0TzEk4g-1 Received: by mail-wr1-f70.google.com with SMTP id j67-20020adf9149000000b00203e6b7d151so1556125wrj.13 for ; Thu, 07 Apr 2022 13:03:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TE4gPpLf7WhkN5ezB0vCrjVorkv1sMpiSBwQ7irjd6Q=; b=a7e06fU6NX2ySM7OwNqdIjgQk843Xn5qbFWckF5eFpAHcz/78OiGaMAOCNoZh8Hu8v LXTEPEij8WTJaBBP18S0eeJEE0sEGfiXYWp/u9/2nMOOM64lel1/GaBtGhtL3rGqmHq6 3e3W1a0ElAYf+VwFBBlXFPoNfL70F4e81nWgwpV5KixbrvuCTo5vh2djZADPaOJi9eom aBBCtZ4NaUbWSIJf6PGppSA3zQXSL3rg1OuTQ3H2fLyjTN8TrhUBCiZL6jks28YFMv7+ 7BnW8vBGbbY094luLjXs9mGzk+ruQPMMlafmvu89GP6rDQAgOxN2xgfeRlIPd2TmAtC2 2fXw== X-Gm-Message-State: AOAM530YStotYEUSRejf56iCSfxFGH8xMBwhXWAAJr4d/XooCyWcbCmd QfAsz3nQ4k7nbQv2JVJ2/0xa3pW28gG7Ft3i+zpNZ6tlJ2r4JcSgtekgjkhIoXsieIJPRxAY/gk E4SOnF7fJjWqeYObqg9uVb4IgXhxajADDxI9yUzQrf8XeNc9F+spS0318hIb8Gpvc0unDTdqMvK 0= X-Received: by 2002:adf:9dd2:0:b0:206:14f9:6432 with SMTP id q18-20020adf9dd2000000b0020614f96432mr11931366wre.129.1649361783499; Thu, 07 Apr 2022 13:03:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzqOZMuv7vlTxaNOa9uzsUAtJoY+v170aoJd1/4gM8Ev8wfF6xaGJEgCSZ0qspOkfmmAC/8pw== X-Received: by 2002:adf:9dd2:0:b0:206:14f9:6432 with SMTP id q18-20020adf9dd2000000b0020614f96432mr11931343wre.129.1649361783111; Thu, 07 Apr 2022 13:03:03 -0700 (PDT) Received: from minerva.home ([92.176.231.205]) by smtp.gmail.com with ESMTPSA id f15-20020a0560001a8f00b002078f74ccd2sm1048712wry.36.2022.04.07.13.03.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Apr 2022 13:03:02 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Andy Shevchenko , Chen-Yu Tsai , Geert Uytterhoeven , Mark Brown , Javier Martinez Canillas , Daniel Vetter , David Airlie Subject: [PATCH 4/5] drm/solomon: Move device info from ssd130x-i2c to the core driver Date: Thu, 7 Apr 2022 22:02:03 +0200 Message-Id: <20220407200205.28838-5-javierm@redhat.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220407200205.28838-1-javierm@redhat.com> References: <20220407200205.28838-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" These are declared in the ssd130x-i2c transport driver but the information is not I2C specific and could be used by other SSD130x transport drivers. Move them to the ssd130x core driver and just set the OF device entries to an ID that could be used to lookup the correct device into from an array. While being there, also move the SSD130X_DATA and SSD130X_COMMAND control bytes. Since even though are used by the I2C interface, it could also be useful for other transport protocols such as SPI. Suggested-by: Chen-Yu Tsai Signed-off-by: Javier Martinez Canillas --- drivers/gpu/drm/solomon/ssd130x-i2c.c | 51 ++++------------------- drivers/gpu/drm/solomon/ssd130x.c | 60 +++++++++++++++++++++++++-- drivers/gpu/drm/solomon/ssd130x.h | 13 ++++++ 3 files changed, 78 insertions(+), 46 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x-i2c.c b/drivers/gpu/drm/solomo= n/ssd130x-i2c.c index a469679548f8..aa6cc2cb54f9 100644 --- a/drivers/gpu/drm/solomon/ssd130x-i2c.c +++ b/drivers/gpu/drm/solomon/ssd130x-i2c.c @@ -53,76 +53,43 @@ static void ssd130x_i2c_shutdown(struct i2c_client *cli= ent) ssd130x_shutdown(ssd130x); } =20 -static struct ssd130x_deviceinfo ssd130x_sh1106_deviceinfo =3D { - .default_vcomh =3D 0x40, - .default_dclk_div =3D 1, - .default_dclk_frq =3D 5, - .page_mode_only =3D 1, -}; - -static struct ssd130x_deviceinfo ssd130x_ssd1305_deviceinfo =3D { - .default_vcomh =3D 0x34, - .default_dclk_div =3D 1, - .default_dclk_frq =3D 7, -}; - -static struct ssd130x_deviceinfo ssd130x_ssd1306_deviceinfo =3D { - .default_vcomh =3D 0x20, - .default_dclk_div =3D 1, - .default_dclk_frq =3D 8, - .need_chargepump =3D 1, -}; - -static struct ssd130x_deviceinfo ssd130x_ssd1307_deviceinfo =3D { - .default_vcomh =3D 0x20, - .default_dclk_div =3D 2, - .default_dclk_frq =3D 12, - .need_pwm =3D 1, -}; - -static struct ssd130x_deviceinfo ssd130x_ssd1309_deviceinfo =3D { - .default_vcomh =3D 0x34, - .default_dclk_div =3D 1, - .default_dclk_frq =3D 10, -}; - static const struct of_device_id ssd130x_of_match[] =3D { { .compatible =3D "sinowealth,sh1106-i2c", - .data =3D &ssd130x_sh1106_deviceinfo, + .data =3D SH1106_ID, }, { .compatible =3D "solomon,ssd1305-i2c", - .data =3D &ssd130x_ssd1305_deviceinfo, + .data =3D (void *)SSD1305_ID, }, { .compatible =3D "solomon,ssd1306-i2c", - .data =3D &ssd130x_ssd1306_deviceinfo, + .data =3D (void *)SSD1306_ID, }, { .compatible =3D "solomon,ssd1307-i2c", - .data =3D &ssd130x_ssd1307_deviceinfo, + .data =3D (void *)SSD1307_ID, }, { .compatible =3D "solomon,ssd1309-i2c", - .data =3D &ssd130x_ssd1309_deviceinfo, + .data =3D (void *)SSD1309_ID, }, /* Deprecated but remain for backward compatibility */ { .compatible =3D "solomon,ssd1305fb-i2c", - .data =3D &ssd130x_ssd1305_deviceinfo, + .data =3D (void *)SSD1305_ID, }, { .compatible =3D "solomon,ssd1306fb-i2c", - .data =3D &ssd130x_ssd1306_deviceinfo, + .data =3D (void *)SSD1306_ID, }, { .compatible =3D "solomon,ssd1307fb-i2c", - .data =3D &ssd130x_ssd1307_deviceinfo, + .data =3D (void *)SSD1307_ID, }, { .compatible =3D "solomon,ssd1309fb-i2c", - .data =3D &ssd130x_ssd1309_deviceinfo, + .data =3D (void *)SSD1309_ID, }, { /* sentinel */ } }; diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ss= d130x.c index a7e784518c69..1f00fd3c0023 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -39,11 +39,9 @@ #define DRIVER_MAJOR 1 #define DRIVER_MINOR 0 =20 -#define SSD130X_DATA 0x40 -#define SSD130X_COMMAND 0x80 - #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 @@ -94,6 +92,55 @@ =20 #define MAX_CONTRAST 255 =20 +static struct ssd130x_deviceinfo ssd130x_variants[] =3D { + { + .default_vcomh =3D 0x40, + .default_dclk_div =3D 1, + .default_dclk_frq =3D 5, + .page_mode_only =3D 1, + }, + { + .variant =3D SSD1305_ID, + .default_vcomh =3D 0x34, + .default_dclk_div =3D 1, + .default_dclk_frq =3D 7, + }, + { + .variant =3D SSD1306_ID, + .default_vcomh =3D 0x20, + .default_dclk_div =3D 1, + .default_dclk_frq =3D 8, + .need_chargepump =3D 1, + }, + { + .variant =3D SSD1307_ID, + .default_vcomh =3D 0x20, + .default_dclk_div =3D 2, + .default_dclk_frq =3D 12, + .need_pwm =3D 1, + }, + { + .variant =3D SSD1309_ID, + .default_vcomh =3D 0x34, + .default_dclk_div =3D 1, + .default_dclk_frq =3D 10, + } +}; + +static const struct ssd130x_deviceinfo *ssd13x_variant_to_info(enum ssd130= x_variants variant) +{ + int i; + const struct ssd130x_deviceinfo *info; + + for (i =3D 0; i < ARRAY_SIZE(ssd130x_variants); i++) { + info =3D &ssd130x_variants[i]; + if (info->variant =3D=3D variant) + return info; + } + + return NULL; +} + static inline struct ssd130x_device *drm_to_ssd130x(struct drm_device *drm) { return container_of(drm, struct ssd130x_device, drm); @@ -846,6 +893,7 @@ static int ssd130x_get_resources(struct ssd130x_device = *ssd130x) struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *re= gmap) { struct ssd130x_device *ssd130x; + enum ssd130x_variants variant; struct backlight_device *bl; struct drm_device *drm; int ret; @@ -860,7 +908,11 @@ struct ssd130x_device *ssd130x_probe(struct device *de= v, struct regmap *regmap) =20 ssd130x->dev =3D dev; ssd130x->regmap =3D regmap; - ssd130x->device_info =3D device_get_match_data(dev); + + variant =3D (enum ssd130x_variants)device_get_match_data(dev); + ssd130x->device_info =3D ssd13x_variant_to_info(variant); + if (!ssd130x->device_info) + return ERR_PTR(-EINVAL); =20 if (ssd130x->device_info->page_mode_only) ssd130x->page_address_mode =3D 1; diff --git a/drivers/gpu/drm/solomon/ssd130x.h b/drivers/gpu/drm/solomon/ss= d130x.h index f5b062576fdf..4e0b62a41aa3 100644 --- a/drivers/gpu/drm/solomon/ssd130x.h +++ b/drivers/gpu/drm/solomon/ssd130x.h @@ -18,7 +18,20 @@ =20 #include =20 +#define SSD130X_DATA 0x40 +#define SSD130X_COMMAND 0x80 + +enum ssd130x_variants { + SH1106_ID, + SSD1305_ID, + SSD1306_ID, + SSD1307_ID, + SSD1309_ID, + NR_SSD130X_VARIANTS +}; + struct ssd130x_deviceinfo { + enum ssd130x_variants variant; u32 default_vcomh; u32 default_dclk_div; u32 default_dclk_frq; --=20 2.35.1 From nobody Thu May 14 07:43:32 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1CE20C4332F for ; Thu, 7 Apr 2022 20:15:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229523AbiDGURu (ORCPT ); Thu, 7 Apr 2022 16:17:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45502 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229469AbiDGURl (ORCPT ); Thu, 7 Apr 2022 16:17:41 -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 ESMTP id 474C8487C14 for ; Thu, 7 Apr 2022 13:14:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649362404; 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=5NcP0b+Q0Ufxh9RUzkPjmCQaibubGP7dZRDqNH5/afA=; b=NiL33Bm+ZrX1Ldd1LGsU17J+RcUACmtFX5U7bLsCdih4yhjCIz5CmBgSMiFd8iYndppmME pb8QCF1OfAa819zweQxmhyTvJ+bYPxTDbG525zX1cwP5TDvRz/7C9+eUBAsFwhzWPNAVMj Nmj42ZsWury7ChK78U3gL/y0T5HZPWs= 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.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-59-C8vLtdqgPbmTxxompWJopQ-1; Thu, 07 Apr 2022 16:03:06 -0400 X-MC-Unique: C8vLtdqgPbmTxxompWJopQ-1 Received: by mail-wm1-f72.google.com with SMTP id a16-20020a05600c349000b0038e6392a346so3435867wmq.4 for ; Thu, 07 Apr 2022 13:03:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5NcP0b+Q0Ufxh9RUzkPjmCQaibubGP7dZRDqNH5/afA=; b=02VYGd8ZpcDbrWwhEmXGVgki2f/DJ7yB7/uxtzO1zAHxzwBVyniR4XUbTZdwcBngW9 HKEyNaDabP805EzM1vTIwQG30rLW7bL+ghc+haskMfv3m6NUVk7694G/P+HFcIt/y/2t 3QCH8qwYKJbcbv+k4l4VRGYXk3jUT+5NdkVHE22qLGcMBlkTh6FKB1SXAehzucGmTFmi /K1ZMbv94zDLLPXSECLaS2LDTwx9VMYcG92qh/mO2aYB3ODxdkPdbKFF0aOjjvtNcFtN L8MiHwCpBX4TygkYERwXUGD89Wb/Llc4I8+wR9brNHHVIip5PXyAcIuN4KLWWKtMLoke /ZMg== X-Gm-Message-State: AOAM533P9SewKlctcx742VUX0ndjPAqW4Jzf2WKSsIxWVPWE00zuQe3E hW5oQZClA8R9ebb53AjvgWQwrd5ZAOZB5sx/nzPR0qxHpXnTwPt3lfSY+oGaiSUcCD+C/6TuQRl dpOjJ4zdwrRHPiZSDj+be5ymgyJvb+mpxoWYayZEnm/NwpQ3/jPYtxaOJvaE6WBM94fWlgbnpxY w= X-Received: by 2002:a5d:5584:0:b0:206:d53:b553 with SMTP id i4-20020a5d5584000000b002060d53b553mr12234310wrv.222.1649361785238; Thu, 07 Apr 2022 13:03:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwXhhElfHmHDSPxSVNJjtnjf4vXjXqp1p7HB+KYOspevUbZB9uXRGs/dS5r42YLL/Kl1pV98Q== X-Received: by 2002:a5d:5584:0:b0:206:d53:b553 with SMTP id i4-20020a5d5584000000b002060d53b553mr12234281wrv.222.1649361784743; Thu, 07 Apr 2022 13:03:04 -0700 (PDT) Received: from minerva.home ([92.176.231.205]) by smtp.gmail.com with ESMTPSA id f15-20020a0560001a8f00b002078f74ccd2sm1048712wry.36.2022.04.07.13.03.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Apr 2022 13:03:04 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Andy Shevchenko , Chen-Yu Tsai , Geert Uytterhoeven , Mark Brown , Javier Martinez Canillas , Chen-Yu Tsai , Daniel Vetter , David Airlie , Maxime Ripard , YueHaibing Subject: [PATCH 5/5] drm/solomon: Add SSD130x OLED displays SPI support Date: Thu, 7 Apr 2022 22:02:04 +0200 Message-Id: <20220407200205.28838-6-javierm@redhat.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220407200205.28838-1-javierm@redhat.com> References: <20220407200205.28838-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The ssd130x driver only provides the core support for these devices but it does not have any bus transport logic. Add a driver to interface over SPI. There is a difference in the communication protocol when using 4-wire SPI instead of I2C. For the latter, a control byte that contains a D/C# field has to be sent. This field tells the controller whether the data has to be written to the command register or to the graphics display data memory. But for 4-wire SPI that control byte is not used, instead a real D/C# line must be pulled HIGH for commands data and LOW for graphics display data. For this reason the standard SPI regmap can't be used and a custom .write bus handler is needed. Signed-off-by: Javier Martinez Canillas Acked-by: Mark Brown --- drivers/gpu/drm/solomon/Kconfig | 9 ++ drivers/gpu/drm/solomon/Makefile | 1 + drivers/gpu/drm/solomon/ssd130x-spi.c | 184 ++++++++++++++++++++++++++ 3 files changed, 194 insertions(+) create mode 100644 drivers/gpu/drm/solomon/ssd130x-spi.c diff --git a/drivers/gpu/drm/solomon/Kconfig b/drivers/gpu/drm/solomon/Kcon= fig index 8c0a0c788385..e170716d976b 100644 --- a/drivers/gpu/drm/solomon/Kconfig +++ b/drivers/gpu/drm/solomon/Kconfig @@ -20,3 +20,12 @@ config DRM_SSD130X_I2C I2C bus. =20 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)" + depends on DRM_SSD130X && SPI + select REGMAP + help + Say Y here if the SSD130x 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/Makefile b/drivers/gpu/drm/solomon/Mak= efile index 4bfc5acb0447..b5fc792257d7 100644 --- a/drivers/gpu/drm/solomon/Makefile +++ b/drivers/gpu/drm/solomon/Makefile @@ -1,2 +1,3 @@ obj-$(CONFIG_DRM_SSD130X) +=3D ssd130x.o obj-$(CONFIG_DRM_SSD130X_I2C) +=3D ssd130x-i2c.o +obj-$(CONFIG_DRM_SSD130X_SPI) +=3D ssd130x-spi.o diff --git a/drivers/gpu/drm/solomon/ssd130x-spi.c b/drivers/gpu/drm/solomo= n/ssd130x-spi.c new file mode 100644 index 000000000000..c3a2e7ba67a1 --- /dev/null +++ b/drivers/gpu/drm/solomon/ssd130x-spi.c @@ -0,0 +1,184 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * DRM driver for Solomon SSD130X OLED displays (SPI bus) + * + * Copyright 2022 Red Hat Inc. + * Authors: Javier Martinez Canillas + */ +#include +#include + +#include "ssd130x.h" + +#define DRIVER_NAME "ssd130x-spi" +#define DRIVER_DESC "DRM driver for Solomon SSD130X OLED displays (SPI)" + +struct ssd130x_spi_transport { + struct spi_device *spi; + struct gpio_desc *dc; +}; + +static const struct regmap_config ssd130x_spi_regmap_config =3D { + .reg_bits =3D 8, + .val_bits =3D 8, +}; + +/* + * The regmap bus .write handler, it is just a wrapper around spi_write() + * but toggling the Data/Command control pin (D/C#). Since for 4-wire SPI + * a D/C# pin is used, in contrast with I2C where a control byte is sent, + * prior to every data byte, that contains a bit with the D/C# value. + * + * These control bytes are considered registers by the ssd130x core driver + * and can be used by the ssd130x SPI driver to determine if the data sent + * is for a command register or for the Graphic Display Data RAM (GDDRAM). + */ +static int ssd130x_spi_write(void *context, const void *data, size_t count) +{ + struct ssd130x_spi_transport *t =3D context; + struct spi_device *spi =3D t->spi; + const u8 *reg =3D data; + + if (*reg =3D=3D SSD130X_COMMAND) + gpiod_set_value_cansleep(t->dc, 0); + + if (*reg =3D=3D SSD130X_DATA) + gpiod_set_value_cansleep(t->dc, 1); + + /* Remove the control byte since is not used by the 4-wire SPI */ + return spi_write(spi, ((u8 *)data) + 1, count - 1); +} + +/* The ssd130x driver does not read registers but regmap expects a .read */ +static int ssd130x_spi_read(void *context, const void *reg, size_t reg_siz= e, + void *val, size_t val_size) +{ + return 0; +} + +/* + * A custom bus is needed due the special write that toggles a D/C# pin, + * another option could be to just have a .reg_write() callback but that + * will prevent to do data writes in bulk. + * + * Once the regmap API is extended to support defining a bulk write handler + * in the struct regmap_config, this can be simplified and the bus dropped. + */ +static struct regmap_bus regmap_ssd130x_spi_bus =3D { + .write =3D ssd130x_spi_write, + .read =3D ssd130x_spi_read, +}; + +static struct gpio_desc *ssd130x_spi_get_dc(struct device *dev) +{ + struct gpio_desc *dc =3D devm_gpiod_get(dev, "dc", GPIOD_OUT_LOW); + + if (IS_ERR(dc)) + return ERR_PTR(dev_err_probe(dev, PTR_ERR(dc), "Failed to get dc gpio\n"= )); + + return dc; +} + +static int ssd130x_spi_probe(struct spi_device *spi) +{ + struct ssd130x_spi_transport *t; + struct ssd130x_device *ssd130x; + struct regmap *regmap; + struct device *dev =3D &spi->dev; + + t =3D devm_kzalloc(dev, sizeof(*t), GFP_KERNEL); + if (!t) + return dev_err_probe(dev, -ENOMEM, + "Failed to allocate SPI transport data\n"); + + t->spi =3D spi; + + t->dc =3D ssd130x_spi_get_dc(&spi->dev); + if (IS_ERR(t->dc)) + return PTR_ERR(t->dc); + + regmap =3D devm_regmap_init(dev, ®map_ssd130x_spi_bus, t, + &ssd130x_spi_regmap_config); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + ssd130x =3D ssd130x_probe(dev, regmap); + if (IS_ERR(ssd130x)) + return PTR_ERR(ssd130x); + + spi_set_drvdata(spi, ssd130x); + + return 0; +} + +static void ssd130x_spi_remove(struct spi_device *spi) +{ + struct ssd130x_device *ssd130x =3D spi_get_drvdata(spi); + + ssd130x_remove(ssd130x); +} + +static void ssd130x_spi_shutdown(struct spi_device *spi) +{ + struct ssd130x_device *ssd130x =3D spi_get_drvdata(spi); + + ssd130x_shutdown(ssd130x); +} + +static const struct of_device_id ssd130x_of_match[] =3D { + { + .compatible =3D "sinowealth,sh1106-spi", + .data =3D (void *)SH1106_ID, + }, + { + .compatible =3D "solomon,ssd1305-spi", + .data =3D (void *)SSD1305_ID, + }, + { + .compatible =3D "solomon,ssd1306-spi", + .data =3D (void *)SSD1306_ID, + }, + { + .compatible =3D "solomon,ssd1307-spi", + .data =3D (void *)SSD1307_ID, + }, + { + .compatible =3D "solomon,ssd1309-spi", + .data =3D (void *)SSD1309_ID, + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, ssd130x_of_match); + +/* + * The SPI core always reports a MODALIAS uevent of the form "spi:", = even + * if the device was registered via OF. This means that the module will no= t be + * auto loaded, unless it contains an alias that matches the MODALIAS repo= rted. + * + * To workaround this issue, add a SPI device ID table. Even when this sho= uld + * not be needed for this driver to match the registered SPI devices. + */ +static const struct spi_device_id ssd130x_spi_table[] =3D { + { "sh1106-spi", SH1106_ID }, + { "ssd1305-spi", SSD1305_ID }, + { "ssd1306-spi", SSD1306_ID }, + { "ssd1307-spi", SSD1307_ID }, + { "ssd1309-spi", SSD1309_ID }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(spi, ssd130x_spi_table); + +static struct spi_driver ssd130x_spi_driver =3D { + .driver =3D { + .name =3D DRIVER_NAME, + .of_match_table =3D ssd130x_of_match, + }, + .probe =3D ssd130x_spi_probe, + .remove =3D ssd130x_spi_remove, + .shutdown =3D ssd130x_spi_shutdown, +}; +module_spi_driver(ssd130x_spi_driver); + +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_AUTHOR("Javier Martinez Canillas "); +MODULE_LICENSE("GPL"); --=20 2.35.1