* [PATCH 0/2] drm/panel: add fannal c3004 panel @ 2023-05-19 14:24 Paulo Pavacic 2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic ` (2 more replies) 0 siblings, 3 replies; 13+ messages in thread From: Paulo Pavacic @ 2023-05-19 14:24 UTC (permalink / raw) To: neil.armstrong, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt Cc: dri-devel, linux-kernel, devicetree, Paulo Pavacic Fannal C3004 is a 2 lane MIPI DSI 480x800 panel which requires initialization with DSI DCS commands. After some commands delay is required. In previous discussions for device tree [1] [2] and device driver [3] were named mipi-dsi-bringup. [1] https://patchwork.ozlabs.org/project/devicetree-bindings/patch/CAO9szn3t-giVipb5oH_3mzQZbnXbDqqz0WEg8uAmo-1W2uKzFg@mail.gmail.com/ [2] https://patchwork.ozlabs.org/project/devicetree-bindings/patch/CAO9szn18KsR0c+U8EEY1=xnmsKMxy6SEArMUic0z=aYJDVwWCQ@mail.gmail.com/ [3] https://lists.freedesktop.org/archives/dri-devel/2023-May/404775.html Paulo Pavacic (2): dt-bindings: display: panel: add fannal,c3004 drm/panel-fannal-c3004: Add fannal c3004 DSI panel .../bindings/display/panel/fannal,c3004.yaml | 75 ++++ .../devicetree/bindings/vendor-prefixes.yaml | 2 + MAINTAINERS | 7 + drivers/gpu/drm/panel/Kconfig | 11 + drivers/gpu/drm/panel/Makefile | 1 + drivers/gpu/drm/panel/panel-fannal-c3004.c | 405 ++++++++++++++++++ 6 files changed, 501 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml create mode 100644 drivers/gpu/drm/panel/panel-fannal-c3004.c -- 2.40.1 ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 2023-05-19 14:24 [PATCH 0/2] drm/panel: add fannal c3004 panel Paulo Pavacic @ 2023-05-19 14:24 ` Paulo Pavacic 2023-05-19 16:41 ` Conor Dooley 2023-05-20 13:58 ` kernel test robot 2023-05-19 14:24 ` [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel Paulo Pavacic 2023-05-22 8:55 ` [PATCH 0/2] drm/panel: add fannal c3004 panel neil.armstrong 2 siblings, 2 replies; 13+ messages in thread From: Paulo Pavacic @ 2023-05-19 14:24 UTC (permalink / raw) To: neil.armstrong, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt Cc: dri-devel, linux-kernel, devicetree, Paulo Pavacic Added fannal to vendor-prefixes and dt bindings for Fannal C3004. Fannal C3004 is a 480x800 MIPI DSI Panel which requires DCS initialization sequences with certain delays between certain commands. Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com> --- v3 changelog: - renamed yml file - refactored yml file to describe fannal,c3004 - added matrix URI to MAINTAINERS v2 changelog: - revised driver title, now describes purpose - revised description, now describes hw - revised maintainers, now has only 1 mail - removed diacritics from commit/commit author - properties/compatible is now enum - compatible using only lowercase - revised dts example - modified MAINTAINERS in this commit (instead of driver commit) - dt_bindings_check checked yml - checkpatch warning fixed --- .../bindings/display/panel/fannal,c3004.yaml | 75 +++++++++++++++++++ .../devicetree/bindings/vendor-prefixes.yaml | 2 + MAINTAINERS | 6 ++ 3 files changed, 83 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml diff --git a/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml new file mode 100644 index 000000000000..a86b5ce02aa2 --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml @@ -0,0 +1,75 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/panel/fannal,c3004.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Fannal C3004 MIPI-DSI + +maintainers: + - Paulo Pavacic <pavacic.p@gmail.com> + +description: | + Fannal C3004 is a 480x800 panel which requires DSI DCS + initialization sequences. + +allOf: + - $ref: panel-common.yaml# + +properties: + compatible: + items: + - const: fannal,c3004 + + reg: true + reset-gpios: true + + vdd-supply: + description: power supply voltage + vddio-supply: + description: power supply voltage for IO + + width-mm: + description: physical panel width [mm] + height-mm: + description: physical panel height [mm] + + panel-timing: true + +required: + - compatible + - reg + - reset-gpios + +additionalProperties: false + +examples: + - | + #include <dt-bindings/gpio/gpio.h> + dsi { + #address-cells = <1>; + #size-cells = <0>; + panel@0 { + compatible = "fannal,c3004"; + reg = <0>; + pinctrl-0 = <&pinctrl_mipi_dsi_rst>; + pinctrl-names = "default"; + reset-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; + vdd-supply = <®1>; + vddio-supply = <®2>; + width-mm = <93>; + height-mm = <56>; + panel-timing { + clock-frequency = <27000000>; + hactive = <480>; + vactive = <800>; + hfront-porch = <30>; + hback-porch = <30>; + hsync-len = <8>; + vback-porch = <30>; + vfront-porch = <30>; + vsync-len = <8>; + }; + }; + }; +... diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml index 82d39ab0231b..f962750f630a 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml @@ -462,6 +462,8 @@ patternProperties: description: Facebook "^fairphone,.*": description: Fairphone B.V. + "^fannal,.*": + description: Fannal Electronics Co., Ltd "^faraday,.*": description: Faraday Technology Corporation "^fastrax,.*": diff --git a/MAINTAINERS b/MAINTAINERS index 5c22c828ab46..62374c8424b9 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -6427,6 +6427,12 @@ T: git git://anongit.freedesktop.org/drm/drm-misc F: Documentation/devicetree/bindings/display/panel/ebbg,ft8719.yaml F: drivers/gpu/drm/panel/panel-ebbg-ft8719.c +DRM DRIVER FOR FANNAL C3004373132019A +M: Paulo Pavacic <pavacic.p@gmail.com> +S: Maintained +C: matrix:r/mipi-dsi-bringup:matrix.org +F: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml + DRM DRIVER FOR FARADAY TVE200 TV ENCODER M: Linus Walleij <linus.walleij@linaro.org> S: Maintained -- 2.40.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic @ 2023-05-19 16:41 ` Conor Dooley 2023-06-05 14:33 ` Paulo Pavacic 2023-05-20 13:58 ` kernel test robot 1 sibling, 1 reply; 13+ messages in thread From: Conor Dooley @ 2023-05-19 16:41 UTC (permalink / raw) To: Paulo Pavacic Cc: neil.armstrong, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel, devicetree [-- Attachment #1: Type: text/plain, Size: 3992 bytes --] Hey Paulo, On Fri, May 19, 2023 at 04:24:55PM +0200, Paulo Pavacic wrote: > > Added fannal to vendor-prefixes and dt bindings for Fannal C3004. > Fannal C3004 is a 480x800 MIPI DSI Panel which requires > DCS initialization sequences with certain delays between certain > commands. > > Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com> > --- > v3 changelog: > - renamed yml file > - refactored yml file to describe fannal,c3004 > - added matrix URI to MAINTAINERS > v2 changelog: > - revised driver title, now describes purpose > - revised description, now describes hw > - revised maintainers, now has only 1 mail > - removed diacritics from commit/commit author > - properties/compatible is now enum > - compatible using only lowercase > - revised dts example > - modified MAINTAINERS in this commit (instead of driver commit) > - dt_bindings_check checked yml > - checkpatch warning fixed > --- > .../bindings/display/panel/fannal,c3004.yaml | 75 +++++++++++++++++++ > .../devicetree/bindings/vendor-prefixes.yaml | 2 + > MAINTAINERS | 6 ++ > 3 files changed, 83 insertions(+) > create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > > diff --git a/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > new file mode 100644 > index 000000000000..a86b5ce02aa2 > --- /dev/null > +++ b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > @@ -0,0 +1,75 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/display/panel/fannal,c3004.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Fannal C3004 MIPI-DSI > + > +maintainers: > + - Paulo Pavacic <pavacic.p@gmail.com> > + > +description: | > + Fannal C3004 is a 480x800 panel which requires DSI DCS > + initialization sequences. > + > +allOf: > + - $ref: panel-common.yaml# > + > +properties: > + compatible: > + items: > + - const: fannal,c3004 > + > + reg: true Are there no restrictions on the number of reg entries? > + reset-gpios: true Can you put a blank line between properties please? > + > + vdd-supply: > + description: power supply voltage > + vddio-supply: > + description: power supply voltage for IO > + > + width-mm: > + description: physical panel width [mm] > + height-mm: > + description: physical panel height [mm] Here and for the supplies too. > diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml > index 82d39ab0231b..f962750f630a 100644 > --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml > +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml > @@ -462,6 +462,8 @@ patternProperties: > description: Facebook > "^fairphone,.*": > description: Fairphone B.V. > + "^fannal,.*": > + description: Fannal Electronics Co., Ltd This needs to be split into a commit of its own. Thanks, Conor. > "^faraday,.*": > description: Faraday Technology Corporation > "^fastrax,.*": > diff --git a/MAINTAINERS b/MAINTAINERS > index 5c22c828ab46..62374c8424b9 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -6427,6 +6427,12 @@ T: git git://anongit.freedesktop.org/drm/drm-misc > F: Documentation/devicetree/bindings/display/panel/ebbg,ft8719.yaml > F: drivers/gpu/drm/panel/panel-ebbg-ft8719.c > > +DRM DRIVER FOR FANNAL C3004373132019A > +M: Paulo Pavacic <pavacic.p@gmail.com> > +S: Maintained > +C: matrix:r/mipi-dsi-bringup:matrix.org > +F: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml > + > DRM DRIVER FOR FARADAY TVE200 TV ENCODER > M: Linus Walleij <linus.walleij@linaro.org> > S: Maintained > -- > 2.40.1 > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 2023-05-19 16:41 ` Conor Dooley @ 2023-06-05 14:33 ` Paulo Pavacic 2023-06-05 14:43 ` Conor Dooley 0 siblings, 1 reply; 13+ messages in thread From: Paulo Pavacic @ 2023-06-05 14:33 UTC (permalink / raw) To: Conor Dooley Cc: neil.armstrong, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel, devicetree Hello Conor, pet, 19. svi 2023. u 18:41 Conor Dooley <conor@kernel.org> napisao je: > > Hey Paulo, > > On Fri, May 19, 2023 at 04:24:55PM +0200, Paulo Pavacic wrote: > > > > Added fannal to vendor-prefixes and dt bindings for Fannal C3004. > > Fannal C3004 is a 480x800 MIPI DSI Panel which requires > > DCS initialization sequences with certain delays between certain > > commands. > > > > Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com> > > --- > > v3 changelog: > > - renamed yml file > > - refactored yml file to describe fannal,c3004 > > - added matrix URI to MAINTAINERS > > v2 changelog: > > - revised driver title, now describes purpose > > - revised description, now describes hw > > - revised maintainers, now has only 1 mail > > - removed diacritics from commit/commit author > > - properties/compatible is now enum > > - compatible using only lowercase > > - revised dts example > > - modified MAINTAINERS in this commit (instead of driver commit) > > - dt_bindings_check checked yml > > - checkpatch warning fixed > > --- > > .../bindings/display/panel/fannal,c3004.yaml | 75 +++++++++++++++++++ > > .../devicetree/bindings/vendor-prefixes.yaml | 2 + > > MAINTAINERS | 6 ++ > > 3 files changed, 83 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > > > > diff --git a/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > > new file mode 100644 > > index 000000000000..a86b5ce02aa2 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > > @@ -0,0 +1,75 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/display/panel/fannal,c3004.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Fannal C3004 MIPI-DSI > > + > > +maintainers: > > + - Paulo Pavacic <pavacic.p@gmail.com> > > + > > +description: | > > + Fannal C3004 is a 480x800 panel which requires DSI DCS > > + initialization sequences. > > + > > +allOf: > > + - $ref: panel-common.yaml# > > + > > +properties: > > + compatible: > > + items: > > + - const: fannal,c3004 > > + > > + reg: true > > Are there no restrictions on the number of reg entries? What do you mean by this? May I have some example if possible? > > > + reset-gpios: true > > Can you put a blank line between properties please? > > > + > > + vdd-supply: > > + description: power supply voltage > > + vddio-supply: > > + description: power supply voltage for IO > > + > > + width-mm: > > + description: physical panel width [mm] > > + height-mm: > > + description: physical panel height [mm] > > Here and for the supplies too. > > > diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml > > index 82d39ab0231b..f962750f630a 100644 > > --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml > > +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml > > @@ -462,6 +462,8 @@ patternProperties: > > description: Facebook > > "^fairphone,.*": > > description: Fairphone B.V. > > + "^fannal,.*": > > + description: Fannal Electronics Co., Ltd > > This needs to be split into a commit of its own. > > Thanks, > Conor. > > > "^faraday,.*": > > description: Faraday Technology Corporation > > "^fastrax,.*": > > diff --git a/MAINTAINERS b/MAINTAINERS > > index 5c22c828ab46..62374c8424b9 100644 > > --- a/MAINTAINERS > > +++ b/MAINTAINERS > > @@ -6427,6 +6427,12 @@ T: git git://anongit.freedesktop.org/drm/drm-misc > > F: Documentation/devicetree/bindings/display/panel/ebbg,ft8719.yaml > > F: drivers/gpu/drm/panel/panel-ebbg-ft8719.c > > > > +DRM DRIVER FOR FANNAL C3004373132019A > > +M: Paulo Pavacic <pavacic.p@gmail.com> > > +S: Maintained > > +C: matrix:r/mipi-dsi-bringup:matrix.org > > +F: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml > > + > > DRM DRIVER FOR FARADAY TVE200 TV ENCODER > > M: Linus Walleij <linus.walleij@linaro.org> > > S: Maintained > > -- > > 2.40.1 > > Thanks, Paulo ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 2023-06-05 14:33 ` Paulo Pavacic @ 2023-06-05 14:43 ` Conor Dooley 2023-06-05 14:56 ` Paulo Pavacic 0 siblings, 1 reply; 13+ messages in thread From: Conor Dooley @ 2023-06-05 14:43 UTC (permalink / raw) To: Paulo Pavacic Cc: neil.armstrong, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel, devicetree [-- Attachment #1: Type: text/plain, Size: 2816 bytes --] On Mon, Jun 05, 2023 at 04:33:15PM +0200, Paulo Pavacic wrote: > Hello Conor, > > pet, 19. svi 2023. u 18:41 Conor Dooley <conor@kernel.org> napisao je: > > > > Hey Paulo, > > > > On Fri, May 19, 2023 at 04:24:55PM +0200, Paulo Pavacic wrote: > > > > > > Added fannal to vendor-prefixes and dt bindings for Fannal C3004. > > > Fannal C3004 is a 480x800 MIPI DSI Panel which requires > > > DCS initialization sequences with certain delays between certain > > > commands. > > > > > > Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com> > > > --- > > > v3 changelog: > > > - renamed yml file > > > - refactored yml file to describe fannal,c3004 > > > - added matrix URI to MAINTAINERS > > > v2 changelog: > > > - revised driver title, now describes purpose > > > - revised description, now describes hw > > > - revised maintainers, now has only 1 mail > > > - removed diacritics from commit/commit author > > > - properties/compatible is now enum > > > - compatible using only lowercase > > > - revised dts example > > > - modified MAINTAINERS in this commit (instead of driver commit) > > > - dt_bindings_check checked yml > > > - checkpatch warning fixed > > > --- > > > .../bindings/display/panel/fannal,c3004.yaml | 75 +++++++++++++++++++ > > > .../devicetree/bindings/vendor-prefixes.yaml | 2 + > > > MAINTAINERS | 6 ++ > > > 3 files changed, 83 insertions(+) > > > create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > > > > > > diff --git a/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > > > new file mode 100644 > > > index 000000000000..a86b5ce02aa2 > > > --- /dev/null > > > +++ b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > > > @@ -0,0 +1,75 @@ > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > > +%YAML 1.2 > > > +--- > > > +$id: http://devicetree.org/schemas/display/panel/fannal,c3004.yaml# > > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > > + > > > +title: Fannal C3004 MIPI-DSI > > > + > > > +maintainers: > > > + - Paulo Pavacic <pavacic.p@gmail.com> > > > + > > > +description: | > > > + Fannal C3004 is a 480x800 panel which requires DSI DCS > > > + initialization sequences. > > > + > > > +allOf: > > > + - $ref: panel-common.yaml# > > > + > > > +properties: > > > + compatible: > > > + items: > > > + - const: fannal,c3004 > > > + > > > + reg: true > > > > Are there no restrictions on the number of reg entries? > > What do you mean by this? May I have some example if possible? I was commenting on the lack of minItems and/or maxItems. Cheers, Conor. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 2023-06-05 14:43 ` Conor Dooley @ 2023-06-05 14:56 ` Paulo Pavacic 2023-06-05 15:08 ` Conor Dooley 0 siblings, 1 reply; 13+ messages in thread From: Paulo Pavacic @ 2023-06-05 14:56 UTC (permalink / raw) To: Conor Dooley Cc: neil.armstrong, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel, devicetree Hello Conor, pon, 5. lip 2023. u 16:43 Conor Dooley <conor@kernel.org> napisao je: > > On Mon, Jun 05, 2023 at 04:33:15PM +0200, Paulo Pavacic wrote: > > Hello Conor, > > > > pet, 19. svi 2023. u 18:41 Conor Dooley <conor@kernel.org> napisao je: > > > > > > Hey Paulo, > > > > > > On Fri, May 19, 2023 at 04:24:55PM +0200, Paulo Pavacic wrote: > > > > > > > > Added fannal to vendor-prefixes and dt bindings for Fannal C3004. > > > > Fannal C3004 is a 480x800 MIPI DSI Panel which requires > > > > DCS initialization sequences with certain delays between certain > > > > commands. > > > > > > > > Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com> > > > > --- > > > > v3 changelog: > > > > - renamed yml file > > > > - refactored yml file to describe fannal,c3004 > > > > - added matrix URI to MAINTAINERS > > > > v2 changelog: > > > > - revised driver title, now describes purpose > > > > - revised description, now describes hw > > > > - revised maintainers, now has only 1 mail > > > > - removed diacritics from commit/commit author > > > > - properties/compatible is now enum > > > > - compatible using only lowercase > > > > - revised dts example > > > > - modified MAINTAINERS in this commit (instead of driver commit) > > > > - dt_bindings_check checked yml > > > > - checkpatch warning fixed > > > > --- > > > > .../bindings/display/panel/fannal,c3004.yaml | 75 +++++++++++++++++++ > > > > .../devicetree/bindings/vendor-prefixes.yaml | 2 + > > > > MAINTAINERS | 6 ++ > > > > 3 files changed, 83 insertions(+) > > > > create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > > > > > > > > diff --git a/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > > > > new file mode 100644 > > > > index 000000000000..a86b5ce02aa2 > > > > --- /dev/null > > > > +++ b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > > > > @@ -0,0 +1,75 @@ > > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > > > +%YAML 1.2 > > > > +--- > > > > +$id: http://devicetree.org/schemas/display/panel/fannal,c3004.yaml# > > > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > > > + > > > > +title: Fannal C3004 MIPI-DSI > > > > + > > > > +maintainers: > > > > + - Paulo Pavacic <pavacic.p@gmail.com> > > > > + > > > > +description: | > > > > + Fannal C3004 is a 480x800 panel which requires DSI DCS > > > > + initialization sequences. > > > > + > > > > +allOf: > > > > + - $ref: panel-common.yaml# > > > > + > > > > +properties: > > > > + compatible: > > > > + items: > > > > + - const: fannal,c3004 > > > > + > > > > + reg: true > > > > > > Are there no restrictions on the number of reg entries? > > > > What do you mean by this? May I have some example if possible? > > I was commenting on the lack of minItems and/or maxItems. Sorry this is my first patch, I still don't understand, why should I add `maxItems: 1` to the 'reg:' ? Isn't part of the code: > required: > - compatible > - reg > - reset-gpios making `minItems: 1` redundant for reg properties? > > Cheers, > Conor. Thanks, Paulo ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 2023-06-05 14:56 ` Paulo Pavacic @ 2023-06-05 15:08 ` Conor Dooley 0 siblings, 0 replies; 13+ messages in thread From: Conor Dooley @ 2023-06-05 15:08 UTC (permalink / raw) To: Paulo Pavacic Cc: neil.armstrong, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel, devicetree [-- Attachment #1: Type: text/plain, Size: 577 bytes --] On Mon, Jun 05, 2023 at 04:56:13PM +0200, Paulo Pavacic wrote: > Hello Conor, > > pon, 5. lip 2023. u 16:43 Conor Dooley <conor@kernel.org> napisao je: > Sorry this is my first patch, I still don't understand, why should I > add `maxItems: 1` to the 'reg:' ? > Isn't part of the code: > > required: > > - compatible > > - reg > > - reset-gpios > > making `minItems: 1` redundant for reg properties? I went and had another look, and you get enforcement of this from the dsi-controller binding if extra reg entries are added. Sorry for the noise. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic 2023-05-19 16:41 ` Conor Dooley @ 2023-05-20 13:58 ` kernel test robot 1 sibling, 0 replies; 13+ messages in thread From: kernel test robot @ 2023-05-20 13:58 UTC (permalink / raw) To: Paulo Pavacic, neil.armstrong, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt Cc: oe-kbuild-all, dri-devel, linux-kernel, devicetree, Paulo Pavacic [-- Attachment #1: Type: text/plain, Size: 1709 bytes --] Hi Paulo, kernel test robot noticed the following build warnings: [auto build test WARNING on drm-misc/drm-misc-next] [also build test WARNING on robh/for-next linus/master v6.4-rc2 next-20230519] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Paulo-Pavacic/dt-bindings-display-panel-add-fannal-c3004/20230519-230337 base: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next patch link: https://lore.kernel.org/r/20230519142456.2588145-2-pavacic.p%40gmail.com patch subject: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 reproduce: # https://github.com/intel-lab-lkp/linux/commit/bb04b236f1d090bd2f7c5780db6ce4f64d83e3b4 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Paulo-Pavacic/dt-bindings-display-panel-add-fannal-c3004/20230519-230337 git checkout bb04b236f1d090bd2f7c5780db6ce4f64d83e3b4 make menuconfig # enable CONFIG_COMPILE_TEST, CONFIG_WARN_MISSING_DOCUMENTS, CONFIG_WARN_ABI_ERRORS make htmldocs If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202305202129.6nESZs8s-lkp@intel.com/ All warnings (new ones prefixed by >>): >> Warning: MAINTAINERS references a file that doesn't exist: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki [-- Attachment #2: config --] [-- Type: text/plain, Size: 39612 bytes --] # # Automatically generated file; DO NOT EDIT. # Linux/x86_64 6.4.0-rc1 Kernel Configuration # CONFIG_CC_VERSION_TEXT="gcc-11 (Debian 11.3.0-12) 11.3.0" CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=110300 CONFIG_CLANG_VERSION=0 CONFIG_AS_IS_GNU=y CONFIG_AS_VERSION=24000 CONFIG_LD_IS_BFD=y CONFIG_LD_VERSION=24000 CONFIG_LLD_VERSION=0 CONFIG_CC_CAN_LINK=y CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y CONFIG_PAHOLE_VERSION=125 CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y CONFIG_THREAD_INFO_IN_TASK=y # # General setup # CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_COMPILE_TEST=y # CONFIG_WERROR is not set CONFIG_LOCALVERSION="" CONFIG_BUILD_SALT="" CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y CONFIG_HAVE_KERNEL_XZ=y CONFIG_HAVE_KERNEL_LZO=y CONFIG_HAVE_KERNEL_LZ4=y CONFIG_HAVE_KERNEL_ZSTD=y CONFIG_KERNEL_GZIP=y # CONFIG_KERNEL_BZIP2 is not set # CONFIG_KERNEL_LZMA is not set # CONFIG_KERNEL_XZ is not set # CONFIG_KERNEL_LZO is not set # CONFIG_KERNEL_LZ4 is not set # CONFIG_KERNEL_ZSTD is not set CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" # CONFIG_SYSVIPC is not set # CONFIG_WATCH_QUEUE is not set # CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_USELIB is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y # # IRQ subsystem # CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_HARDIRQS_SW_RESEND=y CONFIG_IRQ_DOMAIN=y CONFIG_IRQ_DOMAIN_HIERARCHY=y CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y CONFIG_GENERIC_IRQ_RESERVATION_MODE=y CONFIG_IRQ_FORCED_THREADING=y CONFIG_SPARSE_IRQ=y # end of IRQ subsystem CONFIG_CLOCKSOURCE_WATCHDOG=y CONFIG_ARCH_CLOCKSOURCE_INIT=y CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y CONFIG_GENERIC_CMOS_UPDATE=y CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y # # Timers subsystem # CONFIG_HZ_PERIODIC=y # CONFIG_NO_HZ_IDLE is not set # CONFIG_NO_HZ is not set # CONFIG_HIGH_RES_TIMERS is not set CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=125 # end of Timers subsystem CONFIG_HAVE_EBPF_JIT=y CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y # # BPF subsystem # # CONFIG_BPF_SYSCALL is not set # end of BPF subsystem CONFIG_PREEMPT_NONE_BUILD=y CONFIG_PREEMPT_NONE=y # CONFIG_PREEMPT_VOLUNTARY is not set # CONFIG_PREEMPT is not set # CONFIG_PREEMPT_DYNAMIC is not set # # CPU/Task time and stats accounting # CONFIG_TICK_CPU_ACCOUNTING=y # CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set # CONFIG_IRQ_TIME_ACCOUNTING is not set # CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_PSI is not set # end of CPU/Task time and stats accounting CONFIG_CPU_ISOLATION=y # # RCU Subsystem # CONFIG_TINY_RCU=y # CONFIG_RCU_EXPERT is not set CONFIG_TINY_SRCU=y # end of RCU Subsystem # CONFIG_IKCONFIG is not set # CONFIG_IKHEADERS is not set CONFIG_LOG_BUF_SHIFT=17 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y # # Scheduler features # # end of Scheduler features CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y CONFIG_CC_HAS_INT128=y CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" CONFIG_GCC11_NO_ARRAY_BOUNDS=y CONFIG_CC_NO_ARRAY_BOUNDS=y CONFIG_ARCH_SUPPORTS_INT128=y # CONFIG_CGROUPS is not set CONFIG_NAMESPACES=y # CONFIG_UTS_NS is not set # CONFIG_TIME_NS is not set # CONFIG_USER_NS is not set # CONFIG_PID_NS is not set # CONFIG_CHECKPOINT_RESTORE is not set # CONFIG_SCHED_AUTOGROUP is not set # CONFIG_RELAY is not set # CONFIG_BLK_DEV_INITRD is not set # CONFIG_BOOT_CONFIG is not set # CONFIG_INITRAMFS_PRESERVE_MTIME is not set CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_LD_ORPHAN_WARN=y CONFIG_LD_ORPHAN_WARN_LEVEL="warn" CONFIG_SYSCTL=y CONFIG_SYSCTL_EXCEPTION_TRACE=y CONFIG_HAVE_PCSPKR_PLATFORM=y # CONFIG_EXPERT is not set CONFIG_MULTIUSER=y CONFIG_SGETMASK_SYSCALL=y CONFIG_SYSFS_SYSCALL=y CONFIG_FHANDLE=y CONFIG_POSIX_TIMERS=y CONFIG_PRINTK=y CONFIG_BUG=y CONFIG_ELF_CORE=y CONFIG_PCSPKR_PLATFORM=y CONFIG_BASE_FULL=y CONFIG_FUTEX=y CONFIG_FUTEX_PI=y CONFIG_EPOLL=y CONFIG_SIGNALFD=y CONFIG_TIMERFD=y CONFIG_EVENTFD=y CONFIG_SHMEM=y CONFIG_AIO=y CONFIG_IO_URING=y CONFIG_ADVISE_SYSCALLS=y CONFIG_MEMBARRIER=y CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_SELFTEST is not set CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y CONFIG_RSEQ=y # CONFIG_EMBEDDED is not set CONFIG_HAVE_PERF_EVENTS=y # # Kernel Performance Events And Counters # CONFIG_PERF_EVENTS=y # end of Kernel Performance Events And Counters # CONFIG_PROFILING is not set # end of General setup CONFIG_64BIT=y CONFIG_X86_64=y CONFIG_X86=y CONFIG_INSTRUCTION_DECODER=y CONFIG_OUTPUT_FORMAT="elf64-x86-64" CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_MMU=y CONFIG_ARCH_MMAP_RND_BITS_MIN=28 CONFIG_ARCH_MMAP_RND_BITS_MAX=32 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_BUG=y CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_ARCH_HAS_CPU_RELAX=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_AUDIT_ARCH=y CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_FIX_EARLYCON_MEM=y CONFIG_PGTABLE_LEVELS=4 CONFIG_CC_HAS_SANE_STACKPROTECTOR=y # # Processor type and features # # CONFIG_SMP is not set CONFIG_X86_FEATURE_NAMES=y CONFIG_X86_MPPARSE=y # CONFIG_GOLDFISH is not set # CONFIG_X86_CPU_RESCTRL is not set # CONFIG_X86_EXTENDED_PLATFORM is not set # CONFIG_SCHED_OMIT_FRAME_POINTER is not set # CONFIG_HYPERVISOR_GUEST is not set # CONFIG_MK8 is not set # CONFIG_MPSC is not set # CONFIG_MCORE2 is not set # CONFIG_MATOM is not set CONFIG_GENERIC_CPU=y CONFIG_X86_INTERNODE_CACHE_SHIFT=6 CONFIG_X86_L1_CACHE_SHIFT=6 CONFIG_X86_TSC=y CONFIG_X86_CMPXCHG64=y CONFIG_X86_CMOV=y CONFIG_X86_MINIMUM_CPU_FAMILY=64 CONFIG_X86_DEBUGCTLMSR=y CONFIG_IA32_FEAT_CTL=y CONFIG_X86_VMX_FEATURE_NAMES=y CONFIG_CPU_SUP_INTEL=y CONFIG_CPU_SUP_AMD=y CONFIG_CPU_SUP_HYGON=y CONFIG_CPU_SUP_CENTAUR=y CONFIG_CPU_SUP_ZHAOXIN=y CONFIG_HPET_TIMER=y CONFIG_DMI=y CONFIG_NR_CPUS_RANGE_BEGIN=1 CONFIG_NR_CPUS_RANGE_END=1 CONFIG_NR_CPUS_DEFAULT=1 CONFIG_NR_CPUS=1 CONFIG_UP_LATE_INIT=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set # CONFIG_X86_MCE is not set # # Performance monitoring # # CONFIG_PERF_EVENTS_AMD_POWER is not set # CONFIG_PERF_EVENTS_AMD_UNCORE is not set # CONFIG_PERF_EVENTS_AMD_BRS is not set # end of Performance monitoring CONFIG_X86_16BIT=y CONFIG_X86_ESPFIX64=y CONFIG_X86_VSYSCALL_EMULATION=y # CONFIG_X86_IOPL_IOPERM is not set # CONFIG_MICROCODE is not set # CONFIG_X86_MSR is not set # CONFIG_X86_CPUID is not set # CONFIG_X86_5LEVEL is not set CONFIG_X86_DIRECT_GBPAGES=y # CONFIG_AMD_MEM_ENCRYPT is not set CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_DEFAULT=y CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 # CONFIG_X86_CHECK_BIOS_CORRUPTION is not set CONFIG_MTRR=y # CONFIG_MTRR_SANITIZER is not set CONFIG_X86_PAT=y CONFIG_ARCH_USES_PG_UNCACHED=y CONFIG_X86_UMIP=y CONFIG_CC_HAS_IBT=y # CONFIG_X86_KERNEL_IBT is not set # CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS is not set CONFIG_X86_INTEL_TSX_MODE_OFF=y # CONFIG_X86_INTEL_TSX_MODE_ON is not set # CONFIG_X86_INTEL_TSX_MODE_AUTO is not set # CONFIG_HZ_100 is not set CONFIG_HZ_250=y # CONFIG_HZ_300 is not set # CONFIG_HZ_1000 is not set CONFIG_HZ=250 # CONFIG_KEXEC is not set # CONFIG_CRASH_DUMP is not set CONFIG_PHYSICAL_START=0x1000000 # CONFIG_RELOCATABLE is not set CONFIG_PHYSICAL_ALIGN=0x200000 # CONFIG_ADDRESS_MASKING is not set CONFIG_LEGACY_VSYSCALL_XONLY=y # CONFIG_LEGACY_VSYSCALL_NONE is not set # CONFIG_CMDLINE_BOOL is not set CONFIG_MODIFY_LDT_SYSCALL=y # CONFIG_STRICT_SIGALTSTACK_SIZE is not set CONFIG_HAVE_LIVEPATCH=y # end of Processor type and features CONFIG_CC_HAS_SLS=y CONFIG_CC_HAS_RETURN_THUNK=y CONFIG_CC_HAS_ENTRY_PADDING=y CONFIG_FUNCTION_PADDING_CFI=11 CONFIG_FUNCTION_PADDING_BYTES=16 # CONFIG_SPECULATION_MITIGATIONS is not set CONFIG_ARCH_HAS_ADD_PAGES=y CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y # # Power management and ACPI options # # CONFIG_SUSPEND is not set # CONFIG_PM is not set CONFIG_ARCH_SUPPORTS_ACPI=y # CONFIG_ACPI is not set # # CPU Frequency scaling # # CONFIG_CPU_FREQ is not set # end of CPU Frequency scaling # # CPU Idle # # CONFIG_CPU_IDLE is not set # end of CPU Idle # end of Power management and ACPI options # # Bus options (PCI etc.) # CONFIG_ISA_DMA_API=y # end of Bus options (PCI etc.) # # Binary Emulations # # CONFIG_IA32_EMULATION is not set # CONFIG_X86_X32_ABI is not set # end of Binary Emulations CONFIG_HAVE_KVM=y # CONFIG_VIRTUALIZATION is not set CONFIG_AS_AVX512=y CONFIG_AS_SHA1_NI=y CONFIG_AS_SHA256_NI=y CONFIG_AS_TPAUSE=y CONFIG_AS_GFNI=y # # General architecture-dependent options # CONFIG_GENERIC_ENTRY=y # CONFIG_JUMP_LABEL is not set # CONFIG_STATIC_CALL_SELFTEST is not set CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_ARCH_USE_BUILTIN_BSWAP=y CONFIG_HAVE_IOREMAP_PROT=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_HAVE_OPTPROBES=y CONFIG_HAVE_KPROBES_ON_FTRACE=y CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y CONFIG_HAVE_NMI=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_CONTIGUOUS=y CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_ARCH_HAS_FORTIFY_SOURCE=y CONFIG_ARCH_HAS_SET_MEMORY=y CONFIG_ARCH_HAS_SET_DIRECT_MAP=y CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y CONFIG_ARCH_WANTS_NO_INSTR=y CONFIG_HAVE_ASM_MODVERSIONS=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_RSEQ=y CONFIG_HAVE_RUST=y CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y CONFIG_HAVE_HW_BREAKPOINT=y CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y CONFIG_HAVE_USER_RETURN_NOTIFIER=y CONFIG_HAVE_PERF_EVENTS_NMI=y CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y CONFIG_HAVE_PERF_REGS=y CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_HAVE_ARCH_JUMP_LABEL=y CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y CONFIG_MMU_GATHER_MERGE_VMAS=y CONFIG_MMU_LAZY_TLB_REFCOUNT=y CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=y CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y CONFIG_HAVE_CMPXCHG_LOCAL=y CONFIG_HAVE_CMPXCHG_DOUBLE=y CONFIG_HAVE_ARCH_SECCOMP=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y # CONFIG_SECCOMP is not set CONFIG_HAVE_ARCH_STACKLEAK=y CONFIG_HAVE_STACKPROTECTOR=y # CONFIG_STACKPROTECTOR is not set CONFIG_ARCH_SUPPORTS_LTO_CLANG=y CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y CONFIG_LTO_NONE=y CONFIG_ARCH_SUPPORTS_CFI_CLANG=y CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y CONFIG_HAVE_CONTEXT_TRACKING_USER=y CONFIG_HAVE_CONTEXT_TRACKING_USER_OFFSTACK=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_MOVE_PUD=y CONFIG_HAVE_MOVE_PMD=y CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y CONFIG_HAVE_ARCH_HUGE_VMAP=y CONFIG_HAVE_ARCH_HUGE_VMALLOC=y CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y CONFIG_HAVE_ARCH_SOFT_DIRTY=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_RELA=y CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y CONFIG_SOFTIRQ_ON_OWN_STACK=y CONFIG_ARCH_HAS_ELF_RANDOMIZE=y CONFIG_HAVE_ARCH_MMAP_RND_BITS=y CONFIG_HAVE_EXIT_THREAD=y CONFIG_ARCH_MMAP_RND_BITS=28 CONFIG_PAGE_SIZE_LESS_THAN_64KB=y CONFIG_PAGE_SIZE_LESS_THAN_256KB=y CONFIG_HAVE_OBJTOOL=y CONFIG_HAVE_JUMP_LABEL_HACK=y CONFIG_HAVE_NOINSTR_HACK=y CONFIG_HAVE_NOINSTR_VALIDATION=y CONFIG_HAVE_UACCESS_VALIDATION=y CONFIG_HAVE_STACK_VALIDATION=y CONFIG_HAVE_RELIABLE_STACKTRACE=y # CONFIG_COMPAT_32BIT_TIME is not set CONFIG_HAVE_ARCH_VMAP_STACK=y # CONFIG_VMAP_STACK is not set CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y CONFIG_RANDOMIZE_KSTACK_OFFSET=y # CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_STRICT_KERNEL_RWX=y CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y CONFIG_ARCH_HAS_MEM_ENCRYPT=y CONFIG_HAVE_STATIC_CALL=y CONFIG_HAVE_STATIC_CALL_INLINE=y CONFIG_HAVE_PREEMPT_DYNAMIC=y CONFIG_HAVE_PREEMPT_DYNAMIC_CALL=y CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y CONFIG_ARCH_HAS_ELFCORE_COMPAT=y CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y CONFIG_DYNAMIC_SIGFRAME=y CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG=y # # GCOV-based kernel profiling # CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y # end of GCOV-based kernel profiling CONFIG_HAVE_GCC_PLUGINS=y # CONFIG_GCC_PLUGINS is not set CONFIG_FUNCTION_ALIGNMENT_4B=y CONFIG_FUNCTION_ALIGNMENT_16B=y CONFIG_FUNCTION_ALIGNMENT=16 # end of General architecture-dependent options CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 # CONFIG_MODULES is not set CONFIG_BLOCK=y # CONFIG_BLOCK_LEGACY_AUTOLOAD is not set # CONFIG_BLK_DEV_BSGLIB is not set # CONFIG_BLK_DEV_INTEGRITY is not set # CONFIG_BLK_DEV_ZONED is not set # CONFIG_BLK_WBT is not set # CONFIG_BLK_SED_OPAL is not set # CONFIG_BLK_INLINE_ENCRYPTION is not set # # Partition Types # # CONFIG_PARTITION_ADVANCED is not set CONFIG_MSDOS_PARTITION=y CONFIG_EFI_PARTITION=y # end of Partition Types # # IO Schedulers # # CONFIG_MQ_IOSCHED_DEADLINE is not set # CONFIG_MQ_IOSCHED_KYBER is not set # CONFIG_IOSCHED_BFQ is not set # end of IO Schedulers CONFIG_INLINE_SPIN_UNLOCK_IRQ=y CONFIG_INLINE_READ_UNLOCK=y CONFIG_INLINE_READ_UNLOCK_IRQ=y CONFIG_INLINE_WRITE_UNLOCK=y CONFIG_INLINE_WRITE_UNLOCK_IRQ=y CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y CONFIG_ARCH_USE_QUEUED_RWLOCKS=y CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y # # Executable file formats # # CONFIG_BINFMT_ELF is not set # CONFIG_BINFMT_SCRIPT is not set # CONFIG_BINFMT_MISC is not set CONFIG_COREDUMP=y # end of Executable file formats # # Memory Management options # # CONFIG_SWAP is not set # # SLAB allocator options # # CONFIG_SLAB is not set CONFIG_SLUB=y # CONFIG_SLAB_MERGE_DEFAULT is not set # CONFIG_SLAB_FREELIST_RANDOM is not set # CONFIG_SLAB_FREELIST_HARDENED is not set # CONFIG_SLUB_STATS is not set # end of SLAB allocator options # CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set # CONFIG_COMPAT_BRK is not set CONFIG_SPARSEMEM=y CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y # CONFIG_SPARSEMEM_VMEMMAP is not set CONFIG_ARCH_WANT_OPTIMIZE_VMEMMAP=y CONFIG_HAVE_FAST_GUP=y CONFIG_EXCLUSIVE_SYSTEM_RAM=y CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y # CONFIG_MEMORY_HOTPLUG is not set CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y # CONFIG_COMPACTION is not set # CONFIG_PAGE_REPORTING is not set CONFIG_PHYS_ADDR_T_64BIT=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_ARCH_WANT_GENERAL_HUGETLB=y CONFIG_ARCH_WANTS_THP_SWAP=y # CONFIG_TRANSPARENT_HUGEPAGE is not set CONFIG_NEED_PER_CPU_KM=y CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y CONFIG_HAVE_SETUP_PER_CPU_AREA=y # CONFIG_CMA is not set CONFIG_GENERIC_EARLY_IOREMAP=y # CONFIG_IDLE_PAGE_TRACKING is not set CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y CONFIG_ARCH_HAS_PTE_DEVMAP=y CONFIG_ZONE_DMA=y CONFIG_ZONE_DMA32=y CONFIG_VM_EVENT_COUNTERS=y # CONFIG_PERCPU_STATS is not set # # GUP_TEST needs to have DEBUG_FS enabled # # CONFIG_DMAPOOL_TEST is not set CONFIG_ARCH_HAS_PTE_SPECIAL=y CONFIG_SECRETMEM=y # CONFIG_ANON_VMA_NAME is not set # CONFIG_USERFAULTFD is not set # CONFIG_LRU_GEN is not set CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y # # Data Access Monitoring # # CONFIG_DAMON is not set # end of Data Access Monitoring # end of Memory Management options # CONFIG_NET is not set # # Device Drivers # CONFIG_HAVE_EISA=y # CONFIG_EISA is not set CONFIG_HAVE_PCI=y # CONFIG_PCI is not set # CONFIG_PCCARD is not set # # Generic Driver Options # # CONFIG_UEVENT_HELPER is not set # CONFIG_DEVTMPFS is not set # CONFIG_STANDALONE is not set # CONFIG_PREVENT_FIRMWARE_BUILD is not set # # Firmware loader # CONFIG_FW_LOADER=y CONFIG_EXTRA_FIRMWARE="" # CONFIG_FW_LOADER_USER_HELPER is not set # CONFIG_FW_LOADER_COMPRESS is not set # CONFIG_FW_UPLOAD is not set # end of Firmware loader CONFIG_ALLOW_DEV_COREDUMP=y CONFIG_GENERIC_CPU_AUTOPROBE=y CONFIG_GENERIC_CPU_VULNERABILITIES=y # CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set # end of Generic Driver Options # # Bus devices # # CONFIG_ARM_INTEGRATOR_LM is not set # CONFIG_BT1_APB is not set # CONFIG_BT1_AXI is not set # CONFIG_HISILICON_LPC is not set # CONFIG_INTEL_IXP4XX_EB is not set # CONFIG_QCOM_EBI2 is not set # CONFIG_MHI_BUS is not set # CONFIG_MHI_BUS_EP is not set # end of Bus devices # # Firmware Drivers # # # ARM System Control and Management Interface Protocol # # CONFIG_ARM_SCMI_PROTOCOL is not set # end of ARM System Control and Management Interface Protocol # CONFIG_EDD is not set CONFIG_FIRMWARE_MEMMAP=y # CONFIG_DMIID is not set # CONFIG_DMI_SYSFS is not set CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y # CONFIG_FW_CFG_SYSFS is not set # CONFIG_SYSFB_SIMPLEFB is not set # CONFIG_BCM47XX_NVRAM is not set # CONFIG_GOOGLE_FIRMWARE is not set # # Tegra firmware driver # # end of Tegra firmware driver # end of Firmware Drivers # CONFIG_GNSS is not set # CONFIG_MTD is not set # CONFIG_OF is not set CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_PARPORT is not set # CONFIG_BLK_DEV is not set # # NVME Support # # CONFIG_NVME_FC is not set # end of NVME Support # # Misc devices # # CONFIG_DUMMY_IRQ is not set # CONFIG_ATMEL_SSC is not set # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_SMPRO_ERRMON is not set # CONFIG_SMPRO_MISC is not set # CONFIG_QCOM_COINCELL is not set # CONFIG_SRAM is not set # CONFIG_XILINX_SDFEC is not set # CONFIG_C2PORT is not set # # EEPROM support # # CONFIG_EEPROM_93CX6 is not set # end of EEPROM support # # Texas Instruments shared transport line discipline # # end of Texas Instruments shared transport line discipline # # Altera FPGA firmware download module (requires I2C) # # CONFIG_ECHO is not set # CONFIG_PVPANIC is not set # end of Misc devices # # SCSI device support # CONFIG_SCSI_MOD=y # CONFIG_RAID_ATTRS is not set # CONFIG_SCSI is not set # end of SCSI device support # CONFIG_ATA is not set # CONFIG_MD is not set # CONFIG_TARGET_CORE is not set # # IEEE 1394 (FireWire) support # # CONFIG_FIREWIRE is not set # end of IEEE 1394 (FireWire) support # CONFIG_MACINTOSH_DRIVERS is not set # # Input device support # CONFIG_INPUT=y # CONFIG_INPUT_FF_MEMLESS is not set # CONFIG_INPUT_SPARSEKMAP is not set # CONFIG_INPUT_MATRIXKMAP is not set # # Userland interfaces # # CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_JOYDEV is not set # CONFIG_INPUT_EVDEV is not set # CONFIG_INPUT_EVBUG is not set # # Input Device Drivers # # CONFIG_INPUT_KEYBOARD is not set # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TABLET is not set # CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_MISC is not set # CONFIG_RMI4_CORE is not set # # Hardware I/O ports # # CONFIG_SERIO is not set CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y # CONFIG_GAMEPORT is not set # end of Hardware I/O ports # end of Input device support # # Character devices # CONFIG_TTY=y CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y CONFIG_HW_CONSOLE=y # CONFIG_VT_HW_CONSOLE_BINDING is not set CONFIG_UNIX98_PTYS=y # CONFIG_LEGACY_PTYS is not set # CONFIG_LEGACY_TIOCSTI is not set # CONFIG_LDISC_AUTOLOAD is not set # # Serial drivers # # CONFIG_SERIAL_8250 is not set # # Non-8250 serial port support # # CONFIG_SERIAL_AMBA_PL010 is not set # CONFIG_SERIAL_MESON is not set # CONFIG_SERIAL_CLPS711X is not set # CONFIG_SERIAL_SAMSUNG is not set # CONFIG_SERIAL_TEGRA is not set # CONFIG_SERIAL_IMX is not set # CONFIG_SERIAL_UARTLITE is not set # CONFIG_SERIAL_SH_SCI is not set # CONFIG_SERIAL_MSM is not set # CONFIG_SERIAL_VT8500 is not set # CONFIG_SERIAL_OMAP is not set # CONFIG_SERIAL_LANTIQ is not set # CONFIG_SERIAL_SCCNXP is not set # CONFIG_SERIAL_TIMBERDALE is not set # CONFIG_SERIAL_BCM63XX is not set # CONFIG_SERIAL_ALTERA_JTAGUART is not set # CONFIG_SERIAL_ALTERA_UART is not set # CONFIG_SERIAL_MXS_AUART is not set # CONFIG_SERIAL_MPS2_UART is not set # CONFIG_SERIAL_ARC is not set # CONFIG_SERIAL_FSL_LPUART is not set # CONFIG_SERIAL_FSL_LINFLEXUART is not set # CONFIG_SERIAL_ST_ASC is not set # CONFIG_SERIAL_STM32 is not set # CONFIG_SERIAL_OWL is not set # CONFIG_SERIAL_RDA is not set # CONFIG_SERIAL_SUNPLUS is not set # end of Serial drivers # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_NULL_TTY is not set # CONFIG_SERIAL_DEV_BUS is not set # CONFIG_VIRTIO_CONSOLE is not set # CONFIG_IPMI_HANDLER is not set # CONFIG_ASPEED_KCS_IPMI_BMC is not set # CONFIG_NPCM7XX_KCS_IPMI_BMC is not set # CONFIG_HW_RANDOM is not set # CONFIG_MWAVE is not set # CONFIG_DEVMEM is not set # CONFIG_NVRAM is not set # CONFIG_HANGCHECK_TIMER is not set # CONFIG_TCG_TPM is not set # CONFIG_TELCLOCK is not set # end of Character devices # # I2C support # # CONFIG_I2C is not set # end of I2C support # CONFIG_I3C is not set # CONFIG_SPI is not set # CONFIG_SPMI is not set # CONFIG_HSI is not set # CONFIG_PPS is not set # # PTP clock support # CONFIG_PTP_1588_CLOCK_OPTIONAL=y # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. # # end of PTP clock support # CONFIG_PINCTRL is not set # CONFIG_GPIOLIB is not set # CONFIG_W1 is not set # CONFIG_POWER_RESET is not set # CONFIG_POWER_SUPPLY is not set # CONFIG_HWMON is not set # CONFIG_THERMAL is not set # CONFIG_WATCHDOG is not set CONFIG_SSB_POSSIBLE=y # CONFIG_SSB is not set CONFIG_BCMA_POSSIBLE=y # CONFIG_BCMA is not set # # Multifunction device drivers # # CONFIG_MFD_SUN4I_GPADC is not set # CONFIG_MFD_AT91_USART is not set # CONFIG_MFD_MADERA is not set # CONFIG_MFD_EXYNOS_LPASS is not set # CONFIG_MFD_MXS_LRADC is not set # CONFIG_MFD_MX25_TSADC is not set # CONFIG_MFD_KEMPLD is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_PM8XXX is not set # CONFIG_MFD_SM501 is not set # CONFIG_RZ_MTU3 is not set # CONFIG_ABX500_CORE is not set # CONFIG_MFD_SUN6I_PRCM is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_TQMX86 is not set # CONFIG_MFD_STM32_LPTIMER is not set # CONFIG_MFD_STM32_TIMERS is not set # end of Multifunction device drivers # CONFIG_REGULATOR is not set # CONFIG_RC_CORE is not set # # CEC support # # CONFIG_MEDIA_CEC_SUPPORT is not set # end of CEC support # CONFIG_MEDIA_SUPPORT is not set # # Graphics support # # CONFIG_TEGRA_HOST1X is not set # CONFIG_IMX_IPUV3_CORE is not set # CONFIG_DRM is not set # # ARM devices # # end of ARM devices # # Frame buffer Devices # # CONFIG_FB is not set # CONFIG_MMP_DISP is not set # end of Frame buffer Devices # # Backlight & LCD device support # # CONFIG_LCD_CLASS_DEVICE is not set # CONFIG_BACKLIGHT_CLASS_DEVICE is not set # end of Backlight & LCD device support # # Console display driver support # CONFIG_VGA_CONSOLE=y CONFIG_DUMMY_CONSOLE=y CONFIG_DUMMY_CONSOLE_COLUMNS=80 CONFIG_DUMMY_CONSOLE_ROWS=25 # end of Console display driver support # end of Graphics support # CONFIG_SOUND is not set # CONFIG_HID_SUPPORT is not set CONFIG_USB_OHCI_LITTLE_ENDIAN=y # CONFIG_USB_SUPPORT is not set # CONFIG_MMC is not set # CONFIG_MEMSTICK is not set # CONFIG_NEW_LEDS is not set # CONFIG_ACCESSIBILITY is not set CONFIG_EDAC_ATOMIC_SCRUB=y CONFIG_EDAC_SUPPORT=y CONFIG_RTC_LIB=y CONFIG_RTC_MC146818_LIB=y # CONFIG_RTC_CLASS is not set # CONFIG_DMADEVICES is not set # # DMABUF options # # CONFIG_SYNC_FILE is not set # CONFIG_DMABUF_HEAPS is not set # end of DMABUF options # CONFIG_AUXDISPLAY is not set # CONFIG_UIO is not set # CONFIG_VFIO is not set # CONFIG_VIRT_DRIVERS is not set # CONFIG_VIRTIO_MENU is not set # CONFIG_VHOST_MENU is not set # # Microsoft Hyper-V guest support # # end of Microsoft Hyper-V guest support # CONFIG_GREYBUS is not set # CONFIG_COMEDI is not set # CONFIG_STAGING is not set # CONFIG_CHROME_PLATFORMS is not set # CONFIG_MELLANOX_PLATFORM is not set # CONFIG_OLPC_XO175 is not set # CONFIG_SURFACE_PLATFORMS is not set # CONFIG_X86_PLATFORM_DEVICES is not set # CONFIG_COMMON_CLK is not set # CONFIG_HWSPINLOCK is not set # # Clock Source drivers # CONFIG_CLKEVT_I8253=y CONFIG_I8253_LOCK=y CONFIG_CLKBLD_I8253=y # CONFIG_BCM2835_TIMER is not set # CONFIG_BCM_KONA_TIMER is not set # CONFIG_DAVINCI_TIMER is not set # CONFIG_DIGICOLOR_TIMER is not set # CONFIG_OMAP_DM_TIMER is not set # CONFIG_DW_APB_TIMER is not set # CONFIG_FTTMR010_TIMER is not set # CONFIG_IXP4XX_TIMER is not set # CONFIG_MESON6_TIMER is not set # CONFIG_OWL_TIMER is not set # CONFIG_RDA_TIMER is not set # CONFIG_SUN4I_TIMER is not set # CONFIG_TEGRA_TIMER is not set # CONFIG_VT8500_TIMER is not set # CONFIG_NPCM7XX_TIMER is not set # CONFIG_ASM9260_TIMER is not set # CONFIG_CLKSRC_DBX500_PRCMU is not set # CONFIG_CLPS711X_TIMER is not set # CONFIG_MXS_TIMER is not set # CONFIG_NSPIRE_TIMER is not set # CONFIG_INTEGRATOR_AP_TIMER is not set # CONFIG_CLKSRC_PISTACHIO is not set # CONFIG_CLKSRC_STM32_LP is not set # CONFIG_ARMV7M_SYSTICK is not set # CONFIG_ATMEL_PIT is not set # CONFIG_ATMEL_ST is not set # CONFIG_CLKSRC_SAMSUNG_PWM is not set # CONFIG_FSL_FTM_TIMER is not set # CONFIG_OXNAS_RPS_TIMER is not set # CONFIG_MTK_TIMER is not set # CONFIG_MTK_CPUX_TIMER is not set # CONFIG_SH_TIMER_CMT is not set # CONFIG_SH_TIMER_MTU2 is not set # CONFIG_RENESAS_OSTM is not set # CONFIG_SH_TIMER_TMU is not set # CONFIG_EM_TIMER_STI is not set # CONFIG_CLKSRC_PXA is not set # CONFIG_TIMER_IMX_SYS_CTR is not set # CONFIG_CLKSRC_ST_LPC is not set # CONFIG_GXP_TIMER is not set # CONFIG_MSC313E_TIMER is not set # end of Clock Source drivers # CONFIG_MAILBOX is not set # CONFIG_IOMMU_SUPPORT is not set # # Remoteproc drivers # # CONFIG_REMOTEPROC is not set # end of Remoteproc drivers # # Rpmsg drivers # # CONFIG_RPMSG_VIRTIO is not set # end of Rpmsg drivers # # SOC (System On Chip) specific Drivers # # # Amlogic SoC drivers # # CONFIG_MESON_CANVAS is not set # CONFIG_MESON_CLK_MEASURE is not set # CONFIG_MESON_GX_SOCINFO is not set # CONFIG_MESON_MX_SOCINFO is not set # end of Amlogic SoC drivers # # Apple SoC drivers # # CONFIG_APPLE_SART is not set # end of Apple SoC drivers # # ASPEED SoC drivers # # CONFIG_ASPEED_LPC_CTRL is not set # CONFIG_ASPEED_LPC_SNOOP is not set # CONFIG_ASPEED_UART_ROUTING is not set # CONFIG_ASPEED_P2A_CTRL is not set # CONFIG_ASPEED_SOCINFO is not set # end of ASPEED SoC drivers # CONFIG_AT91_SOC_ID is not set # CONFIG_AT91_SOC_SFR is not set # # Broadcom SoC drivers # # CONFIG_SOC_BCM63XX is not set # CONFIG_SOC_BRCMSTB is not set # end of Broadcom SoC drivers # # NXP/Freescale QorIQ SoC drivers # # end of NXP/Freescale QorIQ SoC drivers # # fujitsu SoC drivers # # end of fujitsu SoC drivers # # i.MX SoC drivers # # CONFIG_SOC_IMX8M is not set # CONFIG_SOC_IMX9 is not set # end of i.MX SoC drivers # # IXP4xx SoC drivers # # CONFIG_IXP4XX_QMGR is not set # CONFIG_IXP4XX_NPE is not set # end of IXP4xx SoC drivers # # Enable LiteX SoC Builder specific drivers # # CONFIG_LITEX_SOC_CONTROLLER is not set # end of Enable LiteX SoC Builder specific drivers # CONFIG_LOONGSON2_GUTS is not set # # MediaTek SoC drivers # # CONFIG_MTK_CMDQ is not set # CONFIG_MTK_DEVAPC is not set # CONFIG_MTK_INFRACFG is not set # CONFIG_MTK_MMSYS is not set # end of MediaTek SoC drivers # CONFIG_WPCM450_SOC is not set # # Qualcomm SoC drivers # # CONFIG_QCOM_GENI_SE is not set # CONFIG_QCOM_GSBI is not set # CONFIG_QCOM_LLCC is not set # CONFIG_QCOM_RAMP_CTRL is not set # CONFIG_QCOM_RPMH is not set # CONFIG_QCOM_SPM is not set # CONFIG_QCOM_ICC_BWMON is not set # end of Qualcomm SoC drivers # CONFIG_SOC_RENESAS is not set # CONFIG_ROCKCHIP_GRF is not set # CONFIG_SOC_SAMSUNG is not set # CONFIG_SOC_TI is not set # CONFIG_UX500_SOC_ID is not set # # Xilinx SoC drivers # # end of Xilinx SoC drivers # end of SOC (System On Chip) specific Drivers # CONFIG_PM_DEVFREQ is not set # CONFIG_EXTCON is not set # CONFIG_MEMORY is not set # CONFIG_IIO is not set # CONFIG_PWM is not set # # IRQ chip support # # CONFIG_RENESAS_INTC_IRQPIN is not set # CONFIG_RENESAS_IRQC is not set # CONFIG_RENESAS_RZA1_IRQC is not set # CONFIG_RENESAS_RZG2L_IRQC is not set # CONFIG_SL28CPLD_INTC is not set # CONFIG_TS4800_IRQ is not set # CONFIG_INGENIC_TCU_IRQ is not set # CONFIG_IRQ_UNIPHIER_AIDET is not set # CONFIG_MESON_IRQ_GPIO is not set # CONFIG_IMX_IRQSTEER is not set # CONFIG_IMX_INTMUX is not set # CONFIG_EXYNOS_IRQ_COMBINER is not set # CONFIG_MST_IRQ is not set # CONFIG_MCHP_EIC is not set # CONFIG_SUNPLUS_SP7021_INTC is not set # end of IRQ chip support # CONFIG_IPACK_BUS is not set # CONFIG_RESET_CONTROLLER is not set # # PHY Subsystem # # CONFIG_GENERIC_PHY is not set # CONFIG_PHY_PISTACHIO_USB is not set # CONFIG_PHY_CAN_TRANSCEIVER is not set # # PHY drivers for Broadcom platforms # # CONFIG_PHY_BCM63XX_USBH is not set # CONFIG_BCM_KONA_USB2_PHY is not set # end of PHY drivers for Broadcom platforms # CONFIG_PHY_HI6220_USB is not set # CONFIG_PHY_HI3660_USB is not set # CONFIG_PHY_HI3670_USB is not set # CONFIG_PHY_HI3670_PCIE is not set # CONFIG_PHY_HISTB_COMBPHY is not set # CONFIG_PHY_HISI_INNO_USB2 is not set # CONFIG_PHY_PXA_28NM_HSIC is not set # CONFIG_PHY_PXA_28NM_USB2 is not set # CONFIG_PHY_PXA_USB is not set # CONFIG_PHY_MMP3_USB is not set # CONFIG_PHY_MMP3_HSIC is not set # CONFIG_PHY_MT7621_PCI is not set # CONFIG_PHY_RALINK_USB is not set # CONFIG_PHY_R8A779F0_ETHERNET_SERDES is not set # CONFIG_PHY_RCAR_GEN3_USB3 is not set # CONFIG_PHY_ROCKCHIP_DPHY_RX0 is not set # CONFIG_PHY_ROCKCHIP_PCIE is not set # CONFIG_PHY_ROCKCHIP_SNPS_PCIE3 is not set # CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set # CONFIG_PHY_SAMSUNG_USB2 is not set # CONFIG_PHY_ST_SPEAR1310_MIPHY is not set # CONFIG_PHY_ST_SPEAR1340_MIPHY is not set # CONFIG_PHY_TEGRA194_P2U is not set # CONFIG_PHY_DA8XX_USB is not set # CONFIG_OMAP_CONTROL_PHY is not set # CONFIG_TI_PIPE3 is not set # CONFIG_PHY_INTEL_KEEMBAY_EMMC is not set # CONFIG_PHY_INTEL_KEEMBAY_USB is not set # CONFIG_PHY_INTEL_LGM_EMMC is not set # CONFIG_PHY_XILINX_ZYNQMP is not set # end of PHY Subsystem # CONFIG_POWERCAP is not set # CONFIG_MCB is not set # # Performance monitor support # # CONFIG_ARM_CCN is not set # CONFIG_ARM_CMN is not set # CONFIG_FSL_IMX8_DDR_PMU is not set # CONFIG_XGENE_PMU is not set # CONFIG_ARM_DMC620_PMU is not set # CONFIG_MARVELL_CN10K_TAD_PMU is not set # CONFIG_ALIBABA_UNCORE_DRW_PMU is not set # CONFIG_MARVELL_CN10K_DDR_PMU is not set # CONFIG_MESON_DDR_PMU is not set # end of Performance monitor support # CONFIG_RAS is not set # # Android # # CONFIG_ANDROID_BINDER_IPC is not set # end of Android # CONFIG_DAX is not set # CONFIG_NVMEM is not set # # HW tracing support # # CONFIG_STM is not set # CONFIG_INTEL_TH is not set # end of HW tracing support # CONFIG_FPGA is not set # CONFIG_TEE is not set # CONFIG_SIOX is not set # CONFIG_SLIMBUS is not set # CONFIG_INTERCONNECT is not set # CONFIG_COUNTER is not set # CONFIG_PECI is not set # CONFIG_HTE is not set # end of Device Drivers # # File systems # CONFIG_DCACHE_WORD_ACCESS=y # CONFIG_VALIDATE_FS_PARSER is not set # CONFIG_EXT2_FS is not set # CONFIG_EXT3_FS is not set # CONFIG_EXT4_FS is not set # CONFIG_REISERFS_FS is not set # CONFIG_JFS_FS is not set # CONFIG_XFS_FS is not set # CONFIG_GFS2_FS is not set # CONFIG_BTRFS_FS is not set # CONFIG_NILFS2_FS is not set # CONFIG_F2FS_FS is not set CONFIG_EXPORTFS=y # CONFIG_EXPORTFS_BLOCK_OPS is not set CONFIG_FILE_LOCKING=y # CONFIG_FS_ENCRYPTION is not set # CONFIG_FS_VERITY is not set # CONFIG_DNOTIFY is not set # CONFIG_INOTIFY_USER is not set # CONFIG_FANOTIFY is not set # CONFIG_QUOTA is not set # CONFIG_AUTOFS4_FS is not set # CONFIG_AUTOFS_FS is not set # CONFIG_FUSE_FS is not set # CONFIG_OVERLAY_FS is not set # # Caches # # CONFIG_FSCACHE is not set # end of Caches # # CD-ROM/DVD Filesystems # # CONFIG_ISO9660_FS is not set # CONFIG_UDF_FS is not set # end of CD-ROM/DVD Filesystems # # DOS/FAT/EXFAT/NT Filesystems # # CONFIG_MSDOS_FS is not set # CONFIG_VFAT_FS is not set # CONFIG_EXFAT_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS3_FS is not set # end of DOS/FAT/EXFAT/NT Filesystems # # Pseudo filesystems # CONFIG_PROC_FS=y # CONFIG_PROC_KCORE is not set CONFIG_PROC_SYSCTL=y CONFIG_PROC_PAGE_MONITOR=y # CONFIG_PROC_CHILDREN is not set CONFIG_PROC_PID_ARCH_STATUS=y CONFIG_KERNFS=y CONFIG_SYSFS=y # CONFIG_TMPFS is not set # CONFIG_HUGETLBFS is not set CONFIG_ARCH_HAS_GIGANTIC_PAGE=y # CONFIG_CONFIGFS_FS is not set # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set # CONFIG_NLS is not set # CONFIG_UNICODE is not set CONFIG_IO_WQ=y # end of File systems # # Security options # # CONFIG_KEYS is not set # CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set # CONFIG_SECURITYFS is not set CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y # CONFIG_HARDENED_USERCOPY is not set # CONFIG_FORTIFY_SOURCE is not set # CONFIG_STATIC_USERMODEHELPER is not set CONFIG_DEFAULT_SECURITY_DAC=y CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,bpf" # # Kernel hardening options # # # Memory initialization # CONFIG_INIT_STACK_NONE=y # CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y # CONFIG_ZERO_CALL_USED_REGS is not set # end of Memory initialization CONFIG_RANDSTRUCT_NONE=y # end of Kernel hardening options # end of Security options # CONFIG_CRYPTO is not set # # Library routines # # CONFIG_PACKING is not set CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_IOMAP=y CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y CONFIG_ARCH_HAS_FAST_MULTIPLIER=y CONFIG_ARCH_USE_SYM_ANNOTATIONS=y # # Crypto library routines # CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y # CONFIG_CRYPTO_LIB_CHACHA is not set # CONFIG_CRYPTO_LIB_CURVE25519 is not set CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11 # CONFIG_CRYPTO_LIB_POLY1305 is not set # end of Crypto library routines # CONFIG_CRC_CCITT is not set # CONFIG_CRC16 is not set # CONFIG_CRC_T10DIF is not set # CONFIG_CRC64_ROCKSOFT is not set # CONFIG_CRC_ITU_T is not set CONFIG_CRC32=y # CONFIG_CRC32_SELFTEST is not set CONFIG_CRC32_SLICEBY8=y # CONFIG_CRC32_SLICEBY4 is not set # CONFIG_CRC32_SARWATE is not set # CONFIG_CRC32_BIT is not set # CONFIG_CRC64 is not set # CONFIG_CRC4 is not set # CONFIG_CRC7 is not set # CONFIG_LIBCRC32C is not set # CONFIG_CRC8 is not set # CONFIG_RANDOM32_SELFTEST is not set # CONFIG_XZ_DEC is not set CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_IOPORT_MAP=y CONFIG_HAS_DMA=y CONFIG_NEED_SG_DMA_LENGTH=y CONFIG_NEED_DMA_MAP_STATE=y CONFIG_ARCH_DMA_ADDR_T_64BIT=y CONFIG_SWIOTLB=y # CONFIG_DMA_API_DEBUG is not set # CONFIG_IRQ_POLL is not set CONFIG_HAVE_GENERIC_VDSO=y CONFIG_GENERIC_GETTIMEOFDAY=y CONFIG_GENERIC_VDSO_TIME_NS=y CONFIG_ARCH_HAS_PMEM_API=y CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION=y CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y CONFIG_ARCH_HAS_COPY_MC=y CONFIG_ARCH_STACKWALK=y CONFIG_STACKDEPOT=y CONFIG_SBITMAP=y # CONFIG_PARMAN is not set # CONFIG_OBJAGG is not set # end of Library routines # # Kernel hacking # # # printk and dmesg options # # CONFIG_PRINTK_TIME is not set # CONFIG_PRINTK_CALLER is not set # CONFIG_STACKTRACE_BUILD_ID is not set CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 CONFIG_CONSOLE_LOGLEVEL_QUIET=4 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_DYNAMIC_DEBUG is not set # CONFIG_DYNAMIC_DEBUG_CORE is not set # CONFIG_SYMBOLIC_ERRNAME is not set CONFIG_DEBUG_BUGVERBOSE=y # end of printk and dmesg options # CONFIG_DEBUG_KERNEL is not set # # Compile-time checks and compiler options # CONFIG_AS_HAS_NON_CONST_LEB128=y CONFIG_FRAME_WARN=2048 # CONFIG_STRIP_ASM_SYMS is not set # CONFIG_HEADERS_INSTALL is not set CONFIG_DEBUG_SECTION_MISMATCH=y CONFIG_SECTION_MISMATCH_WARN_ONLY=y CONFIG_OBJTOOL=y # end of Compile-time checks and compiler options # # Generic Kernel Debugging Instruments # # CONFIG_MAGIC_SYSRQ is not set # CONFIG_DEBUG_FS is not set CONFIG_HAVE_ARCH_KGDB=y CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y # CONFIG_UBSAN is not set CONFIG_HAVE_ARCH_KCSAN=y CONFIG_HAVE_KCSAN_COMPILER=y # end of Generic Kernel Debugging Instruments # # Networking Debugging # # end of Networking Debugging # # Memory Debugging # # CONFIG_PAGE_EXTENSION is not set CONFIG_SLUB_DEBUG=y # CONFIG_SLUB_DEBUG_ON is not set # CONFIG_PAGE_TABLE_CHECK is not set # CONFIG_PAGE_POISONING is not set # CONFIG_DEBUG_RODATA_TEST is not set CONFIG_ARCH_HAS_DEBUG_WX=y # CONFIG_DEBUG_WX is not set CONFIG_GENERIC_PTDUMP=y CONFIG_HAVE_DEBUG_KMEMLEAK=y CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y # CONFIG_DEBUG_VM_PGTABLE is not set CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP=y CONFIG_HAVE_ARCH_KASAN=y CONFIG_HAVE_ARCH_KASAN_VMALLOC=y CONFIG_CC_HAS_KASAN_GENERIC=y CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y # CONFIG_KASAN is not set CONFIG_HAVE_ARCH_KFENCE=y # CONFIG_KFENCE is not set CONFIG_HAVE_ARCH_KMSAN=y # end of Memory Debugging # # Debug Oops, Lockups and Hangs # # CONFIG_PANIC_ON_OOPS is not set CONFIG_PANIC_ON_OOPS_VALUE=0 CONFIG_PANIC_TIMEOUT=0 CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y # end of Debug Oops, Lockups and Hangs # # Scheduler Debugging # # end of Scheduler Debugging # CONFIG_DEBUG_TIMEKEEPING is not set # # Lock Debugging (spinlocks, mutexes, etc...) # CONFIG_LOCK_DEBUGGING_SUPPORT=y # CONFIG_WW_MUTEX_SELFTEST is not set # end of Lock Debugging (spinlocks, mutexes, etc...) # CONFIG_DEBUG_IRQFLAGS is not set CONFIG_STACKTRACE=y # CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set # # Debug kernel data structures # # CONFIG_BUG_ON_DATA_CORRUPTION is not set # end of Debug kernel data structures # # RCU Debugging # # end of RCU Debugging CONFIG_USER_STACKTRACE_SUPPORT=y CONFIG_HAVE_RETHOOK=y CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_DYNAMIC_FTRACE=y CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y CONFIG_HAVE_DYNAMIC_FTRACE_NO_PATCHABLE=y CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_HAVE_FENTRY=y CONFIG_HAVE_OBJTOOL_MCOUNT=y CONFIG_HAVE_OBJTOOL_NOP_MCOUNT=y CONFIG_HAVE_C_RECORDMCOUNT=y CONFIG_HAVE_BUILDTIME_MCOUNT_SORT=y CONFIG_TRACING_SUPPORT=y # CONFIG_FTRACE is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y # # x86 Debugging # # CONFIG_X86_VERBOSE_BOOTUP is not set CONFIG_EARLY_PRINTK=y CONFIG_HAVE_MMIOTRACE_SUPPORT=y CONFIG_IO_DELAY_0X80=y # CONFIG_IO_DELAY_0XED is not set # CONFIG_IO_DELAY_UDELAY is not set # CONFIG_IO_DELAY_NONE is not set CONFIG_UNWINDER_ORC=y # CONFIG_UNWINDER_FRAME_POINTER is not set # end of x86 Debugging # # Kernel Testing and Coverage # # CONFIG_KUNIT is not set CONFIG_ARCH_HAS_KCOV=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set # CONFIG_RUNTIME_TESTING_MENU is not set CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage # # Rust hacking # # end of Rust hacking # end of Kernel hacking # # Documentation # CONFIG_WARN_MISSING_DOCUMENTS=y CONFIG_WARN_ABI_ERRORS=y # end of Documentation ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel 2023-05-19 14:24 [PATCH 0/2] drm/panel: add fannal c3004 panel Paulo Pavacic 2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic @ 2023-05-19 14:24 ` Paulo Pavacic 2023-05-22 8:55 ` neil.armstrong 2023-05-23 17:33 ` Linus Walleij 2023-05-22 8:55 ` [PATCH 0/2] drm/panel: add fannal c3004 panel neil.armstrong 2 siblings, 2 replies; 13+ messages in thread From: Paulo Pavacic @ 2023-05-19 14:24 UTC (permalink / raw) To: neil.armstrong, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt Cc: dri-devel, linux-kernel, devicetree, Paulo Pavacic Fannal C3004 is a 480x800 display made by fannal that requires DCS initialization sequences. Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com> --- v2 changelog: - renamed from panel-mipi-dsi-bringup - only one MAINTAINER e-mail --- MAINTAINERS | 1 + drivers/gpu/drm/panel/Kconfig | 11 + drivers/gpu/drm/panel/Makefile | 1 + drivers/gpu/drm/panel/panel-fannal-c3004.c | 405 +++++++++++++++++++++ 4 files changed, 418 insertions(+) create mode 100644 drivers/gpu/drm/panel/panel-fannal-c3004.c diff --git a/MAINTAINERS b/MAINTAINERS index 62374c8424b9..93fc1ae6832f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -6432,6 +6432,7 @@ M: Paulo Pavacic <pavacic.p@gmail.com> S: Maintained C: matrix:r/mipi-dsi-bringup:matrix.org F: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml +F: drivers/gpu/drm/panel/panel-fannal-c3004.c DRM DRIVER FOR FARADAY TVE200 TV ENCODER M: Linus Walleij <linus.walleij@linaro.org> diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig index 2b9d6db7860b..a1041c1e6bf6 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -144,6 +144,17 @@ config DRM_PANEL_ELIDA_KD35T133 KD35T133 controller for 320x480 LCD panels with MIPI-DSI system interfaces. +config DRM_PANEL_FANNAL_C3004 + tristate "Fannal C3004 panel" + depends on OF + depends on DRM_MIPI_DSI + help + Say Y here if you want to enable support for the Fannal C3004 + 2-lane 480x800 MIPI DSI panel which requires initialization + sequence. + + If M is selected the module will be called panel-fannal-c3004. + config DRM_PANEL_FEIXIN_K101_IM2BA02 tristate "Feixin K101 IM2BA02 panel" depends on OF diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile index ff169781e82d..13c0f00038b5 100644 --- a/drivers/gpu/drm/panel/Makefile +++ b/drivers/gpu/drm/panel/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_DRM_PANEL_SIMPLE) += panel-simple.o obj-$(CONFIG_DRM_PANEL_EDP) += panel-edp.o obj-$(CONFIG_DRM_PANEL_EBBG_FT8719) += panel-ebbg-ft8719.o obj-$(CONFIG_DRM_PANEL_ELIDA_KD35T133) += panel-elida-kd35t133.o +obj-$(CONFIG_DRM_PANEL_FANNAL_C3004) += panel-fannal-c3004.o obj-$(CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02) += panel-feixin-k101-im2ba02.o obj-$(CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D) += panel-feiyang-fy07024di26a30d.o obj-$(CONFIG_DRM_PANEL_HIMAX_HX8394) += panel-himax-hx8394.o diff --git a/drivers/gpu/drm/panel/panel-fannal-c3004.c b/drivers/gpu/drm/panel/panel-fannal-c3004.c new file mode 100644 index 000000000000..decbd0c59093 --- /dev/null +++ b/drivers/gpu/drm/panel/panel-fannal-c3004.c @@ -0,0 +1,405 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * MIPI DSI driver for Fannal C3004. + * Copyright (C) 2023, Zenitel + * Author: Paulo Pavacic <pavacic.p@gmail.com> + */ + +// ↓ include headers, static values, static functions ↓ +#include <linux/of.h> +#include <linux/of_platform.h> +#include <linux/delay.h> +#include <linux/gpio/consumer.h> +#include <linux/media-bus-format.h> + +#include <video/mipi_display.h> +#include <video/of_videomode.h> +#include <video/videomode.h> + +#include <drm/drm_crtc.h> +#include <drm/drm_mipi_dsi.h> +#include <drm/drm_panel.h> + +static const struct fann_panel_info fann_c3004_panel_info; + +struct fann_panel_info { + const struct drm_display_mode *display_mode; + u32 num_of_dsi_lanes; + u32 mipi_dsi_format; + u32 mipi_dsi_mode_flags; + u32 bus_flags; + u32 video_mode; + void (*panel_enable_function)(struct mipi_dsi_device *dsi); +}; + +struct fann_panel_data { + const struct fann_panel_info *panel_info; + struct drm_panel panel; + struct gpio_desc *reset; +}; + +static struct fann_panel_data * +get_fann_panel_data_from_panel(struct drm_panel *panel) +{ + return container_of(panel, struct fann_panel_data, panel); +} + +static const struct fann_panel_info * +get_fann_panel_info_from_panel(struct drm_panel *panel) +{ + return get_fann_panel_data_from_panel(panel)->panel_info; +} + +enum FANN_VIDEO_MODES_ENUM { + FANN_BURST, + FANN_SYNC_EVENT, + FANN_SYNC_PULSE, + FANN_COMMAND, +}; + +static const u32 FANN_VIDEO_MODES[] = { + MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_VIDEO, //BURST + MIPI_DSI_MODE_VIDEO, //SYNC_EVENT + MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_VIDEO, //SYNC_PULSE + MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_VSYNC_FLUSH //COMMAND MODE +}; + +//macro for writing to DSI +#define WRITE_DSI(dsi, seq...) \ + { \ + const u8 d[] = { seq }; \ + int ret = mipi_dsi_generic_write(dsi, d, ARRAY_SIZE(d)); \ + if (ret < 0) { \ + dev_err(&dsi->dev, \ + "Error (%d) occurred while trying to" \ + " write MIPI DSI command: %s (decimal value)\n", \ + ret, d); \ + } \ + } + +// ↑ include headers, static values, static functions ↑ +// ↓ INTERACTION whole section: panel specific values, add panel as is shown ↓ + +/** + * @brief Adding new panel + * Includes but isn't limited to following steps: + * 1. define new `fann__yourpanel_display_mode` with correct timings + * 2. define new `fann_panel_yourpanel_enable_function` + * 3. glue everything with fann_yourpanel_panel_info and set that srtucts values + * 4. add .compatible = "you,yourpanel", .data = &fann_yourpanel_panel_info } + */ + +static const u32 fann_bus_formats[] = { + MEDIA_BUS_FMT_RGB888_1X24, +}; + +// resolution 480p x 800p, 56mmx93mm +static const struct drm_display_mode fann_c3004_display_mode = { + .clock = 27000, + .hdisplay = 480, // display height pixels + .hsync_start = 480 + 30, // hdisplay + HBP + .hsync_end = 480 + 30 + 8, // hdisplay + HBP + HSync + .htotal = 480 + 30 + 8 + 30, // hdisplay + HBP + HSync + HFP + .vdisplay = 800, // display width pixels + .vsync_start = 800 + 20, // vdisplay + VBP + .vsync_end = 800 + 20 + 8, // vdisplay + VBP + VSync + .vtotal = 800 + 20 + 8 + 20, // vdisplay + VBP + VSync + VFP + .width_mm = 93, + .height_mm = 56, + .flags = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, +}; + +static void fann_panel_fannal_c3004_enable_function(struct mipi_dsi_device *dsi) +{ + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13); + WRITE_DSI(dsi, 0xEF, 0x08); + + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x10); + WRITE_DSI(dsi, 0xC0, 0x63, 0x00); + WRITE_DSI(dsi, 0xC1, 0x0A, 0x0C); + WRITE_DSI(dsi, 0xC2, 0x31, 0x08); + WRITE_DSI(dsi, 0xCC, 0x18); + + WRITE_DSI(dsi, 0xB0, 0x00, 0x08, 0x10, 0x0E, 0x11, 0x07, 0x08, 0x08, + 0x08, 0x25, 0x04, 0x12, 0x0F, 0x2C, 0x30, 0x1F); + WRITE_DSI(dsi, 0xB1, 0x00, 0x11, 0x18, 0x0C, 0x10, 0x05, 0x07, 0x09, + 0x08, 0x24, 0x04, 0x11, 0x10, 0x2B, 0x30, 0x1F); + + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x11); + WRITE_DSI(dsi, 0xB0, 0x4D); + WRITE_DSI(dsi, 0xB1, 0x39); + WRITE_DSI(dsi, 0xB2, 0x87); + WRITE_DSI(dsi, 0xB3, 0x80); + WRITE_DSI(dsi, 0xB5, 0x47); + WRITE_DSI(dsi, 0xB7, 0x8A); + WRITE_DSI(dsi, 0xB8, 0x20); + WRITE_DSI(dsi, 0xB9, 0x10, 0x13); + WRITE_DSI(dsi, 0xC1, 0x78); + WRITE_DSI(dsi, 0xC2, 0x78); + WRITE_DSI(dsi, 0xD0, 0x88); + + //PANEL + WRITE_DSI(dsi, 0xE0, 0x00, 0x00, 0x02); + WRITE_DSI(dsi, 0xE1, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x20); + WRITE_DSI(dsi, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00); + WRITE_DSI(dsi, 0xE3, 0x00, 0x00, 0x33, 0x00); + WRITE_DSI(dsi, 0xE4, 0x22, 0x00); + WRITE_DSI(dsi, 0xE5, 0x04, 0x34, 0xAA, 0xAA, 0x06, 0x34, 0xAA, 0xAA, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); + WRITE_DSI(dsi, 0xE6, 0x00, 0x00, 0x33, 0x00); + WRITE_DSI(dsi, 0xE7, 0x22, 0x00); + WRITE_DSI(dsi, 0xE8, 0x05, 0x34, 0xAA, 0xAA, 0x07, 0x34, 0xAA, 0xAA, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); + WRITE_DSI(dsi, 0xEB, 0x02, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00); + WRITE_DSI(dsi, 0xEC, 0x00, 0x00); + WRITE_DSI(dsi, 0xED, 0xFA, 0x45, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x54, 0xAF); + WRITE_DSI(dsi, 0xEF, 0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F); + + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13); + WRITE_DSI(dsi, 0xE8, 0x00, 0x0E); + + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x00); + WRITE_DSI(dsi, 0x11); //MIPI_DCS_EXIT_SLEEP_MODE + + msleep(600); + + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13); + WRITE_DSI(dsi, 0xE8, 0x00, 0x0C); + msleep(50); + WRITE_DSI(dsi, 0xE8, 0x00, 0x00); + + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x00); + WRITE_DSI(dsi, 0x29); //MIPI_DCS_SET_DISPLAY_ON + msleep(100); +} + +static const struct fann_panel_info fann_c3004_panel_info = { + .display_mode = &fann_c3004_display_mode, + .num_of_dsi_lanes = 2, //how many wires are connected to the panel + .video_mode = FANN_VIDEO_MODES[FANN_SYNC_PULSE], + .mipi_dsi_format = MIPI_DSI_FMT_RGB888, + .mipi_dsi_mode_flags = + MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_VSYNC_FLUSH | + MIPI_DSI_MODE_VIDEO_HSE | MIPI_DSI_MODE_NO_EOT_PACKET, + .bus_flags = DRM_BUS_FLAG_DE_LOW | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE, + .panel_enable_function = &fann_panel_fannal_c3004_enable_function +}; + +// ↑ INTERACTION: panel specific values, add panel as is show in the example ↑ +// ↓ remove driver/cleanup ↓ +static void fann_panel_remove(struct mipi_dsi_device *dsi) +{ + struct fann_panel_data *panel_data = mipi_dsi_get_drvdata(dsi); + struct device *dev = &dsi->dev; + int ret; + + ret = mipi_dsi_detach(dsi); + if (ret) + dev_err(dev, "error: disable: mipi detach (%d)\n", ret); + + drm_panel_remove(&panel_data->panel); +} + +static int fann_panel_disable(struct drm_panel *panel) +{ + struct mipi_dsi_device *dsi = to_mipi_dsi_device(panel->dev); + struct device *dev = panel->dev; + int ret; + + dsi->mode_flags |= MIPI_DSI_MODE_LPM; + + ret = mipi_dsi_dcs_set_display_off(dsi); + if (ret < 0) { + dev_err(dev, "error: disable: turn display OFF (%d)\n", ret); + return ret; + } + + usleep_range(5000, 10000); + + ret = mipi_dsi_dcs_enter_sleep_mode(dsi); + if (ret < 0) { + dev_err(dev, "error: disable: enter sleep mode (%d)\n", ret); + return ret; + } + + return 0; +} + +static int fann_panel_unprepare(struct drm_panel *panel) +{ + struct fann_panel_data *panel_data = + get_fann_panel_data_from_panel(panel); + + if (panel_data->reset) { + gpiod_set_value_cansleep(panel_data->reset, 1); + usleep_range(15000, 17000); + gpiod_set_value_cansleep(panel_data->reset, 0); + } + + return 0; +} + +static void fann_panel_shutdown(struct mipi_dsi_device *dsi) +{ + struct fann_panel_data *panel_data = mipi_dsi_get_drvdata(dsi); + + fann_panel_disable(&panel_data->panel); + fann_panel_unprepare(&panel_data->panel); +} + +// ↑ remove driver/cleanup ↑ +// ↓ probe/create functions ↓ + +static int fann_panel_get_modes(struct drm_panel *panel, + struct drm_connector *connector) +{ + struct drm_display_mode *mode; + const struct fann_panel_info *panel_info = + get_fann_panel_info_from_panel(panel); + const struct drm_display_mode *panel_display_mode = + panel_info->display_mode; + + mode = drm_mode_duplicate(connector->dev, panel_display_mode); + if (!mode) { + dev_err(panel->dev, "error: get_modes: add drm mode %ux%u@%u\n", + panel_display_mode->hdisplay, + panel_display_mode->vdisplay, + drm_mode_vrefresh(panel_display_mode)); + return -ENOMEM; + } + + drm_mode_set_name(mode); + mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; + drm_mode_probed_add(connector, mode); + + connector->display_info.width_mm = mode->width_mm; + connector->display_info.height_mm = mode->height_mm; + connector->display_info.bus_flags = panel_info->bus_flags; + + drm_display_info_set_bus_formats(&connector->display_info, + fann_bus_formats, + ARRAY_SIZE(fann_bus_formats)); + return 1; +} + +static const struct of_device_id fann_of_match[] = { + { .compatible = "fannal,c3004", .data = &fann_c3004_panel_info }, + { /* sentinel */ } +}; + +static int fann_panel_enable(struct drm_panel *panel) +{ + struct mipi_dsi_device *dsi = to_mipi_dsi_device(panel->dev); + const struct fann_panel_info *panel_info = + get_fann_panel_info_from_panel(panel); + panel_info->panel_enable_function(dsi); + + return 0; +} + +static int fann_panel_prepare(struct drm_panel *panel) +{ + struct fann_panel_data *panel_data = + get_fann_panel_data_from_panel(panel); + + /* At lest 10ms needed between power-on and reset-out as RM specifies */ + usleep_range(10000, 12000); + + if (panel_data->reset) { + gpiod_set_value_cansleep(panel_data->reset, 0); + /* + * 50ms delay after reset-out, as per manufacturer initalization + * sequence. + */ + msleep(50); + } + + return 0; +} + +static const struct drm_panel_funcs fann_panel_funcs = { + .prepare = fann_panel_prepare, + .unprepare = fann_panel_unprepare, + .enable = fann_panel_enable, + .disable = fann_panel_disable, + .get_modes = fann_panel_get_modes, +}; + +static int fann_panel_probe(struct mipi_dsi_device *dsi) +{ + struct device *dev = &dsi->dev; + const struct of_device_id *of_id = of_match_device(fann_of_match, dev); + const struct fann_panel_info *panel_info = of_id->data; + struct fann_panel_data *panel_data; + int ret; + + dev_notice(dev, "probe driver called\n"); + if (!panel_info) { + dev_err(dev, "error: probe: get panel_data!\n"); + return -ENODEV; + } + + panel_data = devm_kzalloc(&dsi->dev, sizeof(*panel_data), GFP_KERNEL); + + if (!panel_data) + return -ENOMEM; + + panel_data->panel_info = panel_info; + panel_data->reset = devm_gpiod_get_optional( + dev, "reset", GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_NONEXCLUSIVE); + + if (IS_ERR(panel_data->reset)) { + ret = PTR_ERR(panel_data->reset); + dev_err(dev, + "error: probe: get reset GPIO: (%d) Check the fdt\n", + ret); + return ret; + } + + mipi_dsi_set_drvdata(dsi, panel_data); + + dsi->format = panel_info->mipi_dsi_format; + dsi->mode_flags = panel_info->mipi_dsi_mode_flags | + panel_info->video_mode; + dsi->lanes = panel_info->num_of_dsi_lanes; + + gpiod_set_value_cansleep(panel_data->reset, 1); + + drm_panel_init(&panel_data->panel, dev, &fann_panel_funcs, + DRM_MODE_CONNECTOR_DSI); + dev_set_drvdata(dev, panel_data); + + drm_panel_add(&panel_data->panel); + + ret = mipi_dsi_attach(dsi); + if (ret) { + drm_panel_remove(&panel_data->panel); + dev_err(dev, "error: probe fail: can't attach mipi_dsi!\n"); + } else + dev_notice(dev, "probe driver success. Good job!\n"); + + return ret; +} + +// ↑ probe/create functions ↑ +// ↓ generic driver stuff ↓ + +static struct mipi_dsi_driver fann_panel_driver = { + .driver = { + .name = "panel-fannal-c3004", + .of_match_table = fann_of_match, + }, + .probe = fann_panel_probe, + .remove = fann_panel_remove, + .shutdown = fann_panel_shutdown, +}; + +module_mipi_dsi_driver(fann_panel_driver); + +MODULE_AUTHOR("Paulo Pavacic <pavacic.p@gmail.com>"); +MODULE_DESCRIPTION("Fannal C3004 panel driver"); +MODULE_LICENSE("GPL"); +MODULE_DEVICE_TABLE(of, fann_of_match); -- 2.40.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel 2023-05-19 14:24 ` [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel Paulo Pavacic @ 2023-05-22 8:55 ` neil.armstrong 2023-05-23 17:33 ` Linus Walleij 1 sibling, 0 replies; 13+ messages in thread From: neil.armstrong @ 2023-05-22 8:55 UTC (permalink / raw) To: Paulo Pavacic, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt Cc: dri-devel, linux-kernel, devicetree Hi, On 19/05/2023 16:24, Paulo Pavacic wrote: > > Fannal C3004 is a 480x800 display made by fannal that requires > DCS initialization sequences. > > Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com> > --- > v2 changelog: > - renamed from panel-mipi-dsi-bringup > - only one MAINTAINER e-mail > --- > MAINTAINERS | 1 + > drivers/gpu/drm/panel/Kconfig | 11 + > drivers/gpu/drm/panel/Makefile | 1 + > drivers/gpu/drm/panel/panel-fannal-c3004.c | 405 +++++++++++++++++++++ > 4 files changed, 418 insertions(+) > create mode 100644 drivers/gpu/drm/panel/panel-fannal-c3004.c > > diff --git a/MAINTAINERS b/MAINTAINERS > index 62374c8424b9..93fc1ae6832f 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -6432,6 +6432,7 @@ M: Paulo Pavacic <pavacic.p@gmail.com> > S: Maintained > C: matrix:r/mipi-dsi-bringup:matrix.org > F: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml > +F: drivers/gpu/drm/panel/panel-fannal-c3004.c > > DRM DRIVER FOR FARADAY TVE200 TV ENCODER > M: Linus Walleij <linus.walleij@linaro.org> > diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig > index 2b9d6db7860b..a1041c1e6bf6 100644 > --- a/drivers/gpu/drm/panel/Kconfig > +++ b/drivers/gpu/drm/panel/Kconfig > @@ -144,6 +144,17 @@ config DRM_PANEL_ELIDA_KD35T133 > KD35T133 controller for 320x480 LCD panels with MIPI-DSI > system interfaces. > > +config DRM_PANEL_FANNAL_C3004 > + tristate "Fannal C3004 panel" > + depends on OF > + depends on DRM_MIPI_DSI > + help > + Say Y here if you want to enable support for the Fannal C3004 > + 2-lane 480x800 MIPI DSI panel which requires initialization > + sequence. > + > + If M is selected the module will be called panel-fannal-c3004. > + > config DRM_PANEL_FEIXIN_K101_IM2BA02 > tristate "Feixin K101 IM2BA02 panel" > depends on OF > diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile > index ff169781e82d..13c0f00038b5 100644 > --- a/drivers/gpu/drm/panel/Makefile > +++ b/drivers/gpu/drm/panel/Makefile > @@ -12,6 +12,7 @@ obj-$(CONFIG_DRM_PANEL_SIMPLE) += panel-simple.o > obj-$(CONFIG_DRM_PANEL_EDP) += panel-edp.o > obj-$(CONFIG_DRM_PANEL_EBBG_FT8719) += panel-ebbg-ft8719.o > obj-$(CONFIG_DRM_PANEL_ELIDA_KD35T133) += panel-elida-kd35t133.o > +obj-$(CONFIG_DRM_PANEL_FANNAL_C3004) += panel-fannal-c3004.o > obj-$(CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02) += panel-feixin-k101-im2ba02.o > obj-$(CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D) += panel-feiyang-fy07024di26a30d.o > obj-$(CONFIG_DRM_PANEL_HIMAX_HX8394) += panel-himax-hx8394.o > diff --git a/drivers/gpu/drm/panel/panel-fannal-c3004.c b/drivers/gpu/drm/panel/panel-fannal-c3004.c > new file mode 100644 > index 000000000000..decbd0c59093 > --- /dev/null > +++ b/drivers/gpu/drm/panel/panel-fannal-c3004.c > @@ -0,0 +1,405 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * MIPI DSI driver for Fannal C3004. > + * Copyright (C) 2023, Zenitel > + * Author: Paulo Pavacic <pavacic.p@gmail.com> > + */ > + > +// ↓ include headers, static values, static functions ↓ This comment is unneeded, please remove it > +#include <linux/of.h> > +#include <linux/of_platform.h> > +#include <linux/delay.h> > +#include <linux/gpio/consumer.h> > +#include <linux/media-bus-format.h> > + > +#include <video/mipi_display.h> > +#include <video/of_videomode.h> > +#include <video/videomode.h> > + > +#include <drm/drm_crtc.h> > +#include <drm/drm_mipi_dsi.h> > +#include <drm/drm_panel.h> > + > +static const struct fann_panel_info fann_c3004_panel_info; Please use fannal everywhere instead of fann > + > +struct fann_panel_info { > + const struct drm_display_mode *display_mode; > + u32 num_of_dsi_lanes; > + u32 mipi_dsi_format; > + u32 mipi_dsi_mode_flags; > + u32 bus_flags; > + u32 video_mode; > + void (*panel_enable_function)(struct mipi_dsi_device *dsi); > +}; > + > +struct fann_panel_data { > + const struct fann_panel_info *panel_info; > + struct drm_panel panel; > + struct gpio_desc *reset; > +}; > + > +static struct fann_panel_data * > +get_fann_panel_data_from_panel(struct drm_panel *panel) > +{ > + return container_of(panel, struct fann_panel_data, panel); > +} > + > +static const struct fann_panel_info * > +get_fann_panel_info_from_panel(struct drm_panel *panel) > +{ > + return get_fann_panel_data_from_panel(panel)->panel_info; > +} > + > +enum FANN_VIDEO_MODES_ENUM { > + FANN_BURST, > + FANN_SYNC_EVENT, > + FANN_SYNC_PULSE, > + FANN_COMMAND, > +}; > + > +static const u32 FANN_VIDEO_MODES[] = { > + MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_VIDEO, //BURST > + MIPI_DSI_MODE_VIDEO, //SYNC_EVENT > + MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_VIDEO, //SYNC_PULSE > + MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_VSYNC_FLUSH //COMMAND MODE > +}; Do not use this, please use "MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_VIDEO" directly instead of this table and enums. > + > +//macro for writing to DSI > +#define WRITE_DSI(dsi, seq...) \ > + { \ > + const u8 d[] = { seq }; \ > + int ret = mipi_dsi_generic_write(dsi, d, ARRAY_SIZE(d)); \ > + if (ret < 0) { \ > + dev_err(&dsi->dev, \ > + "Error (%d) occurred while trying to" \ > + " write MIPI DSI command: %s (decimal value)\n", \ > + ret, d); \ > + } \ > + } Please use mipi_dsi_generic_write_seq() instead of this macro. > + > +// ↑ include headers, static values, static functions ↑ > +// ↓ INTERACTION whole section: panel specific values, add panel as is shown ↓ Remove all those comments > + > +/** > + * @brief Adding new panel > + * Includes but isn't limited to following steps: > + * 1. define new `fann__yourpanel_display_mode` with correct timings > + * 2. define new `fann_panel_yourpanel_enable_function` > + * 3. glue everything with fann_yourpanel_panel_info and set that srtucts values > + * 4. add .compatible = "you,yourpanel", .data = &fann_yourpanel_panel_info } > + */ > + > +static const u32 fann_bus_formats[] = { > + MEDIA_BUS_FMT_RGB888_1X24, > +}; > + > +// resolution 480p x 800p, 56mmx93mm > +static const struct drm_display_mode fann_c3004_display_mode = { > + .clock = 27000, > + .hdisplay = 480, // display height pixels > + .hsync_start = 480 + 30, // hdisplay + HBP > + .hsync_end = 480 + 30 + 8, // hdisplay + HBP + HSync > + .htotal = 480 + 30 + 8 + 30, // hdisplay + HBP + HSync + HFP > + .vdisplay = 800, // display width pixels > + .vsync_start = 800 + 20, // vdisplay + VBP > + .vsync_end = 800 + 20 + 8, // vdisplay + VBP + VSync > + .vtotal = 800 + 20 + 8 + 20, // vdisplay + VBP + VSync + VFP > + .width_mm = 93, > + .height_mm = 56, > + .flags = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, > +}; > + > +static void fann_panel_fannal_c3004_enable_function(struct mipi_dsi_device *dsi) > +{ > + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13); > + WRITE_DSI(dsi, 0xEF, 0x08); > + > + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x10); > + WRITE_DSI(dsi, 0xC0, 0x63, 0x00); > + WRITE_DSI(dsi, 0xC1, 0x0A, 0x0C); > + WRITE_DSI(dsi, 0xC2, 0x31, 0x08); > + WRITE_DSI(dsi, 0xCC, 0x18); > + > + WRITE_DSI(dsi, 0xB0, 0x00, 0x08, 0x10, 0x0E, 0x11, 0x07, 0x08, 0x08, > + 0x08, 0x25, 0x04, 0x12, 0x0F, 0x2C, 0x30, 0x1F); > + WRITE_DSI(dsi, 0xB1, 0x00, 0x11, 0x18, 0x0C, 0x10, 0x05, 0x07, 0x09, > + 0x08, 0x24, 0x04, 0x11, 0x10, 0x2B, 0x30, 0x1F); > + > + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x11); > + WRITE_DSI(dsi, 0xB0, 0x4D); > + WRITE_DSI(dsi, 0xB1, 0x39); > + WRITE_DSI(dsi, 0xB2, 0x87); > + WRITE_DSI(dsi, 0xB3, 0x80); > + WRITE_DSI(dsi, 0xB5, 0x47); > + WRITE_DSI(dsi, 0xB7, 0x8A); > + WRITE_DSI(dsi, 0xB8, 0x20); > + WRITE_DSI(dsi, 0xB9, 0x10, 0x13); > + WRITE_DSI(dsi, 0xC1, 0x78); > + WRITE_DSI(dsi, 0xC2, 0x78); > + WRITE_DSI(dsi, 0xD0, 0x88); > + > + //PANEL > + WRITE_DSI(dsi, 0xE0, 0x00, 0x00, 0x02); > + WRITE_DSI(dsi, 0xE1, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, > + 0x00, 0x20, 0x20); > + WRITE_DSI(dsi, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00); > + WRITE_DSI(dsi, 0xE3, 0x00, 0x00, 0x33, 0x00); > + WRITE_DSI(dsi, 0xE4, 0x22, 0x00); > + WRITE_DSI(dsi, 0xE5, 0x04, 0x34, 0xAA, 0xAA, 0x06, 0x34, 0xAA, 0xAA, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); > + WRITE_DSI(dsi, 0xE6, 0x00, 0x00, 0x33, 0x00); > + WRITE_DSI(dsi, 0xE7, 0x22, 0x00); > + WRITE_DSI(dsi, 0xE8, 0x05, 0x34, 0xAA, 0xAA, 0x07, 0x34, 0xAA, 0xAA, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); > + WRITE_DSI(dsi, 0xEB, 0x02, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00); > + WRITE_DSI(dsi, 0xEC, 0x00, 0x00); > + WRITE_DSI(dsi, 0xED, 0xFA, 0x45, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, > + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x54, 0xAF); > + WRITE_DSI(dsi, 0xEF, 0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F); > + > + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13); > + WRITE_DSI(dsi, 0xE8, 0x00, 0x0E); > + > + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x00); > + WRITE_DSI(dsi, 0x11); //MIPI_DCS_EXIT_SLEEP_MODE > + > + msleep(600); > + > + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13); > + WRITE_DSI(dsi, 0xE8, 0x00, 0x0C); > + msleep(50); > + WRITE_DSI(dsi, 0xE8, 0x00, 0x00); > + > + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x00); > + WRITE_DSI(dsi, 0x29); //MIPI_DCS_SET_DISPLAY_ON > + msleep(100); > +} > + > +static const struct fann_panel_info fann_c3004_panel_info = { > + .display_mode = &fann_c3004_display_mode, > + .num_of_dsi_lanes = 2, //how many wires are connected to the panel > + .video_mode = FANN_VIDEO_MODES[FANN_SYNC_PULSE], > + .mipi_dsi_format = MIPI_DSI_FMT_RGB888, > + .mipi_dsi_mode_flags = > + MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_VSYNC_FLUSH | > + MIPI_DSI_MODE_VIDEO_HSE | MIPI_DSI_MODE_NO_EOT_PACKET, > + .bus_flags = DRM_BUS_FLAG_DE_LOW | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE, > + .panel_enable_function = &fann_panel_fannal_c3004_enable_function > +}; If you handle a single panel, this isn't necessary and you should set all those values into probe and panel ops > + > +// ↑ INTERACTION: panel specific values, add panel as is show in the example ↑ > +// ↓ remove driver/cleanup ↓ > +static void fann_panel_remove(struct mipi_dsi_device *dsi) > +{ > + struct fann_panel_data *panel_data = mipi_dsi_get_drvdata(dsi); > + struct device *dev = &dsi->dev; > + int ret; > + > + ret = mipi_dsi_detach(dsi); > + if (ret) > + dev_err(dev, "error: disable: mipi detach (%d)\n", ret); > + > + drm_panel_remove(&panel_data->panel); > +} > + > +static int fann_panel_disable(struct drm_panel *panel) > +{ > + struct mipi_dsi_device *dsi = to_mipi_dsi_device(panel->dev); > + struct device *dev = panel->dev; > + int ret; > + > + dsi->mode_flags |= MIPI_DSI_MODE_LPM; > + > + ret = mipi_dsi_dcs_set_display_off(dsi); > + if (ret < 0) { > + dev_err(dev, "error: disable: turn display OFF (%d)\n", ret); > + return ret; > + } > + > + usleep_range(5000, 10000); > + > + ret = mipi_dsi_dcs_enter_sleep_mode(dsi); > + if (ret < 0) { > + dev_err(dev, "error: disable: enter sleep mode (%d)\n", ret); > + return ret; > + } > + > + return 0; > +} > + > +static int fann_panel_unprepare(struct drm_panel *panel) > +{ > + struct fann_panel_data *panel_data = > + get_fann_panel_data_from_panel(panel); > + > + if (panel_data->reset) { > + gpiod_set_value_cansleep(panel_data->reset, 1); > + usleep_range(15000, 17000); > + gpiod_set_value_cansleep(panel_data->reset, 0); > + } > + > + return 0; > +} > + > +static void fann_panel_shutdown(struct mipi_dsi_device *dsi) > +{ > + struct fann_panel_data *panel_data = mipi_dsi_get_drvdata(dsi); > + > + fann_panel_disable(&panel_data->panel); > + fann_panel_unprepare(&panel_data->panel); > +} > + > +// ↑ remove driver/cleanup ↑ > +// ↓ probe/create functions ↓ > + > +static int fann_panel_get_modes(struct drm_panel *panel, > + struct drm_connector *connector) > +{ > + struct drm_display_mode *mode; > + const struct fann_panel_info *panel_info = > + get_fann_panel_info_from_panel(panel); > + const struct drm_display_mode *panel_display_mode = > + panel_info->display_mode; Using this panel_display_mode makes it complex for nothing, please directly use fann_c3004_display_mode here. > + > + mode = drm_mode_duplicate(connector->dev, panel_display_mode); > + if (!mode) { > + dev_err(panel->dev, "error: get_modes: add drm mode %ux%u@%u\n", > + panel_display_mode->hdisplay, > + panel_display_mode->vdisplay, > + drm_mode_vrefresh(panel_display_mode)); > + return -ENOMEM; > + } > + > + drm_mode_set_name(mode); > + mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; > + drm_mode_probed_add(connector, mode); > + > + connector->display_info.width_mm = mode->width_mm; > + connector->display_info.height_mm = mode->height_mm; > + connector->display_info.bus_flags = panel_info->bus_flags; Set the bus flasg directly here > + > + drm_display_info_set_bus_formats(&connector->display_info, > + fann_bus_formats, > + ARRAY_SIZE(fann_bus_formats)); > + return 1; > +} > + > +static const struct of_device_id fann_of_match[] = { > + { .compatible = "fannal,c3004", .data = &fann_c3004_panel_info }, Please introduce such data when you'll need to handle multiple panels, for now it's mostly unnecessary code. > + { /* sentinel */ } > +}; > + > +static int fann_panel_enable(struct drm_panel *panel) > +{ > + struct mipi_dsi_device *dsi = to_mipi_dsi_device(panel->dev); > + const struct fann_panel_info *panel_info = > + get_fann_panel_info_from_panel(panel); > + panel_info->panel_enable_function(dsi); > + > + return 0; > +} > + > +static int fann_panel_prepare(struct drm_panel *panel) > +{ > + struct fann_panel_data *panel_data = > + get_fann_panel_data_from_panel(panel); > + > + /* At lest 10ms needed between power-on and reset-out as RM specifies */ > + usleep_range(10000, 12000); > + > + if (panel_data->reset) { > + gpiod_set_value_cansleep(panel_data->reset, 0); > + /* > + * 50ms delay after reset-out, as per manufacturer initalization > + * sequence. > + */ > + msleep(50); > + } > + > + return 0; > +} > + > +static const struct drm_panel_funcs fann_panel_funcs = { > + .prepare = fann_panel_prepare, > + .unprepare = fann_panel_unprepare, > + .enable = fann_panel_enable, > + .disable = fann_panel_disable, > + .get_modes = fann_panel_get_modes, > +}; > + > +static int fann_panel_probe(struct mipi_dsi_device *dsi) > +{ > + struct device *dev = &dsi->dev; > + const struct of_device_id *of_id = of_match_device(fann_of_match, dev); > + const struct fann_panel_info *panel_info = of_id->data; > + struct fann_panel_data *panel_data; > + int ret; > + > + dev_notice(dev, "probe driver called\n"); Drop those prints. > + if (!panel_info) { > + dev_err(dev, "error: probe: get panel_data!\n"); > + return -ENODEV; > + } > + > + panel_data = devm_kzalloc(&dsi->dev, sizeof(*panel_data), GFP_KERNEL); > + > + if (!panel_data) > + return -ENOMEM; > + > + panel_data->panel_info = panel_info; > + panel_data->reset = devm_gpiod_get_optional( > + dev, "reset", GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_NONEXCLUSIVE); > + > + if (IS_ERR(panel_data->reset)) { > + ret = PTR_ERR(panel_data->reset); > + dev_err(dev, > + "error: probe: get reset GPIO: (%d) Check the fdt\n", > + ret); > + return ret; > + } > + > + mipi_dsi_set_drvdata(dsi, panel_data); > + > + dsi->format = panel_info->mipi_dsi_format; > + dsi->mode_flags = panel_info->mipi_dsi_mode_flags | > + panel_info->video_mode; > + dsi->lanes = panel_info->num_of_dsi_lanes; > + > + gpiod_set_value_cansleep(panel_data->reset, 1); > + > + drm_panel_init(&panel_data->panel, dev, &fann_panel_funcs, > + DRM_MODE_CONNECTOR_DSI); > + dev_set_drvdata(dev, panel_data); > + > + drm_panel_add(&panel_data->panel); > + > + ret = mipi_dsi_attach(dsi); > + if (ret) { > + drm_panel_remove(&panel_data->panel); > + dev_err(dev, "error: probe fail: can't attach mipi_dsi!\n"); > + } else > + dev_notice(dev, "probe driver success. Good job!\n"); > + > + return ret; > +} > + > +// ↑ probe/create functions ↑ > +// ↓ generic driver stuff ↓ > + > +static struct mipi_dsi_driver fann_panel_driver = { > + .driver = { > + .name = "panel-fannal-c3004", > + .of_match_table = fann_of_match, > + }, > + .probe = fann_panel_probe, > + .remove = fann_panel_remove, > + .shutdown = fann_panel_shutdown, > +}; > + > +module_mipi_dsi_driver(fann_panel_driver); > + > +MODULE_AUTHOR("Paulo Pavacic <pavacic.p@gmail.com>"); > +MODULE_DESCRIPTION("Fannal C3004 panel driver"); > +MODULE_LICENSE("GPL"); > +MODULE_DEVICE_TABLE(of, fann_of_match); I understand you want to write a clean panel driver for learning purposes, but having unnecessary code isn't appreciated in the Linux codebase, instead make a simple and readble driver with the state-of-the-art architecture and helpers. Thanks, Neil ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel 2023-05-19 14:24 ` [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel Paulo Pavacic 2023-05-22 8:55 ` neil.armstrong @ 2023-05-23 17:33 ` Linus Walleij 1 sibling, 0 replies; 13+ messages in thread From: Linus Walleij @ 2023-05-23 17:33 UTC (permalink / raw) To: Paulo Pavacic Cc: neil.armstrong, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel, devicetree On Fri, May 19, 2023 at 4:25 PM Paulo Pavacic <pavacic.p@gmail.com> wrote: > +//macro for writing to DSI > +#define WRITE_DSI(dsi, seq...) \ > + { \ > + const u8 d[] = { seq }; \ > + int ret = mipi_dsi_generic_write(dsi, d, ARRAY_SIZE(d)); \ > + if (ret < 0) { \ > + dev_err(&dsi->dev, \ > + "Error (%d) occurred while trying to" \ > + " write MIPI DSI command: %s (decimal value)\n", \ > + ret, d); \ > + } \ > + } As said for the other patch, this reinvents mipi_dsi_dcs_write_seq() so use that instead. mipi_dsi_dcs_write_seq(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13); etc. Yours, Linus Walleij ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 0/2] drm/panel: add fannal c3004 panel 2023-05-19 14:24 [PATCH 0/2] drm/panel: add fannal c3004 panel Paulo Pavacic 2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic 2023-05-19 14:24 ` [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel Paulo Pavacic @ 2023-05-22 8:55 ` neil.armstrong 2023-05-23 13:15 ` Paulo Pavacic 2 siblings, 1 reply; 13+ messages in thread From: neil.armstrong @ 2023-05-22 8:55 UTC (permalink / raw) To: Paulo Pavacic, sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt Cc: dri-devel, linux-kernel, devicetree On 19/05/2023 16:24, Paulo Pavacic wrote: > Fannal C3004 is a 2 lane MIPI DSI 480x800 panel which requires initialization with DSI DCS commands. After some commands delay is required. By curiosity, on which board is this panel used ? Neil > > In previous discussions for device tree [1] [2] and device driver [3] were named mipi-dsi-bringup. > > [1] https://patchwork.ozlabs.org/project/devicetree-bindings/patch/CAO9szn3t-giVipb5oH_3mzQZbnXbDqqz0WEg8uAmo-1W2uKzFg@mail.gmail.com/ > [2] https://patchwork.ozlabs.org/project/devicetree-bindings/patch/CAO9szn18KsR0c+U8EEY1=xnmsKMxy6SEArMUic0z=aYJDVwWCQ@mail.gmail.com/ > [3] https://lists.freedesktop.org/archives/dri-devel/2023-May/404775.html > > Paulo Pavacic (2): > dt-bindings: display: panel: add fannal,c3004 > drm/panel-fannal-c3004: Add fannal c3004 DSI panel > > .../bindings/display/panel/fannal,c3004.yaml | 75 ++++ > .../devicetree/bindings/vendor-prefixes.yaml | 2 + > MAINTAINERS | 7 + > drivers/gpu/drm/panel/Kconfig | 11 + > drivers/gpu/drm/panel/Makefile | 1 + > drivers/gpu/drm/panel/panel-fannal-c3004.c | 405 ++++++++++++++++++ > 6 files changed, 501 insertions(+) > create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml > create mode 100644 drivers/gpu/drm/panel/panel-fannal-c3004.c > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 0/2] drm/panel: add fannal c3004 panel 2023-05-22 8:55 ` [PATCH 0/2] drm/panel: add fannal c3004 panel neil.armstrong @ 2023-05-23 13:15 ` Paulo Pavacic 0 siblings, 0 replies; 13+ messages in thread From: Paulo Pavacic @ 2023-05-23 13:15 UTC (permalink / raw) To: neil.armstrong Cc: sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel, devicetree Hello, pon, 22. svi 2023. u 10:55 <neil.armstrong@linaro.org> napisao je: > > On 19/05/2023 16:24, Paulo Pavacic wrote: > > Fannal C3004 is a 2 lane MIPI DSI 480x800 panel which requires initialization with DSI DCS commands. After some commands delay is required. > > By curiosity, on which board is this panel used ? > We are using custom board with IMX8MM. > Neil Paulo ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2023-06-05 15:08 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-05-19 14:24 [PATCH 0/2] drm/panel: add fannal c3004 panel Paulo Pavacic 2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic 2023-05-19 16:41 ` Conor Dooley 2023-06-05 14:33 ` Paulo Pavacic 2023-06-05 14:43 ` Conor Dooley 2023-06-05 14:56 ` Paulo Pavacic 2023-06-05 15:08 ` Conor Dooley 2023-05-20 13:58 ` kernel test robot 2023-05-19 14:24 ` [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel Paulo Pavacic 2023-05-22 8:55 ` neil.armstrong 2023-05-23 17:33 ` Linus Walleij 2023-05-22 8:55 ` [PATCH 0/2] drm/panel: add fannal c3004 panel neil.armstrong 2023-05-23 13:15 ` Paulo Pavacic
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).