touch: Add context based ready checks on init

This commit is contained in:
CTCaer 2020-03-13 17:36:44 +02:00
parent 144d6fd3f6
commit c9c3c8f716
2 changed files with 18 additions and 12 deletions

View file

@ -1,8 +1,8 @@
/* /*
* Touch driver for Nintendo Switch's STMicroelectronics FingerTip touch controller * Touch driver for Nintendo Switch's STM FingerTip S (4cd60d) touch controller
* *
* Copyright (c) 2018 langerhans * Copyright (c) 2018 langerhans
* Copyright (c) 2018 CTCaer * Copyright (c) 2018-2020 CTCaer
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License, * under the terms and conditions of the GNU General Public License,
@ -52,6 +52,18 @@ static int touch_read_reg(u8 *cmd, u32 csize, u8 *buf, u32 size)
return 0; return 0;
} }
static void touch_wait_controller_ready()
{
u32 timeout = get_tmr_ms() + 100;
while (true)
{
u8 tmp = 0;
i2c_recv_buf_small(&tmp, 1, I2C_3, STMFTS_I2C_ADDR, STMFTS_READ_ONE_EVENT);
if (tmp == STMFTS_EV_CONTROLLER_READY || get_tmr_ms() > timeout)
break;
}
}
#define X_REAL_MAX 1264 #define X_REAL_MAX 1264
#define Y_REAL_MAX 704 #define Y_REAL_MAX 704
#define EDGE_OFFSET 15 #define EDGE_OFFSET 15
@ -228,7 +240,7 @@ int touch_power_on()
i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_LDO6_CFG2, i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_LDO6_CFG2,
MAX77620_LDO_CFG2_ADE_ENABLE | (3 << 3) | (MAX77620_POWER_MODE_NORMAL << MAX77620_LDO_POWER_MODE_SHIFT)); MAX77620_LDO_CFG2_ADE_ENABLE | (3 << 3) | (MAX77620_POWER_MODE_NORMAL << MAX77620_LDO_POWER_MODE_SHIFT));
msleep(10); touch_wait_controller_ready();
// Initialize touchscreen module. // Initialize touchscreen module.
u8 cmd[3] = { 0, 0x28, 0x80 }; // System reset cmd. u8 cmd[3] = { 0, 0x28, 0x80 }; // System reset cmd.
@ -236,13 +248,7 @@ int touch_power_on()
return 0; return 0;
msleep(10); msleep(10);
while (true) touch_wait_controller_ready();
{
u8 tmp = 0;
i2c_recv_buf_small(&tmp, 1, I2C_3, STMFTS_I2C_ADDR, STMFTS_READ_ONE_EVENT);
if (tmp == STMFTS_EV_CONTROLLER_READY)
break;
}
cmd[0] = 1; cmd[0] = 1;
if (touch_command(STMFTS_AUTO_CALIBRATION, cmd, 1)) if (touch_command(STMFTS_AUTO_CALIBRATION, cmd, 1))

View file

@ -1,8 +1,8 @@
/* /*
* Touch driver for Nintendo Switch's STMicroelectronics FingerTip S touch controller * Touch driver for Nintendo Switch's STM FingerTip S (4cd60d) touch controller
* *
* Copyright (c) 2018 langerhans * Copyright (c) 2018 langerhans
* Copyright (c) 2018 CTCaer * Copyright (c) 2018-2020 CTCaer
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License, * under the terms and conditions of the GNU General Public License,