Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7553a86 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branch 'acpi-fixes' into fixes

* acpi-fixes:
  ACPI / glue: Drop .find_bridge() callback from struct acpi_bus_type
  ACPI / glue: Add .match() callback to struct acpi_bus_type
  ACPI / porocessor: Beautify code, pr->id is u32 which is never < 0
  ACPI / processor: Remove redundant NULL check before kfree
  ACPI / Sleep: Avoid interleaved message on errors
parents 6dbe51c2 92414481
Loading
Loading
Loading
Loading
+9 −46
Original line number Diff line number Diff line
@@ -36,12 +36,11 @@ int register_acpi_bus_type(struct acpi_bus_type *type)
{
	if (acpi_disabled)
		return -ENODEV;
	if (type && type->bus && type->find_device) {
	if (type && type->match && type->find_device) {
		down_write(&bus_type_sem);
		list_add_tail(&type->list, &bus_type_list);
		up_write(&bus_type_sem);
		printk(KERN_INFO PREFIX "bus type %s registered\n",
		       type->bus->name);
		printk(KERN_INFO PREFIX "bus type %s registered\n", type->name);
		return 0;
	}
	return -ENODEV;
@@ -56,24 +55,21 @@ int unregister_acpi_bus_type(struct acpi_bus_type *type)
		down_write(&bus_type_sem);
		list_del_init(&type->list);
		up_write(&bus_type_sem);
		printk(KERN_INFO PREFIX "ACPI bus type %s unregistered\n",
		       type->bus->name);
		printk(KERN_INFO PREFIX "bus type %s unregistered\n",
		       type->name);
		return 0;
	}
	return -ENODEV;
}
EXPORT_SYMBOL_GPL(unregister_acpi_bus_type);

static struct acpi_bus_type *acpi_get_bus_type(struct bus_type *type)
static struct acpi_bus_type *acpi_get_bus_type(struct device *dev)
{
	struct acpi_bus_type *tmp, *ret = NULL;

	if (!type)
		return NULL;

	down_read(&bus_type_sem);
	list_for_each_entry(tmp, &bus_type_list, list) {
		if (tmp->bus == type) {
		if (tmp->match(dev)) {
			ret = tmp;
			break;
		}
@@ -82,22 +78,6 @@ static struct acpi_bus_type *acpi_get_bus_type(struct bus_type *type)
	return ret;
}

static int acpi_find_bridge_device(struct device *dev, acpi_handle * handle)
{
	struct acpi_bus_type *tmp;
	int ret = -ENODEV;

	down_read(&bus_type_sem);
	list_for_each_entry(tmp, &bus_type_list, list) {
		if (tmp->find_bridge && !tmp->find_bridge(dev, handle)) {
			ret = 0;
			break;
		}
	}
	up_read(&bus_type_sem);
	return ret;
}

static acpi_status do_acpi_find_child(acpi_handle handle, u32 lvl_not_used,
				      void *addr_p, void **ret_p)
{
@@ -261,29 +241,12 @@ static int acpi_unbind_one(struct device *dev)

static int acpi_platform_notify(struct device *dev)
{
	struct acpi_bus_type *type;
	struct acpi_bus_type *type = acpi_get_bus_type(dev);
	acpi_handle handle;
	int ret;

	ret = acpi_bind_one(dev, NULL);
	if (ret && (!dev->bus || !dev->parent)) {
		/* bridge devices genernally haven't bus or parent */
		ret = acpi_find_bridge_device(dev, &handle);
		if (!ret) {
			ret = acpi_bind_one(dev, handle);
			if (ret)
				goto out;
		}
	}

	type = acpi_get_bus_type(dev->bus);
	if (ret) {
		if (!type || !type->find_device) {
			DBG("No ACPI bus support for %s\n", dev_name(dev));
			ret = -EINVAL;
			goto out;
		}

	if (ret && type) {
		ret = type->find_device(dev, &handle);
		if (ret) {
			DBG("Unable to get handle for %s\n", dev_name(dev));
@@ -316,7 +279,7 @@ static int acpi_platform_notify_remove(struct device *dev)
{
	struct acpi_bus_type *type;

	type = acpi_get_bus_type(dev->bus);
	type = acpi_get_bus_type(dev);
	if (type && type->cleanup)
		type->cleanup(dev);

+1 −2
Original line number Diff line number Diff line
@@ -158,7 +158,6 @@ static int map_mat_entry(acpi_handle handle, int type, u32 acpi_id)
	}

exit:
	if (buffer.pointer)
	kfree(buffer.pointer);
	return apic_id;
}
+1 −1
Original line number Diff line number Diff line
@@ -559,7 +559,7 @@ static int __cpuinit acpi_processor_add(struct acpi_device *device)
		return 0;
#endif

	BUG_ON((pr->id >= nr_cpu_ids) || (pr->id < 0));
	BUG_ON(pr->id >= nr_cpu_ids);

	/*
	 * Buggy BIOS check
+11 −5
Original line number Diff line number Diff line
@@ -599,7 +599,6 @@ static void acpi_sleep_suspend_setup(void)
		status = acpi_get_sleep_type_data(i, &type_a, &type_b);
		if (ACPI_SUCCESS(status)) {
			sleep_states[i] = 1;
			pr_cont(" S%d", i);
		}
	}

@@ -742,7 +741,6 @@ static void acpi_sleep_hibernate_setup(void)
	hibernation_set_ops(old_suspend_ordering ?
			&acpi_hibernation_ops_old : &acpi_hibernation_ops);
	sleep_states[ACPI_STATE_S4] = 1;
	pr_cont(KERN_CONT " S4");
	if (nosigcheck)
		return;

@@ -788,6 +786,9 @@ int __init acpi_sleep_init(void)
{
	acpi_status status;
	u8 type_a, type_b;
	char supported[ACPI_S_STATE_COUNT * 3 + 1];
	char *pos = supported;
	int i;

	if (acpi_disabled)
		return 0;
@@ -795,7 +796,6 @@ int __init acpi_sleep_init(void)
	acpi_sleep_dmi_check();

	sleep_states[ACPI_STATE_S0] = 1;
	pr_info(PREFIX "(supports S0");

	acpi_sleep_suspend_setup();
	acpi_sleep_hibernate_setup();
@@ -803,11 +803,17 @@ int __init acpi_sleep_init(void)
	status = acpi_get_sleep_type_data(ACPI_STATE_S5, &type_a, &type_b);
	if (ACPI_SUCCESS(status)) {
		sleep_states[ACPI_STATE_S5] = 1;
		pr_cont(" S5");
		pm_power_off_prepare = acpi_power_off_prepare;
		pm_power_off = acpi_power_off;
	}
	pr_cont(")\n");

	supported[0] = 0;
	for (i = 0; i < ACPI_S_STATE_COUNT; i++) {
		if (sleep_states[i])
			pos += sprintf(pos, " S%d", i);
	}
	pr_info(PREFIX "(supports%s)\n", supported);

	/*
	 * Register the tts_notifier to reboot notifier list so that the _TTS
	 * object can also be evaluated when the system enters S5.
+1 −6
Original line number Diff line number Diff line
@@ -1144,13 +1144,8 @@ static int ata_acpi_find_device(struct device *dev, acpi_handle *handle)
		return -ENODEV;
}

static int ata_acpi_find_dummy(struct device *dev, acpi_handle *handle)
{
	return -ENODEV;
}

static struct acpi_bus_type ata_acpi_bus = {
	.find_bridge = ata_acpi_find_dummy,
	.name = "ATA",
	.find_device = ata_acpi_find_device,
};

Loading