The "big" difference is that probe is called by core (asoc) and not by
driver onto themselves.. IMO that needs to go away.
What I did is not different from what existed already with platform devices.
They were manually created, weren't they?
Manual creation of device based on a requirement is different, did I ask
you why you are creating device :)
I am simple asking you not to call probe in the driver. If you need
that, move it to core! We do not want these kind of things in the
drivers...
FWIW, the implementation here follows what was suggested for Greybus 'Host
Devices' [1] [2], so it's not like I am creating any sort of dangerous
precedent.
[1]
https://elixir.bootlin.com/linux/latest/source/drivers/greybus/es2.c#L1275
[2] https://elixir.bootlin.com/linux/latest/source/drivers/greybus/hd.c#L124
And if you look closely all this work is done by core not by drivers!
Drivers _should_ never do all this, it is the job of core to do that for
you.
Please look at the code again, you have a USB probe that will manually call
the GreyBus device creation.
static int ap_probe(struct usb_interface *interface,
const struct usb_device_id *id)
{
hd = gb_hd_create(&es2_driver, &udev->dev,
static struct usb_driver es2_ap_driver = {
.name = "es2_ap_driver",
.probe = ap_probe, <<< code above
.disconnect = ap_disconnect,
.id_table = id_table,
.soft_unbind = 1,
};
Look closely the driver es2 calls into greybus core hd.c and gets the
work done, subtle but a big differances in the approaches..