| | 1 | I2C / SMBus TODO list |
| | 2 | Contact us if you have comments or wish to help. |
| | 3 | ------------------------------------------------ |
| | 4 | |
| | 5 | * SMBus 2.0 |
| | 6 | SMBus 2.0 requires PEC and ARP. Implementation is only required |
| | 7 | to access an SMBus 2.0 client chip that requires address resolution. |
| | 8 | Here is a preliminary plan. |
| | 9 | PEC (Packet Error Checking): |
| | 10 | Adapters may or may not have hardware support for PEC. |
| | 11 | - Add capability flag for I2C_FUNC_SMBUS_HWPEC to i2c.h |
| | 12 | - Add message flag for I2C_M_HWPEC for i2c_msg to i2c.h |
| | 13 | - Add transaction types for PEC versions to i2c.h |
| | 14 | - Add PEC generation/calculation to i2c-core.c |
| | 15 | - In i2c-core.c, pass HWPEC flag to adapter if PEC transaction |
| | 16 | is supported and adapter supports HWPEC. |
| | 17 | If adapter does not support HWPEC, do software PEC: add |
| | 18 | PEC byte to writes (convert byte write to word write, etc.); |
| | 19 | verify PEC and strip off on reads. |
| | 20 | - New return codes for bad PEC? |
| | 21 | - Add PEC support to the i2c-dev interface |
| | 22 | ARP (Address Resolution Protocol): |
| | 23 | Create a module i2c-arp which will serve as ARP Master. |
| | 24 | The design will be similar to "chip" drivers in lm_sensors. |
| | 25 | It will respond to address 0x61 |
| | 26 | (the SMBus Device Default Address) on all i2c adapters. |
| | 27 | It will maintain UDID tables and the Used Address Pool. |
| | 28 | It may export this data via /proc. |
| | 29 | Additional communication may be required between i2c-arp and |
| | 30 | the adapter driver. |
| | 31 | ARP communications are SMBus Block Reads and Writes with PEC. |
| | 32 | Note: "Notify ARP Master" at address 0x08 does not appear |
| | 33 | to be required. It would depend on Host-as-slave mode (see below), |
| | 34 | and some method to signal the i2c-arp module. |
| | 35 | |
| | 36 | * 16-bit Register Addresses |
| | 37 | There is no support for 16-bit register addresses (used by serial |
| | 38 | eeproms larger than 16K bit, such as the Atmel 24C32) in i2c-core.c |
| | 39 | or i2c-dev.c. |
| | 40 | Emulation support is required; the Intel i801, for example, |
| | 41 | supports a 16-bit address i2c block read (see i2c-i801 in lm_sensors). |
| | 42 | General 16-bit support for all transaction types will require |
| | 43 | many changes. Support for 16-bit address block |
| | 44 | accesses only can be added more easily, and the |
| | 45 | functionality #defines I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 and |
| | 46 | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2 have been added to i2c.h. |
| | 47 | This may be enough to begin with for these new eeproms. |
| | 48 | The emulation layer has not been implemented. |
| | 49 | There is an alternate proposal from Wolfgang Denk <wd@denx.de> |
| | 50 | for a driver 'i2c-simple' that supports a generalized address |
| | 51 | length of 1-4 bytes and accesses via ioctls on /dev. |
| | 52 | |
| | 53 | * Host-as-slave mode in i2c adapters may need to be integrated |
| | 54 | with the adapter host code, because the lm_sensors-type chip driver |
| | 55 | architecture is not well suited to implementing a chip slave, |
| | 56 | the slave mode will require locking with the master mode, and |
| | 57 | specialized commmunication such as "Notify ARP Master". |
| | 58 | Adapters may respond to one or more host-as-slave addresses. The |
| | 59 | functionality bits and the rest of the API will have to be extended |
| | 60 | to support slaves embedded in host adapters. |
| | 61 | |
| | 62 | * 64-bit functionality values may be required to represent all |
| | 63 | the new capabilities described above. |
| | 64 | |
| | 65 | * Emulation layer i2c block reads are fixed at 32 bytes and there is |
| | 66 | currently no method to change it. You cannot, for example, |
| | 67 | read an entire serial eeprom with a single block read, or read |
| | 68 | only the 7 bytes in a clock chip. |
| | 69 | |
| | 70 | * Enhance mkpatch so it will patch additional drivers such as |
| | 71 | the Power PC modules to 2.4 kernels that support it. Currently |
| | 72 | these drivers are not patched because it would break 2.2 kernels. |
| | 73 | |
| | 74 | * i2c-pcf-epp.h is missing, so i2c-pcf-epp.c can't be compiled. |
| | 75 | |
| | 76 | * i2c version strings were added to i2c.h but they are used only |
| | 77 | for printk's. Integers would be better for use in preprocessor |
| | 78 | directives for conditional compiles. |
| | 79 | |
| | 80 | * Alternative i2c implementations in kernel to be converted to |
| | 81 | the standard i2c implementation in this package. |
| | 82 | Most if not all of these are bit-banging algorithms, |
| | 83 | for which the official driver is drivers/i2c/i2c-algo-bit.c. |
| | 84 | For a good example of using i2c-algo-bit, see drivers/acorn/char/i2c.c. |
| | 85 | |
| | 86 | drivers/media/video/i2c-old.c Used by: |
| | 87 | drivers/media/video/buz.c |
| | 88 | drivers/media/video/i2c-parport.c |
| | 89 | drivers/media/video/saa7110.c |
| | 90 | drivers/media/video/saa7111.c |
| | 91 | drivers/media/video/saa7185.c |
| | 92 | drivers/media/video/stradis.c |
| | 93 | drivers/media/video/zr36120.c |
| | 94 | drivers/media/video/zr36120_i2c.c |
| | 95 | arch/ppc/mbxboot/iic.c |
| | 96 | drivers/media/radio/radio-trust.c |
| | 97 | drivers/media/video/pms.c |
| | 98 | drivers/media/video/stradis.c |
| | 99 | drivers/net/acenic.c |
| | 100 | drivers/net/sk98lin/ski2c.c |
| | 101 | drivers/sbus/char/envctrl.c |
| | 102 | drivers/sbus/char/vfc_i2c.c |
| | 103 | drivers/scsi/cpqfcTSi2c.c |
| | 104 | drivers/usb/ov511.c |
| | 105 | |