1111#include "hooks.h"
1212#include "util.h"
1313#include "console.h"
14+ #include "math_util.h"
15+
16+ #define F75303_RESOLUTION 11
17+ #define F75303_SHIFT1 (16 - F75303_RESOLUTION)
18+ #define F75303_SHIFT2 (F75303_RESOLUTION - 8)
1419
1520static int temps [F75303_IDX_COUNT ];
1621static int8_t fake_temp [F75303_IDX_COUNT ] = {-1 , -1 , -1 };
@@ -33,6 +38,7 @@ static int raw_read8(const int offset, int *data)
3338 offset , data );
3439}
3540
41+ #ifndef CONFIG_CUSTOMZIED_DESIGN
3642static int get_temp (const int offset , int * temp )
3743{
3844 int rv ;
@@ -47,6 +53,40 @@ static int get_temp(const int offset, int *temp)
4753 * temp = C_TO_K (temp_raw );
4854 return EC_SUCCESS ;
4955}
56+ #else
57+ static int get_temp ( const int offset , int * temp )
58+ {
59+ int rv ;
60+ int data = 0 ;
61+ int temp_raw = 0 ;
62+
63+ /* read high byte (1 degree) and low byte (0.125 degree)*/
64+ switch (offset ) {
65+ case F75303_TEMP_LOCAL_REGISTER :
66+ rv = raw_read8 (offset , & temp_raw );
67+ rv = raw_read8 (F75303_TEMP_LOCAL_LOW_REGISTER , & data );
68+ break ;
69+ case F75303_TEMP_REMOTE1_REGISTER :
70+ rv = raw_read8 (offset , & temp_raw );
71+ rv = raw_read8 (F75303_TEMP_REMOTE1_LOW_REGISTER , & data );
72+ break ;
73+ case F75303_TEMP_REMOTE2_REGISTER :
74+ rv = raw_read8 (offset , & temp_raw );
75+ rv = raw_read8 (F75303_TEMP_REMOTE2_LOW_REGISTER , & data );
76+ break ;
77+ default :
78+ rv = EC_ERROR_INVAL ;
79+ }
80+
81+ if (rv != 0 )
82+ return rv ;
83+
84+ temp_raw = (temp_raw * 1000 ) + ((data >> 4 ) * 125 );
85+ * temp = MILLI_CELSIUS_TO_MILLI_KELVIN (temp_raw );
86+
87+ return EC_SUCCESS ;
88+ }
89+ #endif /* !CONFIG_CUSTOMIZED_DESIGN */
5090
5191int f75303_get_val (int idx , int * temp )
5292{
@@ -64,12 +104,39 @@ int f75303_get_val(int idx, int *temp)
64104 return EC_SUCCESS ;
65105}
66106
107+ static inline int f75303_reg_to_mk (int16_t reg )
108+ {
109+ int temp_mc ;
110+
111+ temp_mc = (((reg >> F75303_SHIFT1 ) * 1000 ) >> F75303_SHIFT2 );
112+
113+ return MILLI_CELSIUS_TO_MILLI_KELVIN (temp_mc );
114+ }
115+
116+ int f75303_get_val_k (int idx , int * temp_k_ptr )
117+ {
118+ if (idx >= F75303_IDX_COUNT )
119+ return EC_ERROR_INVAL ;
120+
121+ * temp_k_ptr = MILLI_KELVIN_TO_KELVIN (temps [idx ]);
122+ return EC_SUCCESS ;
123+ }
124+
125+ int f75303_get_val_mk (int idx , int * temp_mk_ptr )
126+ {
127+ if (idx >= F75303_IDX_COUNT )
128+ return EC_ERROR_INVAL ;
129+
130+ * temp_mk_ptr = temps [idx ];
131+ return EC_SUCCESS ;
132+ }
133+
67134static void f75303_sensor_poll (void )
68135{
69136 if (f75303_enabled ) {
70- get_temp (F75303_TEMP_LOCAL , & temps [F75303_IDX_LOCAL ]);
71- get_temp (F75303_TEMP_REMOTE1 , & temps [F75303_IDX_REMOTE1 ]);
72- get_temp (F75303_TEMP_REMOTE2 , & temps [F75303_IDX_REMOTE2 ]);
137+ get_temp (F75303_TEMP_LOCAL_REGISTER , & temps [F75303_IDX_LOCAL ]);
138+ get_temp (F75303_TEMP_REMOTE1_REGISTER , & temps [F75303_IDX_REMOTE1 ]);
139+ get_temp (F75303_TEMP_REMOTE2_REGISTER , & temps [F75303_IDX_REMOTE2 ]);
73140 }
74141}
75142DECLARE_HOOK (HOOK_SECOND , f75303_sensor_poll , HOOK_PRIO_TEMP_SENSOR );
0 commit comments