Lines Matching full:master

25 #include "fsi-master.h"
80 struct fsi_master *master; member
105 static int fsi_master_read(struct fsi_master *master, int link,
107 static int fsi_master_write(struct fsi_master *master, int link,
109 static int fsi_master_break(struct fsi_master *master, int link);
205 struct fsi_master *master = slave->master; in fsi_slave_report_and_clear_errors() local
213 rc = fsi_master_read(master, link, id, FSI_SLAVE_BASE + FSI_SISC, in fsi_slave_report_and_clear_errors()
218 rc = fsi_master_read(master, link, id, FSI_SLAVE_BASE + FSI_SSTAT, in fsi_slave_report_and_clear_errors()
227 return fsi_master_write(master, link, id, FSI_SLAVE_BASE + FSI_SISC, in fsi_slave_report_and_clear_errors()
274 return fsi_master_write(slave->master, slave->link, slave->id, in fsi_slave_set_smode()
282 struct fsi_master *master = slave->master; in fsi_slave_handle_error() local
304 if (master->term) { in fsi_slave_handle_error()
305 rc = master->term(master, link, id); in fsi_slave_handle_error()
307 rc = fsi_master_read(master, link, id, 0, in fsi_slave_handle_error()
320 rc = fsi_master_break(master, link); in fsi_slave_handle_error()
331 if (master->link_config) in fsi_slave_handle_error()
332 master->link_config(master, link, in fsi_slave_handle_error()
350 rc = fsi_master_read(slave->master, slave->link, in fsi_slave_read()
375 rc = fsi_master_write(slave->master, slave->link, in fsi_slave_write()
527 slave->master->idx, slave->link, in fsi_slave_scan()
648 static struct device_node *fsi_slave_find_of_node(struct fsi_master *master, in fsi_slave_find_of_node() argument
653 parent = dev_of_node(&master->dev); in fsi_slave_find_of_node()
775 struct fsi_master *master = slave->master; in send_term_store() local
777 if (!master->term) in send_term_store()
780 master->term(master, slave->link, slave->id); in send_term_store()
799 struct fsi_master *master = slave->master; in slave_send_echo_store() local
809 if (!master->link_config) in slave_send_echo_store()
819 if (master->link_config) in slave_send_echo_store()
820 master->link_config(master, slave->link, in slave_send_echo_store()
956 static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id) in fsi_slave_init() argument
970 rc = fsi_master_read(master, link, id, 0, &data, sizeof(data)); in fsi_slave_init()
972 dev_dbg(&master->dev, "can't read slave %02x:%02x %d\n", in fsi_slave_init()
980 dev_warn(&master->dev, "slave %02x:%02x invalid cfam id CRC!\n", in fsi_slave_init()
985 dev_dbg(&master->dev, "fsi: found chip %08x at %02x:%02x:%02x\n", in fsi_slave_init()
986 cfam_id, master->idx, link, id); in fsi_slave_init()
988 /* If we're behind a master that doesn't provide a self-running bus in fsi_slave_init()
991 if (master->flags & FSI_MASTER_FLAG_SWCLOCK) { in fsi_slave_init()
993 rc = fsi_master_write(master, link, id, in fsi_slave_init()
997 dev_warn(&master->dev, in fsi_slave_init()
1011 slave->dev.parent = &master->dev; in fsi_slave_init()
1012 slave->dev.of_node = fsi_slave_find_of_node(master, link, id); in fsi_slave_init()
1016 slave->master = master; in fsi_slave_init()
1034 dev_warn(&master->dev, in fsi_slave_init()
1059 if (master->link_config) in fsi_slave_init()
1060 master->link_config(master, link, in fsi_slave_init()
1072 dev_dbg(&master->dev, "failed during slave scan with: %d\n", in fsi_slave_init()
1085 /* FSI master support */
1100 static int fsi_master_read(struct fsi_master *master, int link, in fsi_master_read() argument
1105 trace_fsi_master_read(master, link, slave_id, addr, size); in fsi_master_read()
1109 rc = master->read(master, link, slave_id, addr, val, size); in fsi_master_read()
1111 trace_fsi_master_rw_result(master, link, slave_id, addr, size, in fsi_master_read()
1117 static int fsi_master_write(struct fsi_master *master, int link, in fsi_master_write() argument
1122 trace_fsi_master_write(master, link, slave_id, addr, size, val); in fsi_master_write()
1126 rc = master->write(master, link, slave_id, addr, val, size); in fsi_master_write()
1128 trace_fsi_master_rw_result(master, link, slave_id, addr, size, in fsi_master_write()
1134 static int fsi_master_link_enable(struct fsi_master *master, int link) in fsi_master_link_enable() argument
1136 if (master->link_enable) in fsi_master_link_enable()
1137 return master->link_enable(master, link); in fsi_master_link_enable()
1145 static int fsi_master_break(struct fsi_master *master, int link) in fsi_master_break() argument
1149 trace_fsi_master_break(master, link); in fsi_master_break()
1151 if (master->send_break) in fsi_master_break()
1152 rc = master->send_break(master, link); in fsi_master_break()
1153 if (master->link_config) in fsi_master_break()
1154 master->link_config(master, link, 16, 16); in fsi_master_break()
1159 static int fsi_master_scan(struct fsi_master *master) in fsi_master_scan() argument
1163 for (link = 0; link < master->n_links; link++) { in fsi_master_scan()
1164 rc = fsi_master_link_enable(master, link); in fsi_master_scan()
1166 dev_dbg(&master->dev, in fsi_master_scan()
1170 rc = fsi_master_break(master, link); in fsi_master_scan()
1172 dev_dbg(&master->dev, in fsi_master_scan()
1177 fsi_slave_init(master, link, 0); in fsi_master_scan()
1199 static void fsi_master_unscan(struct fsi_master *master) in fsi_master_unscan() argument
1201 device_for_each_child(&master->dev, NULL, fsi_master_remove_slave); in fsi_master_unscan()
1204 int fsi_master_rescan(struct fsi_master *master) in fsi_master_rescan() argument
1208 mutex_lock(&master->scan_lock); in fsi_master_rescan()
1209 fsi_master_unscan(master); in fsi_master_rescan()
1210 rc = fsi_master_scan(master); in fsi_master_rescan()
1211 mutex_unlock(&master->scan_lock); in fsi_master_rescan()
1220 struct fsi_master *master = to_fsi_master(dev); in master_rescan_store() local
1223 rc = fsi_master_rescan(master); in master_rescan_store()
1235 struct fsi_master *master = to_fsi_master(dev); in master_break_store() local
1237 fsi_master_break(master, 0); in master_break_store()
1244 int fsi_master_register(struct fsi_master *master) in fsi_master_register() argument
1249 mutex_init(&master->scan_lock); in fsi_master_register()
1250 master->idx = ida_simple_get(&master_ida, 0, INT_MAX, GFP_KERNEL); in fsi_master_register()
1251 dev_set_name(&master->dev, "fsi%d", master->idx); in fsi_master_register()
1253 rc = device_register(&master->dev); in fsi_master_register()
1255 ida_simple_remove(&master_ida, master->idx); in fsi_master_register()
1259 rc = device_create_file(&master->dev, &dev_attr_rescan); in fsi_master_register()
1261 device_del(&master->dev); in fsi_master_register()
1262 ida_simple_remove(&master_ida, master->idx); in fsi_master_register()
1266 rc = device_create_file(&master->dev, &dev_attr_break); in fsi_master_register()
1268 device_del(&master->dev); in fsi_master_register()
1269 ida_simple_remove(&master_ida, master->idx); in fsi_master_register()
1273 np = dev_of_node(&master->dev); in fsi_master_register()
1275 mutex_lock(&master->scan_lock); in fsi_master_register()
1276 fsi_master_scan(master); in fsi_master_register()
1277 mutex_unlock(&master->scan_lock); in fsi_master_register()
1284 void fsi_master_unregister(struct fsi_master *master) in fsi_master_unregister() argument
1286 if (master->idx >= 0) { in fsi_master_unregister()
1287 ida_simple_remove(&master_ida, master->idx); in fsi_master_unregister()
1288 master->idx = -1; in fsi_master_unregister()
1291 mutex_lock(&master->scan_lock); in fsi_master_unregister()
1292 fsi_master_unscan(master); in fsi_master_unregister()
1293 mutex_unlock(&master->scan_lock); in fsi_master_unregister()
1294 device_unregister(&master->dev); in fsi_master_unregister()