Lines Matching refs:master

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