Lines Matching +full:0 +full:- +full:pwrkey
1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
16 #define PON_CNTL_1 0x1C
18 #define PON_CNTL_TRIG_DELAY_MASK (0x7)
19 #define PON_CNTL_1_PULL_UP_EN 0xe0
20 #define PON_CNTL_1_USB_PWR_EN 0x10
21 #define PON_CNTL_1_WD_EN_RESET 0x08
23 #define PM8058_SLEEP_CTRL 0x02b
24 #define PM8921_SLEEP_CTRL 0x10a
26 #define SLEEP_CTRL_SMPL_EN_RESET 0x04
29 #define REG_PM8058_VREG_EN_MSM 0x018
30 #define REG_PM8058_VREG_EN_GRP_5_4 0x1c8
33 #define PM8058_S0_CTRL 0x004
34 #define PM8058_S1_CTRL 0x005
35 #define PM8058_S3_CTRL 0x111
36 #define PM8058_L21_CTRL 0x120
37 #define PM8058_L22_CTRL 0x121
39 #define PM8058_REGULATOR_ENABLE_MASK 0x80
40 #define PM8058_REGULATOR_ENABLE 0x80
41 #define PM8058_REGULATOR_DISABLE 0x00
42 #define PM8058_REGULATOR_PULL_DOWN_MASK 0x40
43 #define PM8058_REGULATOR_PULL_DOWN_EN 0x40
46 #define PM8058_SMPS_LEGACY_VREF_SEL 0x20
47 #define PM8058_SMPS_LEGACY_VPROG_MASK 0x1f
48 #define PM8058_SMPS_ADVANCED_BAND_MASK 0xC0
50 #define PM8058_SMPS_ADVANCED_VPROG_MASK 0x3f
53 #define PM8058_S0_TEST2 0x084
54 #define PM8058_S1_TEST2 0x085
55 #define PM8058_S3_TEST2 0x11a
57 #define PM8058_REGULATOR_BANK_WRITE 0x80
58 #define PM8058_REGULATOR_BANK_MASK 0x70
63 #define PM8058_SMPS_LEGACY_VLOW_SEL 0x01
66 #define PM8058_SMPS_ADVANCED_MODE_MASK 0x02
67 #define PM8058_SMPS_ADVANCED_MODE 0x02
68 #define PM8058_SMPS_LEGACY_MODE 0x00
71 * struct pmic8xxx_pwrkey - pmic8xxx pwrkey information
96 input_report_key(pwr, KEY_POWER, 0); in pwrkey_release_irq()
104 struct pmic8xxx_pwrkey *pwrkey = dev_get_drvdata(dev); in pmic8xxx_pwrkey_suspend() local
107 enable_irq_wake(pwrkey->key_press_irq); in pmic8xxx_pwrkey_suspend()
109 return 0; in pmic8xxx_pwrkey_suspend()
114 struct pmic8xxx_pwrkey *pwrkey = dev_get_drvdata(dev); in pmic8xxx_pwrkey_resume() local
117 disable_irq_wake(pwrkey->key_press_irq); in pmic8xxx_pwrkey_resume()
119 return 0; in pmic8xxx_pwrkey_resume()
127 struct pmic8xxx_pwrkey *pwrkey = platform_get_drvdata(pdev); in pmic8xxx_pwrkey_shutdown() local
132 if (pwrkey->shutdown_fn) { in pmic8xxx_pwrkey_shutdown()
133 error = pwrkey->shutdown_fn(pwrkey, reset); in pmic8xxx_pwrkey_shutdown()
149 regmap_update_bits(pwrkey->regmap, PON_CNTL_1, mask, val); in pmic8xxx_pwrkey_shutdown()
187 vref_sel = 0; in pm8058_disable_smps_locally_set_pull_down()
188 vlow_sel = 0; in pm8058_disable_smps_locally_set_pull_down()
192 vlow_sel = 0; in pm8058_disable_smps_locally_set_pull_down()
200 return -EPERM; in pm8058_disable_smps_locally_set_pull_down()
279 static int pm8058_pwrkey_shutdown(struct pmic8xxx_pwrkey *pwrkey, bool reset) in pm8058_pwrkey_shutdown() argument
282 struct regmap *regmap = pwrkey->regmap; in pm8058_pwrkey_shutdown()
287 /* Disable SMPS's 0,1,3 locally and set pulldown enable bits. */ in pm8058_pwrkey_shutdown()
304 * Fix-up: Set regulator LDO22 to 1.225 V in high power mode. Leave its in pm8058_pwrkey_shutdown()
305 * pull-down state intact. This ensures a safe shutdown. in pm8058_pwrkey_shutdown()
307 error = regmap_update_bits(regmap, PM8058_L22_CTRL, 0xbf, 0x93); in pm8058_pwrkey_shutdown()
313 val = 0; in pm8058_pwrkey_shutdown()
319 static int pm8921_pwrkey_shutdown(struct pmic8xxx_pwrkey *pwrkey, bool reset) in pm8921_pwrkey_shutdown() argument
321 struct regmap *regmap = pwrkey->regmap; in pm8921_pwrkey_shutdown()
323 u8 val = 0; in pm8921_pwrkey_shutdown()
334 int key_release_irq = platform_get_irq(pdev, 0); in pmic8xxx_pwrkey_probe()
340 struct pmic8xxx_pwrkey *pwrkey; in pmic8xxx_pwrkey_probe() local
344 if (of_property_read_u32(pdev->dev.of_node, "debounce", &kpd_delay)) in pmic8xxx_pwrkey_probe()
349 dev_err(&pdev->dev, "invalid power key trigger delay\n"); in pmic8xxx_pwrkey_probe()
350 return -EINVAL; in pmic8xxx_pwrkey_probe()
353 pull_up = of_property_read_bool(pdev->dev.of_node, "pull-up"); in pmic8xxx_pwrkey_probe()
355 regmap = dev_get_regmap(pdev->dev.parent, NULL); in pmic8xxx_pwrkey_probe()
357 dev_err(&pdev->dev, "failed to locate regmap for the device\n"); in pmic8xxx_pwrkey_probe()
358 return -ENODEV; in pmic8xxx_pwrkey_probe()
361 pwrkey = devm_kzalloc(&pdev->dev, sizeof(*pwrkey), GFP_KERNEL); in pmic8xxx_pwrkey_probe()
362 if (!pwrkey) in pmic8xxx_pwrkey_probe()
363 return -ENOMEM; in pmic8xxx_pwrkey_probe()
365 pwrkey->shutdown_fn = of_device_get_match_data(&pdev->dev); in pmic8xxx_pwrkey_probe()
366 pwrkey->regmap = regmap; in pmic8xxx_pwrkey_probe()
367 pwrkey->key_press_irq = key_press_irq; in pmic8xxx_pwrkey_probe()
369 pwr = devm_input_allocate_device(&pdev->dev); in pmic8xxx_pwrkey_probe()
371 dev_dbg(&pdev->dev, "Can't allocate power button\n"); in pmic8xxx_pwrkey_probe()
372 return -ENOMEM; in pmic8xxx_pwrkey_probe()
377 pwr->name = "pmic8xxx_pwrkey"; in pmic8xxx_pwrkey_probe()
378 pwr->phys = "pmic8xxx_pwrkey/input0"; in pmic8xxx_pwrkey_probe()
384 if (err < 0) { in pmic8xxx_pwrkey_probe()
385 dev_err(&pdev->dev, "failed reading PON_CNTL_1 err=%d\n", err); in pmic8xxx_pwrkey_probe()
397 if (err < 0) { in pmic8xxx_pwrkey_probe()
398 dev_err(&pdev->dev, "failed writing PON_CNTL_1 err=%d\n", err); in pmic8xxx_pwrkey_probe()
402 err = devm_request_irq(&pdev->dev, key_press_irq, pwrkey_press_irq, in pmic8xxx_pwrkey_probe()
406 dev_err(&pdev->dev, "Can't get %d IRQ for pwrkey: %d\n", in pmic8xxx_pwrkey_probe()
411 err = devm_request_irq(&pdev->dev, key_release_irq, pwrkey_release_irq, in pmic8xxx_pwrkey_probe()
415 dev_err(&pdev->dev, "Can't get %d IRQ for pwrkey: %d\n", in pmic8xxx_pwrkey_probe()
422 dev_err(&pdev->dev, "Can't register power key: %d\n", err); in pmic8xxx_pwrkey_probe()
426 platform_set_drvdata(pdev, pwrkey); in pmic8xxx_pwrkey_probe()
427 device_init_wakeup(&pdev->dev, 1); in pmic8xxx_pwrkey_probe()
429 return 0; in pmic8xxx_pwrkey_probe()
433 { .compatible = "qcom,pm8058-pwrkey", .data = &pm8058_pwrkey_shutdown },
434 { .compatible = "qcom,pm8921-pwrkey", .data = &pm8921_pwrkey_shutdown },
443 .name = "pm8xxx-pwrkey",