vt8231.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863
  1. /*
  2. vt8231.c - Part of lm_sensors, Linux kernel modules
  3. for hardware monitoring
  4. Copyright (c) 2005 Roger Lucas <roger@planbit.co.uk>
  5. Copyright (c) 2002 Mark D. Studebaker <mdsxyz123@yahoo.com>
  6. Aaron M. Marsh <amarsh@sdf.lonestar.org>
  7. This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2 of the License, or
  10. (at your option) any later version.
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. GNU General Public License for more details.
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19. /* Supports VIA VT8231 South Bridge embedded sensors
  20. */
  21. #include <linux/module.h>
  22. #include <linux/init.h>
  23. #include <linux/slab.h>
  24. #include <linux/pci.h>
  25. #include <linux/jiffies.h>
  26. #include <linux/i2c.h>
  27. #include <linux/i2c-isa.h>
  28. #include <linux/hwmon.h>
  29. #include <linux/hwmon-sysfs.h>
  30. #include <linux/hwmon-vid.h>
  31. #include <linux/err.h>
  32. #include <linux/mutex.h>
  33. #include <asm/io.h>
  34. static int force_addr;
  35. module_param(force_addr, int, 0);
  36. MODULE_PARM_DESC(force_addr, "Initialize the base address of the sensors");
  37. /* Device address
  38. Note that we can't determine the ISA address until we have initialized
  39. our module */
  40. static unsigned short isa_address;
  41. #define VT8231_EXTENT 0x80
  42. #define VT8231_BASE_REG 0x70
  43. #define VT8231_ENABLE_REG 0x74
  44. /* The VT8231 registers
  45. The reset value for the input channel configuration is used (Reg 0x4A=0x07)
  46. which sets the selected inputs marked with '*' below if multiple options are
  47. possible:
  48. Voltage Mode Temperature Mode
  49. Sensor Linux Id Linux Id VIA Id
  50. -------- -------- -------- ------
  51. CPU Diode N/A temp1 0
  52. UIC1 in0 temp2 * 1
  53. UIC2 in1 * temp3 2
  54. UIC3 in2 * temp4 3
  55. UIC4 in3 * temp5 4
  56. UIC5 in4 * temp6 5
  57. 3.3V in5 N/A
  58. Note that the BIOS may set the configuration register to a different value
  59. to match the motherboard configuration.
  60. */
  61. /* fans numbered 0-1 */
  62. #define VT8231_REG_FAN_MIN(nr) (0x3b + (nr))
  63. #define VT8231_REG_FAN(nr) (0x29 + (nr))
  64. /* Voltage inputs numbered 0-5 */
  65. static const u8 regvolt[] = { 0x21, 0x22, 0x23, 0x24, 0x25, 0x26 };
  66. static const u8 regvoltmax[] = { 0x3d, 0x2b, 0x2d, 0x2f, 0x31, 0x33 };
  67. static const u8 regvoltmin[] = { 0x3e, 0x2c, 0x2e, 0x30, 0x32, 0x34 };
  68. /* Temperatures are numbered 1-6 according to the Linux kernel specification.
  69. **
  70. ** In the VIA datasheet, however, the temperatures are numbered from zero.
  71. ** Since it is important that this driver can easily be compared to the VIA
  72. ** datasheet, we will use the VIA numbering within this driver and map the
  73. ** kernel sysfs device name to the VIA number in the sysfs callback.
  74. */
  75. #define VT8231_REG_TEMP_LOW01 0x49
  76. #define VT8231_REG_TEMP_LOW25 0x4d
  77. static const u8 regtemp[] = { 0x1f, 0x21, 0x22, 0x23, 0x24, 0x25 };
  78. static const u8 regtempmax[] = { 0x39, 0x3d, 0x2b, 0x2d, 0x2f, 0x31 };
  79. static const u8 regtempmin[] = { 0x3a, 0x3e, 0x2c, 0x2e, 0x30, 0x32 };
  80. #define TEMP_FROM_REG(reg) (((253 * 4 - (reg)) * 550 + 105) / 210)
  81. #define TEMP_MAXMIN_FROM_REG(reg) (((253 - (reg)) * 2200 + 105) / 210)
  82. #define TEMP_MAXMIN_TO_REG(val) (253 - ((val) * 210 + 1100) / 2200)
  83. #define VT8231_REG_CONFIG 0x40
  84. #define VT8231_REG_ALARM1 0x41
  85. #define VT8231_REG_ALARM2 0x42
  86. #define VT8231_REG_FANDIV 0x47
  87. #define VT8231_REG_UCH_CONFIG 0x4a
  88. #define VT8231_REG_TEMP1_CONFIG 0x4b
  89. #define VT8231_REG_TEMP2_CONFIG 0x4c
  90. /* temps 0-5 as numbered in VIA datasheet - see later for mapping to Linux
  91. ** numbering
  92. */
  93. #define ISTEMP(i, ch_config) ((i) == 0 ? 1 : \
  94. ((ch_config) >> ((i)+1)) & 0x01)
  95. /* voltages 0-5 */
  96. #define ISVOLT(i, ch_config) ((i) == 5 ? 1 : \
  97. !(((ch_config) >> ((i)+2)) & 0x01))
  98. #define DIV_FROM_REG(val) (1 << (val))
  99. /* NB The values returned here are NOT temperatures. The calibration curves
  100. ** for the thermistor curves are board-specific and must go in the
  101. ** sensors.conf file. Temperature sensors are actually ten bits, but the
  102. ** VIA datasheet only considers the 8 MSBs obtained from the regtemp[]
  103. ** register. The temperature value returned should have a magnitude of 3,
  104. ** so we use the VIA scaling as the "true" scaling and use the remaining 2
  105. ** LSBs as fractional precision.
  106. **
  107. ** All the on-chip hardware temperature comparisons for the alarms are only
  108. ** 8-bits wide, and compare against the 8 MSBs of the temperature. The bits
  109. ** in the registers VT8231_REG_TEMP_LOW01 and VT8231_REG_TEMP_LOW25 are
  110. ** ignored.
  111. */
  112. /******** FAN RPM CONVERSIONS ********
  113. ** This chip saturates back at 0, not at 255 like many the other chips.
  114. ** So, 0 means 0 RPM
  115. */
  116. static inline u8 FAN_TO_REG(long rpm, int div)
  117. {
  118. if (rpm == 0)
  119. return 0;
  120. return SENSORS_LIMIT(1310720 / (rpm * div), 1, 255);
  121. }
  122. #define FAN_FROM_REG(val, div) ((val) == 0 ? 0 : 1310720 / ((val) * (div)))
  123. struct vt8231_data {
  124. struct i2c_client client;
  125. struct mutex update_lock;
  126. struct class_device *class_dev;
  127. char valid; /* !=0 if following fields are valid */
  128. unsigned long last_updated; /* In jiffies */
  129. u8 in[6]; /* Register value */
  130. u8 in_max[6]; /* Register value */
  131. u8 in_min[6]; /* Register value */
  132. u16 temp[6]; /* Register value 10 bit, right aligned */
  133. u8 temp_max[6]; /* Register value */
  134. u8 temp_min[6]; /* Register value */
  135. u8 fan[2]; /* Register value */
  136. u8 fan_min[2]; /* Register value */
  137. u8 fan_div[2]; /* Register encoding, shifted right */
  138. u16 alarms; /* Register encoding */
  139. u8 uch_config;
  140. };
  141. static struct pci_dev *s_bridge;
  142. static int vt8231_detect(struct i2c_adapter *adapter);
  143. static int vt8231_detach_client(struct i2c_client *client);
  144. static struct vt8231_data *vt8231_update_device(struct device *dev);
  145. static void vt8231_init_client(struct i2c_client *client);
  146. static inline int vt8231_read_value(struct i2c_client *client, u8 reg)
  147. {
  148. return inb_p(client->addr + reg);
  149. }
  150. static inline void vt8231_write_value(struct i2c_client *client, u8 reg,
  151. u8 value)
  152. {
  153. outb_p(value, client->addr + reg);
  154. }
  155. /* following are the sysfs callback functions */
  156. static ssize_t show_in(struct device *dev, struct device_attribute *attr,
  157. char *buf)
  158. {
  159. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  160. int nr = sensor_attr->index;
  161. struct vt8231_data *data = vt8231_update_device(dev);
  162. return sprintf(buf, "%d\n", ((data->in[nr] - 3) * 10000) / 958);
  163. }
  164. static ssize_t show_in_min(struct device *dev, struct device_attribute *attr,
  165. char *buf)
  166. {
  167. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  168. int nr = sensor_attr->index;
  169. struct vt8231_data *data = vt8231_update_device(dev);
  170. return sprintf(buf, "%d\n", ((data->in_min[nr] - 3) * 10000) / 958);
  171. }
  172. static ssize_t show_in_max(struct device *dev, struct device_attribute *attr,
  173. char *buf)
  174. {
  175. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  176. int nr = sensor_attr->index;
  177. struct vt8231_data *data = vt8231_update_device(dev);
  178. return sprintf(buf, "%d\n", (((data->in_max[nr] - 3) * 10000) / 958));
  179. }
  180. static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
  181. const char *buf, size_t count)
  182. {
  183. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  184. int nr = sensor_attr->index;
  185. struct i2c_client *client = to_i2c_client(dev);
  186. struct vt8231_data *data = i2c_get_clientdata(client);
  187. unsigned long val = simple_strtoul(buf, NULL, 10);
  188. mutex_lock(&data->update_lock);
  189. data->in_min[nr] = SENSORS_LIMIT(((val * 958) / 10000) + 3, 0, 255);
  190. vt8231_write_value(client, regvoltmin[nr], data->in_min[nr]);
  191. mutex_unlock(&data->update_lock);
  192. return count;
  193. }
  194. static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
  195. const char *buf, size_t count)
  196. {
  197. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  198. int nr = sensor_attr->index;
  199. struct i2c_client *client = to_i2c_client(dev);
  200. struct vt8231_data *data = i2c_get_clientdata(client);
  201. unsigned long val = simple_strtoul(buf, NULL, 10);
  202. mutex_lock(&data->update_lock);
  203. data->in_max[nr] = SENSORS_LIMIT(((val * 958) / 10000) + 3, 0, 255);
  204. vt8231_write_value(client, regvoltmax[nr], data->in_max[nr]);
  205. mutex_unlock(&data->update_lock);
  206. return count;
  207. }
  208. /* Special case for input 5 as this has 3.3V scaling built into the chip */
  209. static ssize_t show_in5(struct device *dev, struct device_attribute *attr,
  210. char *buf)
  211. {
  212. struct vt8231_data *data = vt8231_update_device(dev);
  213. return sprintf(buf, "%d\n",
  214. (((data->in[5] - 3) * 10000 * 54) / (958 * 34)));
  215. }
  216. static ssize_t show_in5_min(struct device *dev, struct device_attribute *attr,
  217. char *buf)
  218. {
  219. struct vt8231_data *data = vt8231_update_device(dev);
  220. return sprintf(buf, "%d\n",
  221. (((data->in_min[5] - 3) * 10000 * 54) / (958 * 34)));
  222. }
  223. static ssize_t show_in5_max(struct device *dev, struct device_attribute *attr,
  224. char *buf)
  225. {
  226. struct vt8231_data *data = vt8231_update_device(dev);
  227. return sprintf(buf, "%d\n",
  228. (((data->in_max[5] - 3) * 10000 * 54) / (958 * 34)));
  229. }
  230. static ssize_t set_in5_min(struct device *dev, struct device_attribute *attr,
  231. const char *buf, size_t count)
  232. {
  233. struct i2c_client *client = to_i2c_client(dev);
  234. struct vt8231_data *data = i2c_get_clientdata(client);
  235. unsigned long val = simple_strtoul(buf, NULL, 10);
  236. mutex_lock(&data->update_lock);
  237. data->in_min[5] = SENSORS_LIMIT(((val * 958 * 34) / (10000 * 54)) + 3,
  238. 0, 255);
  239. vt8231_write_value(client, regvoltmin[5], data->in_min[5]);
  240. mutex_unlock(&data->update_lock);
  241. return count;
  242. }
  243. static ssize_t set_in5_max(struct device *dev, struct device_attribute *attr,
  244. const char *buf, size_t count)
  245. {
  246. struct i2c_client *client = to_i2c_client(dev);
  247. struct vt8231_data *data = i2c_get_clientdata(client);
  248. unsigned long val = simple_strtoul(buf, NULL, 10);
  249. mutex_lock(&data->update_lock);
  250. data->in_max[5] = SENSORS_LIMIT(((val * 958 * 34) / (10000 * 54)) + 3,
  251. 0, 255);
  252. vt8231_write_value(client, regvoltmax[5], data->in_max[5]);
  253. mutex_unlock(&data->update_lock);
  254. return count;
  255. }
  256. #define define_voltage_sysfs(offset) \
  257. static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \
  258. show_in, NULL, offset); \
  259. static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
  260. show_in_min, set_in_min, offset); \
  261. static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
  262. show_in_max, set_in_max, offset)
  263. define_voltage_sysfs(0);
  264. define_voltage_sysfs(1);
  265. define_voltage_sysfs(2);
  266. define_voltage_sysfs(3);
  267. define_voltage_sysfs(4);
  268. static DEVICE_ATTR(in5_input, S_IRUGO, show_in5, NULL);
  269. static DEVICE_ATTR(in5_min, S_IRUGO | S_IWUSR, show_in5_min, set_in5_min);
  270. static DEVICE_ATTR(in5_max, S_IRUGO | S_IWUSR, show_in5_max, set_in5_max);
  271. /* Temperatures */
  272. static ssize_t show_temp0(struct device *dev, struct device_attribute *attr,
  273. char *buf)
  274. {
  275. struct vt8231_data *data = vt8231_update_device(dev);
  276. return sprintf(buf, "%d\n", data->temp[0] * 250);
  277. }
  278. static ssize_t show_temp0_max(struct device *dev, struct device_attribute *attr,
  279. char *buf)
  280. {
  281. struct vt8231_data *data = vt8231_update_device(dev);
  282. return sprintf(buf, "%d\n", data->temp_max[0] * 1000);
  283. }
  284. static ssize_t show_temp0_min(struct device *dev, struct device_attribute *attr,
  285. char *buf)
  286. {
  287. struct vt8231_data *data = vt8231_update_device(dev);
  288. return sprintf(buf, "%d\n", data->temp_min[0] * 1000);
  289. }
  290. static ssize_t set_temp0_max(struct device *dev, struct device_attribute *attr,
  291. const char *buf, size_t count)
  292. {
  293. struct i2c_client *client = to_i2c_client(dev);
  294. struct vt8231_data *data = i2c_get_clientdata(client);
  295. int val = simple_strtol(buf, NULL, 10);
  296. mutex_lock(&data->update_lock);
  297. data->temp_max[0] = SENSORS_LIMIT((val + 500) / 1000, 0, 255);
  298. vt8231_write_value(client, regtempmax[0], data->temp_max[0]);
  299. mutex_unlock(&data->update_lock);
  300. return count;
  301. }
  302. static ssize_t set_temp0_min(struct device *dev, struct device_attribute *attr,
  303. const char *buf, size_t count)
  304. {
  305. struct i2c_client *client = to_i2c_client(dev);
  306. struct vt8231_data *data = i2c_get_clientdata(client);
  307. int val = simple_strtol(buf, NULL, 10);
  308. mutex_lock(&data->update_lock);
  309. data->temp_min[0] = SENSORS_LIMIT((val + 500) / 1000, 0, 255);
  310. vt8231_write_value(client, regtempmin[0], data->temp_min[0]);
  311. mutex_unlock(&data->update_lock);
  312. return count;
  313. }
  314. static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
  315. char *buf)
  316. {
  317. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  318. int nr = sensor_attr->index;
  319. struct vt8231_data *data = vt8231_update_device(dev);
  320. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr]));
  321. }
  322. static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr,
  323. char *buf)
  324. {
  325. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  326. int nr = sensor_attr->index;
  327. struct vt8231_data *data = vt8231_update_device(dev);
  328. return sprintf(buf, "%d\n", TEMP_MAXMIN_FROM_REG(data->temp_max[nr]));
  329. }
  330. static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr,
  331. char *buf)
  332. {
  333. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  334. int nr = sensor_attr->index;
  335. struct vt8231_data *data = vt8231_update_device(dev);
  336. return sprintf(buf, "%d\n", TEMP_MAXMIN_FROM_REG(data->temp_min[nr]));
  337. }
  338. static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
  339. const char *buf, size_t count)
  340. {
  341. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  342. int nr = sensor_attr->index;
  343. struct i2c_client *client = to_i2c_client(dev);
  344. struct vt8231_data *data = i2c_get_clientdata(client);
  345. int val = simple_strtol(buf, NULL, 10);
  346. mutex_lock(&data->update_lock);
  347. data->temp_max[nr] = SENSORS_LIMIT(TEMP_MAXMIN_TO_REG(val), 0, 255);
  348. vt8231_write_value(client, regtempmax[nr], data->temp_max[nr]);
  349. mutex_unlock(&data->update_lock);
  350. return count;
  351. }
  352. static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
  353. const char *buf, size_t count)
  354. {
  355. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  356. int nr = sensor_attr->index;
  357. struct i2c_client *client = to_i2c_client(dev);
  358. struct vt8231_data *data = i2c_get_clientdata(client);
  359. int val = simple_strtol(buf, NULL, 10);
  360. mutex_lock(&data->update_lock);
  361. data->temp_min[nr] = SENSORS_LIMIT(TEMP_MAXMIN_TO_REG(val), 0, 255);
  362. vt8231_write_value(client, regtempmin[nr], data->temp_min[nr]);
  363. mutex_unlock(&data->update_lock);
  364. return count;
  365. }
  366. /* Note that these map the Linux temperature sensor numbering (1-6) to the VIA
  367. ** temperature sensor numbering (0-5)
  368. */
  369. #define define_temperature_sysfs(offset) \
  370. static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
  371. show_temp, NULL, offset - 1); \
  372. static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
  373. show_temp_max, set_temp_max, offset - 1); \
  374. static SENSOR_DEVICE_ATTR(temp##offset##_max_hyst, S_IRUGO | S_IWUSR, \
  375. show_temp_min, set_temp_min, offset - 1)
  376. static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp0, NULL);
  377. static DEVICE_ATTR(temp1_max, S_IRUGO | S_IWUSR, show_temp0_max, set_temp0_max);
  378. static DEVICE_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp0_min, set_temp0_min);
  379. define_temperature_sysfs(2);
  380. define_temperature_sysfs(3);
  381. define_temperature_sysfs(4);
  382. define_temperature_sysfs(5);
  383. define_temperature_sysfs(6);
  384. #define CFG_INFO_TEMP(id) { &sensor_dev_attr_temp##id##_input.dev_attr, \
  385. &sensor_dev_attr_temp##id##_max_hyst.dev_attr, \
  386. &sensor_dev_attr_temp##id##_max.dev_attr }
  387. #define CFG_INFO_VOLT(id) { &sensor_dev_attr_in##id##_input.dev_attr, \
  388. &sensor_dev_attr_in##id##_min.dev_attr, \
  389. &sensor_dev_attr_in##id##_max.dev_attr }
  390. struct str_device_attr_table {
  391. struct device_attribute *input;
  392. struct device_attribute *min;
  393. struct device_attribute *max;
  394. };
  395. static struct str_device_attr_table cfg_info_temp[] = {
  396. { &dev_attr_temp1_input, &dev_attr_temp1_max_hyst, &dev_attr_temp1_max },
  397. CFG_INFO_TEMP(2),
  398. CFG_INFO_TEMP(3),
  399. CFG_INFO_TEMP(4),
  400. CFG_INFO_TEMP(5),
  401. CFG_INFO_TEMP(6)
  402. };
  403. static struct str_device_attr_table cfg_info_volt[] = {
  404. CFG_INFO_VOLT(0),
  405. CFG_INFO_VOLT(1),
  406. CFG_INFO_VOLT(2),
  407. CFG_INFO_VOLT(3),
  408. CFG_INFO_VOLT(4),
  409. { &dev_attr_in5_input, &dev_attr_in5_min, &dev_attr_in5_max }
  410. };
  411. /* Fans */
  412. static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
  413. char *buf)
  414. {
  415. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  416. int nr = sensor_attr->index;
  417. struct vt8231_data *data = vt8231_update_device(dev);
  418. return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr],
  419. DIV_FROM_REG(data->fan_div[nr])));
  420. }
  421. static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr,
  422. char *buf)
  423. {
  424. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  425. int nr = sensor_attr->index;
  426. struct vt8231_data *data = vt8231_update_device(dev);
  427. return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr],
  428. DIV_FROM_REG(data->fan_div[nr])));
  429. }
  430. static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
  431. char *buf)
  432. {
  433. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  434. int nr = sensor_attr->index;
  435. struct vt8231_data *data = vt8231_update_device(dev);
  436. return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr]));
  437. }
  438. static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
  439. const char *buf, size_t count)
  440. {
  441. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  442. int nr = sensor_attr->index;
  443. struct i2c_client *client = to_i2c_client(dev);
  444. struct vt8231_data *data = i2c_get_clientdata(client);
  445. int val = simple_strtoul(buf, NULL, 10);
  446. mutex_lock(&data->update_lock);
  447. data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
  448. vt8231_write_value(client, VT8231_REG_FAN_MIN(nr), data->fan_min[nr]);
  449. mutex_unlock(&data->update_lock);
  450. return count;
  451. }
  452. static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
  453. const char *buf, size_t count)
  454. {
  455. struct i2c_client *client = to_i2c_client(dev);
  456. struct vt8231_data *data = i2c_get_clientdata(client);
  457. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  458. unsigned long val = simple_strtoul(buf, NULL, 10);
  459. int nr = sensor_attr->index;
  460. int old = vt8231_read_value(client, VT8231_REG_FANDIV);
  461. long min = FAN_FROM_REG(data->fan_min[nr],
  462. DIV_FROM_REG(data->fan_div[nr]));
  463. mutex_lock(&data->update_lock);
  464. switch (val) {
  465. case 1: data->fan_div[nr] = 0; break;
  466. case 2: data->fan_div[nr] = 1; break;
  467. case 4: data->fan_div[nr] = 2; break;
  468. case 8: data->fan_div[nr] = 3; break;
  469. default:
  470. dev_err(&client->dev, "fan_div value %ld not supported."
  471. "Choose one of 1, 2, 4 or 8!\n", val);
  472. mutex_unlock(&data->update_lock);
  473. return -EINVAL;
  474. }
  475. /* Correct the fan minimum speed */
  476. data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
  477. vt8231_write_value(client, VT8231_REG_FAN_MIN(nr), data->fan_min[nr]);
  478. old = (old & 0x0f) | (data->fan_div[1] << 6) | (data->fan_div[0] << 4);
  479. vt8231_write_value(client, VT8231_REG_FANDIV, old);
  480. mutex_unlock(&data->update_lock);
  481. return count;
  482. }
  483. #define define_fan_sysfs(offset) \
  484. static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \
  485. show_fan, NULL, offset - 1); \
  486. static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
  487. show_fan_div, set_fan_div, offset - 1); \
  488. static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
  489. show_fan_min, set_fan_min, offset - 1)
  490. define_fan_sysfs(1);
  491. define_fan_sysfs(2);
  492. /* Alarms */
  493. static ssize_t show_alarms(struct device *dev, struct device_attribute *attr,
  494. char *buf)
  495. {
  496. struct vt8231_data *data = vt8231_update_device(dev);
  497. return sprintf(buf, "%d\n", data->alarms);
  498. }
  499. static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
  500. static struct i2c_driver vt8231_driver = {
  501. .driver = {
  502. .name = "vt8231",
  503. },
  504. .attach_adapter = vt8231_detect,
  505. .detach_client = vt8231_detach_client,
  506. };
  507. static struct pci_device_id vt8231_pci_ids[] = {
  508. { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8231_4) },
  509. { 0, }
  510. };
  511. MODULE_DEVICE_TABLE(pci, vt8231_pci_ids);
  512. static int __devinit vt8231_pci_probe(struct pci_dev *dev,
  513. const struct pci_device_id *id);
  514. static struct pci_driver vt8231_pci_driver = {
  515. .name = "vt8231",
  516. .id_table = vt8231_pci_ids,
  517. .probe = vt8231_pci_probe,
  518. };
  519. int vt8231_detect(struct i2c_adapter *adapter)
  520. {
  521. struct i2c_client *client;
  522. struct vt8231_data *data;
  523. int err = 0, i;
  524. u16 val;
  525. /* 8231 requires multiple of 256 */
  526. if (force_addr) {
  527. isa_address = force_addr & 0xFF00;
  528. dev_warn(&adapter->dev, "forcing ISA address 0x%04X\n",
  529. isa_address);
  530. if (PCIBIOS_SUCCESSFUL != pci_write_config_word(s_bridge,
  531. VT8231_BASE_REG, isa_address))
  532. return -ENODEV;
  533. }
  534. if (PCIBIOS_SUCCESSFUL !=
  535. pci_read_config_word(s_bridge, VT8231_ENABLE_REG, &val))
  536. return -ENODEV;
  537. if (!(val & 0x0001)) {
  538. dev_warn(&adapter->dev, "enabling sensors\n");
  539. if (PCIBIOS_SUCCESSFUL !=
  540. pci_write_config_word(s_bridge, VT8231_ENABLE_REG,
  541. val | 0x0001))
  542. return -ENODEV;
  543. }
  544. /* Reserve the ISA region */
  545. if (!request_region(isa_address, VT8231_EXTENT,
  546. vt8231_pci_driver.name)) {
  547. dev_err(&adapter->dev, "region 0x%x already in use!\n",
  548. isa_address);
  549. return -ENODEV;
  550. }
  551. if (!(data = kzalloc(sizeof(struct vt8231_data), GFP_KERNEL))) {
  552. err = -ENOMEM;
  553. goto exit_release;
  554. }
  555. client = &data->client;
  556. i2c_set_clientdata(client, data);
  557. client->addr = isa_address;
  558. client->adapter = adapter;
  559. client->driver = &vt8231_driver;
  560. client->dev.parent = &adapter->dev;
  561. /* Fill in the remaining client fields and put into the global list */
  562. strlcpy(client->name, "vt8231", I2C_NAME_SIZE);
  563. mutex_init(&data->update_lock);
  564. /* Tell the I2C layer a new client has arrived */
  565. if ((err = i2c_attach_client(client)))
  566. goto exit_free;
  567. vt8231_init_client(client);
  568. /* Register sysfs hooks */
  569. data->class_dev = hwmon_device_register(&client->dev);
  570. if (IS_ERR(data->class_dev)) {
  571. err = PTR_ERR(data->class_dev);
  572. goto exit_detach;
  573. }
  574. /* Must update device information to find out the config field */
  575. data->uch_config = vt8231_read_value(client, VT8231_REG_UCH_CONFIG);
  576. for (i = 0; i < ARRAY_SIZE(cfg_info_temp); i++) {
  577. if (ISTEMP(i, data->uch_config)) {
  578. device_create_file(&client->dev,
  579. cfg_info_temp[i].input);
  580. device_create_file(&client->dev, cfg_info_temp[i].max);
  581. device_create_file(&client->dev, cfg_info_temp[i].min);
  582. }
  583. }
  584. for (i = 0; i < ARRAY_SIZE(cfg_info_volt); i++) {
  585. if (ISVOLT(i, data->uch_config)) {
  586. device_create_file(&client->dev,
  587. cfg_info_volt[i].input);
  588. device_create_file(&client->dev, cfg_info_volt[i].max);
  589. device_create_file(&client->dev, cfg_info_volt[i].min);
  590. }
  591. }
  592. device_create_file(&client->dev, &sensor_dev_attr_fan1_input.dev_attr);
  593. device_create_file(&client->dev, &sensor_dev_attr_fan2_input.dev_attr);
  594. device_create_file(&client->dev, &sensor_dev_attr_fan1_min.dev_attr);
  595. device_create_file(&client->dev, &sensor_dev_attr_fan2_min.dev_attr);
  596. device_create_file(&client->dev, &sensor_dev_attr_fan1_div.dev_attr);
  597. device_create_file(&client->dev, &sensor_dev_attr_fan2_div.dev_attr);
  598. device_create_file(&client->dev, &dev_attr_alarms);
  599. return 0;
  600. exit_detach:
  601. i2c_detach_client(client);
  602. exit_free:
  603. kfree(data);
  604. exit_release:
  605. release_region(isa_address, VT8231_EXTENT);
  606. return err;
  607. }
  608. static int vt8231_detach_client(struct i2c_client *client)
  609. {
  610. struct vt8231_data *data = i2c_get_clientdata(client);
  611. int err;
  612. hwmon_device_unregister(data->class_dev);
  613. if ((err = i2c_detach_client(client))) {
  614. return err;
  615. }
  616. release_region(client->addr, VT8231_EXTENT);
  617. kfree(data);
  618. return 0;
  619. }
  620. static void vt8231_init_client(struct i2c_client *client)
  621. {
  622. vt8231_write_value(client, VT8231_REG_TEMP1_CONFIG, 0);
  623. vt8231_write_value(client, VT8231_REG_TEMP2_CONFIG, 0);
  624. }
  625. static struct vt8231_data *vt8231_update_device(struct device *dev)
  626. {
  627. struct i2c_client *client = to_i2c_client(dev);
  628. struct vt8231_data *data = i2c_get_clientdata(client);
  629. int i;
  630. u16 low;
  631. mutex_lock(&data->update_lock);
  632. if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
  633. || !data->valid) {
  634. for (i = 0; i < 6; i++) {
  635. if (ISVOLT(i, data->uch_config)) {
  636. data->in[i] = vt8231_read_value(client,
  637. regvolt[i]);
  638. data->in_min[i] = vt8231_read_value(client,
  639. regvoltmin[i]);
  640. data->in_max[i] = vt8231_read_value(client,
  641. regvoltmax[i]);
  642. }
  643. }
  644. for (i = 0; i < 2; i++) {
  645. data->fan[i] = vt8231_read_value(client,
  646. VT8231_REG_FAN(i));
  647. data->fan_min[i] = vt8231_read_value(client,
  648. VT8231_REG_FAN_MIN(i));
  649. }
  650. low = vt8231_read_value(client, VT8231_REG_TEMP_LOW01);
  651. low = (low >> 6) | ((low & 0x30) >> 2)
  652. | (vt8231_read_value(client, VT8231_REG_TEMP_LOW25) << 4);
  653. for (i = 0; i < 6; i++) {
  654. if (ISTEMP(i, data->uch_config)) {
  655. data->temp[i] = (vt8231_read_value(client,
  656. regtemp[i]) << 2)
  657. | ((low >> (2 * i)) & 0x03);
  658. data->temp_max[i] = vt8231_read_value(client,
  659. regtempmax[i]);
  660. data->temp_min[i] = vt8231_read_value(client,
  661. regtempmin[i]);
  662. }
  663. }
  664. i = vt8231_read_value(client, VT8231_REG_FANDIV);
  665. data->fan_div[0] = (i >> 4) & 0x03;
  666. data->fan_div[1] = i >> 6;
  667. data->alarms = vt8231_read_value(client, VT8231_REG_ALARM1) |
  668. (vt8231_read_value(client, VT8231_REG_ALARM2) << 8);
  669. /* Set alarm flags correctly */
  670. if (!data->fan[0] && data->fan_min[0]) {
  671. data->alarms |= 0x40;
  672. } else if (data->fan[0] && !data->fan_min[0]) {
  673. data->alarms &= ~0x40;
  674. }
  675. if (!data->fan[1] && data->fan_min[1]) {
  676. data->alarms |= 0x80;
  677. } else if (data->fan[1] && !data->fan_min[1]) {
  678. data->alarms &= ~0x80;
  679. }
  680. data->last_updated = jiffies;
  681. data->valid = 1;
  682. }
  683. mutex_unlock(&data->update_lock);
  684. return data;
  685. }
  686. static int __devinit vt8231_pci_probe(struct pci_dev *dev,
  687. const struct pci_device_id *id)
  688. {
  689. u16 val;
  690. if (PCIBIOS_SUCCESSFUL != pci_read_config_word(dev, VT8231_BASE_REG,
  691. &val))
  692. return -ENODEV;
  693. isa_address = val & ~(VT8231_EXTENT - 1);
  694. if (isa_address == 0 && force_addr == 0) {
  695. dev_err(&dev->dev, "base address not set -\
  696. upgrade BIOS or use force_addr=0xaddr\n");
  697. return -ENODEV;
  698. }
  699. s_bridge = pci_dev_get(dev);
  700. if (i2c_isa_add_driver(&vt8231_driver)) {
  701. pci_dev_put(s_bridge);
  702. s_bridge = NULL;
  703. }
  704. /* Always return failure here. This is to allow other drivers to bind
  705. * to this pci device. We don't really want to have control over the
  706. * pci device, we only wanted to read as few register values from it.
  707. */
  708. return -ENODEV;
  709. }
  710. static int __init sm_vt8231_init(void)
  711. {
  712. return pci_register_driver(&vt8231_pci_driver);
  713. }
  714. static void __exit sm_vt8231_exit(void)
  715. {
  716. pci_unregister_driver(&vt8231_pci_driver);
  717. if (s_bridge != NULL) {
  718. i2c_isa_del_driver(&vt8231_driver);
  719. pci_dev_put(s_bridge);
  720. s_bridge = NULL;
  721. }
  722. }
  723. MODULE_AUTHOR("Roger Lucas <roger@planbit.co.uk>");
  724. MODULE_DESCRIPTION("VT8231 sensors");
  725. MODULE_LICENSE("GPL");
  726. module_init(sm_vt8231_init);
  727. module_exit(sm_vt8231_exit);