23 #include <linux/compiler.h>
24 #include <linux/list.h>
26 #include <linux/slab.h>
27 #include <linux/string.h>
34 return sprintf(buf,
"hsi:%s\n", dev_name(dev));
51 return strcmp(dev_name(dev), driver->
name) == 0;
54 static struct bus_type hsi_bus_type = {
56 .dev_attrs = hsi_bus_dev_attrs,
57 .match = hsi_bus_match,
58 .uevent = hsi_bus_uevent,
61 static void hsi_client_release(
struct device *dev)
75 cl->
device.bus = &hsi_bus_type;
77 cl->
device.release = hsi_client_release;
83 pr_err(
"hsi: failed to register client: %s\n", info->
name);
94 if (cl_info->info.hsi_id == hsi->
id) {
95 p = hsi_find_port_num(hsi, cl_info->
info.port);
98 hsi_new_client(p, &cl_info->
info);
102 static int hsi_remove_client(
struct device *dev,
void *
data __maybe_unused)
109 static int hsi_remove_port(
struct device *dev,
void *
data __maybe_unused)
117 static void hsi_controller_release(
struct device *dev)
125 static void hsi_port_release(
struct device *dev)
162 hsi_scan_board_info(hsi);
182 drv->
driver.bus = &hsi_bus_type;
188 static inline int hsi_dummy_msg(
struct hsi_msg *
msg __maybe_unused)
193 static inline int hsi_dummy_cl(
struct hsi_client *cl __maybe_unused)
237 hsi = kzalloc(
sizeof(*hsi), flags);
240 port = kzalloc(
sizeof(*port)*n_ports, flags);
247 hsi->
device.release = hsi_controller_release;
250 for (i = 0; i < n_ports; i++) {
251 port[
i] = kzalloc(
sizeof(**port), flags);
255 port[
i]->
async = hsi_dummy_msg;
256 port[
i]->
setup = hsi_dummy_cl;
257 port[
i]->
flush = hsi_dummy_cl;
264 hsi->
port[
i]->device.release = hsi_port_release;
307 msg = kzalloc(
sizeof(*msg), flags);
347 if (!hsi_port_claimed(cl))
353 return port->
async(msg);
411 unsigned long event,
void *
data __maybe_unused)
433 void (*handler)(
struct hsi_client *,
unsigned long))
439 if (!hsi_port_claimed(cl))
442 cl->
nb.notifier_call = hsi_event_notifier_call;
462 WARN_ON(!hsi_port_claimed(cl));
493 static int __init hsi_init(
void)
499 static void __exit hsi_exit(
void)