Lines Matching full:master
3 * FSI hub master driver
14 #include "fsi-master.h"
25 #define FSI_MVER 0x74 /* R: master version/type */
27 #define FSI_MESRB0 0x1d0 /* R: Master error status */
50 #define FSI_MRESP_RST_MCR 0x08000000 /* Reset FSI master reg. */
56 /* master 0 in error */
67 * FSI hub master support
69 * A hub master increases the number of potential target devices that the
70 * primary FSI master can access. For each link a primary master supports,
71 * each of those links can in turn be chained to a hub master with multiple
83 struct fsi_master master; member
86 /* master address space */
89 #define to_fsi_master_hub(m) container_of(m, struct fsi_master_hub, master)
91 static int hub_master_read(struct fsi_master *master, int link, in hub_master_read() argument
94 struct fsi_master_hub *hub = to_fsi_master_hub(master); in hub_master_read()
103 static int hub_master_write(struct fsi_master *master, int link, in hub_master_write() argument
106 struct fsi_master_hub *hub = to_fsi_master_hub(master); in hub_master_write()
115 static int hub_master_break(struct fsi_master *master, int link) in hub_master_break() argument
123 return hub_master_write(master, link, 0, addr, &cmd, sizeof(cmd)); in hub_master_break()
126 static int hub_master_link_enable(struct fsi_master *master, int link) in hub_master_link_enable() argument
128 struct fsi_master_hub *hub = to_fsi_master_hub(master); in hub_master_link_enable()
177 /* Initialize the MFSI (hub master) engine */ in hub_master_init()
206 /* Leave enabled long enough for master logic to set up */ in hub_master_init()
226 /* Reset the master bridge */ in hub_master_init()
269 hub->master.dev.parent = dev; in hub_master_probe()
270 hub->master.dev.release = hub_master_release; in hub_master_probe()
271 hub->master.dev.of_node = of_node_get(dev_of_node(dev)); in hub_master_probe()
273 hub->master.n_links = links; in hub_master_probe()
274 hub->master.read = hub_master_read; in hub_master_probe()
275 hub->master.write = hub_master_write; in hub_master_probe()
276 hub->master.send_break = hub_master_break; in hub_master_probe()
277 hub->master.link_enable = hub_master_link_enable; in hub_master_probe()
283 rc = fsi_master_register(&hub->master); in hub_master_probe()
288 * and holds the sole reference on master.dev. This means the device in hub_master_probe()
294 get_device(&hub->master.dev); in hub_master_probe()
307 fsi_master_unregister(&hub->master); in hub_master_remove()
309 of_node_put(hub->master.dev.of_node); in hub_master_remove()
312 * master.dev will likely be ->release()ed after this, which free()s in hub_master_remove()
315 put_device(&hub->master.dev); in hub_master_remove()
331 .name = "fsi-master-hub",