Lines Matching refs:pwrcdrv
31 static int sirfsoc_pwrc_is_on_key_down(struct sirfsoc_pwrc_drvdata *pwrcdrv) in sirfsoc_pwrc_is_on_key_down() argument
33 u32 state = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base + in sirfsoc_pwrc_is_on_key_down()
40 struct sirfsoc_pwrc_drvdata *pwrcdrv = in sirfsoc_pwrc_report_event() local
43 if (sirfsoc_pwrc_is_on_key_down(pwrcdrv)) { in sirfsoc_pwrc_report_event()
44 schedule_delayed_work(&pwrcdrv->work, in sirfsoc_pwrc_report_event()
47 input_event(pwrcdrv->input, EV_KEY, KEY_POWER, 0); in sirfsoc_pwrc_report_event()
48 input_sync(pwrcdrv->input); in sirfsoc_pwrc_report_event()
54 struct sirfsoc_pwrc_drvdata *pwrcdrv = dev_id; in sirfsoc_pwrc_isr() local
57 int_status = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base + in sirfsoc_pwrc_isr()
60 pwrcdrv->pwrc_base + PWRC_INT_STATUS); in sirfsoc_pwrc_isr()
62 input_event(pwrcdrv->input, EV_KEY, KEY_POWER, 1); in sirfsoc_pwrc_isr()
63 input_sync(pwrcdrv->input); in sirfsoc_pwrc_isr()
64 schedule_delayed_work(&pwrcdrv->work, in sirfsoc_pwrc_isr()
70 static void sirfsoc_pwrc_toggle_interrupts(struct sirfsoc_pwrc_drvdata *pwrcdrv, in sirfsoc_pwrc_toggle_interrupts() argument
75 int_mask = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base + PWRC_INT_MASK); in sirfsoc_pwrc_toggle_interrupts()
80 sirfsoc_rtc_iobrg_writel(int_mask, pwrcdrv->pwrc_base + PWRC_INT_MASK); in sirfsoc_pwrc_toggle_interrupts()
85 struct sirfsoc_pwrc_drvdata *pwrcdrv = input_get_drvdata(input); in sirfsoc_pwrc_open() local
87 sirfsoc_pwrc_toggle_interrupts(pwrcdrv, true); in sirfsoc_pwrc_open()
94 struct sirfsoc_pwrc_drvdata *pwrcdrv = input_get_drvdata(input); in sirfsoc_pwrc_close() local
96 sirfsoc_pwrc_toggle_interrupts(pwrcdrv, false); in sirfsoc_pwrc_close()
97 cancel_delayed_work_sync(&pwrcdrv->work); in sirfsoc_pwrc_close()
109 struct sirfsoc_pwrc_drvdata *pwrcdrv; in sirfsoc_pwrc_probe() local
113 pwrcdrv = devm_kzalloc(&pdev->dev, sizeof(struct sirfsoc_pwrc_drvdata), in sirfsoc_pwrc_probe()
115 if (!pwrcdrv) { in sirfsoc_pwrc_probe()
124 error = of_property_read_u32(np, "reg", &pwrcdrv->pwrc_base); in sirfsoc_pwrc_probe()
131 pwrcdrv->input = devm_input_allocate_device(&pdev->dev); in sirfsoc_pwrc_probe()
132 if (!pwrcdrv->input) in sirfsoc_pwrc_probe()
135 pwrcdrv->input->name = "sirfsoc pwrckey"; in sirfsoc_pwrc_probe()
136 pwrcdrv->input->phys = "pwrc/input0"; in sirfsoc_pwrc_probe()
137 pwrcdrv->input->evbit[0] = BIT_MASK(EV_KEY); in sirfsoc_pwrc_probe()
138 input_set_capability(pwrcdrv->input, EV_KEY, KEY_POWER); in sirfsoc_pwrc_probe()
140 INIT_DELAYED_WORK(&pwrcdrv->work, sirfsoc_pwrc_report_event); in sirfsoc_pwrc_probe()
142 pwrcdrv->input->open = sirfsoc_pwrc_open; in sirfsoc_pwrc_probe()
143 pwrcdrv->input->close = sirfsoc_pwrc_close; in sirfsoc_pwrc_probe()
145 input_set_drvdata(pwrcdrv->input, pwrcdrv); in sirfsoc_pwrc_probe()
148 sirfsoc_pwrc_toggle_interrupts(pwrcdrv, false); in sirfsoc_pwrc_probe()
153 "sirfsoc_pwrc_int", pwrcdrv); in sirfsoc_pwrc_probe()
160 error = input_register_device(pwrcdrv->input); in sirfsoc_pwrc_probe()
168 dev_set_drvdata(&pdev->dev, pwrcdrv); in sirfsoc_pwrc_probe()
176 struct sirfsoc_pwrc_drvdata *pwrcdrv = dev_get_drvdata(dev); in sirfsoc_pwrc_resume() local
177 struct input_dev *input = pwrcdrv->input; in sirfsoc_pwrc_resume()
185 sirfsoc_pwrc_toggle_interrupts(pwrcdrv, true); in sirfsoc_pwrc_resume()