mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
Merge branch 'i2c-mux/for-next' of https://github.com/peda-r/i2c-mux into i2c/for-4.15
This cycle has been real quiet for me. There's only the one trivial patch that somewhat simplifies DT parsing in the i2c-mux-reg driver.
This commit is contained in:
commit
3990bedea6
642 changed files with 5946 additions and 3634 deletions
|
|
@ -1178,12 +1178,44 @@ dev_put:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static bool __init iort_enable_acs(struct acpi_iort_node *iort_node)
|
||||
{
|
||||
if (iort_node->type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX) {
|
||||
struct acpi_iort_node *parent;
|
||||
struct acpi_iort_id_mapping *map;
|
||||
int i;
|
||||
|
||||
map = ACPI_ADD_PTR(struct acpi_iort_id_mapping, iort_node,
|
||||
iort_node->mapping_offset);
|
||||
|
||||
for (i = 0; i < iort_node->mapping_count; i++, map++) {
|
||||
if (!map->output_reference)
|
||||
continue;
|
||||
|
||||
parent = ACPI_ADD_PTR(struct acpi_iort_node,
|
||||
iort_table, map->output_reference);
|
||||
/*
|
||||
* If we detect a RC->SMMU mapping, make sure
|
||||
* we enable ACS on the system.
|
||||
*/
|
||||
if ((parent->type == ACPI_IORT_NODE_SMMU) ||
|
||||
(parent->type == ACPI_IORT_NODE_SMMU_V3)) {
|
||||
pci_request_acs();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void __init iort_init_platform_devices(void)
|
||||
{
|
||||
struct acpi_iort_node *iort_node, *iort_end;
|
||||
struct acpi_table_iort *iort;
|
||||
struct fwnode_handle *fwnode;
|
||||
int i, ret;
|
||||
bool acs_enabled = false;
|
||||
|
||||
/*
|
||||
* iort_table and iort both point to the start of IORT table, but
|
||||
|
|
@ -1203,6 +1235,9 @@ static void __init iort_init_platform_devices(void)
|
|||
return;
|
||||
}
|
||||
|
||||
if (!acs_enabled)
|
||||
acs_enabled = iort_enable_acs(iort_node);
|
||||
|
||||
if ((iort_node->type == ACPI_IORT_NODE_SMMU) ||
|
||||
(iort_node->type == ACPI_IORT_NODE_SMMU_V3)) {
|
||||
|
||||
|
|
|
|||
|
|
@ -571,10 +571,9 @@ static int acpi_data_get_property_array(const struct acpi_device_data *data,
|
|||
* }
|
||||
* }
|
||||
*
|
||||
* Calling this function with index %2 return %-ENOENT and with index %3
|
||||
* returns the last entry. If the property does not contain any more values
|
||||
* %-ENODATA is returned. The NULL entry must be single integer and
|
||||
* preferably contain value %0.
|
||||
* Calling this function with index %2 or index %3 return %-ENOENT. If the
|
||||
* property does not contain any more values %-ENOENT is returned. The NULL
|
||||
* entry must be single integer and preferably contain value %0.
|
||||
*
|
||||
* Return: %0 on success, negative error code on failure.
|
||||
*/
|
||||
|
|
@ -590,11 +589,11 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
|
|||
|
||||
data = acpi_device_data_of_node(fwnode);
|
||||
if (!data)
|
||||
return -EINVAL;
|
||||
return -ENOENT;
|
||||
|
||||
ret = acpi_data_get_property(data, propname, ACPI_TYPE_ANY, &obj);
|
||||
if (ret)
|
||||
return ret;
|
||||
return ret == -EINVAL ? -ENOENT : -EINVAL;
|
||||
|
||||
/*
|
||||
* The simplest case is when the value is a single reference. Just
|
||||
|
|
@ -606,7 +605,7 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
|
|||
|
||||
ret = acpi_bus_get_device(obj->reference.handle, &device);
|
||||
if (ret)
|
||||
return ret;
|
||||
return ret == -ENODEV ? -EINVAL : ret;
|
||||
|
||||
args->adev = device;
|
||||
args->nargs = 0;
|
||||
|
|
@ -622,8 +621,10 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
|
|||
* The index argument is then used to determine which reference
|
||||
* the caller wants (along with the arguments).
|
||||
*/
|
||||
if (obj->type != ACPI_TYPE_PACKAGE || index >= obj->package.count)
|
||||
return -EPROTO;
|
||||
if (obj->type != ACPI_TYPE_PACKAGE)
|
||||
return -EINVAL;
|
||||
if (index >= obj->package.count)
|
||||
return -ENOENT;
|
||||
|
||||
element = obj->package.elements;
|
||||
end = element + obj->package.count;
|
||||
|
|
@ -635,7 +636,7 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
|
|||
ret = acpi_bus_get_device(element->reference.handle,
|
||||
&device);
|
||||
if (ret)
|
||||
return -ENODEV;
|
||||
return -EINVAL;
|
||||
|
||||
nargs = 0;
|
||||
element++;
|
||||
|
|
@ -649,11 +650,11 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
|
|||
else if (type == ACPI_TYPE_LOCAL_REFERENCE)
|
||||
break;
|
||||
else
|
||||
return -EPROTO;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (nargs > MAX_ACPI_REFERENCE_ARGS)
|
||||
return -EPROTO;
|
||||
return -EINVAL;
|
||||
|
||||
if (idx == index) {
|
||||
args->adev = device;
|
||||
|
|
@ -670,13 +671,13 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
|
|||
return -ENOENT;
|
||||
element++;
|
||||
} else {
|
||||
return -EPROTO;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
idx++;
|
||||
}
|
||||
|
||||
return -ENODATA;
|
||||
return -ENOENT;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__acpi_node_get_property_reference);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue