Re: pca953x GPIO

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

 



Hi Joan Pau,

On Fri, 24 Dec 2010 17:15:49 +0100, Joan Pau Beltran wrote:
> Thank you very much Jean and Giampolo.
> 
> After reading again the kernel GPIO Documentation, I have some doubts 
> that I would like to resolve and any word about them would be 
> apreciated. Please excuse me if the following questions seem too obvious 
> or are wrong formulated. I am very new to I2C and GPIO and can not get 
> much more information from the results of my searches.
> 
>  From Jean's words and the following citation in the GPIO Documentation
> 
> > 523    Board Support
> > 524    -------------
> > 525    For external GPIO controllers -- such as I2C or SPI expanders, ASICs, multi
> > 526    function devices, FPGAs or CPLDs -- most often board-specific code handles
> > 527    registering controller devices and ensures that their drivers know what GPIO
> > 528    numbers to use with gpiochip_add().  Their numbers often start right after
> > 529    platform-specific GPIOs.
> > 530
> > 531    For example, board setup code could create structures identifying the range
> > 532    of GPIOs that chip will expose, and passes them to each GPIO expander chip
> > 533    using platform_data.  Then the chip driver's probe() routine could pass that
> > 534    data to gpiochip_add().
> 
> 
> This platform-specific code is what Jean refers to, and must be compiled 
> into the kernel.
> If this is right, do we need to recompile the whole kernel with the new 
> code for your board, or we can compile only the code for a particular 
> board and load it as a module? And then, how can we access to the GPIO 
> pins from a userspace program?

Yes, you typically have to rebuild your kernel with specific platform
code for your new system, even though it would certainly be possible to
hack up an external kernel module instantiating the required I2C device.

In your specific case, it may be enough to add some custom code to the
i2c-i801. If you look at the end of function i801_probe, you'll see
such code already for a few systems. You can add your own system there.

I am not too familiar with the gpio subsystem, but my understanding is
that you can ask for your chip to expose its pins to user-space through
sysfs. It might even be the default.

> In several pages I have read three different modules are mentioned, 
> namely pca953x, i2c-dev and i2c-gpio. Could anybody clarify what is the 
> exact function of each of these modules, please?

i2c-gpio is used when you have an I2C bus hanging off 2 GPIO pins,
which are used to bit-bang the SDA and SCL lines of the bus. From your
previous system description, I don't think you need this, as your I2C
bus is handled by the i2c-i801 driver already.

pca953x is a device driver for I2C-based GPIO chips. If you have a
compatible I/O expander connected to your I2C bus, this is the driver
you want.

i2c-dev is a generic driver granting user-space access to I2C buses on
your system. It can be used to deal with I2C devices which don't have a
kernel driver yet, or for which you don't want to write or use a kernel
driver. But the most frequent use is for debugging, using i2c-tools
(i2cdump etc.)

> Does the pca953x just use the previous platform code and the general 
> GPIO support kernel facilities to expose the GPIO chip in the user space 
> under /sys/class/gpio ?

Yes, exactly.

> Does the i2c-dev module give an alternative way to access to a generic 
> i2c device via i2cget? If this is true, how can we access the GPIO pins 
> from a program in that case?

Yes, this is true, but as I said in my other reply already, i2cget
gives raw access to the registers, so you have a lot of work left to
make sense of the values. Basically, using i2c-dev to access a PCA953x
chip means you recode the pca953x driver in user-space. Honestly, I
don't get the point. Well, yes, of course, it saves you the step of
properly declaring the I2C device in the kernel, but the cost seems
very high.

-- 
Jean Delvare
http://khali.linux-fr.org/wishlist.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