I looked at the sxiccmu and it seems to be set up for H3 in both the dtb and
driver. There is a " sxiccmu1 at simplebus0" in dmesg (attached). What
does the message " sxiccmu_ccu_enable: 0x0000003b" in dmesg mean?
I would like to continue with the sxitwi driver as almost all the bits and
bytes in the driver match the H3 datasheet for TWI. The only exception I see
are two enhanced feature registers that I don't think will make any
difference. The default is for the features to be off.
Can someone point me to code that does iic attach, detach, read and write
that I could use as an example to follow. I can't seem to get my head around
iic(9), setting up the parameters. Copying some existing code is much more
what I can handle.
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of
Artturi Alm
Sent: Wednesday, September 13, 2017 11:23 AM
To: Stephen Graf <[email protected]>
Cc: Patrick Wildt <[email protected]>; [email protected]
Subject: Re: help with sxitwi on allwinner H3
On Wed, Sep 13, 2017 at 10:50:28AM -0700, Stephen Graf wrote:
> I am trying to get an i2c driver working on orange pi one (H3).
> Reading the H3 datasheet would lead me to believe that the
> driver should work. The H3 data is the same except for 2 additional
> extended feature registers that should not be needed.
>
> I modified the dtb and the sxitwi driver to set up H3 compatibility,
> rebuilt the kernel and got the following in the dmesg:
>
> sxitwi0 at simplebus0sxiccmu_ccu_enable: 0x0000003b
>
> iic0 at sxitwi0
> sxitwi1 at simplebus0sxiccmu_ccu_enable: 0x0000003c
>
> iic1 at sxitwi1
> sxitwi2 at simplebus0sxiccmu_ccu_enable: 0x0000003d
>
> iic2 at sxitwi2
>
> Now I am stuck trying to write some code to test the driver. I have a
> device on the i2c bus iic1 at address 76, a bme280 temperature,
> pressure and humidity sensor.
> I am not an accomplished c programmer and would dearly like to see an
> example of using iic to read and write a device on the i2c bus.
>
> Note: I do not see nor can create iicx or switwi devices.
>
Hi,
after you've finished what patrick@ wrote about, you might want to take a
look at i/sys/dev/fdt/axp20x.c, it could very well be the simplest driver on
iic-bus in tree, and consequently it does attach to sxitwi* :)
-Artturi
OpenBSD 6.2-beta (GENERIC) #0: Tue Sep 12 21:33:15 PDT 2017
[email protected]:/usr/src/sys/arch/armv7/compile/GENERIC
real mem = 536870912 (512MB)
avail mem = 517316608 (493MB)
mainbus0 at root: Xunlong Orange Pi One
cpu0 at mainbus0: ARM Cortex-A7 r0p5 (ARMv7)
cpu0: DC enabled IC enabled WB disabled EABT branch prediction enabled
cpu0: 32KB(32b/l,2way) I-cache, 32KB(64b/l,4way) wr-back D-cache
cortex0 at mainbus0
sxiccmu0 at mainbus0
psci0 at mainbus0
simplebus0 at mainbus0: "soc"
sxiccmu1 at simplebus0
sxipio0 at simplebus0: 94 pins
sxipio1 at simplebus0: 12 pins
sximmc0 at simplebus0
sdmmc0 at sximmc0: 4-bit, sd high-speed, mmc high-speed, dma
ehci0 at simplebus0
usb0 at ehci0: USB revision 2.0
uhub0 at usb0 configuration 1 interface 0 "Generic EHCI root hub" rev 2.00/1.00
addr 1
ehci1 at simplebus0
usb1 at ehci1: USB revision 2.0
uhub1 at usb1 configuration 1 interface 0 "Generic EHCI root hub" rev 2.00/1.00
addr 1
sxidog0 at simplebus0
com0 at simplebus0: ns16550, no working fifo
com0: console
sxitwi0 at simplebus0sxiccmu_ccu_enable: 0x0000003b
iic0 at sxitwi0
sxitwi1 at simplebus0sxiccmu_ccu_enable: 0x0000003c
iic1 at sxitwi1
sxitwi2 at simplebus0sxiccmu_ccu_enable: 0x0000003d
iic2 at sxitwi2
ampintc0 at simplebus0 nirq 160, ncpu 4
sxirtc0 at simplebus0
gpio0 at sxipio0: 32 pins
gpio1 at sxipio0: 32 pins
gpio2 at sxipio0: 32 pins
gpio3 at sxipio0: 32 pins
gpio4 at sxipio0: 32 pins
gpio5 at sxipio0: 32 pins
gpio6 at sxipio0: 32 pins
gpio7 at sxipio1: 32 pins
agtimer0 at mainbus0: tick rate 24000 KHz
scsibus0 at sdmmc0: 2 targets, initiator 0
sd0 at scsibus0 targ 1 lun 0: <SD/MMC, SL16G, 0080> SCSI2 0/direct removable
sd0: 15193MB, 512 bytes/sector, 31116288 sectors
uhub2 at uhub1 port 1 configuration 1 interface 0 "Terminus Technology USB 2.0
Hub" rev 2.00/1.11 addr 2
run0 at uhub2 port 2 configuration 1 interface 0 "Ralink 802.11 n WLAN" rev
2.00/1.01 addr 3
run0: MAC/BBP RT3070 (rev 0x0201), RF RT3020 (MIMO 1T1R), address
00:1f:cf:52:86:52
umass0 at uhub2 port 4 configuration 1 interface 0 "VIA Labs,Inc. USB3.0 SATA
Bridge" rev 2.10/4.14 addr 4
umass0: using SCSI over Bulk-Only
scsibus1 at umass0: 2 targets, initiator 0
sd1 at scsibus1 targ 1 lun 0: <ST310005, 28AS, CC38> SCSI4 0/direct fixed
serial.21090711000000000025
sd1: 953869MB, 512 bytes/sector, 1953525164 sectors
vscsi0 at root
scsibus2 at vscsi0: 256 targets
softraid0 at root
scsibus3 at softraid0: 256 targets
boot device: sd0
root on sd0a (1267496224926671.a) swap on sd0b dump on sd0b
/dts-v1/;
/ {
interrupt-parent = <0x1>;
#address-cells = <0x1>;
#size-cells = <0x1>;
model = "Xunlong Orange Pi One";
compatible = "xunlong,orangepi-one", "allwinner,sun8i-h3";
clocks {
#address-cells = <0x1>;
#size-cells = <0x1>;
ranges;
osc24M_clk {
#clock-cells = <0x0>;
compatible = "fixed-clock";
clock-frequency = <0x16e3600>;
clock-output-names = "osc24M";
linux,phandle = <0x9>;
phandle = <0x9>;
};
osc32k_clk {
#clock-cells = <0x0>;
compatible = "fixed-clock";
clock-frequency = <0x8000>;
clock-output-names = "osc32k";
linux,phandle = <0xa>;
phandle = <0xa>;
};
internal-osc-clk {
#clock-cells = <0x0>;
compatible = "fixed-clock";
clock-frequency = <0xf42400>;
clock-accuracy = <0x11e1a300>;
clock-output-names = "iosc";
linux,phandle = <0x16>;
phandle = <0x16>;
};
};
soc {
compatible = "simple-bus";
#address-cells = <0x1>;
#size-cells = <0x1>;
ranges;
syscon@1c00000 {
compatible = "allwinner,sun8i-h3-system-controller",
"syscon";
reg = <0x1c00000 0x1000>;
};
ethernet@1c30000 {
compatible = "allwinner,sun8i-h3-emac";
syscon = <0x6>;
reg = <0x1c30000 0x104>;
interrupts = <0x0 0x52 0x4>;
resets = <0x2 0xc>;
reset-names = "ahb";
clocks = <0x2 0x1b>;
clock-names = "ahb";
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "okay";
phy-handle = <0x7>;
phy-mode = "mii";
allwinner,leds-active-low;
linux,phandle = <0x31>;
phandle = <0x31>;
mdio {
#address-cells = <0x1>;
#size-cells = <0x0>;
linux,phandle = <0x32>;
phandle = <0x32>;
ethernet-phy@1 {
reg = <0x1>;
clocks = <0x2 0x43>;
resets = <0x2 0x27>;
linux,phandle = <0x4f>;
phandle = <0x4f>;
};
};
};
dma-controller@01c02000 {
compatible = "allwinner,sun8i-h3-dma";
reg = <0x1c02000 0x1000>;
interrupts = <0x0 0x32 0x4>;
clocks = <0x2 0x15>;
resets = <0x2 0x6>;
#dma-cells = <0x1>;
linux,phandle = <0xb>;
phandle = <0xb>;
};
mmc@01c0f000 {
reg = <0x1c0f000 0x1000>;
resets = <0x2 0x7>;
reset-names = "ahb";
interrupts = <0x0 0x3c 0x4>;
status = "okay";
#address-cells = <0x1>;
#size-cells = <0x0>;
compatible = "allwinner,sun7i-a20-mmc";
clocks = <0x2 0x16 0x2 0x47 0x2 0x49 0x2 0x48>;
clock-names = "ahb", "mmc", "output", "sample";
pinctrl-names = "default";
pinctrl-0 = <0x3 0x4>;
vmmc-supply = <0x5>;
bus-width = <0x4>;
cd-gpios = <0x6 0x5 0x6 0x0>;
cd-inverted;
};
mmc@01c10000 {
reg = <0x1c10000 0x1000>;
resets = <0x2 0x8>;
reset-names = "ahb";
interrupts = <0x0 0x3d 0x4>;
status = "disabled";
#address-cells = <0x1>;
#size-cells = <0x0>;
compatible = "allwinner,sun7i-a20-mmc";
clocks = <0x2 0x17 0x2 0x4a 0x2 0x4c 0x2 0x4b>;
clock-names = "ahb", "mmc", "output", "sample";
};
mmc@01c11000 {
reg = <0x1c11000 0x1000>;
resets = <0x2 0x9>;
reset-names = "ahb";
interrupts = <0x0 0x3e 0x4>;
status = "disabled";
#address-cells = <0x1>;
#size-cells = <0x0>;
compatible = "allwinner,sun7i-a20-mmc";
clocks = <0x2 0x18 0x2 0x4d 0x2 0x4f 0x2 0x4e>;
clock-names = "ahb", "mmc", "output", "sample";
};
usb@01c19000 {
compatible = "allwinner,sun8i-h3-musb";
reg = <0x1c19000 0x400>;
clocks = <0x2 0x20>;
resets = <0x2 0x11>;
interrupts = <0x0 0x47 0x4>;
interrupt-names = "mc";
phys = <0x7 0x0>;
phy-names = "usb";
extcon = <0x7 0x0>;
status = "okay";
dr_mode = "otg";
};
phy@01c19400 {
compatible = "allwinner,sun8i-h3-usb-phy";
reg = <0x1c19400 0x2c 0x1c1a800 0x4 0x1c1b800 0x4
0x1c1c800 0x4 0x1c1d800 0x4>;
reg-names = "phy_ctrl", "pmu0", "pmu1", "pmu2", "pmu3";
clocks = <0x2 0x58 0x2 0x59 0x2 0x5a 0x2 0x5b>;
clock-names = "usb0_phy", "usb1_phy", "usb2_phy",
"usb3_phy";
resets = <0x2 0x0 0x2 0x1 0x2 0x2 0x2 0x3>;
reset-names = "usb0_reset", "usb1_reset", "usb2_reset",
"usb3_reset";
status = "okay";
#phy-cells = <0x1>;
usb0_id_det-gpios = <0x6 0x6 0xc 0x0>;
usb0_vbus-supply = <0x8>;
linux,phandle = <0x7>;
phandle = <0x7>;
};
usb@01c1a000 {
compatible = "allwinner,sun8i-h3-ehci", "generic-ehci";
reg = <0x1c1a000 0x100>;
interrupts = <0x0 0x48 0x4>;
clocks = <0x2 0x21 0x2 0x25>;
resets = <0x2 0x12 0x2 0x16>;
status = "okay";
};
usb@01c1a400 {
compatible = "allwinner,sun8i-h3-ohci", "generic-ohci";
reg = <0x1c1a400 0x100>;
interrupts = <0x0 0x49 0x4>;
clocks = <0x2 0x21 0x2 0x25 0x2 0x5c>;
resets = <0x2 0x12 0x2 0x16>;
status = "okay";
};
usb@01c1b000 {
compatible = "allwinner,sun8i-h3-ehci", "generic-ehci";
reg = <0x1c1b000 0x100>;
interrupts = <0x0 0x4a 0x4>;
clocks = <0x2 0x22 0x2 0x26>;
resets = <0x2 0x13 0x2 0x17>;
phys = <0x7 0x1>;
phy-names = "usb";
status = "okay";
};
usb@01c1b400 {
compatible = "allwinner,sun8i-h3-ohci", "generic-ohci";
reg = <0x1c1b400 0x100>;
interrupts = <0x0 0x4b 0x4>;
clocks = <0x2 0x22 0x2 0x26 0x2 0x5d>;
resets = <0x2 0x13 0x2 0x17>;
phys = <0x7 0x1>;
phy-names = "usb";
status = "okay";
};
usb@01c1c000 {
compatible = "allwinner,sun8i-h3-ehci", "generic-ehci";
reg = <0x1c1c000 0x100>;
interrupts = <0x0 0x4c 0x4>;
clocks = <0x2 0x23 0x2 0x27>;
resets = <0x2 0x14 0x2 0x18>;
phys = <0x7 0x2>;
phy-names = "usb";
status = "disabled";
};
usb@01c1c400 {
compatible = "allwinner,sun8i-h3-ohci", "generic-ohci";
reg = <0x1c1c400 0x100>;
interrupts = <0x0 0x4d 0x4>;
clocks = <0x2 0x23 0x2 0x27 0x2 0x5e>;
resets = <0x2 0x14 0x2 0x18>;
phys = <0x7 0x2>;
phy-names = "usb";
status = "disabled";
};
usb@01c1d000 {
compatible = "allwinner,sun8i-h3-ehci", "generic-ehci";
reg = <0x1c1d000 0x100>;
interrupts = <0x0 0x4e 0x4>;
clocks = <0x2 0x24 0x2 0x28>;
resets = <0x2 0x15 0x2 0x19>;
phys = <0x7 0x3>;
phy-names = "usb";
status = "disabled";
};
usb@01c1d400 {
compatible = "allwinner,sun8i-h3-ohci", "generic-ohci";
reg = <0x1c1d400 0x100>;
interrupts = <0x0 0x4f 0x4>;
clocks = <0x2 0x24 0x2 0x28 0x2 0x5f>;
resets = <0x2 0x15 0x2 0x19>;
phys = <0x7 0x3>;
phy-names = "usb";
status = "disabled";
};
clock@01c20000 {
reg = <0x1c20000 0x400>;
clocks = <0x9 0xa>;
clock-names = "hosc", "losc";
#clock-cells = <0x1>;
#reset-cells = <0x1>;
compatible = "allwinner,sun8i-h3-ccu";
linux,phandle = <0x2>;
phandle = <0x2>;
};
pinctrl@01c20800 {
reg = <0x1c20800 0x400>;
interrupts = <0x0 0xb 0x4 0x0 0x11 0x4>;
clocks = <0x2 0x36 0x9 0xa>;
clock-names = "apb", "hosc", "losc";
gpio-controller;
#gpio-cells = <0x3>;
interrupt-controller;
#interrupt-cells = <0x3>;
compatible = "allwinner,sun8i-h3-pinctrl";
linux,phandle = <0x6>;
phandle = <0x6>;
emac0 {
pins = "PD0", "PD1", "PD2", "PD3", "PD4",
"PD5", "PD7", "PD8", "PD9", "PD10", "PD12", "PD13", "PD15", "PD16", "PD17";
function = "emac";
drive-strength = <0x28>;
};
i2c0 {
pins = "PA11", "PA12";
function = "i2c0";
linux,phandle = <0x13>;
phandle = <0x13>;
};
i2c1 {
pins = "PA18", "PA19";
function = "i2c1";
linux,phandle = <0x14>;
phandle = <0x14>;
};
i2c2 {
pins = "PE12", "PE13";
function = "i2c2";
linux,phandle = <0x15>;
phandle = <0x15>;
};
mmc0@0 {
pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5";
function = "mmc0";
drive-strength = <0x1e>;
bias-pull-up;
linux,phandle = <0x3>;
phandle = <0x3>;
};
mmc0_cd_pin@0 {
pins = "PF6";
function = "gpio_in";
bias-pull-up;
linux,phandle = <0x4>;
phandle = <0x4>;
};
mmc1@0 {
pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5";
function = "mmc1";
drive-strength = <0x1e>;
bias-pull-up;
};
mmc2_8bit {
pins = "PC5", "PC6", "PC8", "PC9", "PC10",
"PC11", "PC12", "PC13", "PC14", "PC15", "PC16";
function = "mmc2";
drive-strength = <0x1e>;
bias-pull-up;
};
spdif@0 {
pins = "PA17";
function = "spdif";
};
spi0 {
pins = "PC0", "PC1", "PC2", "PC3";
function = "spi0";
linux,phandle = <0xc>;
phandle = <0xc>;
};
spi1 {
pins = "PA15", "PA16", "PA14", "PA13";
function = "spi1";
linux,phandle = <0xd>;
phandle = <0xd>;
};
uart0@0 {
pins = "PA4", "PA5";
function = "uart0";
linux,phandle = <0xf>;
phandle = <0xf>;
};
uart1 {
pins = "PG6", "PG7";
function = "uart1";
linux,phandle = <0x10>;
phandle = <0x10>;
};
uart1_rts_cts {
pins = "PG8", "PG9";
function = "uart1";
};
uart2 {
pins = "PA0", "PA1";
function = "uart2";
linux,phandle = <0x11>;
phandle = <0x11>;
};
uart3 {
pins = "PA13", "PA14";
function = "uart3";
linux,phandle = <0x12>;
phandle = <0x12>;
};
led_pins@0 {
pins = "PA15";
function = "gpio_out";
linux,phandle = <0x19>;
phandle = <0x19>;
};
};
timer@01c20c00 {
compatible = "allwinner,sun4i-a10-timer";
reg = <0x1c20c00 0xa0>;
interrupts = <0x0 0x12 0x4 0x0 0x13 0x4>;
clocks = <0x9>;
};
spi@01c68000 {
compatible = "allwinner,sun8i-h3-spi";
reg = <0x1c68000 0x1000>;
interrupts = <0x0 0x41 0x4>;
clocks = <0x2 0x1e 0x2 0x52>;
clock-names = "ahb", "mod";
dmas = <0xb 0x17 0xb 0x17>;
dma-names = "rx", "tx";
pinctrl-names = "default";
pinctrl-0 = <0xc>;
resets = <0x2 0xf>;
status = "disabled";
#address-cells = <0x1>;
#size-cells = <0x0>;
};
spi@01c69000 {
compatible = "allwinner,sun8i-h3-spi";
reg = <0x1c69000 0x1000>;
interrupts = <0x0 0x42 0x4>;
clocks = <0x2 0x1f 0x2 0x53>;
clock-names = "ahb", "mod";
dmas = <0xb 0x18 0xb 0x18>;
dma-names = "rx", "tx";
pinctrl-names = "default";
pinctrl-0 = <0xd>;
resets = <0x2 0x10>;
status = "disabled";
#address-cells = <0x1>;
#size-cells = <0x0>;
};
watchdog@01c20ca0 {
compatible = "allwinner,sun6i-a31-wdt";
reg = <0x1c20ca0 0x20>;
interrupts = <0x0 0x19 0x4>;
};
spdif@01c21000 {
#sound-dai-cells = <0x0>;
compatible = "allwinner,sun8i-h3-spdif";
reg = <0x1c21000 0x400>;
interrupts = <0x0 0xc 0x4>;
clocks = <0x2 0x35 0x2 0x57>;
resets = <0x2 0x29>;
clock-names = "apb", "spdif";
dmas = <0xb 0x2>;
dma-names = "tx";
status = "disabled";
};
pwm@01c21400 {
compatible = "allwinner,sun8i-h3-pwm";
reg = <0x1c21400 0x8>;
clocks = <0x9>;
#pwm-cells = <0x3>;
status = "disabled";
};
codec@01c22c00 {
#sound-dai-cells = <0x0>;
compatible = "allwinner,sun8i-h3-codec";
reg = <0x1c22c00 0x400>;
interrupts = <0x0 0x1d 0x4>;
clocks = <0x2 0x34 0x2 0x6d>;
clock-names = "apb", "codec";
resets = <0x2 0x28>;
dmas = <0xb 0xf 0xb 0xf>;
dma-names = "rx", "tx";
allwinner,codec-analog-controls = <0xe>;
status = "disabled";
};
serial@01c28000 {
compatible = "snps,dw-apb-uart";
reg = <0x1c28000 0x400>;
interrupts = <0x0 0x0 0x4>;
reg-shift = <0x2>;
reg-io-width = <0x4>;
clocks = <0x2 0x3e>;
resets = <0x2 0x31>;
dmas = <0xb 0x6 0xb 0x6>;
dma-names = "rx", "tx";
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <0xf>;
};
serial@01c28400 {
compatible = "snps,dw-apb-uart";
reg = <0x1c28400 0x400>;
interrupts = <0x0 0x1 0x4>;
reg-shift = <0x2>;
reg-io-width = <0x4>;
clocks = <0x2 0x3f>;
resets = <0x2 0x32>;
dmas = <0xb 0x7 0xb 0x7>;
dma-names = "rx", "tx";
status = "disabled";
pinctrl-names = "default";
pinctrl-0 = <0x10>;
};
serial@01c28800 {
compatible = "snps,dw-apb-uart";
reg = <0x1c28800 0x400>;
interrupts = <0x0 0x2 0x4>;
reg-shift = <0x2>;
reg-io-width = <0x4>;
clocks = <0x2 0x40>;
resets = <0x2 0x33>;
dmas = <0xb 0x8 0xb 0x8>;
dma-names = "rx", "tx";
status = "disabled";
pinctrl-names = "default";
pinctrl-0 = <0x11>;
};
serial@01c28c00 {
compatible = "snps,dw-apb-uart";
reg = <0x1c28c00 0x400>;
interrupts = <0x0 0x3 0x4>;
reg-shift = <0x2>;
reg-io-width = <0x4>;
clocks = <0x2 0x41>;
resets = <0x2 0x34>;
dmas = <0xb 0x9 0xb 0x9>;
dma-names = "rx", "tx";
status = "disabled";
pinctrl-names = "default";
pinctrl-0 = <0x12>;
};
i2c@01c2ac00 {
compatible = "allwinner,sun8i-h3-i2c";
reg = <0x1c2ac00 0x400>;
interrupts = <0x0 0x6 0x4>;
clocks = <0x2 0x3b>;
resets = <0x2 0x2e>;
pinctrl-names = "default";
pinctrl-0 = <0x13>;
status = "okay";
#address-cells = <0x1>;
#size-cells = <0x0>;
};
i2c@01c2b000 {
compatible = "allwinner,sun8i-h3-i2c";
reg = <0x1c2b000 0x400>;
interrupts = <0x0 0x7 0x4>;
clocks = <0x2 0x3c>;
resets = <0x2 0x2f>;
pinctrl-names = "default";
pinctrl-0 = <0x14>;
status = "okay";
#address-cells = <0x1>;
#size-cells = <0x0>;
};
i2c@01c2b400 {
compatible = "allwinner,sun8i-h3-i2c";
reg = <0x1c2b000 0x400>;
interrupts = <0x0 0x8 0x4>;
clocks = <0x2 0x3d>;
resets = <0x2 0x30>;
pinctrl-names = "default";
pinctrl-0 = <0x15>;
status = "okay";
#address-cells = <0x1>;
#size-cells = <0x0>;
};
interrupt-controller@01c81000 {
compatible = "arm,gic-400";
reg = <0x1c81000 0x1000 0x1c82000 0x2000 0x1c84000
0x2000 0x1c86000 0x2000>;
interrupt-controller;
#interrupt-cells = <0x3>;
interrupts = <0x1 0x9 0xf04>;
linux,phandle = <0x1>;
phandle = <0x1>;
};
rtc@01f00000 {
compatible = "allwinner,sun6i-a31-rtc";
reg = <0x1f00000 0x54>;
interrupts = <0x0 0x28 0x4 0x0 0x29 0x4>;
};
clock@1f01400 {
compatible = "allwinner,sun8i-h3-r-ccu";
reg = <0x1f01400 0x100>;
clocks = <0x9 0xa 0x16 0x2 0x9>;
clock-names = "hosc", "losc", "iosc", "pll-periph";
#clock-cells = <0x1>;
#reset-cells = <0x1>;
linux,phandle = <0x17>;
phandle = <0x17>;
};
codec-analog@01f015c0 {
compatible = "allwinner,sun8i-h3-codec-analog";
reg = <0x1f015c0 0x4>;
linux,phandle = <0xe>;
phandle = <0xe>;
};
ir@01f02000 {
compatible = "allwinner,sun5i-a13-ir";
clocks = <0x17 0x4 0x17 0xb>;
clock-names = "apb", "ir";
resets = <0x17 0x0>;
interrupts = <0x0 0x25 0x4>;
reg = <0x1f02000 0x40>;
status = "disabled";
};
pinctrl@01f02c00 {
compatible = "allwinner,sun8i-h3-r-pinctrl";
reg = <0x1f02c00 0x400>;
interrupts = <0x0 0x2d 0x4>;
clocks = <0x17 0x3 0x9 0xa>;
clock-names = "apb", "hosc", "losc";
gpio-controller;
#gpio-cells = <0x3>;
interrupt-controller;
#interrupt-cells = <0x3>;
linux,phandle = <0x18>;
phandle = <0x18>;
ir@0 {
pins = "PL11";
function = "s_cir_rx";
};
led_pins@0 {
pins = "PL10";
function = "gpio_out";
linux,phandle = <0x1a>;
phandle = <0x1a>;
};
key_pins@0 {
pins = "PL3";
function = "gpio_in";
linux,phandle = <0x1b>;
phandle = <0x1b>;
};
};
};
cpus {
#address-cells = <0x1>;
#size-cells = <0x0>;
cpu@0 {
compatible = "arm,cortex-a7";
device_type = "cpu";
reg = <0x0>;
};
cpu@1 {
compatible = "arm,cortex-a7";
device_type = "cpu";
reg = <0x1>;
};
cpu@2 {
compatible = "arm,cortex-a7";
device_type = "cpu";
reg = <0x2>;
};
cpu@3 {
compatible = "arm,cortex-a7";
device_type = "cpu";
reg = <0x3>;
};
};
timer {
compatible = "arm,armv7-timer";
interrupts = <0x1 0xd 0xf08 0x1 0xe 0xf08 0x1 0xb 0xf08 0x1 0xa
0xf08>;
};
ahci-5v {
compatible = "regulator-fixed";
regulator-name = "ahci-5v";
regulator-min-microvolt = <0x4c4b40>;
regulator-max-microvolt = <0x4c4b40>;
regulator-boot-on;
enable-active-high;
gpio = <0x6 0x1 0x8 0x0>;
status = "disabled";
};
usb0-vbus {
compatible = "regulator-fixed";
regulator-name = "usb0-vbus";
regulator-min-microvolt = <0x4c4b40>;
regulator-max-microvolt = <0x4c4b40>;
enable-active-high;
gpio = <0x18 0x0 0x2 0x0>;
status = "okay";
linux,phandle = <0x8>;
phandle = <0x8>;
};
usb1-vbus {
compatible = "regulator-fixed";
regulator-name = "usb1-vbus";
regulator-min-microvolt = <0x4c4b40>;
regulator-max-microvolt = <0x4c4b40>;
regulator-boot-on;
enable-active-high;
gpio = <0x6 0x7 0x6 0x0>;
status = "disabled";
};
usb2-vbus {
compatible = "regulator-fixed";
regulator-name = "usb2-vbus";
regulator-min-microvolt = <0x4c4b40>;
regulator-max-microvolt = <0x4c4b40>;
regulator-boot-on;
enable-active-high;
gpio = <0x6 0x7 0x3 0x0>;
status = "disabled";
};
vcc3v0 {
compatible = "regulator-fixed";
regulator-name = "vcc3v0";
regulator-min-microvolt = <0x2dc6c0>;
regulator-max-microvolt = <0x2dc6c0>;
};
vcc3v3 {
compatible = "regulator-fixed";
regulator-name = "vcc3v3";
regulator-min-microvolt = <0x325aa0>;
regulator-max-microvolt = <0x325aa0>;
linux,phandle = <0x5>;
phandle = <0x5>;
};
vcc5v0 {
compatible = "regulator-fixed";
regulator-name = "vcc5v0";
regulator-min-microvolt = <0x4c4b40>;
regulator-max-microvolt = <0x4c4b40>;
};
aliases {
serial0 = "/soc/serial@01c28000";
};
chosen {
stdout-path = "serial0:115200n8";
};
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <0x19 0x1a>;
pwr_led {
label = "orangepi:green:pwr";
gpios = <0x18 0x0 0xa 0x0>;
default-state = "on";
};
status_led {
label = "orangepi:red:status";
gpios = <0x6 0x0 0xf 0x0>;
};
};
r_gpio_keys {
compatible = "gpio-keys";
pinctrl-names = "default";
pinctrl-0 = <0x1b>;
sw4 {
label = "sw4";
linux,code = <0x100>;
gpios = <0x18 0x0 0x3 0x1>;
};
};
};