Re: [PATCH, RFC] Freescale STMP: i2c driver

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

 



Hello Ben,

I am sending the updated patch in next message, and this message is just
to answer your questions/concerns.\

[...]
> > +#include <mach/regs-apbx.h>
> > +
> > +static const u32 I2C_READ = 1,
> > +		 I2C_WRITE = 0;
> 
> do you really want to be defining things with a prefix of I2C, thatB
> might end up clashing with the i2c core?
Fixed, changed to I2C_SMBUS_READ/WRITE as Jean Delvare proposed.
> 
> > +static const struct stmp3xxx_dma_command cmd_i2c_select = {
> > +	.cmd =	BF(1, APBX_CHn_CMD_XFER_COUNT)	|
> > +		BF(1, APBX_CHn_CMD_CMDWORDS)	|
> > +		BM_APBX_CHn_CMD_WAIT4ENDCMD	|
> > +		BM_APBX_CHn_CMD_CHAIN		|
> > +		BF(BV_APBX_CHn_CMD_COMMAND__DMA_READ, APBX_CHn_CMD_COMMAND),
> 
> what is BF() ?
it is the macro from arch/arm/plat-stmp3xxx/include/mach/platform.h,
abbreviated "bitfield" :) For example, BF(1, APBX_CHn_CMD_CMDWORDS) is
expanded like 
((1 << BP_APBX_CHn_CMD_CMDWORDS) & BM_APBX_CHn_CMD_CMDWORDS).
BP_xxx stuff means bitfield position, BM_xxx - bitfield mask. 

>> +     dev->bufv = dma_alloc_coherent(dev->dev, PAGE_SIZE,
>> +                                    &dev->bufp, GFP_KERNEL);>
>> +     if (dma_mapping_error(dev->dev, dev->bufp))
>> +             goto out_dma;
> hmm, doesn't dma_alloc_coherent() fail with an NULL buffer return?
Fixed; but using dma_mapping_error seems to be more accurate method to
me. 0 might be valid dma address on some architecture. Again, for the
time being there is no difference to check dma_mapping_error or plain
compare with NULL...

[skipped]
> > +	adap = &dev->adapter;
> > +	i2c_set_adapdata(adap, dev);
> > +	adap->owner = THIS_MODULE;
> > +	adap->class = I2C_CLASS_HWMON;
> 
> is this the correct class?
Mmm.. I changed this to I2C_CLASS_TV_DIGITAL since the only I2C user is
digital radio daughterboard. Any objections?
> 
> > +	strncpy(adap->name, "378x I2C adapter", sizeof(adap->name));
> > +	adap->algo = &stmp378x_i2c_algo;
> > +	adap->dev.parent = &pdev->dev;
> > +
> > +	adap->nr = pdev->id;
> > +	err = i2c_add_numbered_adapter(adap);
> > +	if (err) {
> > +		dev_err(&pdev->dev, "Failed to add adapter\n");
> > +		goto no_i2c_adapter;
> > +
> > +	}
> > +
> > +	return 0;
> > +
> > +no_i2c_adapter:
> > +	stmp378x_i2c_release(dev);
> > +init_failed:
> > +	free_irq(dev->irq, dev);
> > +no_err_irq:
> > +	iounmap(dev->io);
> > +nores:
> > +	kfree(dev);
> > +	return err;
> > +}
> > +
> > +static int __devexit
> > +stmp378x_i2c_remove(struct platform_device *pdev)
> > +{
> > +	struct stmp378x_i2c_dev	*dev = platform_get_drvdata(pdev);
> > +	int res;
> > +
> > +	res = i2c_del_adapter(&dev->adapter);
> > +	if (res)
> > +		return -EBUSY;
> > +
> > +	stmp378x_i2c_release(dev);
> > +
> > +	platform_set_drvdata(pdev, NULL);
> > +
> > +	free_irq(dev->irq, dev);
> > +	iounmap(dev->io);
> > +
> > +	kfree(dev);
> > +	return 0;
> > +}
> > +
> > +static struct platform_driver stmp378x_i2c_driver = {
> > +	.probe		= stmp378x_i2c_probe,
> > +	.remove		= __devexit_p(stmp378x_i2c_remove),
> > +	.driver		= {
> > +		.name	= "i2c_stmp",
> > +		.owner	= THIS_MODULE,
> > +	},
> > +};
> > +
> > +static int __init stmp378x_i2c_init_driver(void)
> > +{
> > +	return platform_driver_register(&stmp378x_i2c_driver);
> > +}
> > +module_init(stmp378x_i2c_init_driver);
> > +
> > +static void __exit stmp378x_i2c_exit_driver(void)
> > +{
> > +	platform_driver_unregister(&stmp378x_i2c_driver);
> > +}
> > +module_exit(stmp378x_i2c_exit_driver);
> > +
> > +MODULE_AUTHOR("d.frasenyak@xxxxxxxxxxxxxxxxx");
> > +MODULE_DESCRIPTION("I2C for Freescale STMP378x");
> > +MODULE_LICENSE("GPL");
> 
> no module alias for autoloading?
Added.
> > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
	

--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[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