Lenovo ThinkSmart View ROM/OS Development

Awesome, looking forward to trying it out. I’m getting a 403 for that link though :sweat_smile:

Try again. Good 'ol SELinux at it again :stuck_out_tongue:

Haha working now, thx

1 Like

Way more responsive now! Looking good :raised_hands:

1 Like

Been lurking for a while as things get more stable. Is the current effort on this thread just pmOS, or Android 11? There were some 11 rom images floating around, but most recent discussion seems focused on pmOS. Specifically looking for the voice assistant functionality that I saw on a video posted a while back.

Thanks for all the amazing work on this device!

Parallel efforts - this thread is mainly focused on pmOS. I have one running Android 11 and now thanks to Felix a second running pmOS.

The Android efforts are currently gaming focused and active over in the Retro Handhelds discord server, with deadman providing most of the images and updates. I’m using it to run Fully Kiosk for HA and once it’s up it’s great with motion detection working to turn the screen back on. The downside is something’s still up with the wifi driver and it often panics and restarts at boot so it takes a few tries to get it back up. Android 8.1 is still the more stable and recommended path there (with it’s own caveats). You can also use the snowboy wakeword plugin with tasker or automate that Endlessvoid put together.

pmOS just became way more viable so curious to see what we’re able to do with that. Also maybe a longshot but I’m hoping we could make use of the arm64 kernel with Android and update past 11 at some point as well. The Android kernel is still 3.18 and 32-bit.

2 Likes

My main motivation behind pushing forward with pmOS is that I assume it is going to stay viable for longer than Android on this device. This is mainly due to the fact that we can build the entire OS from source using a mainline kernel that will continue receiving updates. As of right now there are only 4 components that need a binary blob to function: Bluetooth, GPU, Speaker Amp and WiFi. And those blobs are OS independent. The speaker amp binary blob is technically not even firmware (as it isn’t software) but rather DSP configuration values (EQs and stuff) very specific to this device.

Porting the OS is certainly only one part. Creating a user experience to make this device worthwhile with Home Assistant would be the next step we’d need to tackle. I’m hoping there may be a larger community that we can rally around that effort, because it would be adaptable to other devices than just the ThinkSmart View.

Now… If I could only get those dang Digital Microphones working :stuck_out_tongue:

8 Likes

I just tried this latest image and I’m getting a blank display. This is the dmesg output: Pastefy

1 Like

Thanks for posting the dmesg. It does look like you have the other display variant and the other panel driver is being loaded. May have to look into those GPIOs again. I’ll put together another kernel tonight for testing.

1 Like

Thanks! If there’s anything I can do to test a build or help you out, let me know.

1 Like

Agree. Excited to be a part of that effort.

Theres been so many cool ideas posted that can potentially see the light of day now, thanks to @FelixKa.

Once the Linux image is booting successfully on all the display variants I’ll put a big link to this thread at the top of my original post.

Pmos page on Firefox mentions trying ESR because it still supports the ‘old’ accelerated rendering.

Maybe that could work around the adreno bug you referenced, if it’s GLES 3 related.

1 Like

There is, actually.

Can you do the following on your device, via SSH:

If not yet connected to WiFi do the following:

$ nmcli d wifi connect YOUR_SSID password YOUR_WIFI_PASSWORD

then:

$ sudo apk add libgpiod
$ sudo gpioset --mode=wait 0 95=1 100=1

And tell me if there is any sort of reaction from your display to that. I don’t expect it to initialize, but maybe the backlight will come on.

GPIO95 is supposed to be backlight enable, GPIO100 is supposed to be display external VDD power enable.

Hit Enter to exit gpioset after testing.

In order to test to see if the backlight is turning on, I turned off the light in my room and I observed that my screen is running at something like 1% brightness. I couldn’t actually tell the difference between off and what it shows without a pitch black room. I can see a clock but don’t seem to be able to interact with anything.

However, I observed no change from the gpioset command.

Thanks for testing.
I have built a kernel that should enable GPIOs 95 and 100 together with the display, so hopefully we get a full initialization and backlight.

I believe it can be installed like this:

$ wget https://felix.kaechele.ca/projects/thinksmart/linux-lenovo-cd-18781y-6.7.5_p20240228220822-r0.apk
$ apk add linux-lenovo-cd-18781y-6.7.5_p20240228220822-r0.apk
$ reboot

On another note: I sent the patch for the WiFi driver upstream. Let’s see if it will get accepted :face_with_peeking_eye:

2 Likes

I did those commands, got no errors, and the screen is still dim. If there’s anything further I can do, let me know.

Let’s see if the new kernel actually did something.
GPIO 95 should be output active-high and GPIO 100 should now have a function name assigned:

$ sudo gpioinfo
[...]
line  95:      unnamed       unused  output  active-high
[...]
line 100:      unnamed "panel-vdd-regulator" output active-high [used]
[...]

Also, what is your output for this?

$ sudo gpioget 0 95
$ sudo gpioget 0 100

I’d expect it to either be 1 or gpioget: error reading GPIO values: Resource busy.

We can also check whether we can set screen brightness:

$ sudo su -
# cd /sys/class/backlight/backlight
# cat max_brightness > brightness

That should set the screen to maximum brightness. If that works then it means we at least should have backlight working, just need to figure out how to make it come up at a sensible value out of the box.

If that doesn’t work I’ll have to dig a bit deeper into the original device tree configuration to look at other options.

gpioinfo

lenovo-cd-18781y:~$ sudo gpioinfo | grep -E "(100|95)"
        line  95:      unnamed  "backlight"  output  active-high [used]
        line 100:      unnamed "panel-vdd-regulator" output active-high [used]

gpiogets:

lenovo-cd-18781y:~$ sudo gpioget 0 95
gpioget: error reading GPIO values: Resource busy
lenovo-cd-18781y:~$ sudo gpioget 0 100
gpioget: error reading GPIO values: Resource busy

I got no change from the brightness setting that I can see on my screen.

1 Like

Thanks for testing! I will check a few more things that I think could be the issue. But it’ll have to wait until tomorrow.

1 Like

Here are two more kernels to try:

Testing changes to the WLED setup:
https://felix.kaechele.ca/projects/thinksmart/linux-lenovo-cd-18781y-6.7.5_p20240229215516-r0-wled.apk

Testing WLED + Panel VDD/Backlight GPIOs:
https://felix.kaechele.ca/projects/thinksmart/linux-lenovo-cd-18781y-6.7.5_p20240229220153-r0-gpio.apk

Thanks!

The top one seems to have brightened up my screen: https://felix.kaechele.ca/projects/thinksmart/linux-lenovo-cd-18781y-6.7.5_p20240229215516-r0-wled.apk

Great work! Thank you so much!

The “slide to unlock” text is half-off the bottom of the screen and I don’t seem to actually be able to slide to unlock, however. Is this expected? Should I be using keyboard/mouse?

I’m a bit new to PMOS here.

Edit: Dmesg output: Pastefy