Re: [Linuxarm] [PATCH v2 1/3] i2c: core: add managed function for adding i2c adapters

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

 



On 2021/3/16 16:56, Song Bao Hua (Barry Song) wrote:
> 
> 
>> -----Original Message-----
>> From: Yicong Yang [mailto:yangyicong@xxxxxxxxxxxxx]
>> Sent: Wednesday, March 10, 2021 2:22 AM
>> To: wsa@xxxxxxxxxx; linux-i2c@xxxxxxxxxxxxxxx
>> Cc: linuxarm@xxxxxxxxxxxxx; Zengtao (B) <prime.zeng@xxxxxxxxxxxxx>;
>> yangyicong <yangyicong@xxxxxxxxxx>
>> Subject: [Linuxarm] [PATCH v2 1/3] i2c: core: add managed function for adding
>> i2c adapters
>>
>> Some I2C controller drivers will only unregister the I2C
>> adapter in their .remove() callback, which can be done
>> by simply using a managed variant to add the I2C adapter.
>>
>> So add the managed functions for adding the I2C adapter.
> 
> Sounds like a very useful wrapper. We are able to remove
> some  "remove" callbacks afterwards.
> We have some similar wrappers like devm_hwrng_register
> which is always helpful.

devm_* are widely used for helping managing the resources
and simplify the driver in other subsystems, so i think
i2c core will also benefit from this. :)
thanks for looking into this patch.

Regards,
Yicong

> 
>>
>> Signed-off-by: Yicong Yang <yangyicong@xxxxxxxxxxxxx>
>> ---
>>  drivers/i2c/i2c-core-base.c | 39 +++++++++++++++++++++++++++++++++++++++
>>  include/linux/i2c.h         |  1 +
>>  2 files changed, 40 insertions(+)
>>
>> diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
>> index 63ebf72..61486dc 100644
>> --- a/drivers/i2c/i2c-core-base.c
>> +++ b/drivers/i2c/i2c-core-base.c
>> @@ -1550,6 +1550,38 @@ int i2c_add_adapter(struct i2c_adapter *adapter)
>>  }
>>  EXPORT_SYMBOL(i2c_add_adapter);
>>
>> +static void devm_i2c_del_adapter(struct device *dev, void *ptr);
>> +
>> +/**
>> + * devm_i2c_add_adapter - device-managed variant of i2c_add_adapter()
>> + * @dev: managing device for adding this I2C adapter
>> + * @adapter: the adapter to add
>> + * Context: can sleep
>> + *
>> + * Add adapter with dynamic bus number, same with i2c_add_adapter()
>> + * but the adapter will be auto deleted on driver detach.
>> + */
>> +int devm_i2c_add_adapter(struct device *dev, struct i2c_adapter *adapter)
>> +{
>> +	struct i2c_adapter **ptr;
>> +	int ret;
>> +
>> +	ptr = devres_alloc(devm_i2c_del_adapter, sizeof(*ptr), GFP_KERNEL);
>> +	if (!ptr)
>> +		return -ENOMEM;
>> +
>> +	ret = i2c_add_adapter(adapter);
>> +	if (!ret) {
>> +		*ptr = adapter;
>> +		devres_add(dev, ptr);
>> +	} else {
>> +		devres_free(ptr);
>> +	}
>> +
>> +	return ret;
>> +}
>> +EXPORT_SYMBOL(devm_i2c_add_adapter);
>> +
>>  /**
>>   * i2c_add_numbered_adapter - declare i2c adapter, use static bus number
>>   * @adap: the adapter to register (with adap->nr initialized)
>> @@ -1703,6 +1735,13 @@ void i2c_del_adapter(struct i2c_adapter *adap)
>>  }
>>  EXPORT_SYMBOL(i2c_del_adapter);
>>
>> +static void devm_i2c_del_adapter(struct device *dev, void *ptr)
>> +{
>> +	struct i2c_adapter *adapter = *((struct i2c_adapter **)ptr);
>> +
>> +	i2c_del_adapter(adapter);
>> +}
>> +
>>  static void i2c_parse_timing(struct device *dev, char *prop_name, u32
>> *cur_val_p,
>>  			    u32 def_val, bool use_def)
>>  {
>> diff --git a/include/linux/i2c.h b/include/linux/i2c.h
>> index 5662265..10bd0b0 100644
>> --- a/include/linux/i2c.h
>> +++ b/include/linux/i2c.h
>> @@ -844,6 +844,7 @@ static inline void i2c_mark_adapter_resumed(struct
>> i2c_adapter *adap)
>>   */
>>  #if IS_ENABLED(CONFIG_I2C)
>>  int i2c_add_adapter(struct i2c_adapter *adap);
>> +int devm_i2c_add_adapter(struct device *dev, struct i2c_adapter *adapter);
>>  void i2c_del_adapter(struct i2c_adapter *adap);
>>  int i2c_add_numbered_adapter(struct i2c_adapter *adap);
>>
>> --
>> 2.8.1
> 
> Thanks
> Barry
> 




[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