diff mbox series

i2c: core: Add stub for i2c_verify_client() if !CONFIG_I2C

Message ID 20210526174436.2208277-1-jic23@kernel.org
State New
Headers show
Series i2c: core: Add stub for i2c_verify_client() if !CONFIG_I2C | expand

Commit Message

Jonathan Cameron May 26, 2021, 5:44 p.m. UTC
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>


If I2C is not compiled, there is no way we should see a call to
i2c_verify_client() on a device that is an i2c client. As such,
provide a stub to return NULL to resolve an associated build failure.

The build is failing with this link error
ld: fxls8962af-core.o: in function `fxls8962af_fifo_transfer':
fxls8962af-core.c: undefined reference to `i2c_verify_client'

Reported-by: Tom Rix <trix@redhat.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

Fixes: 68068fad0e1c ("iio: accel: fxls8962af: fix errata bug E3 - I2C burst reads")
Cc: Sean Nyekjaer <sean@geanix.com>
Cc: Wolfram Sang <wsa@kernel.org>
---

Note the broken patch is only in the IIO/togreg branch at the moment.

 include/linux/i2c.h | 7 +++++++
 1 file changed, 7 insertions(+)

-- 
2.31.1

Comments

Sean Nyekjaer May 27, 2021, 5:38 a.m. UTC | #1
On 26/05/2021 19.44, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> 

> If I2C is not compiled, there is no way we should see a call to

> i2c_verify_client() on a device that is an i2c client. As such,

> provide a stub to return NULL to resolve an associated build failure.

> 

> The build is failing with this link error

> ld: fxls8962af-core.o: in function `fxls8962af_fifo_transfer':

> fxls8962af-core.c: undefined reference to `i2c_verify_client'

> 

> Reported-by: Tom Rix <trix@redhat.com>

> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> Fixes: 68068fad0e1c ("iio: accel: fxls8962af: fix errata bug E3 - I2C burst reads")

> Cc: Sean Nyekjaer <sean@geanix.com>

> Cc: Wolfram Sang <wsa@kernel.org>

Reviewed-by: Sean Nyekjaer <sean@geanix.com>

> ---

> 

> Note the broken patch is only in the IIO/togreg branch at the moment.


Didn't quite get that the stub was should go in linux/i2c.h, thought I had to make a stub in the driver.
But this seems appropriate :)

/Sean
Wolfram Sang May 27, 2021, 8:23 p.m. UTC | #2
Hi Jonathan,

> Fixes: 68068fad0e1c ("iio: accel: fxls8962af: fix errata bug E3 - I2C burst reads")

> Cc: Sean Nyekjaer <sean@geanix.com>

> Cc: Wolfram Sang <wsa@kernel.org>

> ---

> 

> Note the broken patch is only in the IIO/togreg branch at the moment.


Then the fixes tag should be removed. It is only for upstream commits.
It means we will have a merge dependency the next cycle, so I will send
my pull request early.

> 

>  include/linux/i2c.h | 7 +++++++

>  1 file changed, 7 insertions(+)

> 

> diff --git a/include/linux/i2c.h b/include/linux/i2c.h

> index e8f2ac8c9c3d..aa52738b9c46 100644

> --- a/include/linux/i2c.h

> +++ b/include/linux/i2c.h

> @@ -343,7 +343,14 @@ struct i2c_client {

>  };

>  #define to_i2c_client(d) container_of(d, struct i2c_client, dev)

>  

> +#if IS_ENABLED(CONFIG_I2C)


Hmm, can't we move this into an already existing IS_ENABLED block?
Jonathan Cameron June 3, 2021, 11:24 a.m. UTC | #3
On Thu, 27 May 2021 22:23:34 +0200
Wolfram Sang <wsa@kernel.org> wrote:

> Hi Jonathan,

> 

> > Fixes: 68068fad0e1c ("iio: accel: fxls8962af: fix errata bug E3 - I2C burst reads")

> > Cc: Sean Nyekjaer <sean@geanix.com>

> > Cc: Wolfram Sang <wsa@kernel.org>

> > ---

> > 

> > Note the broken patch is only in the IIO/togreg branch at the moment.  

> 

> Then the fixes tag should be removed. It is only for upstream commits.


Ok, so that is there because my assumption was that mostly like I'd take
this patch through IIO, in which case it's directly valid and necessary
for backport information purposes.  I'm guessing this one is unlikely to
cause merge conflicts given how localized it is...

You would do an immutable branch that I can pull into IIO. I'd really like
to avoid rebasing the IIO tree unless absolutely necessary as people are
working on top if it.
 
> It means we will have a merge dependency the next cycle, so I will send

> my pull request early.


Doesn't work.  There is a high chance the original patch will get ported
back to earlier kernels and there is no reference to let anyone know they
also need this one to avoid potential build issues on the stable kernel.

So, if you want to take this through I2C, the path forwards would be.
1) You take this one through I2C
2) I apply the original fix (which #ifdefs the relevant code out in the
   driver).
3) Once (1) is in mainline next cycle, I can revert (2) on the basis
   it is no longer necessary.

I'm fine with doing it this way as it avoids any cross dependencies.

> 

> > 

> >  include/linux/i2c.h | 7 +++++++

> >  1 file changed, 7 insertions(+)

> > 

> > diff --git a/include/linux/i2c.h b/include/linux/i2c.h

> > index e8f2ac8c9c3d..aa52738b9c46 100644

> > --- a/include/linux/i2c.h

> > +++ b/include/linux/i2c.h

> > @@ -343,7 +343,14 @@ struct i2c_client {

> >  };

> >  #define to_i2c_client(d) container_of(d, struct i2c_client, dev)

> >  

> > +#if IS_ENABLED(CONFIG_I2C)  

> 

> Hmm, can't we move this into an already existing IS_ENABLED block?


There aren't any similar #if / #else blocks for CONFIG_I2C in i2c.h
so it seemed neater to just add one around this individual element
and not destroy the general organization of the file.

Jonathan



> 

>
Wolfram Sang June 3, 2021, 11:55 a.m. UTC | #4
Hi Jonathan

> Ok, so that is there because my assumption was that mostly like I'd take

> this patch through IIO, in which case it's directly valid and necessary

> for backport information purposes.  I'm guessing this one is unlikely to

> cause merge conflicts given how localized it is...


I see. Makes sense.

> You would do an immutable branch that I can pull into IIO. I'd really like

> to avoid rebasing the IIO tree unless absolutely necessary as people are

> working on top if it.


Sure, let's avoid rebasing.

> Doesn't work.  There is a high chance the original patch will get ported

> back to earlier kernels and there is no reference to let anyone know they

> also need this one to avoid potential build issues on the stable kernel.

> 

> So, if you want to take this through I2C, the path forwards would be.

> 1) You take this one through I2C

> 2) I apply the original fix (which #ifdefs the relevant code out in the

>    driver).

> 3) Once (1) is in mainline next cycle, I can revert (2) on the basis

>    it is no longer necessary.

> 

> I'm fine with doing it this way as it avoids any cross dependencies.


The other solution is that you make an immutable branch for me? IIUC,
this would be easiest? It would work for me.

> > > +#if IS_ENABLED(CONFIG_I2C)  

> > 

> > Hmm, can't we move this into an already existing IS_ENABLED block?

> 

> There aren't any similar #if / #else blocks for CONFIG_I2C in i2c.h

> so it seemed neater to just add one around this individual element

> and not destroy the general organization of the file.


Could be argued. I'd still prefer to add it at line 480 (5.13-rc3) with
the #else branch added if you don't mind.

Thanks and kind regards,

   Wolfram
Jonathan Cameron June 3, 2021, 12:42 p.m. UTC | #5
On Thu, 3 Jun 2021 13:55:59 +0200
Wolfram Sang <wsa@kernel.org> wrote:

> Hi Jonathan

> 

> > Ok, so that is there because my assumption was that mostly like I'd take

> > this patch through IIO, in which case it's directly valid and necessary

> > for backport information purposes.  I'm guessing this one is unlikely to

> > cause merge conflicts given how localized it is...  

> 

> I see. Makes sense.

> 

> > You would do an immutable branch that I can pull into IIO. I'd really like

> > to avoid rebasing the IIO tree unless absolutely necessary as people are

> > working on top if it.  

> 

> Sure, let's avoid rebasing.

> 

> > Doesn't work.  There is a high chance the original patch will get ported

> > back to earlier kernels and there is no reference to let anyone know they

> > also need this one to avoid potential build issues on the stable kernel.

> > 

> > So, if you want to take this through I2C, the path forwards would be.

> > 1) You take this one through I2C

> > 2) I apply the original fix (which #ifdefs the relevant code out in the

> >    driver).

> > 3) Once (1) is in mainline next cycle, I can revert (2) on the basis

> >    it is no longer necessary.

> > 

> > I'm fine with doing it this way as it avoids any cross dependencies.  

> 

> The other solution is that you make an immutable branch for me? IIUC,

> this would be easiest? It would work for me.


Sure, I'll do that once we've agreed a v2

> 

> > > > +#if IS_ENABLED(CONFIG_I2C)    

> > > 

> > > Hmm, can't we move this into an already existing IS_ENABLED block?  

> > 

> > There aren't any similar #if / #else blocks for CONFIG_I2C in i2c.h

> > so it seemed neater to just add one around this individual element

> > and not destroy the general organization of the file.  

> 

> Could be argued. I'd still prefer to add it at line 480 (5.13-rc3) with

> the #else branch added if you don't mind.


Sure, I'll move it.

Jonathan

> 

> Thanks and kind regards,

> 

>    Wolfram

> 

>
diff mbox series

Patch

diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index e8f2ac8c9c3d..aa52738b9c46 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -343,7 +343,14 @@  struct i2c_client {
 };
 #define to_i2c_client(d) container_of(d, struct i2c_client, dev)
 
+#if IS_ENABLED(CONFIG_I2C)
 struct i2c_client *i2c_verify_client(struct device *dev);
+#else
+static inline struct i2c_client *i2c_verify_client(struct device *dev)
+{
+	return NULL;
+}
+#endif
 struct i2c_adapter *i2c_verify_adapter(struct device *dev);
 const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
 					 const struct i2c_client *client);