mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 13:49:24 -04:00
synaptics_mmi: enforced page selection
Driver contains performance improvement algorithm allowing to avoid unnecessary page selection transactions by "remembering" the last accessed page. However, mixed types of communications used in factory "breaks" this algorithm and causes access to a wrong page. This change allows to enforce page selection in certain functions used by factory. Change-Id: I72c0bf76a3428234645103404372455b42356ae1 Signed-off-by: Konstantin Makariev <hcv867@motorola.com> Reviewed-on: https://gerrit.mot.com/1326865 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Konstantin Makariev <kmakariev@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
cb24c8041a
commit
ccfb048ca4
3 changed files with 11 additions and 3 deletions
|
|
@ -4116,13 +4116,20 @@ static int synaptics_rmi4_set_page(struct synaptics_rmi4_data *rmi4_data,
|
|||
unsigned int address)
|
||||
{
|
||||
int retval = 0;
|
||||
bool enforce_page_select = false;
|
||||
unsigned char retry;
|
||||
unsigned char buf[PAGE_SELECT_LEN];
|
||||
unsigned char page;
|
||||
struct i2c_client *i2c = rmi4_data->i2c_client;
|
||||
|
||||
if (address & PAGE_SELECT_ENFORCE) {
|
||||
enforce_page_select = true;
|
||||
dev_dbg(&i2c->dev, "%s: Enforced page select\n", __func__);
|
||||
address &= ~PAGE_SELECT_ENFORCE;
|
||||
}
|
||||
|
||||
page = ((address >> 8) & MASK_8BIT);
|
||||
if (page != rmi4_data->current_page) {
|
||||
if (page != rmi4_data->current_page || enforce_page_select) {
|
||||
buf[0] = MASK_8BIT;
|
||||
buf[1] = page;
|
||||
for (retry = 0; retry < SYN_I2C_RETRY_TIMES; retry++) {
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@
|
|||
#define PDT_ENTRY_SIZE (0x0006)
|
||||
#define PAGES_TO_SERVICE (10)
|
||||
#define PAGE_SELECT_LEN (2)
|
||||
#define PAGE_SELECT_ENFORCE (0x8000)
|
||||
|
||||
#define SYNAPTICS_RMI4_F01 (0x01)
|
||||
#define SYNAPTICS_RMI4_F11 (0x11)
|
||||
|
|
|
|||
|
|
@ -518,7 +518,7 @@ show_store_replicated_func(rtype, rgrp, propname, "%u")
|
|||
dev_dbg(&rmi4_data->i2c_client->dev,\
|
||||
"%s: c%s addr = 0x%02x added (%d)\n",\
|
||||
__func__, #reg, reg_addr, reg_num);\
|
||||
control->reg_##reg->address = reg_addr;\
|
||||
control->reg_##reg->address = reg_addr | PAGE_SELECT_ENFORCE;\
|
||||
reg_addr += skip;\
|
||||
} \
|
||||
reg_num++;\
|
||||
|
|
@ -538,7 +538,7 @@ show_store_replicated_func(rtype, rgrp, propname, "%u")
|
|||
"%s: c%s addr = 0x%02x size = %zu added (%d)\n",\
|
||||
__func__, #reg, reg_addr, size, reg_num);\
|
||||
control->reg_##reg->length = size;\
|
||||
control->reg_##reg->address = reg_addr;\
|
||||
control->reg_##reg->address = reg_addr | PAGE_SELECT_ENFORCE;\
|
||||
reg_addr += skip;\
|
||||
} \
|
||||
reg_num++;\
|
||||
|
|
|
|||
Loading…
Reference in a new issue