From patchwork Thu Apr 7 20:02:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 12805665 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 77760C433F5 for ; Thu, 7 Apr 2022 20:03:09 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C31DB10EEA0; Thu, 7 Apr 2022 20:03:04 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 10BAE10EE9F for ; Thu, 7 Apr 2022 20:03:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649361782; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6ujVDZk4U6RzShQ/rIDRVpIv+f7MFQZhzBrH2NX9HlA=; b=a4a4l2ebCwkBUg3kDCMazV7h9MjfDXikQsZNeDgx9v1SgNmyXVfDg8lHOPFCSLALHhOdaP iNxzlGeHUa/NtFHZP+QKfmZqx64Em+rytiPT3yyAN6nHusDlkJLsJvL+TSFAY5RYorIIj4 69Ga7Wv4afEV7Efwx5Lg5qrygSVxudA= 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-20-jkGJ7QdzMdWrLnsS3_E_tw-1; Thu, 07 Apr 2022 16:03:01 -0400 X-MC-Unique: jkGJ7QdzMdWrLnsS3_E_tw-1 Received: by mail-wm1-f70.google.com with SMTP id r6-20020a05600c35c600b0038e6db5da9cso1763386wmq.9 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=8BE1oa4Nlgq4qR7k+Mg2L4JPQKHN/pr3GDyowTijLOOjqW3auJ8eBS3ebh9CKbjvol ALCzKIK4G+jr0E6BXVfpeO3cWdt4dMxIEui+Br1AeUHoVnXMRWsKe7JpsuybZQ3ngVYF HDV2qr8xVNoJdKkBjPzg2/UAV5Bsg/PlFXRQKmT5+S2KCAfqdQGQzMH0HenLv+KATlV+ guLm7t8uUyXUDT8cpTEm8J/TJyfiVrulxhelt3lYHQtaqFYc7pf0FH5ODRhce3vcfCl3 znZTCrfXx4s6i3tpP1vK44EM6L/+9eETQ9jV1ZdnWvjvoD/ezMsSBjtMa/Z07mEr2ALv fHWA== X-Gm-Message-State: AOAM5316XnjaSSAdRl4ofgWUzUiEEOKVIDOCsxzgBSIiAV2FufmlCTkM C/84EnSXiqTZN/MwcZEPhsyDHd0s43WvcwQTS5nM5cgiC4HrEOqAYWnbynfGPL7EjEE40v0/GNy K/CeCWcTcpJIHrYz2uCIlUVUGWF5r X-Received: by 2002:a7b:cd1a:0:b0:38c:720a:a123 with SMTP id f26-20020a7bcd1a000000b0038c720aa123mr13899246wmj.5.1649361779740; 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 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 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=javierm@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Chen-Yu Tsai , David Airlie , Javier Martinez Canillas , dri-devel@lists.freedesktop.org, Rob Herring , Mark Brown , Geert Uytterhoeven , Krzysztof Kozlowski , Andy Shevchenko Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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.yaml 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: 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 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 = <0>; ssd1307: oled@3c { - compatible = "solomon,ssd1307fb-i2c"; + compatible = "solomon,ssd1307-i2c"; reg = <0x3c>; pwms = <&pwm 4 3000>; reset-gpios = <&gpio2 7>; }; ssd1306: oled@3d { - compatible = "solomon,ssd1306fb-i2c"; + compatible = "solomon,ssd1306-i2c"; reg = <0x3c>; pwms = <&pwm 4 3000>; reset-gpios = <&gpio2 7>; From patchwork Thu Apr 7 20:02:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 12805666 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DA53AC433F5 for ; Thu, 7 Apr 2022 20:03:12 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BCD6910EEA2; Thu, 7 Apr 2022 20:03:07 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3CE3410EEA2 for ; Thu, 7 Apr 2022 20:03:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649361785; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eXSOuQeCYTD72y4Xo1UTiURod41sQfVrbEsc1IcuHsY=; b=DHA0tkR3Vv77iLMrzxe3spWnc1vYvApZkR8zqcGUOoEAaQVQzj5AOESx4XNc5f3x+RvEGa t65WkCainFCvcelA7RYwHHofku0/QFHEcyZig5S9BkFd8GNcbz9V2aVmIDmi29WydL/vPp c/L2HukERF3ACxrQy3tJh/AXvWGLKM8= 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-510-SdH0hNjTPf6Pfm24jPhhjA-1; Thu, 07 Apr 2022 16:03:02 -0400 X-MC-Unique: SdH0hNjTPf6Pfm24jPhhjA-1 Received: by mail-wm1-f70.google.com with SMTP id m3-20020a05600c3b0300b0038e74402cb6so3424304wms.8 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=tVZlwoIJnBCqgw772Q8I48WFeL82Fw6wkX1eKiIFC69uGSnWzQMI3fY+A7XVRZP4io tXU0iLQIWAYN1WM+Igeyxyk4BjmteG87ZbCCVso87RKcnsMluryJp7fYOVPB7Jk3BgOp TWfAe3mBwx5n0beiPAozbx//XczsLpSLKc9StSvIkP0yK8ntJ/6hoxAX6EJ15nvHO8Q2 t/x9Ru5E78lEoLV1eK6ZyWr0G/z4NRpZ124XyJnQR/qMb48TxiHVfNSoC7B2PJEAafRu P+BCWK1MF6aPANYvlqGE+j5J+5YCYkHfhMIJzs9XtKguA2h4xIcKiE1LfYzrggyQbhIy KF7Q== X-Gm-Message-State: AOAM531OVrRu6HaXqTKx3HGOX+CBejI1YOriWNSXqACV9ff1O827zCNm ceOuUhyK6LUNUU7x+I2MVIW97nOC5DO5FUn0h2hXjFjNxab/A9XpR5lu+3VbTbinpz3w/s5HuMS 3E/+iDVloaobTkc8CGaG5vyAPZZUA X-Received: by 2002:a05:600c:3009:b0:381:194a:8cb5 with SMTP id j9-20020a05600c300900b00381194a8cb5mr14371857wmh.43.1649361780977; Thu, 07 Apr 2022 13:03:00 -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 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 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=javierm@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Chen-Yu Tsai , David Airlie , Javier Martinez Canillas , dri-devel@lists.freedesktop.org, Rob Herring , Mark Brown , Geert Uytterhoeven , Krzysztof Kozlowski , Andy Shevchenko Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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.yaml 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 + # SSD130x SPI controllers + - items: + - enum: + - sinowealth,sh1106-spi + - solomon,ssd1305-spi + - solomon,ssd1306-spi + - solomon,ssd1307-spi + - solomon,ssd1309-spi + reg: maxItems: 1 @@ -40,9 +49,14 @@ properties: reset-gpios: maxItems: 1 + dc-gpios: + maxItems: 1 + vbat-supply: description: The supply for VBAT + 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 + - 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 examples: @@ -214,14 +240,14 @@ examples: #address-cells = <1>; #size-cells = <0>; - ssd1307: oled@3c { + ssd1307_i2c: oled@3c { compatible = "solomon,ssd1307-i2c"; reg = <0x3c>; pwms = <&pwm 4 3000>; reset-gpios = <&gpio2 7>; }; - ssd1306: oled@3d { + ssd1306_i2c: oled@3d { compatible = "solomon,ssd1306-i2c"; reg = <0x3c>; pwms = <&pwm 4 3000>; @@ -232,3 +258,30 @@ examples: solomon,lookup-table = /bits/ 8 <0x3f 0x3f 0x3f 0x3f>; }; }; + - | + spi { + #address-cells = <1>; + #size-cells = <0>; + + ssd1307_spi: oled@0 { + compatible = "solomon,ssd1307-spi"; + reg = <0x0>; + pwms = <&pwm 4 3000>; + reset-gpios = <&gpio2 7>; + dc-gpios = <&gpio2 8>; + spi-max-frequency = <10000000>; + }; + + ssd1306_spi: oled@1 { + compatible = "solomon,ssd1306-spi"; + reg = <0x1>; + pwms = <&pwm 4 3000>; + reset-gpios = <&gpio2 7>; + dc-gpios = <&gpio2 8>; + spi-max-frequency = <10000000>; + solomon,com-lrremap; + solomon,com-invdir; + solomon,com-offset = <32>; + solomon,lookup-table = /bits/ 8 <0x3f 0x3f 0x3f 0x3f>; + }; + }; From patchwork Thu Apr 7 20:02:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 12805667 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3B924C433F5 for ; Thu, 7 Apr 2022 20:03:15 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2745C10EEA3; Thu, 7 Apr 2022 20:03:10 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5721A10EEA2 for ; Thu, 7 Apr 2022 20:03:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649361784; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=x93PCRKwviqgnFctHZ564pBYePcJr5i4ENQzOlQlhIE=; b=PLsWol43f4SCLKZMr4irROMYh0B3DJYnBZ4Dnr1sesR9CRGoFEX4QJ2icAkNqoXMaaK8LP uYVHelfReixnkUZNZxIuEhjx6DpMQgVE49GUTKSwp4+1Q5/SOIcR6OZMoW3ZA3J1sslryq 8rJlZCo+u8YGPIu1UFpCM+/wamAfc+A= 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-228-sjtnhdyAPXKqE6E8Wb7cxA-1; Thu, 07 Apr 2022 16:03:03 -0400 X-MC-Unique: sjtnhdyAPXKqE6E8Wb7cxA-1 Received: by mail-wm1-f70.google.com with SMTP id k39-20020a05600c1ca700b0038e6f5d2f40so1764708wms.6 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=ucqsYcXFafdxtWdemzkZv4p2xBttdmmbIbluUhiUSgtTB7VNcQRYXWoE+ppMlbkfjB npdPcFVOoGoMReh3m+pHIfy8W4z4e7/n6nTugBX1hYzwWHSF7sDA64mYXWvofcGwD6Rz 7sOTvT5djf+h5XPxPxWCeY9cEfIHCDZ9isWULk96tTAjrV00xAcxcwYVHqIuSV2itBoJ 2XLtdzIFGD9EK+Vcgy66Q6YjPqfSLkkTBQJP34ZcHp20METVArlYqPGsSkeSDUMrSlyp EZqnh5IOF1PzJ8nHbUvwl2lIDKK9kmWQoLhK5kfquc2EO2U/IeA5iv5+khgF7vJdJ0pR ZofA== X-Gm-Message-State: AOAM530HrRDE6AuXcFbzaAN7WmdxzKzbhnDEhSJrsoSqjOjgQnEMbngz UcgojkzGtWrN+OtuaX8oUo6reGeQkgNgohS67/duSOYlAFvhgULF1QVt3TrWNI79afNbKO7EsCJ gyM68HMWhcz13sEpc4yon3FXUtRfg X-Received: by 2002:a7b:cb46:0:b0:37b:dd79:e1c4 with SMTP id v6-20020a7bcb46000000b0037bdd79e1c4mr13618119wmj.39.1649361782231; 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 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 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=javierm@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chen-Yu Tsai , David Airlie , Javier Martinez Canillas , dri-devel@lists.freedesktop.org, Mark Brown , Geert Uytterhoeven , Andy Shevchenko Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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/solomon/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[] = { .compatible = "sinowealth,sh1106-i2c", .data = &ssd130x_sh1106_deviceinfo, }, + { + .compatible = "solomon,ssd1305-i2c", + .data = &ssd130x_ssd1305_deviceinfo, + }, + { + .compatible = "solomon,ssd1306-i2c", + .data = &ssd130x_ssd1306_deviceinfo, + }, + { + .compatible = "solomon,ssd1307-i2c", + .data = &ssd130x_ssd1307_deviceinfo, + }, + { + .compatible = "solomon,ssd1309-i2c", + .data = &ssd130x_ssd1309_deviceinfo, + }, + /* Deprecated but remain for backward compatibility */ { .compatible = "solomon,ssd1305fb-i2c", .data = &ssd130x_ssd1305_deviceinfo, From patchwork Thu Apr 7 20:02:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 12805669 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 883AEC433F5 for ; Thu, 7 Apr 2022 20:03:19 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5E35210EEA6; Thu, 7 Apr 2022 20:03:14 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id A762F10EEA2 for ; Thu, 7 Apr 2022 20:03:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649361785; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TE4gPpLf7WhkN5ezB0vCrjVorkv1sMpiSBwQ7irjd6Q=; b=Sh7MRsYivxlkv+vI85/72hk6iqMjljRRIqWBoTQK0Sf26J30p462FWEOnCPkVwG+Uk4EQq bwA3pxbNWafLn2vgKwEVzItHkMJnChghYTgUeYXlXjJbZwdUiLn+BzCMahYur76muEhRfY LRK7NHLbQ8R6fQZhCvMP1roJ5c3UrAg= 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.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-260-C8FsF8kmOXihjk3tx3QBZA-1; Thu, 07 Apr 2022 16:03:04 -0400 X-MC-Unique: C8FsF8kmOXihjk3tx3QBZA-1 Received: by mail-wm1-f71.google.com with SMTP id v191-20020a1cacc8000000b0038ce818d2efso1768967wme.1 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=AKiSTBJdbtWcNMFXSuX3ntr01V3vMS1YHNTRfgOK2IpSiLhySL6L+TWx3ejFBc4Ed/ 1pTevoXT03k1LKraA/AsD3jezeVRTp26JIzrO4erExyCHAG9NsmpPGE4Uki1wskwU8g5 bd7469+n8gcH6QVsQAXlTSioPP8E9gT/tlYwKWuNKXdFlHsQCE8cjM7Aitn0pAcU7JzD fCL8Ac6hknNhJ3UzXkcUQSY4wKfdP/kXmrwbWCH/C55925qE4vmpml1mItHym4acyOGM dKy9oFTwmFrssqgzY3P1FccCNHSloVi6pOyjivTpx1Di3O9UGM3Jxc8PmraYCXfZUDZQ Ir/A== X-Gm-Message-State: AOAM530XBByuvi+b8riyHOZUI2UBPd1r6hjV9egrDqRYlXxgQjXCUB4b ZAKzn4JALimesWcPYua54H63OEdPoeNpxk4I6QzjjbO85nlwfSMCtQiP5D1dXA5mSFakxpy6oVg 3DnodXDABOdlEplu71UHXdB5NKH+r X-Received: by 2002:adf:9dd2:0:b0:206:14f9:6432 with SMTP id q18-20020adf9dd2000000b0020614f96432mr11931358wre.129.1649361783396; 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 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 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=javierm@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chen-Yu Tsai , David Airlie , Javier Martinez Canillas , dri-devel@lists.freedesktop.org, Mark Brown , Geert Uytterhoeven , Andy Shevchenko Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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/solomon/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 *client) ssd130x_shutdown(ssd130x); } -static struct ssd130x_deviceinfo ssd130x_sh1106_deviceinfo = { - .default_vcomh = 0x40, - .default_dclk_div = 1, - .default_dclk_frq = 5, - .page_mode_only = 1, -}; - -static struct ssd130x_deviceinfo ssd130x_ssd1305_deviceinfo = { - .default_vcomh = 0x34, - .default_dclk_div = 1, - .default_dclk_frq = 7, -}; - -static struct ssd130x_deviceinfo ssd130x_ssd1306_deviceinfo = { - .default_vcomh = 0x20, - .default_dclk_div = 1, - .default_dclk_frq = 8, - .need_chargepump = 1, -}; - -static struct ssd130x_deviceinfo ssd130x_ssd1307_deviceinfo = { - .default_vcomh = 0x20, - .default_dclk_div = 2, - .default_dclk_frq = 12, - .need_pwm = 1, -}; - -static struct ssd130x_deviceinfo ssd130x_ssd1309_deviceinfo = { - .default_vcomh = 0x34, - .default_dclk_div = 1, - .default_dclk_frq = 10, -}; - static const struct of_device_id ssd130x_of_match[] = { { .compatible = "sinowealth,sh1106-i2c", - .data = &ssd130x_sh1106_deviceinfo, + .data = SH1106_ID, }, { .compatible = "solomon,ssd1305-i2c", - .data = &ssd130x_ssd1305_deviceinfo, + .data = (void *)SSD1305_ID, }, { .compatible = "solomon,ssd1306-i2c", - .data = &ssd130x_ssd1306_deviceinfo, + .data = (void *)SSD1306_ID, }, { .compatible = "solomon,ssd1307-i2c", - .data = &ssd130x_ssd1307_deviceinfo, + .data = (void *)SSD1307_ID, }, { .compatible = "solomon,ssd1309-i2c", - .data = &ssd130x_ssd1309_deviceinfo, + .data = (void *)SSD1309_ID, }, /* Deprecated but remain for backward compatibility */ { .compatible = "solomon,ssd1305fb-i2c", - .data = &ssd130x_ssd1305_deviceinfo, + .data = (void *)SSD1305_ID, }, { .compatible = "solomon,ssd1306fb-i2c", - .data = &ssd130x_ssd1306_deviceinfo, + .data = (void *)SSD1306_ID, }, { .compatible = "solomon,ssd1307fb-i2c", - .data = &ssd130x_ssd1307_deviceinfo, + .data = (void *)SSD1307_ID, }, { .compatible = "solomon,ssd1309fb-i2c", - .data = &ssd130x_ssd1309_deviceinfo, + .data = (void *)SSD1309_ID, }, { /* sentinel */ } }; diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.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 -#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 @@ #define MAX_CONTRAST 255 +static struct ssd130x_deviceinfo ssd130x_variants[] = { + { + .default_vcomh = 0x40, + .default_dclk_div = 1, + .default_dclk_frq = 5, + .page_mode_only = 1, + }, + { + .variant = SSD1305_ID, + .default_vcomh = 0x34, + .default_dclk_div = 1, + .default_dclk_frq = 7, + }, + { + .variant = SSD1306_ID, + .default_vcomh = 0x20, + .default_dclk_div = 1, + .default_dclk_frq = 8, + .need_chargepump = 1, + }, + { + .variant = SSD1307_ID, + .default_vcomh = 0x20, + .default_dclk_div = 2, + .default_dclk_frq = 12, + .need_pwm = 1, + }, + { + .variant = SSD1309_ID, + .default_vcomh = 0x34, + .default_dclk_div = 1, + .default_dclk_frq = 10, + } +}; + +static const struct ssd130x_deviceinfo *ssd13x_variant_to_info(enum ssd130x_variants variant) +{ + int i; + const struct ssd130x_deviceinfo *info; + + for (i = 0; i < ARRAY_SIZE(ssd130x_variants); i++) { + info = &ssd130x_variants[i]; + if (info->variant == 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 *regmap) { 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 *dev, struct regmap *regmap) ssd130x->dev = dev; ssd130x->regmap = regmap; - ssd130x->device_info = device_get_match_data(dev); + + variant = (enum ssd130x_variants)device_get_match_data(dev); + ssd130x->device_info = ssd13x_variant_to_info(variant); + if (!ssd130x->device_info) + return ERR_PTR(-EINVAL); if (ssd130x->device_info->page_mode_only) ssd130x->page_address_mode = 1; diff --git a/drivers/gpu/drm/solomon/ssd130x.h b/drivers/gpu/drm/solomon/ssd130x.h index f5b062576fdf..4e0b62a41aa3 100644 --- a/drivers/gpu/drm/solomon/ssd130x.h +++ b/drivers/gpu/drm/solomon/ssd130x.h @@ -18,7 +18,20 @@ #include +#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; From patchwork Thu Apr 7 20:02:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 12805668 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6A4C8C433EF for ; Thu, 7 Apr 2022 20:03:17 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7478C10EEA5; Thu, 7 Apr 2022 20:03:11 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id A414710EEA6 for ; Thu, 7 Apr 2022 20:03:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649361789; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5NcP0b+Q0Ufxh9RUzkPjmCQaibubGP7dZRDqNH5/afA=; b=gw5/GsRNaStdFIy1jxdpwFry5I85LurhqNBu3t/NR7ojzCmkkOXWZkwpxbOTADXXhTBTjw ynB53aTjQbZsYMQ/kkX7KyI3DEXe1tmRry7ot98FtPaqsVslR179xAwIcCxREgeDYS7AfI EaNz+4pc3IXs9FXFfTk0wpRQlWb/WNI= 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-575-RG9mFQO-MmiFONZ55WMlcg-1; Thu, 07 Apr 2022 16:03:06 -0400 X-MC-Unique: RG9mFQO-MmiFONZ55WMlcg-1 Received: by mail-wm1-f72.google.com with SMTP id o35-20020a05600c512300b0038e83a52c71so1765671wms.7 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=WG+g0kEkxNhJW7C1SkMG+DBxHJAJ+AKWJugEoxatLVuh6mFixS7WRtXGOskCARs+50 6omtPPO1HnSRLfSe48g4KcksNSTKUNczFtkskILEzvQ6flLtuYnJPaNZ0OVTFwvYhgA0 oABuBAqf/VGC1+HSvL1KlcvtIJ+7Z1A4FS5KOFDr6DTO2rDnXZ3fEmW0MhmGYPJhe/Lf Zak1bAfbB8lit3YtiFfS5qqmehmxus2r1g4AI6TXDki6ilBUNYb3NeYdB/U5xdw17+AX MZcDWV6DDnC7q8g1wz9fzoiHAXV0aRYBDURD4YfE0GLJciRYG6hD9FPchtW/+mg7JAkp nW7g== X-Gm-Message-State: AOAM5317g3sMizkCEEvEqn2S3lyzlAdcW/jfStgqDPS4P2GohZsWXmIb dhBHTC753sYVVZfbY3d01bDUe7yTZky/WBy13vJQ/osQQgetAPtaQ94EO3/7O9wnnoYM41fIySc qXAzigB4SjF/wJOyRIQuF0AvGMXV0 X-Received: by 2002:a5d:5584:0:b0:206:d53:b553 with SMTP id i4-20020a5d5584000000b002060d53b553mr12234297wrv.222.1649361785087; 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 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 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=javierm@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chen-Yu Tsai , David Airlie , YueHaibing , Javier Martinez Canillas , dri-devel@lists.freedesktop.org, Chen-Yu Tsai , Mark Brown , Geert Uytterhoeven , Maxime Ripard , Andy Shevchenko Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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/Kconfig 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. 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/Makefile index 4bfc5acb0447..b5fc792257d7 100644 --- a/drivers/gpu/drm/solomon/Makefile +++ b/drivers/gpu/drm/solomon/Makefile @@ -1,2 +1,3 @@ obj-$(CONFIG_DRM_SSD130X) += ssd130x.o obj-$(CONFIG_DRM_SSD130X_I2C) += ssd130x-i2c.o +obj-$(CONFIG_DRM_SSD130X_SPI) += ssd130x-spi.o diff --git a/drivers/gpu/drm/solomon/ssd130x-spi.c b/drivers/gpu/drm/solomon/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 = { + .reg_bits = 8, + .val_bits = 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 = context; + struct spi_device *spi = t->spi; + const u8 *reg = data; + + if (*reg == SSD130X_COMMAND) + gpiod_set_value_cansleep(t->dc, 0); + + if (*reg == 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_size, + 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 = { + .write = ssd130x_spi_write, + .read = ssd130x_spi_read, +}; + +static struct gpio_desc *ssd130x_spi_get_dc(struct device *dev) +{ + struct gpio_desc *dc = 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 = &spi->dev; + + t = devm_kzalloc(dev, sizeof(*t), GFP_KERNEL); + if (!t) + return dev_err_probe(dev, -ENOMEM, + "Failed to allocate SPI transport data\n"); + + t->spi = spi; + + t->dc = ssd130x_spi_get_dc(&spi->dev); + if (IS_ERR(t->dc)) + return PTR_ERR(t->dc); + + regmap = devm_regmap_init(dev, ®map_ssd130x_spi_bus, t, + &ssd130x_spi_regmap_config); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + ssd130x = 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 = spi_get_drvdata(spi); + + ssd130x_remove(ssd130x); +} + +static void ssd130x_spi_shutdown(struct spi_device *spi) +{ + struct ssd130x_device *ssd130x = spi_get_drvdata(spi); + + ssd130x_shutdown(ssd130x); +} + +static const struct of_device_id ssd130x_of_match[] = { + { + .compatible = "sinowealth,sh1106-spi", + .data = (void *)SH1106_ID, + }, + { + .compatible = "solomon,ssd1305-spi", + .data = (void *)SSD1305_ID, + }, + { + .compatible = "solomon,ssd1306-spi", + .data = (void *)SSD1306_ID, + }, + { + .compatible = "solomon,ssd1307-spi", + .data = (void *)SSD1307_ID, + }, + { + .compatible = "solomon,ssd1309-spi", + .data = (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 not be + * auto loaded, unless it contains an alias that matches the MODALIAS reported. + * + * To workaround this issue, add a SPI device ID table. Even when this should + * not be needed for this driver to match the registered SPI devices. + */ +static const struct spi_device_id ssd130x_spi_table[] = { + { "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 = { + .driver = { + .name = DRIVER_NAME, + .of_match_table = ssd130x_of_match, + }, + .probe = ssd130x_spi_probe, + .remove = ssd130x_spi_remove, + .shutdown = ssd130x_spi_shutdown, +}; +module_spi_driver(ssd130x_spi_driver); + +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_AUTHOR("Javier Martinez Canillas "); +MODULE_LICENSE("GPL");