Jump to content

Recommended Posts

Posted (edited)

Hi Mark

 

Modify your /boot/dtb/allwinner/overlay/openvfd.dts .

 

You need to change the display-type. I can't really tell by the image you took which chip the display is using. If you can check again. It's the chip beside the LED display.

https://github.com/arthur-liberman/vfd-configurations/?tab=readme-ov-file#display-type

 

Try this see what happens... ( ID=01, A display like on the Sunvell T95m. It is similar to T95U, but the icons are positioned differently, and the digits are "upside down".)

 

openvfd_display_type = <0x01000000>;

Edited by Nick A
Posted (edited)
20 hours ago, Nick A said:

openvfd_display_type = <0x01000000>;

 Hi Nick,

 

that didn't work but thanks for the suggestion.

 

I now have a clock of sorts just showing the basic 12:15 format with a flashing cursor but I do not get the WIFI, ETHERNET, OR BOOT

 

Where I was going wrong was that I should have recompiled the dts file after making any changes and then rebooting the box

 

/boot/dtb/allwinner/overlay/openvfd.dts

 

recompile using this command

armbian-add-overlay /boot/dtb/allwinner/overlay/openvfd.dts

 and then reboot

 

My contents of 

/boot/dtb/allwinner/overlay/openvfd.dts

 

/dts-v1/;
/plugin/;
/ {
   fragment@0 {
      target-path = "/";
      __overlay__ {
         openvfd {
                compatible = "open,vfd";
                dev_name = "openvfd";
                openvfd_gpio_clk = <&pio 8 11 0>;
                openvfd_gpio_dat = <&pio 8 12 0>;
                vfd_gpio_chip_name = "0300b000.pinctrl";
                openvfd_chars = [03 01 02 03 04];
                openvfd_dot_bits = [00 01 02 03 04 05 06];
                openvfd_display_type = <0x03000001>;
                status = "okay";
         };
      };
   };
};

 

I don't understand the logic of :

openvfd_Characters =

openvfd_dot_bits =

openvdf_display type =

 

It seems to have a mind of its own,

 

I think this gives me a display.type = 1, display.controller = 3

 

openvfd_display_type = <0x03000001>;

 

 

I can't get my head around the logic

 

#chars:
# < DHHMM > Order of display chars (D=dots, represented by a single char)

vfd_chars='0,4,3,2,1'
  
#dot_bits:
# Order of dot bits. Typical configurations:
# Display Type 0, 1 usually has Alarm, USB, Play, Pause, Col, Ethernet, Wifi dots
# Alarm = 0, USB = 1, Play = 2, Pause = 3, Col = 4, Eth = 5, Wifi = 6
# Display Type 2 usually has APPS, USB, SETUP, CARD, Col, HDMI, CVBS dots
# APPS = 0, USB = 1, SETUP = 2, CARD = 3, Col = 4, HDMI = 5, CVBS = 6
# Display Type 3 Power, LAN, Col, Low Wifi, High Wifi
# N/A = 0, N/A = 1, Power = 2, LAN = 3, Col = 4, Low Wifi = 5, High Wifi = 6

vfd_dot_bits='0,1,2,3,4,5,6'

#display_type:
# [0] - Display type.
# [1] - Reserved - must be 0..
# [2] - Flags. (bit 0 = '1' - Common Anode display)
# [3] - Controller.

vfd_display_type='0x01,0x00,0x00,0x03'

 

I assume the other characters can be shown but I cannot work that out at the moment - and I am assuming the word "Boot" is loaded to the screen - How it achieves that I don't know - I would have thought that would have been contrrolled by the driver.

 

I may be out on a limb on that theory.

 

Ah well a little more progress today...

Edited by Mark Waples
Posted (edited)

Can you look for the display controller chip on your board. This will at least give us a starting point. Then we can find other boards with a similar chip. Also, a picture of your front display would help.

 

This README describes the values better.

 https://github.com/arthur-liberman/vfd-configurations/blob/master/README.md

 

I forgot about the command armbian-add-overlay. When I was playing with openvfd I didn't use an overlay file. I added the openvfd node directly to my boards dts. I didn't need to make any changes because I used the original openvfd settings.   

Edited by Nick A
Posted
12 hours ago, Nick A said:

Can you look for the display controller chip on your board. This will at least give us a starting point. Then we can find other boards with a similar chip. Also, a picture of your front display would help.

 

This README describes the values better.

 https://github.com/arthur-liberman/vfd-configurations/blob/master/README.md

 

I forgot about the command armbian-add-overlay. When I was playing with openvfd I didn't use an overlay file. I added the openvfd node directly to my boards dts. I didn't need to make any changes because I used the original openvfd settings.   

 

 

Hi Nick,

 

thank you for the reply.

 

The LED driver chip is a AIP650E0 and here is the LED Display - wifi/network - clock - USB

 

Display.thumb.jpg.dddfd70043d6083f40dcab1eab2fe805.jpg

Posted (edited)

I'm pretty sure your controller is FD650 ID=3. 

 

I found this forum thread. Someone had a similar LED Display like yours. HAV's posted a few pictures of his display. I don't think he had PLAY/PAUSE icons because there's not enough room on his display. "The only icon that doesn’t work now is the play/pause one. I also can’t test the wifi because it doesn’t work." 

https://discourse.coreelec.org/t/how-to-configure-vfd/427/924

 

If we still have issues after playing around with the dot_bits. We might need to add another Display Type with only WIFI, Ethernet, Col, USB icons.

https://github.com/arthur-liberman/linux_openvfd/blob/master/driver/controllers/fd650.c

static void fd650_set_icon(const char *name, unsigned char state)
{
	struct vfd_dtb_config *dtb = &dev->dtb_active;
	switch (dtb->display.type) {
	case DISPLAY_TYPE_5D_7S_NORMAL:
	case DISPLAY_TYPE_5D_7S_T95:
	case DISPLAY_TYPE_5D_7S_G9SX:
		if (strncmp(name,"alarm",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_ALARM]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_ALARM]);
		} else if (strncmp(name,"usb",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_USB]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_USB]);
		} else if (strncmp(name,"play",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_PLAY]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_PLAY]);
		} else if (strncmp(name,"pause",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_PAUSE]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_PAUSE]);
		} else if (strncmp(name,"colon",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_SEC]);
		} else if (strncmp(name,"eth",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_ETH]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_ETH]);
		} else if (strncmp(name,"wifi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_WIFI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_WIFI]);
		}
		break;
	case DISPLAY_TYPE_5D_7S_X92:
		if (strncmp(name,"apps",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_APPS]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_APPS]);
		} else if (strncmp(name,"setup",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_SETUP]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_SETUP]);
		} else if (strncmp(name,"usb",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_USB]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_USB]);
		} else if (strncmp(name,"sd",2) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_CARD]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_CARD]);
		} else if (strncmp(name,"colon",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_SEC]);
		} else if (strncmp(name,"hdmi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_HDMI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_HDMI]);
		} else if (strncmp(name,"cvbs",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_CVBS]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_CVBS]);
		}
		break;
	case DISPLAY_TYPE_5D_7S_ABOX:
		if (strncmp(name,"power",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_POWER]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_POWER]);
		} else if (strncmp(name,"eth",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_LAN]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_LAN]);
		} else if (strncmp(name,"colon",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_SEC]);
		} else if (strncmp(name,"wifi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_WIFIHI] | dtb->led_dots[LED_DOT3_WIFILO]) : (dev->status_led_mask & ~(dtb->led_dots[LED_DOT3_WIFIHI] | dtb->led_dots[LED_DOT3_WIFILO]));
		}
		break;
	case DISPLAY_TYPE_5D_X96_X9:
		if (strncmp(name,"apps",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_APPS]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT5_APPS]);
		} else if (strncmp(name,"usb",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_USB]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT5_USB]);
		} else if (strncmp(name,"sd",2) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_CARD]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT5_CARD]);
		} else if (strncmp(name,"colon",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT5_SEC]);
		} else if (strncmp(name,"eth",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_ETH]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT5_ETH]);
		} else if (strncmp(name,"wifi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT5_WIFIHI] | dtb->led_dots[LED_DOT5_WIFILO]) : (dev->status_led_mask & ~(dtb->led_dots[LED_DOT5_WIFIHI] | dtb->led_dots[LED_DOT5_WIFILO]));
		}
		break;
	case DISPLAY_TYPE_5D_7S_M9_PRO:
		if (strncmp(name,"b-t",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_BT]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_BT]);
		} else if (strncmp(name,"eth",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_ETH]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_ETH]);
		} else if (strncmp(name,"wifi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_WIFI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_WIFI]);
		} else if (strncmp(name,"spdif",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_SPDIF]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_SPDIF]);
		} else if (strncmp(name,"colon",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_SEC]);
		} else if (strncmp(name,"hdmi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_HDMI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_HDMI]);
		} else if (strncmp(name,"cvbs",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_AV]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_AV]);
		}
		break;
	default:
		if (strncmp(name,"colon",5) == 0)
			dev->status_led_mask = state ? (dev->status_led_mask | ledDots[LED_DOT_SEC]) : (dev->status_led_mask & ~ledDots[LED_DOT_SEC]);
		break;
	}
}

 

https://github.com/arthur-liberman/linux_openvfd/blob/master/driver/openvfd_drv.h

enum {
	DISPLAY_TYPE_5D_7S_NORMAL,	// T95U
	DISPLAY_TYPE_5D_7S_T95,		// T95K is different.
	DISPLAY_TYPE_5D_7S_X92,
	DISPLAY_TYPE_5D_7S_ABOX,
	DISPLAY_TYPE_FD620_REF,
	DISPLAY_TYPE_4D_7S_COL,
	DISPLAY_TYPE_5D_7S_M9_PRO,
	DISPLAY_TYPE_5D_7S_G9SX,
	DISPLAY_TYPE_4D_7S_FREESATGTC,
	DISPLAY_TYPE_5D_7S_TAP1,
	DISPLAY_TYPE_5D_X96_X9,
	DISPLAY_TYPE_MAX,
};

enum {
	LED_DOT1_ALARM,
	LED_DOT1_USB,
	LED_DOT1_PLAY,
	LED_DOT1_PAUSE,
	LED_DOT1_SEC,
	LED_DOT1_ETH,
	LED_DOT1_WIFI,
	LED_DOT1_MAX
};

enum {
	LED_DOT2_APPS,
	LED_DOT2_SETUP,
	LED_DOT2_USB,
	LED_DOT2_CARD,
	LED_DOT2_SEC,
	LED_DOT2_HDMI,
	LED_DOT2_CVBS,
	LED_DOT2_MAX
};

enum {
	LED_DOT3_UNUSED1,
	LED_DOT3_UNUSED2,
	LED_DOT3_POWER,
	LED_DOT3_LAN,
	LED_DOT3_SEC,
	LED_DOT3_WIFIHI,
	LED_DOT3_WIFILO,
	LED_DOT3_MAX
};

enum {
	LED_DOT4_BT,
	LED_DOT4_ETH,
	LED_DOT4_WIFI,
	LED_DOT4_SPDIF,
	LED_DOT4_SEC,
	LED_DOT4_HDMI,
	LED_DOT4_AV,
	LED_DOT4_MAX
};

enum {
	LED_DOT5_APPS,
	LED_DOT5_ETH,
	LED_DOT5_USB,
	LED_DOT5_CARD,
	LED_DOT5_SEC,
	LED_DOT5_WIFIHI,
	LED_DOT5_WIFILO,
	LED_DOT5_MAX
};

 

Edited by Nick A
Posted (edited)
18 hours ago, Nick A said:

If we still have issues after playing around with the dot_bits. We might need to add another Display Type with only WIFI, Ethernet, Col, USB icons.

 

Hi NIck,

 

I have tried all manner of combinations of dot-bits - to the point I must have re-booted about 100 times!!! :D

 

I'm pretty sure your controller is FD650 ID=3. 

 

I think you are correct

 

With this thread below I think they have updated their own resources but not fed that back to the original github for Openvfd https://github.com/arthur-liberman/linux_openvfd

 

I found this forum thread. Someone had a similar LED Display like yours. HAV's posted a few pictures of his display. I don't think he had PLAY/PAUSE icons because there's not enough room on his display. "The only icon that doesn’t work now is the play/pause one. I also can’t test the wifi because it doesn’t work." 

https://discourse.coreelec.org/t/how-to-configure-vfd/427/924

 

 

I have contacted Arthur-liberman for his comments:

 

https://github.com/arthur-liberman/vfd-configurations/issues/20

 

let's see what comes back and if needs be I am prepared to have a go at adding a new type of LED.

 

I guess it will have to be recompiled after changes are made to the source code.

 

Kind regards,

 

Mark

Edited by Mark Waples
Posted (edited)

I found another thread 

https://discourse.coreelec.org/t/how-to-configure-vfd/427/726

 

If you read the reply here. 

Quote

Thanks. I’ll have to think what can be done to enable the icons, it’s going to require driver changes. So it may take time.

https://discourse.coreelec.org/t/how-to-configure-vfd/427/732

 

 

Try these settings for chars and dot_bits.. This was the config they used. They didn't give us any details on the changes they made to the driver sources. Maybe the current driver already has the changes? We could message TheCoolest and ask him.

https://discourse.coreelec.org/uploads/short-url/6Lof0boBxj2HuBDGQ32mKN5Rka7.conf

# This file must be renamed to vfd.conf and placed in the /storage/.config/ folder.
#
# Tanix TX3 Mini - S905L configuration
#--------------------
#gpio_xxx:
# [0] 0 = &gpio, 1 = &gpio_ao.
# [1] pin number - https://github.com/openSUSE/kernel/blob/master/include/dt-bindings/gpio/meson-gxl-gpio.h
# [0] Reserved - must be 0.

vfd_gpio_clk='1,9,0'
vfd_gpio_dat='1,6,0'
vfd_gpio_stb='0,0,0xFF'

#chars:
# < DHHMM > Order of display chars (D=dots, represented by a single char)

vfd_chars='2,4,3,2,1'

#dot_bits:
# Order of dot bits. Typical configurations:
# Display Type 0, 1 usually has Alarm, USB, Play, Pause, Col, Ethernet, Wifi dots
# Alarm = 0, USB = 1, Play = 2, Pause = 3, Col = 4, Eth = 5, Wifi = 6
# Display Type 2 usually has APPS, USB, SETUP, CARD, Col, HDMI, CVBS dots
# APPS = 0, USB = 1, SETUP = 2, CARD = 3, Col = 4, HDMI = 5, CVBS = 6
# Display Type 3 Power, LAN, Col, Low Wifi, High Wifi
# N/A = 0, N/A = 1, Power = 2, LAN = 3, Col = 4, Low Wifi = 5, High Wifi = 6

# Position:   0 1 2 3 4 5 6
vfd_dot_bits='0,1,4,5,6,2,3'

#display_type:
# [0] - Display type.
# [1] - Reserved - must be 0..
# [2] - Flags. (bit 0 = '1' - Common Anode display)
# [3] - Controller.

vfd_display_type='0x01,0x00,0x00,0x03'

 

Edited by Nick A
Posted (edited)

Hi Nick,

 

that didn't work but thanks for the suggestion.

 

I think Coolest is the same person as arthur or is using the same url?

 

The Coreelc plugin is written in Python I think

 

I have attached a copy that I grabbed from the git

 

 

 

 

service.openvfd-1.0.6.tar

Edited by Mark Waples
Posted

Hi Nick, sorry for joining the conversation with a kinda unrelated topic,

 

I tried your image (24.11.0) in the transpeed h618 tv box and it worked without any issue however wifi doesnt seem to work.

 

I have to say that i havent tried much other than trying the desktop and server images, installing the network manager, etc.

 

Is there anything in particular that i need to do in order to get wifi working?, thanks in advance.

Posted (edited)

Hi AlexYMo99

Your transpeed box has a different wifi chip. Maybe this will help. Check your dmesg it will tell you which firmware you need. It's probably already included in armbian. Just needs a name change.

 

 

Edited by Nick A
Posted

Hi Nick

It just so happened that i stumbled uppon a comment of yours mentioning that, so i did exactly that (the only difference being that i did it by renaming and copying the files from the Libreelec github instead of just renaming them) and it worked!.

 

I was even able to flash it to the EMMC with no issues at the moment, the only thing is that the tv box seems to power on randomly after a couple of secconds or gives power to the usb after a while, but i thing that is not related to armbian.

 

Im planning to use it for klipper so it was amazing being able to make it work, you are amazing, really appreciate you man!

Posted (edited)

HI Nick

 

23 hours ago, Nick A said:

Hi Mark

 

It looks like that python script might be using these commands. Try these commands maybe they'll work for you. 

 

https://github.com/arthur-liberman/linux_openvfd/blob/9264588ba27a964a1e56346202901dd17f9e133d/led_control.txt

 

I think that when I compile linux_openvfd it performs a cleanup and removes the *ko files

 

clean:                    
	        rm -rf  *.o *.ko .tmp_versions *.mod.c modules.order  Module.symvers ssd253x-ts.* 

 

 

The instructions state:

 

Execution instructions:
insmod openvfd.ko
./OpenVFDService &	(run OpenVFDService Daemon to show time)
./OpenVFDService -t &	(run OpenVFDService Daemon in test mode)

Turn led indicators on/off:

1. Alarm led:
echo alarm > /sys/class/leds/openvfd/led_on
echo alarm > /sys/class/leds/openvfd/led_off

2. WiFi led:
echo wifi > /sys/class/leds/openvfd/led_on
echo wifi > /sys/class/leds/openvfd/led_off

3. Ethernet led:
echo eth > /sys/class/leds/openvfd/led_on
echo eth > /sys/class/leds/openvfd/led_off

4. Pause led:
echo pause > /sys/class/leds/openvfd/led_on
echo pause > /sys/class/leds/openvfd/led_off

5. Play led:
echo play > /sys/class/leds/openvfd/led_on
echo play > /sys/class/leds/openvfd/led_off

6. USB led:
echo usb > /sys/class/leds/openvfd/led_on
echo usb > /sys/class/leds/openvfd/led_off

7. Apps led:
echo apps > /sys/class/leds/openvfd/led_on
echo apps > /sys/class/leds/openvfd/led_off

8. Setup led:
echo setup > /sys/class/leds/openvfd/led_on
echo setup > /sys/class/leds/openvfd/led_off

9. Card led:
echo sd > /sys/class/leds/openvfd/led_on
echo sd > /sys/class/leds/openvfd/led_off

10. HDMI led:
echo hdmi > /sys/class/leds/openvfd/led_on
echo hdmi > /sys/class/leds/openvfd/led_off

11. CVBS led:
echo cvbs > /sys/class/leds/openvfd/led_on
echo cvbs > /sys/class/leds/openvfd/led_off

Note: Some displays have indicators 1 - 6, and others 6 - 11.
There is no overlap, and you can't trigger an indicator that
does not exist on your display type.

 

If I try and install the module into the kernal as per instructions as Insmod openvfd.ko

 

root@transpeed-8k618-t:~# insmod openvfd.ko
insmod: ERROR: could not load module openvfd.ko: No such file or directory

 

And the useage is vague?

 

I guess each icon is a number - but how you would call that out, unless it's controlled by the dts configuration?

 

Kind regards,

 

Mark

Edited by Mark Waples
Posted (edited)

 

These are the instructions MMorales posted in the H618 thread. If your LED display is on then the module is already installed. This was done when you ran the commands "make modules_install" and "modprobe openvfd". I don't see "make clean".  You only use that command if you plan on editing the sources and need to compile a new driver.

cp openvfd.dts /boot/dtb/allwinner/overlay/                      
armbian-add-overlay /boot/dtb/allwinner/overlay/openvfd.dts
reboot

ln -sf /boot/System.map-$(uname -r) /lib/modules/$(uname -r)/build/System.map
cd cd /linux_openvfd/driver
make -j 4
depmod -a
make modules_install
modprobe openvfd
cd ..
chmod +x OpenVFDService
cp OpenVFDService /usr/sbin/
cp openvfd.service /etc/systemd/system/openvfd.service
#apt install python3-psutil
systemctl enable openvfd.service
systemctl start openvfd.service 

 

Type this command to list the modules already installed and running on your system.

lsmod

 

If you don't see openvfd in the list. Run modprobe without the .ko

modprobe openvfd

 

Check the directory /sys/class/leds/openvfd/ see if it exits. 

ls /sys/class/leds/openvfd/

 

You can skip these lines. We are more interested in the LED Icons.

insmod openvfd.ko

./OpenVFDService & (run OpenVFDService Daemon to show time)

./OpenVFDService -t & (run OpenVFDService Daemon in test mode)

 

I haven't looked at the openvfd driver sources much. I guess it's not the job of the driver to check the status of your network, usb etc...  I believe the openvfd.service script sets the icons on or off manually using these commands. This is why you don't see any changes after you update your dtsThe python script you sent me is based on xbmc/kodi scripts. I don't understand it too much. But I found this in the script. 

		self._vfdon = '/sys/class/leds/openvfd/led_on'
		self._vfdoff = '/sys/class/leds/openvfd/led_off'

 

The openvfd driver sets the on/off state manually using command for example alarm icon.

echo alarm > /sys/class/leds/openvfd/led_on

 

In this function fd650_set_icon(const char *name, unsigned char state)

- name is the string we passed to the function (in this example it's "alarm") and the code inside compares name using the strncmp(name,"alarm",5) function. (name = "alarm" and 5 stands for the length of the string). The strncmp returns 0 if the string compare is correct.

- dtb->led_dots[LED_DOT1_ALARM] is set in your dts. led_dots[] is an array of numbers. LED_DOT1_ALARM is the first position in the array. Alarm in the array is normally set to 0 but some displays are different. So we can change that value in the dts.  

- This code turns the LED Icon on or off.  "dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_ALARM]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_ALARM]);"

 

Quote

I guess each icon is a number - but how you would call that out, unless it's controlled by the dts configuration?

		if (strncmp(name,"alarm",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_ALARM]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_ALARM]);
		} else if (strncmp(name,"usb",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_USB]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_USB]);
		} else if (strncmp(name,"play",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_PLAY]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_PLAY]);
		} else if (strncmp(name,"pause",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_PAUSE]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_PAUSE]);
		} else if (strncmp(name,"colon",5) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_SEC]);
		} else if (strncmp(name,"eth",3) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_ETH]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_ETH]);
		} else if (strncmp(name,"wifi",4) == 0) {
			dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_WIFI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_WIFI]);
		}
		break;

 

I don't think we need to make any changes to the driver. We need to figure out the correct number for each icon and test it by manually setting the icon on or off. Then we need to figure out a way to make our own service script to set these icons on or off depending on their state.

Edited by Nick A
Posted (edited)

Hi,

 

Nick that's great information - thank you!

 

It all checks out.

 

The only command that worked was:

 

echo alarm > /sys/class/leds/openvfd/led_on

 

This turned on the wifi-eth and usb leds all together and not blinking.

 

I went to see what was in the device tree but the new armbian-configNG does not have the DTS editor available as in the old config tool.

 

I don't know if there is a way of reverting back to the old tool (I froze Kernal Updates in the old tool) so it's very useful and I don't know why it has installed the new one as it does not have many features like the old config tool.

 

I hate when things are forced upon you.

 

So am I going to be forced to install DTC to decompile the Device Tree (DTB)?

 

------------------------------------------------------------------------
CONVERT dtb to dts
------------------------------------------------------------------------
dtc -I dtb -O dts /boot/dtb/allwinner/sun50i-h618-transpeed-8k618-t.dtb -o /boot/dtb/allwinner/sun50i-h618-transpeed-8k618-t.dts

------------------------------------------------------------------------
EDIT dts
------------------------------------------------------------------------
nano /boot/dtb/allwinner/sun50i-h618-transpeed-8k618-t.dts

------------------------------------------------------------------------
CONVERT (BACK) dts to dtb
------------------------------------------------------------------------			
dtc -I dts -O dtb /boot/dtb/allwinner/sun50i-h618-transpeed-8k618-t.dts -o /boot/dtb/allwinner/sun50i-h618-transpeed-8k618-t.dtb

 

 

I assume my tree is called sun50i-h618-transpeed-8k618-t.dtb

 

and here is the contents of that tree

 

/dts-v1/;

/ {
        interrupt-parent = <0x01>;
        #address-cells = <0x02>;
        #size-cells = <0x02>;
        model = "Transpeed 8K618-T";
        compatible = "transpeed,8k618-t\0allwinner,sun50i-h618";

        cpus {
                #address-cells = <0x01>;
                #size-cells = <0x00>;

                cpu@0 {
                        compatible = "arm,cortex-a53";
                        device_type = "cpu";
                        reg = <0x00>;
                        enable-method = "psci";
                        clocks = <0x02 0x15>;
                        #cooling-cells = <0x02>;
                        operating-points-v2 = <0x03>;
                        cpu-supply = <0x04>;
                        status = "okay";
                        phandle = <0x06>;
                };

                cpu@1 {
                        compatible = "arm,cortex-a53";
                        device_type = "cpu";
                        reg = <0x01>;
                        enable-method = "psci";
                        clocks = <0x02 0x15>;
                        #cooling-cells = <0x02>;
                        operating-points-v2 = <0x03>;
                        phandle = <0x07>;
                };

                cpu@2 {
                        compatible = "arm,cortex-a53";
                        device_type = "cpu";
                        reg = <0x02>;
                        enable-method = "psci";
                        clocks = <0x02 0x15>;
                        #cooling-cells = <0x02>;
                        operating-points-v2 = <0x03>;
                        phandle = <0x08>;
                };

                cpu@3 {
                        compatible = "arm,cortex-a53";
                        device_type = "cpu";
                        reg = <0x03>;
                        enable-method = "psci";
                        clocks = <0x02 0x15>;
                        #cooling-cells = <0x02>;
                        operating-points-v2 = <0x03>;
                        phandle = <0x09>;
                };
        };

        display-engine {
                compatible = "allwinner,sun50i-h6-display-engine";
                allwinner,pipelines = <0x05>;
                status = "okay";
                phandle = <0x3b>;
        };

        reserved-memory {
                #address-cells = <0x02>;
                #size-cells = <0x02>;
                ranges;

                secmon@40000000 {
                        reg = <0x00 0x40000000 0x00 0x80000>;
                        no-map;
                };
        };

        osc24M-clk {
                #clock-cells = <0x00>;
                compatible = "fixed-clock";
                clock-frequency = <0x16e3600>;
                clock-output-names = "osc24M";
                phandle = <0x0f>;
        };

        pmu {
                compatible = "arm,cortex-a53-pmu";
                interrupts = <0x00 0x8c 0x04 0x00 0x8d 0x04 0x00 0x8e 0x04 0x00 0x8f 0x04>;
                interrupt-affinity = <0x06 0x07 0x08 0x09>;
        };

        psci {
                compatible = "arm,psci-0.2";
                method = "smc";
        };

        timer {
                compatible = "arm,armv8-timer";
                arm,no-tick-in-suspend;
                interrupts = <0x01 0x0d 0xf04 0x01 0x0e 0xf04 0x01 0x0b 0xf04 0x01 0x0a 0xf04>;
        };

        soc {
                compatible = "simple-bus";
                #address-cells = <0x01>;
                #size-cells = <0x01>;
                ranges = <0x00 0x00 0x00 0x40000000>;

                bus@1000000 {
                        compatible = "allwinner,sun50i-h616-de33\0allwinner,sun50i-a64-de2";
                        reg = <0x1000000 0x400000>;
                        allwinner,sram = <0x0a 0x01>;
                        #address-cells = <0x01>;
                        #size-cells = <0x01>;
                        ranges = <0x00 0x1000000 0x400000>;

                        clock@8000 {
                                compatible = "allwinner,sun50i-h616-de33-clk";
                                reg = <0x8000 0x100>;
                                clocks = <0x02 0x1d 0x02 0x1e>;
                                clock-names = "mod\0bus";
                                resets = <0x02 0x01>;
                                #clock-cells = <0x01>;
                                #reset-cells = <0x01>;
                                phandle = <0x0b>;
                        };

                        mixer@100000 {
                                compatible = "allwinner,sun50i-h616-de33-mixer-0";
                                reg = <0x100000 0x100000 0x8100 0x40 0x280000 0x20000>;
                                clocks = <0x0b 0x00 0x0b 0x06>;
                                clock-names = "bus\0mod";
                                resets = <0x0b 0x00>;
                                phandle = <0x05>;

                                ports {
                                        #address-cells = <0x01>;
                                        #size-cells = <0x00>;

                                        port@1 {
                                                reg = <0x01>;
                                                phandle = <0x3c>;

                                                endpoint {
                                                        remote-endpoint = <0x0c>;
                                                        phandle = <0x2c>;
                                                };
                                        };
                                };
                        };
                };

                gpu@1800000 {
                        compatible = "allwinner,sun50i-h616-mali\0arm,mali-bifrost";
                        reg = <0x1800000 0x40000>;
                        interrupts = <0x00 0x5f 0x04 0x00 0x60 0x04 0x00 0x61 0x04>;
                        interrupt-names = "job\0mmu\0gpu";
                        clocks = <0x02 0x23 0x02 0x24>;
                        clock-names = "core\0bus";
                        resets = <0x02 0x03>;
                        status = "okay";
                        mali-supply = <0x0d>;
                        phandle = <0x3d>;
                };

                deinterlace@1420000 {
                        compatible = "allwinner,sun50i-h6-deinterlace";
                        reg = <0x1420000 0x40000>;
                        clocks = <0x02 0x20 0x02 0x1f 0x02 0x33>;
                        clock-names = "bus\0mod\0ram";
                        resets = <0x02 0x02>;
                        interrupts = <0x00 0x59 0x04>;
                        phandle = <0x3e>;
                };

                video-codec@1c0e000 {
                        compatible = "allwinner,sun50i-h616-video-engine";
                        reg = <0x1c0e000 0x2000>;
                        clocks = <0x02 0x29 0x02 0x28 0x02 0x33>;
                        clock-names = "ahb\0mod\0ram";
                        resets = <0x02 0x05>;
                        interrupts = <0x00 0x5d 0x04>;
                        allwinner,sram = <0x0e 0x01>;
                };

                syscon@3000000 {
                        compatible = "allwinner,sun50i-h616-system-control";
                        reg = <0x3000000 0x1000>;
                        #address-cells = <0x01>;
                        #size-cells = <0x01>;
                        ranges;
                        phandle = <0x23>;

                        sram@100000 {
                                compatible = "mmio-sram";
                                reg = <0x100000 0x18000>;
                                #address-cells = <0x01>;
                                #size-cells = <0x01>;
                                ranges = <0x00 0x100000 0x18000>;
                                phandle = <0x3f>;

                                scpi-sram@17c00 {
                                        compatible = "arm,scp-shmem";
                                        reg = <0x17c00 0x200>;
                                        phandle = <0x40>;
                                };
                        };

                        sram@28000 {
                                compatible = "mmio-sram";
                                reg = <0x28000 0x30000>;
                                #address-cells = <0x01>;
                                #size-cells = <0x01>;
                                ranges = <0x00 0x28000 0x30000>;
                                phandle = <0x41>;

                                sram-section@0 {
                                        compatible = "allwinner,sun50i-h616-sram-c\0allwinner,sun50i-a64-sram-c";
                                        reg = <0x00 0x1e000>;
                                        phandle = <0x0a>;
                                };
                        };

                        sram@1a00000 {
                                compatible = "mmio-sram";
                                reg = <0x1a00000 0x200000>;
                                #address-cells = <0x01>;
                                #size-cells = <0x01>;
                                ranges = <0x00 0x1a00000 0x200000>;
                                phandle = <0x42>;

                                sram-section@0 {
                                        compatible = "allwinner,sun50i-h616-sram-c1";
                                        reg = <0x00 0x200000>;
                                        phandle = <0x0e>;
                                };
                        };
                };

                clock@3001000 {
                        compatible = "allwinner,sun50i-h616-ccu";
                        reg = <0x3001000 0x1000>;
                        clocks = <0x0f 0x10 0x00 0x10 0x02>;
                        clock-names = "hosc\0losc\0iosc";
                        #clock-cells = <0x01>;
                        #reset-cells = <0x01>;
                        phandle = <0x02>;
                };

                dma-controller@3002000 {
                        compatible = "allwinner,sun50i-h616-dma\0allwinner,sun50i-a100-dma";
                        reg = <0x3002000 0x1000>;
                        interrupts = <0x00 0x2a 0x04>;
                        clocks = <0x02 0x2a 0x02 0x32>;
                        clock-names = "bus\0mbus";
                        dma-channels = <0x10>;
                        dma-requests = <0x31>;
                        resets = <0x02 0x06>;
                        #dma-cells = <0x01>;
                        phandle = <0x18>;
                };

                efuse@3006000 {
                        compatible = "allwinner,sun50i-h616-sid\0allwinner,sun50i-a64-sid";
                        reg = <0x3006000 0x1000>;
                        #address-cells = <0x01>;
                        #size-cells = <0x01>;
                        phandle = <0x43>;

                        thermal-sensor-calibration@14 {
                                reg = <0x14 0x08>;
                                phandle = <0x25>;
                        };

                        cpu-speed-grade@0 {
                                reg = <0x00 0x02>;
                                phandle = <0x38>;
                        };
                };

                watchdog@30090a0 {
                        compatible = "allwinner,sun50i-h616-wdt\0allwinner,sun6i-a31-wdt";
                        reg = <0x30090a0 0x20>;
                        interrupts = <0x00 0x32 0x04>;
                        clocks = <0x0f>;
                        phandle = <0x44>;
                };

                pinctrl@300b000 {
                        compatible = "allwinner,sun50i-h616-pinctrl";
                        reg = <0x300b000 0x400>;
                        interrupts = <0x00 0x33 0x04 0x00 0x34 0x04 0x00 0x35 0x04 0x00 0x2b 0x04 0x00 0x36 0x04 0x00 0x37 0x04 0x00 0x38 0x04 0x00 0x39 0x04>;
                        clocks = <0x02 0x1a 0x0f 0x10 0x00>;
                        clock-names = "apb\0hosc\0losc";
                        gpio-controller;
                        #gpio-cells = <0x03>;
                        interrupt-controller;
                        #interrupt-cells = <0x03>;
                        vcc-pc-supply = <0x11>;
                        vcc-pg-supply = <0x12>;
                        vcc-ph-supply = <0x12>;
                        vcc-pi-supply = <0x12>;
                        phandle = <0x14>;

                        rgmii-pins {
                                pins = "PI0\0PI1\0PI2\0PI3\0PI4\0PI5\0PI7\0PI8\0PI9\0PI10\0PI11\0PI12\0PI13\0PI14\0PI15\0PI16";
                                function = "emac0";
                                drive-strength = <0x28>;
                                phandle = <0x45>;
                        };

                        i2c0-pins {
                                pins = "PI5\0PI6";
                                function = "i2c0";
                                phandle = <0x20>;
                        };

                        i2c2-ph-pins {
                                pins = "PH2\0PH3";
                                function = "i2c2";
                                phandle = <0x46>;
                        };

                        i2c3-ph-pins {
                                pins = "PH4\0PH5";
                                function = "i2c3";
                                phandle = <0x47>;
                        };

                        i2c4-ph-pins {
                                pins = "PH6\0PH7";
                                function = "i2c4";
                                phandle = <0x48>;
                        };

                        i2c3-pg-pins {
                                pins = "PG17\0PG18";
                                function = "i2c3";
                                phandle = <0x49>;
                        };

                        i2c4-pg-pins {
                                pins = "PG15\0PG16";
                                function = "i2c4";
                                phandle = <0x4a>;
                        };

                        ir-rx-pin {
                                pins = "PH10";
                                function = "ir_rx";
                                phandle = <0x34>;
                        };

                        mmc0-pins {
                                pins = "PF0\0PF1\0PF2\0PF3\0PF4\0PF5";
                                function = "mmc0";
                                drive-strength = <0x1e>;
                                bias-pull-up;
                                phandle = <0x13>;
                        };

                        mmc1-pins {
                                pins = "PG0\0PG1\0PG2\0PG3\0PG4\0PG5";
                                function = "mmc1";
                                drive-strength = <0x1e>;
                                bias-pull-up;
                                phandle = <0x15>;
                        };

                        mmc2-pins {
                                pins = "PC0\0PC1\0PC5\0PC6\0PC8\0PC9\0PC10\0PC11\0PC13\0PC14\0PC15\0PC16";
                                function = "mmc2";
                                drive-strength = <0x1e>;
                                bias-pull-up;
                                phandle = <0x17>;
                        };

                        rmii-pins {
                                pins = "PA0\0PA1\0PA2\0PA3\0PA4\0PA5\0PA6\0PA7\0PA8\0PA9";
                                function = "emac1";
                                drive-strength = <0x28>;
                                phandle = <0x26>;
                        };

                        spi0-pins {
                                pins = "PC0\0PC2\0PC4";
                                function = "spi0";
                                phandle = <0x21>;
                        };

                        spi0-cs0-pin {
                                pins = "PC3";
                                function = "spi0";
                                phandle = <0x4b>;
                        };

                        spi1-pins {
                                pins = "PH6\0PH7\0PH8";
                                function = "spi1";
                                phandle = <0x22>;
                        };

                        spi1-cs0-pin {
                                pins = "PH5";
                                function = "spi1";
                                phandle = <0x4c>;
                        };

                        spi1-cs1-pin {
                                pins = "PH9";
                                function = "spi1";
                                phandle = <0x4d>;
                        };

                        spdif-tx-pin {
                                pins = "PH4";
                                function = "spdif";
                                phandle = <0x24>;
                        };

                        uart0-ph-pins {
                                pins = "PH0\0PH1";
                                function = "uart0";
                                phandle = <0x1d>;
                        };

                        uart2-pins {
                                pins = "PH5\0PH6";
                                function = "uart2";
                                phandle = <0x4e>;
                        };

                        uart2-rts-cts-pins {
                                pins = "PH7\0PH8";
                                function = "uart2";
                                phandle = <0x4f>;
                        };

                        uart5-pins {
                                pins = "PH2\0PH3";
                                function = "uart5";
                                phandle = <0x50>;
                        };

                        uart1-pins {
                                pins = "PG6\0PG7";
                                function = "uart1";
                                phandle = <0x1e>;
                        };

                        uart1-rts-cts-pins {
                                pins = "PG8\0PG9";
                                function = "uart1";
                                phandle = <0x1f>;
                        };

                        x32clk-fanout-pin {
                                pins = "PG10";
                                function = "clock";
                                phandle = <0x3a>;
                        };
                };

                interrupt-controller@3021000 {
                        compatible = "arm,gic-400";
                        reg = <0x3021000 0x1000 0x3022000 0x2000 0x3024000 0x2000 0x3026000 0x2000>;
                        interrupts = <0x01 0x09 0xf04>;
                        interrupt-controller;
                        #interrupt-cells = <0x03>;
                        phandle = <0x01>;
                };

                iommu@30f0000 {
                        compatible = "allwinner,sun50i-h616-iommu\0allwinner,sun50i-h6-iommu";
                        reg = <0x30f0000 0x10000>;
                        interrupts = <0x00 0x3d 0x04>;
                        clocks = <0x02 0x30>;
                        resets = <0x02 0x0b>;
                        #iommu-cells = <0x01>;
                        status = "okay";
                        phandle = <0x51>;
                };

                mmc@4020000 {
                        compatible = "allwinner,sun50i-h616-mmc\0allwinner,sun50i-a100-mmc";
                        reg = <0x4020000 0x1000>;
                        clocks = <0x02 0x3f 0x02 0x3c>;
                        clock-names = "ahb\0mmc";
                        resets = <0x02 0x0e>;
                        reset-names = "ahb";
                        interrupts = <0x00 0x23 0x04>;
                        pinctrl-names = "default";
                        pinctrl-0 = <0x13>;
                        status = "okay";
                        max-frequency = <0x8f0d180>;
                        cap-sd-highspeed;
                        cap-mmc-highspeed;
                        mmc-ddr-3_3v;
                        cap-sdio-irq;
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        vmmc-supply = <0x12>;
                        cd-gpios = <0x14 0x08 0x10 0x01>;
                        bus-width = <0x04>;
                        phandle = <0x52>;
                };

                mmc@4021000 {
                        compatible = "allwinner,sun50i-h616-mmc\0allwinner,sun50i-a100-mmc";
                        reg = <0x4021000 0x1000>;
                        clocks = <0x02 0x40 0x02 0x3d>;
                        clock-names = "ahb\0mmc";
                        resets = <0x02 0x0f>;
                        reset-names = "ahb";
                        interrupts = <0x00 0x24 0x04>;
                        pinctrl-names = "default";
                        pinctrl-0 = <0x15>;
                        status = "okay";
                        max-frequency = <0x8f0d180>;
                        cap-sd-highspeed;
                        cap-mmc-highspeed;
                        mmc-ddr-3_3v;
                        cap-sdio-irq;
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        vmmc-supply = <0x12>;
                        vqmmc-supply = <0x11>;
                        mmc-pwrseq = <0x16>;
                        bus-width = <0x04>;
                        non-removable;
                        phandle = <0x53>;

                        wifi@1 {
                                reg = <0x01>;
                                phandle = <0x54>;
                        };
                };

                mmc@4022000 {
                        compatible = "allwinner,sun50i-h616-emmc\0allwinner,sun50i-a100-emmc";
                        reg = <0x4022000 0x1000>;
                        clocks = <0x02 0x41 0x02 0x3e>;
                        clock-names = "ahb\0mmc";
                        resets = <0x02 0x10>;
                        reset-names = "ahb";
                        interrupts = <0x00 0x25 0x04>;
                        pinctrl-names = "default";
                        pinctrl-0 = <0x17>;
                        status = "okay";
                        max-frequency = <0x8f0d180>;
                        cap-sd-highspeed;
                        cap-mmc-highspeed;
                        mmc-ddr-3_3v;
                        cap-sdio-irq;
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        vmmc-supply = <0x12>;
                        vqmmc-supply = <0x11>;
                        bus-width = <0x08>;
                        non-removable;
                        cap-mmc-hw-reset;
                        mmc-ddr-1_8v;
                        mmc-hs200-1_8v;
                        phandle = <0x55>;
                };

                codec@05096000 {
                        #sound-dai-cells = <0x00>;
                        compatible = "allwinner,sun50i-h616-codec";
                        reg = <0x5096000 0x31c>;
                        interrupts = <0x00 0x3a 0x04>;
                        clocks = <0x02 0x5d 0x02 0x5b 0x02 0x5c>;
                        clock-names = "apb\0audio-codec-1x\0audio-codec-4x";
                        resets = <0x02 0x24>;
                        dmas = <0x18 0x06>;
                        dma-names = "tx";
                        status = "okay";
                        allwinner,audio-routing = "Line Out\0LINEOUT";
                        phandle = <0x56>;
                };

                ahub_dam_plat@5097000 {
                        #sound-dai-cells = <0x00>;
                        compatible = "allwinner,sunxi-snd-plat-ahub_dam";
                        reg = <0x5097000 0x1000>;
                        resets = <0x02 0x25>;
                        clocks = <0x02 0x5b 0x02 0x5c 0x02 0x5e 0x02 0x5f>;
                        clock-names = "clk_pll_audio\0clk_pll_audio_4x\0clk_audio_hub\0clk_bus_audio_hub";
                        status = "okay";
                        phandle = <0x19>;
                };

                ahub_dam_mach {
                        compatible = "allwinner,sunxi-snd-mach";
                        soundcard-mach,name = "ahubdam";
                        status = "okay";
                        phandle = <0x57>;

                        soundcard-mach,cpu {
                                sound-dai = <0x19>;
                        };

                        soundcard-mach,codec {
                        };
                };

                ahub1_plat {
                        #sound-dai-cells = <0x00>;
                        compatible = "allwinner,sunxi-snd-plat-ahub";
                        apb_num = <0x01>;
                        dmas = <0x18 0x04 0x18 0x04>;
                        dma-names = "tx\0rx";
                        playback_cma = <0x80>;
                        capture_cma = <0x80>;
                        tx_fifo_size = <0x80>;
                        rx_fifo_size = <0x80>;
                        tdm_num = <0x01>;
                        tx_pin = <0x00>;
                        rx_pin = <0x00>;
                        status = "okay";
                        phandle = <0x1b>;
                };

                ahub1_mach {
                        compatible = "allwinner,sunxi-snd-mach";
                        soundcard-mach,name = "HDMI";
                        soundcard-mach,format = "i2s";
                        soundcard-mach,frame-master = <0x1a>;
                        soundcard-mach,bitclock-master = <0x1a>;
                        soundcard-mach,slot-num = <0x02>;
                        soundcard-mach,slot-width = <0x20>;
                        status = "okay";
                        phandle = <0x58>;

                        soundcard-mach,cpu {
                                sound-dai = <0x1b>;
                                soundcard-mach,pll-fs = <0x04>;
                                soundcard-mach,mclk-fs = <0x00>;
                                phandle = <0x1a>;
                        };

                        soundcard-mach,codec {
                                sound-dai = <0x1c>;
                                phandle = <0x59>;
                        };
                };

                serial@5000000 {
                        compatible = "snps,dw-apb-uart";
                        reg = <0x5000000 0x400>;
                        interrupts = <0x00 0x00 0x04>;
                        reg-shift = <0x02>;
                        reg-io-width = <0x04>;
                        clocks = <0x02 0x42>;
                        dmas = <0x18 0x0e 0x18 0x0e>;
                        dma-names = "tx\0rx";
                        resets = <0x02 0x11>;
                        status = "okay";
                        pinctrl-names = "default";
                        pinctrl-0 = <0x1d>;
                        phandle = <0x5a>;
                };

                serial@5000400 {
                        compatible = "snps,dw-apb-uart";
                        reg = <0x5000400 0x400>;
                        interrupts = <0x00 0x01 0x04>;
                        reg-shift = <0x02>;
                        reg-io-width = <0x04>;
                        clocks = <0x02 0x43>;
                        dmas = <0x18 0x0f 0x18 0x0f>;
                        dma-names = "tx\0rx";
                        resets = <0x02 0x12>;
                        status = "okay";
                        pinctrl-names = "default";
                        pinctrl-0 = <0x1e 0x1f>;
                        uart-has-rtscts;
                        phandle = <0x5b>;

                        bluetooth {
                                compatible = "brcm,bcm43438-bt";
                                shutdown-gpios = <0x14 0x06 0x13 0x00>;
                                clocks = <0x10 0x01>;
                                host-wakeup-gpios = <0x14 0x06 0x10 0x00>;
                                clock-names = "lpo";
                                vddio-supply = <0x12>;
                                device-wakeup-gpios = <0x14 0x06 0x11 0x00>;
                                vbat-supply = <0x12>;
                        };
                };

                serial@5000800 {
                        compatible = "snps,dw-apb-uart";
                        reg = <0x5000800 0x400>;
                        interrupts = <0x00 0x02 0x04>;
                        reg-shift = <0x02>;
                        reg-io-width = <0x04>;
                        clocks = <0x02 0x44>;
                        dmas = <0x18 0x10 0x18 0x10>;
                        dma-names = "tx\0rx";
                        resets = <0x02 0x13>;
                        status = "disabled";
                        phandle = <0x5c>;
                };

                serial@5000c00 {
                        compatible = "snps,dw-apb-uart";
                        reg = <0x5000c00 0x400>;
                        interrupts = <0x00 0x03 0x04>;
                        reg-shift = <0x02>;
                        reg-io-width = <0x04>;
                        clocks = <0x02 0x45>;
                        dmas = <0x18 0x11 0x18 0x11>;
                        dma-names = "tx\0rx";
                        resets = <0x02 0x14>;
                        status = "disabled";
                        phandle = <0x5d>;
                };

                serial@5001000 {
                        compatible = "snps,dw-apb-uart";
                        reg = <0x5001000 0x400>;
                        interrupts = <0x00 0x04 0x04>;
                        reg-shift = <0x02>;
                        reg-io-width = <0x04>;
                        clocks = <0x02 0x46>;
                        dmas = <0x18 0x12 0x18 0x12>;
                        dma-names = "tx\0rx";
                        resets = <0x02 0x15>;
                        status = "disabled";
                        phandle = <0x5e>;
                };

                serial@5001400 {
                        compatible = "snps,dw-apb-uart";
                        reg = <0x5001400 0x400>;
                        interrupts = <0x00 0x05 0x04>;
                        reg-shift = <0x02>;
                        reg-io-width = <0x04>;
                        clocks = <0x02 0x47>;
                        dmas = <0x18 0x13 0x18 0x13>;
                        dma-names = "tx\0rx";
                        resets = <0x02 0x16>;
                        status = "disabled";
                        phandle = <0x5f>;
                };

                i2c@5002000 {
                        compatible = "allwinner,sun50i-h616-i2c\0allwinner,sun8i-v536-i2c\0allwinner,sun6i-a31-i2c";
                        reg = <0x5002000 0x400>;
                        interrupts = <0x00 0x06 0x04>;
                        clocks = <0x02 0x48>;
                        dmas = <0x18 0x2b 0x18 0x2b>;
                        dma-names = "rx\0tx";
                        resets = <0x02 0x17>;
                        pinctrl-names = "default";
                        pinctrl-0 = <0x20>;
                        status = "disabled";
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        phandle = <0x60>;
                };

                i2c@5002400 {
                        compatible = "allwinner,sun50i-h616-i2c\0allwinner,sun8i-v536-i2c\0allwinner,sun6i-a31-i2c";
                        reg = <0x5002400 0x400>;
                        interrupts = <0x00 0x07 0x04>;
                        clocks = <0x02 0x49>;
                        dmas = <0x18 0x2c 0x18 0x2c>;
                        dma-names = "rx\0tx";
                        resets = <0x02 0x18>;
                        status = "disabled";
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        phandle = <0x61>;
                };

                i2c@5002800 {
                        compatible = "allwinner,sun50i-h616-i2c\0allwinner,sun8i-v536-i2c\0allwinner,sun6i-a31-i2c";
                        reg = <0x5002800 0x400>;
                        interrupts = <0x00 0x08 0x04>;
                        clocks = <0x02 0x4a>;
                        dmas = <0x18 0x2d 0x18 0x2d>;
                        dma-names = "rx\0tx";
                        resets = <0x02 0x19>;
                        status = "disabled";
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        phandle = <0x62>;
                };

                i2c@5002c00 {
                        compatible = "allwinner,sun50i-h616-i2c\0allwinner,sun8i-v536-i2c\0allwinner,sun6i-a31-i2c";
                        reg = <0x5002c00 0x400>;
                        interrupts = <0x00 0x09 0x04>;
                        clocks = <0x02 0x4b>;
                        dmas = <0x18 0x2e 0x18 0x2e>;
                        dma-names = "rx\0tx";
                        resets = <0x02 0x1a>;
                        status = "okay";
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        phandle = <0x63>;
                };

                i2c@5003000 {
                        compatible = "allwinner,sun50i-h616-i2c\0allwinner,sun8i-v536-i2c\0allwinner,sun6i-a31-i2c";
                        reg = <0x5003000 0x400>;
                        interrupts = <0x00 0x0a 0x04>;
                        clocks = <0x02 0x4c>;
                        dmas = <0x18 0x2f 0x18 0x2f>;
                        dma-names = "rx\0tx";
                        resets = <0x02 0x1b>;
                        status = "disabled";
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        phandle = <0x64>;
                };

                spi@5010000 {
                        compatible = "allwinner,sun50i-h616-spi\0allwinner,sun8i-h3-spi";
                        reg = <0x5010000 0x1000>;
                        interrupts = <0x00 0x0c 0x04>;
                        clocks = <0x02 0x4f 0x02 0x4d>;
                        clock-names = "ahb\0mod";
                        dmas = <0x18 0x16 0x18 0x16>;
                        dma-names = "rx\0tx";
                        resets = <0x02 0x1c>;
                        pinctrl-names = "default";
                        pinctrl-0 = <0x21>;
                        status = "disabled";
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        phandle = <0x65>;
                };

                spi@5011000 {
                        compatible = "allwinner,sun50i-h616-spi\0allwinner,sun8i-h3-spi";
                        reg = <0x5011000 0x1000>;
                        interrupts = <0x00 0x0d 0x04>;
                        clocks = <0x02 0x50 0x02 0x4e>;
                        clock-names = "ahb\0mod";
                        dmas = <0x18 0x17 0x18 0x17>;
                        dma-names = "rx\0tx";
                        resets = <0x02 0x1d>;
                        pinctrl-names = "default";
                        pinctrl-0 = <0x22>;
                        status = "disabled";
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        phandle = <0x66>;
                };

                ethernet@5020000 {
                        compatible = "allwinner,sun50i-h616-emac0\0allwinner,sun50i-a64-emac";
                        reg = <0x5020000 0x10000>;
                        interrupts = <0x00 0x0e 0x04>;
                        interrupt-names = "macirq";
                        clocks = <0x02 0x52>;
                        clock-names = "stmmaceth";
                        resets = <0x02 0x1e>;
                        reset-names = "stmmaceth";
                        syscon = <0x23>;
                        status = "disabled";
                        phandle = <0x67>;

                        mdio {
                                compatible = "snps,dwmac-mdio";
                                #address-cells = <0x01>;
                                #size-cells = <0x00>;
                                phandle = <0x68>;
                        };
                };

                spdif@5093000 {
                        compatible = "allwinner,sun50i-h616-spdif";
                        reg = <0x5093000 0x400>;
                        interrupts = <0x00 0x15 0x04>;
                        clocks = <0x02 0x58 0x02 0x57>;
                        clock-names = "apb\0spdif";
                        resets = <0x02 0x22>;
                        dmas = <0x18 0x02>;
                        dma-names = "tx";
                        pinctrl-names = "default";
                        pinctrl-0 = <0x24>;
                        #sound-dai-cells = <0x00>;
                        status = "disabled";
                        phandle = <0x69>;
                };

                thermal-sensor@5070400 {
                        compatible = "allwinner,sun50i-h616-ths";
                        reg = <0x5070400 0x400>;
                        interrupts = <0x00 0x13 0x04>;
                        clocks = <0x02 0x56>;
                        clock-names = "bus";
                        resets = <0x02 0x21>;
                        nvmem-cells = <0x25>;
                        nvmem-cell-names = "calibration";
                        allwinner,sram = <0x23>;
                        #thermal-sensor-cells = <0x01>;
                        phandle = <0x37>;
                };

                ethernet@5030000 {
                        compatible = "allwinner,sun50i-h616-emac";
                        syscon = <0x23 0x01>;
                        reg = <0x5030000 0x10000>;
                        interrupts = <0x00 0x0f 0x04>;
                        interrupt-names = "macirq";
                        resets = <0x02 0x1f>;
                        reset-names = "stmmaceth";
                        clocks = <0x02 0x53>;
                        clock-names = "stmmaceth";
                        status = "okay";
                        pinctrl-names = "default";
                        pinctrl-0 = <0x26>;
                        phy-mode = "rmii";
                        phy-handle = <0x27>;
                        phy-supply = <0x11>;
                        allwinner,rx-delay-ps = <0xc1c>;
                        allwinner,tx-delay-ps = <0x2bc>;
                        phandle = <0x6a>;

                        mdio {
                                compatible = "snps,dwmac-mdio";
                                #address-cells = <0x01>;
                                #size-cells = <0x00>;
                                phandle = <0x6b>;

                                ethernet-phy@0 {
                                        compatible = "ethernet-phy-ieee802.3-c22";
                                        reg = <0x00>;
                                        phandle = <0x27>;
                                };
                        };
                };

                usb@5100000 {
                        compatible = "allwinner,sun50i-h616-musb\0allwinner,sun8i-h3-musb";
                        reg = <0x5100000 0x400>;
                        clocks = <0x02 0x70>;
                        resets = <0x02 0x32>;
                        interrupts = <0x00 0x19 0x04>;
                        interrupt-names = "mc";
                        phys = <0x28 0x00>;
                        phy-names = "usb";
                        extcon = <0x28 0x00>;
                        status = "okay";
                        dr_mode = "host";
                        phandle = <0x6c>;
                };

                phy@5100400 {
                        compatible = "allwinner,sun50i-h616-usb-phy";
                        reg = <0x5100400 0x24 0x5101800 0x14 0x5200800 0x14 0x5310800 0x14 0x5311800 0x14>;
                        reg-names = "phy_ctrl\0pmu0\0pmu1\0pmu2\0pmu3";
                        clocks = <0x02 0x61 0x02 0x63 0x02 0x65 0x02 0x67 0x02 0x6e>;
                        clock-names = "usb0_phy\0usb1_phy\0usb2_phy\0usb3_phy\0pmu2_clk";
                        resets = <0x02 0x26 0x02 0x27 0x02 0x28 0x02 0x29>;
                        reset-names = "usb0_reset\0usb1_reset\0usb2_reset\0usb3_reset";
                        status = "okay";
                        #phy-cells = <0x01>;
                        phandle = <0x28>;
                };

                usb@5101000 {
                        compatible = "allwinner,sun50i-h616-ehci\0generic-ehci";
                        reg = <0x5101000 0x100>;
                        interrupts = <0x00 0x1a 0x04>;
                        clocks = <0x02 0x68 0x02 0x6c 0x02 0x60>;
                        resets = <0x02 0x2a 0x02 0x2e>;
                        phys = <0x28 0x00>;
                        phy-names = "usb";
                        status = "okay";
                        phandle = <0x6d>;
                };

                usb@5101400 {
                        compatible = "allwinner,sun50i-h616-ohci\0generic-ohci";
                        reg = <0x5101400 0x100>;
                        interrupts = <0x00 0x1b 0x04>;
                        clocks = <0x02 0x68 0x02 0x60>;
                        resets = <0x02 0x2a>;
                        phys = <0x28 0x00>;
                        phy-names = "usb";
                        status = "okay";
                        phandle = <0x6e>;
                };

                usb@5200000 {
                        compatible = "allwinner,sun50i-h616-ehci\0generic-ehci";
                        reg = <0x5200000 0x100>;
                        interrupts = <0x00 0x1c 0x04>;
                        clocks = <0x02 0x69 0x02 0x6d 0x02 0x62>;
                        resets = <0x02 0x2b 0x02 0x2f>;
                        phys = <0x28 0x01>;
                        phy-names = "usb";
                        status = "okay";
                        phandle = <0x6f>;
                };

                usb@5200400 {
                        compatible = "allwinner,sun50i-h616-ohci\0generic-ohci";
                        reg = <0x5200400 0x100>;
                        interrupts = <0x00 0x1d 0x04>;
                        clocks = <0x02 0x69 0x02 0x62>;
                        resets = <0x02 0x2b>;
                        phys = <0x28 0x01>;
                        phy-names = "usb";
                        status = "okay";
                        phandle = <0x70>;
                };

                usb@5310000 {
                        compatible = "allwinner,sun50i-h616-ehci\0generic-ehci";
                        reg = <0x5310000 0x100>;
                        interrupts = <0x00 0x1e 0x04>;
                        clocks = <0x02 0x6a 0x02 0x6e 0x02 0x64>;
                        resets = <0x02 0x2c 0x02 0x30>;
                        phys = <0x28 0x02>;
                        phy-names = "usb";
                        status = "disabled";
                        phandle = <0x71>;
                };

                usb@5310400 {
                        compatible = "allwinner,sun50i-h616-ohci\0generic-ohci";
                        reg = <0x5310400 0x100>;
                        interrupts = <0x00 0x1f 0x04>;
                        clocks = <0x02 0x6a 0x02 0x64>;
                        resets = <0x02 0x2c>;
                        phys = <0x28 0x02>;
                        phy-names = "usb";
                        status = "disabled";
                        phandle = <0x72>;
                };

                usb@5311000 {
                        compatible = "allwinner,sun50i-h616-ehci\0generic-ehci";
                        reg = <0x5311000 0x100>;
                        interrupts = <0x00 0x20 0x04>;
                        clocks = <0x02 0x6b 0x02 0x6f 0x02 0x66>;
                        resets = <0x02 0x2d 0x02 0x31>;
                        phys = <0x28 0x03>;
                        phy-names = "usb";
                        status = "disabled";
                        phandle = <0x73>;
                };

                usb@5311400 {
                        compatible = "allwinner,sun50i-h616-ohci\0generic-ohci";
                        reg = <0x5311400 0x100>;
                        interrupts = <0x00 0x21 0x04>;
                        clocks = <0x02 0x6b 0x02 0x66>;
                        resets = <0x02 0x2d>;
                        phys = <0x28 0x03>;
                        phy-names = "usb";
                        status = "disabled";
                        phandle = <0x74>;
                };

                hdmi@6000000 {
                        #sound-dai-cells = <0x00>;
                        compatible = "allwinner,sun50i-h616-dw-hdmi\0allwinner,sun50i-h6-dw-hdmi";
                        reg = <0x6000000 0x10000>;
                        reg-io-width = <0x01>;
                        interrupts = <0x00 0x3f 0x04>;
                        clocks = <0x02 0x75 0x02 0x73 0x02 0x72 0x02 0x74 0x02 0x7e 0x02 0x7f>;
                        clock-names = "iahb\0isfr\0tmds\0cec\0hdcp\0hdcp-bus";
                        resets = <0x02 0x33 0x02 0x3a>;
                        reset-names = "ctrl\0hdcp";
                        phys = <0x29>;
                        phy-names = "phy";
                        status = "okay";
                        phandle = <0x1c>;

                        ports {
                                #address-cells = <0x01>;
                                #size-cells = <0x00>;

                                port@0 {
                                        reg = <0x00>;
                                        phandle = <0x75>;

                                        endpoint {
                                                remote-endpoint = <0x2a>;
                                                phandle = <0x2f>;
                                        };
                                };

                                port@1 {
                                        reg = <0x01>;
                                        phandle = <0x76>;

                                        endpoint {
                                                remote-endpoint = <0x2b>;
                                                phandle = <0x39>;
                                        };
                                };
                        };
                };

                hdmi-phy@6010000 {
                        compatible = "allwinner,sun50i-h616-hdmi-phy";
                        reg = <0x6010000 0x10000>;
                        clocks = <0x02 0x75 0x02 0x73>;
                        clock-names = "bus\0mod";
                        resets = <0x02 0x34>;
                        reset-names = "phy";
                        #phy-cells = <0x00>;
                        phandle = <0x29>;
                };

                tcon-top@6510000 {
                        compatible = "allwinner,sun50i-h6-tcon-top";
                        reg = <0x6510000 0x1000>;
                        clocks = <0x02 0x76 0x02 0x77>;
                        clock-names = "bus\0tcon-tv0";
                        clock-output-names = "tcon-top-tv0";
                        resets = <0x02 0x35>;
                        #clock-cells = <0x01>;
                        phandle = <0x30>;

                        ports {
                                #address-cells = <0x01>;
                                #size-cells = <0x00>;

                                port@0 {
                                        #address-cells = <0x01>;
                                        #size-cells = <0x00>;
                                        reg = <0x00>;
                                        phandle = <0x77>;

                                        endpoint@0 {
                                                reg = <0x00>;
                                                remote-endpoint = <0x2c>;
                                                phandle = <0x0c>;
                                        };
                                };

                                port@1 {
                                        #address-cells = <0x01>;
                                        #size-cells = <0x00>;
                                        reg = <0x01>;
                                        phandle = <0x78>;

                                        endpoint@2 {
                                                reg = <0x02>;
                                                remote-endpoint = <0x2d>;
                                                phandle = <0x31>;
                                        };
                                };

                                port@4 {
                                        #address-cells = <0x01>;
                                        #size-cells = <0x00>;
                                        reg = <0x04>;
                                        phandle = <0x79>;

                                        endpoint@0 {
                                                reg = <0x00>;
                                                remote-endpoint = <0x2e>;
                                                phandle = <0x32>;
                                        };
                                };

                                port@5 {
                                        reg = <0x05>;
                                        phandle = <0x7a>;

                                        endpoint {
                                                remote-endpoint = <0x2f>;
                                                phandle = <0x2a>;
                                        };
                                };
                        };
                };

                lcd-controller@6515000 {
                        compatible = "allwinner,sun50i-h6-tcon-tv\0allwinner,sun8i-r40-tcon-tv";
                        reg = <0x6515000 0x1000>;
                        interrupts = <0x00 0x42 0x04>;
                        clocks = <0x02 0x79 0x30 0x00>;
                        clock-names = "ahb\0tcon-ch1";
                        resets = <0x02 0x36>;
                        reset-names = "lcd";
                        phandle = <0x7b>;

                        ports {
                                #address-cells = <0x01>;
                                #size-cells = <0x00>;

                                port@0 {
                                        reg = <0x00>;
                                        phandle = <0x7c>;

                                        endpoint {
                                                remote-endpoint = <0x31>;
                                                phandle = <0x2d>;
                                        };
                                };

                                port@1 {
                                        #address-cells = <0x01>;
                                        #size-cells = <0x00>;
                                        reg = <0x01>;
                                        phandle = <0x7d>;

                                        endpoint@1 {
                                                reg = <0x01>;
                                                remote-endpoint = <0x32>;
                                                phandle = <0x2e>;
                                        };
                                };
                        };
                };

                rtc@7000000 {
                        compatible = "allwinner,sun50i-h616-rtc";
                        reg = <0x7000000 0x400>;
                        interrupts = <0x00 0x68 0x04>;
                        clocks = <0x33 0x0e 0x0f 0x02 0x80>;
                        clock-names = "bus\0hosc\0pll-32k";
                        #clock-cells = <0x01>;
                        phandle = <0x10>;
                };

                clock@7010000 {
                        compatible = "allwinner,sun50i-h616-r-ccu";
                        reg = <0x7010000 0x210>;
                        clocks = <0x0f 0x10 0x00 0x10 0x02 0x02 0x04>;
                        clock-names = "hosc\0losc\0iosc\0pll-periph";
                        #clock-cells = <0x01>;
                        #reset-cells = <0x01>;
                        phandle = <0x33>;
                };

                interrupt-controller@7010320 {
                        compatible = "allwinner,sun50i-h616-nmi\0allwinner,sun9i-a80-nmi";
                        reg = <0x7010320 0x0c>;
                        interrupt-controller;
                        #interrupt-cells = <0x02>;
                        interrupts = <0x00 0x67 0x04>;
                        phandle = <0x7e>;
                };

                pinctrl@7022000 {
                        compatible = "allwinner,sun50i-h616-r-pinctrl";
                        reg = <0x7022000 0x400>;
                        interrupts = <0x00 0x8f 0x04>;
                        clocks = <0x33 0x02 0x0f 0x10 0x00>;
                        clock-names = "apb\0hosc\0losc";
                        gpio-controller;
                        #gpio-cells = <0x03>;
                        interrupt-controller;
                        #interrupt-cells = <0x03>;
                        phandle = <0x7f>;

                        r-i2c-pins {
                                pins = "PL0\0PL1";
                                function = "s_i2c";
                                phandle = <0x80>;
                        };

                        r-rsb-pins {
                                pins = "PL0\0PL1";
                                function = "s_rsb";
                                phandle = <0x36>;
                        };
                };

                ir@7040000 {
                        compatible = "allwinner,sun50i-h616-ir\0allwinner,sun6i-a31-ir";
                        reg = <0x7040000 0x400>;
                        interrupts = <0x00 0x6a 0x04>;
                        clocks = <0x33 0x09 0x33 0x0b>;
                        clock-names = "apb\0ir";
                        resets = <0x33 0x05>;
                        pinctrl-names = "default";
                        pinctrl-0 = <0x34>;
                        status = "okay";
                        phandle = <0x81>;
                };

                i2c@7081400 {
                        compatible = "allwinner,sun50i-h616-i2c\0allwinner,sun8i-v536-i2c\0allwinner,sun6i-a31-i2c";
                        reg = <0x7081400 0x400>;
                        interrupts = <0x00 0x69 0x04>;
                        clocks = <0x33 0x08>;
                        dmas = <0x18 0x30 0x18 0x30>;
                        dma-names = "rx\0tx";
                        resets = <0x33 0x04>;
                        status = "okay";
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        phandle = <0x82>;

                        pmic@36 {
                                compatible = "x-powers,axp313a";
                                reg = <0x36>;
                                #interrupt-cells = <0x01>;
                                interrupt-controller;
                                vin1-supply = <0x35>;
                                vin2-supply = <0x35>;
                                vin3-supply = <0x35>;
                                phandle = <0x83>;

                                regulators {

                                        aldo1 {
                                                regulator-always-on;
                                                regulator-min-microvolt = <0x1b7740>;
                                                regulator-max-microvolt = <0x1b7740>;
                                                regulator-name = "vcc-1v8-pll";
                                                phandle = <0x11>;
                                        };

                                        dldo1 {
                                                regulator-always-on;
                                                regulator-min-microvolt = <0x325aa0>;
                                                regulator-max-microvolt = <0x325aa0>;
                                                regulator-name = "vcc-3v3-io-mmc";
                                                phandle = <0x12>;
                                        };

                                        dcdc1 {
                                                regulator-always-on;
                                                regulator-min-microvolt = <0xc5c10>;
                                                regulator-max-microvolt = <0xf1b30>;
                                                regulator-name = "vdd-gpu-sys";
                                                phandle = <0x0d>;
                                        };

                                        dcdc2 {
                                                regulator-always-on;
                                                regulator-min-microvolt = <0xc5c10>;
                                                regulator-max-microvolt = <0x10c8e0>;
                                                regulator-name = "vdd-cpu";
                                                phandle = <0x04>;
                                        };

                                        dcdc3 {
                                                regulator-always-on;
                                                regulator-min-microvolt = <0x14c080>;
                                                regulator-max-microvolt = <0x14c080>;
                                                regulator-name = "vdd-dram";
                                                phandle = <0x84>;
                                        };
                                };
                        };
                };

                rsb@7083000 {
                        compatible = "allwinner,sun50i-h616-rsb\0allwinner,sun8i-a23-rsb";
                        reg = <0x7083000 0x400>;
                        interrupts = <0x00 0x6d 0x04>;
                        clocks = <0x33 0x0d>;
                        clock-frequency = <0x2dc6c0>;
                        resets = <0x33 0x07>;
                        pinctrl-names = "default";
                        pinctrl-0 = <0x36>;
                        status = "disabled";
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        phandle = <0x85>;
                };

                dump_reg@20000 {
                        compatible = "allwinner,sunxi-dump-reg";
                        reg = <0x00 0x3001000 0x00 0xf20>;
                        status = "okay";
                        phandle = <0x86>;
                };

                sunxi-info {
                        compatible = "allwinner,sun50i-h616-sys-info";
                        status = "okay";
                };

                addr-mgt {
                        compatible = "allwinner,sunxi-addr_mgt";
                        type_addr_wifi = <0x02>;
                        type_addr_bt = <0x02>;
                        type_addr_eth = <0x02>;
                        status = "okay";
                        phandle = <0x87>;
                };
        };

        thermal-zones {

                cpu-thermal {
                        polling-delay-passive = <0x1f4>;
                        polling-delay = <0x3e8>;
                        thermal-sensors = <0x37 0x02>;
                        sustainable-power = <0x3e8>;

                        trips {

                                cpu-trip-0 {
                                        temperature = <0xea60>;
                                        type = "passive";
                                        hysteresis = <0x00>;
                                        phandle = <0x88>;
                                };

                                cpu-trip-1 {
                                        temperature = <0x11170>;
                                        type = "passive";
                                        hysteresis = <0x00>;
                                        phandle = <0x89>;
                                };

                                cpu-trip-2 {
                                        temperature = <0x1adb0>;
                                        type = "critical";
                                        hysteresis = <0x00>;
                                        phandle = <0x8a>;
                                };
                        };
                };

                gpu-thermal {
                        polling-delay-passive = <0x1f4>;
                        polling-delay = <0x3e8>;
                        thermal-sensors = <0x37 0x00>;
                        sustainable-power = <0x44c>;

                        trips {

                                gpu-trip-0 {
                                        temperature = <0x1adb0>;
                                        type = "critical";
                                        hysteresis = <0x00>;
                                        phandle = <0x8b>;
                                };
                        };
                };

                ve-thermal {
                        polling-delay-passive = <0x00>;
                        polling-delay = <0x00>;
                        thermal-sensors = <0x37 0x01>;

                        trips {

                                ve-trip-0 {
                                        temperature = <0x1adb0>;
                                        type = "critical";
                                        hysteresis = <0x00>;
                                        phandle = <0x8c>;
                                };
                        };
                };

                ddr-thermal {
                        polling-delay-passive = <0x00>;
                        polling-delay = <0x00>;
                        thermal-sensors = <0x37 0x03>;

                        trips {

                                ddr-trip-0 {
                                        temperature = <0x1adb0>;
                                        type = "critical";
                                        hysteresis = <0x00>;
                                        phandle = <0x8d>;
                                };
                        };
                };
        };

        opp-table-cpu {
                compatible = "allwinner,sun50i-h616-operating-points";
                nvmem-cells = <0x38>;
                opp-shared;
                phandle = <0x03>;

                opp-480000000 {
                        opp-hz = <0x00 0x1c9c3800>;
                        opp-microvolt = <0xdbba0>;
                        clock-latency-ns = <0x3b9b0>;
                        opp-supported-hw = <0x1f>;
                };

                opp-600000000 {
                        opp-hz = <0x00 0x23c34600>;
                        opp-microvolt = <0xdbba0>;
                        clock-latency-ns = <0x3b9b0>;
                        opp-supported-hw = <0x12>;
                };

                opp-720000000 {
                        opp-hz = <0x00 0x2aea5400>;
                        opp-microvolt = <0xdbba0>;
                        clock-latency-ns = <0x3b9b0>;
                        opp-supported-hw = <0x0d>;
                };

                opp-792000000 {
                        opp-hz = <0x00 0x2f34f600>;
                        opp-microvolt-speed1 = <0xdbba0>;
                        opp-microvolt-speed4 = <0xe57e0>;
                        clock-latency-ns = <0x3b9b0>;
                        opp-supported-hw = <0x12>;
                };

                opp-936000000 {
                        opp-hz = <0x00 0x37ca3a00>;
                        opp-microvolt = <0xdbba0>;
                        clock-latency-ns = <0x3b9b0>;
                        opp-supported-hw = <0x0d>;
                };

                opp-1008000000 {
                        opp-hz = <0x00 0x3c14dc00>;
                        opp-microvolt-speed0 = <0xe7ef0>;
                        opp-microvolt-speed1 = <0xe57e0>;
                        opp-microvolt-speed2 = <0xe7ef0>;
                        opp-microvolt-speed3 = <0xe7ef0>;
                        opp-microvolt-speed4 = <0xf9060>;
                        clock-latency-ns = <0x3b9b0>;
                        opp-supported-hw = <0x1f>;
                };

                opp-1104000000 {
                        opp-hz = <0x00 0x41cdb400>;
                        opp-microvolt-speed0 = <0xf4240>;
                        opp-microvolt-speed2 = <0xf4240>;
                        opp-microvolt-speed3 = <0xf4240>;
                        clock-latency-ns = <0x3b9b0>;
                        opp-supported-hw = <0x0d>;
                };

                opp-1200000000 {
                        opp-hz = <0x00 0x47868c00>;
                        opp-microvolt-speed0 = <0x100590>;
                        opp-microvolt-speed1 = <0xf9060>;
                        opp-microvolt-speed2 = <0x100590>;
                        opp-microvolt-speed3 = <0x100590>;
                        opp-microvolt-speed4 = <0x10c8e0>;
                        clock-latency-ns = <0x3b9b0>;
                        opp-supported-hw = <0x1f>;
                };

                opp-1320000000 {
                        opp-hz = <0x00 0x4ead9a00>;
                        opp-microvolt = <0x10c8e0>;
                        clock-latency-ns = <0x3b9b0>;
                        opp-supported-hw = <0x1d>;
                };

                opp-1416000000 {
                        opp-hz = <0x00 0x54667200>;
                        opp-microvolt = <0x10c8e0>;
                        clock-latency-ns = <0x3b9b0>;
                        opp-supported-hw = <0x0d>;
                };

                opp-1512000000 {
                        opp-hz = <0x00 0x5a1f4a00>;
                        opp-microvolt-speed1 = <0x10c8e0>;
                        opp-microvolt-speed3 = <0x10c8e0>;
                        clock-latency-ns = <0x3b9b0>;
                        opp-supported-hw = <0x0a>;
                };
        };

        aliases {
                ethernet0 = "/soc/ethernet@5030000";
                ethernet1 = "/soc/mmc@4021000/wifi@1";
                serial0 = "/soc/serial@5000000";
        };

        chosen {
                stdout-path = "serial0:115200n8";
        };

        connector {
                compatible = "hdmi-connector";
                type = "a";

                port {

                        endpoint {
                                remote-endpoint = <0x39>;
                                phandle = <0x2b>;
                        };
                };
        };

        vcc5v {
                compatible = "regulator-fixed";
                regulator-name = "vcc-5v";
                regulator-min-microvolt = <0x4c4b40>;
                regulator-max-microvolt = <0x4c4b40>;
                regulator-always-on;
                phandle = <0x35>;
        };

        vcc3v3 {
                compatible = "regulator-fixed";
                regulator-name = "vcc-3v3";
                regulator-min-microvolt = <0x325aa0>;
                regulator-max-microvolt = <0x325aa0>;
                regulator-always-on;
                phandle = <0x8e>;
        };

        pwrseq {
                compatible = "mmc-pwrseq-simple";
                clocks = <0x10 0x01>;
                clock-names = "ext_clock";
                pinctrl-0 = <0x3a>;
                pinctrl-names = "default";
                reset-gpios = <0x14 0x06 0x12 0x01>;
                phandle = <0x16>;
        };

        __symbols__ {
                cpu0 = "/cpus/cpu@0";
                cpu1 = "/cpus/cpu@1";
                cpu2 = "/cpus/cpu@2";
                cpu3 = "/cpus/cpu@3";
                de = "/display-engine";
                osc24M = "/osc24M-clk";
                display_clocks = "/soc/bus@1000000/clock@8000";
                mixer0 = "/soc/bus@1000000/mixer@100000";
                mixer0_out = "/soc/bus@1000000/mixer@100000/ports/port@1";
                mixer0_out_tcon_top_mixer0 = "/soc/bus@1000000/mixer@100000/ports/port@1/endpoint";
                gpu = "/soc/gpu@1800000";
                deinterlace = "/soc/deinterlace@1420000";
                syscon = "/soc/syscon@3000000";
                sram_a2 = "/soc/syscon@3000000/sram@100000";
                scpi_sram = "/soc/syscon@3000000/sram@100000/scpi-sram@17c00";
                sram_c = "/soc/syscon@3000000/sram@28000";
                de3_sram = "/soc/syscon@3000000/sram@28000/sram-section@0";
                sram_c1 = "/soc/syscon@3000000/sram@1a00000";
                ve_sram = "/soc/syscon@3000000/sram@1a00000/sram-section@0";
                ccu = "/soc/clock@3001000";
                dma = "/soc/dma-controller@3002000";
                sid = "/soc/efuse@3006000";
                ths_calibration = "/soc/efuse@3006000/thermal-sensor-calibration@14";
                cpu_speed_grade = "/soc/efuse@3006000/cpu-speed-grade@0";
                watchdog = "/soc/watchdog@30090a0";
                pio = "/soc/pinctrl@300b000";
                ext_rgmii_pins = "/soc/pinctrl@300b000/rgmii-pins";
                i2c0_pins = "/soc/pinctrl@300b000/i2c0-pins";
                i2c2_ph_pins = "/soc/pinctrl@300b000/i2c2-ph-pins";
                i2c3_ph_pins = "/soc/pinctrl@300b000/i2c3-ph-pins";
                i2c4_ph_pins = "/soc/pinctrl@300b000/i2c4-ph-pins";
                i2c3_pg_pins = "/soc/pinctrl@300b000/i2c3-pg-pins";
                i2c4_pg_pins = "/soc/pinctrl@300b000/i2c4-pg-pins";
                ir_rx_pin = "/soc/pinctrl@300b000/ir-rx-pin";
                mmc0_pins = "/soc/pinctrl@300b000/mmc0-pins";
                mmc1_pins = "/soc/pinctrl@300b000/mmc1-pins";
                mmc2_pins = "/soc/pinctrl@300b000/mmc2-pins";
                rmii_pins = "/soc/pinctrl@300b000/rmii-pins";
                spi0_pins = "/soc/pinctrl@300b000/spi0-pins";
                spi0_cs0_pin = "/soc/pinctrl@300b000/spi0-cs0-pin";
                spi1_pins = "/soc/pinctrl@300b000/spi1-pins";
                spi1_cs0_pin = "/soc/pinctrl@300b000/spi1-cs0-pin";
                spi1_cs1_pin = "/soc/pinctrl@300b000/spi1-cs1-pin";
                spdif_tx_pin = "/soc/pinctrl@300b000/spdif-tx-pin";
                uart0_ph_pins = "/soc/pinctrl@300b000/uart0-ph-pins";
                uart2_pins = "/soc/pinctrl@300b000/uart2-pins";
                uart2_rts_cts_pins = "/soc/pinctrl@300b000/uart2-rts-cts-pins";
                uart5_pins = "/soc/pinctrl@300b000/uart5-pins";
                uart1_pins = "/soc/pinctrl@300b000/uart1-pins";
                uart1_rts_cts_pins = "/soc/pinctrl@300b000/uart1-rts-cts-pins";
                x32clk_fanout_pin = "/soc/pinctrl@300b000/x32clk-fanout-pin";
                gic = "/soc/interrupt-controller@3021000";
                iommu = "/soc/iommu@30f0000";
                mmc0 = "/soc/mmc@4020000";
                mmc1 = "/soc/mmc@4021000";
                sdio_wifi = "/soc/mmc@4021000/wifi@1";
                mmc2 = "/soc/mmc@4022000";
                codec = "/soc/codec@05096000";
                ahub_dam_plat = "/soc/ahub_dam_plat@5097000";
                ahub_dam_mach = "/soc/ahub_dam_mach";
                ahub1_plat = "/soc/ahub1_plat";
                ahub1_mach = "/soc/ahub1_mach";
                ahub1_cpu = "/soc/ahub1_mach/soundcard-mach,cpu";
                ahub1_codec = "/soc/ahub1_mach/soundcard-mach,codec";
                uart0 = "/soc/serial@5000000";
                uart1 = "/soc/serial@5000400";
                uart2 = "/soc/serial@5000800";
                uart3 = "/soc/serial@5000c00";
                uart4 = "/soc/serial@5001000";
                uart5 = "/soc/serial@5001400";
                i2c0 = "/soc/i2c@5002000";
                i2c1 = "/soc/i2c@5002400";
                i2c2 = "/soc/i2c@5002800";
                i2c3 = "/soc/i2c@5002c00";
                i2c4 = "/soc/i2c@5003000";
                spi0 = "/soc/spi@5010000";
                spi1 = "/soc/spi@5011000";
                emac0 = "/soc/ethernet@5020000";
                mdio0 = "/soc/ethernet@5020000/mdio";
                spdif = "/soc/spdif@5093000";
                ths = "/soc/thermal-sensor@5070400";
                emac1 = "/soc/ethernet@5030000";
                mdio1 = "/soc/ethernet@5030000/mdio";
                rmii_phy = "/soc/ethernet@5030000/mdio/ethernet-phy@0";
                usbotg = "/soc/usb@5100000";
                usbphy = "/soc/phy@5100400";
                ehci0 = "/soc/usb@5101000";
                ohci0 = "/soc/usb@5101400";
                ehci1 = "/soc/usb@5200000";
                ohci1 = "/soc/usb@5200400";
                ehci2 = "/soc/usb@5310000";
                ohci2 = "/soc/usb@5310400";
                ehci3 = "/soc/usb@5311000";
                ohci3 = "/soc/usb@5311400";
                hdmi = "/soc/hdmi@6000000";
                hdmi_in = "/soc/hdmi@6000000/ports/port@0";
                hdmi_in_tcon_top = "/soc/hdmi@6000000/ports/port@0/endpoint";
                hdmi_out = "/soc/hdmi@6000000/ports/port@1";
                hdmi_out_con = "/soc/hdmi@6000000/ports/port@1/endpoint";
                hdmi_phy = "/soc/hdmi-phy@6010000";
                tcon_top = "/soc/tcon-top@6510000";
                tcon_top_mixer0_in = "/soc/tcon-top@6510000/ports/port@0";
                tcon_top_mixer0_in_mixer0 = "/soc/tcon-top@6510000/ports/port@0/endpoint@0";
                tcon_top_mixer0_out = "/soc/tcon-top@6510000/ports/port@1";
                tcon_top_mixer0_out_tcon_tv = "/soc/tcon-top@6510000/ports/port@1/endpoint@2";
                tcon_top_hdmi_in = "/soc/tcon-top@6510000/ports/port@4";
                tcon_top_hdmi_in_tcon_tv = "/soc/tcon-top@6510000/ports/port@4/endpoint@0";
                tcon_top_hdmi_out = "/soc/tcon-top@6510000/ports/port@5";
                tcon_top_hdmi_out_hdmi = "/soc/tcon-top@6510000/ports/port@5/endpoint";
                tcon_tv = "/soc/lcd-controller@6515000";
                tcon_tv_in = "/soc/lcd-controller@6515000/ports/port@0";
                tcon_tv_in_tcon_top_mixer0 = "/soc/lcd-controller@6515000/ports/port@0/endpoint";
                tcon_tv_out = "/soc/lcd-controller@6515000/ports/port@1";
                tcon_tv_out_tcon_top = "/soc/lcd-controller@6515000/ports/port@1/endpoint@1";
                rtc = "/soc/rtc@7000000";
                r_ccu = "/soc/clock@7010000";
                nmi_intc = "/soc/interrupt-controller@7010320";
                r_pio = "/soc/pinctrl@7022000";
                r_i2c_pins = "/soc/pinctrl@7022000/r-i2c-pins";
                r_rsb_pins = "/soc/pinctrl@7022000/r-rsb-pins";
                ir = "/soc/ir@7040000";
                r_i2c = "/soc/i2c@7081400";
                axp313 = "/soc/i2c@7081400/pmic@36";
                reg_aldo1 = "/soc/i2c@7081400/pmic@36/regulators/aldo1";
                reg_dldo1 = "/soc/i2c@7081400/pmic@36/regulators/dldo1";
                reg_dcdc1 = "/soc/i2c@7081400/pmic@36/regulators/dcdc1";
                reg_dcdc2 = "/soc/i2c@7081400/pmic@36/regulators/dcdc2";
                reg_dcdc3 = "/soc/i2c@7081400/pmic@36/regulators/dcdc3";
                r_rsb = "/soc/rsb@7083000";
                dump_reg = "/soc/dump_reg@20000";
                addr_mgt = "/soc/addr-mgt";
                cpu_threshold = "/thermal-zones/cpu-thermal/trips/cpu-trip-0";
                cpu_target = "/thermal-zones/cpu-thermal/trips/cpu-trip-1";
                cpu_critical = "/thermal-zones/cpu-thermal/trips/cpu-trip-2";
                gpu_temp_critical = "/thermal-zones/gpu-thermal/trips/gpu-trip-0";
                ve_temp_critical = "/thermal-zones/ve-thermal/trips/ve-trip-0";
                ddr_temp_critical = "/thermal-zones/ddr-thermal/trips/ddr-trip-0";
                cpu_opp_table = "/opp-table-cpu";
                hdmi_con_in = "/connector/port/endpoint";
                reg_vcc5v = "/vcc5v";
                reg_vcc3v3 = "/vcc3v3";
                wifi_pwrseq = "/pwrseq";
        };
};

 

The only useful information that I can seeto my novice eye is:

 

lcd-controller@6515000 {
                        compatible = "allwinner,sun50i-h6-tcon-tv\0allwinner,sun8i-r40-tcon-tv";
                        reg = <0x6515000 0x1000>;
                        interrupts = <0x00 0x42 0x04>;
                        clocks = <0x02 0x79 0x30 0x00>;
                        clock-names = "ahb\0tcon-ch1";
                        resets = <0x02 0x36>;
                        reset-names = "lcd";
                        phandle = <0x7b>;

                        ports {
                                #address-cells = <0x01>;
                                #size-cells = <0x00>;

                                port@0 {
                                        reg = <0x00>;
                                        phandle = <0x7c>;

                                        endpoint {
                                                remote-endpoint = <0x31>;
                                                phandle = <0x2d>;
                                        };
                                };

                                port@1 {
                                        #address-cells = <0x01>;
                                        #size-cells = <0x00>;
                                        reg = <0x01>;
                                        phandle = <0x7d>;

                                        endpoint@1 {
                                                reg = <0x01>;
                                                remote-endpoint = <0x32>;
                                                phandle = <0x2e>;
                                        };
                                };
                        };
                };

 

Just another hurdle in this long journey! lol

 

But I am learning a lot as I go, so thank you for sticking with me along this journey.

 

Kind regards,

 

Mark

 

 

 

Edited by Mark Waples
Posted

Nick,

 

I have found some possible solutions

 

https://gitlab.com/tripole-inc/tvbox-mon/-/blob/main/README.md?ref_type=heads

 

and a quick and dirty script:

 

https://github.com/ophub/amlogic-s9xxx-armbian/issues/143#issuecomment-1396640429

 

I tried the latter but that didn't work for me.

 

I will try the tvbox-mon to see if that provides a solution.

 

Kind regards,

 

Mark

Posted

Nick,

 

happy to report I now have a full working LED display.

 

I ditched openvfd for Jean-Francois alternative module

 

https://github.com/jefflessard/tm16xx-display

 

More info

 

https://forum.armbian.com/topic/43667-help-wanted-to-test-a-new-openvfd-alternative/?do=findComment&comment=213897

 

I am now working on my IR table as the remote has plenty of functions so that should be good to go in a couple of days.

 

All that is left for me to do is get the onboard wifi working but in the meantime I have a working solution buy using a usb wifi dongle.

 

Many thanks to you Nick for your assistance.

 

Kind regards,

 

Mark

Posted

Hey Mark,

 

Good job on the LED Display. When I have time I'll give Jean-Francois alternative module a try.

 

I haven't played with the remote yet. Here's a post from the H618 thread that might help you.

 

 

Posted (edited)

Hi Nick,

 

Thank you for the link - I am using that and it works well.

 

I am just in the process of assigning the keys.

 

The remote is a full remote with numerics and other features.

 

I also gleened some very useful information from here:

https://mauricius.dev/configure-an-infrared-remote-control-with-linux/

 

Particularly the command that will show you the keycodes as you press each button on the remote in turn

sudo ir-keytable -v -t -p rc-5,rc-5-sz,jvc,sony,nec,sanyo,mce_kbd,rc-6,sharp,xmp

 

You can then enter the codes into the ir table file. Just delete the ones that are not applicable - It's a bit of trial and error

 

A sample file (NOT MY CODES)

 

[[protocols]]
name = "transpeed-8k"
protocol = "nec"
variant = "necx"
[protocols.scancodes]
0x801010 = "KEY_EXIT"
0x80102f = "KEY_POWER"
0x80104a = "KEY_SCREENSAVER"
0x801049 = "KEY_TIME"
0x801054 = "KEY_NUMERIC_1"
0x801055 = "KEY_NUMERIC_2"
0x801056 = "KEY_NUMERIC_3"
0x801057 = "KEY_NUMERIC_4"
0x801058 = "KEY_NUMERIC_5"
0x801059 = "KEY_NUMERIC_6"
0x80105a = "KEY_NUMERIC_7"
0x80105b = "KEY_NUMERIC_8"
0x80105c = "KEY_NUMERIC_9"
0x801081 = "KEY_SCREEN"
0x80105d = "KEY_NUMERIC_0"
0x801082 = "KEY_MAX"
0x801048 = "KEY_ESC"
0x80104b = "KEY_MEDIA"
0x801083 = "KEY_MENU"
0x801045 = "KEY_APPSELECT"
0x801084 = "KEY_STOP"
0x801046 = "KEY_CYCLEWINDOWS"
0x801085 = "KEY_BACKSPACE"
0x801086 = "KEY_KEYBOARD"
0x801087 = "KEY_SPACE"
0x80101e = "KEY_RESERVED"
0x801098 = "BTN_0"
0x80101f = "KEY_TAB"
0x80101b = "BTN_LEFT"
0x80101d = "BTN_RIGHT"
0x801016 = "BTN_MIDDLE"
0x801088 = "KEY_MUTE"
0x80105e = "KEY_VOLUMEDOWN"
0x80105f = "KEY_VOLUMEUP"
0x80104c = "KEY_PLAY"
0x80104d = "KEY_PAUSE"
0x80104f = "KEY_EJECTCD"
0x801050 = "KEY_PREVIOUS"
0x801051 = "KEY_NEXT"
0x80104e = "KEY_STOP"
0x801052 = "KEY_REWIND"
0x801053 = "KEY_FASTFORWARD"
0x801089 = "KEY_ZOOM"

 

Kind regards,

 

Mark

Edited by Mark Waples
Posted

Nick

 

I ended up with this table

 

[[protocols]]
name = "transpeed-8k"
protocol = "nec"
variant = "nec"
[protocols.scancodes]
0x2fe40 = "KEY_POWER"
0x2fe18 = "KEY_VOLUMEUP"
0x2fe10 = "KEY_VOLUMEDOWN"
0x2fe00 = "KEY_EPG"
0x2fe19 = "KEY_BACK"
0x2fe16 = "KEY_UP"
0x2fe51 = "KEY_LEFT"
0x2fe50 = "KEY_RIGHT"
0x2fe1a = "KEY_DOWN"
0x2fe11 = "KEY_HOME"
0x2fe43 = "KEY_MENU"
0x2fe01 = "KEY_0"
0x2fe4e = "KEY_1"
0x2fe0d = "KEY_2"
0x2fe0c = "KEY_3"
0x2fe4a = "KEY_4"
0x2fe09 = "KEY_5"
0x2fe08 = "KEY_6"
0x2fe46 = "KEY_7"
0x2fe05 = "KEY_8"
0x2fe04 = "KEY_9"
0x2fe42 = "KEY_BACKSPACE"
0x2fe4b = "KEY_REWIND"
0x2fe4f = "KEY_FASTFORWARD"
0x2fe13 = "KEY_ENTER"
0x2fe41 = "KEY_WWW"
0x2fe0f = "KEY_APPSELECT"

 

The only keys I couldn't assign because there are no Armbian Equivalents (I think) are:

 

The TV control set at the top & the KD key and the mouse mode

 

All the others have been mapped

 

remote.thumb.jpg.bf5024e47e06a6603c525b71491cca36.jpg

Kind regards,

 

Mark

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines