Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
I2C Devices which can be found in the Surface RT
i2c-0 i2c 7000c000.i2c I2C adapter - LVDS DDC (according to cardhu devicetree) - access on J14 i2c-1 i2c 7000c400.i2c I2C adapter - daughter board (touch controller; touch/typeCover) - access MAYBE on DaughterBoard Testpoints i2c-2 i2c 7000c500.i2c I2C adapter - nothing - dont care i2c-3 i2c 7000c700.i2c I2C adapter - HDMI DDC - Via HDMI-port i2c-4 i2c 7000d000.i2c I2C adapter - PMIC - not found :(
I2C addresses on Bus - 0: 0x00; 0x28 - 1: 0x2D; 0x39; 0x5B - 2: - 3: depends on HDMI display - 4: 0x0A; 0x1A; 0x2D; 0x4A; 0x4C; 0x60
related to Surface Home Buttone Driver
Cypress touch sensor config?? MSP430??
I2C Bus
Access to I2C Bus 0 can be found on J14.
https://en.wikipedia.org/wiki/Extended_Display_Identification_Data
HID over I2C
Address: 0x28
Bus speed: 400kHz
HID_Descriptor: 0x0001
ACPI Device: SNMU
Technical information about Type/Touch Covers for Surface RT/2
HID over I2C
Address: 0x00
Bus speed: 400kHz
HID_Descriptor: 0x0041
ACPI Device: SNMU
Power:
Bridge IC: PMIC.REG1: 1.8V
tCover Power: PMIC.REG3: 2.8V
HID Interrupt: O5 Hotplug Interrupt: S0
The tCover I2C address is 0x00. This address is reserved for general call
.
Linux doesn't allow I2C Slaves to use this address therefore the I2C driver must be patched to allow 0x00 as valid Slave address.
i2c-hotplug-gpio
is a grate driver and doesn't work in mainline.
Cover
Generation
VendorID / hex
ProductID / hex
Touch
1
045E
079A
Type
1
045E
079C
Touch
2
045E
07A7
Type
2
045E
07A9
Power
1
045E - tbc
07DA - tbc
Normal I2c
Address: 0x0A
Surface RT uses the Embedded Controller Topology. The controller is located at 0xa.
That means that there must be an IC somewhere which interacts with the Charger and the Fuelgauge and provide an interface to both of them to the SoC.
The Charger and the Fuelgauge are exposed through 0xa which provides an ACPI interface.
The ACPI BAT0
device deals with the Fuelgauge.
The ACPI ADP0
device deals with the Charger.
The ACPI methods like _BIX, _BTS, ... provide all the necessary information about the battery and the charger.
They can be decrypted by reading the ACPI Spec p. 492 10.2 Control Method Batteries
https://wiki.ubuntu.com/Kernel/Reference/Battery "(Control Method) Batteries and ACPI are tied together in quite a complex way. Generally, the battery state information is transmitted over a SMBUS bus to the embedded controller, a.k.a. EC, which in turn interfaces to the OS via ACPI methods. These methods can interrogate the embedded controller for battery state information ..."
Battery <-- EC <--> BIOS ACPI Methods <--> OS
Since there is no ACPI implementation for ARM32 and we need to replace the ACPI Methods with a custom driver. all Necessary information can be found in the SSDT0000 ACPI table
The Embedded Controller directly interacts with the Charger and the Fuelgauge.
BQ28400
https://www.ti.com/lit/ug/sluu431/sluu431.pdf https://www.ti.com/lit/ds/symlink/bq28400.pdf?ts=1625607689401&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FBQ28400
BQ24725A
The Embedded Controller topology prevents the use of SmartBatterySystem (SBS) and requires an ACPI or custom driver. ACPI isn't (fully) implemented on ARM32 therefore we need a custom driver which resembels the ACPI methods.
https://uefi.org/sites/default/files/resources/ACPI_5_0_Errata_B.pdf
HID over I2C
Address: 0x5b
Bus speed: 400kHz
HID_Descriptor: 0x0000
ACPI Device: TOUA
http://ww1.microchip.com/downloads/en/DeviceDoc/mXT1386E_2v4_Datasheet_BX.pdf
ACPI tells that the device TOUA uses I2C-2@400kHz with an address of 0x5b
HID Interrupt: K2
Normal I2C
Address: 0x1A
https://statics.cirrus.com/pubs/proDatasheet/WM8962_Rev4.4.pdf
The I2C address seems to be 0x34 but that's the 8 Bit address. Shift the address 1 to the right (>>1) and you get 0x1A as 7Bit address
Wolfson WM7220 Microphones
PMIC or Power Managment IC (PMIC) is an IC that contains a lot of regulators which power the CPU, Sensors and other components of Surface RT
SMBus SBS
Address: 0x4C
https://www.onsemi.com/pdf/datasheet/nct1008-d.pdf
The Slave address and the ManufacturerID register do match. + This sensor is also found on Cardhu.
To be confirmed
Normal I2C
Address: 0x?
Bus speed: 400kHz
ACPI Device: ?
https://kionixfs.kionix.com/en/document/KXTJ9%20Sell%20Sheet.pdf