FAILED: patch "[PATCH] iio: stx104: Unregister IIO device on remove callback" failed to apply to 4.7-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.7-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
45e98152850c36560484f3fa3bb857a4bfe1a419Mon Sep 17 00:00:00 2001
From: William Breathitt Gray <[email protected]>
Date: Tue, 19 Jul 2016 12:25:00 -0400
Subject: [PATCH] iio: stx104: Unregister IIO device on remove callback
The devm_iio_device_register function should not be used if custom operations must be performed in the remove callback. This patch replaces the dem_iio_device_register call with a iio_device_register call and respective iio_device_unregister call in the remove callback.
drivers/iio/dac/stx104.c +29 -9
@@ -65,6 +65,16 @@ struct stx104_gpio {unsigned int out_state; }; +/** +* struct stx104_dev - STX104 device private data structure +* @indio_dev: IIO device +* @chip: instance of the gpio_chip +*/ +struct stx104_dev { +struct iio_dev *indio_dev; +struct gpio_chip *chip; +}; +static int stx104_read_raw (struct iio_dev *indio_dev,struct iio_chan_spec const *chan,int *val,int *val2,long mask) {
@@ -107,6 +117,7 @@ static const struct iio_chan_spec stx104_channels[STX104_NUM_CHAN] = {static int stx104_gpio_get_direction (struct gpio_chip *chip,unsigned int offset) { +/* GPIO 0-3 are input only, while the rest are output only */ if (offset <4 )return 1 ;
@@ -169,6 +180,7 @@ static int stx104_probe(struct device *dev, unsigned int id)struct iio_dev *indio_dev;struct stx104_iio *priv;struct stx104_gpio *stx104gpio; +struct stx104_dev *stx104dev;int err; indio_dev =devm_iio_device_alloc (dev,sizeof (*priv));
@@ -179,6 +191,10 @@ static int stx104_probe(struct device *dev, unsigned int id)if (!stx104gpio)return -ENOMEM ; + stx104dev =devm_kzalloc (dev,sizeof (*stx104dev),GFP_KERNEL ); +if (!stx104dev) +return -ENOMEM ; +if (!devm_request_region (dev, base[id],STX104_EXTENT ,dev_name (dev))) { dev_err(dev, "Unable to lock port addresses (0x%X-0x%X)\n",
@@ -199,12 +215,6 @@ static int stx104_probe(struct device *dev, unsigned int id)outw (0 , base[id] +4 );outw (0 , base[id] +6 ); - err =devm_iio_device_register (dev, indio_dev); -if (err) { -dev_err (dev,"IIO device registering failed (%d)\n" , err); -return err; - } - stx104gpio->chip.label =dev_name (dev); stx104gpio->chip.parent = dev; stx104gpio->chip.owner =THIS_MODULE ;
@@ -220,7 +230,9 @@ static int stx104_probe(struct device *dev, unsigned int id)spin_lock_init (&stx104gpio->lock); -dev_set_drvdata (dev, stx104gpio); + stx104dev->indio_dev = indio_dev; + stx104dev->chip = &stx104gpio->chip; +dev_set_drvdata (dev, stx104dev); err =gpiochip_add_data (&stx104gpio->chip, stx104gpio);if (err) {
@@ -228,14 +240,22 @@ static int stx104_probe(struct device *dev, unsigned int id)return err; } + err =iio_device_register (indio_dev); +if (err) { +dev_err (dev,"IIO device registering failed (%d)\n" , err); +gpiochip_remove (&stx104gpio->chip); +return err; + } +return 0 ; }static int stx104_remove (struct device *dev,unsigned int id) { -struct stx104_gpio *const stx104gpio =dev_get_drvdata (dev); +struct stx104_dev *const stx104dev =dev_get_drvdata (dev); -gpiochip_remove (&stx104gpio->chip); +iio_device_unregister (stx104dev->indio_dev); +gpiochip_remove (stx104dev->chip);return 0 ; }
Quoted 9 lines · On Thu, Sep 22, 2016 at 03:10:21PM +0200, [email protected] wrote:
The patch below does not apply to the 4.7-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.thanks,
greg k-h
This patch fixes an issues introduced in commit 765550e4d98d ("iio: stx104: Add GPIO support for the Apex Embedded Systems STX104"). If I'm not mistaken, commit 765550e4d98d is not in the 4.7-stable tree. Since the source of the issue is not present, this patch to resolve the issue should not be merged into 4.7-stable.
Sincerely,
William Breathitt Gray
Quoted 115 lines
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
45e98152850c36560484f3fa3bb857a4bfe1a419Mon Sep 17 00:00:00 2001From: William Breathitt Gray <[email protected]>
Date: Tue, 19 Jul 2016 12:25:00 -0400
Subject: [PATCH] iio: stx104: Unregister IIO device on remove callbackThe
devm_iio_device_registerfunction should not be used if custom operations must be performed in the remove callback. This patch replaces thedem_iio_device_registercall with aiio_device_registercall and respectiveiio_device_unregistercall in the remove callback.Fixes 765550e4d98d ("iio: stx104: Add GPIO support for the Apex Embedded Systems STX104")Signed-off-by William Breathitt Gray <[email protected]>Cc <[email protected]>Signed-off-by Jonathan Cameron <[email protected]>drivers/iio/dac/stx104.c +29
-9@@ -65,6 +65,16 @@ struct stx104_gpio {unsigned int out_state; }; +/** +* struct stx104_dev - STX104 device private data structure +* @indio_dev: IIO device +* @chip: instance of the gpio_chip +*/ +struct stx104_dev { +struct iio_dev *indio_dev; +struct gpio_chip *chip; +}; +static int stx104_read_raw (struct iio_dev *indio_dev,struct iio_chan_spec const *chan,int *val,int *val2,long mask) {@@ -107,6 +117,7 @@ static const struct iio_chan_spec stx104_channels[STX104_NUM_CHAN] = {static int stx104_gpio_get_direction (struct gpio_chip *chip,unsigned int offset) { +/* GPIO 0-3 are input only, while the rest are output only */ if (offset <4 )return 1 ;@@ -169,6 +180,7 @@ static int stx104_probe(struct device *dev, unsigned int id)struct iio_dev *indio_dev;struct stx104_iio *priv;struct stx104_gpio *stx104gpio; +struct stx104_dev *stx104dev;int err; indio_dev =devm_iio_device_alloc (dev,sizeof (*priv));@@ -179,6 +191,10 @@ static int stx104_probe(struct device *dev, unsigned int id)if (!stx104gpio)return -ENOMEM ; + stx104dev =devm_kzalloc (dev,sizeof (*stx104dev),GFP_KERNEL ); +if (!stx104dev) +return -ENOMEM ; +if (!devm_request_region (dev, base[id],STX104_EXTENT ,dev_name (dev))) { dev_err(dev, "Unable to lock port addresses (0x%X-0x%X)\n",@@ -199,12 +215,6 @@ static int stx104_probe(struct device *dev, unsigned int id)outw (0 , base[id] +4 );outw (0 , base[id] +6 ); - err =devm_iio_device_register (dev, indio_dev); -if (err) { -dev_err (dev,"IIO device registering failed (%d)\n" , err); -return err; - } - stx104gpio->chip.label =dev_name (dev); stx104gpio->chip.parent = dev; stx104gpio->chip.owner =THIS_MODULE ;@@ -220,7 +230,9 @@ static int stx104_probe(struct device *dev, unsigned int id)spin_lock_init (&stx104gpio->lock); -dev_set_drvdata (dev, stx104gpio); + stx104dev->indio_dev = indio_dev; + stx104dev->chip = &stx104gpio->chip; +dev_set_drvdata (dev, stx104dev); err =gpiochip_add_data (&stx104gpio->chip, stx104gpio);if (err) {@@ -228,14 +240,22 @@ static int stx104_probe(struct device *dev, unsigned int id)return err; } + err =iio_device_register (indio_dev); +if (err) { +dev_err (dev,"IIO device registering failed (%d)\n" , err); +gpiochip_remove (&stx104gpio->chip); +return err; + } +return 0 ; }static int stx104_remove (struct device *dev,unsigned int id) { -struct stx104_gpio *const stx104gpio =dev_get_drvdata (dev); +struct stx104_dev *const stx104dev =dev_get_drvdata (dev); -gpiochip_remove (&stx104gpio->chip); +iio_device_unregister (stx104dev->indio_dev); +gpiochip_remove (stx104dev->chip);return 0 ; }
Quoted 19 lines · William Breathitt Gray
Quoted 4 lines · On Thu, Sep 22, 2016 at 03:10:21PM +0200, [email protected] wrote:
The patch below does not apply to the 4.7-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original gitcommit
Quoted 5 lines
id to <[email protected]>.
thanks,
greg k-h
This patch fixes an issues introduced in commit
765550e4d98d("iio: stx104: Add GPIO support for the Apex Embedded Systems STX104"). If I'm not mistaken, commit765550e4d98dis not in the 4.7-stable tree. Since the source of the issue is not present, this patch to resolve the issue should not be merged into 4.7-stable.
Quoted 3 lines
Sincerely,
William Breathitt Gray
Another wrong tag from me. Sorry!
Quoted 124 lines
Quoted 10 lines
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
45e98152850c36560484f3fa3bb857a4bfe1a419Mon Sep 17 00:00:00 2001From: William Breathitt Gray <[email protected]>
Date: Tue, 19 Jul 2016 12:25:00 -0400
Subject: [PATCH] iio: stx104: Unregister IIO device on remove callbackThe
devm_iio_device_registerfunction should not be used if custom operations must be performed in the remove callback. This patchreplaces
Quoted 4 lines
the
dem_iio_device_registercall with aiio_device_registercall and respectiveiio_device_unregistercall in the remove callback.Fixes 765550e4d98d ("iio: stx104: Add GPIO support for the ApexEmbedded Systems STX104")
drivers/iio/dac/stx104.c static const struct iio_chan_spec
Quoted 26 lines
Signed-off-by William Breathitt Gray <[email protected]>Cc <[email protected]>Signed-off-by Jonathan Cameron <[email protected]>drivers/iio/dac/stx104.c +10
-0@@ -65,6 +65,16 @@ struct stx104_gpio {unsigned int out_state; }; +/** +* struct stx104_dev - STX104 device private data structure +* @indio_dev: IIO device +* @chip: instance of the gpio_chip +*/ +struct stx104_dev { +struct iio_dev *indio_dev; +struct gpio_chip *chip; +}; +static int stx104_read_raw (struct iio_dev *indio_dev,struct iio_chan_spec const *chan,int *val,int *val2,long mask) {@@ -107,6 +117,7 @@ static const struct iio_chan_specstx104_channels[STX104_NUM_CHAN] = {
drivers/iio/dac/stx104.c static int stx104_probe(struct device *dev,
Quoted 8 lines
drivers/iio/dac/stx104.c +1
-0static int stx104_gpio_get_direction (struct gpio_chip *chip,unsigned int offset) { +/* GPIO 0-3 are input only, while the rest are output only */ if (offset <4 )return 1 ;@@ -169,6 +180,7 @@ static int stx104_probe(struct device *dev,unsigned int id)
drivers/iio/dac/stx104.c static int stx104_probe(struct device *dev,
Quoted 8 lines
drivers/iio/dac/stx104.c +1
-0struct iio_dev *indio_dev;struct stx104_iio *priv;struct stx104_gpio *stx104gpio; +struct stx104_dev *stx104dev;int err; indio_dev =devm_iio_device_alloc (dev,sizeof (*priv));@@ -179,6 +191,10 @@ static int stx104_probe(struct device *dev,unsigned int id)
drivers/iio/dac/stx104.c static int stx104_probe(struct device *dev,
Quoted 11 lines
drivers/iio/dac/stx104.c +4
-0if (!stx104gpio)return -ENOMEM ; + stx104dev =devm_kzalloc (dev,sizeof (*stx104dev),GFP_KERNEL ); +if (!stx104dev) +return -ENOMEM ; +if (!devm_request_region (dev, base[id],STX104_EXTENT ,dev_name (dev))) { dev_err(dev, "Unable to lock port addresses (0x%X-0x%X)\n",@@ -199,12 +215,6 @@ static int stx104_probe(struct device *dev,unsigned int id)
drivers/iio/dac/stx104.c static int stx104_probe(struct device *dev,
Quoted 13 lines
drivers/iio/dac/stx104.c +0
-6outw (0 , base[id] +4 );outw (0 , base[id] +6 ); - err =devm_iio_device_register (dev, indio_dev); -if (err) { -dev_err (dev,"IIO device registering failed (%d)\n" , err); -return err; - } - stx104gpio->chip.label =dev_name (dev); stx104gpio->chip.parent = dev; stx104gpio->chip.owner =THIS_MODULE ;@@ -220,7 +230,9 @@ static int stx104_probe(struct device *dev,unsigned int id)
drivers/iio/dac/stx104.c static int stx104_probe(struct device *dev,
Quoted 11 lines
drivers/iio/dac/stx104.c +3
-1spin_lock_init (&stx104gpio->lock); -dev_set_drvdata (dev, stx104gpio); + stx104dev->indio_dev = indio_dev; + stx104dev->chip = &stx104gpio->chip; +dev_set_drvdata (dev, stx104dev); err =gpiochip_add_data (&stx104gpio->chip, stx104gpio);if (err) {@@ -228,14 +240,22 @@ static int stx104_probe(struct device *dev,unsigned int id)
Quoted 25 lines
drivers/iio/dac/stx104.c +10
-2return err; } + err =iio_device_register (indio_dev); +if (err) { +dev_err (dev,"IIO device registering failed (%d)\n" , err); +gpiochip_remove (&stx104gpio->chip); +return err; + } +return 0 ; }static int stx104_remove (struct device *dev,unsigned int id) { -struct stx104_gpio *const stx104gpio =dev_get_drvdata (dev); +struct stx104_dev *const stx104dev =dev_get_drvdata (dev); -gpiochip_remove (&stx104gpio->chip); +iio_device_unregister (stx104dev->indio_dev); +gpiochip_remove (stx104dev->chip);return 0 ; }
Signature · 1 line
Sent from my Android device with K-9 Mail. Please excuse my brevity.