xref: /openbmc/linux/Documentation/hwmon/pcf8591.rst (revision 976e3645923bdd2fe7893aae33fd7a21098bfb28)
17ebd8b66SMauro Carvalho ChehabKernel driver pcf8591
27ebd8b66SMauro Carvalho Chehab=====================
37ebd8b66SMauro Carvalho Chehab
47ebd8b66SMauro Carvalho ChehabSupported chips:
57ebd8b66SMauro Carvalho Chehab
67ebd8b66SMauro Carvalho Chehab  * Philips/NXP PCF8591
77ebd8b66SMauro Carvalho Chehab
87ebd8b66SMauro Carvalho Chehab    Prefix: 'pcf8591'
97ebd8b66SMauro Carvalho Chehab
107ebd8b66SMauro Carvalho Chehab    Addresses scanned: none
117ebd8b66SMauro Carvalho Chehab
127ebd8b66SMauro Carvalho Chehab    Datasheet: Publicly available at the NXP website
137ebd8b66SMauro Carvalho Chehab
147ebd8b66SMauro Carvalho Chehab	       http://www.nxp.com/pip/PCF8591_6.html
157ebd8b66SMauro Carvalho Chehab
167ebd8b66SMauro Carvalho ChehabAuthors:
177ebd8b66SMauro Carvalho Chehab      - Aurelien Jarno <aurelien@aurel32.net>
187ebd8b66SMauro Carvalho Chehab      - valuable contributions by Jan M. Sendler <sendler@sendler.de>,
197ebd8b66SMauro Carvalho Chehab      - Jean Delvare <jdelvare@suse.de>
207ebd8b66SMauro Carvalho Chehab
217ebd8b66SMauro Carvalho Chehab
227ebd8b66SMauro Carvalho ChehabDescription
237ebd8b66SMauro Carvalho Chehab-----------
247ebd8b66SMauro Carvalho Chehab
257ebd8b66SMauro Carvalho ChehabThe PCF8591 is an 8-bit A/D and D/A converter (4 analog inputs and one
267ebd8b66SMauro Carvalho Chehabanalog output) for the I2C bus produced by Philips Semiconductors (now NXP).
277ebd8b66SMauro Carvalho ChehabIt is designed to provide a byte I2C interface to up to 4 separate devices.
287ebd8b66SMauro Carvalho Chehab
297ebd8b66SMauro Carvalho ChehabThe PCF8591 has 4 analog inputs programmable as single-ended or
307ebd8b66SMauro Carvalho Chehabdifferential inputs:
317ebd8b66SMauro Carvalho Chehab
327ebd8b66SMauro Carvalho Chehab- mode 0 : four single ended inputs
337ebd8b66SMauro Carvalho Chehab	Pins AIN0 to AIN3 are single ended inputs for channels 0 to 3
347ebd8b66SMauro Carvalho Chehab
357ebd8b66SMauro Carvalho Chehab- mode 1 : three differential inputs
367ebd8b66SMauro Carvalho Chehab	Pins AIN3 is the common negative differential input
377ebd8b66SMauro Carvalho Chehab	Pins AIN0 to AIN2 are positive differential inputs for channels 0 to 2
387ebd8b66SMauro Carvalho Chehab
397ebd8b66SMauro Carvalho Chehab- mode 2 : single ended and differential mixed
407ebd8b66SMauro Carvalho Chehab	Pins AIN0 and AIN1 are single ended inputs for channels 0 and 1
417ebd8b66SMauro Carvalho Chehab	Pins AIN2 is the positive differential input for channel 3
427ebd8b66SMauro Carvalho Chehab	Pins AIN3 is the negative differential input for channel 3
437ebd8b66SMauro Carvalho Chehab
447ebd8b66SMauro Carvalho Chehab- mode 3 : two differential inputs
457ebd8b66SMauro Carvalho Chehab	Pins AIN0 is the positive differential input for channel 0
467ebd8b66SMauro Carvalho Chehab	Pins AIN1 is the negative differential input for channel 0
477ebd8b66SMauro Carvalho Chehab	Pins AIN2 is the positive differential input for channel 1
487ebd8b66SMauro Carvalho Chehab	Pins AIN3 is the negative differential input for channel 1
497ebd8b66SMauro Carvalho Chehab
507ebd8b66SMauro Carvalho ChehabSee the datasheet for details.
517ebd8b66SMauro Carvalho Chehab
527ebd8b66SMauro Carvalho ChehabModule parameters
537ebd8b66SMauro Carvalho Chehab-----------------
547ebd8b66SMauro Carvalho Chehab
557ebd8b66SMauro Carvalho Chehab* input_mode int
567ebd8b66SMauro Carvalho Chehab
577ebd8b66SMauro Carvalho Chehab    Analog input mode:
587ebd8b66SMauro Carvalho Chehab
597ebd8b66SMauro Carvalho Chehab	 - 0 = four single ended inputs
607ebd8b66SMauro Carvalho Chehab	 - 1 = three differential inputs
617ebd8b66SMauro Carvalho Chehab	 - 2 = single ended and differential mixed
627ebd8b66SMauro Carvalho Chehab	 - 3 = two differential inputs
637ebd8b66SMauro Carvalho Chehab
647ebd8b66SMauro Carvalho Chehab
657ebd8b66SMauro Carvalho ChehabAccessing PCF8591 via /sys interface
667ebd8b66SMauro Carvalho Chehab-------------------------------------
677ebd8b66SMauro Carvalho Chehab
687ebd8b66SMauro Carvalho ChehabThe PCF8591 is plainly impossible to detect! Thus the driver won't even
697ebd8b66SMauro Carvalho Chehabtry. You have to explicitly instantiate the device at the relevant
707ebd8b66SMauro Carvalho Chehabaddress (in the interval [0x48..0x4f]) either through platform data, or
71*ccf988b6SMauro Carvalho Chehabusing the sysfs interface. See Documentation/i2c/instantiating-devices.rst
727ebd8b66SMauro Carvalho Chehabfor details.
737ebd8b66SMauro Carvalho Chehab
747ebd8b66SMauro Carvalho ChehabDirectories are being created for each instantiated PCF8591:
757ebd8b66SMauro Carvalho Chehab
767ebd8b66SMauro Carvalho Chehab/sys/bus/i2c/devices/<0>-<1>/
777ebd8b66SMauro Carvalho Chehab   where <0> is the bus the chip is connected to (e. g. i2c-0)
787ebd8b66SMauro Carvalho Chehab   and <1> the chip address ([48..4f])
797ebd8b66SMauro Carvalho Chehab
807ebd8b66SMauro Carvalho ChehabInside these directories, there are such files:
817ebd8b66SMauro Carvalho Chehab
827ebd8b66SMauro Carvalho Chehab   in0_input, in1_input, in2_input, in3_input, out0_enable, out0_output, name
837ebd8b66SMauro Carvalho Chehab
847ebd8b66SMauro Carvalho ChehabName contains chip name.
857ebd8b66SMauro Carvalho Chehab
867ebd8b66SMauro Carvalho ChehabThe in0_input, in1_input, in2_input and in3_input files are RO. Reading gives
877ebd8b66SMauro Carvalho Chehabthe value of the corresponding channel. Depending on the current analog inputs
887ebd8b66SMauro Carvalho Chehabconfiguration, files in2_input and in3_input may not exist. Values range
897ebd8b66SMauro Carvalho Chehabfrom 0 to 255 for single ended inputs and -128 to +127 for differential inputs
907ebd8b66SMauro Carvalho Chehab(8-bit ADC).
917ebd8b66SMauro Carvalho Chehab
927ebd8b66SMauro Carvalho ChehabThe out0_enable file is RW. Reading gives "1" for analog output enabled and
937ebd8b66SMauro Carvalho Chehab"0" for analog output disabled. Writing accepts "0" and "1" accordingly.
947ebd8b66SMauro Carvalho Chehab
957ebd8b66SMauro Carvalho ChehabThe out0_output file is RW. Writing a number between 0 and 255 (8-bit DAC), send
967ebd8b66SMauro Carvalho Chehabthe value to the digital-to-analog converter. Note that a voltage will
977ebd8b66SMauro Carvalho Chehabonly appears on AOUT pin if aout0_enable equals 1. Reading returns the last
987ebd8b66SMauro Carvalho Chehabvalue written.
99