Lines Matching refs:pwrkey

89 	struct pm8941_pwrkey *pwrkey = container_of(nb, struct pm8941_pwrkey,
96 if (pwrkey->revision == 0)
101 error = regmap_update_bits(pwrkey->regmap,
102 pwrkey->baseaddr + enable_reg,
106 dev_err(pwrkey->dev,
130 error = regmap_update_bits(pwrkey->regmap,
131 pwrkey->baseaddr + PON_PS_HOLD_RST_CTL,
135 dev_err(pwrkey->dev, "unable to set ps hold reset type: %d\n",
138 error = regmap_update_bits(pwrkey->regmap,
139 pwrkey->baseaddr + enable_reg,
143 dev_err(pwrkey->dev, "unable to re-set enable: %d\n", error);
150 struct pm8941_pwrkey *pwrkey = _data;
154 if (pwrkey->sw_debounce_time_us) {
155 if (ktime_before(ktime_get(), pwrkey->sw_debounce_end_time)) {
156 dev_dbg(pwrkey->dev,
158 ktime_to_us(pwrkey->sw_debounce_end_time));
163 err = regmap_read(pwrkey->regmap, pwrkey->baseaddr + PON_RT_STS, &sts);
167 sts &= pwrkey->data->status_bit;
169 if (pwrkey->sw_debounce_time_us && !sts)
170 pwrkey->sw_debounce_end_time = ktime_add_us(ktime_get(),
171 pwrkey->sw_debounce_time_us);
177 if (!pwrkey->last_status && !sts) {
178 input_report_key(pwrkey->input, pwrkey->code, 1);
179 input_sync(pwrkey->input);
181 pwrkey->last_status = sts;
183 input_report_key(pwrkey->input, pwrkey->code, sts);
184 input_sync(pwrkey->input);
189 static int pm8941_pwrkey_sw_debounce_init(struct pm8941_pwrkey *pwrkey)
194 if (pwrkey->data->has_pon_pbs && !pwrkey->pon_pbs_baseaddr) {
195 dev_err(pwrkey->dev,
200 if (pwrkey->pon_pbs_baseaddr)
201 addr = pwrkey->pon_pbs_baseaddr + PON_DBC_CTL;
203 addr = pwrkey->baseaddr + PON_DBC_CTL;
204 error = regmap_read(pwrkey->regmap, addr, &val);
208 if (pwrkey->subtype >= PON_SUBTYPE_GEN2_PRIMARY)
213 pwrkey->sw_debounce_time_us =
216 dev_dbg(pwrkey->dev, "SW debounce time = %u us\n",
217 pwrkey->sw_debounce_time_us);
224 struct pm8941_pwrkey *pwrkey = dev_get_drvdata(dev);
227 enable_irq_wake(pwrkey->irq);
234 struct pm8941_pwrkey *pwrkey = dev_get_drvdata(dev);
237 disable_irq_wake(pwrkey->irq);
247 struct pm8941_pwrkey *pwrkey;
265 pwrkey = devm_kzalloc(&pdev->dev, sizeof(*pwrkey), GFP_KERNEL);
266 if (!pwrkey)
269 pwrkey->dev = &pdev->dev;
270 pwrkey->data = of_device_get_match_data(&pdev->dev);
274 pwrkey->regmap = dev_get_regmap(parent, NULL);
275 if (!pwrkey->regmap) {
282 pwrkey->regmap = dev_get_regmap(parent->parent, NULL);
283 if (!pwrkey->regmap) {
294 pwrkey->baseaddr = be32_to_cpup(addr);
296 if (pwrkey->data->has_pon_pbs) {
300 pwrkey->pon_pbs_baseaddr = be32_to_cpup(addr);
303 pwrkey->irq = platform_get_irq(pdev, 0);
304 if (pwrkey->irq < 0)
305 return pwrkey->irq;
307 error = regmap_read(pwrkey->regmap, pwrkey->baseaddr + PON_REV2,
308 &pwrkey->revision);
314 error = regmap_read(pwrkey->regmap, pwrkey->baseaddr + PON_SUBTYPE,
315 &pwrkey->subtype);
322 &pwrkey->code);
326 pwrkey->code = KEY_POWER;
329 pwrkey->input = devm_input_allocate_device(&pdev->dev);
330 if (!pwrkey->input) {
335 input_set_capability(pwrkey->input, EV_KEY, pwrkey->code);
337 pwrkey->input->name = pwrkey->data->name;
338 pwrkey->input->phys = pwrkey->data->phys;
340 if (pwrkey->data->supports_debounce_config) {
341 if (pwrkey->subtype >= PON_SUBTYPE_GEN2_PRIMARY) {
352 error = regmap_update_bits(pwrkey->regmap,
353 pwrkey->baseaddr + PON_DBC_CTL,
363 error = pm8941_pwrkey_sw_debounce_init(pwrkey);
367 if (pwrkey->data->pull_up_bit) {
368 error = regmap_update_bits(pwrkey->regmap,
369 pwrkey->baseaddr + PON_PULL_CTL,
370 pwrkey->data->pull_up_bit,
371 pull_up ? pwrkey->data->pull_up_bit :
379 error = devm_request_threaded_irq(&pdev->dev, pwrkey->irq,
382 pwrkey->data->name, pwrkey);
388 error = input_register_device(pwrkey->input);
395 if (pwrkey->data->supports_ps_hold_poff_config) {
396 pwrkey->reboot_notifier.notifier_call = pm8941_reboot_notify;
397 error = register_reboot_notifier(&pwrkey->reboot_notifier);
405 platform_set_drvdata(pdev, pwrkey);
413 struct pm8941_pwrkey *pwrkey = platform_get_drvdata(pdev);
415 if (pwrkey->data->supports_ps_hold_poff_config)
416 unregister_reboot_notifier(&pwrkey->reboot_notifier);
458 { .compatible = "qcom,pm8941-pwrkey", .data = &pwrkey_data },
460 { .compatible = "qcom,pmk8350-pwrkey", .data = &pon_gen3_pwrkey_data },
470 .name = "pm8941-pwrkey",