Lines Matching refs:ec_dev
56 struct cros_ec_device *ec_dev = data; in ec_irq_thread() local
60 ret = cros_ec_get_next_event(ec_dev, &wake_event); in ec_irq_thread()
67 if (wake_event && device_may_wakeup(ec_dev->dev)) in ec_irq_thread()
68 pm_wakeup_event(ec_dev->dev, 0); in ec_irq_thread()
71 blocking_notifier_call_chain(&ec_dev->event_notifier, in ec_irq_thread()
72 0, ec_dev); in ec_irq_thread()
76 static int cros_ec_sleep_event(struct cros_ec_device *ec_dev, u8 sleep_event) in cros_ec_sleep_event() argument
91 return cros_ec_cmd_xfer(ec_dev, &buf.msg); in cros_ec_sleep_event()
94 int cros_ec_register(struct cros_ec_device *ec_dev) in cros_ec_register() argument
96 struct device *dev = ec_dev->dev; in cros_ec_register()
99 BLOCKING_INIT_NOTIFIER_HEAD(&ec_dev->event_notifier); in cros_ec_register()
101 ec_dev->max_request = sizeof(struct ec_params_hello); in cros_ec_register()
102 ec_dev->max_response = sizeof(struct ec_response_get_protocol_info); in cros_ec_register()
103 ec_dev->max_passthru = 0; in cros_ec_register()
105 ec_dev->din = devm_kzalloc(dev, ec_dev->din_size, GFP_KERNEL); in cros_ec_register()
106 if (!ec_dev->din) in cros_ec_register()
109 ec_dev->dout = devm_kzalloc(dev, ec_dev->dout_size, GFP_KERNEL); in cros_ec_register()
110 if (!ec_dev->dout) in cros_ec_register()
113 mutex_init(&ec_dev->lock); in cros_ec_register()
115 err = cros_ec_query_all(ec_dev); in cros_ec_register()
121 if (ec_dev->irq) { in cros_ec_register()
122 err = devm_request_threaded_irq(dev, ec_dev->irq, NULL, in cros_ec_register()
124 "chromeos-ec", ec_dev); in cros_ec_register()
127 ec_dev->irq, err); in cros_ec_register()
132 err = mfd_add_devices(ec_dev->dev, PLATFORM_DEVID_AUTO, &ec_cell, 1, in cros_ec_register()
133 NULL, ec_dev->irq, NULL); in cros_ec_register()
141 if (ec_dev->max_passthru) { in cros_ec_register()
150 err = mfd_add_devices(ec_dev->dev, PLATFORM_DEVID_AUTO, in cros_ec_register()
151 &ec_pd_cell, 1, NULL, ec_dev->irq, NULL); in cros_ec_register()
173 err = cros_ec_sleep_event(ec_dev, 0); in cros_ec_register()
175 dev_dbg(ec_dev->dev, "Error %d clearing sleep event to ec", in cros_ec_register()
184 int cros_ec_remove(struct cros_ec_device *ec_dev) in cros_ec_remove() argument
186 mfd_remove_devices(ec_dev->dev); in cros_ec_remove()
193 int cros_ec_suspend(struct cros_ec_device *ec_dev) in cros_ec_suspend() argument
195 struct device *dev = ec_dev->dev; in cros_ec_suspend()
203 ret = cros_ec_sleep_event(ec_dev, sleep_event); in cros_ec_suspend()
205 dev_dbg(ec_dev->dev, "Error %d sending suspend event to ec", in cros_ec_suspend()
209 ec_dev->wake_enabled = !enable_irq_wake(ec_dev->irq); in cros_ec_suspend()
211 disable_irq(ec_dev->irq); in cros_ec_suspend()
212 ec_dev->was_wake_device = ec_dev->wake_enabled; in cros_ec_suspend()
213 ec_dev->suspended = true; in cros_ec_suspend()
219 static void cros_ec_report_events_during_suspend(struct cros_ec_device *ec_dev) in cros_ec_report_events_during_suspend() argument
221 while (cros_ec_get_next_event(ec_dev, NULL) > 0) in cros_ec_report_events_during_suspend()
222 blocking_notifier_call_chain(&ec_dev->event_notifier, in cros_ec_report_events_during_suspend()
223 1, ec_dev); in cros_ec_report_events_during_suspend()
226 int cros_ec_resume(struct cros_ec_device *ec_dev) in cros_ec_resume() argument
231 ec_dev->suspended = false; in cros_ec_resume()
232 enable_irq(ec_dev->irq); in cros_ec_resume()
238 ret = cros_ec_sleep_event(ec_dev, sleep_event); in cros_ec_resume()
240 dev_dbg(ec_dev->dev, "Error %d sending resume event to ec", in cros_ec_resume()
243 if (ec_dev->wake_enabled) { in cros_ec_resume()
244 disable_irq_wake(ec_dev->irq); in cros_ec_resume()
245 ec_dev->wake_enabled = 0; in cros_ec_resume()
251 cros_ec_report_events_during_suspend(ec_dev); in cros_ec_resume()