Acer Aspire 1 A114-61 (acer-aspire1)

From postmarketOS
Icon WARNING: The bootloader chain of the device is located in the same eMMC as the OS, damaging internal partition layout may make the laptop into an unrecoverable brick. See more details below.


Acer Aspire 1
Aspire 1 running GNOME
Aspire 1 running GNOME
Manufacturer Acer
Name Aspire 1
Codename acer-aspire1
Released 2021
Category testing
Pre-built images no
Original software Windows
Original version 10
postmarketOS kernel mainline
Hardware
Chipset Qualcomm Snapdragon 7c
CPU 2x Kryo 468 Gold + 6x Kryo 468 Silver
GPU Adreno 618
Display 1920x1080 IPS
Storage 64 GB
Memory 4 GB
Architecture AArch64
Type laptop
Unixbench Whet/Dhry score 5668.0
Features
Display
Works
WiFi
Works
FDE
Works
Mainline
Works
Battery
Partial
3D Acceleration
Works
Audio
Partial
Bluetooth
Works
Camera
Works
Internal storage
Works
Sensors
Hall Effect
Misc
Keyboard
Works
Touchpad
Works
USB-A
Works
HDMI/DP

Acer Aspire 1 is a low-end Windows on ARM laptop, based on Snapdragon 7c Gen1, a platform that has great mainline Linux support due to some Chromebooks sharing the same platform.

Variant differences

While the most common version of the device seems to be the "WiFi" variant, an "LTE" version with 8GB ram seem to also exist.

Contributors

  • travmurav

Users owning this device

  • TravMurav (Notes: wifi, A114-61-S45P, daily use)


Installation

Disabling UEFI Secure-Boot

This device uses the standard UEFI secure-boot. The initial configuration seem to contain the keys for some Linux distributors (i.e. Canonical or Debian) but for now it's probably easiest to just disable it.

Note that the following actions may cause Windows to fail decryption if the Bitlocker was enabled.

  1. Power on the device and press F2 to enter UEFI setup.
  2. Go to the Security tab and set the maintenance password. Write it down.
  3. Go to the Boot tab and disable the Secure Boot. This option is only available if the password is set.
  4. Go back to the Security tab and remove the password by changing it to the empty string.

Installing pmOS on an external storage

You should be able to perform sdcard installation with some usb-stick as the target. Note that the laptop has no SD slot.

Highly consider making a backup of the internal storage, it seems like the recovery media is not available for this laptop.

Installing pmOS on the internal eMMC

Icon WARNING: The bootloader chain of the device is located in the same eMMC as the OS, damaging internal partition layout may make the laptop into an unrecoverable brick.


See Windows on ARM devices page for generic suggestions.

Known Issues

Work-In-Progress Issues

Kernel package in pmOS follows upstream Linux and only contains the changes that were accepted there.

Here are some differences between pmOS and WIP branch:

Feature pmOS WIP Notes
Battery Partial Works Battery, lid, USB-C DP Alt mode all need special EC driver, for which only a dity PoC exists at this time. The device will still charge and the led on the side will blink red if there is <10% battery left.
Hall Effect/Lid sensor Broken Partial Needs EC. The sensor is reported, but can't be used for wakeup.
HDMI/DP Broken Works Implemented in the PoC EC driver.
Suspend Partial Works userspace freeze works but extra patches and hacks needed to actually reach low power mode, only available in the WIP branch.
Audio Partial Partial Everything but the internal mic is implemented upstream.

Other issues

  • The keyboard FN switch in the firmware settings is not effective, the media-keys layer is disabled. (The second layer can be enabled with the EC driver in the future)
  • Using DisplayPort/HDMI audio requires restarting PulseAudio (run pulseaudio -k after the cable is plugged for the sound output to be detected.
  • There may be issues with using PipeWire.

Checking battery status

If the EC driver is not used, you can check the remaining battery capacity with this script:

#!/bin/sh

raw_dynamic="$(sudo i2ctransfer -f -y 2 w1@0x76 0x07 r10)"
raw_static="$(sudo i2ctransfer -f -y 2 w1@0x76 0x08 r10)"
remaining_charge="$(printf "%d 256 * %d + p" $(echo $raw_dynamic | awk '{print $5, $6}') | dc)"
full_charge="$(printf "%d 256 * %d + p" $(echo $raw_static | awk '{print $8, $7}') | dc)"

echo "$((remaining_charge * 100 / full_charge))"

See also