Lines Matching full:master

25 #include "fsi-master.h"
86 struct fsi_master *master; member
111 static int fsi_master_read(struct fsi_master *master, int link,
113 static int fsi_master_write(struct fsi_master *master, int link,
115 static int fsi_master_break(struct fsi_master *master, int link);
211 struct fsi_master *master = slave->master; in fsi_slave_report_and_clear_errors() local
219 rc = fsi_master_read(master, link, id, FSI_SLAVE_BASE + FSI_SISC, in fsi_slave_report_and_clear_errors()
224 rc = fsi_master_read(master, link, id, FSI_SLAVE_BASE + FSI_SSTAT, in fsi_slave_report_and_clear_errors()
233 return fsi_master_write(master, link, id, FSI_SLAVE_BASE + FSI_SISC, in fsi_slave_report_and_clear_errors()
280 return fsi_master_write(slave->master, slave->link, slave->id, in fsi_slave_set_smode()
288 struct fsi_master *master = slave->master; in fsi_slave_handle_error() local
310 if (master->term) { in fsi_slave_handle_error()
311 rc = master->term(master, link, id); in fsi_slave_handle_error()
313 rc = fsi_master_read(master, link, id, 0, in fsi_slave_handle_error()
326 rc = fsi_master_break(master, link); in fsi_slave_handle_error()
337 if (master->link_config) in fsi_slave_handle_error()
338 master->link_config(master, link, in fsi_slave_handle_error()
356 rc = fsi_master_read(slave->master, slave->link, in fsi_slave_read()
381 rc = fsi_master_write(slave->master, slave->link, in fsi_slave_write()
533 slave->master->idx, slave->link, in fsi_slave_scan()
677 static struct device_node *fsi_slave_find_of_node(struct fsi_master *master, in fsi_slave_find_of_node() argument
682 parent = dev_of_node(&master->dev); in fsi_slave_find_of_node()
804 struct fsi_master *master = slave->master; in send_term_store() local
806 if (!master->term) in send_term_store()
809 master->term(master, slave->link, slave->id); in send_term_store()
828 struct fsi_master *master = slave->master; in slave_send_echo_store() local
838 if (!master->link_config) in slave_send_echo_store()
848 if (master->link_config) in slave_send_echo_store()
849 master->link_config(master, slave->link, in slave_send_echo_store()
985 static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id) in fsi_slave_init() argument
999 rc = fsi_master_read(master, link, id, 0, &data, sizeof(data)); in fsi_slave_init()
1001 dev_dbg(&master->dev, "can't read slave %02x:%02x %d\n", in fsi_slave_init()
1009 dev_warn(&master->dev, "slave %02x:%02x invalid cfam id CRC!\n", in fsi_slave_init()
1014 dev_dbg(&master->dev, "fsi: found chip %08x at %02x:%02x:%02x\n", in fsi_slave_init()
1015 cfam_id, master->idx, link, id); in fsi_slave_init()
1017 /* If we're behind a master that doesn't provide a self-running bus in fsi_slave_init()
1020 if (master->flags & FSI_MASTER_FLAG_SWCLOCK) { in fsi_slave_init()
1022 rc = fsi_master_write(master, link, id, in fsi_slave_init()
1026 dev_warn(&master->dev, in fsi_slave_init()
1040 slave->dev.parent = &master->dev; in fsi_slave_init()
1041 slave->dev.of_node = fsi_slave_find_of_node(master, link, id); in fsi_slave_init()
1045 slave->master = master; in fsi_slave_init()
1062 rc = fsi_master_write(master, link, id, FSI_SLAVE_BASE + FSI_SLBUS, in fsi_slave_init()
1065 dev_warn(&master->dev, in fsi_slave_init()
1071 dev_warn(&master->dev, in fsi_slave_init()
1096 if (master->link_config) in fsi_slave_init()
1097 master->link_config(master, link, in fsi_slave_init()
1109 dev_dbg(&master->dev, "failed during slave scan with: %d\n", in fsi_slave_init()
1122 /* FSI master support */
1137 static int fsi_master_read(struct fsi_master *master, int link, in fsi_master_read() argument
1142 trace_fsi_master_read(master, link, slave_id, addr, size); in fsi_master_read()
1146 rc = master->read(master, link, slave_id, addr, val, size); in fsi_master_read()
1148 trace_fsi_master_rw_result(master, link, slave_id, addr, size, in fsi_master_read()
1154 static int fsi_master_write(struct fsi_master *master, int link, in fsi_master_write() argument
1159 trace_fsi_master_write(master, link, slave_id, addr, size, val); in fsi_master_write()
1163 rc = master->write(master, link, slave_id, addr, val, size); in fsi_master_write()
1165 trace_fsi_master_rw_result(master, link, slave_id, addr, size, in fsi_master_write()
1171 static int fsi_master_link_disable(struct fsi_master *master, int link) in fsi_master_link_disable() argument
1173 if (master->link_enable) in fsi_master_link_disable()
1174 return master->link_enable(master, link, false); in fsi_master_link_disable()
1179 static int fsi_master_link_enable(struct fsi_master *master, int link) in fsi_master_link_enable() argument
1181 if (master->link_enable) in fsi_master_link_enable()
1182 return master->link_enable(master, link, true); in fsi_master_link_enable()
1190 static int fsi_master_break(struct fsi_master *master, int link) in fsi_master_break() argument
1194 trace_fsi_master_break(master, link); in fsi_master_break()
1196 if (master->send_break) in fsi_master_break()
1197 rc = master->send_break(master, link); in fsi_master_break()
1198 if (master->link_config) in fsi_master_break()
1199 master->link_config(master, link, 16, 16); in fsi_master_break()
1204 static int fsi_master_scan(struct fsi_master *master) in fsi_master_scan() argument
1208 for (link = 0; link < master->n_links; link++) { in fsi_master_scan()
1209 rc = fsi_master_link_enable(master, link); in fsi_master_scan()
1211 dev_dbg(&master->dev, in fsi_master_scan()
1215 rc = fsi_master_break(master, link); in fsi_master_scan()
1217 fsi_master_link_disable(master, link); in fsi_master_scan()
1218 dev_dbg(&master->dev, in fsi_master_scan()
1223 rc = fsi_slave_init(master, link, 0); in fsi_master_scan()
1225 fsi_master_link_disable(master, link); in fsi_master_scan()
1247 static void fsi_master_unscan(struct fsi_master *master) in fsi_master_unscan() argument
1249 device_for_each_child(&master->dev, NULL, fsi_master_remove_slave); in fsi_master_unscan()
1252 int fsi_master_rescan(struct fsi_master *master) in fsi_master_rescan() argument
1256 mutex_lock(&master->scan_lock); in fsi_master_rescan()
1257 fsi_master_unscan(master); in fsi_master_rescan()
1258 rc = fsi_master_scan(master); in fsi_master_rescan()
1259 mutex_unlock(&master->scan_lock); in fsi_master_rescan()
1268 struct fsi_master *master = to_fsi_master(dev); in master_rescan_store() local
1271 rc = fsi_master_rescan(master); in master_rescan_store()
1283 struct fsi_master *master = to_fsi_master(dev); in master_break_store() local
1285 fsi_master_break(master, 0); in master_break_store()
1298 ATTRIBUTE_GROUPS(master);
1301 .name = "fsi-master",
1305 int fsi_master_register(struct fsi_master *master) in fsi_master_register() argument
1310 mutex_init(&master->scan_lock); in fsi_master_register()
1311 master->idx = ida_simple_get(&master_ida, 0, INT_MAX, GFP_KERNEL); in fsi_master_register()
1312 dev_set_name(&master->dev, "fsi%d", master->idx); in fsi_master_register()
1313 master->dev.class = &fsi_master_class; in fsi_master_register()
1315 rc = device_register(&master->dev); in fsi_master_register()
1317 ida_simple_remove(&master_ida, master->idx); in fsi_master_register()
1321 np = dev_of_node(&master->dev); in fsi_master_register()
1323 mutex_lock(&master->scan_lock); in fsi_master_register()
1324 fsi_master_scan(master); in fsi_master_register()
1325 mutex_unlock(&master->scan_lock); in fsi_master_register()
1332 void fsi_master_unregister(struct fsi_master *master) in fsi_master_unregister() argument
1334 if (master->idx >= 0) { in fsi_master_unregister()
1335 ida_simple_remove(&master_ida, master->idx); in fsi_master_unregister()
1336 master->idx = -1; in fsi_master_unregister()
1339 mutex_lock(&master->scan_lock); in fsi_master_unregister()
1340 fsi_master_unscan(master); in fsi_master_unregister()
1341 mutex_unlock(&master->scan_lock); in fsi_master_unregister()
1342 device_unregister(&master->dev); in fsi_master_unregister()