Google Pixel C (google-smaug)

From postmarketOS Wiki
Google Pixel C
Manufacturer Google
Name Pixel C
Codename google-smaug
Released 2015
Type tablet
Hardware
Chipset Nvidia Tegra X1 (T210)
CPU 4x 1.0-2.2 GHz Cortex-A57, 4x 1.3 GHz Cortex-A53
GPU Maxwell
Display 2560x1800 IPS LCD
Storage 32/64 GB
Memory 3 GB
Architecture aarch64
Software
Original software Android
Original version 8.1.0
FOSS bootloader partial
postmarketOS
Category testing
Pre-built images no
Mainline yes
Features
Flashing
Works
USB Networking
Broken
Internal storage
Works
Battery
Works
Screen
Works
Touchscreen
Works
Keyboard
Works
Multimedia
3D Acceleration
Works
Audio
Broken
Camera
Broken
Connectivity
WiFi
Works
Bluetooth
Works
Miscellaneous
FDE
USB OTG
Partial
HDMI/DP
Broken
Sensors
Accelerometer
Broken
Ambient Light
Broken
Proximity
Broken
Hall Effect
Works
Haptics
Power Sensor
Works


Contributors

Users owning this device

  • Jja2000 (Notes: Currently trying to get this in a presentable state, have two of these (32GB/64GB))
  • Joshaspinall (Notes: Currently running Lineage Android)
  • Russanandres (Notes: ResurrectionRemix 9)


How to enter flash mode

fastboot

When turned off press and hold the power button and volume down until the bootloader menu displays. Using the volume button select "Switch to fastboot mode" and press the power button.

APX

There seems to be no key combination for entering APX mode. Use these commands instead:

$ pmbootstrap initfs hook_add apx
$ pmbootstrap flasher flash_kernel

This will cause device entering APX on boot

Installation

Installation keeping Android partition table (easy way)

$ pmbootstrap init
$ pmbootstrap install --no-cgpt

Then in fastboot mode:

$ pmbootstrap flasher flash_kernel
$ pmbootstrap flasher flash_rootfs

Installation with repartition and booting from USB (recommended way)

Enable booting from USB

On PC:

$ wget https://dl.google.com/dl/edgedl/chromeos/recovery/chromeos_15183.78.0_trogdor_recovery_stable-channel_mp-v7.bin.zip
$ unzip chromeos_15183.78.0_trogdor_recovery_stable-channel_mp-v7.bin.zip
$ sudo losetup -Pf chromeos_15183.78.0_trogdor_recovery_stable-channel_mp-v7.bin
$ sudo cp $(findfs LABEL=ROOT-A) recovery.img
$ adb push recovery.img /sdcard/recovery.img

On device in adb shell:

$ su # assuming you have root
# cd /sdcard
# mkdir rootdir
# losetup /dev/block/loop0 recovery.img # this may throw an error, but still pass. check blkid command, make sure there is /dev/block/loop0 in the output
# mount -o ro -t ext4 /dev/block/loop0 rootdir
# cd rootdir
# mount -t sysfs /sys sys
# mount -t proc /proc proc
# mount -o bind /dev dev
# mount -t tmpfs -o size=100M tmpfs tmp # for flashrom to avoid read-only fs
# mount -t tmpfs -o size=100M tmpfs run # for crossystem to avoid read-only fs
# mkdir run/lock # crossystem will create /run/lock/crossystem.lock there
# chroot . /bin/bash
# export PATH="$PATH:/usr/sbin:/bin"
# ln -s /dev/mtd/mtd0 /dev/mtd0 # this is needed for crossystem to work with downstream SPI flash driver
# crossystem dev_boot_usb=1 dev_boot_signed_only=0 # this command enables booting from USB

Everything else is the same to Chrome OS devices except that we don't have prebuilt images yet.

Installation to USB storage

Use these commands:

$ pmbootstrap init # select google-smaug
$ pmbootstrap install --sdcard /dev/sdX # replace /dev/sdX with your storage

You can boot from USB with pressing Ctrl + U in bootloader.

Installation to eMMC

Icon WARNING: This part is not tested. Make a backup before attempting this.

Boot pmOS from USB, connect to WiFi and install pmOS on eMMC:

$ sudo apk add pmbootstrap
$ pmbootstrap init # select google-smaug
$ pmbootstrap install --sdcard /dev/mmcblkX # replace X with correct eMMC block device

Mainline Kernel Status

Table of components in the device

Component Model Mainline kernel driver Notes
USB-C - Yes Working in kernel (Only Host mode, see cros-ec)
eMMC - Yes Working in kernel
Battery/Charger Texas Instruments BQ27742 Yes Working in kernel (uses cros-ec-i2c-tunnel)
SoC/General PMIC Maxim MAX77620 Yes Working in kernel
Volume/Power/Home keys GPIO Yes Working in kernel
Keyboard Detection GPIO Yes Working in kernel, needs script to automatically connect to BT device
cros-ec:‎
- Accelerometer‎
- Ambient Light Sensor
- Lightbar
- USB Connector (alerts tegra-xusb/-xudc when modeswitching)

- Bosch BMI160
- Silicon Labs Si114x
- Included in platform driver
- cros-ec-typec
Yes, but see notes cros-ec-i2c (the platformdriver) broke for the Pixel C somewhere inbetween 4.14 and 4.19, needs bisection with UART, none of the mentioned components work
Temperature Sensor Texas Instruments TMP451 Yes Working in kernel fork
Display JDI LPM102A188A Yes Working in kernel
Backlight IC Texas Instruments LP8557 Yes Working in kernel
Audio - NAU8825 (3.5mm)
- RT5677
- MAX98357A (Speaker)
- No, misses tegra specific driver
- Yes
- No, misses tegra specific driver
Needs Tegra specific sound drivers
Touch Screen i2c-hid Yes Working in kernel fork
GPU Nvidia GM20b Yes Loads DE's with the latest mesa, crashes a lot and is not performant. Needs patches or nvk in the future.
GPU PMIC Maxim MAX77621 Yes Working in kernel
Wi-Fi Broadcom BCM4354 Yes Working in kernel
Bluetooth Broadcom BCM43540 Yes Working in kernel
Front camera Sony IMX208 Yes Needs tegravi and nvenc, untested
Main camera Sony IMX219 Yes Needs tegravi and nvenc, untested
Lens actuator (autofocus) Analog Devices AD5823 No Erroneously added to AD5820 driver, doesn't work, got dropped
TPM Infineon SLB9645TT Yes Untested
SPI Flash Chip W25Q64FW/W25Q128FW Yes Untested, contains Coreboot