Kernel driver pcf8591¶
Supported chips:
Philips/NXP PCF8591
Prefix: ‘pcf8591’
Addresses scanned: none
Datasheet: Publicly available at the NXP website
- Authors:
- Aurelien Jarno <aurelien@aurel32.net>
- valuable contributions by Jan M. Sendler <sendler@sendler.de>,
- Jean Delvare <jdelvare@suse.de>
Description¶
The PCF8591 is an 8-bit A/D and D/A converter (4 analog inputs and oneanalog output) for the I2C bus produced by Philips Semiconductors (now NXP).It is designed to provide a byte I2C interface to up to 4 separate devices.
The PCF8591 has 4 analog inputs programmable as single-ended ordifferential inputs:
- mode 0:four single ended inputs
- Pins AIN0 to AIN3 are single ended inputs for channels 0 to 3
- mode 1:three differential inputs
- Pins AIN3 is the common negative differential inputPins AIN0 to AIN2 are positive differential inputs for channels 0 to 2
- mode 2:single ended and differential mixed
- Pins AIN0 and AIN1 are single ended inputs for channels 0 and 1Pins AIN2 is the positive differential input for channel 3Pins AIN3 is the negative differential input for channel 3
- mode 3:two differential inputs
- Pins AIN0 is the positive differential input for channel 0Pins AIN1 is the negative differential input for channel 0Pins AIN2 is the positive differential input for channel 1Pins AIN3 is the negative differential input for channel 1
See the datasheet for details.
Module parameters¶
input_mode int
Analog input mode:
- 0 = four single ended inputs
- 1 = three differential inputs
- 2 = single ended and differential mixed
- 3 = two differential inputs
Accessing PCF8591 via /sys interface¶
The PCF8591 is plainly impossible to detect! Thus the driver won’t eventry. You have to explicitly instantiate the device at the relevantaddress (in the interval [0x48..0x4f]) either through platform data, orusing the sysfs interface. See Documentation/i2c/instantiating-devices.rstfor details.
Directories are being created for each instantiated PCF8591:
- /sys/bus/i2c/devices/<0>-<1>/
- where <0> is the bus the chip is connected to (e. g. i2c-0)and <1> the chip address ([48..4f])
Inside these directories, there are such files:
in0_input, in1_input, in2_input, in3_input, out0_enable, out0_output, name
Name contains chip name.
The in0_input, in1_input, in2_input and in3_input files are RO. Reading givesthe value of the corresponding channel. Depending on the current analog inputsconfiguration, files in2_input and in3_input may not exist. Values rangefrom 0 to 255 for single ended inputs and -128 to +127 for differential inputs(8-bit ADC).
The out0_enable file is RW. Reading gives “1” for analog output enabled and“0” for analog output disabled. Writing accepts “0” and “1” accordingly.
The out0_output file is RW. Writing a number between 0 and 255 (8-bit DAC), sendthe value to the digital-to-analog converter. Note that a voltage willonly appears on AOUT pin if aout0_enable equals 1. Reading returns the lastvalue written.