diff options
Diffstat (limited to 'firmware/drivers/synaptics-rmi.c')
-rw-r--r-- | firmware/drivers/synaptics-rmi.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/firmware/drivers/synaptics-rmi.c b/firmware/drivers/synaptics-rmi.c index c979927fee..1b7cf2f8ef 100644 --- a/firmware/drivers/synaptics-rmi.c +++ b/firmware/drivers/synaptics-rmi.c @@ -25,6 +25,8 @@ static int rmi_cur_page; static int rmi_i2c_addr; +static unsigned char dev_ctl_reg; + /* NOTE: * RMI over i2c supports some special aliases on page 0x2 but this driver don't * use them */ @@ -33,6 +35,7 @@ int rmi_init(int i2c_dev_addr) { rmi_i2c_addr = i2c_dev_addr; rmi_cur_page = 0x4; + dev_ctl_reg = rmi_read_single(RMI_DEVICE_CONTROL); return 0; } @@ -75,3 +78,27 @@ int rmi_write_single(int address, unsigned char byte) { return rmi_write(address, 1, &byte); } + +/* set the device to the given sleep mode */ +void rmi_set_sleep_mode(unsigned char sleep_mode) +{ + /* valid value different from the actual one*/ + if((dev_ctl_reg & RMI_SLEEP_MODE_BM) != sleep_mode) + { + dev_ctl_reg &= ~RMI_SLEEP_MODE_BM; + dev_ctl_reg |= sleep_mode; + rmi_write_single(RMI_DEVICE_CONTROL, dev_ctl_reg); + } +} + +/* set the device's report rate to the given value */ +void rmi_set_report_rate(unsigned char report_rate) +{ + /* valid value different from the actual one*/ + if((dev_ctl_reg & RMI_REPORT_RATE_BM) != report_rate) + { + dev_ctl_reg &= ~RMI_REPORT_RATE_BM; + dev_ctl_reg |= report_rate; + rmi_write_single(RMI_DEVICE_CONTROL, dev_ctl_reg); + } +} |