ntc.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. #include<linux/kernel.h>
  2. typedef struct {
  3. int r;
  4. int temperature;
  5. } ntc_table_t;
  6. static ntc_table_t ntc[] = {
  7. {188424, -40},
  8. {177892, -39},
  9. {168031, -38},
  10. {158793, -37},
  11. {150135, -36},
  12. {142016, -35},
  13. {134398, -34},
  14. {127247, -33},
  15. {120531, -32},
  16. {114221, -31},
  17. {108289, -30},
  18. {102711, -29},
  19. {97461, -28},
  20. {92519, -27},
  21. {87865, -26},
  22. {83480, -25},
  23. {79346, -24},
  24. {75447, -23},
  25. {71769, -22},
  26. {68297, -21},
  27. {65019, -20},
  28. {61922, -19},
  29. {58995, -18},
  30. {56228, -17},
  31. {53610, -16},
  32. {51133, -15},
  33. {48789, -14},
  34. {46568, -13},
  35. {44465, -12},
  36. {42472, -11},
  37. {40582, -10},
  38. {38789, -9},
  39. {37089, -8},
  40. {35475, -7},
  41. {33942, -6},
  42. {32486, -5},
  43. {31103, -4},
  44. {29789, -3},
  45. {28539, -2},
  46. {27350, -1},
  47. {26219, 0},
  48. {25142, 1},
  49. {24117, 2},
  50. {23140, 3},
  51. {22210, 4},
  52. {21324, 5},
  53. {20479, 6},
  54. {19673, 7},
  55. {18904, 8},
  56. {18170, 9},
  57. {17470, 10},
  58. {16801, 11},
  59. {16162, 12},
  60. {15552, 13},
  61. {14969, 14},
  62. {14412, 15},
  63. {13879, 16},
  64. {13369, 17},
  65. {12881, 18},
  66. {12414, 19},
  67. {11967, 20},
  68. {11539, 21},
  69. {11129, 22},
  70. {10737, 23},
  71. {10360, 24},
  72. {10000, 25},
  73. {9617, 26},
  74. {9252, 27},
  75. {8902, 28},
  76. {8569, 29},
  77. {8249, 30},
  78. {7944, 31},
  79. {7652, 32},
  80. {7372, 33},
  81. {7104, 34},
  82. {6848, 35},
  83. {6602, 36},
  84. {6367, 37},
  85. {6142, 38},
  86. {5926, 39},
  87. {5719, 40},
  88. {5520, 41},
  89. {5329, 42},
  90. {5147, 43},
  91. {4971, 44},
  92. {4803, 45},
  93. {4641, 46},
  94. {4486, 47},
  95. {4336, 48},
  96. {4193, 49},
  97. {4055, 50},
  98. {3923, 51},
  99. {3795, 52},
  100. {3673, 53},
  101. {3555, 54},
  102. {3442, 55},
  103. {3333, 56},
  104. {3228, 57},
  105. {3127, 58},
  106. {3029, 59},
  107. {2936, 60},
  108. {2845, 61},
  109. {2758, 62},
  110. {2674, 63},
  111. {2593, 64},
  112. {2516, 65},
  113. {2440, 66},
  114. {2368, 67},
  115. {2298, 68},
  116. {2230, 69},
  117. {2165, 70},
  118. {2103, 71},
  119. {2042, 72},
  120. {1983, 73},
  121. {1927, 74},
  122. {1872, 75},
  123. {1819, 76},
  124. {1768, 77},
  125. {1719, 78},
  126. {1671, 79},
  127. {1625, 80},
  128. {1580, 81},
  129. {1537, 82},
  130. {1496, 83},
  131. {1455, 84},
  132. {1416, 85},
  133. {1378, 86},
  134. {1342, 87},
  135. {1306, 88},
  136. {1272, 89},
  137. {1239, 90},
  138. {1207, 91},
  139. {1176, 92},
  140. {1145, 93},
  141. {1116, 94},
  142. {1088, 95},
  143. {1060, 96},
  144. {1034, 97},
  145. {1008, 98},
  146. {983, 99},
  147. {958, 100},
  148. {935, 101},
  149. {912, 102},
  150. {890, 103},
  151. {868, 104},
  152. {847, 105},
  153. {827, 106},
  154. {807, 107},
  155. {788, 108},
  156. {769, 109},
  157. {751, 110},
  158. {734, 111},
  159. {717, 112},
  160. {700, 113},
  161. {684, 114},
  162. {668, 115},
  163. {653, 116},
  164. {638, 117},
  165. {624, 118},
  166. {610, 119},
  167. {596, 120},
  168. {583, 121},
  169. {570, 122},
  170. {558, 123},
  171. {545, 124},
  172. {534, 125},
  173. };
  174. static unsigned int ntc_abs(int a, int b)
  175. {
  176. if(a > b) {
  177. return (a - b);
  178. }
  179. return b - a;
  180. }
  181. #define RX(mv) (10000*(mv)/(1800-mv))
  182. int get_ntc_temperature(int mv)
  183. {
  184. int num = sizeof(ntc) / sizeof(ntc[0]);
  185. int i = 0;
  186. unsigned int d = 0xfffffff;
  187. int t;
  188. int r = RX(mv);
  189. while(i < num) {
  190. if (ntc_abs(r, ntc[i].r) < d) {
  191. t = ntc[i].temperature;
  192. d = ntc_abs(r, ntc[i].r);
  193. }
  194. i++;
  195. }
  196. printk(KERN_DEBUG "v: %d, r: %d, t: %d\n", mv, r, t);
  197. return t;
  198. }