Lines Matching refs:device

33 static int mei_cl_device_match(struct device *dev, struct device_driver *drv)  in mei_cl_device_match()
35 struct mei_cl_device *device = to_mei_cl_device(dev); in mei_cl_device_match() local
39 if (!device) in mei_cl_device_match()
57 static int mei_cl_device_probe(struct device *dev) in mei_cl_device_probe()
59 struct mei_cl_device *device = to_mei_cl_device(dev); in mei_cl_device_probe() local
63 if (!device) in mei_cl_device_probe()
74 return driver->probe(device, &id); in mei_cl_device_probe()
77 static int mei_cl_device_remove(struct device *dev) in mei_cl_device_remove()
79 struct mei_cl_device *device = to_mei_cl_device(dev); in mei_cl_device_remove() local
82 if (!device || !dev->driver) in mei_cl_device_remove()
85 if (device->event_cb) { in mei_cl_device_remove()
86 device->event_cb = NULL; in mei_cl_device_remove()
87 cancel_work_sync(&device->event_work); in mei_cl_device_remove()
97 return driver->remove(device); in mei_cl_device_remove()
100 static ssize_t modalias_show(struct device *dev, struct device_attribute *a, in modalias_show()
117 static int mei_cl_uevent(struct device *dev, struct kobj_uevent_env *env) in mei_cl_uevent()
134 static void mei_cl_dev_release(struct device *dev) in mei_cl_dev_release()
159 struct mei_cl_device *device; in mei_cl_add_device() local
167 device = kzalloc(sizeof(struct mei_cl_device), GFP_KERNEL); in mei_cl_add_device()
168 if (!device) in mei_cl_add_device()
171 device->cl = cl; in mei_cl_add_device()
172 device->ops = ops; in mei_cl_add_device()
174 device->dev.parent = dev->dev; in mei_cl_add_device()
175 device->dev.bus = &mei_cl_bus_type; in mei_cl_add_device()
176 device->dev.type = &mei_cl_device_type; in mei_cl_add_device()
178 dev_set_name(&device->dev, "%s", name); in mei_cl_add_device()
180 status = device_register(&device->dev); in mei_cl_add_device()
183 kfree(device); in mei_cl_add_device()
187 cl->device = device; in mei_cl_add_device()
189 dev_dbg(&device->dev, "client %s registered\n", name); in mei_cl_add_device()
191 return device; in mei_cl_add_device()
195 void mei_cl_remove_device(struct mei_cl_device *device) in mei_cl_remove_device() argument
197 device_unregister(&device->dev); in mei_cl_remove_device()
354 ssize_t mei_cl_send(struct mei_cl_device *device, u8 *buf, size_t length) in mei_cl_send() argument
356 struct mei_cl *cl = device->cl; in mei_cl_send()
361 if (device->ops && device->ops->send) in mei_cl_send()
362 return device->ops->send(device, buf, length); in mei_cl_send()
368 ssize_t mei_cl_recv(struct mei_cl_device *device, u8 *buf, size_t length) in mei_cl_recv() argument
370 struct mei_cl *cl = device->cl; in mei_cl_recv()
375 if (device->ops && device->ops->recv) in mei_cl_recv()
376 return device->ops->recv(device, buf, length); in mei_cl_recv()
384 struct mei_cl_device *device; in mei_bus_event_work() local
386 device = container_of(work, struct mei_cl_device, event_work); in mei_bus_event_work()
388 if (device->event_cb) in mei_bus_event_work()
389 device->event_cb(device, device->events, device->event_context); in mei_bus_event_work()
391 device->events = 0; in mei_bus_event_work()
394 mei_cl_read_start(device->cl, 0, NULL); in mei_bus_event_work()
397 int mei_cl_register_event_cb(struct mei_cl_device *device, in mei_cl_register_event_cb() argument
400 if (device->event_cb) in mei_cl_register_event_cb()
403 device->events = 0; in mei_cl_register_event_cb()
404 device->event_cb = event_cb; in mei_cl_register_event_cb()
405 device->event_context = context; in mei_cl_register_event_cb()
406 INIT_WORK(&device->event_work, mei_bus_event_work); in mei_cl_register_event_cb()
408 mei_cl_read_start(device->cl, 0, NULL); in mei_cl_register_event_cb()
414 void *mei_cl_get_drvdata(const struct mei_cl_device *device) in mei_cl_get_drvdata() argument
416 return dev_get_drvdata(&device->dev); in mei_cl_get_drvdata()
420 void mei_cl_set_drvdata(struct mei_cl_device *device, void *data) in mei_cl_set_drvdata() argument
422 dev_set_drvdata(&device->dev, data); in mei_cl_set_drvdata()
426 int mei_cl_enable_device(struct mei_cl_device *device) in mei_cl_enable_device() argument
430 struct mei_cl *cl = device->cl; in mei_cl_enable_device()
449 if (device->event_cb) in mei_cl_enable_device()
450 mei_cl_read_start(device->cl, 0, NULL); in mei_cl_enable_device()
452 if (!device->ops || !device->ops->enable) in mei_cl_enable_device()
455 return device->ops->enable(device); in mei_cl_enable_device()
459 int mei_cl_disable_device(struct mei_cl_device *device) in mei_cl_disable_device() argument
463 struct mei_cl *cl = device->cl; in mei_cl_disable_device()
470 if (device->ops && device->ops->disable) in mei_cl_disable_device()
471 device->ops->disable(device); in mei_cl_disable_device()
473 device->event_cb = NULL; in mei_cl_disable_device()
503 struct mei_cl_device *device = cl->device; in mei_cl_bus_rx_event() local
505 if (!device || !device->event_cb) in mei_cl_bus_rx_event()
508 set_bit(MEI_CL_EVENT_RX, &device->events); in mei_cl_bus_rx_event()
510 schedule_work(&device->event_work); in mei_cl_bus_rx_event()
519 if (cl->device) in mei_cl_bus_remove_devices()
520 mei_cl_remove_device(cl->device); in mei_cl_bus_remove_devices()