Lines Matching +full:integer +full:- +full:n
1 // SPDX-License-Identifier: GPL-2.0-only
86 struct acpi_smbus_cmi *smbus_cmi = adap->algo_data; in acpi_smbus_cmi_access()
97 dev_dbg(&adap->dev, "access size: %d %s\n", size, in acpi_smbus_cmi_access()
105 mt_params[3].integer.value = 0; in acpi_smbus_cmi_access()
107 mt_params[4].integer.value = 0; in acpi_smbus_cmi_access()
115 mt_params[3].integer.value = 0; in acpi_smbus_cmi_access()
117 mt_params[4].integer.value = 0; in acpi_smbus_cmi_access()
127 mt_params[3].integer.value = 1; in acpi_smbus_cmi_access()
129 mt_params[4].integer.value = data->byte; in acpi_smbus_cmi_access()
137 mt_params[3].integer.value = 2; in acpi_smbus_cmi_access()
139 mt_params[4].integer.value = data->word; in acpi_smbus_cmi_access()
146 len = data->block[0]; in acpi_smbus_cmi_access()
148 return -EINVAL; in acpi_smbus_cmi_access()
150 mt_params[3].integer.value = len; in acpi_smbus_cmi_access()
153 mt_params[4].buffer.pointer = data->block + 1; in acpi_smbus_cmi_access()
158 dev_warn(&adap->dev, "Unsupported transaction %d\n", size); in acpi_smbus_cmi_access()
159 return -EOPNOTSUPP; in acpi_smbus_cmi_access()
164 method = smbus_cmi->methods->mt_sbr; in acpi_smbus_cmi_access()
168 method = smbus_cmi->methods->mt_sbw; in acpi_smbus_cmi_access()
174 mt_params[0].integer.value = protocol; in acpi_smbus_cmi_access()
176 mt_params[1].integer.value = addr; in acpi_smbus_cmi_access()
178 mt_params[2].integer.value = command; in acpi_smbus_cmi_access()
180 status = acpi_evaluate_object(smbus_cmi->handle, method, &input, in acpi_smbus_cmi_access()
183 acpi_handle_err(smbus_cmi->handle, in acpi_smbus_cmi_access()
184 "Failed to evaluate %s: %i\n", method, status); in acpi_smbus_cmi_access()
185 return -EIO; in acpi_smbus_cmi_access()
189 if (pkg && pkg->type == ACPI_TYPE_PACKAGE) in acpi_smbus_cmi_access()
190 obj = pkg->package.elements; in acpi_smbus_cmi_access()
192 acpi_handle_err(smbus_cmi->handle, "Invalid argument type\n"); in acpi_smbus_cmi_access()
193 result = -EIO; in acpi_smbus_cmi_access()
196 if (obj == NULL || obj->type != ACPI_TYPE_INTEGER) { in acpi_smbus_cmi_access()
197 acpi_handle_err(smbus_cmi->handle, "Invalid argument type\n"); in acpi_smbus_cmi_access()
198 result = -EIO; in acpi_smbus_cmi_access()
202 result = obj->integer.value; in acpi_smbus_cmi_access()
203 acpi_handle_debug(smbus_cmi->handle, "%s return status: %i\n", method, in acpi_smbus_cmi_access()
211 result = -EBUSY; in acpi_smbus_cmi_access()
214 result = -ETIMEDOUT; in acpi_smbus_cmi_access()
217 result = -ENXIO; in acpi_smbus_cmi_access()
220 result = -EIO; in acpi_smbus_cmi_access()
227 obj = pkg->package.elements + 1; in acpi_smbus_cmi_access()
228 if (obj->type != ACPI_TYPE_INTEGER) { in acpi_smbus_cmi_access()
229 acpi_handle_err(smbus_cmi->handle, "Invalid argument type\n"); in acpi_smbus_cmi_access()
230 result = -EIO; in acpi_smbus_cmi_access()
234 len = obj->integer.value; in acpi_smbus_cmi_access()
235 obj = pkg->package.elements + 2; in acpi_smbus_cmi_access()
240 if (obj->type != ACPI_TYPE_INTEGER) { in acpi_smbus_cmi_access()
241 acpi_handle_err(smbus_cmi->handle, in acpi_smbus_cmi_access()
242 "Invalid argument type\n"); in acpi_smbus_cmi_access()
243 result = -EIO; in acpi_smbus_cmi_access()
247 data->word = obj->integer.value; in acpi_smbus_cmi_access()
249 data->byte = obj->integer.value; in acpi_smbus_cmi_access()
252 if (obj->type != ACPI_TYPE_BUFFER) { in acpi_smbus_cmi_access()
253 acpi_handle_err(smbus_cmi->handle, in acpi_smbus_cmi_access()
254 "Invalid argument type\n"); in acpi_smbus_cmi_access()
255 result = -EIO; in acpi_smbus_cmi_access()
259 return -EPROTO; in acpi_smbus_cmi_access()
260 data->block[0] = len; in acpi_smbus_cmi_access()
261 memcpy(data->block + 1, obj->buffer.pointer, len); in acpi_smbus_cmi_access()
267 dev_dbg(&adap->dev, "Transaction status: %i\n", result); in acpi_smbus_cmi_access()
273 struct acpi_smbus_cmi *smbus_cmi = adapter->algo_data; in acpi_smbus_cmi_func()
276 ret = smbus_cmi->cap_read | smbus_cmi->cap_write ? in acpi_smbus_cmi_func()
279 ret |= smbus_cmi->cap_read ? in acpi_smbus_cmi_func()
285 ret |= smbus_cmi->cap_write ? in acpi_smbus_cmi_func()
304 struct acpi_handle *handle = smbus_cmi->handle; in acpi_smbus_cmi_add_cap()
308 if (!strcmp(name, smbus_cmi->methods->mt_info)) { in acpi_smbus_cmi_add_cap()
309 status = acpi_evaluate_object(smbus_cmi->handle, in acpi_smbus_cmi_add_cap()
310 smbus_cmi->methods->mt_info, in acpi_smbus_cmi_add_cap()
313 acpi_handle_err(handle, "Failed to evaluate %s: %i\n", in acpi_smbus_cmi_add_cap()
314 smbus_cmi->methods->mt_info, status); in acpi_smbus_cmi_add_cap()
315 return -EIO; in acpi_smbus_cmi_add_cap()
319 if (obj && obj->type == ACPI_TYPE_PACKAGE) in acpi_smbus_cmi_add_cap()
320 obj = obj->package.elements; in acpi_smbus_cmi_add_cap()
322 acpi_handle_err(handle, "Invalid argument type\n"); in acpi_smbus_cmi_add_cap()
324 return -EIO; in acpi_smbus_cmi_add_cap()
327 if (obj->type != ACPI_TYPE_INTEGER) { in acpi_smbus_cmi_add_cap()
328 acpi_handle_err(handle, "Invalid argument type\n"); in acpi_smbus_cmi_add_cap()
330 return -EIO; in acpi_smbus_cmi_add_cap()
332 acpi_handle_debug(handle, "SMBus CMI Version %x\n", in acpi_smbus_cmi_add_cap()
333 (int)obj->integer.value); in acpi_smbus_cmi_add_cap()
336 smbus_cmi->cap_info = 1; in acpi_smbus_cmi_add_cap()
337 } else if (!strcmp(name, smbus_cmi->methods->mt_sbr)) in acpi_smbus_cmi_add_cap()
338 smbus_cmi->cap_read = 1; in acpi_smbus_cmi_add_cap()
339 else if (!strcmp(name, smbus_cmi->methods->mt_sbw)) in acpi_smbus_cmi_add_cap()
340 smbus_cmi->cap_write = 1; in acpi_smbus_cmi_add_cap()
342 acpi_handle_debug(handle, "Unsupported CMI method: %s\n", name); in acpi_smbus_cmi_add_cap()
371 return -ENOMEM; in acpi_smbus_cmi_add()
373 smbus_cmi->handle = device->handle; in acpi_smbus_cmi_add()
376 device->driver_data = smbus_cmi; in acpi_smbus_cmi_add()
377 smbus_cmi->cap_info = 0; in acpi_smbus_cmi_add()
378 smbus_cmi->cap_read = 0; in acpi_smbus_cmi_add()
379 smbus_cmi->cap_write = 0; in acpi_smbus_cmi_add()
381 for (id = acpi_smbus_cmi_ids; id->id[0]; id++) in acpi_smbus_cmi_add()
382 if (!strcmp(id->id, acpi_device_hid(device))) in acpi_smbus_cmi_add()
383 smbus_cmi->methods = in acpi_smbus_cmi_add()
384 (struct smbus_methods_t *) id->driver_data; in acpi_smbus_cmi_add()
386 acpi_walk_namespace(ACPI_TYPE_METHOD, smbus_cmi->handle, 1, in acpi_smbus_cmi_add()
389 if (smbus_cmi->cap_info == 0) { in acpi_smbus_cmi_add()
390 ret = -ENODEV; in acpi_smbus_cmi_add()
394 snprintf(smbus_cmi->adapter.name, sizeof(smbus_cmi->adapter.name), in acpi_smbus_cmi_add()
397 smbus_cmi->adapter.owner = THIS_MODULE; in acpi_smbus_cmi_add()
398 smbus_cmi->adapter.algo = &acpi_smbus_cmi_algorithm; in acpi_smbus_cmi_add()
399 smbus_cmi->adapter.algo_data = smbus_cmi; in acpi_smbus_cmi_add()
400 smbus_cmi->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_SPD; in acpi_smbus_cmi_add()
401 smbus_cmi->adapter.dev.parent = &device->dev; in acpi_smbus_cmi_add()
403 ret = i2c_add_adapter(&smbus_cmi->adapter); in acpi_smbus_cmi_add()
405 dev_err(&device->dev, "Couldn't register adapter!\n"); in acpi_smbus_cmi_add()
413 device->driver_data = NULL; in acpi_smbus_cmi_add()
421 i2c_del_adapter(&smbus_cmi->adapter); in acpi_smbus_cmi_remove()
423 device->driver_data = NULL; in acpi_smbus_cmi_remove()