size_t buffer_size_max)
{
struct greybus_host_device *hd;
+ struct gb_endo *endo;
u16 endo_id = 0x4755; // FIXME - get endo "ID" from the SVC
/*
ida_init(&hd->cport_id_map);
hd->buffer_size_max = buffer_size_max;
- hd->endo = gb_endo_create(hd, endo_id);
- if (!hd->endo) {
+ endo = gb_endo_create(hd, endo_id);
+ if (IS_ERR(endo)) {
greybus_remove_hd(hd);
return NULL;
}
+ hd->endo = endo;
return hd;
}
endo = kzalloc(sizeof(*endo), GFP_KERNEL);
if (!endo)
- return NULL;
+ return ERR_PTR(-ENOMEM);
/* First check if the value supplied is a valid endo id */
- if (gb_endo_validate_id(hd, &endo->layout, endo_id))
+ if (gb_endo_validate_id(hd, &endo->layout, endo_id)) {
+ retval = -EINVAL;
goto free_endo;
+ }
endo->id = endo_id;
/* Register Endo device */
- if (gb_endo_register(hd, endo))
+ retval = gb_endo_register(hd, endo);
+ if (retval)
goto free_endo;
/* Create modules/interfaces */
free_endo:
kfree(endo);
- return NULL;
+
+ return ERR_PTR(retval);
}
void gb_endo_remove(struct gb_endo *endo)