siox: Don't pass the reference on a master in siox_master_register()
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Mon, 19 Feb 2024 07:46:29 +0000 (08:46 +0100)
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Fri, 8 Mar 2024 21:01:09 +0000 (22:01 +0100)
While it's technically fine to pass the ownership of the reference on
a struct siox_master from the caller of siox_master_register() to the
framework this is hard to use. Instead let the framework take its own
reference (that is freed in siox_master_unregister()) and drop the bus
driver's reference in its remove callback.

Acked-by: Thorsten Scherer <t.scherer@eckelmann.de>
Link: https://lore.kernel.org/r/1e8d09d17848e58e8fc6a46278b5e8fb0cf4618a.1708328466.git.u.kleine-koenig@pengutronix.de
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
drivers/siox/siox-bus-gpio.c
drivers/siox/siox-core.c

index aeefeb7255247d139892153271d78f040f7abf2e..fdf20fe80059d9657c5c93cf624a549541413f2c 100644 (file)
@@ -149,6 +149,8 @@ static int siox_gpio_remove(struct platform_device *pdev)
 
        siox_master_unregister(master);
 
+       siox_master_put(master);
+
        return 0;
 }
 
index 561408583b2bfe00f6dbff314988aeee733a49ae..d4acab7036d66ba927009596063009efb1dc1d9f 100644 (file)
@@ -717,6 +717,8 @@ int siox_master_register(struct siox_master *smaster)
        if (!smaster->pushpull)
                return -EINVAL;
 
+       get_device(&smaster->dev);
+
        dev_set_name(&smaster->dev, "siox-%d", smaster->busno);
 
        mutex_init(&smaster->lock);