#### Unknown document

# lxs-touch

## Introduction

This plugin supports firmware updates for the LX Semicon SW42101 touch controller. It communicates over the HID RAW interface (hidraw) and handles two protocol modes: SWIP and DFUP.

### Protocol Modes

- SWIP (Software In-Protocol): Normal touch operation mode. Version and panel information can be queried.
- DFUP (Device Firmware Upgrade Protocol): Bootloader mode dedicated to firmware updates.

### Firmware Update Flow

1. Setup: On device connection, check the protocol mode and read version and panel information.
2. Detach: Switch from SWIP mode to DFUP mode (`REG_CTRL_SETTER`, mode=`0x02`) and wait for replug.
3. Write: Write firmware to flash in chunks while in DFUP mode.
4. Attach: After firmware write completes, restart the device via watchdog reset (`CMD_WATCHDOG_RESET`).

### Flash Write Modes

Mode | Chunk size | Transmit unit | Verification
--- | --- | --- | ---
Normal | 128 bytes | 16 bytes | None
4K | 4096 bytes | 48 bytes | Yes (5 retries)

4K mode support is auto-detected at runtime by querying the device (`CMD_FLASH_4KB_UPDATE_MODE`).

## Firmware Formats

Type | Size | Flash offset | Description
--- | --- | --- | ---
Application-only | 112KB | `0x4000` | Application area only
Boot + Application | 128KB | `0x0000` | Bootloader + full application

## Version Format

The device version used for update comparison consists of three application fields (excluding the bootloader version):

`{core_ver}.{app_ver}.{param_ver}`

Example: `0000.0400.0000`

The bootloader version is stored separately via `fu_device_set_version_bootloader()` and is not included in upgrade/downgrade comparisons. This prevents false downgrade detection when the boot firmware is updated independently of the application firmware.

## Communication Protocol

Uses HID Output Reports (Report ID `0x09`, 64-byte buffer).

Read response header is 4 bytes; payload data starts at offset 4.

## Vendor ID Security

The vendor ID is set from the HID vendor ID, in this instance set to `HIDRAW:0x1FD2`.

## External Interface Access

This plugin requires ioctl `HIDIOCSFEATURE` and `HIDIOCGFEATURE` access.

## Version Considerations

This plugin has been available since fwupd version `2.1.2`.