DIY Electronic projects

Full Version: RPi kernel driver za RM67162 - custom
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pozdrav društvo,

da li je neko slučajno pisao neke video linux 5.x kernel drivere za RPi?

Potrebno mi je da poteram 1.91'' displej 240x536px koji ima na sebi RM67162 display driver i koji koristi MIPI-DSI konekciju.
Oznaka tog displeja je E1918AM3.A firme EDO (EverDisplay Optronics).
U prilogu je DS od tog displeja.

Ono sto je tu bitno je na stanici 12 i 13, tu ima deo procedure za inicializaciju. To je odprilike sve što imam na tu temu oko tog displeja, nemam ništa drugo od primera ili dodatne dokumentqacije.

Za sam chip RM67162 imam neku verziju DS-a ali na primer tu nisam moga da nadjem sve opise registra koji se spominju u proceduri za inicializaciju, na primer nema opisa za "page" pod brojevima 4, 6 i 9, ima opis do page=3, takodje fale opisi za još neke registre (npr 0x6A) tako da mi se tu nešto ne slaže, izgleda da je u pitanju neka custom verzija chipa!?

DS za displej:
https://www.slideshare.net/ShawnHu5/191-...cell-phone

DS za RM67162:
https://drive.google.com/file/d/1Ck6OyF9...79rO8/view

---

Sto se tiče RPi drajvera, našao sam source-code za najsličniji drajver koji vozi RM68200:
https://github.com/torvalds/linux/blob/m...-rm68200.c

Probao sam taj drajver da prevedem i za divno čudo prevodi se bez problema, koristio sam Makefile poput ovog (samo promeio ime fajla/drajvera)

Quote:obj-m += rm67162-driver.o

KDIR = /lib/modules/5.10.63-v7l+/build

all:
make -C $(KDIR) M=$(shell pwd) modules

clean:
make -C$(KDIR) M=$(shell pwd) clean

-----

Kako da nastavim dalje sa ovim, kojom mukom da mučim ovaj RM67162 displej ... ? : (
Hmm, uradio sam "na slepo prepravku" video drajvera od RM68200 u potrebni RM67162 koji imam na ovom displeju, malo sam ispratio logiku jednog i drugog i nekim slučajem se poklapaju standardne MIPI komande sa ovim što je napisano u DS, neke se ne poklapaju tj nisu dokumentovane ali generalno rm67162_init_sequence treba ovako da izgleda, sve ostalo pre i posle te komande se poklapa sa postojećom logikom od originalnog drajvera, ima par mesta gde je definisana H/V rezolucija i broj DSI linija i sve ostalo je manje-viśe na svom mestu:

Code:
static void rm67162_init_sequence(struct rm67162 *ctx)
{

    dcs_write_seq(ctx, MCS_CMD_MODE_SW, 0x04);
    dcs_write_seq(ctx, 0x6A, 0x00);
    dcs_write_seq(ctx, MCS_CMD_MODE_SW, 0x05);
    dcs_write_seq(ctx, 0x05, 0x00);
    dcs_write_seq(ctx, MCS_CMD_MODE_SW, 0x07);
    dcs_write_seq(ctx, 0x07, 0x4F);
    dcs_write_seq(ctx, MCS_CMD_MODE_SW, MCS_CMD2_P0);
    dcs_write_seq(ctx, MIPI_DCS_SET_COLUMN_ADDRESS, 0x02); //0x2A 0x02
    dcs_write_seq(ctx, MIPI_DCS_SET_PAGE_ADDRESS, 0x73); //0x2B 115
    dcs_write_seq(ctx, MCS_CMD_MODE_SW, 0x0A);
    dcs_write_seq(ctx, 0x29, 0x10);
    dcs_write_seq(ctx, MCS_CMD_MODE_SW, MCS_CMD1_UCS);
    dcs_write_seq(ctx, 0x35, 0x00);
}

Taj drajver za RPi arbitrira RESET i POWER-ON signalom, to sam ostavio tako kako jeste i to povlači da fizički trebam priključi te linije na DSI konektoru od RPi ka mom ekranu.

U teoriji je to taj drajver Smile

E sad da li će to da radi je malo teže pitanje jer moram prvo da se izborim sa konektorima, pa onda sa 3 dodatna napajanja za ekran, pa hakovanje flat kabla za RPi i ko zna šta još me čeka samo da probam ...

Trebam napraviti neke helper funkcije da probam da isčitam ID iz ekrana da vidim da li uopšte radi komunikacija (to radi "probe" deo kernel drajvera) ...
Hehe, proradio drajver ... Big Grin
Bilo je potrebno da se prevede i "device tree overlay" za ovaj panel, koristi se "dtc" prevodilac koji iz source .dts pretvara u BLOB .dtbo fajl koji se postavlja u /boot/overlays kako bi kernel znao kako da upotrebi drajver.
Inače ne mora da se prevodi ceo kernel, samo drajver i ovaj overlay koji se prilikom boot-a dinamicno učitavaju.

Source rm68200.dts za taj panel izgleda ovako:

Code:
/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";

    fragment@0 {
        target = <&dsi1>;
        __overlay__ {
            status = "okay";

            #address-cells = <1>;
            #size-cells = <0>;
            #power-domains = <&power 18>;

            port {
                dsi_out_port: endpoint {
                    remote-endpoint = <&panel_dsi_port>;
                    };
            };

            panel_test:panel@0 {
                compatible = "raydium,rm68200";

                reset-gpios = <&gpio 13 0>;
                #bk-gpios = <&gpio 12 0>;
                vc4_dsi = <&dsi1>;
                label = "panel_test";
                reg = <0>;
                port {
                    panel_dsi_port: endpoint {
                        remote-endpoint = <&dsi_out_port>;
                    };
                };
            };
        };
    };
};

U fajlu /boot/config.txt se doda samo linija da povuče taj naš nov drajver i overlay:

Code:
...
[pi4]
# Enable DRM VC4 V3D driver on top of the dispmanx display stack
ignore_lcd=1
dtoverlay=rm68200
dtoverlay=vc4-kms-v3d
max_framebuffers=2

I to bi odprilike bilo to Smile
Može malo to da se doradi i srede još neke stvarčice ali generalno radi!

[Image: attachment.php?aid=36909]