On Wed, Mar 30, 2016 at 12:03:13AM +0000, sergk sergk2mail wrote:
Hi Mika,
full acpidump of the machine is located here
https://gitlab.com/SergK/icn8528/blob/master/DSDT/dsdt.dsl
OK, so there is only one touchscreen device and it has _STA method
looking like this:
Method (_STA, 0, NotSerialized) // _STA: Status
{
If ((OSSL & 0x80))
{
Return (Zero)
}
My guess is that that OSSL variable tells if the machine is in Android
or Windows mode or something like that. In your case it returns zero
here.
quoted
From Android:
"What does 'ls -l /sys/bus/i2c/devices' show under android?"
1) sysi2cdev /sys/bus/i2c/devices
https://gitlab.com/SergK/icn8528/blob/master/Androiddata/sysi2cdev
And this explains why Android works. It initializes the I2C devices
directly from a board file.
So what you are doing probably works but instead of hardcoding in the
driver you can fill i2c_board_info from "platform specific" files like
for example here:
arch/x86/platform/intel-mid/device_libs/platform_mpu3050.c
Translating the _CRS from ACPI TCS5 device it might look like:
static const struct i2c_hid_platform_data pdata = {
.hid_descriptor_address = 3, // from _DSM
};
static const struct i2c_board_info my_board_info[] = {
{
I2C_BOARD_INFO("hid", 0x30"),
.irq = 0x44,
.platform_data = &pdata,
},
};
static int __init my_init(void)
{
i2c_register_board_info(3, my_board_info, ARRAY_SIZE(my_board_info));
}
arch_initcall(my_init);
This should create new i2c device for i2c-hid.c.