]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - doc/driver-model/UDM-hwmon.txt
malta: correct tcl script path in README.malta
[karo-tx-uboot.git] / doc / driver-model / UDM-hwmon.txt
1 The U-Boot Driver Model Project
2 ===============================
3 Hwmon device subsystem analysis
4 ===============================
5
6 Tomas Hlavacek <tmshlvck@gmail.com>
7 2012-03-02
8
9 I) Overview
10 -----------
11
12 U-Boot currently implements one API for HW monitoring devices. The
13 interface is defined in include/dtt.h and comprises of functions:
14
15     void dtt_init(void);
16     int dtt_init_one(int);
17     int dtt_read(int sensor, int reg);
18     int dtt_write(int sensor, int reg, int val);
19     int dtt_get_temp(int sensor);
20
21 The functions are implemented by a proper device driver in drivers/hwmon
22 directory and the driver to be compiled in is selected in a Makefile.
23 Drivers are mutually exclusive.
24
25 Drivers depends on I2O code and naturally on board specific data. There are
26 few ad-hoc constants put in dtt.h file and driver headers and code. This
27 has to be consolidated into board specific data or driver headers if those
28 constants makes sense globally.
29
30
31 II) Approach
32 ------------
33
34   1) New API
35   ----------
36   In the UDM each hwmon driver would register itself by a function
37
38     int hwmon_device_register(struct instance *i,
39                               struct hwmon_device_ops *o);
40
41   The structure being defined as follows:
42
43     struct hwmon_device_ops {
44         int  (*read)(struct instance *i, int sensor, int reg);
45         int  (*write)(struct instance *i, int sensor, int reg,
46                       int val);
47         int  (*get_temp)(struct instance *i, int sensor);
48     };
49
50
51   2) Conversion thougths
52   ----------------------
53   U-Boot hwmon drivers exports virtually the same functions (with exceptions)
54   and we are considering low number of drivers and code anyway. The interface
55   is already similar and unified by the interface defined in dtt.h.
56   Current initialization functions dtt_init() and dtt_init_one() will be
57   converted into probe() and hwmon_device_register(), so the funcionality will
58   be kept in more proper places. Besides implementing core registration and
59   initialization we need to do code cleanup, especially separate
60   driver-specific and HW specific constants.
61
62   3) Special consideration due to early initialization
63   ----------------------------------------------------
64   The dtt_init() function call is used during early initialization in
65   board/gdsys/405ex/io64.c for starting up fans. The dtt code is perfectly
66   usable in the early stage because it uses only local variables and no heap
67   memory is required at this level. However the underlying code of I2C has to
68   keep the same properties with regard to possibility of running in early
69   initialization stage.
70
71 III) Analysis of in-tree drivers
72 --------------------------------
73
74   drivers/hwmon/lm81.c
75   --------------------
76   The driver is standard dtt. Simple conversion is possible.
77
78
79   drivers/hwmon/ds1722.c
80   ----------------------
81   The driver is not standard dtt, but interface is similar to dtt.
82   The interface has to be changed in order to comply to above mentioned
83   specification.
84
85
86   drivers/hwmon/ds1775.c
87   ----------------------
88   The driver is standard dtt. Simple conversion is possible.
89
90
91   drivers/hwmon/lm73.c
92   --------------------
93   The driver is standard dtt. Simple conversion is possible.
94
95
96   drivers/hwmon/lm63.c
97   --------------------
98   The driver is standard dtt. Simple conversion is possible.
99
100
101   drivers/hwmon/adt7460.c
102   -----------------------
103   The driver is standard dtt. Simple conversion is possible.
104
105
106   drivers/hwmon/lm75.c
107   --------------------
108   The driver is standard dtt. Simple conversion is possible.
109
110
111   drivers/hwmon/ds1621.c
112   ----------------------
113   The driver is standard dtt. Simple conversion is possible.
114
115
116   drivers/hwmon/adm1021.c
117   -----------------------
118   The driver is standard dtt. Simple conversion is possible.