Linux Audio

Check our new training course

Loading...
v3.1
 
   1/*
   2 * Copyright (C) 2007-2009 Luca Tettamanti <kronos.it@gmail.com>
   3 *
   4 * This file is released under the GPLv2
   5 * See COPYING in the top level directory of the kernel tree.
   6 */
   7
   8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
   9
  10#include <linux/debugfs.h>
  11#include <linux/kernel.h>
  12#include <linux/hwmon.h>
  13#include <linux/list.h>
  14#include <linux/module.h>
  15#include <linux/slab.h>
  16#include <linux/dmi.h>
  17
  18#include <acpi/acpi.h>
  19#include <acpi/acpixf.h>
  20#include <acpi/acpi_drivers.h>
  21#include <acpi/acpi_bus.h>
  22
  23
  24#define ATK_HID "ATK0110"
  25
  26static bool new_if;
  27module_param(new_if, bool, 0);
  28MODULE_PARM_DESC(new_if, "Override detection heuristic and force the use of the new ATK0110 interface");
  29
  30static const struct dmi_system_id __initconst atk_force_new_if[] = {
  31	{
  32		/* Old interface has broken MCH temp monitoring */
  33		.ident = "Asus Sabertooth X58",
  34		.matches = {
  35			DMI_MATCH(DMI_BOARD_NAME, "SABERTOOTH X58")
  36		}
 
 
 
 
 
 
  37	},
  38	{ }
  39};
  40
  41/* Minimum time between readings, enforced in order to avoid
 
  42 * hogging the CPU.
  43 */
  44#define CACHE_TIME		HZ
  45
  46#define BOARD_ID		"MBIF"
  47#define METHOD_ENUMERATE	"GGRP"
  48#define METHOD_READ		"GITM"
  49#define METHOD_WRITE		"SITM"
  50#define METHOD_OLD_READ_TMP	"RTMP"
  51#define METHOD_OLD_READ_VLT	"RVLT"
  52#define METHOD_OLD_READ_FAN	"RFAN"
  53#define METHOD_OLD_ENUM_TMP	"TSIF"
  54#define METHOD_OLD_ENUM_VLT	"VSIF"
  55#define METHOD_OLD_ENUM_FAN	"FSIF"
  56
  57#define ATK_MUX_HWMON		0x00000006ULL
  58#define ATK_MUX_MGMT		0x00000011ULL
  59
  60#define ATK_CLASS_MASK		0xff000000ULL
  61#define ATK_CLASS_FREQ_CTL	0x03000000ULL
  62#define ATK_CLASS_FAN_CTL	0x04000000ULL
  63#define ATK_CLASS_HWMON		0x06000000ULL
  64#define ATK_CLASS_MGMT		0x11000000ULL
  65
  66#define ATK_TYPE_MASK		0x00ff0000ULL
  67#define HWMON_TYPE_VOLT		0x00020000ULL
  68#define HWMON_TYPE_TEMP		0x00030000ULL
  69#define HWMON_TYPE_FAN		0x00040000ULL
  70
  71#define ATK_ELEMENT_ID_MASK	0x0000ffffULL
  72
  73#define ATK_EC_ID		0x11060004ULL
  74
  75enum atk_pack_member {
  76	HWMON_PACK_FLAGS,
  77	HWMON_PACK_NAME,
  78	HWMON_PACK_LIMIT1,
  79	HWMON_PACK_LIMIT2,
  80	HWMON_PACK_ENABLE
  81};
  82
  83/* New package format */
  84#define _HWMON_NEW_PACK_SIZE	7
  85#define _HWMON_NEW_PACK_FLAGS	0
  86#define _HWMON_NEW_PACK_NAME	1
  87#define _HWMON_NEW_PACK_UNK1	2
  88#define _HWMON_NEW_PACK_UNK2	3
  89#define _HWMON_NEW_PACK_LIMIT1	4
  90#define _HWMON_NEW_PACK_LIMIT2	5
  91#define _HWMON_NEW_PACK_ENABLE	6
  92
  93/* Old package format */
  94#define _HWMON_OLD_PACK_SIZE	5
  95#define _HWMON_OLD_PACK_FLAGS	0
  96#define _HWMON_OLD_PACK_NAME	1
  97#define _HWMON_OLD_PACK_LIMIT1	2
  98#define _HWMON_OLD_PACK_LIMIT2	3
  99#define _HWMON_OLD_PACK_ENABLE	4
 100
 101
 102struct atk_data {
 103	struct device *hwmon_dev;
 104	acpi_handle atk_handle;
 105	struct acpi_device *acpi_dev;
 106
 107	bool old_interface;
 108
 109	/* old interface */
 110	acpi_handle rtmp_handle;
 111	acpi_handle rvlt_handle;
 112	acpi_handle rfan_handle;
 113	/* new inteface */
 114	acpi_handle enumerate_handle;
 115	acpi_handle read_handle;
 116	acpi_handle write_handle;
 117
 118	bool disable_ec;
 119
 120	int voltage_count;
 121	int temperature_count;
 122	int fan_count;
 123	struct list_head sensor_list;
 
 
 124
 125	struct {
 126		struct dentry *root;
 127		u32 id;
 128	} debugfs;
 129};
 130
 131
 132typedef ssize_t (*sysfs_show_func)(struct device *dev,
 133			struct device_attribute *attr, char *buf);
 134
 135static const struct acpi_device_id atk_ids[] = {
 136	{ATK_HID, 0},
 137	{"", 0},
 138};
 139MODULE_DEVICE_TABLE(acpi, atk_ids);
 140
 141#define ATTR_NAME_SIZE 16 /* Worst case is "tempN_input" */
 142
 143struct atk_sensor_data {
 144	struct list_head list;
 145	struct atk_data *data;
 146	struct device_attribute label_attr;
 147	struct device_attribute input_attr;
 148	struct device_attribute limit1_attr;
 149	struct device_attribute limit2_attr;
 150	char label_attr_name[ATTR_NAME_SIZE];
 151	char input_attr_name[ATTR_NAME_SIZE];
 152	char limit1_attr_name[ATTR_NAME_SIZE];
 153	char limit2_attr_name[ATTR_NAME_SIZE];
 154	u64 id;
 155	u64 type;
 156	u64 limit1;
 157	u64 limit2;
 158	u64 cached_value;
 159	unsigned long last_updated; /* in jiffies */
 160	bool is_valid;
 161	char const *acpi_name;
 162};
 163
 164/* Return buffer format:
 
 165 * [0-3] "value" is valid flag
 166 * [4-7] value
 167 * [8- ] unknown stuff on newer mobos
 168 */
 169struct atk_acpi_ret_buffer {
 170	u32 flags;
 171	u32 value;
 172	u8 data[];
 173};
 174
 175/* Input buffer used for GITM and SITM methods */
 176struct atk_acpi_input_buf {
 177	u32 id;
 178	u32 param1;
 179	u32 param2;
 180};
 181
 182static int atk_add(struct acpi_device *device);
 183static int atk_remove(struct acpi_device *device, int type);
 184static void atk_print_sensor(struct atk_data *data, union acpi_object *obj);
 185static int atk_read_value(struct atk_sensor_data *sensor, u64 *value);
 186static void atk_free_sensors(struct atk_data *data);
 187
 188static struct acpi_driver atk_driver = {
 189	.name	= ATK_HID,
 190	.class	= "hwmon",
 191	.ids	= atk_ids,
 192	.ops	= {
 193		.add	= atk_add,
 194		.remove	= atk_remove,
 195	},
 196};
 197
 198#define input_to_atk_sensor(attr) \
 199	container_of(attr, struct atk_sensor_data, input_attr)
 200
 201#define label_to_atk_sensor(attr) \
 202	container_of(attr, struct atk_sensor_data, label_attr)
 203
 204#define limit1_to_atk_sensor(attr) \
 205	container_of(attr, struct atk_sensor_data, limit1_attr)
 206
 207#define limit2_to_atk_sensor(attr) \
 208	container_of(attr, struct atk_sensor_data, limit2_attr)
 209
 210static ssize_t atk_input_show(struct device *dev,
 211		struct device_attribute *attr, char *buf)
 212{
 213	struct atk_sensor_data *s = input_to_atk_sensor(attr);
 214	u64 value;
 215	int err;
 216
 217	err = atk_read_value(s, &value);
 218	if (err)
 219		return err;
 220
 221	if (s->type == HWMON_TYPE_TEMP)
 222		/* ACPI returns decidegree */
 223		value *= 100;
 224
 225	return sprintf(buf, "%llu\n", value);
 226}
 227
 228static ssize_t atk_label_show(struct device *dev,
 229		struct device_attribute *attr, char *buf)
 230{
 231	struct atk_sensor_data *s = label_to_atk_sensor(attr);
 232
 233	return sprintf(buf, "%s\n", s->acpi_name);
 234}
 235
 236static ssize_t atk_limit1_show(struct device *dev,
 237		struct device_attribute *attr, char *buf)
 238{
 239	struct atk_sensor_data *s = limit1_to_atk_sensor(attr);
 240	u64 value = s->limit1;
 241
 242	if (s->type == HWMON_TYPE_TEMP)
 243		value *= 100;
 244
 245	return sprintf(buf, "%lld\n", value);
 246}
 247
 248static ssize_t atk_limit2_show(struct device *dev,
 249		struct device_attribute *attr, char *buf)
 250{
 251	struct atk_sensor_data *s = limit2_to_atk_sensor(attr);
 252	u64 value = s->limit2;
 253
 254	if (s->type == HWMON_TYPE_TEMP)
 255		value *= 100;
 256
 257	return sprintf(buf, "%lld\n", value);
 258}
 259
 260static ssize_t atk_name_show(struct device *dev,
 261				struct device_attribute *attr, char *buf)
 262{
 263	return sprintf(buf, "atk0110\n");
 264}
 265static struct device_attribute atk_name_attr =
 266		__ATTR(name, 0444, atk_name_show, NULL);
 267
 268static void atk_init_attribute(struct device_attribute *attr, char *name,
 269		sysfs_show_func show)
 270{
 271	sysfs_attr_init(&attr->attr);
 272	attr->attr.name = name;
 273	attr->attr.mode = 0444;
 274	attr->show = show;
 275	attr->store = NULL;
 276}
 277
 278
 279static union acpi_object *atk_get_pack_member(struct atk_data *data,
 280						union acpi_object *pack,
 281						enum atk_pack_member m)
 282{
 283	bool old_if = data->old_interface;
 284	int offset;
 285
 286	switch (m) {
 287	case HWMON_PACK_FLAGS:
 288		offset = old_if ? _HWMON_OLD_PACK_FLAGS : _HWMON_NEW_PACK_FLAGS;
 289		break;
 290	case HWMON_PACK_NAME:
 291		offset = old_if ? _HWMON_OLD_PACK_NAME : _HWMON_NEW_PACK_NAME;
 292		break;
 293	case HWMON_PACK_LIMIT1:
 294		offset = old_if ? _HWMON_OLD_PACK_LIMIT1 :
 295				  _HWMON_NEW_PACK_LIMIT1;
 296		break;
 297	case HWMON_PACK_LIMIT2:
 298		offset = old_if ? _HWMON_OLD_PACK_LIMIT2 :
 299				  _HWMON_NEW_PACK_LIMIT2;
 300		break;
 301	case HWMON_PACK_ENABLE:
 302		offset = old_if ? _HWMON_OLD_PACK_ENABLE :
 303				  _HWMON_NEW_PACK_ENABLE;
 304		break;
 305	default:
 306		return NULL;
 307	}
 308
 309	return &pack->package.elements[offset];
 310}
 311
 312
 313/* New package format is:
 
 314 * - flag (int)
 315 *	class - used for de-muxing the request to the correct GITn
 316 *	type (volt, temp, fan)
 317 *	sensor id |
 318 *	sensor id - used for de-muxing the request _inside_ the GITn
 319 * - name (str)
 320 * - unknown (int)
 321 * - unknown (int)
 322 * - limit1 (int)
 323 * - limit2 (int)
 324 * - enable (int)
 325 *
 326 * The old package has the same format but it's missing the two unknown fields.
 327 */
 328static int validate_hwmon_pack(struct atk_data *data, union acpi_object *obj)
 329{
 330	struct device *dev = &data->acpi_dev->dev;
 331	union acpi_object *tmp;
 332	bool old_if = data->old_interface;
 333	int const expected_size = old_if ? _HWMON_OLD_PACK_SIZE :
 334					   _HWMON_NEW_PACK_SIZE;
 335
 336	if (obj->type != ACPI_TYPE_PACKAGE) {
 337		dev_warn(dev, "Invalid type: %d\n", obj->type);
 338		return -EINVAL;
 339	}
 340
 341	if (obj->package.count != expected_size) {
 342		dev_warn(dev, "Invalid package size: %d, expected: %d\n",
 343				obj->package.count, expected_size);
 344		return -EINVAL;
 345	}
 346
 347	tmp = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS);
 348	if (tmp->type != ACPI_TYPE_INTEGER) {
 349		dev_warn(dev, "Invalid type (flag): %d\n", tmp->type);
 350		return -EINVAL;
 351	}
 352
 353	tmp = atk_get_pack_member(data, obj, HWMON_PACK_NAME);
 354	if (tmp->type != ACPI_TYPE_STRING) {
 355		dev_warn(dev, "Invalid type (name): %d\n", tmp->type);
 356		return -EINVAL;
 357	}
 358
 359	/* Don't check... we don't know what they're useful for anyway */
 360#if 0
 361	tmp = &obj->package.elements[HWMON_PACK_UNK1];
 362	if (tmp->type != ACPI_TYPE_INTEGER) {
 363		dev_warn(dev, "Invalid type (unk1): %d\n", tmp->type);
 364		return -EINVAL;
 365	}
 366
 367	tmp = &obj->package.elements[HWMON_PACK_UNK2];
 368	if (tmp->type != ACPI_TYPE_INTEGER) {
 369		dev_warn(dev, "Invalid type (unk2): %d\n", tmp->type);
 370		return -EINVAL;
 371	}
 372#endif
 373
 374	tmp = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT1);
 375	if (tmp->type != ACPI_TYPE_INTEGER) {
 376		dev_warn(dev, "Invalid type (limit1): %d\n", tmp->type);
 377		return -EINVAL;
 378	}
 379
 380	tmp = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT2);
 381	if (tmp->type != ACPI_TYPE_INTEGER) {
 382		dev_warn(dev, "Invalid type (limit2): %d\n", tmp->type);
 383		return -EINVAL;
 384	}
 385
 386	tmp = atk_get_pack_member(data, obj, HWMON_PACK_ENABLE);
 387	if (tmp->type != ACPI_TYPE_INTEGER) {
 388		dev_warn(dev, "Invalid type (enable): %d\n", tmp->type);
 389		return -EINVAL;
 390	}
 391
 392	atk_print_sensor(data, obj);
 393
 394	return 0;
 395}
 396
 397#ifdef DEBUG
 398static char const *atk_sensor_type(union acpi_object *flags)
 399{
 400	u64 type = flags->integer.value & ATK_TYPE_MASK;
 401	char const *what;
 402
 403	switch (type) {
 404	case HWMON_TYPE_VOLT:
 405		what = "voltage";
 406		break;
 407	case HWMON_TYPE_TEMP:
 408		what = "temperature";
 409		break;
 410	case HWMON_TYPE_FAN:
 411		what = "fan";
 412		break;
 413	default:
 414		what = "unknown";
 415		break;
 416	}
 417
 418	return what;
 419}
 420#endif
 421
 422static void atk_print_sensor(struct atk_data *data, union acpi_object *obj)
 423{
 424#ifdef DEBUG
 425	struct device *dev = &data->acpi_dev->dev;
 426	union acpi_object *flags;
 427	union acpi_object *name;
 428	union acpi_object *limit1;
 429	union acpi_object *limit2;
 430	union acpi_object *enable;
 431	char const *what;
 432
 433	flags = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS);
 434	name = atk_get_pack_member(data, obj, HWMON_PACK_NAME);
 435	limit1 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT1);
 436	limit2 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT2);
 437	enable = atk_get_pack_member(data, obj, HWMON_PACK_ENABLE);
 438
 439	what = atk_sensor_type(flags);
 440
 441	dev_dbg(dev, "%s: %#llx %s [%llu-%llu] %s\n", what,
 442			flags->integer.value,
 443			name->string.pointer,
 444			limit1->integer.value, limit2->integer.value,
 445			enable->integer.value ? "enabled" : "disabled");
 446#endif
 447}
 448
 449static int atk_read_value_old(struct atk_sensor_data *sensor, u64 *value)
 450{
 451	struct atk_data *data = sensor->data;
 452	struct device *dev = &data->acpi_dev->dev;
 453	struct acpi_object_list params;
 454	union acpi_object id;
 455	acpi_status status;
 456	acpi_handle method;
 457
 458	switch (sensor->type) {
 459	case HWMON_TYPE_VOLT:
 460		method = data->rvlt_handle;
 461		break;
 462	case HWMON_TYPE_TEMP:
 463		method = data->rtmp_handle;
 464		break;
 465	case HWMON_TYPE_FAN:
 466		method = data->rfan_handle;
 467		break;
 468	default:
 469		return -EINVAL;
 470	}
 471
 472	id.type = ACPI_TYPE_INTEGER;
 473	id.integer.value = sensor->id;
 474
 475	params.count = 1;
 476	params.pointer = &id;
 477
 478	status = acpi_evaluate_integer(method, NULL, &params, value);
 479	if (status != AE_OK) {
 480		dev_warn(dev, "%s: ACPI exception: %s\n", __func__,
 481				acpi_format_exception(status));
 482		return -EIO;
 483	}
 484
 485	return 0;
 486}
 487
 488static union acpi_object *atk_ggrp(struct atk_data *data, u16 mux)
 489{
 490	struct device *dev = &data->acpi_dev->dev;
 491	struct acpi_buffer buf;
 492	acpi_status ret;
 493	struct acpi_object_list params;
 494	union acpi_object id;
 495	union acpi_object *pack;
 496
 497	id.type = ACPI_TYPE_INTEGER;
 498	id.integer.value = mux;
 499	params.count = 1;
 500	params.pointer = &id;
 501
 502	buf.length = ACPI_ALLOCATE_BUFFER;
 503	ret = acpi_evaluate_object(data->enumerate_handle, NULL, &params, &buf);
 504	if (ret != AE_OK) {
 505		dev_err(dev, "GGRP[%#x] ACPI exception: %s\n", mux,
 506				acpi_format_exception(ret));
 507		return ERR_PTR(-EIO);
 508	}
 509	pack = buf.pointer;
 510	if (pack->type != ACPI_TYPE_PACKAGE) {
 511		/* Execution was successful, but the id was not found */
 512		ACPI_FREE(pack);
 513		return ERR_PTR(-ENOENT);
 514	}
 515
 516	if (pack->package.count < 1) {
 517		dev_err(dev, "GGRP[%#x] package is too small\n", mux);
 518		ACPI_FREE(pack);
 519		return ERR_PTR(-EIO);
 520	}
 521	return pack;
 522}
 523
 524static union acpi_object *atk_gitm(struct atk_data *data, u64 id)
 525{
 526	struct device *dev = &data->acpi_dev->dev;
 527	struct atk_acpi_input_buf buf;
 528	union acpi_object tmp;
 529	struct acpi_object_list params;
 530	struct acpi_buffer ret;
 531	union acpi_object *obj;
 532	acpi_status status;
 533
 534	buf.id = id;
 535	buf.param1 = 0;
 536	buf.param2 = 0;
 537
 538	tmp.type = ACPI_TYPE_BUFFER;
 539	tmp.buffer.pointer = (u8 *)&buf;
 540	tmp.buffer.length = sizeof(buf);
 541
 542	params.count = 1;
 543	params.pointer = (void *)&tmp;
 544
 545	ret.length = ACPI_ALLOCATE_BUFFER;
 546	status = acpi_evaluate_object_typed(data->read_handle, NULL, &params,
 547			&ret, ACPI_TYPE_BUFFER);
 548	if (status != AE_OK) {
 549		dev_warn(dev, "GITM[%#llx] ACPI exception: %s\n", id,
 550				acpi_format_exception(status));
 551		return ERR_PTR(-EIO);
 552	}
 553	obj = ret.pointer;
 554
 555	/* Sanity check */
 556	if (obj->buffer.length < 8) {
 557		dev_warn(dev, "Unexpected ASBF length: %u\n",
 558				obj->buffer.length);
 559		ACPI_FREE(obj);
 560		return ERR_PTR(-EIO);
 561	}
 562	return obj;
 563}
 564
 565static union acpi_object *atk_sitm(struct atk_data *data,
 566		struct atk_acpi_input_buf *buf)
 567{
 568	struct device *dev = &data->acpi_dev->dev;
 569	struct acpi_object_list params;
 570	union acpi_object tmp;
 571	struct acpi_buffer ret;
 572	union acpi_object *obj;
 573	acpi_status status;
 574
 575	tmp.type = ACPI_TYPE_BUFFER;
 576	tmp.buffer.pointer = (u8 *)buf;
 577	tmp.buffer.length = sizeof(*buf);
 578
 579	params.count = 1;
 580	params.pointer = &tmp;
 581
 582	ret.length = ACPI_ALLOCATE_BUFFER;
 583	status = acpi_evaluate_object_typed(data->write_handle, NULL, &params,
 584			&ret, ACPI_TYPE_BUFFER);
 585	if (status != AE_OK) {
 586		dev_warn(dev, "SITM[%#x] ACPI exception: %s\n", buf->id,
 587				acpi_format_exception(status));
 588		return ERR_PTR(-EIO);
 589	}
 590	obj = ret.pointer;
 591
 592	/* Sanity check */
 593	if (obj->buffer.length < 8) {
 594		dev_warn(dev, "Unexpected ASBF length: %u\n",
 595				obj->buffer.length);
 596		ACPI_FREE(obj);
 597		return ERR_PTR(-EIO);
 598	}
 599	return obj;
 600}
 601
 602static int atk_read_value_new(struct atk_sensor_data *sensor, u64 *value)
 603{
 604	struct atk_data *data = sensor->data;
 605	struct device *dev = &data->acpi_dev->dev;
 606	union acpi_object *obj;
 607	struct atk_acpi_ret_buffer *buf;
 608	int err = 0;
 609
 610	obj = atk_gitm(data, sensor->id);
 611	if (IS_ERR(obj))
 612		return PTR_ERR(obj);
 613
 614	buf = (struct atk_acpi_ret_buffer *)obj->buffer.pointer;
 615	if (buf->flags == 0) {
 616		/* The reading is not valid, possible causes:
 
 617		 * - sensor failure
 618		 * - enumeration was FUBAR (and we didn't notice)
 619		 */
 620		dev_warn(dev, "Read failed, sensor = %#llx\n", sensor->id);
 621		err = -EIO;
 622		goto out;
 623	}
 624
 625	*value = buf->value;
 626out:
 627	ACPI_FREE(obj);
 628	return err;
 629}
 630
 631static int atk_read_value(struct atk_sensor_data *sensor, u64 *value)
 632{
 633	int err;
 634
 635	if (!sensor->is_valid ||
 636	    time_after(jiffies, sensor->last_updated + CACHE_TIME)) {
 637		if (sensor->data->old_interface)
 638			err = atk_read_value_old(sensor, value);
 639		else
 640			err = atk_read_value_new(sensor, value);
 641
 
 
 
 642		sensor->is_valid = true;
 643		sensor->last_updated = jiffies;
 644		sensor->cached_value = *value;
 645	} else {
 646		*value = sensor->cached_value;
 647		err = 0;
 648	}
 649
 650	return err;
 651}
 652
 653#ifdef CONFIG_DEBUG_FS
 654static int atk_debugfs_gitm_get(void *p, u64 *val)
 655{
 656	struct atk_data *data = p;
 657	union acpi_object *ret;
 658	struct atk_acpi_ret_buffer *buf;
 659	int err = 0;
 660
 661	if (!data->read_handle)
 662		return -ENODEV;
 663
 664	if (!data->debugfs.id)
 665		return -EINVAL;
 666
 667	ret = atk_gitm(data, data->debugfs.id);
 668	if (IS_ERR(ret))
 669		return PTR_ERR(ret);
 670
 671	buf = (struct atk_acpi_ret_buffer *)ret->buffer.pointer;
 672	if (buf->flags)
 673		*val = buf->value;
 674	else
 675		err = -EIO;
 676
 677	ACPI_FREE(ret);
 678	return err;
 679}
 680
 681DEFINE_SIMPLE_ATTRIBUTE(atk_debugfs_gitm,
 682			atk_debugfs_gitm_get,
 683			NULL,
 684			"0x%08llx\n")
 685
 686static int atk_acpi_print(char *buf, size_t sz, union acpi_object *obj)
 687{
 688	int ret = 0;
 689
 690	switch (obj->type) {
 691	case ACPI_TYPE_INTEGER:
 692		ret = snprintf(buf, sz, "0x%08llx\n", obj->integer.value);
 693		break;
 694	case ACPI_TYPE_STRING:
 695		ret = snprintf(buf, sz, "%s\n", obj->string.pointer);
 696		break;
 697	}
 698
 699	return ret;
 700}
 701
 702static void atk_pack_print(char *buf, size_t sz, union acpi_object *pack)
 703{
 704	int ret;
 705	int i;
 706
 707	for (i = 0; i < pack->package.count; i++) {
 708		union acpi_object *obj = &pack->package.elements[i];
 709
 710		ret = atk_acpi_print(buf, sz, obj);
 711		if (ret >= sz)
 712			break;
 713		buf += ret;
 714		sz -= ret;
 715	}
 716}
 717
 718static int atk_debugfs_ggrp_open(struct inode *inode, struct file *file)
 719{
 720	struct atk_data *data = inode->i_private;
 721	char *buf = NULL;
 722	union acpi_object *ret;
 723	u8 cls;
 724	int i;
 725
 726	if (!data->enumerate_handle)
 727		return -ENODEV;
 728	if (!data->debugfs.id)
 729		return -EINVAL;
 730
 731	cls = (data->debugfs.id & 0xff000000) >> 24;
 732	ret = atk_ggrp(data, cls);
 733	if (IS_ERR(ret))
 734		return PTR_ERR(ret);
 735
 736	for (i = 0; i < ret->package.count; i++) {
 737		union acpi_object *pack = &ret->package.elements[i];
 738		union acpi_object *id;
 739
 740		if (pack->type != ACPI_TYPE_PACKAGE)
 741			continue;
 742		if (!pack->package.count)
 743			continue;
 744		id = &pack->package.elements[0];
 745		if (id->integer.value == data->debugfs.id) {
 746			/* Print the package */
 747			buf = kzalloc(512, GFP_KERNEL);
 748			if (!buf) {
 749				ACPI_FREE(ret);
 750				return -ENOMEM;
 751			}
 752			atk_pack_print(buf, 512, pack);
 753			break;
 754		}
 755	}
 756	ACPI_FREE(ret);
 757
 758	if (!buf)
 759		return -EINVAL;
 760
 761	file->private_data = buf;
 762
 763	return nonseekable_open(inode, file);
 764}
 765
 766static ssize_t atk_debugfs_ggrp_read(struct file *file, char __user *buf,
 767		size_t count, loff_t *pos)
 768{
 769	char *str = file->private_data;
 770	size_t len = strlen(str);
 771
 772	return simple_read_from_buffer(buf, count, pos, str, len);
 773}
 774
 775static int atk_debugfs_ggrp_release(struct inode *inode, struct file *file)
 776{
 777	kfree(file->private_data);
 778	return 0;
 779}
 780
 781static const struct file_operations atk_debugfs_ggrp_fops = {
 782	.read		= atk_debugfs_ggrp_read,
 783	.open		= atk_debugfs_ggrp_open,
 784	.release	= atk_debugfs_ggrp_release,
 785	.llseek		= no_llseek,
 786};
 787
 788static void atk_debugfs_init(struct atk_data *data)
 789{
 790	struct dentry *d;
 791	struct dentry *f;
 792
 793	data->debugfs.id = 0;
 794
 795	d = debugfs_create_dir("asus_atk0110", NULL);
 796	if (!d || IS_ERR(d))
 797		return;
 798
 799	f = debugfs_create_x32("id", S_IRUSR | S_IWUSR, d, &data->debugfs.id);
 800	if (!f || IS_ERR(f))
 801		goto cleanup;
 802
 803	f = debugfs_create_file("gitm", S_IRUSR, d, data,
 804			&atk_debugfs_gitm);
 805	if (!f || IS_ERR(f))
 806		goto cleanup;
 807
 808	f = debugfs_create_file("ggrp", S_IRUSR, d, data,
 809			&atk_debugfs_ggrp_fops);
 810	if (!f || IS_ERR(f))
 811		goto cleanup;
 812
 813	data->debugfs.root = d;
 814
 815	return;
 816cleanup:
 817	debugfs_remove_recursive(d);
 818}
 819
 820static void atk_debugfs_cleanup(struct atk_data *data)
 821{
 822	debugfs_remove_recursive(data->debugfs.root);
 823}
 824
 825#else /* CONFIG_DEBUG_FS */
 826
 827static void atk_debugfs_init(struct atk_data *data)
 828{
 829}
 830
 831static void atk_debugfs_cleanup(struct atk_data *data)
 832{
 833}
 834#endif
 835
 836static int atk_add_sensor(struct atk_data *data, union acpi_object *obj)
 837{
 838	struct device *dev = &data->acpi_dev->dev;
 839	union acpi_object *flags;
 840	union acpi_object *name;
 841	union acpi_object *limit1;
 842	union acpi_object *limit2;
 843	union acpi_object *enable;
 844	struct atk_sensor_data *sensor;
 845	char const *base_name;
 846	char const *limit1_name;
 847	char const *limit2_name;
 848	u64 type;
 849	int err;
 850	int *num;
 851	int start;
 852
 853	if (obj->type != ACPI_TYPE_PACKAGE) {
 854		/* wft is this? */
 855		dev_warn(dev, "Unknown type for ACPI object: (%d)\n",
 856				obj->type);
 857		return -EINVAL;
 858	}
 859
 860	err = validate_hwmon_pack(data, obj);
 861	if (err)
 862		return err;
 863
 864	/* Ok, we have a valid hwmon package */
 865	type = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS)->integer.value
 866	       & ATK_TYPE_MASK;
 867
 868	switch (type) {
 869	case HWMON_TYPE_VOLT:
 870		base_name = "in";
 871		limit1_name = "min";
 872		limit2_name = "max";
 873		num = &data->voltage_count;
 874		start = 0;
 875		break;
 876	case HWMON_TYPE_TEMP:
 877		base_name = "temp";
 878		limit1_name = "max";
 879		limit2_name = "crit";
 880		num = &data->temperature_count;
 881		start = 1;
 882		break;
 883	case HWMON_TYPE_FAN:
 884		base_name = "fan";
 885		limit1_name = "min";
 886		limit2_name = "max";
 887		num = &data->fan_count;
 888		start = 1;
 889		break;
 890	default:
 891		dev_warn(dev, "Unknown sensor type: %#llx\n", type);
 892		return -EINVAL;
 893	}
 894
 895	enable = atk_get_pack_member(data, obj, HWMON_PACK_ENABLE);
 896	if (!enable->integer.value)
 897		/* sensor is disabled */
 898		return 0;
 899
 900	flags = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS);
 901	name = atk_get_pack_member(data, obj, HWMON_PACK_NAME);
 902	limit1 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT1);
 903	limit2 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT2);
 904
 905	sensor = kzalloc(sizeof(*sensor), GFP_KERNEL);
 906	if (!sensor)
 907		return -ENOMEM;
 908
 909	sensor->acpi_name = kstrdup(name->string.pointer, GFP_KERNEL);
 910	if (!sensor->acpi_name) {
 911		err = -ENOMEM;
 912		goto out;
 913	}
 914
 915	INIT_LIST_HEAD(&sensor->list);
 916	sensor->type = type;
 917	sensor->data = data;
 918	sensor->id = flags->integer.value;
 919	sensor->limit1 = limit1->integer.value;
 920	if (data->old_interface)
 921		sensor->limit2 = limit2->integer.value;
 922	else
 923		/* The upper limit is expressed as delta from lower limit */
 924		sensor->limit2 = sensor->limit1 + limit2->integer.value;
 925
 926	snprintf(sensor->input_attr_name, ATTR_NAME_SIZE,
 927			"%s%d_input", base_name, start + *num);
 928	atk_init_attribute(&sensor->input_attr,
 929			sensor->input_attr_name,
 930			atk_input_show);
 931
 932	snprintf(sensor->label_attr_name, ATTR_NAME_SIZE,
 933			"%s%d_label", base_name, start + *num);
 934	atk_init_attribute(&sensor->label_attr,
 935			sensor->label_attr_name,
 936			atk_label_show);
 937
 938	snprintf(sensor->limit1_attr_name, ATTR_NAME_SIZE,
 939			"%s%d_%s", base_name, start + *num, limit1_name);
 940	atk_init_attribute(&sensor->limit1_attr,
 941			sensor->limit1_attr_name,
 942			atk_limit1_show);
 943
 944	snprintf(sensor->limit2_attr_name, ATTR_NAME_SIZE,
 945			"%s%d_%s", base_name, start + *num, limit2_name);
 946	atk_init_attribute(&sensor->limit2_attr,
 947			sensor->limit2_attr_name,
 948			atk_limit2_show);
 949
 950	list_add(&sensor->list, &data->sensor_list);
 951	(*num)++;
 952
 953	return 1;
 954out:
 955	kfree(sensor->acpi_name);
 956	kfree(sensor);
 957	return err;
 958}
 959
 960static int atk_enumerate_old_hwmon(struct atk_data *data)
 961{
 962	struct device *dev = &data->acpi_dev->dev;
 963	struct acpi_buffer buf;
 964	union acpi_object *pack;
 965	acpi_status status;
 966	int i, ret;
 967	int count = 0;
 968
 969	/* Voltages */
 970	buf.length = ACPI_ALLOCATE_BUFFER;
 971	status = acpi_evaluate_object_typed(data->atk_handle,
 972			METHOD_OLD_ENUM_VLT, NULL, &buf, ACPI_TYPE_PACKAGE);
 973	if (status != AE_OK) {
 974		dev_warn(dev, METHOD_OLD_ENUM_VLT ": ACPI exception: %s\n",
 975				acpi_format_exception(status));
 976
 977		return -ENODEV;
 978	}
 979
 980	pack = buf.pointer;
 981	for (i = 1; i < pack->package.count; i++) {
 982		union acpi_object *obj = &pack->package.elements[i];
 983
 984		ret = atk_add_sensor(data, obj);
 985		if (ret > 0)
 986			count++;
 987	}
 988	ACPI_FREE(buf.pointer);
 989
 990	/* Temperatures */
 991	buf.length = ACPI_ALLOCATE_BUFFER;
 992	status = acpi_evaluate_object_typed(data->atk_handle,
 993			METHOD_OLD_ENUM_TMP, NULL, &buf, ACPI_TYPE_PACKAGE);
 994	if (status != AE_OK) {
 995		dev_warn(dev, METHOD_OLD_ENUM_TMP ": ACPI exception: %s\n",
 996				acpi_format_exception(status));
 997
 998		ret = -ENODEV;
 999		goto cleanup;
1000	}
1001
1002	pack = buf.pointer;
1003	for (i = 1; i < pack->package.count; i++) {
1004		union acpi_object *obj = &pack->package.elements[i];
1005
1006		ret = atk_add_sensor(data, obj);
1007		if (ret > 0)
1008			count++;
1009	}
1010	ACPI_FREE(buf.pointer);
1011
1012	/* Fans */
1013	buf.length = ACPI_ALLOCATE_BUFFER;
1014	status = acpi_evaluate_object_typed(data->atk_handle,
1015			METHOD_OLD_ENUM_FAN, NULL, &buf, ACPI_TYPE_PACKAGE);
1016	if (status != AE_OK) {
1017		dev_warn(dev, METHOD_OLD_ENUM_FAN ": ACPI exception: %s\n",
1018				acpi_format_exception(status));
1019
1020		ret = -ENODEV;
1021		goto cleanup;
1022	}
1023
1024	pack = buf.pointer;
1025	for (i = 1; i < pack->package.count; i++) {
1026		union acpi_object *obj = &pack->package.elements[i];
1027
1028		ret = atk_add_sensor(data, obj);
1029		if (ret > 0)
1030			count++;
1031	}
1032	ACPI_FREE(buf.pointer);
1033
1034	return count;
1035cleanup:
1036	atk_free_sensors(data);
1037	return ret;
1038}
1039
1040static int atk_ec_present(struct atk_data *data)
1041{
1042	struct device *dev = &data->acpi_dev->dev;
1043	union acpi_object *pack;
1044	union acpi_object *ec;
1045	int ret;
1046	int i;
1047
1048	pack = atk_ggrp(data, ATK_MUX_MGMT);
1049	if (IS_ERR(pack)) {
1050		if (PTR_ERR(pack) == -ENOENT) {
1051			/* The MGMT class does not exists - that's ok */
1052			dev_dbg(dev, "Class %#llx not found\n", ATK_MUX_MGMT);
1053			return 0;
1054		}
1055		return PTR_ERR(pack);
1056	}
1057
1058	/* Search the EC */
1059	ec = NULL;
1060	for (i = 0; i < pack->package.count; i++) {
1061		union acpi_object *obj = &pack->package.elements[i];
1062		union acpi_object *id;
1063
1064		if (obj->type != ACPI_TYPE_PACKAGE)
1065			continue;
1066
1067		id = &obj->package.elements[0];
1068		if (id->type != ACPI_TYPE_INTEGER)
1069			continue;
1070
1071		if (id->integer.value == ATK_EC_ID) {
1072			ec = obj;
1073			break;
1074		}
1075	}
1076
1077	ret = (ec != NULL);
1078	if (!ret)
1079		/* The system has no EC */
1080		dev_dbg(dev, "EC not found\n");
1081
1082	ACPI_FREE(pack);
1083	return ret;
1084}
1085
1086static int atk_ec_enabled(struct atk_data *data)
1087{
1088	struct device *dev = &data->acpi_dev->dev;
1089	union acpi_object *obj;
1090	struct atk_acpi_ret_buffer *buf;
1091	int err;
1092
1093	obj = atk_gitm(data, ATK_EC_ID);
1094	if (IS_ERR(obj)) {
1095		dev_err(dev, "Unable to query EC status\n");
1096		return PTR_ERR(obj);
1097	}
1098	buf = (struct atk_acpi_ret_buffer *)obj->buffer.pointer;
1099
1100	if (buf->flags == 0) {
1101		dev_err(dev, "Unable to query EC status\n");
1102		err = -EIO;
1103	} else {
1104		err = (buf->value != 0);
1105		dev_dbg(dev, "EC is %sabled\n",
1106				err ? "en" : "dis");
1107	}
1108
1109	ACPI_FREE(obj);
1110	return err;
1111}
1112
1113static int atk_ec_ctl(struct atk_data *data, int enable)
1114{
1115	struct device *dev = &data->acpi_dev->dev;
1116	union acpi_object *obj;
1117	struct atk_acpi_input_buf sitm;
1118	struct atk_acpi_ret_buffer *ec_ret;
1119	int err = 0;
1120
1121	sitm.id = ATK_EC_ID;
1122	sitm.param1 = enable;
1123	sitm.param2 = 0;
1124
1125	obj = atk_sitm(data, &sitm);
1126	if (IS_ERR(obj)) {
1127		dev_err(dev, "Failed to %sable the EC\n",
1128				enable ? "en" : "dis");
1129		return PTR_ERR(obj);
1130	}
1131	ec_ret = (struct atk_acpi_ret_buffer *)obj->buffer.pointer;
1132	if (ec_ret->flags == 0) {
1133		dev_err(dev, "Failed to %sable the EC\n",
1134				enable ? "en" : "dis");
1135		err = -EIO;
1136	} else {
1137		dev_info(dev, "EC %sabled\n",
1138				enable ? "en" : "dis");
1139	}
1140
1141	ACPI_FREE(obj);
1142	return err;
1143}
1144
1145static int atk_enumerate_new_hwmon(struct atk_data *data)
1146{
1147	struct device *dev = &data->acpi_dev->dev;
1148	union acpi_object *pack;
1149	int err;
1150	int i;
1151
1152	err = atk_ec_present(data);
1153	if (err < 0)
1154		return err;
1155	if (err) {
1156		err = atk_ec_enabled(data);
1157		if (err < 0)
1158			return err;
1159		/* If the EC was disabled we will disable it again on unload */
1160		data->disable_ec = err;
1161
1162		err = atk_ec_ctl(data, 1);
1163		if (err) {
1164			data->disable_ec = false;
1165			return err;
1166		}
1167	}
1168
1169	dev_dbg(dev, "Enumerating hwmon sensors\n");
1170
1171	pack = atk_ggrp(data, ATK_MUX_HWMON);
1172	if (IS_ERR(pack))
1173		return PTR_ERR(pack);
1174
1175	for (i = 0; i < pack->package.count; i++) {
1176		union acpi_object *obj = &pack->package.elements[i];
1177
1178		atk_add_sensor(data, obj);
1179	}
1180
1181	err = data->voltage_count + data->temperature_count + data->fan_count;
1182
1183	ACPI_FREE(pack);
1184	return err;
1185}
1186
1187static int atk_create_files(struct atk_data *data)
1188{
 
1189	struct atk_sensor_data *s;
1190	int err;
1191
1192	list_for_each_entry(s, &data->sensor_list, list) {
1193		err = device_create_file(data->hwmon_dev, &s->input_attr);
1194		if (err)
1195			return err;
1196		err = device_create_file(data->hwmon_dev, &s->label_attr);
1197		if (err)
1198			return err;
1199		err = device_create_file(data->hwmon_dev, &s->limit1_attr);
1200		if (err)
1201			return err;
1202		err = device_create_file(data->hwmon_dev, &s->limit2_attr);
1203		if (err)
1204			return err;
1205	}
1206
1207	err = device_create_file(data->hwmon_dev, &atk_name_attr);
1208
1209	return err;
1210}
1211
1212static void atk_remove_files(struct atk_data *data)
1213{
1214	struct atk_sensor_data *s;
1215
1216	list_for_each_entry(s, &data->sensor_list, list) {
1217		device_remove_file(data->hwmon_dev, &s->input_attr);
1218		device_remove_file(data->hwmon_dev, &s->label_attr);
1219		device_remove_file(data->hwmon_dev, &s->limit1_attr);
1220		device_remove_file(data->hwmon_dev, &s->limit2_attr);
1221	}
1222	device_remove_file(data->hwmon_dev, &atk_name_attr);
1223}
1224
1225static void atk_free_sensors(struct atk_data *data)
1226{
1227	struct list_head *head = &data->sensor_list;
1228	struct atk_sensor_data *s, *tmp;
1229
1230	list_for_each_entry_safe(s, tmp, head, list) {
1231		kfree(s->acpi_name);
1232		kfree(s);
1233	}
1234}
1235
1236static int atk_register_hwmon(struct atk_data *data)
1237{
1238	struct device *dev = &data->acpi_dev->dev;
1239	int err;
1240
1241	dev_dbg(dev, "registering hwmon device\n");
1242	data->hwmon_dev = hwmon_device_register(dev);
1243	if (IS_ERR(data->hwmon_dev))
1244		return PTR_ERR(data->hwmon_dev);
1245
1246	dev_dbg(dev, "populating sysfs directory\n");
1247	err = atk_create_files(data);
1248	if (err)
1249		goto remove;
1250
1251	return 0;
1252remove:
1253	/* Cleanup the registered files */
1254	atk_remove_files(data);
1255	hwmon_device_unregister(data->hwmon_dev);
1256	return err;
1257}
1258
1259static int atk_probe_if(struct atk_data *data)
1260{
1261	struct device *dev = &data->acpi_dev->dev;
1262	acpi_handle ret;
1263	acpi_status status;
1264	int err = 0;
1265
1266	/* RTMP: read temperature */
1267	status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_TMP, &ret);
1268	if (ACPI_SUCCESS(status))
1269		data->rtmp_handle = ret;
1270	else
1271		dev_dbg(dev, "method " METHOD_OLD_READ_TMP " not found: %s\n",
1272				acpi_format_exception(status));
1273
1274	/* RVLT: read voltage */
1275	status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_VLT, &ret);
1276	if (ACPI_SUCCESS(status))
1277		data->rvlt_handle = ret;
1278	else
1279		dev_dbg(dev, "method " METHOD_OLD_READ_VLT " not found: %s\n",
1280				acpi_format_exception(status));
1281
1282	/* RFAN: read fan status */
1283	status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_FAN, &ret);
1284	if (ACPI_SUCCESS(status))
1285		data->rfan_handle = ret;
1286	else
1287		dev_dbg(dev, "method " METHOD_OLD_READ_FAN " not found: %s\n",
1288				acpi_format_exception(status));
1289
1290	/* Enumeration */
1291	status = acpi_get_handle(data->atk_handle, METHOD_ENUMERATE, &ret);
1292	if (ACPI_SUCCESS(status))
1293		data->enumerate_handle = ret;
1294	else
1295		dev_dbg(dev, "method " METHOD_ENUMERATE " not found: %s\n",
1296				acpi_format_exception(status));
1297
1298	/* De-multiplexer (read) */
1299	status = acpi_get_handle(data->atk_handle, METHOD_READ, &ret);
1300	if (ACPI_SUCCESS(status))
1301		data->read_handle = ret;
1302	else
1303		dev_dbg(dev, "method " METHOD_READ " not found: %s\n",
1304				acpi_format_exception(status));
1305
1306	/* De-multiplexer (write) */
1307	status = acpi_get_handle(data->atk_handle, METHOD_WRITE, &ret);
1308	if (ACPI_SUCCESS(status))
1309		data->write_handle = ret;
1310	else
1311		dev_dbg(dev, "method " METHOD_WRITE " not found: %s\n",
1312				 acpi_format_exception(status));
1313
1314	/* Check for hwmon methods: first check "old" style methods; note that
 
1315	 * both may be present: in this case we stick to the old interface;
1316	 * analysis of multiple DSDTs indicates that when both interfaces
1317	 * are present the new one (GGRP/GITM) is not functional.
1318	 */
1319	if (new_if)
1320		dev_info(dev, "Overriding interface detection\n");
1321	if (data->rtmp_handle && data->rvlt_handle && data->rfan_handle && !new_if)
 
1322		data->old_interface = true;
1323	else if (data->enumerate_handle && data->read_handle &&
1324			data->write_handle)
1325		data->old_interface = false;
1326	else
1327		err = -ENODEV;
1328
1329	return err;
1330}
1331
1332static int atk_add(struct acpi_device *device)
1333{
1334	acpi_status ret;
1335	int err;
1336	struct acpi_buffer buf;
1337	union acpi_object *obj;
1338	struct atk_data *data;
1339
1340	dev_dbg(&device->dev, "adding...\n");
1341
1342	data = kzalloc(sizeof(*data), GFP_KERNEL);
1343	if (!data)
1344		return -ENOMEM;
1345
1346	data->acpi_dev = device;
1347	data->atk_handle = device->handle;
1348	INIT_LIST_HEAD(&data->sensor_list);
1349	data->disable_ec = false;
1350
1351	buf.length = ACPI_ALLOCATE_BUFFER;
1352	ret = acpi_evaluate_object_typed(data->atk_handle, BOARD_ID, NULL,
1353			&buf, ACPI_TYPE_PACKAGE);
1354	if (ret != AE_OK) {
1355		dev_dbg(&device->dev, "atk: method MBIF not found\n");
1356	} else {
1357		obj = buf.pointer;
1358		if (obj->package.count >= 2) {
1359			union acpi_object *id = &obj->package.elements[1];
1360			if (id->type == ACPI_TYPE_STRING)
1361				dev_dbg(&device->dev, "board ID = %s\n",
1362					id->string.pointer);
1363		}
1364		ACPI_FREE(buf.pointer);
1365	}
1366
1367	err = atk_probe_if(data);
1368	if (err) {
1369		dev_err(&device->dev, "No usable hwmon interface detected\n");
1370		goto out;
1371	}
1372
1373	if (data->old_interface) {
1374		dev_dbg(&device->dev, "Using old hwmon interface\n");
1375		err = atk_enumerate_old_hwmon(data);
1376	} else {
1377		dev_dbg(&device->dev, "Using new hwmon interface\n");
1378		err = atk_enumerate_new_hwmon(data);
1379	}
1380	if (err < 0)
1381		goto out;
1382	if (err == 0) {
1383		dev_info(&device->dev,
1384			 "No usable sensor detected, bailing out\n");
1385		err = -ENODEV;
1386		goto out;
1387	}
1388
 
 
 
1389	err = atk_register_hwmon(data);
1390	if (err)
1391		goto cleanup;
1392
1393	atk_debugfs_init(data);
1394
1395	device->driver_data = data;
1396	return 0;
1397cleanup:
1398	atk_free_sensors(data);
1399out:
1400	if (data->disable_ec)
1401		atk_ec_ctl(data, 0);
1402	kfree(data);
1403	return err;
1404}
1405
1406static int atk_remove(struct acpi_device *device, int type)
1407{
1408	struct atk_data *data = device->driver_data;
1409	dev_dbg(&device->dev, "removing...\n");
1410
1411	device->driver_data = NULL;
1412
1413	atk_debugfs_cleanup(data);
1414
1415	atk_remove_files(data);
1416	atk_free_sensors(data);
1417	hwmon_device_unregister(data->hwmon_dev);
1418
1419	if (data->disable_ec) {
1420		if (atk_ec_ctl(data, 0))
1421			dev_err(&device->dev, "Failed to disable EC\n");
1422	}
1423
1424	kfree(data);
1425
1426	return 0;
1427}
1428
1429static int __init atk0110_init(void)
1430{
1431	int ret;
1432
1433	/* Make sure it's safe to access the device through ACPI */
1434	if (!acpi_resources_are_enforced()) {
1435		pr_err("Resources not safely usable due to acpi_enforce_resources kernel parameter\n");
1436		return -EBUSY;
1437	}
1438
1439	if (dmi_check_system(atk_force_new_if))
1440		new_if = true;
1441
1442	ret = acpi_bus_register_driver(&atk_driver);
1443	if (ret)
1444		pr_info("acpi_bus_register_driver failed: %d\n", ret);
1445
1446	return ret;
1447}
1448
1449static void __exit atk0110_exit(void)
1450{
1451	acpi_bus_unregister_driver(&atk_driver);
1452}
1453
1454module_init(atk0110_init);
1455module_exit(atk0110_exit);
1456
 
1457MODULE_LICENSE("GPL");
v6.13.7
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (C) 2007-2009 Luca Tettamanti <kronos.it@gmail.com>
   4 *
 
   5 * See COPYING in the top level directory of the kernel tree.
   6 */
   7
   8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
   9
  10#include <linux/debugfs.h>
  11#include <linux/kernel.h>
  12#include <linux/hwmon.h>
  13#include <linux/list.h>
  14#include <linux/module.h>
  15#include <linux/slab.h>
  16#include <linux/dmi.h>
  17#include <linux/jiffies.h>
  18#include <linux/err.h>
  19#include <linux/acpi.h>
 
 
 
  20
  21#define ATK_HID "ATK0110"
  22
  23static bool new_if;
  24module_param(new_if, bool, 0);
  25MODULE_PARM_DESC(new_if, "Override detection heuristic and force the use of the new ATK0110 interface");
  26
  27static const struct dmi_system_id __initconst atk_force_new_if[] = {
  28	{
  29		/* Old interface has broken MCH temp monitoring */
  30		.ident = "Asus Sabertooth X58",
  31		.matches = {
  32			DMI_MATCH(DMI_BOARD_NAME, "SABERTOOTH X58")
  33		}
  34	}, {
  35		/* Old interface reads the same sensor for fan0 and fan1 */
  36		.ident = "Asus M5A78L",
  37		.matches = {
  38			DMI_MATCH(DMI_BOARD_NAME, "M5A78L")
  39		}
  40	},
  41	{ }
  42};
  43
  44/*
  45 * Minimum time between readings, enforced in order to avoid
  46 * hogging the CPU.
  47 */
  48#define CACHE_TIME		HZ
  49
  50#define BOARD_ID		"MBIF"
  51#define METHOD_ENUMERATE	"GGRP"
  52#define METHOD_READ		"GITM"
  53#define METHOD_WRITE		"SITM"
  54#define METHOD_OLD_READ_TMP	"RTMP"
  55#define METHOD_OLD_READ_VLT	"RVLT"
  56#define METHOD_OLD_READ_FAN	"RFAN"
  57#define METHOD_OLD_ENUM_TMP	"TSIF"
  58#define METHOD_OLD_ENUM_VLT	"VSIF"
  59#define METHOD_OLD_ENUM_FAN	"FSIF"
  60
  61#define ATK_MUX_HWMON		0x00000006ULL
  62#define ATK_MUX_MGMT		0x00000011ULL
  63
  64#define ATK_CLASS_MASK		0xff000000ULL
  65#define ATK_CLASS_FREQ_CTL	0x03000000ULL
  66#define ATK_CLASS_FAN_CTL	0x04000000ULL
  67#define ATK_CLASS_HWMON		0x06000000ULL
  68#define ATK_CLASS_MGMT		0x11000000ULL
  69
  70#define ATK_TYPE_MASK		0x00ff0000ULL
  71#define HWMON_TYPE_VOLT		0x00020000ULL
  72#define HWMON_TYPE_TEMP		0x00030000ULL
  73#define HWMON_TYPE_FAN		0x00040000ULL
  74
  75#define ATK_ELEMENT_ID_MASK	0x0000ffffULL
  76
  77#define ATK_EC_ID		0x11060004ULL
  78
  79enum atk_pack_member {
  80	HWMON_PACK_FLAGS,
  81	HWMON_PACK_NAME,
  82	HWMON_PACK_LIMIT1,
  83	HWMON_PACK_LIMIT2,
  84	HWMON_PACK_ENABLE
  85};
  86
  87/* New package format */
  88#define _HWMON_NEW_PACK_SIZE	7
  89#define _HWMON_NEW_PACK_FLAGS	0
  90#define _HWMON_NEW_PACK_NAME	1
  91#define _HWMON_NEW_PACK_UNK1	2
  92#define _HWMON_NEW_PACK_UNK2	3
  93#define _HWMON_NEW_PACK_LIMIT1	4
  94#define _HWMON_NEW_PACK_LIMIT2	5
  95#define _HWMON_NEW_PACK_ENABLE	6
  96
  97/* Old package format */
  98#define _HWMON_OLD_PACK_SIZE	5
  99#define _HWMON_OLD_PACK_FLAGS	0
 100#define _HWMON_OLD_PACK_NAME	1
 101#define _HWMON_OLD_PACK_LIMIT1	2
 102#define _HWMON_OLD_PACK_LIMIT2	3
 103#define _HWMON_OLD_PACK_ENABLE	4
 104
 105
 106struct atk_data {
 107	struct device *hwmon_dev;
 108	acpi_handle atk_handle;
 109	struct acpi_device *acpi_dev;
 110
 111	bool old_interface;
 112
 113	/* old interface */
 114	acpi_handle rtmp_handle;
 115	acpi_handle rvlt_handle;
 116	acpi_handle rfan_handle;
 117	/* new interface */
 118	acpi_handle enumerate_handle;
 119	acpi_handle read_handle;
 120	acpi_handle write_handle;
 121
 122	bool disable_ec;
 123
 124	int voltage_count;
 125	int temperature_count;
 126	int fan_count;
 127	struct list_head sensor_list;
 128	struct attribute_group attr_group;
 129	const struct attribute_group *attr_groups[2];
 130
 131	struct {
 132		struct dentry *root;
 133		u32 id;
 134	} debugfs;
 135};
 136
 137
 138typedef ssize_t (*sysfs_show_func)(struct device *dev,
 139			struct device_attribute *attr, char *buf);
 140
 141static const struct acpi_device_id atk_ids[] = {
 142	{ATK_HID, 0},
 143	{"", 0},
 144};
 145MODULE_DEVICE_TABLE(acpi, atk_ids);
 146
 147#define ATTR_NAME_SIZE 16 /* Worst case is "tempN_input" */
 148
 149struct atk_sensor_data {
 150	struct list_head list;
 151	struct atk_data *data;
 152	struct device_attribute label_attr;
 153	struct device_attribute input_attr;
 154	struct device_attribute limit1_attr;
 155	struct device_attribute limit2_attr;
 156	char label_attr_name[ATTR_NAME_SIZE];
 157	char input_attr_name[ATTR_NAME_SIZE];
 158	char limit1_attr_name[ATTR_NAME_SIZE];
 159	char limit2_attr_name[ATTR_NAME_SIZE];
 160	u64 id;
 161	u64 type;
 162	u64 limit1;
 163	u64 limit2;
 164	u64 cached_value;
 165	unsigned long last_updated; /* in jiffies */
 166	bool is_valid;
 167	char const *acpi_name;
 168};
 169
 170/*
 171 * Return buffer format:
 172 * [0-3] "value" is valid flag
 173 * [4-7] value
 174 * [8- ] unknown stuff on newer mobos
 175 */
 176struct atk_acpi_ret_buffer {
 177	u32 flags;
 178	u32 value;
 179	u8 data[];
 180};
 181
 182/* Input buffer used for GITM and SITM methods */
 183struct atk_acpi_input_buf {
 184	u32 id;
 185	u32 param1;
 186	u32 param2;
 187};
 188
 189static int atk_add(struct acpi_device *device);
 190static void atk_remove(struct acpi_device *device);
 191static void atk_print_sensor(struct atk_data *data, union acpi_object *obj);
 192static int atk_read_value(struct atk_sensor_data *sensor, u64 *value);
 
 193
 194static struct acpi_driver atk_driver = {
 195	.name	= ATK_HID,
 196	.class	= "hwmon",
 197	.ids	= atk_ids,
 198	.ops	= {
 199		.add	= atk_add,
 200		.remove	= atk_remove,
 201	},
 202};
 203
 204#define input_to_atk_sensor(attr) \
 205	container_of(attr, struct atk_sensor_data, input_attr)
 206
 207#define label_to_atk_sensor(attr) \
 208	container_of(attr, struct atk_sensor_data, label_attr)
 209
 210#define limit1_to_atk_sensor(attr) \
 211	container_of(attr, struct atk_sensor_data, limit1_attr)
 212
 213#define limit2_to_atk_sensor(attr) \
 214	container_of(attr, struct atk_sensor_data, limit2_attr)
 215
 216static ssize_t atk_input_show(struct device *dev,
 217		struct device_attribute *attr, char *buf)
 218{
 219	struct atk_sensor_data *s = input_to_atk_sensor(attr);
 220	u64 value;
 221	int err;
 222
 223	err = atk_read_value(s, &value);
 224	if (err)
 225		return err;
 226
 227	if (s->type == HWMON_TYPE_TEMP)
 228		/* ACPI returns decidegree */
 229		value *= 100;
 230
 231	return sprintf(buf, "%llu\n", value);
 232}
 233
 234static ssize_t atk_label_show(struct device *dev,
 235		struct device_attribute *attr, char *buf)
 236{
 237	struct atk_sensor_data *s = label_to_atk_sensor(attr);
 238
 239	return sprintf(buf, "%s\n", s->acpi_name);
 240}
 241
 242static ssize_t atk_limit1_show(struct device *dev,
 243		struct device_attribute *attr, char *buf)
 244{
 245	struct atk_sensor_data *s = limit1_to_atk_sensor(attr);
 246	u64 value = s->limit1;
 247
 248	if (s->type == HWMON_TYPE_TEMP)
 249		value *= 100;
 250
 251	return sprintf(buf, "%lld\n", value);
 252}
 253
 254static ssize_t atk_limit2_show(struct device *dev,
 255		struct device_attribute *attr, char *buf)
 256{
 257	struct atk_sensor_data *s = limit2_to_atk_sensor(attr);
 258	u64 value = s->limit2;
 259
 260	if (s->type == HWMON_TYPE_TEMP)
 261		value *= 100;
 262
 263	return sprintf(buf, "%lld\n", value);
 264}
 265
 
 
 
 
 
 
 
 
 266static void atk_init_attribute(struct device_attribute *attr, char *name,
 267		sysfs_show_func show)
 268{
 269	sysfs_attr_init(&attr->attr);
 270	attr->attr.name = name;
 271	attr->attr.mode = 0444;
 272	attr->show = show;
 273	attr->store = NULL;
 274}
 275
 276
 277static union acpi_object *atk_get_pack_member(struct atk_data *data,
 278						union acpi_object *pack,
 279						enum atk_pack_member m)
 280{
 281	bool old_if = data->old_interface;
 282	int offset;
 283
 284	switch (m) {
 285	case HWMON_PACK_FLAGS:
 286		offset = old_if ? _HWMON_OLD_PACK_FLAGS : _HWMON_NEW_PACK_FLAGS;
 287		break;
 288	case HWMON_PACK_NAME:
 289		offset = old_if ? _HWMON_OLD_PACK_NAME : _HWMON_NEW_PACK_NAME;
 290		break;
 291	case HWMON_PACK_LIMIT1:
 292		offset = old_if ? _HWMON_OLD_PACK_LIMIT1 :
 293				  _HWMON_NEW_PACK_LIMIT1;
 294		break;
 295	case HWMON_PACK_LIMIT2:
 296		offset = old_if ? _HWMON_OLD_PACK_LIMIT2 :
 297				  _HWMON_NEW_PACK_LIMIT2;
 298		break;
 299	case HWMON_PACK_ENABLE:
 300		offset = old_if ? _HWMON_OLD_PACK_ENABLE :
 301				  _HWMON_NEW_PACK_ENABLE;
 302		break;
 303	default:
 304		return NULL;
 305	}
 306
 307	return &pack->package.elements[offset];
 308}
 309
 310
 311/*
 312 * New package format is:
 313 * - flag (int)
 314 *	class - used for de-muxing the request to the correct GITn
 315 *	type (volt, temp, fan)
 316 *	sensor id |
 317 *	sensor id - used for de-muxing the request _inside_ the GITn
 318 * - name (str)
 319 * - unknown (int)
 320 * - unknown (int)
 321 * - limit1 (int)
 322 * - limit2 (int)
 323 * - enable (int)
 324 *
 325 * The old package has the same format but it's missing the two unknown fields.
 326 */
 327static int validate_hwmon_pack(struct atk_data *data, union acpi_object *obj)
 328{
 329	struct device *dev = &data->acpi_dev->dev;
 330	union acpi_object *tmp;
 331	bool old_if = data->old_interface;
 332	int const expected_size = old_if ? _HWMON_OLD_PACK_SIZE :
 333					   _HWMON_NEW_PACK_SIZE;
 334
 335	if (obj->type != ACPI_TYPE_PACKAGE) {
 336		dev_warn(dev, "Invalid type: %d\n", obj->type);
 337		return -EINVAL;
 338	}
 339
 340	if (obj->package.count != expected_size) {
 341		dev_warn(dev, "Invalid package size: %d, expected: %d\n",
 342				obj->package.count, expected_size);
 343		return -EINVAL;
 344	}
 345
 346	tmp = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS);
 347	if (tmp->type != ACPI_TYPE_INTEGER) {
 348		dev_warn(dev, "Invalid type (flag): %d\n", tmp->type);
 349		return -EINVAL;
 350	}
 351
 352	tmp = atk_get_pack_member(data, obj, HWMON_PACK_NAME);
 353	if (tmp->type != ACPI_TYPE_STRING) {
 354		dev_warn(dev, "Invalid type (name): %d\n", tmp->type);
 355		return -EINVAL;
 356	}
 357
 358	/* Don't check... we don't know what they're useful for anyway */
 359#if 0
 360	tmp = &obj->package.elements[HWMON_PACK_UNK1];
 361	if (tmp->type != ACPI_TYPE_INTEGER) {
 362		dev_warn(dev, "Invalid type (unk1): %d\n", tmp->type);
 363		return -EINVAL;
 364	}
 365
 366	tmp = &obj->package.elements[HWMON_PACK_UNK2];
 367	if (tmp->type != ACPI_TYPE_INTEGER) {
 368		dev_warn(dev, "Invalid type (unk2): %d\n", tmp->type);
 369		return -EINVAL;
 370	}
 371#endif
 372
 373	tmp = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT1);
 374	if (tmp->type != ACPI_TYPE_INTEGER) {
 375		dev_warn(dev, "Invalid type (limit1): %d\n", tmp->type);
 376		return -EINVAL;
 377	}
 378
 379	tmp = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT2);
 380	if (tmp->type != ACPI_TYPE_INTEGER) {
 381		dev_warn(dev, "Invalid type (limit2): %d\n", tmp->type);
 382		return -EINVAL;
 383	}
 384
 385	tmp = atk_get_pack_member(data, obj, HWMON_PACK_ENABLE);
 386	if (tmp->type != ACPI_TYPE_INTEGER) {
 387		dev_warn(dev, "Invalid type (enable): %d\n", tmp->type);
 388		return -EINVAL;
 389	}
 390
 391	atk_print_sensor(data, obj);
 392
 393	return 0;
 394}
 395
 396#ifdef DEBUG
 397static char const *atk_sensor_type(union acpi_object *flags)
 398{
 399	u64 type = flags->integer.value & ATK_TYPE_MASK;
 400	char const *what;
 401
 402	switch (type) {
 403	case HWMON_TYPE_VOLT:
 404		what = "voltage";
 405		break;
 406	case HWMON_TYPE_TEMP:
 407		what = "temperature";
 408		break;
 409	case HWMON_TYPE_FAN:
 410		what = "fan";
 411		break;
 412	default:
 413		what = "unknown";
 414		break;
 415	}
 416
 417	return what;
 418}
 419#endif
 420
 421static void atk_print_sensor(struct atk_data *data, union acpi_object *obj)
 422{
 423#ifdef DEBUG
 424	struct device *dev = &data->acpi_dev->dev;
 425	union acpi_object *flags;
 426	union acpi_object *name;
 427	union acpi_object *limit1;
 428	union acpi_object *limit2;
 429	union acpi_object *enable;
 430	char const *what;
 431
 432	flags = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS);
 433	name = atk_get_pack_member(data, obj, HWMON_PACK_NAME);
 434	limit1 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT1);
 435	limit2 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT2);
 436	enable = atk_get_pack_member(data, obj, HWMON_PACK_ENABLE);
 437
 438	what = atk_sensor_type(flags);
 439
 440	dev_dbg(dev, "%s: %#llx %s [%llu-%llu] %s\n", what,
 441			flags->integer.value,
 442			name->string.pointer,
 443			limit1->integer.value, limit2->integer.value,
 444			enable->integer.value ? "enabled" : "disabled");
 445#endif
 446}
 447
 448static int atk_read_value_old(struct atk_sensor_data *sensor, u64 *value)
 449{
 450	struct atk_data *data = sensor->data;
 451	struct device *dev = &data->acpi_dev->dev;
 452	struct acpi_object_list params;
 453	union acpi_object id;
 454	acpi_status status;
 455	acpi_handle method;
 456
 457	switch (sensor->type) {
 458	case HWMON_TYPE_VOLT:
 459		method = data->rvlt_handle;
 460		break;
 461	case HWMON_TYPE_TEMP:
 462		method = data->rtmp_handle;
 463		break;
 464	case HWMON_TYPE_FAN:
 465		method = data->rfan_handle;
 466		break;
 467	default:
 468		return -EINVAL;
 469	}
 470
 471	id.type = ACPI_TYPE_INTEGER;
 472	id.integer.value = sensor->id;
 473
 474	params.count = 1;
 475	params.pointer = &id;
 476
 477	status = acpi_evaluate_integer(method, NULL, &params, value);
 478	if (status != AE_OK) {
 479		dev_warn(dev, "%s: ACPI exception: %s\n", __func__,
 480				acpi_format_exception(status));
 481		return -EIO;
 482	}
 483
 484	return 0;
 485}
 486
 487static union acpi_object *atk_ggrp(struct atk_data *data, u16 mux)
 488{
 489	struct device *dev = &data->acpi_dev->dev;
 490	struct acpi_buffer buf;
 491	acpi_status ret;
 492	struct acpi_object_list params;
 493	union acpi_object id;
 494	union acpi_object *pack;
 495
 496	id.type = ACPI_TYPE_INTEGER;
 497	id.integer.value = mux;
 498	params.count = 1;
 499	params.pointer = &id;
 500
 501	buf.length = ACPI_ALLOCATE_BUFFER;
 502	ret = acpi_evaluate_object(data->enumerate_handle, NULL, &params, &buf);
 503	if (ret != AE_OK) {
 504		dev_err(dev, "GGRP[%#x] ACPI exception: %s\n", mux,
 505				acpi_format_exception(ret));
 506		return ERR_PTR(-EIO);
 507	}
 508	pack = buf.pointer;
 509	if (pack->type != ACPI_TYPE_PACKAGE) {
 510		/* Execution was successful, but the id was not found */
 511		ACPI_FREE(pack);
 512		return ERR_PTR(-ENOENT);
 513	}
 514
 515	if (pack->package.count < 1) {
 516		dev_err(dev, "GGRP[%#x] package is too small\n", mux);
 517		ACPI_FREE(pack);
 518		return ERR_PTR(-EIO);
 519	}
 520	return pack;
 521}
 522
 523static union acpi_object *atk_gitm(struct atk_data *data, u64 id)
 524{
 525	struct device *dev = &data->acpi_dev->dev;
 526	struct atk_acpi_input_buf buf;
 527	union acpi_object tmp;
 528	struct acpi_object_list params;
 529	struct acpi_buffer ret;
 530	union acpi_object *obj;
 531	acpi_status status;
 532
 533	buf.id = id;
 534	buf.param1 = 0;
 535	buf.param2 = 0;
 536
 537	tmp.type = ACPI_TYPE_BUFFER;
 538	tmp.buffer.pointer = (u8 *)&buf;
 539	tmp.buffer.length = sizeof(buf);
 540
 541	params.count = 1;
 542	params.pointer = (void *)&tmp;
 543
 544	ret.length = ACPI_ALLOCATE_BUFFER;
 545	status = acpi_evaluate_object_typed(data->read_handle, NULL, &params,
 546			&ret, ACPI_TYPE_BUFFER);
 547	if (status != AE_OK) {
 548		dev_warn(dev, "GITM[%#llx] ACPI exception: %s\n", id,
 549				acpi_format_exception(status));
 550		return ERR_PTR(-EIO);
 551	}
 552	obj = ret.pointer;
 553
 554	/* Sanity check */
 555	if (obj->buffer.length < 8) {
 556		dev_warn(dev, "Unexpected ASBF length: %u\n",
 557				obj->buffer.length);
 558		ACPI_FREE(obj);
 559		return ERR_PTR(-EIO);
 560	}
 561	return obj;
 562}
 563
 564static union acpi_object *atk_sitm(struct atk_data *data,
 565		struct atk_acpi_input_buf *buf)
 566{
 567	struct device *dev = &data->acpi_dev->dev;
 568	struct acpi_object_list params;
 569	union acpi_object tmp;
 570	struct acpi_buffer ret;
 571	union acpi_object *obj;
 572	acpi_status status;
 573
 574	tmp.type = ACPI_TYPE_BUFFER;
 575	tmp.buffer.pointer = (u8 *)buf;
 576	tmp.buffer.length = sizeof(*buf);
 577
 578	params.count = 1;
 579	params.pointer = &tmp;
 580
 581	ret.length = ACPI_ALLOCATE_BUFFER;
 582	status = acpi_evaluate_object_typed(data->write_handle, NULL, &params,
 583			&ret, ACPI_TYPE_BUFFER);
 584	if (status != AE_OK) {
 585		dev_warn(dev, "SITM[%#x] ACPI exception: %s\n", buf->id,
 586				acpi_format_exception(status));
 587		return ERR_PTR(-EIO);
 588	}
 589	obj = ret.pointer;
 590
 591	/* Sanity check */
 592	if (obj->buffer.length < 8) {
 593		dev_warn(dev, "Unexpected ASBF length: %u\n",
 594				obj->buffer.length);
 595		ACPI_FREE(obj);
 596		return ERR_PTR(-EIO);
 597	}
 598	return obj;
 599}
 600
 601static int atk_read_value_new(struct atk_sensor_data *sensor, u64 *value)
 602{
 603	struct atk_data *data = sensor->data;
 604	struct device *dev = &data->acpi_dev->dev;
 605	union acpi_object *obj;
 606	struct atk_acpi_ret_buffer *buf;
 607	int err = 0;
 608
 609	obj = atk_gitm(data, sensor->id);
 610	if (IS_ERR(obj))
 611		return PTR_ERR(obj);
 612
 613	buf = (struct atk_acpi_ret_buffer *)obj->buffer.pointer;
 614	if (buf->flags == 0) {
 615		/*
 616		 * The reading is not valid, possible causes:
 617		 * - sensor failure
 618		 * - enumeration was FUBAR (and we didn't notice)
 619		 */
 620		dev_warn(dev, "Read failed, sensor = %#llx\n", sensor->id);
 621		err = -EIO;
 622		goto out;
 623	}
 624
 625	*value = buf->value;
 626out:
 627	ACPI_FREE(obj);
 628	return err;
 629}
 630
 631static int atk_read_value(struct atk_sensor_data *sensor, u64 *value)
 632{
 633	int err;
 634
 635	if (!sensor->is_valid ||
 636	    time_after(jiffies, sensor->last_updated + CACHE_TIME)) {
 637		if (sensor->data->old_interface)
 638			err = atk_read_value_old(sensor, value);
 639		else
 640			err = atk_read_value_new(sensor, value);
 641
 642		if (err)
 643			return err;
 644
 645		sensor->is_valid = true;
 646		sensor->last_updated = jiffies;
 647		sensor->cached_value = *value;
 648	} else {
 649		*value = sensor->cached_value;
 650		err = 0;
 651	}
 652
 653	return err;
 654}
 655
 656#ifdef CONFIG_DEBUG_FS
 657static int atk_debugfs_gitm_get(void *p, u64 *val)
 658{
 659	struct atk_data *data = p;
 660	union acpi_object *ret;
 661	struct atk_acpi_ret_buffer *buf;
 662	int err = 0;
 663
 664	if (!data->read_handle)
 665		return -ENODEV;
 666
 667	if (!data->debugfs.id)
 668		return -EINVAL;
 669
 670	ret = atk_gitm(data, data->debugfs.id);
 671	if (IS_ERR(ret))
 672		return PTR_ERR(ret);
 673
 674	buf = (struct atk_acpi_ret_buffer *)ret->buffer.pointer;
 675	if (buf->flags)
 676		*val = buf->value;
 677	else
 678		err = -EIO;
 679
 680	ACPI_FREE(ret);
 681	return err;
 682}
 683
 684DEFINE_DEBUGFS_ATTRIBUTE(atk_debugfs_gitm, atk_debugfs_gitm_get, NULL,
 685			 "0x%08llx\n");
 
 
 686
 687static int atk_acpi_print(char *buf, size_t sz, union acpi_object *obj)
 688{
 689	int ret = 0;
 690
 691	switch (obj->type) {
 692	case ACPI_TYPE_INTEGER:
 693		ret = snprintf(buf, sz, "0x%08llx\n", obj->integer.value);
 694		break;
 695	case ACPI_TYPE_STRING:
 696		ret = snprintf(buf, sz, "%s\n", obj->string.pointer);
 697		break;
 698	}
 699
 700	return ret;
 701}
 702
 703static void atk_pack_print(char *buf, size_t sz, union acpi_object *pack)
 704{
 705	int ret;
 706	int i;
 707
 708	for (i = 0; i < pack->package.count; i++) {
 709		union acpi_object *obj = &pack->package.elements[i];
 710
 711		ret = atk_acpi_print(buf, sz, obj);
 712		if (ret >= sz)
 713			break;
 714		buf += ret;
 715		sz -= ret;
 716	}
 717}
 718
 719static int atk_debugfs_ggrp_open(struct inode *inode, struct file *file)
 720{
 721	struct atk_data *data = inode->i_private;
 722	char *buf = NULL;
 723	union acpi_object *ret;
 724	u8 cls;
 725	int i;
 726
 727	if (!data->enumerate_handle)
 728		return -ENODEV;
 729	if (!data->debugfs.id)
 730		return -EINVAL;
 731
 732	cls = (data->debugfs.id & 0xff000000) >> 24;
 733	ret = atk_ggrp(data, cls);
 734	if (IS_ERR(ret))
 735		return PTR_ERR(ret);
 736
 737	for (i = 0; i < ret->package.count; i++) {
 738		union acpi_object *pack = &ret->package.elements[i];
 739		union acpi_object *id;
 740
 741		if (pack->type != ACPI_TYPE_PACKAGE)
 742			continue;
 743		if (!pack->package.count)
 744			continue;
 745		id = &pack->package.elements[0];
 746		if (id->integer.value == data->debugfs.id) {
 747			/* Print the package */
 748			buf = kzalloc(512, GFP_KERNEL);
 749			if (!buf) {
 750				ACPI_FREE(ret);
 751				return -ENOMEM;
 752			}
 753			atk_pack_print(buf, 512, pack);
 754			break;
 755		}
 756	}
 757	ACPI_FREE(ret);
 758
 759	if (!buf)
 760		return -EINVAL;
 761
 762	file->private_data = buf;
 763
 764	return nonseekable_open(inode, file);
 765}
 766
 767static ssize_t atk_debugfs_ggrp_read(struct file *file, char __user *buf,
 768		size_t count, loff_t *pos)
 769{
 770	char *str = file->private_data;
 771	size_t len = strlen(str);
 772
 773	return simple_read_from_buffer(buf, count, pos, str, len);
 774}
 775
 776static int atk_debugfs_ggrp_release(struct inode *inode, struct file *file)
 777{
 778	kfree(file->private_data);
 779	return 0;
 780}
 781
 782static const struct file_operations atk_debugfs_ggrp_fops = {
 783	.read		= atk_debugfs_ggrp_read,
 784	.open		= atk_debugfs_ggrp_open,
 785	.release	= atk_debugfs_ggrp_release,
 
 786};
 787
 788static void atk_debugfs_init(struct atk_data *data)
 789{
 790	struct dentry *d;
 
 791
 792	data->debugfs.id = 0;
 793
 794	d = debugfs_create_dir("asus_atk0110", NULL);
 
 
 795
 796	debugfs_create_x32("id", 0600, d, &data->debugfs.id);
 797	debugfs_create_file_unsafe("gitm", 0400, d, data, &atk_debugfs_gitm);
 798	debugfs_create_file("ggrp", 0400, d, data, &atk_debugfs_ggrp_fops);
 
 
 
 
 
 
 
 
 
 
 799
 800	data->debugfs.root = d;
 
 
 
 
 801}
 802
 803static void atk_debugfs_cleanup(struct atk_data *data)
 804{
 805	debugfs_remove_recursive(data->debugfs.root);
 806}
 807
 808#else /* CONFIG_DEBUG_FS */
 809
 810static void atk_debugfs_init(struct atk_data *data)
 811{
 812}
 813
 814static void atk_debugfs_cleanup(struct atk_data *data)
 815{
 816}
 817#endif
 818
 819static int atk_add_sensor(struct atk_data *data, union acpi_object *obj)
 820{
 821	struct device *dev = &data->acpi_dev->dev;
 822	union acpi_object *flags;
 823	union acpi_object *name;
 824	union acpi_object *limit1;
 825	union acpi_object *limit2;
 826	union acpi_object *enable;
 827	struct atk_sensor_data *sensor;
 828	char const *base_name;
 829	char const *limit1_name;
 830	char const *limit2_name;
 831	u64 type;
 832	int err;
 833	int *num;
 834	int start;
 835
 836	if (obj->type != ACPI_TYPE_PACKAGE) {
 837		/* wft is this? */
 838		dev_warn(dev, "Unknown type for ACPI object: (%d)\n",
 839				obj->type);
 840		return -EINVAL;
 841	}
 842
 843	err = validate_hwmon_pack(data, obj);
 844	if (err)
 845		return err;
 846
 847	/* Ok, we have a valid hwmon package */
 848	type = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS)->integer.value
 849	       & ATK_TYPE_MASK;
 850
 851	switch (type) {
 852	case HWMON_TYPE_VOLT:
 853		base_name = "in";
 854		limit1_name = "min";
 855		limit2_name = "max";
 856		num = &data->voltage_count;
 857		start = 0;
 858		break;
 859	case HWMON_TYPE_TEMP:
 860		base_name = "temp";
 861		limit1_name = "max";
 862		limit2_name = "crit";
 863		num = &data->temperature_count;
 864		start = 1;
 865		break;
 866	case HWMON_TYPE_FAN:
 867		base_name = "fan";
 868		limit1_name = "min";
 869		limit2_name = "max";
 870		num = &data->fan_count;
 871		start = 1;
 872		break;
 873	default:
 874		dev_warn(dev, "Unknown sensor type: %#llx\n", type);
 875		return -EINVAL;
 876	}
 877
 878	enable = atk_get_pack_member(data, obj, HWMON_PACK_ENABLE);
 879	if (!enable->integer.value)
 880		/* sensor is disabled */
 881		return 0;
 882
 883	flags = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS);
 884	name = atk_get_pack_member(data, obj, HWMON_PACK_NAME);
 885	limit1 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT1);
 886	limit2 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT2);
 887
 888	sensor = devm_kzalloc(dev, sizeof(*sensor), GFP_KERNEL);
 889	if (!sensor)
 890		return -ENOMEM;
 891
 892	sensor->acpi_name = devm_kstrdup(dev, name->string.pointer, GFP_KERNEL);
 893	if (!sensor->acpi_name)
 894		return -ENOMEM;
 
 
 895
 896	INIT_LIST_HEAD(&sensor->list);
 897	sensor->type = type;
 898	sensor->data = data;
 899	sensor->id = flags->integer.value;
 900	sensor->limit1 = limit1->integer.value;
 901	if (data->old_interface)
 902		sensor->limit2 = limit2->integer.value;
 903	else
 904		/* The upper limit is expressed as delta from lower limit */
 905		sensor->limit2 = sensor->limit1 + limit2->integer.value;
 906
 907	snprintf(sensor->input_attr_name, ATTR_NAME_SIZE,
 908			"%s%d_input", base_name, start + *num);
 909	atk_init_attribute(&sensor->input_attr,
 910			sensor->input_attr_name,
 911			atk_input_show);
 912
 913	snprintf(sensor->label_attr_name, ATTR_NAME_SIZE,
 914			"%s%d_label", base_name, start + *num);
 915	atk_init_attribute(&sensor->label_attr,
 916			sensor->label_attr_name,
 917			atk_label_show);
 918
 919	snprintf(sensor->limit1_attr_name, ATTR_NAME_SIZE,
 920			"%s%d_%s", base_name, start + *num, limit1_name);
 921	atk_init_attribute(&sensor->limit1_attr,
 922			sensor->limit1_attr_name,
 923			atk_limit1_show);
 924
 925	snprintf(sensor->limit2_attr_name, ATTR_NAME_SIZE,
 926			"%s%d_%s", base_name, start + *num, limit2_name);
 927	atk_init_attribute(&sensor->limit2_attr,
 928			sensor->limit2_attr_name,
 929			atk_limit2_show);
 930
 931	list_add(&sensor->list, &data->sensor_list);
 932	(*num)++;
 933
 934	return 1;
 
 
 
 
 935}
 936
 937static int atk_enumerate_old_hwmon(struct atk_data *data)
 938{
 939	struct device *dev = &data->acpi_dev->dev;
 940	struct acpi_buffer buf;
 941	union acpi_object *pack;
 942	acpi_status status;
 943	int i, ret;
 944	int count = 0;
 945
 946	/* Voltages */
 947	buf.length = ACPI_ALLOCATE_BUFFER;
 948	status = acpi_evaluate_object_typed(data->atk_handle,
 949			METHOD_OLD_ENUM_VLT, NULL, &buf, ACPI_TYPE_PACKAGE);
 950	if (status != AE_OK) {
 951		dev_warn(dev, METHOD_OLD_ENUM_VLT ": ACPI exception: %s\n",
 952				acpi_format_exception(status));
 953
 954		return -ENODEV;
 955	}
 956
 957	pack = buf.pointer;
 958	for (i = 1; i < pack->package.count; i++) {
 959		union acpi_object *obj = &pack->package.elements[i];
 960
 961		ret = atk_add_sensor(data, obj);
 962		if (ret > 0)
 963			count++;
 964	}
 965	ACPI_FREE(buf.pointer);
 966
 967	/* Temperatures */
 968	buf.length = ACPI_ALLOCATE_BUFFER;
 969	status = acpi_evaluate_object_typed(data->atk_handle,
 970			METHOD_OLD_ENUM_TMP, NULL, &buf, ACPI_TYPE_PACKAGE);
 971	if (status != AE_OK) {
 972		dev_warn(dev, METHOD_OLD_ENUM_TMP ": ACPI exception: %s\n",
 973				acpi_format_exception(status));
 974
 975		return -ENODEV;
 
 976	}
 977
 978	pack = buf.pointer;
 979	for (i = 1; i < pack->package.count; i++) {
 980		union acpi_object *obj = &pack->package.elements[i];
 981
 982		ret = atk_add_sensor(data, obj);
 983		if (ret > 0)
 984			count++;
 985	}
 986	ACPI_FREE(buf.pointer);
 987
 988	/* Fans */
 989	buf.length = ACPI_ALLOCATE_BUFFER;
 990	status = acpi_evaluate_object_typed(data->atk_handle,
 991			METHOD_OLD_ENUM_FAN, NULL, &buf, ACPI_TYPE_PACKAGE);
 992	if (status != AE_OK) {
 993		dev_warn(dev, METHOD_OLD_ENUM_FAN ": ACPI exception: %s\n",
 994				acpi_format_exception(status));
 995
 996		return -ENODEV;
 
 997	}
 998
 999	pack = buf.pointer;
1000	for (i = 1; i < pack->package.count; i++) {
1001		union acpi_object *obj = &pack->package.elements[i];
1002
1003		ret = atk_add_sensor(data, obj);
1004		if (ret > 0)
1005			count++;
1006	}
1007	ACPI_FREE(buf.pointer);
1008
1009	return count;
 
 
 
1010}
1011
1012static int atk_ec_present(struct atk_data *data)
1013{
1014	struct device *dev = &data->acpi_dev->dev;
1015	union acpi_object *pack;
1016	union acpi_object *ec;
1017	int ret;
1018	int i;
1019
1020	pack = atk_ggrp(data, ATK_MUX_MGMT);
1021	if (IS_ERR(pack)) {
1022		if (PTR_ERR(pack) == -ENOENT) {
1023			/* The MGMT class does not exists - that's ok */
1024			dev_dbg(dev, "Class %#llx not found\n", ATK_MUX_MGMT);
1025			return 0;
1026		}
1027		return PTR_ERR(pack);
1028	}
1029
1030	/* Search the EC */
1031	ec = NULL;
1032	for (i = 0; i < pack->package.count; i++) {
1033		union acpi_object *obj = &pack->package.elements[i];
1034		union acpi_object *id;
1035
1036		if (obj->type != ACPI_TYPE_PACKAGE)
1037			continue;
1038
1039		id = &obj->package.elements[0];
1040		if (id->type != ACPI_TYPE_INTEGER)
1041			continue;
1042
1043		if (id->integer.value == ATK_EC_ID) {
1044			ec = obj;
1045			break;
1046		}
1047	}
1048
1049	ret = (ec != NULL);
1050	if (!ret)
1051		/* The system has no EC */
1052		dev_dbg(dev, "EC not found\n");
1053
1054	ACPI_FREE(pack);
1055	return ret;
1056}
1057
1058static int atk_ec_enabled(struct atk_data *data)
1059{
1060	struct device *dev = &data->acpi_dev->dev;
1061	union acpi_object *obj;
1062	struct atk_acpi_ret_buffer *buf;
1063	int err;
1064
1065	obj = atk_gitm(data, ATK_EC_ID);
1066	if (IS_ERR(obj)) {
1067		dev_err(dev, "Unable to query EC status\n");
1068		return PTR_ERR(obj);
1069	}
1070	buf = (struct atk_acpi_ret_buffer *)obj->buffer.pointer;
1071
1072	if (buf->flags == 0) {
1073		dev_err(dev, "Unable to query EC status\n");
1074		err = -EIO;
1075	} else {
1076		err = (buf->value != 0);
1077		dev_dbg(dev, "EC is %sabled\n",
1078				err ? "en" : "dis");
1079	}
1080
1081	ACPI_FREE(obj);
1082	return err;
1083}
1084
1085static int atk_ec_ctl(struct atk_data *data, int enable)
1086{
1087	struct device *dev = &data->acpi_dev->dev;
1088	union acpi_object *obj;
1089	struct atk_acpi_input_buf sitm;
1090	struct atk_acpi_ret_buffer *ec_ret;
1091	int err = 0;
1092
1093	sitm.id = ATK_EC_ID;
1094	sitm.param1 = enable;
1095	sitm.param2 = 0;
1096
1097	obj = atk_sitm(data, &sitm);
1098	if (IS_ERR(obj)) {
1099		dev_err(dev, "Failed to %sable the EC\n",
1100				enable ? "en" : "dis");
1101		return PTR_ERR(obj);
1102	}
1103	ec_ret = (struct atk_acpi_ret_buffer *)obj->buffer.pointer;
1104	if (ec_ret->flags == 0) {
1105		dev_err(dev, "Failed to %sable the EC\n",
1106				enable ? "en" : "dis");
1107		err = -EIO;
1108	} else {
1109		dev_info(dev, "EC %sabled\n",
1110				enable ? "en" : "dis");
1111	}
1112
1113	ACPI_FREE(obj);
1114	return err;
1115}
1116
1117static int atk_enumerate_new_hwmon(struct atk_data *data)
1118{
1119	struct device *dev = &data->acpi_dev->dev;
1120	union acpi_object *pack;
1121	int err;
1122	int i;
1123
1124	err = atk_ec_present(data);
1125	if (err < 0)
1126		return err;
1127	if (err) {
1128		err = atk_ec_enabled(data);
1129		if (err < 0)
1130			return err;
1131		/* If the EC was disabled we will disable it again on unload */
1132		data->disable_ec = err;
1133
1134		err = atk_ec_ctl(data, 1);
1135		if (err) {
1136			data->disable_ec = false;
1137			return err;
1138		}
1139	}
1140
1141	dev_dbg(dev, "Enumerating hwmon sensors\n");
1142
1143	pack = atk_ggrp(data, ATK_MUX_HWMON);
1144	if (IS_ERR(pack))
1145		return PTR_ERR(pack);
1146
1147	for (i = 0; i < pack->package.count; i++) {
1148		union acpi_object *obj = &pack->package.elements[i];
1149
1150		atk_add_sensor(data, obj);
1151	}
1152
1153	err = data->voltage_count + data->temperature_count + data->fan_count;
1154
1155	ACPI_FREE(pack);
1156	return err;
1157}
1158
1159static int atk_init_attribute_groups(struct atk_data *data)
1160{
1161	struct device *dev = &data->acpi_dev->dev;
1162	struct atk_sensor_data *s;
1163	struct attribute **attrs;
1164	int i = 0;
1165	int len = (data->voltage_count + data->temperature_count
1166			+ data->fan_count) * 4 + 1;
 
 
 
 
 
 
 
 
 
 
 
 
1167
1168	attrs = devm_kcalloc(dev, len, sizeof(struct attribute *), GFP_KERNEL);
1169	if (!attrs)
1170		return -ENOMEM;
 
 
 
 
 
1171
1172	list_for_each_entry(s, &data->sensor_list, list) {
1173		attrs[i++] = &s->input_attr.attr;
1174		attrs[i++] = &s->label_attr.attr;
1175		attrs[i++] = &s->limit1_attr.attr;
1176		attrs[i++] = &s->limit2_attr.attr;
1177	}
 
 
1178
1179	data->attr_group.attrs = attrs;
1180	data->attr_groups[0] = &data->attr_group;
 
 
1181
1182	return 0;
 
 
 
1183}
1184
1185static int atk_register_hwmon(struct atk_data *data)
1186{
1187	struct device *dev = &data->acpi_dev->dev;
 
1188
1189	dev_dbg(dev, "registering hwmon device\n");
1190	data->hwmon_dev = hwmon_device_register_with_groups(dev, "atk0110",
1191							    data,
1192							    data->attr_groups);
1193
1194	return PTR_ERR_OR_ZERO(data->hwmon_dev);
 
 
 
 
 
 
 
 
 
 
1195}
1196
1197static int atk_probe_if(struct atk_data *data)
1198{
1199	struct device *dev = &data->acpi_dev->dev;
1200	acpi_handle ret;
1201	acpi_status status;
1202	int err = 0;
1203
1204	/* RTMP: read temperature */
1205	status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_TMP, &ret);
1206	if (ACPI_SUCCESS(status))
1207		data->rtmp_handle = ret;
1208	else
1209		dev_dbg(dev, "method " METHOD_OLD_READ_TMP " not found: %s\n",
1210				acpi_format_exception(status));
1211
1212	/* RVLT: read voltage */
1213	status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_VLT, &ret);
1214	if (ACPI_SUCCESS(status))
1215		data->rvlt_handle = ret;
1216	else
1217		dev_dbg(dev, "method " METHOD_OLD_READ_VLT " not found: %s\n",
1218				acpi_format_exception(status));
1219
1220	/* RFAN: read fan status */
1221	status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_FAN, &ret);
1222	if (ACPI_SUCCESS(status))
1223		data->rfan_handle = ret;
1224	else
1225		dev_dbg(dev, "method " METHOD_OLD_READ_FAN " not found: %s\n",
1226				acpi_format_exception(status));
1227
1228	/* Enumeration */
1229	status = acpi_get_handle(data->atk_handle, METHOD_ENUMERATE, &ret);
1230	if (ACPI_SUCCESS(status))
1231		data->enumerate_handle = ret;
1232	else
1233		dev_dbg(dev, "method " METHOD_ENUMERATE " not found: %s\n",
1234				acpi_format_exception(status));
1235
1236	/* De-multiplexer (read) */
1237	status = acpi_get_handle(data->atk_handle, METHOD_READ, &ret);
1238	if (ACPI_SUCCESS(status))
1239		data->read_handle = ret;
1240	else
1241		dev_dbg(dev, "method " METHOD_READ " not found: %s\n",
1242				acpi_format_exception(status));
1243
1244	/* De-multiplexer (write) */
1245	status = acpi_get_handle(data->atk_handle, METHOD_WRITE, &ret);
1246	if (ACPI_SUCCESS(status))
1247		data->write_handle = ret;
1248	else
1249		dev_dbg(dev, "method " METHOD_WRITE " not found: %s\n",
1250				 acpi_format_exception(status));
1251
1252	/*
1253	 * Check for hwmon methods: first check "old" style methods; note that
1254	 * both may be present: in this case we stick to the old interface;
1255	 * analysis of multiple DSDTs indicates that when both interfaces
1256	 * are present the new one (GGRP/GITM) is not functional.
1257	 */
1258	if (new_if)
1259		dev_info(dev, "Overriding interface detection\n");
1260	if (data->rtmp_handle &&
1261			data->rvlt_handle && data->rfan_handle && !new_if)
1262		data->old_interface = true;
1263	else if (data->enumerate_handle && data->read_handle &&
1264			data->write_handle)
1265		data->old_interface = false;
1266	else
1267		err = -ENODEV;
1268
1269	return err;
1270}
1271
1272static int atk_add(struct acpi_device *device)
1273{
1274	acpi_status ret;
1275	int err;
1276	struct acpi_buffer buf;
1277	union acpi_object *obj;
1278	struct atk_data *data;
1279
1280	dev_dbg(&device->dev, "adding...\n");
1281
1282	data = devm_kzalloc(&device->dev, sizeof(*data), GFP_KERNEL);
1283	if (!data)
1284		return -ENOMEM;
1285
1286	data->acpi_dev = device;
1287	data->atk_handle = device->handle;
1288	INIT_LIST_HEAD(&data->sensor_list);
1289	data->disable_ec = false;
1290
1291	buf.length = ACPI_ALLOCATE_BUFFER;
1292	ret = acpi_evaluate_object_typed(data->atk_handle, BOARD_ID, NULL,
1293			&buf, ACPI_TYPE_PACKAGE);
1294	if (ret != AE_OK) {
1295		dev_dbg(&device->dev, "atk: method MBIF not found\n");
1296	} else {
1297		obj = buf.pointer;
1298		if (obj->package.count >= 2) {
1299			union acpi_object *id = &obj->package.elements[1];
1300			if (id->type == ACPI_TYPE_STRING)
1301				dev_dbg(&device->dev, "board ID = %s\n",
1302					id->string.pointer);
1303		}
1304		ACPI_FREE(buf.pointer);
1305	}
1306
1307	err = atk_probe_if(data);
1308	if (err) {
1309		dev_err(&device->dev, "No usable hwmon interface detected\n");
1310		goto out;
1311	}
1312
1313	if (data->old_interface) {
1314		dev_dbg(&device->dev, "Using old hwmon interface\n");
1315		err = atk_enumerate_old_hwmon(data);
1316	} else {
1317		dev_dbg(&device->dev, "Using new hwmon interface\n");
1318		err = atk_enumerate_new_hwmon(data);
1319	}
1320	if (err < 0)
1321		goto out;
1322	if (err == 0) {
1323		dev_info(&device->dev,
1324			 "No usable sensor detected, bailing out\n");
1325		err = -ENODEV;
1326		goto out;
1327	}
1328
1329	err = atk_init_attribute_groups(data);
1330	if (err)
1331		goto out;
1332	err = atk_register_hwmon(data);
1333	if (err)
1334		goto out;
1335
1336	atk_debugfs_init(data);
1337
1338	device->driver_data = data;
1339	return 0;
 
 
1340out:
1341	if (data->disable_ec)
1342		atk_ec_ctl(data, 0);
 
1343	return err;
1344}
1345
1346static void atk_remove(struct acpi_device *device)
1347{
1348	struct atk_data *data = device->driver_data;
1349	dev_dbg(&device->dev, "removing...\n");
1350
1351	device->driver_data = NULL;
1352
1353	atk_debugfs_cleanup(data);
1354
 
 
1355	hwmon_device_unregister(data->hwmon_dev);
1356
1357	if (data->disable_ec) {
1358		if (atk_ec_ctl(data, 0))
1359			dev_err(&device->dev, "Failed to disable EC\n");
1360	}
 
 
 
 
1361}
1362
1363static int __init atk0110_init(void)
1364{
1365	int ret;
1366
1367	/* Make sure it's safe to access the device through ACPI */
1368	if (!acpi_resources_are_enforced()) {
1369		pr_err("Resources not safely usable due to acpi_enforce_resources kernel parameter\n");
1370		return -EBUSY;
1371	}
1372
1373	if (dmi_check_system(atk_force_new_if))
1374		new_if = true;
1375
1376	ret = acpi_bus_register_driver(&atk_driver);
1377	if (ret)
1378		pr_info("acpi_bus_register_driver failed: %d\n", ret);
1379
1380	return ret;
1381}
1382
1383static void __exit atk0110_exit(void)
1384{
1385	acpi_bus_unregister_driver(&atk_driver);
1386}
1387
1388module_init(atk0110_init);
1389module_exit(atk0110_exit);
1390
1391MODULE_DESCRIPTION("ASUS ATK0110 driver");
1392MODULE_LICENSE("GPL");