Re: [PATCH] i2c: avoid ifdeffery in I2C drivers with optional slave support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Dec 05, 2019 at 03:45:09PM +0100, Luca Ceresoli wrote:
> Hi Sascha,
> 
> On 04/12/19 10:53, Sascha Hauer wrote:
> > Always add the (un)reg_slave hooks to struct i2c_algorithm, even when
> > I2C slave support is disabled. With the cost of some binary space I2C
> > drivers with optional I2C slave support no longer have to #ifdef
> > the hooks. For the same reason add a stub for i2c_slave_event and make
> > enum i2c_slave_event present without I2C slave support.
> > 
> > Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>
> 
> I like the idea, but I have a question below.
> 
> > ---
> >  include/linux/i2c.h | 9 ++++++---
> >  1 file changed, 6 insertions(+), 3 deletions(-)
> > 
> > diff --git a/include/linux/i2c.h b/include/linux/i2c.h
> > index d2f786706657..74ebfcb43dd2 100644
> > --- a/include/linux/i2c.h
> > +++ b/include/linux/i2c.h
> > @@ -359,7 +359,6 @@ static inline void i2c_set_clientdata(struct i2c_client *dev, void *data)
> >  
> >  /* I2C slave support */
> >  
> > -#if IS_ENABLED(CONFIG_I2C_SLAVE)
> >  enum i2c_slave_event {
> >  	I2C_SLAVE_READ_REQUESTED,
> >  	I2C_SLAVE_WRITE_REQUESTED,
> > @@ -368,6 +367,7 @@ enum i2c_slave_event {
> >  	I2C_SLAVE_STOP,
> >  };
> >  
> > +#if IS_ENABLED(CONFIG_I2C_SLAVE)
> >  extern int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb);
> >  extern int i2c_slave_unregister(struct i2c_client *client);
> >  extern bool i2c_detect_slave_mode(struct device *dev);
> > @@ -379,6 +379,11 @@ static inline int i2c_slave_event(struct i2c_client *client,
> >  }
> >  #else
> >  static inline bool i2c_detect_slave_mode(struct device *dev) { return false; }
> > +static inline int i2c_slave_event(struct i2c_client *client,
> > +				  enum i2c_slave_event event, u8 *val)
> > +{
> > +	return -EINVAL;
> > +}
> >  #endif
> >  
> >  /**
> > @@ -553,10 +558,8 @@ struct i2c_algorithm {
> >  	/* To determine what the adapter supports */
> >  	u32 (*functionality)(struct i2c_adapter *adap);
> >  
> > -#if IS_ENABLED(CONFIG_I2C_SLAVE)
> >  	int (*reg_slave)(struct i2c_client *client);
> >  	int (*unreg_slave)(struct i2c_client *client);
> > -#endif
> 
> Assuming I2C slave users are a minority, would it make sense to move the
> two slave-related function pointers to a new 'struct i2c_slave_ops' and
> store a 'struct i2c_slave_ops*' here? This would to set a limit to the
> size increase for the majority of users.

Would be doable I guess. I have no strong opinion here, but that would
be done as a separate patch anyway, so should prevent this one from
being merged.

Sascha

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux