mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 19:31:12 +00:00
touch: Proper init
This patch applies the simpler init from HOS driver. The most important change is enabling a feature that the fw supports: Automatic tuning and calibration based on saved tuning values (running HOS only once saves these).
This commit is contained in:
parent
95e3159fe9
commit
8539095bdb
2 changed files with 23 additions and 28 deletions
|
@ -33,14 +33,11 @@
|
||||||
#include "../gfx/gfx.h"
|
#include "../gfx/gfx.h"
|
||||||
#define DPRINTF(...) gfx_printf(__VA_ARGS__)
|
#define DPRINTF(...) gfx_printf(__VA_ARGS__)
|
||||||
|
|
||||||
static int touch_command(u8 cmd)
|
static int touch_command(u8 cmd, u8 *buf, u8 size)
|
||||||
{
|
{
|
||||||
int err = i2c_send_byte(I2C_3, STMFTS_I2C_ADDR, cmd, 0);
|
int res = i2c_send_buf_small(I2C_3, STMFTS_I2C_ADDR, cmd, buf, size);
|
||||||
if (!err)
|
if (!res)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
// TODO: Check for completion in event loop
|
|
||||||
msleep(1);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +97,7 @@ static void _touch_parse_event(touch_event *event)
|
||||||
case STMFTS_EV_MULTI_TOUCH_ENTER:
|
case STMFTS_EV_MULTI_TOUCH_ENTER:
|
||||||
case STMFTS_EV_MULTI_TOUCH_MOTION:
|
case STMFTS_EV_MULTI_TOUCH_MOTION:
|
||||||
_touch_process_contact_event(event, true);
|
_touch_process_contact_event(event, true);
|
||||||
if (event->z > 52 && event->z < 255) // Discard noisy hover touch and palm rest.
|
if (event->z < 255) // Reject palm rest.
|
||||||
event->touch = true;
|
event->touch = true;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -193,31 +190,30 @@ 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(20);
|
msleep(10);
|
||||||
|
|
||||||
// Initialize touchscreen module.
|
// Initialize touchscreen module.
|
||||||
if (touch_command(STMFTS_SYSTEM_RESET))
|
u8 cmd[3] = { 0, 0x28, 0x80 }; // System reset cmd.
|
||||||
|
if (touch_command(STMFTS_WRITE_REG, cmd, 3))
|
||||||
|
return 0;
|
||||||
|
msleep(10);
|
||||||
|
|
||||||
|
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)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd[0] = 1;
|
||||||
|
if (touch_command(STMFTS_AUTO_CALIBRATION, cmd, 1))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (touch_command(STMFTS_SLEEP_OUT))
|
if (touch_command(STMFTS_MS_MT_SENSE_ON, NULL, 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (touch_command(STMFTS_MS_CX_TUNING))
|
if (touch_command(STMFTS_CLEAR_EVENT_STACK, NULL, 0))
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (touch_command(STMFTS_SS_CX_TUNING))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (touch_command(STMFTS_FULL_FORCE_CALIBRATION))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (touch_command(STMFTS_MS_MT_SENSE_ON))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (touch_command(STMFTS_SS_HOVER_SENSE_OFF))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (touch_command(STMFTS_MS_KEY_SENSE_OFF))
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -225,8 +221,6 @@ int touch_power_on()
|
||||||
|
|
||||||
void touch_power_off()
|
void touch_power_off()
|
||||||
{
|
{
|
||||||
touch_command(STMFTS_SLEEP_IN);
|
|
||||||
|
|
||||||
// Disable touchscreen power.
|
// Disable touchscreen power.
|
||||||
gpio_write(GPIO_PORT_J, GPIO_PIN_7, GPIO_LOW);
|
gpio_write(GPIO_PORT_J, GPIO_PIN_7, GPIO_LOW);
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
#define STMFTS_SS_CX_TUNING 0xA4
|
#define STMFTS_SS_CX_TUNING 0xA4
|
||||||
#define STMFTS_RELEASEINFO 0xAA
|
#define STMFTS_RELEASEINFO 0xAA
|
||||||
#define STMFTS_WRITE_REG 0xB6
|
#define STMFTS_WRITE_REG 0xB6
|
||||||
|
#define STMFTS_AUTO_CALIBRATION 0xC3
|
||||||
#define STMFTS_NOISE_WRITE 0xC7
|
#define STMFTS_NOISE_WRITE 0xC7
|
||||||
#define STMFTS_NOISE_READ 0xC8
|
#define STMFTS_NOISE_READ 0xC8
|
||||||
#define STMFTS_RW_FB_REG 0xD0 // read data
|
#define STMFTS_RW_FB_REG 0xD0 // read data
|
||||||
|
|
Loading…
Reference in a new issue