On Tue, Jan 31, 2017 at 10:19:52PM +0100, Daniel Vetter wrote: > On Tue, Jan 31, 2017 at 10:07:19PM +0100, Thierry Reding wrote: > > On Wed, Dec 14, 2016 at 11:46:19AM -0800, Eric Anholt wrote: > > > +static int rpi_touchscreen_dsi_remove(struct mipi_dsi_device *dsi) > > > +{ > > > + struct device *dev = &dsi->dev; > > > + struct rpi_touchscreen *ts = dev_get_drvdata(dev); > > > + int ret; > > > + > > > + ret = mipi_dsi_detach(dsi); > > > + if (ret < 0) { > > > + dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret); > > > + return ret; > > > + } > > > > You might want to continue after this anyway, because the driver will be > > unloaded regardless of your error code and you'll leave behind a > > dangling panel and leak a reference to the I2C bridge. > > Sounds like we should switch the mipi_dsi_driver->remove callback to > return void then? But separate cleanup series if someone bothers with it. I think there are advantages to keeping this consistent with the driver core's definition of ->remove(). There have been efforts lately to deny unloading drivers if they are a dependency for other drivers, so we may yet see the day where the driver core actually does something with this return value. Thierry