Kernel driver `ddcmon.o'
========================

Status: As complete as we want it to be, lightly tested

Supported chips:
  * Any DDC Monitor EDID EEPROM chip at 0x50
    Prefix `ddcmon'
    Addresses scanned: I2C 0x50
    Standards: available for purchase from VESA http://www.vesa.org
    Datasheets: Publicly available from Atmel (www.atmel.com),
                Fairchild (www.fairchildsemi.com), and
                Microchip (www.microchip.com)

	Chip	Size (bits)	Address
	24C01	 1K		0x50 (shadows at 0x51 - 0x57)
		 		     (Typical device in monitors)
	24C01A	 1K		0x50 - 0x57 (Typical device in monitors)
	24C02	 2K		0x50 - 0x57
	24C04	 4K		0x50, 0x52, 0x54, 0x56
				(additional data at 0x51, 0x53, 0x55, 0x57)
	24C08	 8K		0x50, 0x54 (additional data at 0x51, 0x52,
				0x53, 0x55, 0x56, 0x57)
	24C16	16K		0x50 (additional data at 0x51 - 0x57)


Author: Frodo Looijaard <frodol@dds.nl>, Philip Edelbrock
        <phil@netroedge.com>, Mark Studebaker <mdsxyz123@yahoo.com> and
        Jean Delvare <khali@linux-fr.org>

Special assistance on DDC provided by Petr Vandrovec <vandrove@vc.cvut.cz>

License: GPL


Module Parameters
-----------------

* force: short array (min = 1, max = 48)
  List of adapter,address pairs to boldly assume to be present
* force_ddcmon: short array (min = 1, max = 48)
  Same as 'force'
* ignore: short array (min = 1, max = 48)
  List of adapter,address pairs not to scan
* ignore_range: short array (min = 1, max = 48)
  List of adapter,start-addr,end-addr triples not to scan
* probe: short array (min = 1, max = 48)
  List of adapter,address pairs to scan additionally
* probe_range: short array (min = 1, max = 48)
  List of adapter,start-addr,end-addr triples to scan additionally
* checksum: int
  Only accept eeproms whose checksum is correct


Description
-----------

This is a simple module for reading the EEPROM on a DDC-compliant monitor.
DDC (Display Data Channel) is the I2C-based communication channel
to the monitor. The EEPROM contains a 128-byte data structure defined
by the EDID (Extended Display Identification Data) standard.

Use:

After inserting the module (and any other required smbus/i2c modules), you
should have a directory in /proc/sys/dev/sensors/ with a name such
as "ddcmon-i2c-3-50".  Inside each of these is a series of files which
represent interesting data from the DDC monitor.

/proc entries:

	dpms: bitmask
		DPMS support flags
		0x20 Active Off
		0x40 Suspend
		0x80 Standby

	edid: 2 integers
		EDID version and revision
	
	gamma: 1 float
		gamma factor

	id: 2 integers
		manufacturer ID and product ID
		Manufacturer ID is encoded, see 'sensors'
		source ../../prog/sensors/chips.c.

	maxclock: 1 integer
		max pixel clock (also known as video bandwidth) (MHz)
		0 if not available.

	serial: 1 integer
		serial number
		Encoding depends on the manufacturer, don't expect the
		real serial number here. 0 probably means "not available".

	size: 2 integers
		vertical monitor size (cm)
		horizontal monitor size (cm)

	sync: 4 integers
		minimum vertical sync frequency (Hz)
		maximum vertical sync frequency (Hz)
		minimum horizontal sync frequency (KHz)
		maximum horizontal sync frequency (KHz)
		0 0 0 0 if not available.

	time: 2 integers
		Manufacture year and week

	timing[1-8]: 3 integers
		supported standard timing
		horizontal resolution
		vertical resolution
		(vertical) refresh rate
		0 0 0 if not used.

	timings: bitmask
		supported established timings
		0x000001 720x400@70Hz (VGA 640x400, IBM)
		0x000002 720x400@88Hz (XGA2)
		0x000004 640x480@60Hz (VGA)
		0x000008 640x480@67Hz (Mac II, Apple)
		0x000010 640x480@72Hz (VESA)
		0x000020 640x480@75Hz (VESA)
		0x000040 800x600@56Hz (VESA)
		0x000080 800x600@60Hz (VESA)
		0x000100 800x600@72Hz (VESA)
		0x000200 800x600@75Hz (VESA)
		0x000400 832x624@75Hz (Mac II)
		0x000800 1024x768@87Hz interlaced (8514A)
		0x001000 1024x768@60Hz (VESA)
		0x002000 1024x768@70Hz (VESA)
		0x004000 1024x768@75Hz (VESA)
		0x008000 1280x1024@75Hz (VESA)
		0x010000 - 0x800000 Manufacturer reserved
		0x800000 1152x870 @ 75 Hz (Mac II, Apple)?


Chip Features
-------------

Chip 'ddcmon'

LABEL                 LABEL CLASS           COMPUTE CLASS          MODE  MAGN
Manufacturer ID       -                     -                       R-     0
Model Number          -                     -                       R-     0
Monitor Size (cm)     -                     -                       R-     0
hsize                 Monitor Size (cm)     -                       R-     0
Vertical Sync (Hz)    -                     -                       R-     0
v_sync_max            Vertical Sync (Hz)    -                       R-     0
Horizontal Sync (KHz) -                     -                       R-     0
h_sync_max            Horizontal Sync (KHz) -                       R-     0
Established Timings   -                     -                       R-     0
Serial Number         -                     -                       R-     0
Manufacture Time      -                     -                       R-     0
week                  Manufacture Time      -                       R-     0
EDID Version          -                     -                       R-     0
revision              EDID Version          -                       R-     0
Gamma Factor          -                     -                       R-     2
DPMS Modes            -                     -                       R-     0
Standard Timing 1     -                     -                       R-     0
vertical              Standard Timing 1     -                       R-     0
refresh               Standard Timing 1     -                       R-     0
Standard Timing 2     -                     -                       R-     0
vertical              Standard Timing 2     -                       R-     0
refresh               Standard Timing 2     -                       R-     0
Standard Timing 3     -                     -                       R-     0
vertical              Standard Timing 3     -                       R-     0
refresh               Standard Timing 3     -                       R-     0
Standard Timing 4     -                     -                       R-     0
vertical              Standard Timing 4     -                       R-     0
refresh               Standard Timing 4     -                       R-     0
Standard Timing 5     -                     -                       R-     0
vertical              Standard Timing 5     -                       R-     0
refresh               Standard Timing 5     -                       R-     0
Standard Timing 6     -                     -                       R-     0
vertical              Standard Timing 6     -                       R-     0
refresh               Standard Timing 6     -                       R-     0
Standard Timing 7     -                     -                       R-     0
vertical              Standard Timing 7     -                       R-     0
refresh               Standard Timing 7     -                       R-     0
Standard Timing 8     -                     -                       R-     0
vertical              Standard Timing 8     -                       R-     0
refresh               Standard Timing 8     -                       R-     0
Max Pixel Clock (MHz) -                     -                       R-     0

LABEL                 FEATURE SYMBOL                              SYSCTL FILE:N
Manufacturer ID       SENSORS_DDCMON_MAN_ID                                id:1
Model Number          SENSORS_DDCMON_PROD_ID                               id:2
Monitor Size (cm)     SENSORS_DDCMON_VERSIZE                             size:1
hsize                 SENSORS_DDCMON_HORSIZE                             size:2
Vertical Sync (Hz)    SENSORS_DDCMON_VERSYNCMIN                          sync:1
v_sync_max            SENSORS_DDCMON_VERSYNCMAX                          sync:2
Horizontal Sync (KHz) SENSORS_DDCMON_HORSYNCMIN                          sync:3
h_sync_max            SENSORS_DDCMON_HORSYNCMAX                          sync:4
Established Timings   SENSORS_DDCMON_TIMINGS                          timings:1
Serial Number         SENSORS_DDCMON_SERIAL                            serial:1
Manufacture Time      SENSORS_DDCMON_YEAR                                time:1
week                  SENSORS_DDCMON_WEEK                                time:2
EDID Version          SENSORS_DDCMON_EDID_VER                            edid:1
revision              SENSORS_DDCMON_EDID_REV                            edid:2
Gamma Factor          SENSORS_DDCMON_GAMMA                              gamma:1
DPMS Modes            SENSORS_DDCMON_DPMS                                dpms:1
Standard Timing 1     SENSORS_DDCMON_TIMING1_HOR                      timing1:1
vertical              SENSORS_DDCMON_TIMING1_VER                      timing1:2
refresh               SENSORS_DDCMON_TIMING1_REF                      timing1:3
Standard Timing 2     SENSORS_DDCMON_TIMING2_HOR                      timing2:1
vertical              SENSORS_DDCMON_TIMING2_VER                      timing2:2
refresh               SENSORS_DDCMON_TIMING2_REF                      timing2:3
Standard Timing 3     SENSORS_DDCMON_TIMING3_HOR                      timing3:1
vertical              SENSORS_DDCMON_TIMING3_VER                      timing3:2
refresh               SENSORS_DDCMON_TIMING3_REF                      timing3:3
Standard Timing 4     SENSORS_DDCMON_TIMING4_HOR                      timing4:1
vertical              SENSORS_DDCMON_TIMING4_VER                      timing4:2
refresh               SENSORS_DDCMON_TIMING4_REF                      timing4:3
Standard Timing 5     SENSORS_DDCMON_TIMING5_HOR                      timing5:1
vertical              SENSORS_DDCMON_TIMING5_VER                      timing5:2
refresh               SENSORS_DDCMON_TIMING5_REF                      timing5:3
Standard Timing 6     SENSORS_DDCMON_TIMING6_HOR                      timing6:1
vertical              SENSORS_DDCMON_TIMING6_VER                      timing6:2
refresh               SENSORS_DDCMON_TIMING6_REF                      timing6:3
Standard Timing 7     SENSORS_DDCMON_TIMING7_HOR                      timing7:1
vertical              SENSORS_DDCMON_TIMING7_VER                      timing7:2
refresh               SENSORS_DDCMON_TIMING7_REF                      timing7:3
Standard Timing 8     SENSORS_DDCMON_TIMING8_HOR                      timing8:1
vertical              SENSORS_DDCMON_TIMING8_VER                      timing8:2
refresh               SENSORS_DDCMON_TIMING8_REF                      timing8:3
Max Pixel Clock (MHz) SENSORS_DDCMON_MAXCLOCK                        maxclock:1


Notes
-----

- The eeprom.o module will also attach to a DDC monitor. Install the
  ddcmon.o module before the eeprom.o module to prevent this.
  Alternatively, give the eeprom.o module an ignore= parameter or
  a checksum= parameter. The ddcmon.o module will not attach to non-DDC
  eeproms because it checks for a DDC 'signature' at the beginning
  of the DDC Monitor's eeprom. Additionally, you can give it a checksum=
  parameter.

- If a DDC monitor eeprom lacks the 'signature', you may use the
  'force' parameter (modprobe ddcmon force=x,0x50 where 'x' is the
  i2c bus number).

- This module requires a bus driver for your video chip to access the
  DDC bus. In this package, drivers exist for Voodoo3/Banshee chips.
  See documentation for those drivers in ../busses. Other drivers
  (Matrox and NVidia, for example) are available in the kernel or
  elsewhere. See our 'Supported Devices' web page for details.

- There is a checksum over the 128 bytes in the eeprom. The driver
  used not to check it, now it does (providing you give it a
  checksum= parameter).

- More information is available in the eeprom which could be made
  available by enhancing the driver.
  To see the entire eeprom, use the eeprom.o module instead of ddcmon.o.
  However, then you lose the DDC-specific formatting.
  Also see ../../prog/eeprom/decode-edid.pl.

- This driver does not support the DDC/CI (DDC2Bi) bidirectional
  communications channel to the monitor for controlling the monitor.

- The driver caches the data from the monitor and only rereads it
  from the eeprom if the cache is more than 5 minutes old.

- X 4.0 also accesses the DDC monitor EEPROM to auto-configure itself.
  There could possibly be conflicts from these multiple accesses, but
  none were ever reported so far.
