Lines Matching +full:entry +full:- +full:method
1 // SPDX-License-Identifier: GPL-2.0-or-later
29 #define DRIVER_NAME "msi-wmi-platform"
31 #define MSI_PLATFORM_GUID "ABBC0F6E-8EA1-11d1-00A0-C90629100000"
88 enum msi_wmi_platform_method method; member
128 if (obj->type != ACPI_TYPE_BUFFER) in msi_wmi_platform_parse_buffer()
129 return -ENOMSG; in msi_wmi_platform_parse_buffer()
131 if (obj->buffer.length != length) in msi_wmi_platform_parse_buffer()
132 return -EPROTO; in msi_wmi_platform_parse_buffer()
134 if (!obj->buffer.pointer[0]) in msi_wmi_platform_parse_buffer()
135 return -EIO; in msi_wmi_platform_parse_buffer()
137 memcpy(output, obj->buffer.pointer, obj->buffer.length); in msi_wmi_platform_parse_buffer()
143 enum msi_wmi_platform_method method, u8 *input, in msi_wmi_platform_query() argument
156 return -EINVAL; in msi_wmi_platform_query()
159 * The ACPI control method responsible for handling the WMI method calls in msi_wmi_platform_query()
160 * is not thread-safe. Because of this we have to do the locking ourself. in msi_wmi_platform_query()
162 scoped_guard(mutex, &data->wmi_lock) { in msi_wmi_platform_query()
163 status = wmidev_evaluate_method(data->wdev, 0x0, method, &in, &out); in msi_wmi_platform_query()
165 return -EIO; in msi_wmi_platform_query()
170 return -ENODATA; in msi_wmi_platform_query()
230 struct seq_file *seq = fp->private_data; in msi_wmi_platform_write()
231 struct msi_wmi_platform_debugfs_data *data = seq->private; in msi_wmi_platform_write()
237 return -EINVAL; in msi_wmi_platform_write()
240 if (length != data->length) in msi_wmi_platform_write()
241 return -EINVAL; in msi_wmi_platform_write()
247 down_write(&data->buffer_lock); in msi_wmi_platform_write()
248 ret = msi_wmi_platform_query(data->data, data->method, payload, data->length, data->buffer, in msi_wmi_platform_write()
249 data->length); in msi_wmi_platform_write()
250 up_write(&data->buffer_lock); in msi_wmi_platform_write()
260 struct msi_wmi_platform_debugfs_data *data = seq->private; in msi_wmi_platform_show()
263 down_read(&data->buffer_lock); in msi_wmi_platform_show()
264 ret = seq_write(seq, data->buffer, data->length); in msi_wmi_platform_show()
265 up_read(&data->buffer_lock); in msi_wmi_platform_show()
272 struct msi_wmi_platform_debugfs_data *data = inode->i_private; in msi_wmi_platform_open()
275 return single_open_size(fp, msi_wmi_platform_show, data, data->length + 1); in msi_wmi_platform_open()
295 const char *name, enum msi_wmi_platform_method method) in msi_wmi_platform_debugfs_add() argument
298 struct dentry *entry; in msi_wmi_platform_debugfs_add() local
300 data = devm_kzalloc(&drvdata->wdev->dev, sizeof(*data), GFP_KERNEL); in msi_wmi_platform_debugfs_add()
304 data->data = drvdata; in msi_wmi_platform_debugfs_add()
305 data->method = method; in msi_wmi_platform_debugfs_add()
306 init_rwsem(&data->buffer_lock); in msi_wmi_platform_debugfs_add()
311 data->length = 32; in msi_wmi_platform_debugfs_add()
313 entry = debugfs_create_file(name, 0600, dir, data, &msi_wmi_platform_debugfs_fops); in msi_wmi_platform_debugfs_add()
314 if (IS_ERR(entry)) in msi_wmi_platform_debugfs_add()
315 devm_kfree(&drvdata->wdev->dev, data); in msi_wmi_platform_debugfs_add()
322 int ret, method; in msi_wmi_platform_debugfs_init() local
324 scnprintf(dir_name, ARRAY_SIZE(dir_name), "%s-%s", DRIVER_NAME, dev_name(&data->wdev->dev)); in msi_wmi_platform_debugfs_init()
330 ret = devm_add_action_or_reset(&data->wdev->dev, msi_wmi_platform_debugfs_remove, dir); in msi_wmi_platform_debugfs_init()
334 for (method = MSI_PLATFORM_GET_PACKAGE; method <= MSI_PLATFORM_GET_WMI; method++) in msi_wmi_platform_debugfs_init()
335 msi_wmi_platform_debugfs_add(data, dir, msi_wmi_platform_debugfs_names[method - 1], in msi_wmi_platform_debugfs_init()
336 method); in msi_wmi_platform_debugfs_init()
343 hdev = devm_hwmon_device_register_with_info(&data->wdev->dev, "msi_wmi_platform", data, in msi_wmi_platform_hwmon_init()
363 dev_dbg(&data->wdev->dev, "EC RAM version %lu.%lu\n", in msi_wmi_platform_ec_init()
366 dev_dbg(&data->wdev->dev, "EC firmware version %.28s\n", in msi_wmi_platform_ec_init()
371 return -ENODEV; in msi_wmi_platform_ec_init()
373 dev_warn(&data->wdev->dev, "Loading on a non-Tigerlake platform\n"); in msi_wmi_platform_ec_init()
390 dev_dbg(&data->wdev->dev, "WMI interface version %u.%u\n", in msi_wmi_platform_init()
396 return -ENODEV; in msi_wmi_platform_init()
398 dev_warn(&data->wdev->dev, in msi_wmi_platform_init()
412 data = devm_kzalloc(&wdev->dev, sizeof(*data), GFP_KERNEL); in msi_wmi_platform_probe()
414 return -ENOMEM; in msi_wmi_platform_probe()
416 data->wdev = wdev; in msi_wmi_platform_probe()
417 dev_set_drvdata(&wdev->dev, data); in msi_wmi_platform_probe()
419 ret = devm_mutex_init(&wdev->dev, &data->wmi_lock); in msi_wmi_platform_probe()