Lines Matching +full:long +full:- +full:press +full:- +full:mode

1 // SPDX-License-Identifier: GPL-2.0-only
57 u32 rst_lprst_mask; /* Long-press reset timeout bitmask */
167 kregs_home = &regs->keys_regs[MTK_PMIC_HOMEKEY_INDEX]; in mtk_pmic_keys_lp_reset_setup()
168 kregs_pwr = &regs->keys_regs[MTK_PMIC_PWRKEY_INDEX]; in mtk_pmic_keys_lp_reset_setup()
170 error = of_property_read_u32(keys->dev->of_node, "power-off-time-sec", in mtk_pmic_keys_lp_reset_setup()
175 mask = regs->rst_lprst_mask; in mtk_pmic_keys_lp_reset_setup()
176 value = long_press_debounce << (ffs(regs->rst_lprst_mask) - 1); in mtk_pmic_keys_lp_reset_setup()
178 error = of_property_read_u32(keys->dev->of_node, in mtk_pmic_keys_lp_reset_setup()
179 "mediatek,long-press-mode", in mtk_pmic_keys_lp_reset_setup()
186 value |= kregs_home->rst_en_mask; in mtk_pmic_keys_lp_reset_setup()
190 value |= kregs_pwr->rst_en_mask; in mtk_pmic_keys_lp_reset_setup()
194 mask |= kregs_home->rst_en_mask; in mtk_pmic_keys_lp_reset_setup()
195 mask |= kregs_pwr->rst_en_mask; in mtk_pmic_keys_lp_reset_setup()
202 regmap_update_bits(keys->regmap, regs->pmic_rst_reg, mask, value); in mtk_pmic_keys_lp_reset_setup()
210 regmap_read(info->keys->regmap, info->regs->deb_reg, &key_deb); in mtk_pmic_keys_irq_handler_thread()
212 key_deb &= info->regs->deb_mask; in mtk_pmic_keys_irq_handler_thread()
216 input_report_key(info->keys->input_dev, info->keycode, pressed); in mtk_pmic_keys_irq_handler_thread()
217 input_sync(info->keys->input_dev); in mtk_pmic_keys_irq_handler_thread()
219 dev_dbg(info->keys->dev, "(%s) key =%d using PMIC\n", in mtk_pmic_keys_irq_handler_thread()
220 pressed ? "pressed" : "released", info->keycode); in mtk_pmic_keys_irq_handler_thread()
230 info->keys = keys; in mtk_pmic_key_setup()
232 ret = regmap_update_bits(keys->regmap, info->regs->intsel_reg, in mtk_pmic_key_setup()
233 info->regs->intsel_mask, in mtk_pmic_key_setup()
234 info->regs->intsel_mask); in mtk_pmic_key_setup()
238 ret = devm_request_threaded_irq(keys->dev, info->irq, NULL, in mtk_pmic_key_setup()
241 "mtk-pmic-keys", info); in mtk_pmic_key_setup()
243 dev_err(keys->dev, "Failed to request IRQ: %d: %d\n", in mtk_pmic_key_setup()
244 info->irq, ret); in mtk_pmic_key_setup()
248 if (info->irq_r > 0) { in mtk_pmic_key_setup()
249 ret = devm_request_threaded_irq(keys->dev, info->irq_r, NULL, in mtk_pmic_key_setup()
252 "mtk-pmic-keys", info); in mtk_pmic_key_setup()
254 dev_err(keys->dev, "Failed to request IRQ_r: %d: %d\n", in mtk_pmic_key_setup()
255 info->irq, ret); in mtk_pmic_key_setup()
260 input_set_capability(keys->input_dev, EV_KEY, info->keycode); in mtk_pmic_key_setup()
271 if (keys->keys[index].wakeup) { in mtk_pmic_keys_suspend()
272 enable_irq_wake(keys->keys[index].irq); in mtk_pmic_keys_suspend()
273 if (keys->keys[index].irq_r > 0) in mtk_pmic_keys_suspend()
274 enable_irq_wake(keys->keys[index].irq_r); in mtk_pmic_keys_suspend()
287 if (keys->keys[index].wakeup) { in mtk_pmic_keys_resume()
288 disable_irq_wake(keys->keys[index].irq); in mtk_pmic_keys_resume()
289 if (keys->keys[index].irq_r > 0) in mtk_pmic_keys_resume()
290 disable_irq_wake(keys->keys[index].irq_r); in mtk_pmic_keys_resume()
302 .compatible = "mediatek,mt6397-keys",
305 .compatible = "mediatek,mt6323-keys",
308 .compatible = "mediatek,mt6331-keys",
311 .compatible = "mediatek,mt6357-keys",
314 .compatible = "mediatek,mt6358-keys",
317 .compatible = "mediatek,mt6359-keys",
329 struct mt6397_chip *pmic_chip = dev_get_drvdata(pdev->dev.parent); in mtk_pmic_keys_probe()
330 struct device_node *node = pdev->dev.of_node; in mtk_pmic_keys_probe()
337 of_match_device(of_mtk_pmic_keys_match_tbl, &pdev->dev); in mtk_pmic_keys_probe()
339 keys = devm_kzalloc(&pdev->dev, sizeof(*keys), GFP_KERNEL); in mtk_pmic_keys_probe()
341 return -ENOMEM; in mtk_pmic_keys_probe()
343 keys->dev = &pdev->dev; in mtk_pmic_keys_probe()
344 keys->regmap = pmic_chip->regmap; in mtk_pmic_keys_probe()
345 mtk_pmic_regs = of_id->data; in mtk_pmic_keys_probe()
347 keys->input_dev = input_dev = devm_input_allocate_device(keys->dev); in mtk_pmic_keys_probe()
349 dev_err(keys->dev, "input allocate device fail.\n"); in mtk_pmic_keys_probe()
350 return -ENOMEM; in mtk_pmic_keys_probe()
353 input_dev->name = "mtk-pmic-keys"; in mtk_pmic_keys_probe()
354 input_dev->id.bustype = BUS_HOST; in mtk_pmic_keys_probe()
355 input_dev->id.vendor = 0x0001; in mtk_pmic_keys_probe()
356 input_dev->id.product = 0x0001; in mtk_pmic_keys_probe()
357 input_dev->id.version = 0x0001; in mtk_pmic_keys_probe()
362 dev_err(keys->dev, "too many keys defined (%d)\n", keycount); in mtk_pmic_keys_probe()
363 return -EINVAL; in mtk_pmic_keys_probe()
367 keys->keys[index].regs = &mtk_pmic_regs->keys_regs[index]; in mtk_pmic_keys_probe()
369 keys->keys[index].irq = in mtk_pmic_keys_probe()
371 if (keys->keys[index].irq < 0) in mtk_pmic_keys_probe()
372 return keys->keys[index].irq; in mtk_pmic_keys_probe()
374 if (mtk_pmic_regs->key_release_irq) { in mtk_pmic_keys_probe()
375 keys->keys[index].irq_r = platform_get_irq_byname(pdev, in mtk_pmic_keys_probe()
378 if (keys->keys[index].irq_r < 0) in mtk_pmic_keys_probe()
379 return keys->keys[index].irq_r; in mtk_pmic_keys_probe()
383 "linux,keycodes", &keys->keys[index].keycode); in mtk_pmic_keys_probe()
385 dev_err(keys->dev, in mtk_pmic_keys_probe()
391 if (of_property_read_bool(child, "wakeup-source")) in mtk_pmic_keys_probe()
392 keys->keys[index].wakeup = true; in mtk_pmic_keys_probe()
394 error = mtk_pmic_key_setup(keys, &keys->keys[index]); in mtk_pmic_keys_probe()
403 dev_err(&pdev->dev, in mtk_pmic_keys_probe()
418 .name = "mtk-pmic-keys",
428 MODULE_DESCRIPTION("MTK pmic-keys driver v0.1");