Lines Matching refs:master
7 * subsystem, and only handles one master device, but this doesn't have to be
61 struct master {
73 struct master *master;
91 struct master *m = s->private;
96 seq_printf(s, "%-40s %20s\n", "master name", "status");
126 static void component_master_debugfs_add(struct master *m)
133 static void component_master_debugfs_del(struct master *m)
141 static void component_master_debugfs_add(struct master *m)
144 static void component_master_debugfs_del(struct master *m)
149 static struct master *__master_find(struct device *dev,
152 struct master *m;
161 static struct component *find_component(struct master *master,
167 if (c->master && c->master != master)
181 static int find_components(struct master *master)
183 struct component_match *match = master->match;
189 * any components which are found to this master.
195 dev_dbg(master->dev, "Looking for component %zu\n", i);
200 c = find_component(master, mc);
206 dev_dbg(master->dev, "found component %s, duplicate %u\n", dev_name(c->dev), !!c->master);
208 /* Attach this component to the master */
209 match->compare[i].duplicate = !!c->master;
211 c->master = master;
216 /* Detach component from associated master */
217 static void remove_component(struct master *master, struct component *c)
221 /* Detach the component from this master. */
222 for (i = 0; i < master->match->num; i++)
223 if (master->match->compare[i].component == c)
224 master->match->compare[i].component = NULL;
228 * Try to bring up a master. If component is NULL, we're interested in
229 * this master, otherwise it's a component which must be present to try
230 * and bring up the master.
234 static int try_to_bring_up_master(struct master *master,
239 dev_dbg(master->dev, "trying to bring up master\n");
241 if (find_components(master)) {
242 dev_dbg(master->dev, "master has incomplete components\n");
246 if (component && component->master != master) {
247 dev_dbg(master->dev, "master is not for this component (%s)\n",
252 if (!devres_open_group(master->dev, NULL, GFP_KERNEL))
256 ret = master->ops->bind(master->dev);
258 devres_release_group(master->dev, NULL);
260 dev_info(master->dev, "master bind failed: %d\n", ret);
264 master->bound = true;
270 struct master *m;
284 static void take_down_master(struct master *master)
286 if (master->bound) {
287 master->ops->unbind(master->dev);
288 devres_release_group(master->dev, NULL);
289 master->bound = false;
293 static void component_match_release(struct device *master,
302 mc->release(master, mc->data);
336 static void __component_match_add(struct device *master,
356 devres_add(master, match);
365 ret = component_match_realloc(master, match, new_size);
382 * @master: device with the aggregate driver
388 * Adds a new component match to the list stored in @matchptr, which the @master
400 void component_match_add_release(struct device *master,
405 __component_match_add(master, matchptr, release, compare, NULL,
412 * @master: device with the aggregate driver
417 * Adds a new component match to the list stored in @matchptr, which the @master
427 void component_match_add_typed(struct device *master,
431 __component_match_add(master, matchptr, NULL, NULL, compare_typed,
436 static void free_master(struct master *master)
438 struct component_match *match = master->match;
441 component_master_debugfs_del(master);
442 list_del(&master->node);
448 c->master = NULL;
452 kfree(master);
471 struct master *master;
479 master = kzalloc(sizeof(*master), GFP_KERNEL);
480 if (!master)
483 master->dev = dev;
484 master->ops = ops;
485 master->match = match;
487 component_master_debugfs_add(master);
490 list_add(&master->node, &masters);
492 ret = try_to_bring_up_master(master, NULL);
495 free_master(master);
515 struct master *master;
518 master = __master_find(dev, ops);
519 if (master) {
520 take_down_master(master);
521 free_master(master);
528 struct master *master, void *data)
533 component->ops->unbind(component->dev, master->dev, data);
551 struct master *master;
557 master = __master_find(master_dev, NULL);
558 if (!master)
562 for (i = master->match->num; i--; )
563 if (!master->match->compare[i].duplicate) {
564 c = master->match->compare[i].component;
565 component_unbind(c, master, data);
570 static int component_bind(struct component *component, struct master *master,
580 if (!devres_open_group(master->dev, NULL, GFP_KERNEL))
589 devres_release_group(master->dev, NULL);
593 dev_dbg(master->dev, "binding %s (ops %ps)\n",
596 ret = component->ops->bind(component->dev, master->dev, data);
607 devres_remove_group(master->dev, NULL);
609 dev_info(master->dev, "bound %s (ops %ps)\n",
613 devres_release_group(master->dev, NULL);
616 dev_err(master->dev, "failed to bind %s (ops %ps): %d\n",
634 struct master *master;
641 master = __master_find(master_dev, NULL);
642 if (!master)
646 for (i = 0; i < master->match->num; i++)
647 if (!master->match->compare[i].duplicate) {
648 c = master->match->compare[i].component;
649 ret = component_bind(c, master, data);
656 if (!master->match->compare[i - 1].duplicate) {
657 c = master->match->compare[i - 1].component;
658 component_unbind(c, master, data);
687 if (component->master)
688 remove_component(component->master, component);
769 if (component && component->master) {
770 take_down_master(component->master);
771 remove_component(component->master, component);