Re: [PATCH v4 3/3] drm/panel-fannal-c3004: Add fannal c3004 DSI panel

From: Marek Vasut
Date: Wed Jul 12 2023 - 09:42:14 EST


On 7/12/23 14:07, Paulo Pavacic wrote:
Hello all,

sub, 8. srp 2023. u 14:53 Marek Vasut <marex@xxxxxxx> napisao je:

On 7/7/23 17:26, Paulo Pavacic wrote:
Hello Marek,

Hi,

čet, 6. srp 2023. u 17:26 Marek Vasut <marex@xxxxxxx> napisao je:

On 7/6/23 17:18, Paulo Pavacic wrote:
Hello Linus,

čet, 22. lip 2023. u 10:22 Linus Walleij <linus.walleij@xxxxxxxxxx> napisao je:

On Wed, Jun 21, 2023 at 5:09 PM Paulo Pavacic <pavacic.p@xxxxxxxxx> wrote:

A lot of modifications to st7701 are required. I believe it would
result in a driver that doesn't look or work the same. e.g compare
delays between initialization sequences of panel-fannal-c3004 and
panel-st7701. I think it would be optimal to create st7701s driver and
have special handling for st7701s panels. If there was a flag for
whether panel is st7701 or st7701s it would end up looking like a
mess.

What matters is if the original authors of the old st7701 driver are
around and reviewing and testing patches at all. What we need is
active maintainers. (Added Jagan, Marek & Maya).

I buy the reasoning that the st7701s is perhaps substantially different
from st7701.

If st7701s is very different then I suppose it needs a separate driver,
then all we need to to name the driver properly, i.e.
panel-sitronix-st7701s.c.

I had in person talk with Paul Kocialkowski and I have concluded that
this is the best solution.
I believe I should rename it to st7701s due to the hardware changes. I
would like to create V5 patch with driver renamed to st7701s.
Please let me know if you agree / disagree.

If I recall it right, the ST7701 and ST7701S are basically the same
chip, aren't they ?

I'm currently exploring all the differences. There aren't a lot of
differences, but there are some.
So far I can see that default register values are different, new
previously unused registers are now used and there has been some
reordering of how info is placed in registers [1] (data bits are in
different order). Moreover, instructions to some commands have been
changed and meaning of what data bits mean [2][3]. Also, new features
have been added [2]; there is now PCLKS 3 for example.

You can see few differences in following images. Same images were
attached in this mail:
[1] https://ibb.co/NmgbZmy - GAMACTRL_st7701.png
[2] https://ibb.co/G79y235 - PCLKS2.png

Ouch. I wonder if this is still something that can be abstracted out
with some helper accessor functions like:

if (model == ST7701)
write something
else
write the other layout

Or whether it makes sense to outright have a separate driver. The later
would introduce duplication, but maybe that much duplication is OK.

I would like to create new driver because panel-st7701 seems to be
outdated and is using non-standard macro (ST7701_WRITE()

There is no such macro:

$ git grep ST7701_WRITE drivers/gpu/drm/panel/ | wc -l
0

There never was such a macro used in the driver either, are you sure you are not using some hacked up patched downstream fork of the driver ?

$ git log -p next/master -- drivers/gpu/drm/panel/panel-sitronix-st7701.c | grep ST7701_WRITE | wc -l
0

) and for me
it is crashing kernel 5.15.

Have you based all the aforementioned discussion and argumentation on year and half old Linux 5.15.y code base too ?

If so, you are missing many patches:

$ git log --oneline --no-merges v5.15..next/master -- drivers/gpu/drm/panel/panel-sitronix-st7701.c
5a2854e577dc2 drm: panel: Add orientation support for st7701
e89838968ee44 drm: panel: Add Elida KD50T048A to Sitronix ST7701 driver
c62102165dd79 drm/panel/panel-sitronix-st7701: Remove panel on DSI attach failure
49ee766b364ed drm/panel/panel-sitronix-st7701: Clean up CMDnBKx selection
c1cdee9b685a1 drm/panel/panel-sitronix-st7701: Fix RTNI calculation
57b2efce45ef5 drm/panel/panel-sitronix-st7701: Add Densitron DMT028VGHMCMI-1A TFT
42542c7904cf2 drm/panel/panel-sitronix-st7701: Split GIP and init sequences
83b7a8e7e88e7 drm/panel/panel-sitronix-st7701: Parametrize voltage and timing
de2b4917843cd drm/panel/panel-sitronix-st7701: Infer horizontal pixel count from TFT mode
82f9cee25598a drm/panel/panel-sitronix-st7701: Adjust porch control bitfield name
1ba85119afb5e drm/panel/panel-sitronix-st7701: Infer vertical line count from TFT mode
779c84fea3dbd drm/panel/panel-sitronix-st7701: Make gamma correction TFT specific
7fa8e07128ed6 drm/panel/panel-sitronix-st7701: Make voltage supplies common to ST7701
a6c225be3da7e drm/panel/panel-sitronix-st7701: Enable DSI burst mode, LPM, non-continuous clock
6f481afe220d3 drm/panel/panel-sitronix-st7701: Make DSI mode flags common to ST7701
79abca2b39900 drm/mipi-dsi: Make remove callback return void

Does anyone have similar issues with it?

No, I am using it in production.