diff options
-rw-r--r-- | drivers/mcb/mcb-core.c | 19 | ||||
-rw-r--r-- | include/linux/mcb.h | 5 |
2 files changed, 18 insertions, 6 deletions
diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c index a4be451074e5..1e336cc56751 100644 --- a/drivers/mcb/mcb-core.c +++ b/drivers/mcb/mcb-core.c | |||
@@ -187,6 +187,7 @@ struct mcb_bus *mcb_alloc_bus(struct device *carrier) | |||
187 | { | 187 | { |
188 | struct mcb_bus *bus; | 188 | struct mcb_bus *bus; |
189 | int bus_nr; | 189 | int bus_nr; |
190 | int rc; | ||
190 | 191 | ||
191 | bus = kzalloc(sizeof(struct mcb_bus), GFP_KERNEL); | 192 | bus = kzalloc(sizeof(struct mcb_bus), GFP_KERNEL); |
192 | if (!bus) | 193 | if (!bus) |
@@ -194,14 +195,26 @@ struct mcb_bus *mcb_alloc_bus(struct device *carrier) | |||
194 | 195 | ||
195 | bus_nr = ida_simple_get(&mcb_ida, 0, 0, GFP_KERNEL); | 196 | bus_nr = ida_simple_get(&mcb_ida, 0, 0, GFP_KERNEL); |
196 | if (bus_nr < 0) { | 197 | if (bus_nr < 0) { |
197 | kfree(bus); | 198 | rc = bus_nr; |
198 | return ERR_PTR(bus_nr); | 199 | goto err_free; |
199 | } | 200 | } |
200 | 201 | ||
201 | INIT_LIST_HEAD(&bus->children); | ||
202 | bus->bus_nr = bus_nr; | 202 | bus->bus_nr = bus_nr; |
203 | bus->carrier = carrier; | 203 | bus->carrier = carrier; |
204 | |||
205 | device_initialize(&bus->dev); | ||
206 | bus->dev.parent = carrier; | ||
207 | bus->dev.bus = &mcb_bus_type; | ||
208 | |||
209 | dev_set_name(&bus->dev, "mcb:%d", bus_nr); | ||
210 | rc = device_add(&bus->dev); | ||
211 | if (rc) | ||
212 | goto err_free; | ||
213 | |||
204 | return bus; | 214 | return bus; |
215 | err_free: | ||
216 | kfree(bus); | ||
217 | return ERR_PTR(rc); | ||
205 | } | 218 | } |
206 | EXPORT_SYMBOL_GPL(mcb_alloc_bus); | 219 | EXPORT_SYMBOL_GPL(mcb_alloc_bus); |
207 | 220 | ||
diff --git a/include/linux/mcb.h b/include/linux/mcb.h index ed06e15a36aa..3efafbca166d 100644 --- a/include/linux/mcb.h +++ b/include/linux/mcb.h | |||
@@ -21,13 +21,12 @@ struct mcb_device; | |||
21 | /** | 21 | /** |
22 | * struct mcb_bus - MEN Chameleon Bus | 22 | * struct mcb_bus - MEN Chameleon Bus |
23 | * | 23 | * |
24 | * @dev: pointer to carrier device | 24 | * @dev: bus device |
25 | * @children: the child busses | 25 | * @carrier: pointer to carrier device |
26 | * @bus_nr: mcb bus number | 26 | * @bus_nr: mcb bus number |
27 | * @get_irq: callback to get IRQ number | 27 | * @get_irq: callback to get IRQ number |
28 | */ | 28 | */ |
29 | struct mcb_bus { | 29 | struct mcb_bus { |
30 | struct list_head children; | ||
31 | struct device dev; | 30 | struct device dev; |
32 | struct device *carrier; | 31 | struct device *carrier; |
33 | int bus_nr; | 32 | int bus_nr; |