motorola/kernel/modules/drivers/input/misc/fpc_fps_mmi/fpc1020_tee.c:
Change device_create() calling to device_create_with_groups() calling.
To make KOBJ_ADD uevent to be aware of sysfs node creating,
device_create_with_groups() but not device_create() should be called.
Change-Id: Idc85caedc7ad770791b893f4c4d65753e2e9b1c6
Reviewed-on: https://gerrit.mot.com/1352027
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Jialei Hao <haojl2@motorola.com>
Reviewed-by: Guobin Zhang <zhanggb@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1356391
Reviewed-by: Jianqi Yang <yangj@motorola.com>
This sys entry shows current fingerprint vendor.
This info is useful if multi fingerprint vendor exist in one product.
Change-Id: I77a97745802c30bb319ed3b62fc222101f6ac6ff
Signed-off-by: haojl2 <haojl2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1340583
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1322013
As fingerprint HAL need read and write fpc1020 sys entries, so those
sys entries need change owner and group to system.
If DLKM is used, after rmmod and insmod fpc1020 kernel module again,
owner and group will be root again for those sys entries.
One way to fix this is set those sys entries owner and group in
uevent.rc.
uevent.rc need be triggered by a device add uevent. So create a
fingerprint class device and move original sys entries to a class device
Change-Id: I890eb93a616973e2a454be0fea494206c066cc25
Signed-off-by: haojl2 <haojl2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1340582
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1318460
moto touch firmware update need some sys entries to accomplish this work
Add those entries.
Change-Id: Ib6789e04ba888f9ee53b7cbc00abe981b8f707c8
Signed-off-by: haojl2 <haojl2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1346254
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Jun Weng <wengjun1@motorola.com>
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1356397
Add touchscreen class sys entries.
Those entries contains IC info, which is used by FW upload
and CQA test.
Change-Id: Ie599eb3974ebc0e1ff8df1b14e25acc9b52172a6
Signed-off-by: haojl2 <haojl2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1342368
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1356395
If FOCALTECH_TOUCH_IC_NAME defined in device.mk, use this to select
different IC.
Default option is ft8719
Change-Id: I9ef108d26d1fc8aae8f63f7d2b65fff0680633e9
Signed-off-by: haojl2 <haojl2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1341266
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1356394
This issue is due to the race between power_supply_changed()
and smb_mmi_power_supply_changed().
First, power_supply_changed() holds the battery wakelock and
releases the wakelock if battery supply change work is scheduled.
And then, qpnp-smbcharger-mmi driver set the supply changed flag
to be true, call smb_mmi_power_supply_changed() and wait for
battery supply change work completion, where it does not release
the wakelock as the supply changed flag becomes true.
Finally, the battery wakelock will not be released any more.
Change-Id: I57f4728cb6510acce004d5d84489695035c10eaf
Signed-off-by: Yonghua Yan <yanyh2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1357520
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
NXP patch to fix (CR)
Issue description:
No sound issue has been found in handheld mode
in one of Moto Projects, SurfNa project(tfa9871,
driver code Ver6.5.0). About 1/600 chance
root cause:
If set SBSL=1, the AMPE usually can be AMPE=1 automatically.
But sometimes can’t be set AMPE=1 by itself.
So AMPE must be set to 1 manually in code.
Dependency on automatic AMPE setting is not a wise way.
In driver 6.5.0, there’s no code to set AMPE during profile switch,
but boot up sequence has already been added.
Solution:
Add AMPE=1 operation in profile switching
Change-Id: I3de27e826d39c93f2d011d0f9d8fe9877e8efc89
Signed-off-by: guoyf2 <guoyf2@lenovo.com>
Reviewed-on: https://gerrit.mot.com/1358094
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Zhengming Yao <yaozm1@lenovo.com>
Reviewed-by: Xiangpo Zhao <zhaoxp3@motorola.com>
Submit-Approved: Jira Key
Cirrus has their own code release branch. and these branches are
not compatible each other. audio team can't branch off motorola
kernel modules
Note: cs4012 and msm-cirrus-playback had not beeen moved away.
Change-Id: Ib14bf3c5a5cfaa9c363a59c4ba0f871e11e9c92a
Signed-off-by: huangys <huangys@motorola.com>
Reviewed-on: https://gerrit.mot.com/1350673
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Guobin Zhang <zhanggb@motorola.com>
Submit-Approved: Jira Key
Thermal Engine uses the charge_control_limit to trigger
the charge mitigation, so set it to be writable.
Mot-CRs-fixed: (CR)
Change-Id: Ie529b0969c46afcfb190c5524fe862059522385c
Signed-off-by: Yonghua Yan <yanyh2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1353035
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1355886
There is no need to do boost reverse recovery if the usbin
has already been in suspend state.
Meanwhile, this avoids the incorrect usbin suspend state
being written back after boost reverse recovery if usbin is
in suspend state before boost reverse recovery through
force_chg_suspend in factory test.
Mot-CRs-fixed: (CR)
Change-Id: Id172860862482d4f9e19505320e854b17a7610ce
Signed-off-by: Yonghua Yan <yanyh2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1352348
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1355885
If use QC battery as the "battery" supply, the sysfs nodes charger_rate
and age will have no way to access the mmi smbcharger chip struct, as
it can only obtain the QC battery supply driver data.
Mot-CRs-fixed: (CR)
Change-Id: I6388c1bd951ee3aa9288c8dda15602f72b275dd3
Signed-off-by: Yonghua Yan <yanyh2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1346435
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Huosheng Liao <liaohs@motorola.com>
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1355883
Use force voter for factory FCC and ICL configuration during
factory test in case the configuration is overridden by SMB5
charger driver.
Mot-CRs-fixed: (CR)
Change-Id: I8647b42b6ca420a02312198fb56c7ee09edfbde3
Signed-off-by: Yonghua Yan <yanyh2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1345281
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Huosheng Liao <liaohs@motorola.com>
Reviewed-by: Haijian Ma <mahj8@motorola.com>
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1355881
The heartbeat_work breaks and output error log when accesses
the DCIN status register for presence detection.
As the DCIN is not supported in PMI632 chip and the address
at 0x14XX is undefined, so it return -ENODEV when access it.
So for PMI632 chip, just consider it as successful with data
0 returned for DCIN presence check.
Mot-CRs-fixed: (CR)
Change-Id: Id459296ec20bb679e1803b820be1bd288a1cdc75
Signed-off-by: Yonghua Yan <yanyh2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1342040
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1355879
When the System Suspends the running last reported SOC needs to
be reset. The reason is that the SOC could have moved a large
amount while sleeping. The curretn SOC needs to be recalculated
so that the changes is noticable to the User upon wakeup.
To do this keep track of the Suspend state as well as the fact
that the heartbeat has not run yet after a Suspend. The
WAS_SUSPEND bit will track this and then be cleared once the
heartbeat gets past the point that the information is not longer
needed. For Dual Batteries, this will force the last_reported_soc
to be updated with the current calculation rather then trying
to Monotonically adjust it slowly.
Change-Id: I0de830df74720f0f26f8f7a7cfcba7698f6a6dd6
Signed-off-by: Kenny Kessler <kenny.kessler@motorola.com>
Reviewed-on: https://gerrit.mot.com/1355819
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Curtis Porter <porterc@motorola.com>
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
root cause:
incorrect NXP AMPE reg value when power on
fix:
if AMPE==0 and PWDN ==0, force set AMPE value to 1
Change-Id: Ib7605261b76cac3238b5fa23a7d74a091f0b5ffd
Signed-off-by: guoyf2 <guoyf2@lenovo.com>
Reviewed-on: https://gerrit.mot.com/1356869
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Yunfei Guo <guoyf2@motorola.com>
Reviewed-by: Zhengming Yao <yaozm1@lenovo.com>
Reviewed-by: Xiangpo Zhao <zhaoxp3@motorola.com>
Submit-Approved: Jira Key
Add a kcontorl for the Noise Generator sample rate select.
Patch came from vendor (Cirrus).
Mot-CRs-fixed: (CR): approach won't work with youtube in background
Change-Id: If4dc2ec707e679da23e31740bf071d3e1f7d311a
Signed-off-by: Paul Handrigan <Paul.Handrigan@cirrus.com>
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
SLTApproved: Slta Waiver
Reviewed-by: Konstantin Makariev <kmakariev@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1354957
Change the device id of a part to the device name.
Patch came from vendor (Cirrus).
Mot-CRs-fixed: (CR): approach won't work with youtube in background
Change-Id: I6ca0f03da34bffe4025b49d5e1913b03c4b9a70e
Signed-off-by: Paul Handrigan <Paul.Handrigan@cirrus.com>
Tested-by: Jira Key
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Reviewed-by: Konstantin Makariev <kmakariev@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1354956
Change the dsp firmware control to switch AoU and AoU concurrent
firmware.
Patch came from vendor (Cirrus).
Mot-CRs-fixed: (CR): approach won't work with youtube in background
Change-Id: I8822e02f8b4aa229dee187c89297f43e4c111e0f
Signed-off-by: Paul Handrigan <Paul.Handrigan@cirrus.com>
Tested-by: Jira Key
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Reviewed-by: Konstantin Makariev <kmakariev@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1354954
Add enum to select the rate for the Noise Generator.
Patch came from vendor (Cirrus).
Mot-CRs-fixed: (CR): approach won't work with youtube in background
Change-Id: I056bc0eb204d5f3feef61ee7066cc5b4c59427a6
Signed-off-by: Paul Handrigan <Paul.Handrigan@cirrus.com>
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Konstantin Makariev <kmakariev@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1354953
At power-up the USB should be suspended for 50 ms to clear
any issues that might have occurred during boot. This will
be handled in the probe when NOT in factory mode. Stability
racks are reporting discharged batteries and the cause appears
to be ICL is at minimum before probe occurs. This should allow
for a clean start on each boot.
Change-Id: I66817f5a74f8161fbf1c3023c42ae72e994d8fa2
Signed-off-by: Kenny Kessler <kenny.kessler@motorola.com>
Reviewed-on: https://gerrit.mot.com/1349801
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Curtis Porter <porterc@motorola.com>
Reviewed-by: Ryan Lattrel <ryanl@motorola.com>
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
Always log touch events while running in factory mode. This will
allow for easier debugging of factory issues.
Change-Id: I348164021d590e40751ba3c456245c3349a4d53a
Signed-off-by: Konstantin Makariev <hcv867@motorola.com>
Reviewed-on: https://gerrit.mot.com/1347015
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Konstantin Makariev <kmakariev@motorola.com>
Submit-Approved: Jira Key
When FW upgrade happens, regmap might change. This makes access
to test reporting invalid and thus DLKM needs to reload. However,
if touch IC's power state does not allow successful I2C
communications, DLKM will never properly initialize. This change
introdices 2 things:
* waiting for valid power state to load DLKM
* new state "loading" that allows to hold on power state change
during DLKM load
Note: It has been evaluated for test reporting DLKM only at this
time. Long term it would need to apply to all DLKMs.
Change-Id: I86f1ab6b815053e499b01a655fccf517d1e9addc
Signed-off-by: Konstantin Makariev <hcv867@motorola.com>
Reviewed-on: https://gerrit.mot.com/1346820
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Konstantin Makariev <kmakariev@motorola.com>
Submit-Approved: Jira Key
- send tfa cal just on speaker mode.
if set tfa cal on handset mode, algorithm no ready,
afe_callback will return fail
and set this_afe.status to 1,
once other modules want to get the status at the same time,
will get the fail status.
the call on handset screne,
open capture pcm low probality to get the status
at the same time, so open capture pcm fail,cause call no sound.
so send tfa cal just on speaker mode.
nxp smart pa is bypass on handset mode.
Change-Id: Ib977fc68d48931d8617ec4339dc5494da9986ca4
Signed-off-by: liaohj <liaohj@lenovo.com>
Reviewed-on: https://gerrit.mot.com/1339597
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Wanlong Zhou <zhouwl@motorola.com>
Reviewed-by: Hujun Liao <liaohj@motorola.com>
Submit-Approved: Jira Key
Demo Mode was a pending feature on MOD 5G and Olson. This patch
allows it to work on both devices, as well as being compatible with
any other device that uses this same driver.
Change-Id: I99f117485faf27a01890c6433a6ece77ab755cfd
Signed-off-by: cmsantos <cmsantos@motorola.com>
Reviewed-on: https://gerrit.mot.com/1281220
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
The DC ICL needs to be set via the DTS entry. Also the Charge
current when the source is DC should be lower so use a default
500 mA rate.
Change-Id: I7f04e1601b657cf3a4ff58614b309426026c150a
Signed-off-by: Kenny Kessler <kenny.kessler@motorola.com>
Reviewed-on: https://gerrit.mot.com/1337904
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Ryan Lattrel <ryanl@motorola.com>
Reviewed-by: Cesar Augusto Marcelino dos Santos <cmsantos@motorola.com>
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
In the constant current charging stage, we made a power compensation
strategy to improve the charging efficiency.
this patch is for optimize the power compensation strategy, so that
it can avoid the disturbance of thermal mitigation policy.
and it can help improve the accuracy of the battery fuel gauge
Change-Id: I404f63da75c93ca409b6bb5c7d581f62ba415f6c
Signed-off-by: xuwt2 <xuwt2@lenovo.com>
Reviewed-on: https://gerrit.mot.com/1336218
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
State machine needed to indicate DRM panel states. This fixes
unloading of DLKM.
Change-Id: I8093337c3890f8e76dd4b3b7290cc8e311d245d1
Signed-off-by: Konstantin Makariev <hcv867@motorola.com>
Reviewed-on: https://gerrit.mot.com/1330943
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Konstantin Makariev <kmakariev@motorola.com>
Submit-Approved: Jira Key
Added missing conditions to discover F54 control registers up to
F54_ANALOG_Ctrl269 BSC calibration. There are still few gaps, but
even the latest RMI4 specification provides no info on how they
could be discovered. Tested on s7813 and s3601 touch ICs.
Change-Id: I0995ea7bb2a1a24766cc8ce250b65582a99db73e
Signed-off-by: Konstantin Makariev <hcv867@motorola.com>
Reviewed-on: https://gerrit.mot.com/1326957
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Konstantin Makariev <kmakariev@motorola.com>
Submit-Approved: Jira Key
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
Add a check against both batteries in a dual configuration
for a low voltage condition. This will drive the SOC to 0% so that
the System Voltage does not get too low.
Change-Id: I70353eeef6b12b25e2d48b181efe00327d1dedb1
Signed-off-by: Kenny Kessler <kenny.kessler@motorola.com>
Reviewed-on: https://gerrit.mot.com/1322360
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
Count the Cycles in the battery so that tracking can be done.
This will help with adjusting charge parameters as cycles
increase.
Change-Id: I737ff91f71f41e671e785a7cef370586fcedb7f0
Signed-off-by: Kenny Kessler <kenny.kessler@motorola.com>
Reviewed-on: https://gerrit.mot.com/1322359
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
The Initialization of some undocuemnted registers is wrong.
Fix this so that the correct encoding and conversions are used.
The latest maxim supplied spec sheets state that 0x46 should be 0xC80
and that 0x45 should be 1/16th of FullCapNom. Also it seems that
it should be 1/16th of the Register FullCapNom not the actual mAh.
To do this the Rsense conversion will be applied prior to writing.
Change-Id: Ica801e4f57e7070c4b56b87cd45f607b40ea5530
Signed-off-by: Kenny Kessler <kenny.kessler@motorola.com>
Reviewed-on: https://gerrit.mot.com/1322357
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Ryan Lattrel <ryanl@motorola.com>
Reviewed-by: Ling Jin <lingjin@motorola.com>
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Reviewed-by: Curtis Porter <porterc@motorola.com>
Submit-Approved: Jira Key
Add the POWER_SUPPLY_CHARGE_NOW property to the power supply
and report RepCap. This will allow easier tracking of the
FCC calculation being done in the driver.
Change-Id: I9299ed0430308651578d943fe7379bbe62de6b38
Signed-off-by: Kenny Kessler <kenny.kessler@motorola.com>
Reviewed-on: https://gerrit.mot.com/1321620
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Ryan Lattrel <ryanl@motorola.com>
Reviewed-by: Curtis Porter <porterc@motorola.com>
Reviewed-by: Ling Jin <lingjin@motorola.com>
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
If charger is inserted in factory mode disable factory mode charging
Set the Votables back to OFF (0) wen this happens so that any previous
Force to set Factory mode charging is overridden.
Change-Id: Id7b88a098d890c8705cbf03ebdec628de396d4fd
Signed-off-by: Kenny Kessler <kenny.kessler@motorola.com>
Reviewed-on: https://gerrit.mot.com/1325224
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key