Lines Matching refs:pwrcdrv
32 static int sirfsoc_pwrc_is_on_key_down(struct sirfsoc_pwrc_drvdata *pwrcdrv) in sirfsoc_pwrc_is_on_key_down() argument
34 u32 state = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base + in sirfsoc_pwrc_is_on_key_down()
41 struct sirfsoc_pwrc_drvdata *pwrcdrv = in sirfsoc_pwrc_report_event() local
44 if (sirfsoc_pwrc_is_on_key_down(pwrcdrv)) { in sirfsoc_pwrc_report_event()
45 schedule_delayed_work(&pwrcdrv->work, in sirfsoc_pwrc_report_event()
48 input_event(pwrcdrv->input, EV_KEY, KEY_POWER, 0); in sirfsoc_pwrc_report_event()
49 input_sync(pwrcdrv->input); in sirfsoc_pwrc_report_event()
55 struct sirfsoc_pwrc_drvdata *pwrcdrv = dev_id; in sirfsoc_pwrc_isr() local
58 int_status = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base + in sirfsoc_pwrc_isr()
61 pwrcdrv->pwrc_base + PWRC_INT_STATUS); in sirfsoc_pwrc_isr()
63 input_event(pwrcdrv->input, EV_KEY, KEY_POWER, 1); in sirfsoc_pwrc_isr()
64 input_sync(pwrcdrv->input); in sirfsoc_pwrc_isr()
65 schedule_delayed_work(&pwrcdrv->work, in sirfsoc_pwrc_isr()
71 static void sirfsoc_pwrc_toggle_interrupts(struct sirfsoc_pwrc_drvdata *pwrcdrv, in sirfsoc_pwrc_toggle_interrupts() argument
76 int_mask = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base + PWRC_INT_MASK); in sirfsoc_pwrc_toggle_interrupts()
81 sirfsoc_rtc_iobrg_writel(int_mask, pwrcdrv->pwrc_base + PWRC_INT_MASK); in sirfsoc_pwrc_toggle_interrupts()
86 struct sirfsoc_pwrc_drvdata *pwrcdrv = input_get_drvdata(input); in sirfsoc_pwrc_open() local
88 sirfsoc_pwrc_toggle_interrupts(pwrcdrv, true); in sirfsoc_pwrc_open()
95 struct sirfsoc_pwrc_drvdata *pwrcdrv = input_get_drvdata(input); in sirfsoc_pwrc_close() local
97 sirfsoc_pwrc_toggle_interrupts(pwrcdrv, false); in sirfsoc_pwrc_close()
98 cancel_delayed_work_sync(&pwrcdrv->work); in sirfsoc_pwrc_close()
110 struct sirfsoc_pwrc_drvdata *pwrcdrv; in sirfsoc_pwrc_probe() local
114 pwrcdrv = devm_kzalloc(&pdev->dev, sizeof(struct sirfsoc_pwrc_drvdata), in sirfsoc_pwrc_probe()
116 if (!pwrcdrv) { in sirfsoc_pwrc_probe()
125 error = of_property_read_u32(np, "reg", &pwrcdrv->pwrc_base); in sirfsoc_pwrc_probe()
132 pwrcdrv->input = devm_input_allocate_device(&pdev->dev); in sirfsoc_pwrc_probe()
133 if (!pwrcdrv->input) in sirfsoc_pwrc_probe()
136 pwrcdrv->input->name = "sirfsoc pwrckey"; in sirfsoc_pwrc_probe()
137 pwrcdrv->input->phys = "pwrc/input0"; in sirfsoc_pwrc_probe()
138 pwrcdrv->input->evbit[0] = BIT_MASK(EV_KEY); in sirfsoc_pwrc_probe()
139 input_set_capability(pwrcdrv->input, EV_KEY, KEY_POWER); in sirfsoc_pwrc_probe()
141 INIT_DELAYED_WORK(&pwrcdrv->work, sirfsoc_pwrc_report_event); in sirfsoc_pwrc_probe()
143 pwrcdrv->input->open = sirfsoc_pwrc_open; in sirfsoc_pwrc_probe()
144 pwrcdrv->input->close = sirfsoc_pwrc_close; in sirfsoc_pwrc_probe()
146 input_set_drvdata(pwrcdrv->input, pwrcdrv); in sirfsoc_pwrc_probe()
149 sirfsoc_pwrc_toggle_interrupts(pwrcdrv, false); in sirfsoc_pwrc_probe()
154 "sirfsoc_pwrc_int", pwrcdrv); in sirfsoc_pwrc_probe()
161 error = input_register_device(pwrcdrv->input); in sirfsoc_pwrc_probe()
169 dev_set_drvdata(&pdev->dev, pwrcdrv); in sirfsoc_pwrc_probe()
184 struct sirfsoc_pwrc_drvdata *pwrcdrv = dev_get_drvdata(dev); in sirfsoc_pwrc_resume() local
185 struct input_dev *input = pwrcdrv->input; in sirfsoc_pwrc_resume()
193 sirfsoc_pwrc_toggle_interrupts(pwrcdrv, true); in sirfsoc_pwrc_resume()