Forum: Mikrocontroller und Digitale Elektronik Touchscreen (i2c) in Devicetree einfügen


von Holger K. (holgerkraehe)


Lesenswert?

Hallo zusammen

Ich habe hier ein ITEAD A10 Board. An dieses möchte ich gerne einen 
ilitex 21xx Touchscreen controller anschliessen.

Dafür gibt es bereits ein entsprechendes Binding:

https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/input/ilitek%2Cili2xxx.txt

Das beispiel sieht wie folgt aus:
1
  touchscreen@41 {
2
    compatible = "ilitek,ili251x";
3
    reg = <0x41>;
4
    interrupt-parent = <&gpio4>;
5
    interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
6
    reset-gpios = <&gpio5 21 GPIO_ACTIVE_LOW>;
7
  };

Nun habe ich mehrere i2c an meinem Board.

So sieht i2c1 im DTS aus:
1
&i2c1 {
2
  status = "okay";
3
4
  eeprom: eeprom@41 {
5
    compatible = "atmel,24c16";
6
    reg = <0x41>;
7
    pagesize = <16>;
8
  };
9
};

Im dtsi file (sun4i-a10.dtsi)
https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/sun4i-a10.dtsi
gibt es auch einen i2c2 bereich:
1
    i2c2: i2c@1c2b400 {
2
      compatible = "allwinner,sun4i-a10-i2c";
3
      reg = <0x01c2b400 0x400>;
4
      interrupts = <9>;
5
      clocks = <&ccu CLK_APB1_I2C2>;
6
      pinctrl-names = "default";
7
      pinctrl-0 = <&i2c2_pins>;
8
      status = "disabled";
9
      #address-cells = <1>;
10
      #size-cells = <0>;
11
    };


Um nun mitzuteilen, dass mein ilitek am i2c2 liegt, genügt dann sowas 
hier?
1
&i2c2 {
2
  status = "okay";
3
4
  touchscreen@41 {
5
    compatible = "ilitek,ili251x";
6
    reg = <0x41>;
7
    interrupt-parent = <&gpio4>;
8
    interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
9
    reset-gpios = <&gpio5 21 GPIO_ACTIVE_LOW>;
10
  };
11
};

Wobei ich mir nicht sicher bin, wie ich die GPIOs definieren muss.

Mein INT-Pin liegt an GPIO PH25
Mein RST an GPIO PH27 des Boards

Im dtsi file 
(https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/sun4i-a10.dtsi) 
steht leider nicht viel zu den gpios drin...

Das einzige andere dtsi file welches im DTS verlinkt wurde ist dieses 
hier:
1
#include "sunxi-common-regulators.dtsi"
2
#include <dt-bindings/gpio/gpio.h>

Hier noch das DTS welches als Ausgangslage dient:
https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts


Vielen Dank für eure Kommentare

Grüsse
Holger

: Bearbeitet durch User
von Holger K. (holgerkraehe)


Lesenswert?

Hmm

Wäre evtl die pc programmierung die bessere kategorie?

von Holger K. (holgerkraehe)


Lesenswert?

Ich hab das ganze nun mal so angepasst:
1
&i2c2 {
2
  status = "okay";
3
4
    touchscreen@41 {
5
      compatible = "ilitek,ili251x";
6
      reg = <0x41>;
7
      interrupt-parent = <&pio>;
8
      interrupts = <7 27 2>;
9
      reset-gpios = <&pio 7 25 GPIO_ACTIVE_LOW>;
10
    };
11
};

Leider noch ohne Erfolg.
Die 7 habe ich bei den GPIOs deshalb verwendet, da PortH wenn PortA = 0 
ist eben 7 ist.

Lies sich jedenfalls problemlos kompilieren.
Leider reagiert der Touch nicht.
Ich weiss auch nicht wirklich, wie ich das device debuggen könnte.

von Holger K. (Gast)


Lesenswert?

Soo

Der Touch funktioniert tatsächlich!
Musste jedoch noch einen anderen GPIO für den Interrupt verwenden.

Der korrekte Eintrag sieht nun so aus:

&i2c2 {
  status = "okay";

    touchscreen@41 {
      compatible = "ilitek,ili251x";
      reg = <0x41>;
      interrupt-parent = <&pio>;
      interrupts = <8 10 2>;
      reset-gpios = <&pio 7 25 GPIO_ACTIVE_LOW>;
    };
};

PH27 war kein EINT. PI10 ist jedoch einer.
Daher meldete der Treiber in den Kernel Logs "NO IRQ!" und 
verabschiedete sich mit Error Code -22

Leider habe ich nun das Problem, dass sich die Maus nur in einem extrem 
kleinen Bereich bewegen lässt mit dem Touch. Ein Kalibrieren scheitert 
aktuell leider am letzten kalibrationspunkt.

Aus irgend einem Grund wird dieser nicht akzeptiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.