diff --git a/arch/arm/boot/dts/qcom/msm-pmi8994.dtsi b/arch/arm/boot/dts/qcom/msm-pmi8994.dtsi index 76dde833f6893..a6e857e63423e 100644 --- a/arch/arm/boot/dts/qcom/msm-pmi8994.dtsi +++ b/arch/arm/boot/dts/qcom/msm-pmi8994.dtsi @@ -521,7 +521,7 @@ qcom,qpnp-lab-min-voltage = <4600000>; qcom,qpnp-lab-step-size = <100000>; - qcom,qpnp-lab-slew-rate = <5000>; + qcom,qpnp-lab-slew-rate = <2000>; qcom,qpnp-lab-use-default-voltage; qcom,qpnp-lab-init-voltage = <5500000>; qcom,qpnp-lab-init-amoled-voltage = <4600000>; diff --git a/block/tripndroid-iosched.c b/block/tripndroid-iosched.c index 54ac0fdefa248..b23da3e67e3d5 100644 --- a/block/tripndroid-iosched.c +++ b/block/tripndroid-iosched.c @@ -24,14 +24,13 @@ enum { ASYNC, SYNC }; -static const int sync_read_expire = 1 * HZ; /* max time before a sync read is submitted. */ -static const int sync_write_expire = 1 * HZ; /* max time before a sync write is submitted. */ -static const int async_read_expire = 2 * HZ; /* ditto for async, these limits are SOFT! */ -static const int async_write_expire = 2 * HZ; /* ditto for async, these limits are SOFT! */ +static const int sync_read_expire = HZ / 3; /* max time before a sync read is submitted. */ +static const int sync_write_expire = 2 * HZ; /* max time before a sync write is submitted. */ +static const int async_read_expire = HZ / 6; /* ditto for async, these limits are SOFT! */ +static const int async_write_expire = 4 * HZ; /* ditto for async, these limits are SOFT! */ static const int writes_starved = 1; /* max times reads can starve a write */ -static const int fifo_batch = 1; /* # of sequential requests treated as one - by the above parameters. For throughput. */ +static const int fifo_batch = 16; /* sequential requests treated as one, for throughput. */ struct tripndroid_data { @@ -92,20 +91,18 @@ static struct request *tripndroid_choose_expired_request(struct tripndroid_data { struct request *rq; - /* Asynchronous requests have priority over synchronous. - * Write requests have priority over read. */ - - rq = tripndroid_expired_request(td, ASYNC, WRITE); + /* synchronous priority over asynchronous, write priority over read. */ + rq = tripndroid_expired_request(td, SYNC, WRITE); if (rq) return rq; - rq = tripndroid_expired_request(td, ASYNC, READ); + rq = tripndroid_expired_request(td, SYNC, READ); if (rq) return rq; - rq = tripndroid_expired_request(td, SYNC, WRITE); + rq = tripndroid_expired_request(td, ASYNC, WRITE); if (rq) return rq; - rq = tripndroid_expired_request(td, SYNC, READ); + rq = tripndroid_expired_request(td, ASYNC, READ); if (rq) return rq; diff --git a/drivers/gpu/msm/adreno_a4xx.c b/drivers/gpu/msm/adreno_a4xx.c index 195e14e872d66..0fe8314def7cf 100644 --- a/drivers/gpu/msm/adreno_a4xx.c +++ b/drivers/gpu/msm/adreno_a4xx.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved. +/* Copyright (c) 2013-2015,2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -714,7 +714,7 @@ static void a4xx_start(struct adreno_device *adreno_dev) set_bit(ADRENO_DEVICE_HANG_INTR, &adreno_dev->priv); gpudev->irq->mask |= (1 << A4XX_INT_MISC_HANG_DETECT); kgsl_regwrite(device, A4XX_RBBM_INTERFACE_HANG_INT_CTL, - (1 << 30) | 0xFFFF); + (1 << 30) | 0x1FFFF); /* Set the GMEM/OCMEM base address for A4XX */ kgsl_regwrite(device, A4XX_RB_GMEM_BASE_ADDR, diff --git a/drivers/input/misc/fpc1020_tee.c b/drivers/input/misc/fpc1020_tee.c index 26a929ef0b98c..dc5f02d08d6a5 100755 --- a/drivers/input/misc/fpc1020_tee.c +++ b/drivers/input/misc/fpc1020_tee.c @@ -930,7 +930,7 @@ static void set_fingerprintd_nice(int nice) read_lock(&tasklist_lock); for_each_process(p) { - if (!memcmp(p->comm, "fingerprintd", 13)) { + if (!memcmp(p->comm, "fingerprint@2.0", 16) || !memcmp(p->comm, "fingerprintd", 13)) { set_user_nice(p, nice); break; } @@ -963,12 +963,16 @@ static int fb_notifier_callback(struct notifier_block *self, unsigned long event if (event != FB_EARLY_EVENT_BLANK) return 0; - if (*blank == FB_BLANK_UNBLANK) { - fpc1020->screen_state = 1; - queue_work(system_highpri_wq, &fpc1020->pm_work); - } else if (*blank == FB_BLANK_POWERDOWN) { - fpc1020->screen_state = 0; - queue_work(system_highpri_wq, &fpc1020->pm_work); + switch (*blank) { + case FB_BLANK_UNBLANK: + case FB_BLANK_VSYNC_SUSPEND: + fpc1020->screen_state = 1; + queue_work(system_highpri_wq, &fpc1020->pm_work); + break; + case FB_BLANK_POWERDOWN: + fpc1020->screen_state = 0; + queue_work(system_highpri_wq, &fpc1020->pm_work); + break; } return 0; diff --git a/kernel/power/process.c b/kernel/power/process.c index d1ccce3cfee8e..f7dcc2a55e86f 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -212,6 +212,26 @@ int freeze_kernel_threads(void) return error; } +void thaw_fingerprintd(void) +{ + struct task_struct *p; + + pm_freezing = false; + pm_nosig_freezing = false; + + read_lock(&tasklist_lock); + for_each_process(p) { + if (!memcmp(p->comm, "fingerprint@2.0", 16) || !memcmp(p->comm, "fingerprintd", 13)) { + __thaw_task(p); + break; + } + } + read_unlock(&tasklist_lock); + + pm_freezing = true; + pm_nosig_freezing = true; +} + void thaw_processes(void) { struct task_struct *g, *p; diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index c9821251d28ab..dcb10fe4804e5 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -48,6 +48,8 @@ static bool need_suspend_ops(suspend_state_t state) static DECLARE_WAIT_QUEUE_HEAD(suspend_freeze_wait_head); static bool suspend_freeze_wake; +extern void thaw_fingerprintd(void); + static void freeze_begin(void) { suspend_freeze_wake = false; @@ -252,6 +254,8 @@ static int suspend_enter(suspend_state_t state, bool *wakeup) if (need_suspend_ops(state) && suspend_ops->wake) suspend_ops->wake(); + thaw_fingerprintd(); + dpm_resume_start(PMSG_RESUME); Platform_finish: