On Wed, 27 Jul 2016 20:22:33 +0200, Mark Brown wrote:
On Wed, Jul 27, 2016 at 08:11:49PM +0200, Takashi Iwai wrote:
I'm wondering whether it's a better option to block the unbind behavior, either in driver base (allowing to return an error) or in the sound side (waiting in remove() until the sane point).
That's certainly going to be a lot easier and part of the reason it's never been looked at much is that (unlike USB) there's very little reason why an ASoC sound card would ever be hotplugged - even in development these days the normal development flow involves rebooting.
Actually there is already the suppress_bind_attr flag in struct device_driver. For a simple platform driver like snd-soc-rcar, it's easy like:
diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c index 3351a701c60e..d019824927de 100644 --- a/sound/soc/sh/rcar/core.c +++ b/sound/soc/sh/rcar/core.c @@ -1251,6 +1251,7 @@ static struct platform_driver rsnd_driver = { .driver = { .name = "rcar_sound", .of_match_table = rsnd_of_match, + .suppress_bind_attrs = true, }, .probe = rsnd_probe, .remove = rsnd_remove,
Then there will be no sysfs bind/unbind for this driver. (Note: totally untested: let me know if it really works.)
The same technique is likely available for i2c and spi codec drivers. But it's another open question whether we should suppress the sysfs bind/unbind of these devices at all. My gut feeling is that sysfs bind/unbind are mostly useless for drivers like ASoC codecs. At least, it would be much safer to disable for now.
Takashi