Lines Matching full:pwrkey

87 	struct pm8941_pwrkey *pwrkey = container_of(nb, struct pm8941_pwrkey,  in pm8941_reboot_notify()  local
94 if (pwrkey->revision == 0) in pm8941_reboot_notify()
99 error = regmap_update_bits(pwrkey->regmap, in pm8941_reboot_notify()
100 pwrkey->baseaddr + enable_reg, in pm8941_reboot_notify()
104 dev_err(pwrkey->dev, in pm8941_reboot_notify()
128 error = regmap_update_bits(pwrkey->regmap, in pm8941_reboot_notify()
129 pwrkey->baseaddr + PON_PS_HOLD_RST_CTL, in pm8941_reboot_notify()
133 dev_err(pwrkey->dev, "unable to set ps hold reset type: %d\n", in pm8941_reboot_notify()
136 error = regmap_update_bits(pwrkey->regmap, in pm8941_reboot_notify()
137 pwrkey->baseaddr + enable_reg, in pm8941_reboot_notify()
141 dev_err(pwrkey->dev, "unable to re-set enable: %d\n", error); in pm8941_reboot_notify()
148 struct pm8941_pwrkey *pwrkey = _data; in pm8941_pwrkey_irq() local
152 if (pwrkey->sw_debounce_time_us) { in pm8941_pwrkey_irq()
153 if (ktime_before(ktime_get(), pwrkey->sw_debounce_end_time)) { in pm8941_pwrkey_irq()
154 dev_dbg(pwrkey->dev, in pm8941_pwrkey_irq()
156 pwrkey->sw_debounce_end_time); in pm8941_pwrkey_irq()
161 err = regmap_read(pwrkey->regmap, pwrkey->baseaddr + PON_RT_STS, &sts); in pm8941_pwrkey_irq()
165 sts &= pwrkey->data->status_bit; in pm8941_pwrkey_irq()
167 if (pwrkey->sw_debounce_time_us && !sts) in pm8941_pwrkey_irq()
168 pwrkey->sw_debounce_end_time = ktime_add_us(ktime_get(), in pm8941_pwrkey_irq()
169 pwrkey->sw_debounce_time_us); in pm8941_pwrkey_irq()
175 if (!pwrkey->last_status && !sts) { in pm8941_pwrkey_irq()
176 input_report_key(pwrkey->input, pwrkey->code, 1); in pm8941_pwrkey_irq()
177 input_sync(pwrkey->input); in pm8941_pwrkey_irq()
179 pwrkey->last_status = sts; in pm8941_pwrkey_irq()
181 input_report_key(pwrkey->input, pwrkey->code, sts); in pm8941_pwrkey_irq()
182 input_sync(pwrkey->input); in pm8941_pwrkey_irq()
187 static int pm8941_pwrkey_sw_debounce_init(struct pm8941_pwrkey *pwrkey) in pm8941_pwrkey_sw_debounce_init() argument
192 if (pwrkey->data->has_pon_pbs && !pwrkey->pon_pbs_baseaddr) { in pm8941_pwrkey_sw_debounce_init()
193 dev_err(pwrkey->dev, in pm8941_pwrkey_sw_debounce_init()
198 if (pwrkey->pon_pbs_baseaddr) in pm8941_pwrkey_sw_debounce_init()
199 addr = pwrkey->pon_pbs_baseaddr + PON_DBC_CTL; in pm8941_pwrkey_sw_debounce_init()
201 addr = pwrkey->baseaddr + PON_DBC_CTL; in pm8941_pwrkey_sw_debounce_init()
202 error = regmap_read(pwrkey->regmap, addr, &val); in pm8941_pwrkey_sw_debounce_init()
206 if (pwrkey->subtype >= PON_SUBTYPE_GEN2_PRIMARY) in pm8941_pwrkey_sw_debounce_init()
211 pwrkey->sw_debounce_time_us = in pm8941_pwrkey_sw_debounce_init()
214 dev_dbg(pwrkey->dev, "SW debounce time = %u us\n", in pm8941_pwrkey_sw_debounce_init()
215 pwrkey->sw_debounce_time_us); in pm8941_pwrkey_sw_debounce_init()
222 struct pm8941_pwrkey *pwrkey = dev_get_drvdata(dev); in pm8941_pwrkey_suspend() local
225 enable_irq_wake(pwrkey->irq); in pm8941_pwrkey_suspend()
232 struct pm8941_pwrkey *pwrkey = dev_get_drvdata(dev); in pm8941_pwrkey_resume() local
235 disable_irq_wake(pwrkey->irq); in pm8941_pwrkey_resume()
245 struct pm8941_pwrkey *pwrkey; in pm8941_pwrkey_probe() local
263 pwrkey = devm_kzalloc(&pdev->dev, sizeof(*pwrkey), GFP_KERNEL); in pm8941_pwrkey_probe()
264 if (!pwrkey) in pm8941_pwrkey_probe()
267 pwrkey->dev = &pdev->dev; in pm8941_pwrkey_probe()
268 pwrkey->data = of_device_get_match_data(&pdev->dev); in pm8941_pwrkey_probe()
272 pwrkey->regmap = dev_get_regmap(parent, NULL); in pm8941_pwrkey_probe()
273 if (!pwrkey->regmap) { in pm8941_pwrkey_probe()
280 pwrkey->regmap = dev_get_regmap(parent->parent, NULL); in pm8941_pwrkey_probe()
281 if (!pwrkey->regmap) { in pm8941_pwrkey_probe()
292 pwrkey->baseaddr = be32_to_cpup(addr); in pm8941_pwrkey_probe()
294 if (pwrkey->data->has_pon_pbs) { in pm8941_pwrkey_probe()
298 pwrkey->pon_pbs_baseaddr = be32_to_cpup(addr); in pm8941_pwrkey_probe()
301 pwrkey->irq = platform_get_irq(pdev, 0); in pm8941_pwrkey_probe()
302 if (pwrkey->irq < 0) in pm8941_pwrkey_probe()
303 return pwrkey->irq; in pm8941_pwrkey_probe()
305 error = regmap_read(pwrkey->regmap, pwrkey->baseaddr + PON_REV2, in pm8941_pwrkey_probe()
306 &pwrkey->revision); in pm8941_pwrkey_probe()
312 error = regmap_read(pwrkey->regmap, pwrkey->baseaddr + PON_SUBTYPE, in pm8941_pwrkey_probe()
313 &pwrkey->subtype); in pm8941_pwrkey_probe()
320 &pwrkey->code); in pm8941_pwrkey_probe()
324 pwrkey->code = KEY_POWER; in pm8941_pwrkey_probe()
327 pwrkey->input = devm_input_allocate_device(&pdev->dev); in pm8941_pwrkey_probe()
328 if (!pwrkey->input) { in pm8941_pwrkey_probe()
333 input_set_capability(pwrkey->input, EV_KEY, pwrkey->code); in pm8941_pwrkey_probe()
335 pwrkey->input->name = pwrkey->data->name; in pm8941_pwrkey_probe()
336 pwrkey->input->phys = pwrkey->data->phys; in pm8941_pwrkey_probe()
338 if (pwrkey->data->supports_debounce_config) { in pm8941_pwrkey_probe()
342 error = regmap_update_bits(pwrkey->regmap, in pm8941_pwrkey_probe()
343 pwrkey->baseaddr + PON_DBC_CTL, in pm8941_pwrkey_probe()
353 error = pm8941_pwrkey_sw_debounce_init(pwrkey); in pm8941_pwrkey_probe()
357 if (pwrkey->data->pull_up_bit) { in pm8941_pwrkey_probe()
358 error = regmap_update_bits(pwrkey->regmap, in pm8941_pwrkey_probe()
359 pwrkey->baseaddr + PON_PULL_CTL, in pm8941_pwrkey_probe()
360 pwrkey->data->pull_up_bit, in pm8941_pwrkey_probe()
361 pull_up ? pwrkey->data->pull_up_bit : in pm8941_pwrkey_probe()
369 error = devm_request_threaded_irq(&pdev->dev, pwrkey->irq, in pm8941_pwrkey_probe()
372 pwrkey->data->name, pwrkey); in pm8941_pwrkey_probe()
378 error = input_register_device(pwrkey->input); in pm8941_pwrkey_probe()
385 if (pwrkey->data->supports_ps_hold_poff_config) { in pm8941_pwrkey_probe()
386 pwrkey->reboot_notifier.notifier_call = pm8941_reboot_notify; in pm8941_pwrkey_probe()
387 error = register_reboot_notifier(&pwrkey->reboot_notifier); in pm8941_pwrkey_probe()
395 platform_set_drvdata(pdev, pwrkey); in pm8941_pwrkey_probe()
403 struct pm8941_pwrkey *pwrkey = platform_get_drvdata(pdev); in pm8941_pwrkey_remove() local
405 if (pwrkey->data->supports_ps_hold_poff_config) in pm8941_pwrkey_remove()
406 unregister_reboot_notifier(&pwrkey->reboot_notifier); in pm8941_pwrkey_remove()
450 { .compatible = "qcom,pm8941-pwrkey", .data = &pwrkey_data },
452 { .compatible = "qcom,pmk8350-pwrkey", .data = &pon_gen3_pwrkey_data },
462 .name = "pm8941-pwrkey",