The U-Boot Driver Model Project
===============================
Hwmon device subsystem analysis
===============================

Tomas Hlavacek <tmshlvck@gmail.com>
2012-03-02

I) Overview
-----------

U-Boot currently implements one API for HW monitoring devices. The
interface is defined in include/dtt.h and comprises of functions:

    void dtt_init(void);
    int dtt_init_one(int);
    int dtt_read(int sensor, int reg);
    int dtt_write(int sensor, int reg, int val);
    int dtt_get_temp(int sensor);

The functions are implemented by a proper device driver in drivers/hwmon
directory and the driver to be compiled in is selected in a Makefile.
Drivers are mutually exclusive.

Drivers depends on I2O code and naturally on board specific data. There are
few ad-hoc constants put in dtt.h file and driver headers and code. This
has to be consolidated into board specific data or driver headers if those
constants makes sense globally.


II) Approach
------------

  1) New API
  ----------
  In the UDM each hwmon driver would register itself by a function

    int hwmon_device_register(struct instance *i,
                              struct hwmon_device_ops *o);

  The structure being defined as follows:

    struct hwmon_device_ops {
        int  (*read)(struct instance *i, int sensor, int reg);
        int  (*write)(struct instance *i, int sensor, int reg,
                      int val);
        int  (*get_temp)(struct instance *i, int sensor);
    };


  2) Conversion thougths
  ----------------------
  U-Boot hwmon drivers exports virtually the same functions (with exceptions)
  and we are considering low number of drivers and code anyway. The interface
  is already similar and unified by the interface defined in dtt.h.
  Current initialization functions dtt_init() and dtt_init_one() will be
  converted into probe() and hwmon_device_register(), so the funcionality will
  be kept in more proper places. Besides implementing core registration and
  initialization we need to do code cleanup, especially separate
  driver-specific and HW specific constants.

  3) Special consideration due to early initialization
  ----------------------------------------------------
  The dtt_init() function call is used during early initialization in
  board/gdsys/405ex/io64.c for starting up fans. The dtt code is perfectly
  usable in the early stage because it uses only local variables and no heap
  memory is required at this level. However the underlying code of I2C has to
  keep the same properties with regard to possibility of running in early
  initialization stage.

III) Analysis of in-tree drivers
--------------------------------

  1) drivers/hwmon/lm81.c
  -----------------------
  The driver is standard dtt. Simple conversion is possible.


  2) drivers/hwmon/ds1722.c
  -------------------------
  The driver is not standard dtt, but interface is similar to dtt.
  The interface has to be changed in order to comply to above mentioned
  specification.


  3) drivers/hwmon/ds1775.c
  -------------------------
  The driver is standard dtt. Simple conversion is possible.


  4) drivers/hwmon/lm73.c
  -----------------------
  The driver is standard dtt. Simple conversion is possible.


  5) drivers/hwmon/lm63.c
  -----------------------
  The driver is standard dtt. Simple conversion is possible.


  6) drivers/hwmon/adt7460.c
  --------------------------
  The driver is standard dtt. Simple conversion is possible.


  7) drivers/hwmon/lm75.c
  -----------------------
  The driver is standard dtt. Simple conversion is possible.


  8) drivers/hwmon/ds1621.c
  -------------------------
  The driver is standard dtt. Simple conversion is possible.


  9) drivers/hwmon/adm1021.c
  --------------------------
  The driver is standard dtt. Simple conversion is possible.
