I'm attempting to add support for a Broadcom 4752 GNSS chip which is built into my tablet. The tablet is running debian sid with a custom 4.10 kernel with a patch for a bug for c-state problems with the intel atom chips. I plan to use this thread as a means to document what I have accomplished and as a means to get input from others on their thoughts on how to proceed.
Background information
The GPS device works under windows 8.1 and windows 10. As the link above says, the device uses wifi, cell towers, and satellites to get its location. It will work without an
internet connection. I was able to test this under windows. Android has a driver for this particular chip. I could not find the source code, only a binary blob. I was able to find it at this link https://techtablets.com/wpfb-file/x98-a ... icial-rar/. Again, it is only a binary blob. I could not find the source, and have not been able to go through the file to find out who made it yet.
My ACPI lists a GPS. The relevant portion is
Code: Select all
Device (URT2)
{
Name (_ADR, Zero) // _ADR: Address
Name (_HID, "80860F0A" /* Intel Atom UART Controller */) // _HID: Hardware ID
Name (_CID, "80860F0A" /* Intel Atom UART Controller */) // _CID: Compatible ID
Name (_DDN, "Intel(R) HS-UART Controller #2 - 80860F0C") // _DDN: DOS Device Name
Name (_UID, 0x02) // _UID: Unique ID
Name (_DEP, Package (0x01) // _DEP: Dependencies
{
PEPD
})
Name (RBUF, ResourceTemplate ()
{
Memory32Fixed (ReadWrite,
0x00000000, // Address Base
0x00001000, // Address Length
_Y16)
Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
{
0x00000028,
}
FixedDMA (0x0004, 0x0004, Width32bit, )
FixedDMA (0x0005, 0x0005, Width32bit, )
})
Method (_HRV, 0, NotSerialized) // _HRV: Hardware Revision
{
Return (SOCS) /* \SOCS */
}
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
CreateDWordField (RBUF, \_SB.URT2._Y16._BAS, B0BA) // _BAS: Base Address
CreateDWordField (RBUF, \_SB.URT2._Y16._LEN, B0LN) // _LEN: Length
B0BA = U20A /* \U20A */
B0LN = U20L /* \U20L */
Return (RBUF) /* \_SB_.URT2.RBUF */
}
Method (_STA, 0, NotSerialized) // _STA: Status
{
If ((U20A == Zero) || (L14D == One))
{
Return (Zero)
}
Return (0x0F)
}
Method (_PS3, 0, NotSerialized) // _PS3: Power State 3
{
PSAT |= 0x03
Local0 = PSAT /* \_SB_.URT2.PSAT */
}
Method (_PS0, 0, NotSerialized) // _PS0: Power State 0
{
PSAT &= 0xFFFFFFFC
Local0 = PSAT /* \_SB_.URT2.PSAT */
}
OperationRegion (KEYS, SystemMemory, U21A, 0x0100)
Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
{
Offset (0x84),
PSAT, 32
}
Device (GPS0)
{
Name (_HID, "TOS4752") // _HID: Hardware ID
Name (_HRV, 0x0A00) // _HRV: Hardware Revision
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (BTOI & One)
{
If (SKUI == Zero)
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}
Return (0x0F)
}
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Name (UBUF, ResourceTemplate ()
{
UartSerialBusV2 (0x0001C200, DataBitsEight, StopBitsOne,
0xFC, LittleEndian, ParityTypeNone, FlowControlHardware,
0x0020, 0x0020, "\\_SB.URT2",
0x00, ResourceConsumer, , Exclusive,
)
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, IoRestrictionOutputOnly,
"\\_SB.GPO0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0036
}
})
Return (UBUF) /* \_SB_.URT2.GPS0._CRS.UBUF */
}
}
}
Code: Select all
echo "464" > /sys/class/gpio/export
Code: Select all
echo "1" > /sys/class/gpio/gpio464/value
EDIT: More info
I missed in the HWINFO files these lines
Code: Select all
P: /devices/platform/80860F0A:01/TOS4752:00
E: DEVPATH=/devices/platform/80860F0A:01/TOS4752:00
E: ID_VENDOR_FROM_DATABASE=Toshiba Corporation
E: MODALIAS=acpi:TOS4752:
E: SUBSYSTEM=platform
E: USEC_INITIALIZED=20443037
P: /devices/platform/80860F0A:01/tty/ttyS2
N: ttyS2
E: DEVNAME=/dev/ttyS2
E: DEVPATH=/devices/platform/80860F0A:01/tty/ttyS2
E: ID_MM_CANDIDATE=1
E: MAJOR=4
E: MINOR=66
E: SUBSYSTEM=tty
E: TAGS=:systemd:
E: USEC_INITIALIZED=20458604