Lenovo ThinkSmart View (lenovo-cd-18781y)

The Lenovo ThinkSmart View is a desktop device that was originally intended to be used with video meeting software such as Microsoft Teams or Zoom. Its hardware is almost identical to the Lenovo Smart Display (SD-8501F/SD-X701B/SD-X501F), however the Smart Display series uses a different software and bootloader setup.
The product is based on Qualcomm's Home Hub / Smart Display 200 platform.
== Contributors ==
* FelixKa
== Users owning this device ==
== Bootloader ==
The stock bootloader is locked and secure boot is enabled. The bootloader can be unlocked via fastboot oem unlock-go but the device does not boot at all when the bootloader is unlocked. Re-locking the bootloader will restore the ability to boot.
The bootloader requires AVB1 signed images to successfully boot.
The device can boot using lk2nd. This works around the secure boot limitations. Additional steps required to make lk2nd work on this device are described in the Installation section.
== How to enter flash mode ==
Due to the device not booting with an unlocked bootloader the device must be flashed using EDL mode. Hold down Volume Up + Volume Down while powering on the device to enter EDL mode.
The loader collection that comes with B. Kerler's EDL contains a working firehose loader for this device.
== Installation ==
Use pmbootstrap to build your own installation image. The device requires lk2nd for panel and touchscreen selection.
As mentioned in the Bootloader section, the bootloader on the device cannot be used in the unlocked state at this time. The device does not boot when the bootloader is unlocked.
While secure boot is enabled, the device will accept an AVB1 signed image for booting.
Due to this any kernel or lk2nd image flashed to the boot partition will need to be signed.
lk2nd can build properly signed images using the following build command:
$ make TOOLCHAIN_PREFIX=arm-none-eabi- SIGN_BOOTIMG=1 LK2ND_QCDTBS="" lk2nd-msm8953
The images can then be flashed using EDL:
$ pmbootstrap init # select qcom-msm8953 as your device
$ pmbootstrap install
$ edl w boot <path to signed lk2nd.img>
$ edl w userdata <path to rootfs img with kernel in ext2 /boot subpartition>
Alternatively, once lk2nd is installed, you can also flash the rootfs from within lk2nd fastboot mode using the command that pmbootstrap suggests after building the image:
$ pmbootstrap flasher flash_rootfs
== Hardware ==
=== Display ===
Two panel / touchscreen variants are known:
# BOE TV080WXM-LL4 (Touch IC: FocalTech FT8201)
# Innolux P080DDD-AB4 (Touch IC: Himax HX83100A)
As of Kernel 6.11 both variants have working touchscreen drivers in mainline.
=== Audio ===
==== Speaker ====
The device has one speaker connected to a Texas Instruments TAS5782M amplifier/DSP. The driver for this codec is currently a work in progress.
==== Microphones ====
The Device has two microphones, DMIC1 (MIC4 on the PCB) and DMIC2 (MIC3 on PCB). In the portrait orientation DMIC2 is above the Mic Mute slider and DMIC1 is below the Volume Down key.
The ALSA UCM configuration for the device configures them as Stereo microphones with DMIC1 as the Left and DMIC2 as the Right channel.
==== Bluetooth Audio ====
Bluetooth Audio is connected to the Secondary PCM channel of the internal codec. There currently is no support for it in the mainline drivers. A patch was submitted but then abandoned: [alsa-devel] [PATCH 0/8] ASoC: qdsp6: db820c: Add support for external and bluetooth audio
=== Connectivity ===
==== USB ====
 USB-C Pinout
USB-C	Function
A4/B4	USB VCC
A5/B5	UART RX
A6/B6	USB D+
A7/B7	USB D-
A8/B8	UART TX
A9/B9	USB VCC
A USB-C connector can be found under the rubber foot at the top right corner of the device, when the device is in portrait mode. This USB-C connector supports USB2.0 and has pinouts for UART. It cannot provide power to connected peripherals.
==== USB OTG ====
USB OTG works but requires the use of an external power source, specifically +5V on the USB port's VBUS. Due to this:
* externally powered USB devices (such as hard drives with an external power supply) often do not work because they still expect 5V from the host to enable their USB controllers
* externally powered USB hubs often work
* USB-C OTG adapters that allow for external power sources have also been tested and work
By default the device is configured in device mode. Since the USB-C socket is not wired up to provide USB ID you will have to manually switch the USB mode to host:
$ echo "host" | sudo tee /sys/kernel/debug/usb/7000000.usb/mode
Note that the device will revert from host mode to device mode when the external power source is removed.
==== UART ====
UART can be found on the USB-C connector on pins SBU1/SBU2 (A8/B8) for RX and CC1/CC2 (A5/B5) for TX. The bootloader serial configuration is 115200–8-N-1 and logic levels are at 1.8V.
There are readily available USB-C breakout boards and connector PCBs that break out the required pins. Common 17 pin connector PCBs found on AliExpress can be connected on pins A8 and B5 to break out UART RX and UART TX while simultaneously allowing to use pins A6/B6 (D+), A7/B7 (D-) and A9/B9 (VBUS) for USB2.0 connectivity. Full reversibility of the connector is also maintained in this way.
==== WLAN ====
The device uses a Lite-ON WCBN3510A module connected via SDIO. This card contains the Qualcomm Atheros QCA9379-3 SoC for WiFi and Bluetooth. Support for the WiFi part in the mainline ath10k driver is a work in progress.
Using SSH through the WiFi connection is somewhat sluggish. This issue also exists in the original Android Firmware and may be caused by a bug in the WiFi adapters' firmware or a hardware design error relating to the SD bus.
==== Bluetooth ====
Bluetooth is connected to the SoC via UART. Bluetooth audio is currently not functional, due to the above mentioned lack in PCM support on the audio codec.
HID devices via Bluetooth have been tested and work.
== Mainline Support ==
The following commits were made as part of mainline support for this device.
=== ALSA UCM Configuration ===
* add Lenovo ThinkSmart View (CD-18781) config
=== Kernel ===
==== Device Tree ====
* Add Lenovo ThinkSmart View (CD-18781Y) (merged)
==== Touchscreen ====
* Input: himax_hx83112b - add support for HX83100A
* Input: himax_hx83112b - add himax_chip struct for multi-chip support
* Input: himax_hx83112b - implement MCU register reading
* Input: himax_hx83112b - use more descriptive register defines
* dt-bindings: input: touchscreen: himax,hx83112b: add HX83100A
* Input: edt-ft5x06 - add support for FocalTech FT8201
==== Panel Driver ====
* config/dtb: Add Lenovo ThinkSmart View (CD-18781Y)
==== Wireless ====
* Add support for QCA9379 hw1.0 SDIO WiFi/BT
=== lk2nd ===
* dts: msm8953: Add Lenovo ThinkSmart View (CD-18781Y)
* lk2nd: build: add option to sign bootimg
* dts: msm8953: Add build documentation to Lenovo ThinkSmart View (CD-18781Y)
=== postmarketOS ===
* pmaports MR with kernel changes
== See also ==
* Thread on the Home Assistant Forum for this port
* Upstream patch for wifi support in ath10k
* 
Category:Devices with known UART pinout