Embedded PC - SMBus problem -I2C

Jun 15, 2023 Last reply: 3 years ago 10 Replies

Witam,



Mam emebedded PC z normalnym x86_64 + normalne ubuntu 22.04 z kernelem



5.15.0.

Dodatkowo mam tam dwa scalaki na SMBus. TCA6804 i LTC2945. Do obu jak się okazało Ubuntu ma wkompilowane drivery. PCA953x, obsługujący również ten mój TCA i ltc2945 do tego drugiego.



Drivery nie ładują się na początku bo prawdopodobnie nie ma gdzieś właściwych definicji.



Moduły same w sobie mogę załadować, ale to nie jest pnp. Normalnie szukałbym DTS gdzieś w tym ubuntu, ale nie ma. Z acpi nie bardzo mam doświadczenie.



Z dts wiem jak to zrobić. Załadować definicje przy pomocy dtoverlay , potem moduł i używać.



Trochę utknąłem. Co do jakiejś formy definicji ich obecności - jestem pewien ,że musi być. W każdym razie driver do ltc2945 zdaje się pobierać parametry w poniższy sposób:



if (device_property_read_u32(dev, "shunt-resistor-micro-ohms", &data->shunt_resistor))



Ma ktoś jakiś pomysł ?



Pozdrawiam



Adam Górski


W dniu 15.06.2023 o 19:57, Adam Górski pisze: \

No, ja mam. Kombinuję jakby tu zrobić taki turecki chlebek, który dają do kebaba w Berilner Doner Kebap. Przyznam, że jest świetny. Chrupiący na zewnątrz i mięciutki w środku. Planuję spróbować jak z ciastem drożdżowym, tyle, że dam dużo mniej cukru i tłuszczu. Konkretnie ile... tego jeszcze nie wiem, ale taki mam pomysł.

W dniu 15.06.2023 o 20:12, Kaczin0 pisze:

No dziękuję.

pozdrawiam

Adam Górski

Masz je w postaci modułów? No to:

formatting link

No tak łatwo to nie ma. Moduly to ja sobie mogę ładować.

SMBus nie jest niestety PNP i trzeba gdzieś podać co na niej jest ( i na której ).

O ile adresy to sobie system przeskanuje , ale co to za układy to już się nie dowie , bo rzadko który mam chip ID.

Zatem trzeba jakoś podać. Tylko jak.

Pozdrawiam

Adam Górski

Właśnie tam się podaje:

formatting link

Adam Górski wrote on 15.06.2023 20:51:

W jakimś skrypcie odpalanym jednorazowo przez systemd na starcie kompa załaduj driver i wykonaj konfigurację:

modprobe ltc2945 echo ltc2945 0x10 > /sys/bus/i2c/devices/i2c-1/new_device

Może da się to zrobić bardziej elegancko przez wywołanie drivera w /etc/modules oraz przekazanie do niego parametrów w /etc/modprobe.d/ltc2945.conf (options ltc2945 .....), ale google na ten temat milczy.

W dniu 15.06.2023 o 21:44, Zbych pisze:

Sprawdzę i dam znać.

Dzięki.

Pozdrawiam

Adam Górski

Dzięki. O to chodziło.

Adam

W dniu 16.06.2023 o 13:13, Adam Górski pisze:

Już się wyjaśniło.

Wystarczyło : echo ltc2945 0x10 > /sys/bus/i2c/devices/i2c-1/new_device

Ale zapomnialem , że sudo to nie su. I powyższe jest ok z poziomu roota.

Z poziomu usera trzeba nieco inaczej :

echo "ltc2945 0x10" | sudo tee /sys/bus/i2c/devices/i2c-1/new_device

Cały problem był spowodowany tym , że gdzieś wyczytałem , że Ubuntu ma zablokowanego roota.

No i faktycznie su mi nie dawało roota.

Zapomniałem , że można jeszcze sudo su bo wtedy setui jest ustawiony i można nadać sobie prawa roota.

Nie jestem tutaj specjalistą , ale tak chyba mniej więcej jest.

Tak czy siak pojawiły mi się oba urządzenia. ltc245 i tca6408. I mogę z nimi gadać.

Dzięki bardzo za pomoc.

pozdrawiam

Adam Górski

W dniu 15.06.2023 o 21:44, Zbych pisze:

Pozostał jeden problem.

W module parametry pobierane są przez device_property_read_u32().

I nijak nie mogę przekazać tych parametrów do modułu.

- próbowałem insmod xxxx.ko parameter=1

- próbowałem /etc/modprobe.d/xxxx.conf

Niestety modprobe nie ma opcji żeby załadować moduł z dowolnej lokalizacji. Używam zatem insmod/rmmod.

Przeszukując net mam niejasne przeczucie , że takie parametry powinny być przekazywane poprzez acpi a nie przez /etc/.... bo mogą być różne dla kilku instancji.

Jakiś pomysł ( w temacie )?

Pozdrawiam

Adam Górski

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required