* [PATCH v8 1/5] serdev: Make .remove in struct serdev_device_driver optional [not found] <20171018170136.12347-1-andrew.smirnov@gmail.com> @ 2017-10-18 17:01 ` Andrey Smirnov 2017-10-21 17:08 ` Guenter Roeck 2017-10-18 17:01 ` [PATCH v8 2/5] serdev: Introduce devm_serdev_device_open() Andrey Smirnov 1 sibling, 1 reply; 6+ messages in thread From: Andrey Smirnov @ 2017-10-18 17:01 UTC (permalink / raw) To: linux-kernel Cc: Andrey Smirnov, linux-serial, Rob Herring, cphealy, Guenter Roeck, Lucas Stach, Nikita Yushchenko, Lee Jones, Greg Kroah-Hartman, Pavel Machek, Andy Shevchenko, Johan Hovold Using devres infrastructure it is possible to wirte a serdev driver that doesn't have any code that needs to be called as a part of .remove. Add code to make .remove optional. Cc: linux-kernel@vger.kernel.org Cc: linux-serial@vger.kernel.org Cc: Rob Herring <robh@kernel.org> Cc: cphealy@gmail.com Cc: Guenter Roeck <linux@roeck-us.net> Cc: Lucas Stach <l.stach@pengutronix.de> Cc: Nikita Yushchenko <nikita.yoush@cogentembedded.com> Cc: Lee Jones <lee.jones@linaro.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Pavel Machek <pavel@ucw.cz> Cc: Andy Shevchenko <andy.shevchenko@gmail.com> Cc: Johan Hovold <johan@kernel.org> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> --- drivers/tty/serdev/core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c index c68fb3a8ea1c..f500f6a2ca88 100644 --- a/drivers/tty/serdev/core.c +++ b/drivers/tty/serdev/core.c @@ -252,8 +252,8 @@ static int serdev_drv_probe(struct device *dev) static int serdev_drv_remove(struct device *dev) { const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver); - - sdrv->remove(to_serdev_device(dev)); + if (sdrv->remove) + sdrv->remove(to_serdev_device(dev)); return 0; } -- 2.13.5 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v8 1/5] serdev: Make .remove in struct serdev_device_driver optional 2017-10-18 17:01 ` [PATCH v8 1/5] serdev: Make .remove in struct serdev_device_driver optional Andrey Smirnov @ 2017-10-21 17:08 ` Guenter Roeck 2017-10-27 18:17 ` Sebastian Reichel 0 siblings, 1 reply; 6+ messages in thread From: Guenter Roeck @ 2017-10-21 17:08 UTC (permalink / raw) To: Andrey Smirnov, linux-kernel Cc: linux-serial, Rob Herring, cphealy, Lucas Stach, Nikita Yushchenko, Lee Jones, Greg Kroah-Hartman, Pavel Machek, Andy Shevchenko, Johan Hovold On 10/18/2017 10:01 AM, Andrey Smirnov wrote: > Using devres infrastructure it is possible to wirte a serdev driver s/wirte/write/ otherwise Reviewed-by: Guenter Roeck <linux@roeck-us.net> > that doesn't have any code that needs to be called as a part of > .remove. Add code to make .remove optional. > > Cc: linux-kernel@vger.kernel.org > Cc: linux-serial@vger.kernel.org > Cc: Rob Herring <robh@kernel.org> > Cc: cphealy@gmail.com > Cc: Guenter Roeck <linux@roeck-us.net> > Cc: Lucas Stach <l.stach@pengutronix.de> > Cc: Nikita Yushchenko <nikita.yoush@cogentembedded.com> > Cc: Lee Jones <lee.jones@linaro.org> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Cc: Pavel Machek <pavel@ucw.cz> > Cc: Andy Shevchenko <andy.shevchenko@gmail.com> > Cc: Johan Hovold <johan@kernel.org> > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > --- > drivers/tty/serdev/core.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c > index c68fb3a8ea1c..f500f6a2ca88 100644 > --- a/drivers/tty/serdev/core.c > +++ b/drivers/tty/serdev/core.c > @@ -252,8 +252,8 @@ static int serdev_drv_probe(struct device *dev) > static int serdev_drv_remove(struct device *dev) > { > const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver); > - > - sdrv->remove(to_serdev_device(dev)); > + if (sdrv->remove) > + sdrv->remove(to_serdev_device(dev)); > return 0; > } > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v8 1/5] serdev: Make .remove in struct serdev_device_driver optional 2017-10-21 17:08 ` Guenter Roeck @ 2017-10-27 18:17 ` Sebastian Reichel 0 siblings, 0 replies; 6+ messages in thread From: Sebastian Reichel @ 2017-10-27 18:17 UTC (permalink / raw) To: Guenter Roeck Cc: Andrey Smirnov, linux-kernel, linux-serial, Rob Herring, cphealy, Lucas Stach, Nikita Yushchenko, Lee Jones, Greg Kroah-Hartman, Pavel Machek, Andy Shevchenko, Johan Hovold [-- Attachment #1: Type: text/plain, Size: 1771 bytes --] Hi, On Sat, Oct 21, 2017 at 10:08:40AM -0700, Guenter Roeck wrote: > On 10/18/2017 10:01 AM, Andrey Smirnov wrote: > > Using devres infrastructure it is possible to wirte a serdev driver > > s/wirte/write/ > > otherwise > > Reviewed-by: Guenter Roeck <linux@roeck-us.net> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> -- Sebastian > > that doesn't have any code that needs to be called as a part of > > .remove. Add code to make .remove optional. > > > > Cc: linux-kernel@vger.kernel.org > > Cc: linux-serial@vger.kernel.org > > Cc: Rob Herring <robh@kernel.org> > > Cc: cphealy@gmail.com > > Cc: Guenter Roeck <linux@roeck-us.net> > > Cc: Lucas Stach <l.stach@pengutronix.de> > > Cc: Nikita Yushchenko <nikita.yoush@cogentembedded.com> > > Cc: Lee Jones <lee.jones@linaro.org> > > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > Cc: Pavel Machek <pavel@ucw.cz> > > Cc: Andy Shevchenko <andy.shevchenko@gmail.com> > > Cc: Johan Hovold <johan@kernel.org> > > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > > --- > > drivers/tty/serdev/core.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c > > index c68fb3a8ea1c..f500f6a2ca88 100644 > > --- a/drivers/tty/serdev/core.c > > +++ b/drivers/tty/serdev/core.c > > @@ -252,8 +252,8 @@ static int serdev_drv_probe(struct device *dev) > > static int serdev_drv_remove(struct device *dev) > > { > > const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver); > > - > > - sdrv->remove(to_serdev_device(dev)); > > + if (sdrv->remove) > > + sdrv->remove(to_serdev_device(dev)); > > return 0; > > } > > > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v8 2/5] serdev: Introduce devm_serdev_device_open() [not found] <20171018170136.12347-1-andrew.smirnov@gmail.com> 2017-10-18 17:01 ` [PATCH v8 1/5] serdev: Make .remove in struct serdev_device_driver optional Andrey Smirnov @ 2017-10-18 17:01 ` Andrey Smirnov 2017-10-21 17:09 ` Guenter Roeck 2017-10-28 9:48 ` Sebastian Reichel 1 sibling, 2 replies; 6+ messages in thread From: Andrey Smirnov @ 2017-10-18 17:01 UTC (permalink / raw) To: linux-kernel Cc: Andrey Smirnov, linux-serial, Rob Herring, cphealy, Guenter Roeck, Lucas Stach, Nikita Yushchenko, Lee Jones, Greg Kroah-Hartman, Pavel Machek, Andy Shevchenko, Johan Hovold Add code implementing managed version of serdev_device_open() for serdev device drivers that "open" the device during driver's lifecycle only once (e.g. opened in .probe() and closed in .remove()). Cc: linux-kernel@vger.kernel.org Cc: linux-serial@vger.kernel.org Cc: Rob Herring <robh@kernel.org> Cc: cphealy@gmail.com Cc: Guenter Roeck <linux@roeck-us.net> Cc: Lucas Stach <l.stach@pengutronix.de> Cc: Nikita Yushchenko <nikita.yoush@cogentembedded.com> Cc: Lee Jones <lee.jones@linaro.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Pavel Machek <pavel@ucw.cz> Cc: Andy Shevchenko <andy.shevchenko@gmail.com> Cc: Johan Hovold <johan@kernel.org> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> --- Documentation/driver-model/devres.txt | 3 +++ drivers/tty/serdev/core.c | 27 +++++++++++++++++++++++++++ include/linux/serdev.h | 1 + 3 files changed, 31 insertions(+) diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt index 69f08c0f23a8..e9c6b5cfeec1 100644 --- a/Documentation/driver-model/devres.txt +++ b/Documentation/driver-model/devres.txt @@ -383,6 +383,9 @@ RESET devm_reset_control_get() devm_reset_controller_register() +SERDEV + devm_serdev_device_open() + SLAVE DMA ENGINE devm_acpi_dma_controller_register() diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c index f500f6a2ca88..b3a785665c6f 100644 --- a/drivers/tty/serdev/core.c +++ b/drivers/tty/serdev/core.c @@ -116,6 +116,33 @@ void serdev_device_close(struct serdev_device *serdev) } EXPORT_SYMBOL_GPL(serdev_device_close); +static void devm_serdev_device_release(struct device *dev, void *dr) +{ + serdev_device_close(*(struct serdev_device **)dr); +} + +int devm_serdev_device_open(struct device *dev, struct serdev_device *serdev) +{ + struct serdev_device **dr; + int ret; + + dr = devres_alloc(devm_serdev_device_release, sizeof(*dr), GFP_KERNEL); + if (!dr) + return -ENOMEM; + + ret = serdev_device_open(serdev); + if (ret) { + devres_free(dr); + return ret; + } + + *dr = serdev; + devres_add(dev, dr); + + return ret; +} +EXPORT_SYMBOL_GPL(devm_serdev_device_open); + void serdev_device_write_wakeup(struct serdev_device *serdev) { complete(&serdev->write_comp); diff --git a/include/linux/serdev.h b/include/linux/serdev.h index e69402d4a8ae..9929063bd45d 100644 --- a/include/linux/serdev.h +++ b/include/linux/serdev.h @@ -193,6 +193,7 @@ static inline int serdev_controller_receive_buf(struct serdev_controller *ctrl, int serdev_device_open(struct serdev_device *); void serdev_device_close(struct serdev_device *); +int devm_serdev_device_open(struct device *, struct serdev_device *); unsigned int serdev_device_set_baudrate(struct serdev_device *, unsigned int); void serdev_device_set_flow_control(struct serdev_device *, bool); int serdev_device_write_buf(struct serdev_device *, const unsigned char *, size_t); -- 2.13.5 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v8 2/5] serdev: Introduce devm_serdev_device_open() 2017-10-18 17:01 ` [PATCH v8 2/5] serdev: Introduce devm_serdev_device_open() Andrey Smirnov @ 2017-10-21 17:09 ` Guenter Roeck 2017-10-28 9:48 ` Sebastian Reichel 1 sibling, 0 replies; 6+ messages in thread From: Guenter Roeck @ 2017-10-21 17:09 UTC (permalink / raw) To: Andrey Smirnov, linux-kernel Cc: linux-serial, Rob Herring, cphealy, Lucas Stach, Nikita Yushchenko, Lee Jones, Greg Kroah-Hartman, Pavel Machek, Andy Shevchenko, Johan Hovold On 10/18/2017 10:01 AM, Andrey Smirnov wrote: > Add code implementing managed version of serdev_device_open() for > serdev device drivers that "open" the device during driver's lifecycle > only once (e.g. opened in .probe() and closed in .remove()). > > Cc: linux-kernel@vger.kernel.org > Cc: linux-serial@vger.kernel.org > Cc: Rob Herring <robh@kernel.org> > Cc: cphealy@gmail.com > Cc: Guenter Roeck <linux@roeck-us.net> > Cc: Lucas Stach <l.stach@pengutronix.de> > Cc: Nikita Yushchenko <nikita.yoush@cogentembedded.com> > Cc: Lee Jones <lee.jones@linaro.org> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Cc: Pavel Machek <pavel@ucw.cz> > Cc: Andy Shevchenko <andy.shevchenko@gmail.com> > Cc: Johan Hovold <johan@kernel.org> > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> > --- > Documentation/driver-model/devres.txt | 3 +++ > drivers/tty/serdev/core.c | 27 +++++++++++++++++++++++++++ > include/linux/serdev.h | 1 + > 3 files changed, 31 insertions(+) > > diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt > index 69f08c0f23a8..e9c6b5cfeec1 100644 > --- a/Documentation/driver-model/devres.txt > +++ b/Documentation/driver-model/devres.txt > @@ -383,6 +383,9 @@ RESET > devm_reset_control_get() > devm_reset_controller_register() > > +SERDEV > + devm_serdev_device_open() > + > SLAVE DMA ENGINE > devm_acpi_dma_controller_register() > > diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c > index f500f6a2ca88..b3a785665c6f 100644 > --- a/drivers/tty/serdev/core.c > +++ b/drivers/tty/serdev/core.c > @@ -116,6 +116,33 @@ void serdev_device_close(struct serdev_device *serdev) > } > EXPORT_SYMBOL_GPL(serdev_device_close); > > +static void devm_serdev_device_release(struct device *dev, void *dr) > +{ > + serdev_device_close(*(struct serdev_device **)dr); > +} > + > +int devm_serdev_device_open(struct device *dev, struct serdev_device *serdev) > +{ > + struct serdev_device **dr; > + int ret; > + > + dr = devres_alloc(devm_serdev_device_release, sizeof(*dr), GFP_KERNEL); > + if (!dr) > + return -ENOMEM; > + > + ret = serdev_device_open(serdev); > + if (ret) { > + devres_free(dr); > + return ret; > + } > + > + *dr = serdev; > + devres_add(dev, dr); > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(devm_serdev_device_open); > + > void serdev_device_write_wakeup(struct serdev_device *serdev) > { > complete(&serdev->write_comp); > diff --git a/include/linux/serdev.h b/include/linux/serdev.h > index e69402d4a8ae..9929063bd45d 100644 > --- a/include/linux/serdev.h > +++ b/include/linux/serdev.h > @@ -193,6 +193,7 @@ static inline int serdev_controller_receive_buf(struct serdev_controller *ctrl, > > int serdev_device_open(struct serdev_device *); > void serdev_device_close(struct serdev_device *); > +int devm_serdev_device_open(struct device *, struct serdev_device *); > unsigned int serdev_device_set_baudrate(struct serdev_device *, unsigned int); > void serdev_device_set_flow_control(struct serdev_device *, bool); > int serdev_device_write_buf(struct serdev_device *, const unsigned char *, size_t); > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v8 2/5] serdev: Introduce devm_serdev_device_open() 2017-10-18 17:01 ` [PATCH v8 2/5] serdev: Introduce devm_serdev_device_open() Andrey Smirnov 2017-10-21 17:09 ` Guenter Roeck @ 2017-10-28 9:48 ` Sebastian Reichel 1 sibling, 0 replies; 6+ messages in thread From: Sebastian Reichel @ 2017-10-28 9:48 UTC (permalink / raw) To: Andrey Smirnov Cc: linux-kernel, linux-serial, Rob Herring, cphealy, Guenter Roeck, Lucas Stach, Nikita Yushchenko, Lee Jones, Greg Kroah-Hartman, Pavel Machek, Andy Shevchenko, Johan Hovold [-- Attachment #1: Type: text/plain, Size: 3389 bytes --] Hi, On Wed, Oct 18, 2017 at 10:01:33AM -0700, Andrey Smirnov wrote: > Add code implementing managed version of serdev_device_open() for > serdev device drivers that "open" the device during driver's lifecycle > only once (e.g. opened in .probe() and closed in .remove()). > > Cc: linux-kernel@vger.kernel.org > Cc: linux-serial@vger.kernel.org > Cc: Rob Herring <robh@kernel.org> > Cc: cphealy@gmail.com > Cc: Guenter Roeck <linux@roeck-us.net> > Cc: Lucas Stach <l.stach@pengutronix.de> > Cc: Nikita Yushchenko <nikita.yoush@cogentembedded.com> > Cc: Lee Jones <lee.jones@linaro.org> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Cc: Pavel Machek <pavel@ucw.cz> > Cc: Andy Shevchenko <andy.shevchenko@gmail.com> > Cc: Johan Hovold <johan@kernel.org> > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > --- Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> -- Sebastian > Documentation/driver-model/devres.txt | 3 +++ > drivers/tty/serdev/core.c | 27 +++++++++++++++++++++++++++ > include/linux/serdev.h | 1 + > 3 files changed, 31 insertions(+) > > diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt > index 69f08c0f23a8..e9c6b5cfeec1 100644 > --- a/Documentation/driver-model/devres.txt > +++ b/Documentation/driver-model/devres.txt > @@ -383,6 +383,9 @@ RESET > devm_reset_control_get() > devm_reset_controller_register() > > +SERDEV > + devm_serdev_device_open() > + > SLAVE DMA ENGINE > devm_acpi_dma_controller_register() > > diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c > index f500f6a2ca88..b3a785665c6f 100644 > --- a/drivers/tty/serdev/core.c > +++ b/drivers/tty/serdev/core.c > @@ -116,6 +116,33 @@ void serdev_device_close(struct serdev_device *serdev) > } > EXPORT_SYMBOL_GPL(serdev_device_close); > > +static void devm_serdev_device_release(struct device *dev, void *dr) > +{ > + serdev_device_close(*(struct serdev_device **)dr); > +} > + > +int devm_serdev_device_open(struct device *dev, struct serdev_device *serdev) > +{ > + struct serdev_device **dr; > + int ret; > + > + dr = devres_alloc(devm_serdev_device_release, sizeof(*dr), GFP_KERNEL); > + if (!dr) > + return -ENOMEM; > + > + ret = serdev_device_open(serdev); > + if (ret) { > + devres_free(dr); > + return ret; > + } > + > + *dr = serdev; > + devres_add(dev, dr); > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(devm_serdev_device_open); > + > void serdev_device_write_wakeup(struct serdev_device *serdev) > { > complete(&serdev->write_comp); > diff --git a/include/linux/serdev.h b/include/linux/serdev.h > index e69402d4a8ae..9929063bd45d 100644 > --- a/include/linux/serdev.h > +++ b/include/linux/serdev.h > @@ -193,6 +193,7 @@ static inline int serdev_controller_receive_buf(struct serdev_controller *ctrl, > > int serdev_device_open(struct serdev_device *); > void serdev_device_close(struct serdev_device *); > +int devm_serdev_device_open(struct device *, struct serdev_device *); > unsigned int serdev_device_set_baudrate(struct serdev_device *, unsigned int); > void serdev_device_set_flow_control(struct serdev_device *, bool); > int serdev_device_write_buf(struct serdev_device *, const unsigned char *, size_t); > -- > 2.13.5 > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-10-28 9:48 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <20171018170136.12347-1-andrew.smirnov@gmail.com> 2017-10-18 17:01 ` [PATCH v8 1/5] serdev: Make .remove in struct serdev_device_driver optional Andrey Smirnov 2017-10-21 17:08 ` Guenter Roeck 2017-10-27 18:17 ` Sebastian Reichel 2017-10-18 17:01 ` [PATCH v8 2/5] serdev: Introduce devm_serdev_device_open() Andrey Smirnov 2017-10-21 17:09 ` Guenter Roeck 2017-10-28 9:48 ` Sebastian Reichel
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).