summaryrefslogtreecommitdiffstats
path: root/chromium/docs/website/site/chromium-os/chromiumos-design-docs/touch-firmware-updater/index.md
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/docs/website/site/chromium-os/chromiumos-design-docs/touch-firmware-updater/index.md')
-rw-r--r--chromium/docs/website/site/chromium-os/chromiumos-design-docs/touch-firmware-updater/index.md157
1 files changed, 0 insertions, 157 deletions
diff --git a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/touch-firmware-updater/index.md b/chromium/docs/website/site/chromium-os/chromiumos-design-docs/touch-firmware-updater/index.md
deleted file mode 100644
index 54a957a94ce..00000000000
--- a/chromium/docs/website/site/chromium-os/chromiumos-design-docs/touch-firmware-updater/index.md
+++ /dev/null
@@ -1,157 +0,0 @@
----
-breadcrumbs:
-- - /chromium-os
- - Chromium OS
-- - /chromium-os/chromiumos-design-docs
- - Design Documents
-page_name: touch-firmware-updater
-title: Touch Firmware Updater
----
-
-[TOC]
-
-## Introduction
-
-Touchpads and touchscreens are among the most sensitive input devices integrated
-into computing systems today. The complexity of touch controllers has increased
-so that touch devices can be thought of as small embedded devices, with many
-features and performance determined by upgradeable firmware. Throughout
-development and the lifespan of a Chromebook, firmware updates of the touch
-device may occur. This page provides an overview of how Chrome OS handles touch
-device firmware updates.
-
-## Bus overview
-
-Current generation Chromebooks use I2C (and the SMBus variant) as the underlying
-communication bus between the host system (where Chrome OS and the kernel driver
-run) and the touch device controller (where the firmware runs). I2C was chosen
-because it provides a good balance between power draw, complexity, and
-bandwidth. The bus is also well-supported on ARM based platforms. In addition to
-I2C for data, an interrupt line is routed from the trackpad to the host to
-signal the kernel driver when it is time to query for new data from the device
-during operation (and optionally signal state transitions during a firmware
-update).
-
-## Kernel driver
-
-Most of the actual work of moving of firmware bits across the bus is done by the
-vendor-specific kernel driver or user-space utility. The driver or utility sends
-commands to the device to ready it to accept a new firmware payload. Some
-trackpad vendors refer to this mode as a “bootloader” mode. The bootloader is a
-last resort in case the more complex operational mode firmware is corrupted. A
-trackpad without a valid firmware needs to at least be able to accept a working
-payload via an update.
-
-The driver or utility sends the firmware binary over the i2c bus to the device’s
-bootloader, using the vendor-specific protocol.
-
-While the protocol from the kernel driver to the touch device for the firmware
-update is vendor-specific, [Chrome OS requires that the kernel driver use the
-request_firmware hotplug
-interface](https://www.kernel.org/doc/Documentation/firmware_class/README) to
-expose the same interface to userspace:
-
-At a high level, request_firmware allows the kernel driver to access a file for
-read operations at /lib/firmware in the root file system.
-
-The device driver must support the following sysfs attributes for version
-management:
-
-* **firmware_version** or **fw_version** - identifies the current
- version number of the firmware loaded on the device, in the form
- <*major_version*>.<*minor_version*>
-* **product_id** or **hw_version** - a unique string that can identify
- the hardware version in the case that the same driver may be used by
- multiple device variants.
-
-For example, a Chromebook Pixel has two Atmel mXT devices. The hw_version of the
-mXT224SL trackpad is 130.1. The hw_version of the mXT1664S touchscreen is 162.0.
-
-Finally, one sysfs attribute must be provided to trigger a firmware update
-programmatically from user space:
-
-* **update_fw** - should be writable by the root user. It should also
- be able to accept a different filename in case more than one device
- uses the driver on the system, and therefore, two different
- firmwares are meant for different targets.
-
-The following example shows how the two Pixel touch devices share the same
-driver, but appear as separate instances in sysfs :
-
-echo “maxtouch-tp.fw” > /sys/bus/i2c/devices/1-004b/update_fw echo
-“maxtouch-ts.fw” > /sys/bus/i2c/devices/2-004a/update_fw
-
-For examples, see the
-[cypress](https://chromium.googlesource.com/chromiumos/third_party/kernel/+/refs/heads/chromeos-3.4/drivers/input/mouse/cyapa.c)
-and
-[atmel](https://chromium.googlesource.com/chromiumos/third_party/kernel/+/refs/heads/chromeos-3.4/drivers/input/touchscreen/atmel_mxt_ts.c)
-drivers in the chromeos-kernel tree.
-
-**Userspace updater**
-
-If the vendor uses I2C-HID kernel driver, they may use a user-space utility to
-update the device.
-
-## Userspace organization and scripts
-
-The touch firmware updater consists of a set of scripts and firmware files. The
-firmware update script is available in a [Chromium OS source
-tree](http://git.chromium.org/gitweb/?p=chromiumos/platform/touch_updater.git;a=tree;f=scripts).
-
-The files used by the touch firmware updater (as seen on the filesystem of a
-target system) are organized as follows:
-
-/opt/google/touch/scripts/chromeos-touch-firmware-update.sh
-/opt/google/touch/firmware/CYTRA-116002-00_2.9.bin
-/lib/firmware/cyapa.bin->/opt/google/touchpad/firmware/CYTRA-116002-00_2.9.bin
-
-Note that `/lib/firmware/cyapa.bin` is a symlink that links to the current
-latest version of firmware elsewhere in the rootfs.
-
-On a production Chrome OS system, the rootfs is protected as a part of Chrome OS
-verified boot, so neither the scripts nor the firmware binary can be changed by
-the user. Each version of Chrome OS ships with a firmware binary for every touch
-device in the system installed in the rootfs. Following an auto-update, on boot
-the touch firmware update script probes the device's current firmware version
-and may trigger a firmware update if the current version is not compatible.
-
-The name of the firmware binary is used to identify the version of the firmware
-binary by the chromeos-touch-firmwareupdate.sh. It should be in the format :
-<*product_id*>_<*firmware_version*>.bin
-
-In the above example, the product_id is CYTRA-116002-00, and the version is 2.9.
-
-## Firmware update sequence
-
-The touch firmware update runs after the kernel device driver has successfully
-probed the touch device.
-
-The chromeos-touch-update upstart job runs before the Chrome OS UI has started.
-It blocks the UI job from starting until a firmware version check and potential
-update are completed. The UI job is blocked because the touchpad or touchscreen
-are nonresponsive for the duration of the update, and during this process a user
-should not be able to interact with the device.
-
-For details, see the
-[chromeos-touch-update.conf](http://git.chromium.org/gitweb/?p=chromiumos/platform/touch_updater.git;a=blob;f=scripts/chromeos-touch-update.conf;hb=HEAD)
-job.
-
-The updater also runs as a part of the recovery process from a recovery image
-booted via USB.
-
-## Error recovery
-
-A typical update requires between 8 and 18 seconds. The firmware update runs
-before the Chrome OS UI starts (the user sees the splash screen) to prevent the
-user from inadvertently causing the update to fail.
-
-However, it is still possible that a firmware update might not complete properly
-if the system shuts down due to low battery. In this case, the operational mode
-firmware will be corrupted. The next time the device boots, it will not be
-possible to probe the device and have a functional touch device.
-
-For error recovery, it is a requirement for the kernel device driver to
-recognize this condition and probe successfully into a bootloader-only mode.
-From this state, the driver must be able to perform a forced update to a known
-good firmware. This means the update_fw sysfs property must exist and perform
-the same task in this error condition as during a normal firmware update. \ No newline at end of file