[PATCH v4 5/7] ARM: davinci: i2c: add OF support

Heiko Schocher hs at denx.de
Tue May 29 23:28:21 EST 2012


Hello Grant,

Am 26.05.2012 08:08, Grant Likely wrote:
> On Tue, 22 May 2012 15:55:18 +0200, Heiko Schocher<hs at denx.de>  wrote:
>> add of support for the davinci i2c driver.
>>
>> Signed-off-by: Heiko Schocher<hs at denx.de>
>> Cc: davinci-linux-open-source at linux.davincidsp.com
>> Cc: linux-arm-kernel at lists.infradead.org
>> Cc: devicetree-discuss at lists.ozlabs.org
>> Cc: linux-i2c at vger.kernel.org
>> Cc: Ben Dooks<ben-linux at fluff.org>
>> Cc: Wolfram Sang<w.sang at pengutronix.de>
>> Cc: Grant Likely<grant.likely at secretlab.ca>
>> Cc: Sekhar Nori<nsekhar at ti.com>
>> Cc: Wolfgang Denk<wd at denx.de>
>> Cc: Sylwester Nawrocki<s.nawrocki at samsung.com>
>>
>> ---
>> - changes for v2:
>> - add comments from Sylwester Nawrocki<s.nawrocki at samsung.com>:
>>    - use "cell-index" instead "id"
>>    - OF_DEV_AUXDATA in the machine code, instead pre-define platform
>>      device name
>> - add comment from Grant Likely:
>>    - removed "id" resp. "cell-index" completely
>>    - fixed documentation
>>    - use of_match_ptr()
>>    - use devm_kzalloc() for allocating plattform data mem
>>    - fixed a whitespace issue
>> - no changes for v3
>> - changes for v4
>>    remove "pinmux-handle" property as discussed here:
>>    http://www.spinics.net/lists/arm-kernel/msg175701.html
>>    with Nori Sekhar
>> ---
>>   .../devicetree/bindings/arm/davinci/i2c.txt        |   31 +++++++++++++++++++
>>   drivers/i2c/busses/i2c-davinci.c                   |   32 ++++++++++++++++++++
>>   2 files changed, 63 insertions(+), 0 deletions(-)
>>   create mode 100644 Documentation/devicetree/bindings/arm/davinci/i2c.txt
[...]
>> diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
>> index a76d85f..c1783bb 100644
>> --- a/drivers/i2c/busses/i2c-davinci.c
>> +++ b/drivers/i2c/busses/i2c-davinci.c
[...]
>> @@ -676,6 +685,26 @@ static int davinci_i2c_probe(struct platform_device *pdev)
>>   	dev->irq = irq->start;
>>   	platform_set_drvdata(pdev, dev);
>>
>> +	if ((dev->dev->platform_data == NULL)&&
>> +		(pdev->dev.of_node)) {
>> +		struct davinci_i2c_platform_data *pdata;
>> +		u32 prop;
>> +
>> +		pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
>> +		if (!pdata) {
>> +			r = -ENOMEM;
>> +			goto err_free_mem;
>> +		}
>> +		memcpy(pdata,&davinci_i2c_platform_data_default,
>> +			sizeof(*pdata));
>> +		dev->dev->platform_data = pdata;
>
> This is actually illegal.  Drivers must not change the value of
> dev->dev->platform_data.  It messes up unbinding/rebinding drivers.
> You'll need to have a copy of the pointer in davinci_i2c_dev.

fixed.

bye,
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany


More information about the devicetree-discuss mailing list