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

Commit 39079695 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:
  ACPI / PM: Do not save/restore NVS on Sony Vaio VGN-NW130D
  ACPI/HEST: adjust section selection
  ACPI: eliminate unused variable warning for !ACPI_SLEEP
  ACPI/PNP: avoid section mismatch warning
  ACPI thermal: remove two unused functions
  ACPI: fix a section mismatch
  ACPI, APEI, use raw spinlock in ERST
  ACPI: video: fix build for CONFIG_ACPI=n
  ACPI: video: fix build for VIDEO_OUTPUT_CONTROL=n
  ACPI: fix allowing to add/remove multiple _OSI strings
  acpi: fix _OSI string setup regression
  ACPI: EC: Add another dmi match entry for MSI hardware
  ACPI battery: update status upon sysfs query
  ACPI ac: update AC status upon sysfs query
  ACPI / PM: Do not refcount power resources that can't be turned on
  ACPI / PM: Check device state before refcounting power resources
parents 66ef6aa6 23437b5c
Loading
Loading
Loading
Loading
+29 −17
Original line number Diff line number Diff line
@@ -100,24 +100,7 @@ static const struct file_operations acpi_ac_fops = {
	.release = single_release,
};
#endif
static int get_ac_property(struct power_supply *psy,
			   enum power_supply_property psp,
			   union power_supply_propval *val)
{
	struct acpi_ac *ac = to_acpi_ac(psy);
	switch (psp) {
	case POWER_SUPPLY_PROP_ONLINE:
		val->intval = ac->state;
		break;
	default:
		return -EINVAL;
	}
	return 0;
}

static enum power_supply_property ac_props[] = {
	POWER_SUPPLY_PROP_ONLINE,
};
/* --------------------------------------------------------------------------
                               AC Adapter Management
   -------------------------------------------------------------------------- */
@@ -140,6 +123,35 @@ static int acpi_ac_get_state(struct acpi_ac *ac)
	return 0;
}

/* --------------------------------------------------------------------------
                            sysfs I/F
   -------------------------------------------------------------------------- */
static int get_ac_property(struct power_supply *psy,
			   enum power_supply_property psp,
			   union power_supply_propval *val)
{
	struct acpi_ac *ac = to_acpi_ac(psy);

	if (!ac)
		return -ENODEV;

	if (acpi_ac_get_state(ac))
		return -ENODEV;

	switch (psp) {
	case POWER_SUPPLY_PROP_ONLINE:
		val->intval = ac->state;
		break;
	default:
		return -EINVAL;
	}
	return 0;
}

static enum power_supply_property ac_props[] = {
	POWER_SUPPLY_PROP_ONLINE,
};

#ifdef CONFIG_ACPI_PROCFS_POWER
/* --------------------------------------------------------------------------
                              FS Interface (/proc)
+17 −17
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ static struct erst_erange {
 * It is used to provide exclusive accessing for ERST Error Log
 * Address Range too.
 */
static DEFINE_SPINLOCK(erst_lock);
static DEFINE_RAW_SPINLOCK(erst_lock);

static inline int erst_errno(int command_status)
{
@@ -421,9 +421,9 @@ ssize_t erst_get_record_count(void)
	if (erst_disable)
		return -ENODEV;

	spin_lock_irqsave(&erst_lock, flags);
	raw_spin_lock_irqsave(&erst_lock, flags);
	count = __erst_get_record_count();
	spin_unlock_irqrestore(&erst_lock, flags);
	raw_spin_unlock_irqrestore(&erst_lock, flags);

	return count;
}
@@ -456,9 +456,9 @@ int erst_get_next_record_id(u64 *record_id)
	if (erst_disable)
		return -ENODEV;

	spin_lock_irqsave(&erst_lock, flags);
	raw_spin_lock_irqsave(&erst_lock, flags);
	rc = __erst_get_next_record_id(record_id);
	spin_unlock_irqrestore(&erst_lock, flags);
	raw_spin_unlock_irqrestore(&erst_lock, flags);

	return rc;
}
@@ -624,17 +624,17 @@ int erst_write(const struct cper_record_header *record)
		return -EINVAL;

	if (erst_erange.attr & ERST_RANGE_NVRAM) {
		if (!spin_trylock_irqsave(&erst_lock, flags))
		if (!raw_spin_trylock_irqsave(&erst_lock, flags))
			return -EBUSY;
		rc = __erst_write_to_nvram(record);
		spin_unlock_irqrestore(&erst_lock, flags);
		raw_spin_unlock_irqrestore(&erst_lock, flags);
		return rc;
	}

	if (record->record_length > erst_erange.size)
		return -EINVAL;

	if (!spin_trylock_irqsave(&erst_lock, flags))
	if (!raw_spin_trylock_irqsave(&erst_lock, flags))
		return -EBUSY;
	memcpy(erst_erange.vaddr, record, record->record_length);
	rcd_erange = erst_erange.vaddr;
@@ -642,7 +642,7 @@ int erst_write(const struct cper_record_header *record)
	memcpy(&rcd_erange->persistence_information, "ER", 2);

	rc = __erst_write_to_storage(0);
	spin_unlock_irqrestore(&erst_lock, flags);
	raw_spin_unlock_irqrestore(&erst_lock, flags);

	return rc;
}
@@ -696,9 +696,9 @@ ssize_t erst_read(u64 record_id, struct cper_record_header *record,
	if (erst_disable)
		return -ENODEV;

	spin_lock_irqsave(&erst_lock, flags);
	raw_spin_lock_irqsave(&erst_lock, flags);
	len = __erst_read(record_id, record, buflen);
	spin_unlock_irqrestore(&erst_lock, flags);
	raw_spin_unlock_irqrestore(&erst_lock, flags);
	return len;
}
EXPORT_SYMBOL_GPL(erst_read);
@@ -719,20 +719,20 @@ ssize_t erst_read_next(struct cper_record_header *record, size_t buflen)
	if (erst_disable)
		return -ENODEV;

	spin_lock_irqsave(&erst_lock, flags);
	raw_spin_lock_irqsave(&erst_lock, flags);
	rc = __erst_get_next_record_id(&record_id);
	if (rc) {
		spin_unlock_irqrestore(&erst_lock, flags);
		raw_spin_unlock_irqrestore(&erst_lock, flags);
		return rc;
	}
	/* no more record */
	if (record_id == APEI_ERST_INVALID_RECORD_ID) {
		spin_unlock_irqrestore(&erst_lock, flags);
		raw_spin_unlock_irqrestore(&erst_lock, flags);
		return 0;
	}

	len = __erst_read(record_id, record, buflen);
	spin_unlock_irqrestore(&erst_lock, flags);
	raw_spin_unlock_irqrestore(&erst_lock, flags);

	return len;
}
@@ -746,12 +746,12 @@ int erst_clear(u64 record_id)
	if (erst_disable)
		return -ENODEV;

	spin_lock_irqsave(&erst_lock, flags);
	raw_spin_lock_irqsave(&erst_lock, flags);
	if (erst_erange.attr & ERST_RANGE_NVRAM)
		rc = __erst_clear_from_nvram(record_id);
	else
		rc = __erst_clear_from_storage(record_id);
	spin_unlock_irqrestore(&erst_lock, flags);
	raw_spin_unlock_irqrestore(&erst_lock, flags);

	return rc;
}
+5 −5
Original line number Diff line number Diff line
@@ -46,9 +46,9 @@ EXPORT_SYMBOL_GPL(hest_disable);

/* HEST table parsing */

static struct acpi_table_hest *hest_tab;
static struct acpi_table_hest *__read_mostly hest_tab;

static int hest_esrc_len_tab[ACPI_HEST_TYPE_RESERVED] = {
static const int hest_esrc_len_tab[ACPI_HEST_TYPE_RESERVED] = {
	[ACPI_HEST_TYPE_IA32_CHECK] = -1,	/* need further calculation */
	[ACPI_HEST_TYPE_IA32_CORRECTED_CHECK] = -1,
	[ACPI_HEST_TYPE_IA32_NMI] = sizeof(struct acpi_hest_ia_nmi),
@@ -126,7 +126,7 @@ struct ghes_arr {
	unsigned int count;
};

static int hest_parse_ghes_count(struct acpi_hest_header *hest_hdr, void *data)
static int __init hest_parse_ghes_count(struct acpi_hest_header *hest_hdr, void *data)
{
	int *count = data;

@@ -135,7 +135,7 @@ static int hest_parse_ghes_count(struct acpi_hest_header *hest_hdr, void *data)
	return 0;
}

static int hest_parse_ghes(struct acpi_hest_header *hest_hdr, void *data)
static int __init hest_parse_ghes(struct acpi_hest_header *hest_hdr, void *data)
{
	struct platform_device *ghes_dev;
	struct ghes_arr *ghes_arr = data;
@@ -165,7 +165,7 @@ err:
	return rc;
}

static int hest_ghes_dev_register(unsigned int ghes_count)
static int __init hest_ghes_dev_register(unsigned int ghes_count)
{
	int rc, i;
	struct ghes_arr ghes_arr;
+5 −0
Original line number Diff line number Diff line
@@ -130,6 +130,8 @@ struct acpi_battery {
	unsigned long flags;
};

static int acpi_battery_update(struct acpi_battery *battery);

#define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);

inline int acpi_battery_present(struct acpi_battery *battery)
@@ -184,6 +186,9 @@ static int acpi_battery_get_property(struct power_supply *psy,
	int ret = 0;
	struct acpi_battery *battery = to_acpi_battery(psy);

	if (acpi_battery_update(battery))
		return -ENODEV;

	if (acpi_battery_present(battery)) {
		/* run battery update only if it is present */
		acpi_battery_get_state(battery);
+3 −0
Original line number Diff line number Diff line
@@ -934,6 +934,9 @@ static struct dmi_system_id __initdata ec_dmi_table[] = {
	ec_flag_msi, "MSI hardware", {
	DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-Star")}, NULL},
	{
	ec_flag_msi, "MSI hardware", {
	DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-STAR")}, NULL},
	{
	ec_validate_ecdt, "ASUS hardware", {
	DMI_MATCH(DMI_BIOS_VENDOR, "ASUS") }, NULL},
	{},
Loading